<?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>77916</bug_id>
          
          <creation_ts>2012-02-06 17:27:25 -0800</creation_ts>
          <short_desc>Update LayoutUnit usage in RenderMathML* classes</short_desc>
          <delta_ts>2012-03-12 16:00:07 -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>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>davidc</cc>
    
    <cc>dbarton</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>fred.wang</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>550449</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-06 17:27:25 -0800</bug_when>
    <thetext>Much of RenderMathML should use integers instead of LayoutUnits, as are currently specified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550451</commentid>
    <comment_count>1</comment_count>
      <attachid>125736</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-06 17:30:39 -0800</bug_when>
    <thetext>Created attachment 125736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551377</commentid>
    <comment_count>2</comment_count>
      <attachid>125736</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 14:16:41 -0800</bug_when>
    <thetext>Comment on attachment 125736
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Updating usage of LayoutUnits in the RenderMathML* classes. Many of these values
&gt; +        were LayoutUnits but should have been integers.

Please explain why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552454</commentid>
    <comment_count>3</comment_count>
      <attachid>126144</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-08 13:38:59 -0800</bug_when>
    <thetext>Created attachment 126144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552555</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-08 15:36:57 -0800</bug_when>
    <thetext>I want to review this, but I still dont&apos; feel like you&apos;ve expained why this is correct.  I have little doubt that it is, but these things should be obvious from teh ChangeLog or from some existing documentation about when we use LayoutUnit vs. Int. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553386</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-09 12:01:00 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I want to review this, but I still dont&apos; feel like you&apos;ve expained why this is correct.  I have little doubt that it is, but these things should be obvious from teh ChangeLog or from some existing documentation about when we use LayoutUnit vs. Int. :)

It&apos;s actually very difficult to make this clear before all the roundedIntPoint and pixelSnappedIntRect changes go in, so I&apos;m going to table this patch until this patch is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553441</commentid>
    <comment_count>6</comment_count>
      <attachid>126144</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-09 13:03:43 -0800</bug_when>
    <thetext>Comment on attachment 126144
Patch

Removing this from the review queue pending some more sub-pixel patches landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572998</commentid>
    <comment_count>7</comment_count>
      <attachid>130645</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-07 10:28:28 -0800</bug_when>
    <thetext>Created attachment 130645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573168</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-03-07 13:23:49 -0800</bug_when>
    <thetext>Perhaps I&apos;m uninformed, but I&apos;d have thought that the MathML code should be moving from ints to LayoutUnits, instead of the opposite direction. Even before iOS pinching and zooming, and perhaps even before the www existed, mathematics was routinely zoomed in e.g. MS Word&apos;s equation editor. Often greek letters and other delicate symbols are rendered, including at reduced point sizes in subscripts, superscripts, fractions, etc. I believe MathJax and MathPlayer both provide a contextmenu (right-click) command to zoom because of this. TeX&apos;s high quality has led people to have high expectations. Users will expect that when a fraction is zoomed (enlarged), the space above and below the bar will be visually identical, not rounded to CSS pixels. This is also true for the thickness of the fraction bar, sub/superscript placement, under/overscript placement, radical index placement, and general baseline position. Is it clear that even the height &amp; width of MathML elements should be ints? I think the closest analogy in WebKit would be a diagram using SVG or &lt;canvas&gt; with a lot of labelled nested parts at arbitrary positions, and that&apos;s often viewed at magnification. Would it be good to round all such x and y positions to an integer number of CSS pixels? I feel I&apos;m missing something basic here. Thanks in advance for any explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573187</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-07 13:36:49 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Perhaps I&apos;m uninformed, but I&apos;d have thought that the MathML code should be moving from ints to LayoutUnits, instead of the opposite direction. Even before iOS pinching and zooming, and perhaps even before the www existed, mathematics was routinely zoomed in e.g. MS Word&apos;s equation editor. Often greek letters and other delicate symbols are rendered, including at reduced point sizes in subscripts, superscripts, fractions, etc. I believe MathJax and MathPlayer both provide a contextmenu (right-click) command to zoom because of this. TeX&apos;s high quality has led people to have high expectations. Users will expect that when a fraction is zoomed (enlarged), the space above and below the bar will be visually identical, not rounded to CSS pixels. This is also true for the thickness of the fraction bar, sub/superscript placement, under/overscript placement, radical index placement, and general baseline position. Is it clear that even the height &amp; width of MathML elements should be ints? I think the closest analogy in WebKit would be a diagram using SVG or &lt;canvas&gt; with a lot of labelled nested parts at arbitrary positions, and that&apos;s often viewed at magnification. Would it be good to round all such x and y positions to an integer number of CSS pixels? I feel I&apos;m missing something basic here. Thanks in advance for any explanation.

Allow me to explain: with this patch, MathML rendering remains how it currently is regardless of the backend of LayoutUnits. It will still be able to be zoomed like all other web content. Directly improving MathML-specific sub-pixel rendering is desirable and -- after we convert LayoutUnits to a sub-pixel type -- quite possible. It&apos;s not, however, the primary goal of our conversion to sub-pixel layout, and the MathML rendering code will require further tweaking to get improved results. Once we&apos;ve completed the transition to sub-pixel LayoutUnits, I&apos;ll welcome patches that improve how MathML uses them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573209</commentid>
    <comment_count>10</comment_count>
      <attachid>130645</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-07 13:57:41 -0800</bug_when>
    <thetext>Comment on attachment 130645
Patch

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

Dave Barton maybe you have an opinion on this change.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Subpixel positioning offers little benefit for MathML, and can result in
&gt; +        unwanted rounding in highly nested contexts. Instead, we use pixel snapping
&gt; +        to ensure things continue to look as they did.

I am in the same situation as Eric here. I don&apos;t think I do understand this comment, yet it is super important to properly review this patch.

AFAICT a lot of MathML code uses int so assumes we are doing pixels based manipulation and thus need this conversion is needed to avoid breaking the rendering in non-trivial ways. This looks like this is done by design and not really a limitation of MathML itself.  I understand the short-term goal of not breaking rendering in MathML but I wonder if this is such a good middle-term change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573252</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-03-07 14:37:39 -0800</bug_when>
    <thetext>Levi: I understand that MathML could still be zoomed, my question is what&apos;s the best way for it to look after it is zoomed? Another way to say it is that I&apos;m trying to do MathML tweaking in general to get improved results, as you say. Why is it necessary or good to use ints intead of LayoutUnits at this time? Are you suggesting that we land this patch, and then I submit a patch that undoes most or all of the changes here, as well as converting some other ints to LayoutUnits in the MathML code? Should I do this even for MathML element widths and heights? I am trying to explain MathML usage, and then defer to your design and knowledge. Thanks!

Julien: Thanks, your comment helps me a lot. I had submitted https://bugs.webkit.org/show_bug.cgi?id=78310 &amp; its patch a while ago which is basically the opposite of this bug &amp; patch. If we can agree on what is desired, I can go through the MathML code and make sure it doesn&apos;t rely on things just being ints, if you want me to. Or we could do this patch first &amp; then its opposite. In general, I think we should move toward what we think is best and not be too paranoid about accidentally changing some existing behavior that a user may be relying on. Chrome doesn&apos;t even turn on MathML, and even in Safari/etc. it&apos;s so bad that no major MathML site uses it. (The few libraries &amp; sites that use MathML much do browser sniffing and turn it off in Safari/WebKit.)

&gt; Source/WebCore/ChangeLog:10
&gt; +        Subpixel positioning offers little benefit for MathML, and can result in
&gt; +        unwanted rounding in highly nested contexts. Instead, we use pixel snapping
&gt; +        to ensure things continue to look as they did.

Unless I misunderstand, I think I disagree completely with this. Sub-CSS-pixel positioning in MathML seems ideal, especially for the frequent case of zooming. Can you give an example of the unwanted rounding you&apos;re trying to prevent in this case? I think we should prefer LayoutUnit instead of int in MathML elements since they may be highly nested, exactly to avoid this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573263</commentid>
    <comment_count>12</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-07 14:47:39 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Levi: I understand that MathML could still be zoomed, my question is what&apos;s the best way for it to look after it is zoomed? Another way to say it is that I&apos;m trying to do MathML tweaking in general to get improved results, as you say. Why is it necessary or good to use ints intead of LayoutUnits at this time? Are you suggesting that we land this patch, and then I submit a patch that undoes most or all of the changes here, as well as converting some other ints to LayoutUnits in the MathML code? Should I do this even for MathML element widths and heights? I am trying to explain MathML usage, and then defer to your design and knowledge. Thanks!

There are 2 primary goals of the sub-pixel positioning project:
1) To enable a page designer to lay out a page at a higher than 1x resolution
2) To ensure that elements and groups of elements scale properly together (see attachment to https://bugs.webkit.org/show_bug.cgi?id=39884)

The gap between the line of a fraction and the text above and below is not related to this work. This can already be done properly in the current implementation.

My goal with this patch is to not regress current MathML performance, nor gate the transition to sub-pixel positioning on it. That is all. I invite you to check out the subpixellayout branch of WebKit to test your changes on and vette your changes to improve this there. In the meantime, going back and forth about this only delays the potential benefits.

&gt; 
&gt; Julien: Thanks, your comment helps me a lot. I had submitted https://bugs.webkit.org/show_bug.cgi?id=78310 &amp; its patch a while ago which is basically the opposite of this bug &amp; patch. If we can agree on what is desired, I can go through the MathML code and make sure it doesn&apos;t rely on things just being ints, if you want me to. Or we could do this patch first &amp; then its opposite. In general, I think we should move toward what we think is best and not be too paranoid about accidentally changing some existing behavior that a user may be relying on. Chrome doesn&apos;t even turn on MathML, and even in Safari/etc. it&apos;s so bad that no major MathML site uses it. (The few libraries &amp; sites that use MathML much do browser sniffing and turn it off in Safari/WebKit.)
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Subpixel positioning offers little benefit for MathML, and can result in
&gt; &gt; +        unwanted rounding in highly nested contexts. Instead, we use pixel snapping
&gt; &gt; +        to ensure things continue to look as they did.
&gt; 
&gt; Unless I misunderstand, I think I disagree completely with this. Sub-CSS-pixel positioning in MathML seems ideal, especially for the frequent case of zooming. Can you give an example of the unwanted rounding you&apos;re trying to prevent in this case? I think we should prefer LayoutUnit instead of int in MathML elements since they may be highly nested, exactly to avoid this problem.

I&apos;ll change this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573402</commentid>
    <comment_count>13</comment_count>
      <attachid>130733</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-07 17:29:26 -0800</bug_when>
    <thetext>Created attachment 130733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573592</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-03-07 21:58:56 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; There are 2 primary goals of the sub-pixel positioning project:
&gt; 1) To enable a page designer to lay out a page at a higher than 1x resolution
&gt; 2) To ensure that elements and groups of elements scale properly together (see attachment to https://bugs.webkit.org/show_bug.cgi?id=39884)

These will be great for MathML. Many measurements would be best at better than CSS-pixel accuracy, even when not zoomed, especially if device pixels are smaller. Also, math is often zoomed, where the win will be even bigger.

&gt; The gap between the line of a fraction and the text above and below is not related to this work. This can already be done properly in the current implementation.

Not if the code wants to specify that gap at better than CSS-pixel precision.

&gt; My goal with this patch is to not regress current MathML performance, nor gate the transition to sub-pixel positioning on it. That is all. I invite you to check out the subpixellayout branch of WebKit to test your changes on and vette your changes to improve this there. In the meantime, going back and forth about this only delays the potential benefits.

If you&apos;re saying the best way to proceed is to use int not LayoutUnit in many places in MathML for now, so you can land your patch without re-baselining all the MathML tests, and then we can switch lots of things back to LayoutUnit later, then I agree completely. I think Eric &amp; Julien &amp; I were all confused because we thought you were saying that int is better than LayoutUnit in many cases for MathML, which I disagree with.

&gt; &gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; &gt; +        Subpixel positioning offers little benefit for MathML, and can result in
&gt; &gt; &gt; +        unwanted rounding in highly nested contexts. Instead, we use pixel snapping
&gt; &gt; &gt; +        to ensure things continue to look as they did.
&gt; &gt; 
&gt; &gt; Unless I misunderstand, I think I disagree completely with this. Sub-CSS-pixel positioning in MathML seems ideal, especially for the frequent case of zooming. Can you give an example of the unwanted rounding you&apos;re trying to prevent in this case? I think we should prefer LayoutUnit instead of int in MathML elements since they may be highly nested, exactly to avoid this problem.
&gt; 
&gt; I&apos;ll change this comment.

Will you change the MathML entry in https://trac.webkit.org/wiki/LayoutUnit as well?

Look, if folks want to land this now and discuss MathML subpixel layout later, fine. But at some point we (I) need to know how to write code implementing MathML. The basic problems are exactly your 1) and 2) above. Specifically, in your https://trac.webkit.org/wiki/LayoutUnit design:

A. To avoid unwanted anti-aliasing, can we just round to device pixels instead of css pixels, e.g. at paint time? For things like thin lines in fractions when specified, is it better to just allow anti-aliasing?

B. &quot;The line box tree uses floats for layout and painting, we snap to pixels when positioning and sizing the line box tree to ensure that text isn’t drawn outside the pixel snapped bounds of its block.&quot; Would it be analogous to snap the &lt;math&gt; element to pixels, but not snap parts of nested MathML elements? (This would undo much of your submitted patch.)

C. For &quot;SVG Boxes in a RenderBlock&quot;, you specify &quot;subpixel, enclosed - Smallest possible subpixel rectangle representation guaranteed to contain subtree.&quot; Should MathML subtree boxes behave like this? It sounds better than CSS pixels to me.

It would help me at least to get guidance, ideally from both WebKit and MathML/LaTeX experts, on these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574063</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-08 12:15:26 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; There are 2 primary goals of the sub-pixel positioning project:
&gt; &gt; 1) To enable a page designer to lay out a page at a higher than 1x resolution
&gt; &gt; 2) To ensure that elements and groups of elements scale properly together (see attachment to https://bugs.webkit.org/show_bug.cgi?id=39884)
&gt; 
&gt; These will be great for MathML. Many measurements would be best at better than CSS-pixel accuracy, even when not zoomed, especially if device pixels are smaller. Also, math is often zoomed, where the win will be even bigger.
&gt; 
&gt; &gt; The gap between the line of a fraction and the text above and below is not related to this work. This can already be done properly in the current implementation.
&gt; 
&gt; Not if the code wants to specify that gap at better than CSS-pixel precision.
&gt; 
&gt; &gt; My goal with this patch is to not regress current MathML performance, nor gate the transition to sub-pixel positioning on it. That is all. I invite you to check out the subpixellayout branch of WebKit to test your changes on and vette your changes to improve this there. In the meantime, going back and forth about this only delays the potential benefits.
&gt; 
&gt; If you&apos;re saying the best way to proceed is to use int not LayoutUnit in many places in MathML for now, so you can land your patch without re-baselining all the MathML tests, and then we can switch lots of things back to LayoutUnit later, then I agree completely. 

This is essentially my goal, yes. I&apos;m not a MathML expert, and while I&apos;d love to see MathML fully benefit from sub-pixel layout, it&apos;s not the primary goal of this conversion. Once the change goes in, it&apos;ll be much easier for one more familiar with this code to make the relevant changes.

I think Eric &amp; Julien &amp; I were all confused because we thought you were saying that int is better than LayoutUnit in many cases for MathML, which I disagree with.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; &gt; &gt; +        Subpixel positioning offers little benefit for MathML, and can result in
&gt; &gt; &gt; &gt; +        unwanted rounding in highly nested contexts. Instead, we use pixel snapping
&gt; &gt; &gt; &gt; +        to ensure things continue to look as they did.
&gt; &gt; &gt; 
&gt; &gt; &gt; Unless I misunderstand, I think I disagree completely with this. Sub-CSS-pixel positioning in MathML seems ideal, especially for the frequent case of zooming. Can you give an example of the unwanted rounding you&apos;re trying to prevent in this case? I think we should prefer LayoutUnit instead of int in MathML elements since they may be highly nested, exactly to avoid this problem.
&gt; &gt; 
&gt; &gt; I&apos;ll change this comment.
&gt; 
&gt; Will you change the MathML entry in https://trac.webkit.org/wiki/LayoutUnit as well?
&gt; 
&gt; Look, if folks want to land this now and discuss MathML subpixel layout later, fine. But at some point we (I) need to know how to write code implementing MathML. The basic problems are exactly your 1) and 2) above. Specifically, in your https://trac.webkit.org/wiki/LayoutUnit design:
&gt; 
&gt; A. To avoid unwanted anti-aliasing, can we just round to device pixels instead of css pixels, e.g. at paint time? For things like thin lines in fractions when specified, is it better to just allow anti-aliasing?

You&apos;ll notice that borders remain integers in the Render Tree despite the conversion to sub-pixel. I&apos;m not sure what the best behavior is for MathML specifically, but for now, my focus is to keep things the same to avoid making things worse.

&gt; 
&gt; B. &quot;The line box tree uses floats for layout and painting, we snap to pixels when positioning and sizing the line box tree to ensure that text isn’t drawn outside the pixel snapped bounds of its block.&quot; Would it be analogous to snap the &lt;math&gt; element to pixels, but not snap parts of nested MathML elements? (This would undo much of your submitted patch.)

Again, changing how this behaves is not my focus in this patch. It&apos;s to maintain the current behavior.

&gt; 
&gt; C. For &quot;SVG Boxes in a RenderBlock&quot;, you specify &quot;subpixel, enclosed - Smallest possible subpixel rectangle representation guaranteed to contain subtree.&quot; Should MathML subtree boxes behave like this? It sounds better than CSS pixels to me.

SVG uses floats for layout and rendering. That sort of conversion would require a much larger change to the MathML rendering classes and is beyond the scope of this discussion.

&gt; 
&gt; It would help me at least to get guidance, ideally from both WebKit and MathML/LaTeX experts, on these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574096</commentid>
    <comment_count>16</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-03-08 12:40:55 -0800</bug_when>
    <thetext>Levi, thanks for all the clarification.

In https://trac.webkit.org/wiki/LayoutUnit, for MathML using pixels you say:

&quot;Using integers because subpixel positioning offers little benefit to MathML and can introduce uneven box sizes as they round.&quot;

Could you change this to something like &quot;Using integers for now to ease conversion.&quot;? I would love to analyze the uneven box sizes comment, but if you don&apos;t want to discuss its pros &amp; cons now then could you just remove it?

My only remaining quibble is in your ChangeLog comment you say &quot;using pixel snapping when communicating with other Rendering classes&quot;. By &quot;communicating&quot; do you just mean painting, or is there more to it? (I&apos;m not asking you to submit another patch, just give me a quick answer if possible.)

I&apos;m not a reviewer or committer of course, but these are my only remaining questions. After that the patch is fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574223</commentid>
    <comment_count>17</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-08 14:37:18 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Levi, thanks for all the clarification.
&gt; 
&gt; In https://trac.webkit.org/wiki/LayoutUnit, for MathML using pixels you say:
&gt; 
&gt; &quot;Using integers because subpixel positioning offers little benefit to MathML and can introduce uneven box sizes as they round.&quot;

Changed to &quot;Continuing to use pixels now for ease of conversion. MathML should be revisited to really take advantage of sub-pixel layout after these changes are in.&quot;

&gt; 
&gt; Could you change this to something like &quot;Using integers for now to ease conversion.&quot;? I would love to analyze the uneven box sizes comment, but if you don&apos;t want to discuss its pros &amp; cons now then could you just remove it?
&gt; 
&gt; My only remaining quibble is in your ChangeLog comment you say &quot;using pixel snapping when communicating with other Rendering classes&quot;. By &quot;communicating&quot; do you just mean painting, or is there more to it? (I&apos;m not asking you to submit another patch, just give me a quick answer if possible.)

I only mean in requesting its offsetHeight and width, where I&apos;m deliberately using the pixelSnapped values.

&gt; 
&gt; I&apos;m not a reviewer or committer of course, but these are my only remaining questions. After that the patch is fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574282</commentid>
    <comment_count>18</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-03-08 15:10:01 -0800</bug_when>
    <thetext>Excellent, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574331</commentid>
    <comment_count>19</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-08 15:47:46 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Excellent, thanks!

Thanks for your feedback.

Now, pinging reviewers :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576617</commentid>
    <comment_count>20</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-12 15:29:56 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; Excellent, thanks!
&gt; 
&gt; Thanks for your feedback.
&gt; 
&gt; Now, pinging reviewers :)

And again :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576629</commentid>
    <comment_count>21</comment_count>
      <attachid>130733</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-12 15:42:05 -0700</bug_when>
    <thetext>Comment on attachment 130733
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576634</commentid>
    <comment_count>22</comment_count>
      <attachid>130733</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-12 15:42:51 -0700</bug_when>
    <thetext>Comment on attachment 130733
Patch

Thanks Eric!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576657</commentid>
    <comment_count>23</comment_count>
      <attachid>130733</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 16:00:00 -0700</bug_when>
    <thetext>Comment on attachment 130733
Patch

Clearing flags on attachment: 130733

Committed r110496: &lt;http://trac.webkit.org/changeset/110496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576658</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 16:00:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125736</attachid>
            <date>2012-02-06 17:30:39 -0800</date>
            <delta_ts>2012-02-08 13:38:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77916-20120206173038.patch</filename>
            <type>text/plain</type>
            <size>16116</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjg4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAyLTA2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgTGF5b3V0VW5p
dCB1c2FnZSBpbiBSZW5kZXJNYXRoTUwqIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRpbmcgdXNhZ2Ugb2YgTGF5b3V0VW5pdHMgaW4g
dGhlIFJlbmRlck1hdGhNTCogY2xhc3Nlcy4gTWFueSBvZiB0aGVzZSB2YWx1ZXMKKyAgICAgICAg
d2VyZSBMYXlvdXRVbml0cyBidXQgc2hvdWxkIGhhdmUgYmVlbiBpbnRlZ2Vycy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MQmxvY2s6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZyYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEZyYWN0
aW9uOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MUm93OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MU3F1YXJlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVS
b290OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290Ojps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6bGF5b3V0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCk6CisKIDIwMTItMDItMDYg
IEdyZWdnIFRhdmFyZXMgIDxnbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIHdlYkdMRXJy
b3JzVG9Db25zb2xlRW5hYmxlZCBTZXR0aW5ncyBmbGFnCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkocmV2aXNp
b24gMTA2NDA1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBSZW5kZXJN
YXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJgogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBAIC05MCwyMiArOTAsMjIgQEAg
dm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJgogICAgIGluZm8uY29udGV4
dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGluZm8uY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAotICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgTGF5b3V0UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSks
IExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOwotICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpLCBMYXlvdXRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsg
b2Zmc2V0SGVpZ2h0KCkpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVkUGFp
bnRPZmZzZXQsIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3
TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAgaW5mby5j
b250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNl
dFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwgSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9m
ZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWln
aHQoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwg
YWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGluZm8uY29u
dGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsK
ICAgICAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9wKCk7CiAgICAgCiAgICAgaW5mby5j
b250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDApLCBDb2xvclNwYWNlU1JHQik7
CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCksIExheW91
dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQ
YWludE9mZnNldC55KCkgKyB0b3BTdGFydCkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUo
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgdG9wU3RhcnQpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdp
ZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpKTsKICAgICAKICAgICBp
bnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwg
SG9yaXpvbnRhbExpbmUpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
Q29sb3IoMjU1LCAwLCAwKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAotICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpLCBMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxp
bmUpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSwgSW50UG9pbnQo
YWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSArIGJhc2VsaW5lKSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERFQlVHX01BVEhfTEFZ
T1VUKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZyYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAkocmV2aXNpb24gMTA2NDA1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpw
YWludChQYWludEluCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgfHwhbV9saW5lVGhpY2tuZXNzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsT2Zmc2V0ID0gMDsKKyAg
ICBpbnQgdmVydGljYWxPZmZzZXQgPSAwOwogICAgIC8vIFRoZSBjaGlsZHJlbiBhcmUgYWx3YXlz
IFJlbmRlck1hdGhNTEJsb2NrIGluc3RhbmNlcwogICAgIGlmIChmaXJzdENoaWxkKCktPmlzUmVu
ZGVyTWF0aE1MQmxvY2soKSkgewogICAgICAgICBpbnQgYWRqdXN0Rm9yVGhpY2tuZXNzID0gbV9s
aW5lVGhpY2tuZXNzID4gMSA/IGludChtX2xpbmVUaGlja25lc3MgLyAyKSA6IDE7CkBAIC0xNTMs
NyArMTUzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbgogICAg
ICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpOyAgICAg
ICAgCiAgICAgfQogICAgIAotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0LnNl
dFkoYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB2ZXJ0aWNhbE9mZnNldCk7CiAgICAgCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCShyZXZpc2lvbiAxMDY0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTcgKzEw
NCwxNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYg
KCFmaXJzdENoaWxkKCkgfHwgIWxhc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigp
OworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0
aW9uKCk7CiAgICAgCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGluZGV4Qm94ID0gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSk7CiAgICAgCi0gICAgTGF5b3V0VW5pdCBtYXhI
ZWlnaHQgPSBpbmRleEJveC0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgaW50IG1heEhlaWdodCA9IGlu
ZGV4Qm94LT5vZmZzZXRIZWlnaHQoKTsKICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmb250IHNpemUg
aW4gcGl4ZWxzIGlmIHdlJ3JlIGVtcHR5CiAgICAgaWYgKCFtYXhIZWlnaHQpCiAgICAgICAgIG1h
eEhlaWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7Ci0gICAgTGF5b3V0VW5pdCB3aWR0aCA9IGlu
ZGV4Qm94LT5vZmZzZXRXaWR0aCgpOworICAgIGludCB3aWR0aCA9IGluZGV4Qm94LT5vZmZzZXRX
aWR0aCgpOwogICAgIAotICAgIExheW91dFVuaXQgaW5kZXhXaWR0aCA9IDA7CisgICAgaW50IGlu
ZGV4V2lkdGggPSAwOwogICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsK
ICAgICB3aGlsZSAoY3VycmVudCAhPSBsYXN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoY3VycmVu
dC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJN
YXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIHdpZHRoICs9IHRvcFN0YXJ0U2hpZnQ7
CiAgICAgCiAgICAgaW50IHJvb3RQYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdSb290UGFkZGluZyAq
IHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIExheW91dFVuaXQgc3RhcnQgPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSArIGluZGV4V2lkdGggKyBnUmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgp
LT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSByb290UGFkOworICAgIGludCBzdGFydCA9IGFkanVz
dGVkUGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0
eWxlKCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHJvb3RQYWQ7CiAgICAgYWRqdXN0ZWRQYWlu
dE9mZnNldC5zZXRZKGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgc3R5bGUoKS0+cGFkZGluZ1Rv
cCgpLnZhbHVlKCkgLSByb290UGFkKTsKICAgICAKICAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHN0
YXJ0IC0gdG9wU3RhcnRTaGlmdCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwpAQCAtMTk5LDcg
KzE5OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICBpZiAoIWZpcnN0
Q2hpbGQoKSB8fCAhbGFzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFVu
aXQgbWF4SGVpZ2h0ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSktPm9mZnNl
dEhlaWdodCgpOworICAgIGludCBtYXhIZWlnaHQgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGxh
c3RDaGlsZCgpKS0+b2Zmc2V0SGVpZ2h0KCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50ID0gbGFzdENoaWxkKCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY3VycmVudCkKQEAgLTIw
OSwxNyArMjA5LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICAgICAg
bWF4SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udFNpemUoKTsKICAgICAKICAgICAvLyBCYXNlIGhlaWdo
dCBhYm92ZSB3aGljaCB0aGUgc2hhcGUgb2YgdGhlIHJvb3QgY2hhbmdlcwotICAgIExheW91dFVu
aXQgdGhyZXNob2xkSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1RocmVzaG9sZEJh
c2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICBMYXlvdXRVbml0IHRvcFN0YXJ0
U2hpZnQgPSAwOworICAgIGludCB0aHJlc2hvbGRIZWlnaHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRV
bml0PihnVGhyZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIGlu
dCB0b3BTdGFydFNoaWZ0ID0gMDsKICAgICAKICAgICBpZiAobWF4SGVpZ2h0ID4gdGhyZXNob2xk
SGVpZ2h0ICYmIHRocmVzaG9sZEhlaWdodCkgewogICAgICAgICBmbG9hdCBzaGlmdCA9IChtYXhI
ZWlnaHQgLSB0aHJlc2hvbGRIZWlnaHQpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRocmVzaG9sZEhl
aWdodCk7CiAgICAgICAgIGlmIChzaGlmdCA+IDEuKQogICAgICAgICAgICAgc2hpZnQgPSAxLjBm
OwotICAgICAgICBMYXlvdXRVbml0IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0
PihzdHlsZSgpLT5mb250U2l6ZSgpICogZ1JhZGljYWxXaWR0aCk7Ci0gICAgICAgIHRvcFN0YXJ0
U2hpZnQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAq
IGZyb250V2lkdGggKiBzaGlmdCk7CisgICAgICAgIGludCBmcm9udFdpZHRoID0gc3RhdGljX2Nh
c3Q8aW50PihzdHlsZSgpLT5mb250U2l6ZSgpICogZ1JhZGljYWxXaWR0aCk7CisgICAgICAgIHRv
cFN0YXJ0U2hpZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICog
ZnJvbnRXaWR0aCAqIHNoaWZ0KTsKICAgICAgICAgCi0gICAgICAgIHN0eWxlKCktPnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290Qm90dG9tUGFkZGlu
ZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOworICAgICAgICBzdHlsZSgpLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGdSb290Qm90dG9tUGFkZGluZyAq
IHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOwogICAgIH0KICAgICAKICAgICAvLyBQb3Np
dGlvbmluZyBvZiB0aGUgaW5kZXgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAJKHJldmlzaW9uIDEwNjQwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsMTIgKzY2LDEyIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXQo
KSAKIHsKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAgICAgCi0gICAgTGF5b3V0VW5pdCBt
YXhIZWlnaHQgPSAwOworICAgIGludCBtYXhIZWlnaHQgPSAwOwogICAgIGludCBjaGlsZENvdW50
ID0gMDsKICAgICBpbnQgb3BlcmF0b3JDb3VudCA9IDA7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhl
IG5vbi1vcGVyYXRvciBtYXggaGVpZ2h0IG9mIHRoZSByb3cuCi0gICAgTGF5b3V0VW5pdCBvcGVy
YXRvckhlaWdodCA9IDA7CisgICAgaW50IG9wZXJhdG9ySGVpZ2h0ID0gMDsKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgY2hpbGRDb3VudCsrOwogICAgICAgICBp
ZiAoY3VycmVudC0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9v
dC5jcHAJKHJldmlzaW9uIDEwNjQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3
MywxMCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAgICAgaWYg
KGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9j
YXRpb24oKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQg
KyBsb2NhdGlvbigpOwogCi0gICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSAwOwotICAgIExheW91
dFVuaXQgd2lkdGggPSAwOworICAgIGludCBtYXhIZWlnaHQgPSAwOworICAgIGludCB3aWR0aCA9
IDA7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxl
IChjdXJyZW50KSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsK
QEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBh
aW50CiAKIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6bGF5b3V0KCkKIHsKLSAgICBMYXlv
dXRVbml0IG1heEhlaWdodCA9IDA7CisgICAgaW50IG1heEhlaWdodCA9IDA7CiAgICAgCiAgICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50
KSB7CkBAIC0xNzksOCArMTc5LDggQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpsYXlv
dXQoKQogICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgpLT5mb250U2l6ZSgpOwogCiAgICAgCi0g
ICAgaWYgKG1heEhlaWdodCA+IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdUaHJlc2hvbGRCYXNl
SGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUoKSkpCi0gICAgICAgIHN0eWxlKCktPnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290Qm90dG9tUGFkZGlu
ZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOworICAgIGlmIChtYXhIZWlnaHQgPiBz
dGF0aWNfY2FzdDxpbnQ+KGdUaHJlc2hvbGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUo
KSkpCisgICAgICAgIHN0eWxlKCktPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7
CiAKICAgICAKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCShy
ZXZpc2lvbiAxMDY0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFN1YlN1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lk
IFJlbmRlck1hdGhNTFN1YlN1cDo6bGF5b3V0KCkgCiAgICAgICAgICAgICBMYXlvdXRVbml0IG1h
eEhlaWdodCA9IDA7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBiYXNlLT5m
aXJzdENoaWxkKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgaGVpZ2h0ID0gZ2V0Qm94TW9kZWxPYmplY3RIZWlnaHQoY3VycmVudCk7
CisgICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IGdldEJveE1vZGVsT2JqZWN0SGVpZ2h0KGN1
cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmIChoZWlnaHQgPiBtYXhIZWlnaHQpCiAgICAgICAg
ICAgICAgICAgICAgIG1heEhlaWdodCA9IGhlaWdodDsKICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAJKHJldmlz
aW9uIDEwNjQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQg
UmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAgICAgIGlmICghb3Zlci0+
Zmlyc3RDaGlsZCgpIHx8ICFvdmVyLT5maXJzdENoaWxkKCktPmlzQm94TW9kZWxPYmplY3QoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTGF5b3V0
VW5pdCBvdmVyU3BhY2luZyA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdPdmVyU3BhY2luZ0Fk
anVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChvdmVyLT5maXJzdENoaWxkKCkpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGlu
ZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpKSk7CisgICAgICAgICAgICBpbnQgb3ZlclNwYWNpbmcg
PSBzdGF0aWNfY2FzdDxpbnQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVp
Z2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5i
YXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGJhc2Ugcm93IHdyYXBwZXIKICAgICAg
ICAgICAgIGJhc2UgPSBvdmVyLT5uZXh0U2libGluZygpOwpAQCAtMTgxLDcgKzE4MSw3IEBAIHZv
aWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAgLy8gYmFzZSByb3cg
d3JhcHBlcgogICAgICAgICBiYXNlID0gZmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoYmFzZSkg
ewotICAgICAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGJh
c2UpOworICAgICAgICAgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7
CiAgICAgICAgICAgICAvLyBhY3R1YWwgYmFzZQogICAgICAgICAgICAgYmFzZSA9IGJhc2UtPmZp
cnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9i
amVjdCgpKQpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjps
YXlvdXQoKSAKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
bG9vayBhdCB0aGUgc3BhY2UgYmV0d2VlbiBhIHNpbmdsZSBtYXhpbXVtIGhlaWdodCBvZgogICAg
ICAgICAgICAgLy8gICAgICAgIHRoZSBsaW5lIGJveGVzIGFuZCB0aGUgYmFzZWxpbmUgYW5kIHNx
dWVlemUgdGhlbSB0b2dldGhlcgotICAgICAgICAgICAgTGF5b3V0VW5pdCB1bmRlclNwYWNpbmcg
PSBiYXNlSGVpZ2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKS0+YmFzZWxpbmVQb3Np
dGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKKyAgICAgICAg
ICAgIGludCB1bmRlclNwYWNpbmcgPSBiYXNlSGVpZ2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChiYXNlKS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6
b250YWxMaW5lKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSBiYXNl
J3MgaW50cnVzaW9uIGludG8gdGhlIHVuZGVyCiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHVu
ZGVyID0gbGFzdENoaWxkKCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxV
bmRlck92ZXI6OmxheW91dCgpIAogICAgICAgICAgICAgLy8gRklYTUU6IGJhc2VzIHRoYXQgYXNj
ZW5kIGhpZ2hlciB0aGFuIHRoZSBsaW5lIGJveCBpbnRydWRlIGludG8gdGhlIG92ZXIKICAgICAg
ICAgICAgIGlmICghb3Zlci0+Zmlyc3RDaGlsZCgpIHx8ICFvdmVyLT5maXJzdENoaWxkKCktPmlz
Qm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIExh
eW91dFVuaXQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihnT3ZlclNwYWNp
bmdBZGp1c3RtZW50ICogKGdldE9mZnNldEhlaWdodChvdmVyKSAtIHRvUmVuZGVyQm94TW9kZWxP
YmplY3Qob3Zlci0+Zmlyc3RDaGlsZCgpKS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFz
ZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKSkpOworICAgICAgICAgICAgaW50IG92ZXJTcGFj
aW5nID0gc3RhdGljX2Nhc3Q8aW50PihnT3ZlclNwYWNpbmdBZGp1c3RtZW50ICogKGdldE9mZnNl
dEhlaWdodChvdmVyKSAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob3Zlci0+Zmlyc3RDaGlsZCgp
KS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxM
aW5lKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCiAg
ICAgICAgICAgICBiYXNlID0gb3Zlci0+bmV4dFNpYmxpbmcoKTsKQEAgLTIyMiw3ICsyMjIsNyBA
QCB2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KCkgCiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGJhc2VsaW5lIG9mIHRoZSBiYXNlIHZlcnN1cyB0
aGUgc3RhcnQgb2YgdGhlIHVuZGVyIGJsb2NrIGFuZAogICAgICAgICAgICAgICAgIC8vIGFkanVz
dCB0aGUgcGxhY2VtZW50IG9mIHRoZSB1bmRlciBibG9jay4KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFz
ZSk7CisgICAgICAgICAgICAgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFz
ZSk7CiAgICAgICAgICAgICAgICAgLy8gYWN0dWFsIGJhc2UKICAgICAgICAgICAgICAgICBiYXNl
ID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhYmFz
ZS0+aXNCb3hNb2RlbE9iamVjdCgpKQpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgUmVuZGVyTWF0
aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGxvb2sgYXQgdGhlIHNwYWNlIGJldHdlZW4gYSBzaW5nbGUgbWF4aW11bSBoZWlnaHQg
b2YKICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGxpbmUgYm94ZXMgYW5kIHRoZSBiYXNl
bGluZSBhbmQgc3F1ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCB1bmRlclNwYWNpbmcgPSBiYXNlSGVpZ2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNl
KS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxM
aW5lKTsKKyAgICAgICAgICAgICAgICBpbnQgdW5kZXJTcGFjaW5nID0gYmFzZUhlaWdodCAtIHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jh
c2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0KiB1bmRlciA9IGxhc3RDaGlsZCgpOwogICAgICAgICAgICAg
ICAgIGlmICh1bmRlciAmJiB1bmRlci0+Zmlyc3RDaGlsZCgpICYmIHVuZGVyLT5maXJzdENoaWxk
KCktPmlzUmVuZGVySW5saW5lKCkgJiYgdW5kZXJTcGFjaW5nID4gMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126144</attachid>
            <date>2012-02-08 13:38:59 -0800</date>
            <delta_ts>2012-03-07 10:28:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77916-20120208133858.patch</filename>
            <type>text/plain</type>
            <size>16262</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzExMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTA4ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgTGF5b3V0VW5p
dCB1c2FnZSBpbiBSZW5kZXJNYXRoTUwqIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRpbmcgdXNhZ2Ugb2YgTGF5b3V0VW5pdHMgaW4g
dGhlIFJlbmRlck1hdGhNTCogY2xhc3Nlcy4gUHJldmlvdXNseSwgTWF0aE1MIHJlbmRlcmluZyBj
bGFzc2VzIHdlcmUgdXNpbmcKKyAgICAgICAgTGF5b3V0VW5pdHMgZm9yIG1hbnkgb2YgaXRzIHBy
aW1pdGl2ZXMgdGhhdCByZWxhdGVkIHRvIGRyYXdpbmcuIFRoZXNlIG5lZWQgdG8gYmUgaW50ZWdl
cnMgdG8gYmUgcHJvcGVybHkKKyAgICAgICAgYWxpZ25lZCB0byBwaXhlbHMgZm9yIHBhaW50aW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MRnJhY3Rpb246OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFNxdWFyZVJvb3Q6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNx
dWFyZVJvb3Q6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxTdWJTdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU3ViU3VwOjpsYXlv
dXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KToKKwog
MjAxMi0wMi0wOCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIHZp
ZXdCb3ggb24gbmVzdGVkIFNWRyBjYXVzZXMgd3JvbmcgY29udGVudCBzaXplIGZvciByZWxhdGl2
ZSB2YWx1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiAxMDcxMTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludElu
Zm8mCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91
dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7Cisg
ICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24o
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250
ZXh0KTsKICAgICAKQEAgLTkwLDIyICs5MCwyMiBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpw
YWludChQYWludEluZm8mCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0
cm9rZSk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUp
LCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1
c3RlZFBhaW50T2Zmc2V0LCBMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9m
ZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7Ci0gICAgaW5mby5jb250ZXh0
LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdp
ZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9m
ZnNldEhlaWdodCgpKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRI
ZWlnaHQoKSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOwotICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgTGF5b3V0UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVp
Z2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQs
IEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0
ZWRQYWludE9mZnNldC55KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50
KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRo
KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZv
LmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSwgSW50UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAr
IG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBh
aW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOwogICAgIAogICAgIGludCB0b3BTdGFydCA9
IHBhZGRpbmdUb3AoKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENv
bG9yKDAsIDI1NSwgMCksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQt
PmRyYXdMaW5lKExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0
KSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCksIEludFBvaW50KGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNl
dC55KCkgKyB0b3BTdGFydCkpOwogICAgIAogICAgIGludCBiYXNlbGluZSA9IGJhc2VsaW5lUG9z
aXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSk7CiAgICAgCiAg
ICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigyNTUsIDAsIDApLCBDb2xvclNw
YWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGlu
ZSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwg
YWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSkpOworICAgIGluZm8uY29udGV4dC0+
ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRP
ZmZzZXQueSgpICsgYmFzZWxpbmUpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpKTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24u
Y3BwCShyZXZpc2lvbiAxMDcxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3
IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW4KICAgICBpZiAoIWZp
cnN0Q2hpbGQoKSB8fCFtX2xpbmVUaGlja25lc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIExh
eW91dFVuaXQgdmVydGljYWxPZmZzZXQgPSAwOworICAgIGludCB2ZXJ0aWNhbE9mZnNldCA9IDA7
CiAgICAgLy8gVGhlIGNoaWxkcmVuIGFyZSBhbHdheXMgUmVuZGVyTWF0aE1MQmxvY2sgaW5zdGFu
Y2VzCiAgICAgaWYgKGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CiAgICAg
ICAgIGludCBhZGp1c3RGb3JUaGlja25lc3MgPSBtX2xpbmVUaGlja25lc3MgPiAxID8gaW50KG1f
bGluZVRoaWNrbmVzcyAvIDIpIDogMTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJlbmRlck1h
dGhNTEZyYWN0aW9uOjpwYWludChQYWludEluCiAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9
IG51bWVyYXRvci0+b2Zmc2V0SGVpZ2h0KCk7ICAgICAgICAKICAgICB9CiAgICAgCi0gICAgTGF5
b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsK
KyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpOwogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSArIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDEwNzEx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxNyArMTA0LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAhbGFzdENo
aWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAKICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGxhc3RDaGls
ZCgpKTsKICAgICAKLSAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IGluZGV4Qm94LT5vZmZzZXRI
ZWlnaHQoKTsKKyAgICBpbnQgbWF4SGVpZ2h0ID0gaW5kZXhCb3gtPm9mZnNldEhlaWdodCgpOwog
ICAgIC8vIGRlZmF1bHQgdG8gdGhlIGZvbnQgc2l6ZSBpbiBwaXhlbHMgaWYgd2UncmUgZW1wdHkK
ICAgICBpZiAoIW1heEhlaWdodCkKICAgICAgICAgbWF4SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udFNp
emUoKTsKLSAgICBMYXlvdXRVbml0IHdpZHRoID0gaW5kZXhCb3gtPm9mZnNldFdpZHRoKCk7Cisg
ICAgaW50IHdpZHRoID0gaW5kZXhCb3gtPm9mZnNldFdpZHRoKCk7CiAgICAgCi0gICAgTGF5b3V0
VW5pdCBpbmRleFdpZHRoID0gMDsKKyAgICBpbnQgaW5kZXhXaWR0aCA9IDA7CiAgICAgUmVuZGVy
T2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50ICE9IGxh
c3RDaGlsZCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsK
QEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5m
byYgCiAgICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKICAgICAKICAgICBpbnQgcm9vdFBhZCA9
IHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSk7Ci0g
ICAgTGF5b3V0VW5pdCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0
aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAt
IHJvb3RQYWQ7CisgICAgaW50IHN0YXJ0ID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBpbmRl
eFdpZHRoICsgZ1JhZGljYWxMZWZ0TWFyZ2luICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1
ZSgpIC0gcm9vdFBhZDsKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0LnNldFkoYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBzdHlsZSgpLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHJvb3RQYWQpOwog
ICAgIAogICAgIEZsb2F0UG9pbnQgdG9wU3RhcnQoc3RhcnQgLSB0b3BTdGFydFNoaWZ0LCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSk7CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290OjpsYXlvdXQoKQogICAgIGlmICghZmlyc3RDaGlsZCgpIHx8ICFsYXN0Q2hpbGQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KGxhc3RDaGlsZCgpKS0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgaW50IG1heEhl
aWdodCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QobGFzdENoaWxkKCkpLT5vZmZzZXRIZWlnaHQo
KTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBsYXN0Q2hpbGQoKS0+Zmlyc3RD
aGlsZCgpOwogICAgIGlmIChjdXJyZW50KQpAQCAtMjA5LDE3ICsyMDksMTcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgpLT5mb250
U2l6ZSgpOwogICAgIAogICAgIC8vIEJhc2UgaGVpZ2h0IGFib3ZlIHdoaWNoIHRoZSBzaGFwZSBv
ZiB0aGUgcm9vdCBjaGFuZ2VzCi0gICAgTGF5b3V0VW5pdCB0aHJlc2hvbGRIZWlnaHQgPSBzdGF0
aWNfY2FzdDxMYXlvdXRVbml0PihnVGhyZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRT
aXplKCkpOwotICAgIExheW91dFVuaXQgdG9wU3RhcnRTaGlmdCA9IDA7CisgICAgaW50IHRocmVz
aG9sZEhlaWdodCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdUaHJlc2hvbGRCYXNlSGVpZ2h0
ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgaW50IHRvcFN0YXJ0U2hpZnQgPSAwOwogICAg
IAogICAgIGlmIChtYXhIZWlnaHQgPiB0aHJlc2hvbGRIZWlnaHQgJiYgdGhyZXNob2xkSGVpZ2h0
KSB7CiAgICAgICAgIGZsb2F0IHNoaWZ0ID0gKG1heEhlaWdodCAtIHRocmVzaG9sZEhlaWdodCkg
LyBzdGF0aWNfY2FzdDxmbG9hdD4odGhyZXNob2xkSGVpZ2h0KTsKICAgICAgICAgaWYgKHNoaWZ0
ID4gMS4pCiAgICAgICAgICAgICBzaGlmdCA9IDEuMGY7Ci0gICAgICAgIExheW91dFVuaXQgZnJv
bnRXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHN0eWxlKCktPmZvbnRTaXplKCkgKiBn
UmFkaWNhbFdpZHRoKTsKLSAgICAgICAgdG9wU3RhcnRTaGlmdCA9IHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAqIHNoaWZ0KTsKKyAg
ICAgICAgaW50IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmZvbnRTaXpl
KCkgKiBnUmFkaWNhbFdpZHRoKTsKKyAgICAgICAgdG9wU3RhcnRTaGlmdCA9IHN0YXRpY19jYXN0
PGludD4oZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICogc2hpZnQpOwogICAg
ICAgICAKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nh
c3Q8TGF5b3V0VW5pdD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSks
IEZpeGVkKSk7CisgICAgICAgIHN0eWxlKCktPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRp
Y19jYXN0PGludD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZp
eGVkKSk7CiAgICAgfQogICAgIAogICAgIC8vIFBvc2l0aW9uaW5nIG9mIHRoZSBpbmRleApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93LmNwcAkocmV2aXNpb24gMTA3MTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsMTIg
QEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dCgpIAogewogICAgIFJlbmRlckJsb2NrOjps
YXlvdXQoKTsKICAgICAKLSAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IDA7CisgICAgaW50IG1h
eEhlaWdodCA9IDA7CiAgICAgaW50IGNoaWxkQ291bnQgPSAwOwogICAgIGludCBvcGVyYXRvckNv
dW50ID0gMDsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgbm9uLW9wZXJhdG9yIG1heCBoZWlnaHQg
b2YgdGhlIHJvdy4KLSAgICBMYXlvdXRVbml0IG9wZXJhdG9ySGVpZ2h0ID0gMDsKKyAgICBpbnQg
b3BlcmF0b3JIZWlnaHQgPSAwOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmly
c3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBjaGlsZENvdW50Kys7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1JlbmRlck1hdGhN
TEJsb2NrKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkocmV2aXNpb24gMTA3MTEwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIHZvaWQgUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBMYXlvdXRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIEludFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKLSAgICBMYXlv
dXRVbml0IG1heEhlaWdodCA9IDA7Ci0gICAgTGF5b3V0VW5pdCB3aWR0aCA9IDA7CisgICAgaW50
IG1heEhlaWdodCA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKICAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgaWYg
KGN1cnJlbnQtPmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQg
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKIAogdm9pZCBSZW5kZXJNYXRoTUxT
cXVhcmVSb290OjpsYXlvdXQoKQogewotICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gMDsKKyAg
ICBpbnQgbWF4SGVpZ2h0ID0gMDsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBm
aXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGN1cnJlbnQpIHsKQEAgLTE3OSw4ICsxNzksOCBAQCB2
b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OmxheW91dCgpCiAgICAgICAgIG1heEhlaWdodCA9
IHN0eWxlKCktPmZvbnRTaXplKCk7CiAKICAgICAKLSAgICBpZiAobWF4SGVpZ2h0ID4gc3RhdGlj
X2Nhc3Q8TGF5b3V0VW5pdD4oZ1RocmVzaG9sZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6
ZSgpKSkKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nh
c3Q8TGF5b3V0VW5pdD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSks
IEZpeGVkKSk7CisgICAgaWYgKG1heEhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZ1RocmVzaG9s
ZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSkKKyAgICAgICAgc3R5bGUoKS0+c2V0
UGFkZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihnUm9vdEJvdHRvbVBhZGRpbmcg
KiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsKIAogICAgIAogICAgIFJlbmRlckJsb2Nr
OjpsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MU3ViU3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAJKHJldmlzaW9uIDEwNzExMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3ViU3VwOjpsYXlv
dXQoKSAKICAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gMDsKICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogY3VycmVudCA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAg
IHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBn
ZXRCb3hNb2RlbE9iamVjdEhlaWdodChjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBpbnQgaGVp
Z2h0ID0gZ2V0Qm94TW9kZWxPYmplY3RIZWlnaHQoY3VycmVudCk7CiAgICAgICAgICAgICAgICAg
aWYgKGhlaWdodCA+IG1heEhlaWdodCkKICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0g
aGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRl
ck92ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAkocmV2aXNpb24gMTA3MTEwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6Omxh
eW91dCgpIAogICAgICAgICAgICAgaWYgKCFvdmVyLT5maXJzdENoaWxkKCkgfHwgIW92ZXItPmZp
cnN0Q2hpbGQoKS0+aXNCb3hNb2RlbE9iamVjdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBMYXlvdXRVbml0IG92ZXJTcGFjaW5nID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VW5pdD4oZ092ZXJTcGFjaW5nQWRqdXN0bWVudCAqIChnZXRPZmZzZXRIZWln
aHQob3ZlcikgLSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG92ZXItPmZpcnN0Q2hpbGQoKSktPmJh
c2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSkp
KTsKKyAgICAgICAgICAgIGludCBvdmVyU3BhY2luZyA9IHN0YXRpY19jYXN0PGludD4oZ092ZXJT
cGFjaW5nQWRqdXN0bWVudCAqIChnZXRPZmZzZXRIZWlnaHQob3ZlcikgLSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KG92ZXItPmZpcnN0Q2hpbGQoKSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRp
Y0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gYmFzZSByb3cgd3JhcHBlcgogICAgICAgICAgICAgYmFzZSA9IG92ZXItPm5leHRT
aWJsaW5nKCk7CkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6
OmxheW91dCgpIAogICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCiAgICAgICAgIGJhc2UgPSBm
aXJzdENoaWxkKCk7CiAgICAgICAgIGlmIChiYXNlKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CisgICAgICAgICAgICBpbnQgYmFz
ZUhlaWdodCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKICAgICAgICAgICAgIC8vIGFjdHVhbCBi
YXNlCiAgICAgICAgICAgICBiYXNlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAg
aWYgKCFiYXNlIHx8ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCkBAIC0xODksNyArMTg5LDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBsb29rIGF0IHRoZSBzcGFjZSBiZXR3ZWVu
IGEgc2luZ2xlIG1heGltdW0gaGVpZ2h0IG9mCiAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGxp
bmUgYm94ZXMgYW5kIHRoZSBiYXNlbGluZSBhbmQgc3F1ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAg
ICAgICAgICBMYXlvdXRVbml0IHVuZGVyU3BhY2luZyA9IGJhc2VIZWlnaHQgLSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwg
dHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAgICAgICAgICAgaW50IHVuZGVyU3BhY2luZyA9IGJh
c2VIZWlnaHQgLSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9u
KEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBhZGp1c3QgdGhlIGJhc2UncyBpbnRydXNpb24gaW50byB0aGUgdW5k
ZXIKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogdW5kZXIgPSBsYXN0Q2hpbGQoKTsKQEAgLTIx
MCw3ICsyMTAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KCkgCiAgICAg
ICAgICAgICAvLyBGSVhNRTogYmFzZXMgdGhhdCBhc2NlbmQgaGlnaGVyIHRoYW4gdGhlIGxpbmUg
Ym94IGludHJ1ZGUgaW50byB0aGUgb3ZlcgogICAgICAgICAgICAgaWYgKCFvdmVyLT5maXJzdENo
aWxkKCkgfHwgIW92ZXItPmZpcnN0Q2hpbGQoKS0+aXNCb3hNb2RlbE9iamVjdCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBvdmVyU3BhY2luZyA9IHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0
SGVpZ2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkp
LT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExp
bmUpKSk7CisgICAgICAgICAgICBpbnQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGdP
dmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0gdG9SZW5kZXJC
b3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhh
YmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIGJhc2Ugcm93IHdyYXBwZXIKICAgICAgICAgICAgIGJhc2UgPSBvdmVyLT5u
ZXh0U2libGluZygpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJP
dmVyOjpsYXlvdXQoKSAKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0
aGUgYmFzZWxpbmUgb2YgdGhlIGJhc2UgdmVyc3VzIHRoZSBzdGFydCBvZiB0aGUgdW5kZXIgYmxv
Y2sgYW5kCiAgICAgICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgdGhlIHVu
ZGVyIGJsb2NrLgogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExheW91dFVuaXQg
YmFzZUhlaWdodCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKKyAgICAgICAgICAgICAgICBpbnQg
YmFzZUhlaWdodCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKICAgICAgICAgICAgICAgICAvLyBh
Y3R1YWwgYmFzZQogICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFiYXNlIHx8ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAog
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgc3BhY2Ug
YmV0d2VlbiBhIHNpbmdsZSBtYXhpbXVtIGhlaWdodCBvZgogICAgICAgICAgICAgICAgIC8vICAg
ICAgICB0aGUgbGluZSBib3hlcyBhbmQgdGhlIGJhc2VsaW5lIGFuZCBzcXVlZXplIHRoZW0gdG9n
ZXRoZXIKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHVuZGVyU3BhY2luZyA9IGJhc2VIZWln
aHQgLSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhh
YmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAgICAgICAgICAgICAgIGlu
dCB1bmRlclNwYWNpbmcgPSBiYXNlSGVpZ2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNl
KS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxM
aW5lKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHVu
ZGVyID0gbGFzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgaWYgKHVuZGVyICYmIHVuZGVyLT5m
aXJzdENoaWxkKCkgJiYgdW5kZXItPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiB1
bmRlclNwYWNpbmcgPiAwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130645</attachid>
            <date>2012-03-07 10:28:28 -0800</date>
            <delta_ts>2012-03-07 17:29:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77916-20120307102827.patch</filename>
            <type>text/plain</type>
            <size>17055</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAzLTA2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgTGF5b3V0VW5p
dCB1c2FnZSBpbiBSZW5kZXJNYXRoTUwqIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3VicGl4ZWwgcG9zaXRpb25pbmcgb2ZmZXJzIGxpdHRs
ZSBiZW5lZml0IGZvciBNYXRoTUwsIGFuZCBjYW4gcmVzdWx0IGluCisgICAgICAgIHVud2FudGVk
IHJvdW5kaW5nIGluIGhpZ2hseSBuZXN0ZWQgY29udGV4dHMuIEluc3RlYWQsIHdlIHVzZSBwaXhl
bCBzbmFwcGluZworICAgICAgICB0byBlbnN1cmUgdGhpbmdzIGNvbnRpbnVlIHRvIGxvb2sgYXMg
dGhleSBkaWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjpwYWludCk6IENsZWFuaW5nIHVwIGRl
YnVnIHBhaW50aW5nIHRvIGJlIG9uCisgICAgICAgIHBpeGVsIGJvdW5kYXJpZXMgaW5zdGVhZCBv
ZiBzdWJwaXhlbC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludCk6
IFJldmVydGluZyB0byBpbnRlZ2VycyBmb3IgZGV0ZXJtaW5pbmcKKyAgICAgICAgdGhlIHZlcnRp
Y2FsIG9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNl
bGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQpOiBVc2lu
ZyBpbnRlZ2VycyBmb3IgaGVpZ2h0IGFuZCB3aWR0aAorICAgICAgICBhbmQgb25seSBhY2N1bXVs
YXRpbmcgcGl4ZWwgc25hcHBlZCB2YWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxSb290OjpsYXlvdXQpOiBTZXR0aW5nIHBhZGRpbmcgd2l0aCBpbnRlZ2VycyB0bworICAgICAg
ICBhdm9pZCBpbmNvbnNpc3RlbnQgcm91bmRpbmcgYmFzZWQgb24gdGhlIHJvb3QncyBsb2NhdGlv
bi4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KTogU2VlIFJlbmRlck1hdGhNTFJvb3QuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpsYXlvdXQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRPZmZzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQpOgorCiAyMDEyLTAzLTA2ICBWYW5nZWxpcyBLb2tr
ZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEluY3Jl
YXNlIHRoZSBhY2NlbGVyYXRlZCBjYW52YXMgbWluIHNpemUgdG8gMjU2ICogMjU2CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAkocmV2aXNpb24gMTA5OTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDIyICs4Miwy
MiBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mCiAgICAgaW5mby5j
b250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgaW5mby5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0g
ICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBMYXlvdXRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRP
ZmZzZXQueSgpKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpKSwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7Ci0gICAgaW5mby5j
b250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSksIExheW91dFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55
KCkgKyBvZmZzZXRIZWlnaHQoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0
ZWRQYWludE9mZnNldCwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQt
PmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55
KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNl
dC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0
SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHBpeGVsU25hcHBlZE9m
ZnNldEhlaWdodCgpKSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNu
YXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHBpeGVsU25hcHBl
ZE9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBh
aW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSkpOwogICAgIAogICAgIGlu
dCB0b3BTdGFydCA9IHBhZGRpbmdUb3AoKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBp
bmZvLmNvbnRleHQtPmRyYXdMaW5lKExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgTGF5b3V0UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSArIHRvcFN0YXJ0KSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCks
IEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCkpOwogICAgIAotICAgIGlu
dCBiYXNlbGluZSA9IGJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBI
b3Jpem9udGFsTGluZSk7CisgICAgaW50IGJhc2VsaW5lID0gcm91bmRUb0ludChiYXNlbGluZVBv
c2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpKTsKICAgICAK
ICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9y
U3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKExheW91dFBvaW50
KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2Vs
aW5lKSwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSk7CisgICAgaW5mby5jb250ZXh0
LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBiYXNlbGluZSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
ICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBi
YXNlbGluZSkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxGcmFjdGlvbi5jcHAJKHJldmlzaW9uIDEwOTkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTEsNyArMTUxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJ
bgogICAgIGlmICghZmlyc3RDaGlsZCgpIHx8IW1fbGluZVRoaWNrbmVzcykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9IDA7CisgICAgaW50IHZlcnRp
Y2FsT2Zmc2V0ID0gMDsKICAgICAvLyBUaGUgY2hpbGRyZW4gYXJlIGFsd2F5cyBSZW5kZXJNYXRo
TUxCbG9jayBpbnN0YW5jZXMKICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJs
b2NrKCkpIHsKICAgICAgICAgaW50IGFkanVzdEZvclRoaWNrbmVzcyA9IG1fbGluZVRoaWNrbmVz
cyA+IDEgPyBpbnQobV9saW5lVGhpY2tuZXNzIC8gMikgOiAxOwpAQCAtMTU5LDkgKzE1OSw5IEBA
IHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW4KICAgICAgICAgICAgIGFk
anVzdEZvclRoaWNrbmVzcysrOwogICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogbnVtZXJhdG9y
ID0gdG9SZW5kZXJNYXRoTUxCbG9jayhmaXJzdENoaWxkKCkpOwogICAgICAgICBpZiAobnVtZXJh
dG9yLT5pc1JlbmRlck1hdGhNTFJvdygpKQotICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBu
dW1lcmF0b3ItPm9mZnNldEhlaWdodCgpICsgYWRqdXN0Rm9yVGhpY2tuZXNzOworICAgICAgICAg
ICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgp
ICsgYWRqdXN0Rm9yVGhpY2tuZXNzOwogICAgICAgICBlbHNlIAotICAgICAgICAgICAgdmVydGlj
YWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpOyAgICAgICAgCisgICAgICAgICAg
ICB2ZXJ0aWNhbE9mZnNldCA9IG51bWVyYXRvci0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCk7
ICAgICAgICAKICAgICB9CiAgICAgCiAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwpAQCAtMTczLDcgKzE3
Myw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW4KICAgICBpbmZv
LmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICBpbmZvLmNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xp
bmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkg
KyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOworICAgIGluZm8uY29u
dGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
IGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QK
QEAgLTE4Niw3ICsxODYsNyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNl
bGluCiAgICAgICAgIGVsc2UgaWYgKG5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICByZWZTdHls
ZSA9IG5leHRTaWJsaW5nKCktPnN0eWxlKCk7CiAgICAgICAgIGludCBzaGlmdCA9IGludChjZWls
KChyZWZTdHlsZS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgKyAxKSAvIDIpKTsKLSAgICAgICAg
cmV0dXJuIG51bWVyYXRvci0+b2Zmc2V0SGVpZ2h0KCkgKyBzaGlmdDsKKyAgICAgICAgcmV0dXJu
IG51bWVyYXRvci0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgKyBzaGlmdDsKICAgICB9CiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGlu
ZSwgZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
b290LmNwcAkocmV2aXNpb24gMTA5OTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE4ICsxMDgs
MTggQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIAogICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBpbmRleEJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
bGFzdENoaWxkKCkpOwogICAgIAotICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gaW5kZXhCb3gt
Pm9mZnNldEhlaWdodCgpOworICAgIGludCBtYXhIZWlnaHQgPSBpbmRleEJveC0+cGl4ZWxTbmFw
cGVkT2Zmc2V0SGVpZ2h0KCk7CiAgICAgLy8gZGVmYXVsdCB0byB0aGUgZm9udCBzaXplIGluIHBp
eGVscyBpZiB3ZSdyZSBlbXB0eQogICAgIGlmICghbWF4SGVpZ2h0KQogICAgICAgICBtYXhIZWln
aHQgPSBzdHlsZSgpLT5mb250U2l6ZSgpOwotICAgIExheW91dFVuaXQgd2lkdGggPSBpbmRleEJv
eC0+b2Zmc2V0V2lkdGgoKTsKKyAgICBpbnQgd2lkdGggPSBpbmRleEJveC0+cGl4ZWxTbmFwcGVk
T2Zmc2V0V2lkdGgoKTsKICAgICAKLSAgICBMYXlvdXRVbml0IGluZGV4V2lkdGggPSAwOworICAg
IGludCBpbmRleFdpZHRoID0gMDsKICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENo
aWxkKCk7CiAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbGFzdENoaWxkKCkpIHsKICAgICAgICAgaWYg
KGN1cnJlbnQtPmlzQm94TW9kZWxPYmplY3QoKSkgewogICAgICAgICAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3VycmVudCk7Ci0gICAgICAg
ICAgICBpbmRleFdpZHRoICs9IGJveC0+b2Zmc2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGluZGV4
V2lkdGggKz0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpOwogICAgICAgICB9CiAgICAg
ICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwogICAgIH0KQEAgLTEzOSw3ICsx
MzksNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgd2lk
dGggKz0gdG9wU3RhcnRTaGlmdDsKICAgICAKICAgICBpbnQgcm9vdFBhZCA9IHN0YXRpY19jYXN0
PGludD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSk7Ci0gICAgTGF5b3V0VW5p
dCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0aCArIGdSYWRpY2Fs
TGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHJvb3RQYWQ7Cisg
ICAgaW50IHN0YXJ0ID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBpbmRleFdpZHRoICsgZ1Jh
ZGljYWxMZWZ0TWFyZ2luICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0gcm9vdFBh
ZDsKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0LnNldFkoYWRqdXN0ZWRQYWludE9mZnNldC55KCkg
KyBzdHlsZSgpLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHJvb3RQYWQpOwogICAgIAogICAgIEZs
b2F0UG9pbnQgdG9wU3RhcnQoc3RhcnQgLSB0b3BTdGFydFNoaWZ0LCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSk7CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlv
dXQoKQogICAgIGlmICghZmlyc3RDaGlsZCgpIHx8ICFsYXN0Q2hpbGQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KGxhc3RDaGlsZCgpKS0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgaW50IG1heEhlaWdodCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QobGFzdENoaWxkKCkpLT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQo
KTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBsYXN0Q2hpbGQoKS0+Zmlyc3RD
aGlsZCgpOwogICAgIGlmIChjdXJyZW50KQpAQCAtMjA5LDE3ICsyMDksMTcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgpLT5mb250
U2l6ZSgpOwogICAgIAogICAgIC8vIEJhc2UgaGVpZ2h0IGFib3ZlIHdoaWNoIHRoZSBzaGFwZSBv
ZiB0aGUgcm9vdCBjaGFuZ2VzCi0gICAgTGF5b3V0VW5pdCB0aHJlc2hvbGRIZWlnaHQgPSBzdGF0
aWNfY2FzdDxMYXlvdXRVbml0PihnVGhyZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRT
aXplKCkpOwotICAgIExheW91dFVuaXQgdG9wU3RhcnRTaGlmdCA9IDA7CisgICAgaW50IHRocmVz
aG9sZEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oZ1RocmVzaG9sZEJhc2VIZWlnaHQgKiBzdHls
ZSgpLT5mb250U2l6ZSgpKTsKKyAgICBpbnQgdG9wU3RhcnRTaGlmdCA9IDA7CiAgICAgCiAgICAg
aWYgKG1heEhlaWdodCA+IHRocmVzaG9sZEhlaWdodCAmJiB0aHJlc2hvbGRIZWlnaHQpIHsKICAg
ICAgICAgZmxvYXQgc2hpZnQgPSAobWF4SGVpZ2h0IC0gdGhyZXNob2xkSGVpZ2h0KSAvIHN0YXRp
Y19jYXN0PGZsb2F0Pih0aHJlc2hvbGRIZWlnaHQpOwogICAgICAgICBpZiAoc2hpZnQgPiAxLikK
ICAgICAgICAgICAgIHNoaWZ0ID0gMS4wZjsKLSAgICAgICAgTGF5b3V0VW5pdCBmcm9udFdpZHRo
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oc3R5bGUoKS0+Zm9udFNpemUoKSAqIGdSYWRpY2Fs
V2lkdGgpOwotICAgICAgICB0b3BTdGFydFNoaWZ0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4o
Z1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICogc2hpZnQpOworICAgICAgICBp
bnQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Zm9udFNpemUoKSAqIGdS
YWRpY2FsV2lkdGgpOworICAgICAgICB0b3BTdGFydFNoaWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihn
UmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250V2lkdGggKiBzaGlmdCk7CiAgICAgICAgIAot
ICAgICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChzdGF0aWNfY2FzdDxMYXlv
dXRVbml0PihnUm9vdEJvdHRvbVBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nhc3Q8
aW50PihnUm9vdEJvdHRvbVBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsK
ICAgICB9CiAgICAgCiAgICAgLy8gUG9zaXRpb25pbmcgb2YgdGhlIGluZGV4CkBAIC0yMzAsMTQg
KzIzMCwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCgpCiAgICAgaWYgKCFpbmRl
eEJveCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIExheW91dFVuaXQgaW5kZXhTaGlmdCA9
IGluZGV4Qm94LT5vZmZzZXRXaWR0aCgpICsgdG9wU3RhcnRTaGlmdDsKLSAgICBMYXlvdXRVbml0
IHJhZGljYWxIZWlnaHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigoMSAtIGdSYWRpY2FsVG9w
TGVmdFBvaW50WVBvcykgKiBtYXhIZWlnaHQpOwotICAgIExheW91dFVuaXQgcm9vdE1hcmdpblRv
cCA9IHJhZGljYWxIZWlnaHQgKyBzdHlsZSgpLT5wYWRkaW5nQm90dG9tKCkudmFsdWUoKSArIGlu
ZGV4Qm94LT5vZmZzZXRIZWlnaHQoKQotICAgICAgICAtIChtYXhIZWlnaHQgKyBzdGF0aWNfY2Fz
dDxMYXlvdXRVbml0PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSk7CisgICAg
aW50IGluZGV4U2hpZnQgPSBpbmRleEJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSArIHRv
cFN0YXJ0U2hpZnQ7CisgICAgaW50IHJhZGljYWxIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KCgx
IC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zKSAqIG1heEhlaWdodCk7CisgICAgaW50IHJvb3RN
YXJnaW5Ub3AgPSByYWRpY2FsSGVpZ2h0ICsgc3R5bGUoKS0+cGFkZGluZ0JvdHRvbSgpLnZhbHVl
KCkgKyBpbmRleEJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkKKyAgICAgICAgLSAobWF4
SGVpZ2h0ICsgc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6
ZSgpKSk7CiAgICAgCiAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGluZGV4U2hp
ZnQsIEZpeGVkKSk7CiAgICAgaWYgKHJvb3RNYXJnaW5Ub3AgPiAwKQotICAgICAgICBzdHlsZSgp
LT5zZXRQYWRkaW5nVG9wKExlbmd0aChyb290TWFyZ2luVG9wICsgc3RhdGljX2Nhc3Q8TGF5b3V0
VW5pdD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlKCktPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHJvb3RNYXJnaW5Ub3AgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGdSb290UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOwog
ICAgIAogICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCShyZXZpc2lvbiAxMDk5MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91
dCgpIAogewogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKICAgICAKLSAgICBMYXlvdXRVbml0
IG1heEhlaWdodCA9IDA7CisgICAgaW50IG1heEhlaWdodCA9IDA7CiAKICAgICAvLyBDYWxjdWxh
dGUgdGhlIG5vbi1vcGVyYXRvciBtYXggaGVpZ2h0IG9mIHRoZSByb3cuCiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0U2libGluZygpKSB7CkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgUmVuZGVyTWF0aE1M
Um93OjpsYXlvdXQoKSAKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2Jq
ZWN0KCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KGN1cnJlbnQpOwogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoaXMgYm94IGhhcyBhIGxhcmdlciBoZWlnaHQuCi0gICAgICAgICAgICBpZiAoYm94LT5vZmZz
ZXRIZWlnaHQoKSA+IG1heEhlaWdodCkKLSAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBib3gt
Pm9mZnNldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0
SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5w
aXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTcXVhcmVSb290LmNwcAkocmV2aXNpb24gMTA5OTMzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOCArNzUsOCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBh
aW50CiAgICAgCiAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHJvdW5kZWRJbnRQ
b2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogCi0gICAgTGF5b3V0VW5pdCBtYXhIZWln
aHQgPSAwOwotICAgIExheW91dFVuaXQgd2lkdGggPSAwOworICAgIGludCBtYXhIZWlnaHQgPSAw
OworICAgIGludCB3aWR0aCA9IDA7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RD
aGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0Jv
eE1vZGVsT2JqZWN0KCkpIHsKQEAgLTg0LDkgKzg0LDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVh
cmVSb290OjpwYWludChQYWludAogICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJv
eCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3VycmVudCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGJveCBoYXMgYSBsYXJnZXIgaGVpZ2h0Ci0g
ICAgICAgICAgICBpZiAoYm94LT5vZmZzZXRIZWlnaHQoKSA+IG1heEhlaWdodCkKLSAgICAgICAg
ICAgICAgICBtYXhIZWlnaHQgPSBib3gtPm9mZnNldEhlaWdodCgpOwotICAgICAgICAgICAgd2lk
dGggKz0gYm94LT5vZmZzZXRXaWR0aCgpOworICAgICAgICAgICAgaWYgKGJveC0+cGl4ZWxTbmFw
cGVkT2Zmc2V0SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0
ID0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIHdpZHRoICs9
IGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKTsKICAgICAgICAgfQogICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC0xNjAsMTUgKzE2MCwxNSBA
QCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAKIHZvaWQgUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdDo6bGF5b3V0KCkKIHsKLSAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9
IDA7CisgICAgaW50IG1heEhlaWdodCA9IDA7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmIChj
dXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnJlbnQpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoYm94LT5vZmZzZXRIZWlnaHQoKSA+IG1heEhlaWdodCkKLSAg
ICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBib3gtPm9mZnNldEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCisgICAg
ICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgYm94LT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWdu
KEJBU0VMSU5FKTsKICAgICAgICAgfQpAQCAtMTc5LDggKzE3OSw4IEBAIHZvaWQgUmVuZGVyTWF0
aE1MU3F1YXJlUm9vdDo6bGF5b3V0KCkKICAgICAgICAgbWF4SGVpZ2h0ID0gc3R5bGUoKS0+Zm9u
dFNpemUoKTsKIAogICAgIAotICAgIGlmIChtYXhIZWlnaHQgPiBzdGF0aWNfY2FzdDxMYXlvdXRV
bml0PihnVGhyZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRTaXplKCkpKQotICAgICAg
ICBzdHlsZSgpLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChzdGF0aWNfY2FzdDxMYXlvdXRVbml0
PihnUm9vdEJvdHRvbVBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsKKyAg
ICBpZiAobWF4SGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50PihnVGhyZXNob2xkQmFzZUhlaWdodCAq
IHN0eWxlKCktPmZvbnRTaXplKCkpKQorICAgICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGdSb290Qm90dG9tUGFkZGluZyAqIHN0eWxlKCktPmZv
bnRTaXplKCkpLCBGaXhlZCkpOwogCiAgICAgCiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAkocmV2aXNpb24gMTA5OTMzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgaW5saW5lIGludCBnZXRPZmZzZXRIZWlnaHQoUmVuZGVy
T2JqZWN0KgogewogICAgIGlmIChvYmotPmlzQm94TW9kZWxPYmplY3QoKSkgewogICAgICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmopOwot
ICAgICAgICByZXR1cm4gYm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIGJveC0+
cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCk7CiAgICAgfQogICAgCiAgICAgcmV0dXJuIDA7CkBA
IC0xODUsNyArMTg1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAog
ICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCiAgICAgICAgIGJhc2UgPSBmaXJzdENoaWxkKCk7
CiAgICAgICAgIGlmIChiYXNlKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQg
PSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CisgICAgICAgICAgICBpbnQgYmFzZUhlaWdodCA9IGdl
dE9mZnNldEhlaWdodChiYXNlKTsKICAgICAgICAgICAgIC8vIGFjdHVhbCBiYXNlCiAgICAgICAg
ICAgICBiYXNlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaWYgKCFiYXNlIHx8
ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2FsY3VsYXRlIHRoZSBiYXNlbGluZSBvZiB0aGUgYmFzZSB2ZXJzdXMgdGhlIHN0YXJ0IG9m
IHRoZSB1bmRlciBibG9jayBhbmQKICAgICAgICAgICAgICAgICAvLyBhZGp1c3QgdGhlIHBsYWNl
bWVudCBvZiB0aGUgdW5kZXIgYmxvY2suCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGJhc2UpOworICAgICAg
ICAgICAgICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGJhc2UpOwogICAgICAg
ICAgICAgICAgIC8vIGFjdHVhbCBiYXNlCiAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UtPmZp
cnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWJhc2UgfHwgIWJhc2UtPmlzQm94TW9k
ZWxPYmplY3QoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130733</attachid>
            <date>2012-03-07 17:29:26 -0800</date>
            <delta_ts>2012-03-12 16:00:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77916-20120307172924.patch</filename>
            <type>text/plain</type>
            <size>17245</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDEyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgTGF5b3V0VW5p
dCB1c2FnZSBpbiBSZW5kZXJNYXRoTUwqIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaCBpcyB0byBl
bnN1cmUgTWF0aE1MIHJlbmRlcmluZyBkb2VzIG5vdCByZWdyZXNzIHdoZW4KKyAgICAgICAgd2Ug
c3dpdGNoIHRvIHN1Yi1waXhlbCBsYXlvdXQuIEEgc3Vic2VxdWVudCBwYXRjaCBjYW4gbGlrZWx5
IGltcHJvdmUgTWF0aE1MJ3MKKyAgICAgICAgcmVuZGVyaW5nIHdoZW4gem9vbSBpcyBhcHBsaWVk
LgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJy
ZW50IGhldXJpc3RpY3MgZm9yIHBvc2l0aW9uaW5nLAorICAgICAgICB3ZSBjb250aW51ZSB0byB1
c2UgaW50ZWdlcnMgZm9yIHNpemVzIGFuZCBsb2NhdGlvbnMsIHVzaW5nIHBpeGVsIHNuYXBwaW5n
CisgICAgICAgIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIG90aGVyIFJlbmRlcmluZyBjbGFzc2Vz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQpOiBDbGVhbmluZyB1cCBkZWJ1ZyBwYWlu
dGluZyB0byBiZSBvbgorICAgICAgICBwaXhlbCBib3VuZGFyaWVzIGluc3RlYWQgb2Ygc3VicGl4
ZWwuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQpOiBSZXZlcnRp
bmcgdG8gaW50ZWdlcnMgZm9yIGRldGVybWluaW5nCisgICAgICAgIHRoZSB2ZXJ0aWNhbCBvZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YmFzZWxpbmVQb3Np
dGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KTogVXNpbmcgaW50ZWdl
cnMgZm9yIGhlaWdodCBhbmQgd2lkdGgKKyAgICAgICAgYW5kIG9ubHkgYWNjdW11bGF0aW5nIHBp
eGVsIHNuYXBwZWQgdmFsdWVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6
bGF5b3V0KTogU2V0dGluZyBwYWRkaW5nIHdpdGggaW50ZWdlcnMgdG8KKyAgICAgICAgYXZvaWQg
aW5jb25zaXN0ZW50IHJvdW5kaW5nIGJhc2VkIG9uIHRoZSByb290J3MgbG9jYXRpb24uCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MUm93OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxTcXVhcmVSb290OjpwYWludCk6IFNlZSBSZW5kZXJNYXRoTUxSb290LgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6bGF5b3V0KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0T2Zmc2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFVuZGVyT3Zlcjo6bGF5b3V0KToKKwogMjAxMi0wMy0wNyAgRW1pbCBBIEVrbHVuZCAgPGVhZUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hhbmdlIHJlbWFpbmluZyBzY3JvbGwgbWV0aG9kcyB0
byBpbnRlZ2VycwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDExMDEyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MiwyMiArODIsMjIgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFp
bnRJbmZvJgogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwog
ICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JT
cGFjZVNSR0IpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWlu
dE9mZnNldCwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0
aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xp
bmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWln
aHQoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkp
LCBMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsKLSAgICBpbmZvLmNvbnRl
eHQtPmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIExheW91dFBvaW50KGFkanVzdGVkUGFp
bnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7
CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQ
b2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCks
IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54
KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAr
IHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGlu
ZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55
KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNl
dC55KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSkpOworICAgIGluZm8uY29udGV4dC0+
ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0
KCkpKTsKICAgICAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9wKCk7CiAgICAgCiAgICAg
aW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDApLCBDb2xvclNwYWNl
U1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCks
IExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCkpOworICAgIGluZm8uY29udGV4dC0+ZHJh
d0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZz
ZXQueSgpICsgdG9wU3RhcnQpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBp
eGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3Rh
cnQpKTsKICAgICAKLSAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0
aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAgIGludCBiYXNlbGluZSA9IHJv
dW5kVG9JbnQoYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6
b250YWxMaW5lKSk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xv
cigyNTUsIDAsIDApLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5k
cmF3TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBiYXNlbGluZSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSkp
OworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpLCBJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoREVCVUdf
TUFUSF9MQVlPVVQpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MRnJhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCShyZXZpc2lvbiAxMTAxMjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJh
Y3Rpb246OnBhaW50KFBhaW50SW4KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCFtX2xpbmVUaGlj
a25lc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQg
PSAwOworICAgIGludCB2ZXJ0aWNhbE9mZnNldCA9IDA7CiAgICAgLy8gVGhlIGNoaWxkcmVuIGFy
ZSBhbHdheXMgUmVuZGVyTWF0aE1MQmxvY2sgaW5zdGFuY2VzCiAgICAgaWYgKGZpcnN0Q2hpbGQo
KS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CiAgICAgICAgIGludCBhZGp1c3RGb3JUaGlja25l
c3MgPSBtX2xpbmVUaGlja25lc3MgPiAxID8gaW50KG1fbGluZVRoaWNrbmVzcyAvIDIpIDogMTsK
QEAgLTE1OSw5ICsxNTksOSBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWlu
dEluCiAgICAgICAgICAgICBhZGp1c3RGb3JUaGlja25lc3MrKzsKICAgICAgICAgUmVuZGVyTWF0
aE1MQmxvY2sqIG51bWVyYXRvciA9IHRvUmVuZGVyTWF0aE1MQmxvY2soZmlyc3RDaGlsZCgpKTsK
ICAgICAgICAgaWYgKG51bWVyYXRvci0+aXNSZW5kZXJNYXRoTUxSb3coKSkKLSAgICAgICAgICAg
IHZlcnRpY2FsT2Zmc2V0ID0gbnVtZXJhdG9yLT5vZmZzZXRIZWlnaHQoKSArIGFkanVzdEZvclRo
aWNrbmVzczsKKyAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gbnVtZXJhdG9yLT5waXhlbFNu
YXBwZWRPZmZzZXRIZWlnaHQoKSArIGFkanVzdEZvclRoaWNrbmVzczsKICAgICAgICAgZWxzZSAK
LSAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gbnVtZXJhdG9yLT5vZmZzZXRIZWlnaHQoKTsg
ICAgICAgIAorICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPnBpeGVsU25h
cHBlZE9mZnNldEhlaWdodCgpOyAgICAgICAgCiAgICAgfQogICAgIAogICAgIEludFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWlu
dChQYWludEluCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7
CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBp
bmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55
KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIElu
dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRo
TUxGcmFjdGlvbjo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5l
LCBMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQ
b3NpdGlvbk1vZGUpIGNvbnN0CkBAIC0xODYsNyArMTg2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJN
YXRoTUxGcmFjdGlvbjo6YmFzZWxpbgogICAgICAgICBlbHNlIGlmIChuZXh0U2libGluZygpKQog
ICAgICAgICAgICAgcmVmU3R5bGUgPSBuZXh0U2libGluZygpLT5zdHlsZSgpOwogICAgICAgICBp
bnQgc2hpZnQgPSBpbnQoY2VpbCgocmVmU3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpICsg
MSkgLyAyKSk7Ci0gICAgICAgIHJldHVybiBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpICsgc2hp
ZnQ7CisgICAgICAgIHJldHVybiBudW1lcmF0b3ItPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgp
ICsgc2hpZnQ7CiAgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlv
bihBbHBoYWJldGljQmFzZWxpbmUsIGZpcnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0
aW9uTW9kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDExMDEyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCwxOCArMTA4LDE4IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFp
bnRJbmZvJiAKICAgICAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KGxhc3RDaGlsZCgpKTsKICAgICAKLSAgICBMYXlvdXRVbml0IG1h
eEhlaWdodCA9IGluZGV4Qm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICBpbnQgbWF4SGVpZ2h0ID0g
aW5kZXhCb3gtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpOwogICAgIC8vIGRlZmF1bHQgdG8g
dGhlIGZvbnQgc2l6ZSBpbiBwaXhlbHMgaWYgd2UncmUgZW1wdHkKICAgICBpZiAoIW1heEhlaWdo
dCkKICAgICAgICAgbWF4SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udFNpemUoKTsKLSAgICBMYXlvdXRV
bml0IHdpZHRoID0gaW5kZXhCb3gtPm9mZnNldFdpZHRoKCk7CisgICAgaW50IHdpZHRoID0gaW5k
ZXhCb3gtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCk7CiAgICAgCi0gICAgTGF5b3V0VW5pdCBp
bmRleFdpZHRoID0gMDsKKyAgICBpbnQgaW5kZXhXaWR0aCA9IDA7CiAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50ICE9IGxhc3RDaGls
ZCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKICAgICAg
ICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KGN1cnJlbnQpOwotICAgICAgICAgICAgaW5kZXhXaWR0aCArPSBib3gtPm9mZnNldFdpZHRoKCk7
CisgICAgICAgICAgICBpbmRleFdpZHRoICs9IGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgo
KTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsK
ICAgICB9CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQ
YWludEluZm8mIAogICAgIHdpZHRoICs9IHRvcFN0YXJ0U2hpZnQ7CiAgICAgCiAgICAgaW50IHJv
b3RQYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdSb290UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXpl
KCkpOwotICAgIExheW91dFVuaXQgc3RhcnQgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGlu
ZGV4V2lkdGggKyBnUmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZh
bHVlKCkgLSByb290UGFkOworICAgIGludCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
ICsgaW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0
KCkudmFsdWUoKSAtIHJvb3RQYWQ7CiAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5zZXRZKGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgc3R5bGUoKS0+cGFkZGluZ1RvcCgpLnZhbHVlKCkgLSByb290
UGFkKTsKICAgICAKICAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlm
dCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAhbGFzdENo
aWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSktPm9mZnNldEhlaWdodCgpOworICAgIGlu
dCBtYXhIZWlnaHQgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGxhc3RDaGlsZCgpKS0+cGl4ZWxT
bmFwcGVkT2Zmc2V0SGVpZ2h0KCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0g
bGFzdENoaWxkKCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY3VycmVudCkKQEAgLTIwOSwxNyAr
MjA5LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICAgICAgbWF4SGVp
Z2h0ID0gc3R5bGUoKS0+Zm9udFNpemUoKTsKICAgICAKICAgICAvLyBCYXNlIGhlaWdodCBhYm92
ZSB3aGljaCB0aGUgc2hhcGUgb2YgdGhlIHJvb3QgY2hhbmdlcwotICAgIExheW91dFVuaXQgdGhy
ZXNob2xkSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1RocmVzaG9sZEJhc2VIZWln
aHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICBMYXlvdXRVbml0IHRvcFN0YXJ0U2hpZnQg
PSAwOworICAgIGludCB0aHJlc2hvbGRIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdUaHJlc2hv
bGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgaW50IHRvcFN0YXJ0U2hp
ZnQgPSAwOwogICAgIAogICAgIGlmIChtYXhIZWlnaHQgPiB0aHJlc2hvbGRIZWlnaHQgJiYgdGhy
ZXNob2xkSGVpZ2h0KSB7CiAgICAgICAgIGZsb2F0IHNoaWZ0ID0gKG1heEhlaWdodCAtIHRocmVz
aG9sZEhlaWdodCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4odGhyZXNob2xkSGVpZ2h0KTsKICAgICAg
ICAgaWYgKHNoaWZ0ID4gMS4pCiAgICAgICAgICAgICBzaGlmdCA9IDEuMGY7Ci0gICAgICAgIExh
eW91dFVuaXQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHN0eWxlKCktPmZv
bnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKLSAgICAgICAgdG9wU3RhcnRTaGlmdCA9IHN0YXRp
Y19jYXN0PExheW91dFVuaXQ+KGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAq
IHNoaWZ0KTsKKyAgICAgICAgaW50IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxl
KCktPmZvbnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKKyAgICAgICAgdG9wU3RhcnRTaGlmdCA9
IHN0YXRpY19jYXN0PGludD4oZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICog
c2hpZnQpOwogICAgICAgICAKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+
Zm9udFNpemUoKSksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlKCktPnNldFBhZGRpbmdCb3R0b20o
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9u
dFNpemUoKSksIEZpeGVkKSk7CiAgICAgfQogICAgIAogICAgIC8vIFBvc2l0aW9uaW5nIG9mIHRo
ZSBpbmRleApAQCAtMjMwLDE0ICsyMzAsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlv
dXQoKQogICAgIGlmICghaW5kZXhCb3gpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBMYXlv
dXRVbml0IGluZGV4U2hpZnQgPSBpbmRleEJveC0+b2Zmc2V0V2lkdGgoKSArIHRvcFN0YXJ0U2hp
ZnQ7Ci0gICAgTGF5b3V0VW5pdCByYWRpY2FsSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5p
dD4oKDEgLSBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MpICogbWF4SGVpZ2h0KTsKLSAgICBMYXlv
dXRVbml0IHJvb3RNYXJnaW5Ub3AgPSByYWRpY2FsSGVpZ2h0ICsgc3R5bGUoKS0+cGFkZGluZ0Jv
dHRvbSgpLnZhbHVlKCkgKyBpbmRleEJveC0+b2Zmc2V0SGVpZ2h0KCkKLSAgICAgICAgLSAobWF4
SGVpZ2h0ICsgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+
Zm9udFNpemUoKSkpOworICAgIGludCBpbmRleFNoaWZ0ID0gaW5kZXhCb3gtPnBpeGVsU25hcHBl
ZE9mZnNldFdpZHRoKCkgKyB0b3BTdGFydFNoaWZ0OworICAgIGludCByYWRpY2FsSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PigoMSAtIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcykgKiBtYXhIZWln
aHQpOworICAgIGludCByb290TWFyZ2luVG9wID0gcmFkaWNhbEhlaWdodCArIHN0eWxlKCktPnBh
ZGRpbmdCb3R0b20oKS52YWx1ZSgpICsgaW5kZXhCb3gtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdo
dCgpCisgICAgICAgIC0gKG1heEhlaWdodCArIHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQYWRkaW5n
ICogc3R5bGUoKS0+Zm9udFNpemUoKSkpOwogICAgIAogICAgIHN0eWxlKCktPnNldFBhZGRpbmdM
ZWZ0KExlbmd0aChpbmRleFNoaWZ0LCBGaXhlZCkpOwogICAgIGlmIChyb290TWFyZ2luVG9wID4g
MCkKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocm9vdE1hcmdpblRvcCAr
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXpl
KCkpLCBGaXhlZCkpOworICAgICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nVG9wKExlbmd0aChyb290
TWFyZ2luVG9wICsgc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250
U2l6ZSgpKSwgRml4ZWQpKTsKICAgICAKICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKICAgICBz
ZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkodHJ1ZSwgZmFsc2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAko
cmV2aXNpb24gMTEwMTIxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MUm93OjpsYXlvdXQoKSAKIHsKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAg
ICAgCi0gICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSAwOworICAgIGludCBtYXhIZWlnaHQgPSAw
OwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBub24tb3BlcmF0b3IgbWF4IGhlaWdodCBvZiB0aGUg
cm93LgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewpAQCAtNTYsOCArNTYsOCBA
QCB2b2lkIFJlbmRlck1hdGhNTFJvdzo6bGF5b3V0KCkgCiAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
cmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjdXJyZW50KTsKICAgICAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGJveCBoYXMgYSBsYXJnZXIgaGVpZ2h0LgotICAgICAg
ICAgICAgaWYgKGJveC0+b2Zmc2V0SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCi0gICAgICAgICAgICAg
ICAgbWF4SGVpZ2h0ID0gYm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChib3gt
PnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpID4gbWF4SGVpZ2h0KQorICAgICAgICAgICAgICAg
IG1heEhlaWdodCA9IGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFNxdWFyZVJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHJldmlzaW9uIDExMDEyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9v
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBSZW5kZXJNYXRoTUxT
cXVhcmVSb290OjpwYWludChQYWludAogICAgIAogICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKIAotICAg
IExheW91dFVuaXQgbWF4SGVpZ2h0ID0gMDsKLSAgICBMYXlvdXRVbml0IHdpZHRoID0gMDsKKyAg
ICBpbnQgbWF4SGVpZ2h0ID0gMDsKKyAgICBpbnQgd2lkdGggPSAwOwogICAgIFJlbmRlck9iamVj
dCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY3VycmVudCkgewogICAgICAg
ICBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CkBAIC04NCw5ICs4NCw5IEBAIHZv
aWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICAgICAgICAgIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnJlbnQpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBib3ggaGFz
IGEgbGFyZ2VyIGhlaWdodAotICAgICAgICAgICAgaWYgKGJveC0+b2Zmc2V0SGVpZ2h0KCkgPiBt
YXhIZWlnaHQpCi0gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5vZmZzZXRIZWlnaHQo
KTsKLSAgICAgICAgICAgIHdpZHRoICs9IGJveC0+b2Zmc2V0V2lkdGgoKTsKKyAgICAgICAgICAg
IGlmIChib3gtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpID4gbWF4SGVpZ2h0KQorICAgICAg
ICAgICAgICAgIG1heEhlaWdodCA9IGJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCk7Cisg
ICAgICAgICAgICB3aWR0aCArPSBib3gtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCk7CiAgICAg
ICAgIH0KICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQpA
QCAtMTYwLDE1ICsxNjAsMTUgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQ
YWludAogCiB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OmxheW91dCgpCiB7Ci0gICAgTGF5
b3V0VW5pdCBtYXhIZWlnaHQgPSAwOworICAgIGludCBtYXhIZWlnaHQgPSAwOwogICAgIAogICAg
IFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY3VycmVu
dCkgewogICAgICAgICBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CiAgICAgICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChj
dXJyZW50KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJveC0+b2Zmc2V0SGVpZ2h0
KCkgPiBtYXhIZWlnaHQpCi0gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5vZmZzZXRI
ZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgp
ID4gbWF4SGVpZ2h0KQorICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGJveC0+cGl4ZWxTbmFw
cGVkT2Zmc2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJveC0+c3R5bGUo
KS0+c2V0VmVydGljYWxBbGlnbihCQVNFTElORSk7CiAgICAgICAgIH0KQEAgLTE3OSw4ICsxNzks
OCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OmxheW91dCgpCiAgICAgICAgIG1heEhl
aWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7CiAKICAgICAKLSAgICBpZiAobWF4SGVpZ2h0ID4g
c3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1RocmVzaG9sZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5m
b250U2l6ZSgpKSkKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3Rh
dGljX2Nhc3Q8TGF5b3V0VW5pdD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNp
emUoKSksIEZpeGVkKSk7CisgICAgaWYgKG1heEhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZ1Ro
cmVzaG9sZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSkKKyAgICAgICAgc3R5bGUo
KS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihnUm9vdEJvdHRvbVBh
ZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsKIAogICAgIAogICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAJKHJldmlzaW9uIDExMDEy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIGlubGluZSBpbnQgZ2V0
T2Zmc2V0SGVpZ2h0KFJlbmRlck9iamVjdCoKIHsKICAgICBpZiAob2JqLT5pc0JveE1vZGVsT2Jq
ZWN0KCkpIHsKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94
TW9kZWxPYmplY3Qob2JqKTsKLSAgICAgICAgcmV0dXJuIGJveC0+b2Zmc2V0SGVpZ2h0KCk7Cisg
ICAgICAgIHJldHVybiBib3gtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpOwogICAgIH0KICAg
IAogICAgIHJldHVybiAwOwpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5k
ZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAgLy8gYmFzZSByb3cgd3JhcHBlcgogICAgICAgICBi
YXNlID0gZmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoYmFzZSkgewotICAgICAgICAgICAgTGF5
b3V0VW5pdCBiYXNlSGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGJhc2UpOworICAgICAgICAgICAg
aW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CiAgICAgICAgICAgICAvLyBh
Y3R1YWwgYmFzZQogICAgICAgICAgICAgYmFzZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKICAgICAg
ICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQpAQCAtMjI2LDcg
KzIyNiw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYmFzZWxpbmUgb2YgdGhlIGJhc2Ug
dmVyc3VzIHRoZSBzdGFydCBvZiB0aGUgdW5kZXIgYmxvY2sgYW5kCiAgICAgICAgICAgICAgICAg
Ly8gYWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgdGhlIHVuZGVyIGJsb2NrLgogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IGdldE9mZnNldEhl
aWdodChiYXNlKTsKKyAgICAgICAgICAgICAgICBpbnQgYmFzZUhlaWdodCA9IGdldE9mZnNldEhl
aWdodChiYXNlKTsKICAgICAgICAgICAgICAgICAvLyBhY3R1YWwgYmFzZQogICAgICAgICAgICAg
ICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFiYXNl
IHx8ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>