<?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>80039</bug_id>
          
          <creation_ts>2012-03-01 11:45:03 -0800</creation_ts>
          <short_desc>Update usage of LayoutUnits in RenderBox</short_desc>
          <delta_ts>2012-03-05 18:43:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>568791</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 11:45:03 -0800</bug_when>
    <thetext>Updating the usage of ints/LayoutUnits in RenderBox in preparation for subpixel positioning.

Also adding some more stub methods for use with FractionalLayoutUnits when we make the switch. These will allow us to further shrink the size of the final patch that switches us over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568811</commentid>
    <comment_count>1</comment_count>
      <attachid>129730</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-01 12:15:51 -0800</bug_when>
    <thetext>Created attachment 129730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570849</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-05 10:59:33 -0800</bug_when>
    <thetext>Pinging reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571080</commentid>
    <comment_count>3</comment_count>
      <attachid>129730</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-05 15:10:17 -0800</bug_when>
    <thetext>Comment on attachment 129730
Patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:483
&gt; +    return snapSizeToPixel(clientWidth(), clientLeft());

It&apos;s unfortunate that snapSizeToPixel requires also the location as it makes those call sites less readable and more error-prone but you can&apos;t avoid that to properly snap the size :(

&gt; Source/WebCore/rendering/RenderBox.h:131
&gt; +    // FIXME: We shouldn&apos;t be returning this as a LayoutRect, since it loses its position and won&apos;t properly pixel snap.
&gt;      LayoutRect borderBoxRect() const { return LayoutRect(0, 0, width(), height()); }

It took me some time to understand your comment as you can see the issue both ways: if you properly snap your width() and height() here then you should be fine. I think I agree with the gist that is that this shouldn&apos;t return LayoutRect or properly take into account the position. I wonder if we just couldn&apos;t just remove this method as it will be evil when sub-pixels are added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571084</commentid>
    <comment_count>4</comment_count>
      <attachid>129730</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-05 15:13:01 -0800</bug_when>
    <thetext>Comment on attachment 129730
Patch

Thanks for taking the time to understand and review this patch, Julien!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571105</commentid>
    <comment_count>5</comment_count>
      <attachid>129730</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 15:33:23 -0800</bug_when>
    <thetext>Comment on attachment 129730
Patch

Rejecting attachment 129730 from commit-queue.

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

Last 500 characters of output:
ceeded at 1484 (offset 10 lines).
Hunk #7 succeeded at 3895 (offset 11 lines).
Hunk #8 succeeded at 3906 (offset 11 lines).
Hunk #9 succeeded at 3927 (offset 11 lines).
patching file Source/WebCore/rendering/RenderBox.h
Hunk #1 FAILED at 127.
1 out of 5 hunks FAILED -- saving rejects to file Source/WebCore/rendering/RenderBox.h.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Julien Cha...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/11836017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571145</commentid>
    <comment_count>6</comment_count>
      <attachid>130223</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-05 16:20:38 -0800</bug_when>
    <thetext>Created attachment 130223
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571350</commentid>
    <comment_count>7</comment_count>
      <attachid>130223</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 18:43:15 -0800</bug_when>
    <thetext>Comment on attachment 130223
Patch for landing

Clearing flags on attachment: 130223

Committed r109835: &lt;http://trac.webkit.org/changeset/109835&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571351</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 18:43:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129730</attachid>
            <date>2012-03-01 12:15:51 -0800</date>
            <delta_ts>2012-03-05 16:20:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80039-20120301121549.patch</filename>
            <type>text/plain</type>
            <size>16036</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTM4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAzLTAxICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgaW4gUmVuZGVyQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVwZGF0aW5nIHRoZSB1c2FnZSBvZiBpbnRlZ2VycyB2ZXJzdXMgTGF5
b3V0VW5pdHMgaW4gUmVuZGVyQm94IHRvIG1pcnJvciB0aGUKKyAgICAgICAgc3VicGl4ZWxsYXlv
dXQgYnJhbmNoLiBUaGlzIHJldmVydHMgYWJzb2x1dGVSZWN0cywgaW50cmluc2ljU2l6ZSwgYW5k
IGZvY3VzUmluZ1JlY3RzCisgICAgICAgIG1ldGhvZHMgdG8gdXNlIGludGVnZXJzLCBhbmQgZmxp
cEZvcldyaXRpbmdNb2RlIGZ1bmN0aW9ucyB0byBMYXlvdXRVbml0cy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlv
bmFsTGF5b3V0UmVjdDo6cGl4ZWxTbmFwcGVkWCk6IENvbnZlbmllbmNlIG1ldGhvZHMgdGhhdCBv
bmx5IGNhbGN1bGF0ZQorICAgICAgICB0aGUgbmVlZGVkIHZhbHVlcy4gVGhpcyByZXF1aXJlcyBs
ZXNzIGNvbXB1dGF0aW9uIHRoYW4gcGl4ZWxTbmFwcGVkSW50UmVjdChyKS54KCkuCisgICAgICAg
IChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6cGl4ZWxTbmFwcGVkWSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnBpeGVsU25hcHBlZFdpZHRo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6cGl4ZWxT
bmFwcGVkSGVpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6cGl4ZWxTbmFwcGVkTWF4WCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rp
b25hbExheW91dFJlY3Q6OnBpeGVsU25hcHBlZE1heFkpOiBEaXR0by4KKyAgICAgICAgKEZyYWN0
aW9uYWxMYXlvdXRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6
CisgICAgICAgIChJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OnBpeGVsU25h
cHBlZFgpOiBTdHViIG1ldGhvZHMgdG8gYWxsb3cgdXMgdG8gdXNlIEludFJlY3RzIGxpa2Ugd2Ug
ZG8KKyAgICAgICAgRnJhY3Rpb25hbExheW91dFJlY3RzLgorICAgICAgICAoV2ViQ29yZTo6SW50
UmVjdDo6cGl4ZWxTbmFwcGVkWSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6
cGl4ZWxTbmFwcGVkTWF4WCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6cGl4
ZWxTbmFwcGVkTWF4WSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6cGl4ZWxT
bmFwcGVkV2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OnBpeGVsU25h
cHBlZEhlaWdodCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6cGl4ZWxTbmFwcGVkSW50UmVjdCk6IENvbnZlbmllbmNlIG1ldGhv
ZCBmb3IgYnVpbGRpbmcgYSBwaXhlbFNuYXBwZWRJbnRSZWN0IGZyb20KKyAgICAgICAgYSBMYXlv
dXRQb2ludCBhbmQgTGF5b3V0U2l6ZSB3aXRob3V0IGNvbnN0cnVjdGluZyBhbiBpbnRlcm1lZGlh
dGUgTGF5b3V0UmVjdC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c25h
cFNpemVUb1BpeGVsKTogU3R1YiBtZXRob2QgZm9yIHNuYXBwaW5nIGEgTGF5b3V0VW5pdCByZXBy
ZXNlbnRpbmcgYSBzaXplIHRvCisgICAgICAgIGl0cyBwaXhlbCB2YWx1ZSB1c2luZyBpdHMgbG9j
YXRpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZENsaWVudFdpZHRoKTogQ2hhbmdpbmcgdG8gYWN0
dWFsbHkgY2FsbCBzbmFwU2l6ZVRvUGl4ZWwuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnBpeGVsU25hcHBlZENsaWVudEhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjphYnNvbHV0ZVJlY3RzKTogU3dpdGNoaW5nIHRvIHJldHVybiBJbnRSZWN0cyB0aGF0
IHJlcHJlc2VudCB0aGUgYWN0dWFsCisgICAgICAgIHJlbmRlcmVkIGxvY2F0aW9uIG9uIHNjcmVl
bi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXIpOiBPbmUtbGlu
ZXIgc3dpdGNoaW5nIGFuIEludFNpemUoKSB0byBMYXlvdXRTaXplKCkgdG8KKyAgICAgICAgYXZv
aWQgdW5uZWNlc3NhcnkgY29udmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyk6IFByZXBhcmluZyBmb3IgdGhlIGNvbnZl
cnNpb24gYnkKKyAgICAgICAgcmVwbGFjaW5nIDAgd2l0aCB6ZXJvTGF5b3V0VW5pdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25MaW5lQm94KTogUHJlcGFyaW5nIGZvciBj
b252ZXJzaW9uIGJ5IHJlcGxhY2luZyBscm91bmRmCisgICAgICAgIHdpdGggcm91bmRlZExheW91
dFVuaXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZSk6
IFN3aXRjaGluZyB0byB1c2UgTGF5b3V0VW5pdHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5oOgorICAgICAgICAoUmVuZGVyQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCk6IENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm91bmRpbmdCb3gpOiBDb252ZXJ0aW5nIHRv
IGEgcGl4ZWxTbmFwcGVkSW50UmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50
cmluc2ljU2l6ZSk6IEludHJpbnNpYyBzaXplcyBzaG91bGQgYWx3YXlzIGJlIGludGVnZXJzLgor
CiAyMDEyLTAzLTAxICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEw
ODk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlv
dXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDEzIEBAIHB1YmxpYzoKICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLmhlaWdodCgpOyB9CiAKKyAgICBpbnQgcGl4ZWxTbmFwcGVkWCgpIGNvbnN0IHsgcmV0dXJu
IHgoKS5yb3VuZCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZFkoKSBjb25zdCB7IHJldHVybiB5
KCkucm91bmQoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHNuYXBTaXplVG9QaXhlbCh3aWR0aCgpLCB4KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHNuYXBTaXplVG9QaXhlbChoZWlnaHQoKSwgeSgpKTsgfQor
ICAgIGludCBwaXhlbFNuYXBwZWRNYXhYKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkWCgp
ICsgcGl4ZWxTbmFwcGVkV2lkdGgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29u
c3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkWSgpICsgcGl4ZWxTbmFwcGVkSGVpZ2h0KCk7IH0KKwog
ICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4
KTsgfQogICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24u
c2V0WSh5KTsgfQogICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgp
IHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTA4OTk0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5
NywxNSBAQCBwdWJsaWM6CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndp
ZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgp
OyB9CiAKKyAgICAvLyBGSVhNRTogVGhlc2UgbWV0aG9kcyBhcmUgaGVyZSBvbmx5IHRvIGVhc2Ug
dGhlIHRyYW5zaXRpb24gdG8gc3ViLXBpeGVsIGxheW91dC4gVGhleSBzaG91bGQKKyAgICAvLyBi
ZSByZW1vdmVkIHdoZW4gd2UgY2xvc2UgaHR0cDovL3dlYmtpdC5vcmcvYi82MDMxOAorICAgIGlu
dCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBp
bnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9CisgICAg
aW50IHBpeGVsU25hcHBlZE1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Cisg
ICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsg
fQorICAgIGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0
aCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS5oZWlnaHQoKTsgfQorCiAgICAgdm9pZCBzZXRYKGludCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4
KTsgfQogICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KICAgICB2
b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gMTA5MzgwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01OCwxMSArNTksMjIgQEAgaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50
UmVjdChjb25zdAogICAgIHJldHVybiByZWN0OwogfQogCitpbmxpbmUgSW50UmVjdCBwaXhlbFNu
YXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgTGF5b3V0U2l6
ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgc2l6ZSk7Cit9CisKIGlu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCiB7
CiAgICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRv
cCk7CiB9CiAKK2lubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91dFVuaXQgc2l6ZSwgTGF5
b3V0VW5pdCBsb2NhdGlvbikgCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKwogaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5
b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMDg5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDEyICs0ODAsMTIgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbgogCiBpbnQgUmVuZGVyQm94
OjpwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsaWVudFdp
ZHRoKCk7CisgICAgcmV0dXJuIHNuYXBTaXplVG9QaXhlbChjbGllbnRXaWR0aCgpLCBjbGllbnRM
ZWZ0KCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpwaXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKSBj
b25zdAogewotICAgIHJldHVybiBjbGllbnRIZWlnaHQoKTsKKyAgICByZXR1cm4gc25hcFNpemVU
b1BpeGVsKGNsaWVudEhlaWdodCgpLCBjbGllbnRUb3AoKSk7CiB9CiAKIGludCBSZW5kZXJCb3g6
OnNjcm9sbFdpZHRoKCkgY29uc3QKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIFJlbmRlckJveDo6
c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCiAKIHZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3QKIHsKLSAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9m
ZnNldCwgc2l6ZSgpKSk7CisgICAgcmVjdHMuYXBwZW5kKHBpeGVsU25hcHBlZEludFJlY3QoYWNj
dW11bGF0ZWRPZmZzZXQsIHNpemUoKSkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdApAQCAt
NTgxLDEwICs1ODEsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JS
ZQogICAgIHJldHVybiBib3g7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25h
bE9mZnNldCkKK3ZvaWQgUmVuZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKICAgICBp
ZiAoIXNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFk
ZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOworICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFw
cGVkSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAogTGF5b3V0UmVjdCBS
ZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdApAQCAtMTA3MCw3ICsxMDcwLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYQogdm9pZCBSZW5kZXJCb3g6OnBh
aW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywg
Y29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsCiAgICAg
QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgUmVuZGVyT2JqZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KQogewotICAgIHBhaW50RmlsbExh
eWVyRXh0ZW5kZWQocGFpbnRJbmZvLCBjLCBmaWxsTGF5ZXIsIHJlY3QsIGJsZWVkQXZvaWRhbmNl
LCAwLCBJbnRTaXplKCksIG9wLCBiYWNrZ3JvdW5kT2JqZWN0KTsKKyAgICBwYWludEZpbGxMYXll
ckV4dGVuZGVkKHBhaW50SW5mbywgYywgZmlsbExheWVyLCByZWN0LCBibGVlZEF2b2lkYW5jZSwg
MCwgTGF5b3V0U2l6ZSgpLCBvcCwgYmFja2dyb3VuZE9iamVjdCk7CiB9CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9z
aXRpb24gPSBsb2dpY2FsVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFBhZ2VPZmZzZXRG
b3JDb250YWluaW5nQmxvY2sgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9n
aWNhbFRvcCgpOwogICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5vZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogMDsK
KyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9u
ID8gcmVnaW9uLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlIDogemVyb0xheW91dFVuaXQ7CiAgICAgICAgIGxvZ2ljYWxU
b3BQb3NpdGlvbiA9IG1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiAr
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24pOwogICAgICAgICBjb250YWluaW5nQmxvY2tS
ZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwogICAgIH0KQEAg
LTE0NzQsNyArMTQ3NCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5l
Qm8KICAgICAgICAgICAgIC8vIG91ciBvYmplY3Qgd2FzIGlubGluZSBvcmlnaW5hbGx5LCBzaW5j
ZSBvdGhlcndpc2UgaXQgd291bGQgaGF2ZSBlbmRlZCB1cCB1bmRlcm5lYXRoCiAgICAgICAgICAg
ICAvLyB0aGUgaW5saW5lcy4KICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBib3gt
PnJvb3QoKTsKLSAgICAgICAgICAgIHJvb3QtPmJsb2NrKCktPnNldFN0YXRpY0lubGluZVBvc2l0
aW9uRm9yQ2hpbGQodGhpcywgcm9vdC0+bGluZVRvcFdpdGhMZWFkaW5nKCksIGxyb3VuZGYoYm94
LT5sb2dpY2FsTGVmdCgpKSk7CisgICAgICAgICAgICByb290LT5ibG9jaygpLT5zZXRTdGF0aWNJ
bmxpbmVQb3NpdGlvbkZvckNoaWxkKHRoaXMsIHJvb3QtPmxpbmVUb3BXaXRoTGVhZGluZygpLCBy
b3VuZGVkTGF5b3V0VW5pdChib3gtPmxvZ2ljYWxMZWZ0KCkpKTsKICAgICAgICAgICAgIGlmIChz
dHlsZSgpLT5oYXNTdGF0aWNJbmxpbmVQb3NpdGlvbihib3gtPmlzSG9yaXpvbnRhbCgpKSkKICAg
ICAgICAgICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgLy8gSnVzdCBn
byBhaGVhZCBhbmQgbWFyayB0aGUgcG9zaXRpb25lZCBvYmplY3QgYXMgbmVlZGluZyBsYXlvdXQs
IHNvIGl0IHdpbGwgdXBkYXRlIGl0cyBwb3NpdGlvbiBwcm9wZXJseS4KICAgICAgICAgfSBlbHNl
IHsKQEAgLTM4ODQsNyArMzg4NCw3IEBAIExheW91dFBvaW50IFJlbmRlckJveDo6ZmxpcEZvcldy
aXRpbmdNb2QKICAgICByZXR1cm4gTGF5b3V0UG9pbnQocG9pbnQueCgpICsgd2lkdGgoKSAtIGNo
aWxkLT53aWR0aCgpIC0gKDIgKiBjaGlsZC0+eCgpKSwgcG9pbnQueSgpKTsKIH0KIAotdm9pZCBS
ZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShJbnRSZWN0JiByZWN0KSBjb25zdAordm9pZCBS
ZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRSZWN0JiByZWN0KSBjb25zdAogewog
ICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzg5NSwxOCArMzg5NSwxOCBAQCB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldy
aXRpbmdNb2RlKEludFJlCiAgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkp
OwogfQogCi1pbnQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoaW50IHBvc2l0aW9uKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRVbml0
IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgIHJldHVybiBsb2dpY2Fs
SGVpZ2h0KCkgLSBwb3NpdGlvbjsKIH0KIAotSW50UG9pbnQgUmVuZGVyQm94OjpmbGlwRm9yV3Jp
dGluZ01vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKSBjb25zdAorTGF5b3V0UG9pbnQgUmVu
ZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgTGF5b3V0UG9pbnQmIHBvc2l0aW9uKSBj
b25zdAogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gSW50UG9pbnQocG9zaXRpb24ueCgpLCBoZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkg
OiBJbnRQb2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOworICAgIHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0UG9pbnQocG9zaXRpb24ueCgp
LCBoZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBMYXlvdXRQb2ludCh3aWR0aCgpIC0gcG9zaXRp
b24ueCgpLCBwb3NpdGlvbi55KCkpOwogfQogCiBMYXlvdXRQb2ludCBSZW5kZXJCb3g6OmZsaXBG
b3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBj
b25zdApAQCAtMzkxNiwxMSArMzkxNiwxMSBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3g6OmZsaXBG
b3JXcml0aW5nTW9kCiAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2sodGhpcyktPmZsaXBGb3JXcml0
aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMocG9pbnQpOwogfQogCi1JbnRTaXplIFJlbmRlckJveDo6
ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFNpemUmIG9mZnNldCkgY29uc3QKK0xheW91dFNp
emUgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
KSBjb25zdAogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSkKICAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IEludFNpemUob2Zmc2V0LndpZHRoKCksIGhlaWdodCgpIC0gb2Zmc2V0LmhlaWdo
dCgpKSA6IEludFNpemUod2lkdGgoKSAtIG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkp
OworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZShvZmZz
ZXQud2lkdGgoKSwgaGVpZ2h0KCkgLSBvZmZzZXQuaGVpZ2h0KCkpIDogTGF5b3V0U2l6ZSh3aWR0
aCgpIC0gb2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSk7CiB9CiAKIEZsb2F0UG9pbnQg
UmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24p
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAx
MDg5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw4ICsxMjcsMTAgQEAgcHVibGljOgogICAgIExheW91dFJlY3QgZnJhbWVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KICAgICB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZnJhbWVSZWN0ID0gcmVjdDsgfQogCisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSByZXR1cm5pbmcgdGhpcyBhcyBhIExheW91dFJlY3Qs
IHNpbmNlIGl0IGxvc2VzIGl0cyBwb3NpdGlvbiBhbmQgd29uJ3QgcHJvcGVybHkgcGl4ZWwgc25h
cC4KICAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRS
ZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBi
b3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsgfSAKKyAg
ICBJbnRSZWN0IHBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIEludFNpemUobV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkV2lkdGgoKSwg
bV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkSGVpZ2h0KCkpKTsgfQorICAgIHZpcnR1YWwgSW50UmVj
dCBib3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIHBpeGVsU25hcHBlZEJvcmRlckJv
eFJlY3QoKTsgfSAKIAogICAgIC8vIFRoZSBjb250ZW50IGFyZWEgb2YgdGhlIGJveCAoZXhjbHVk
ZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkg
Y29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQo
KSk7IH0KQEAgLTEzOSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBCb3VuZHMgb2YgdGhl
IG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIExheW91dFBvaW50KiBjYWNoZWRPZmZzZXRU
b1JlcGFpbnRDb250YWluZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1
YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5n
IGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxpbmdCb3goKSBjb25zdDsKQEAg
LTI0Niw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbGxhcHNl
ZE1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpOyB9CiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbWFy
Z2luQWZ0ZXIoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Owog
ICAgIAogICAgIExheW91dFJlY3QgcmVmbGVjdGlvbkJveCgpIGNvbnN0OwpAQCAtMzIxLDcgKzMy
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgp
ICYmIHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiAhaXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpICYmIChpc1Jvb3QoKSB8fCBpc0JvZHkoKSk7CiAgICAgfQogCi0gICAgdmlydHVh
bCBMYXlvdXRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKCk7
IH0KKyAgICB2aXJ0dWFsIEludFNpemUgaW50cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIElu
dFNpemUoKTsgfQogICAgIExheW91dFVuaXQgaW50cmluc2ljTG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGludHJpbnNpY1Np
emUoKS53aWR0aCgpIDogaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpOyB9CiAgICAgTGF5b3V0VW5p
dCBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IGludHJpbnNp
Y1NpemUoKS53aWR0aCgpOyB9CiAKQEAgLTQyNCwxMSArNDI2LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCBmbGlwRm9yV3JpdGluZ01v
ZGVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYpIGNv
bnN0OwotICAgIGludCBmbGlwRm9yV3JpdGluZ01vZGUoaW50IHBvc2l0aW9uKSBjb25zdDsgLy8g
VGhlIG9mZnNldCBpcyBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uICh5IGZvciBob3Jpem9udGFsIHdy
aXRpbmcgbW9kZXMsIHggZm9yIHZlcnRpY2FsIHdyaXRpbmcgbW9kZXMpLgotICAgIEludFBvaW50
IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIExheW91dFVu
aXQgZmxpcEZvcldyaXRpbmdNb2RlKExheW91dFVuaXQgcG9zaXRpb24pIGNvbnN0OyAvLyBUaGUg
b2Zmc2V0IGlzIGluIHRoZSBibG9jayBkaXJlY3Rpb24gKHkgZm9yIGhvcml6b250YWwgd3JpdGlu
ZyBtb2RlcywgeCBmb3IgdmVydGljYWwgd3JpdGluZyBtb2RlcykuCisgICAgTGF5b3V0UG9pbnQg
ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAgICAgTGF5b3V0
UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwotICAgIEludFNpemUgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFNpemUm
KSBjb25zdDsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShJbnRSZWN0JikgY29uc3Q7Cisg
ICAgTGF5b3V0U2l6ZSBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0
OworICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKExheW91dFJlY3QmKSBjb25zdDsKICAgICBG
bG9hdFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgLy8gVGhl
c2UgcmVwcmVzZW50IHlvdXIgbG9jYXRpb24gcmVsYXRpdmUgdG8geW91ciBjb250YWluZXIgYXMg
YSBwaHlzaWNhbCBvZmZzZXQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130223</attachid>
            <date>2012-03-05 16:20:38 -0800</date>
            <delta_ts>2012-03-05 18:43:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-80039-20120305162036.patch</filename>
            <type>text/plain</type>
            <size>16103</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAzLTA1ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgaW4gUmVuZGVyQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IEp1bGllbiBDaGFm
ZnJhaXguCisKKyAgICAgICAgVXBkYXRpbmcgdGhlIHVzYWdlIG9mIGludGVnZXJzIHZlcnN1cyBM
YXlvdXRVbml0cyBpbiBSZW5kZXJCb3ggdG8gbWlycm9yIHRoZQorICAgICAgICBzdWJwaXhlbGxh
eW91dCBicmFuY2guIFRoaXMgcmV2ZXJ0cyBhYnNvbHV0ZVJlY3RzLCBpbnRyaW5zaWNTaXplLCBh
bmQgZm9jdXNSaW5nUmVjdHMKKyAgICAgICAgbWV0aG9kcyB0byB1c2UgaW50ZWdlcnMsIGFuZCBm
bGlwRm9yV3JpdGluZ01vZGUgZnVuY3Rpb25zIHRvIExheW91dFVuaXRzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0
aW9uYWxMYXlvdXRSZWN0OjpwaXhlbFNuYXBwZWRYKTogQ29udmVuaWVuY2UgbWV0aG9kcyB0aGF0
IG9ubHkgY2FsY3VsYXRlCisgICAgICAgIHRoZSBuZWVkZWQgdmFsdWVzLiBUaGlzIHJlcXVpcmVz
IGxlc3MgY29tcHV0YXRpb24gdGhhbiBwaXhlbFNuYXBwZWRJbnRSZWN0KHIpLngoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpwaXhlbFNuYXBwZWRZKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6cGl4ZWxTbmFwcGVkV2lk
dGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpwaXhl
bFNuYXBwZWRIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlv
dXRSZWN0OjpwaXhlbFNuYXBwZWRNYXhYKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6cGl4ZWxTbmFwcGVkTWF4WSk6IERpdHRvLgorICAgICAgICAoRnJh
Y3Rpb25hbExheW91dFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
aDoKKyAgICAgICAgKEludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6cGl4ZWxT
bmFwcGVkWCk6IFN0dWIgbWV0aG9kcyB0byBhbGxvdyB1cyB0byB1c2UgSW50UmVjdHMgbGlrZSB3
ZSBkbworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdHMuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRSZWN0OjpwaXhlbFNuYXBwZWRZKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0
OjpwaXhlbFNuYXBwZWRNYXhYKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0Ojpw
aXhlbFNuYXBwZWRNYXhZKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpwaXhl
bFNuYXBwZWRXaWR0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6cGl4ZWxT
bmFwcGVkSGVpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFR5cGVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpwaXhlbFNuYXBwZWRJbnRSZWN0KTogQ29udmVuaWVuY2UgbWV0
aG9kIGZvciBidWlsZGluZyBhIHBpeGVsU25hcHBlZEludFJlY3QgZnJvbQorICAgICAgICBhIExh
eW91dFBvaW50IGFuZCBMYXlvdXRTaXplIHdpdGhvdXQgY29uc3RydWN0aW5nIGFuIGludGVybWVk
aWF0ZSBMYXlvdXRSZWN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpz
bmFwU2l6ZVRvUGl4ZWwpOiBTdHViIG1ldGhvZCBmb3Igc25hcHBpbmcgYSBMYXlvdXRVbml0IHJl
cHJlc2VudGluZyBhIHNpemUgdG8KKyAgICAgICAgaXRzIHBpeGVsIHZhbHVlIHVzaW5nIGl0cyBs
b2NhdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgpOiBDaGFuZ2luZyB0byBh
Y3R1YWxseSBjYWxsIHNuYXBTaXplVG9QaXhlbC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmFic29sdXRlUmVjdHMpOiBTd2l0Y2hpbmcgdG8gcmV0dXJuIEludFJlY3RzIHRo
YXQgcmVwcmVzZW50IHRoZSBhY3R1YWwKKyAgICAgICAgcmVuZGVyZWQgbG9jYXRpb24gb24gc2Ny
ZWVuLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEZpbGxMYXllcik6IE9uZS1s
aW5lciBzd2l0Y2hpbmcgYW4gSW50U2l6ZSgpIHRvIExheW91dFNpemUoKSB0bworICAgICAgICBh
dm9pZCB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKTogUHJlcGFyaW5nIGZvciB0aGUgY29u
dmVyc2lvbiBieQorICAgICAgICByZXBsYWNpbmcgMCB3aXRoIHplcm9MYXlvdXRVbml0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3gpOiBQcmVwYXJpbmcgZm9y
IGNvbnZlcnNpb24gYnkgcmVwbGFjaW5nIGxyb3VuZGYKKyAgICAgICAgd2l0aCByb3VuZGVkTGF5
b3V0VW5pdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2Rl
KTogU3dpdGNoaW5nIHRvIHVzZSBMYXlvdXRVbml0cy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KTogQ29udmVuaWVuY2UgbWV0aG9kLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpib3JkZXJCb3VuZGluZ0JveCk6IENvbnZlcnRpbmcg
dG8gYSBwaXhlbFNuYXBwZWRJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpp
bnRyaW5zaWNTaXplKTogSW50cmluc2ljIHNpemVzIHNob3VsZCBhbHdheXMgYmUgaW50ZWdlcnMu
CisKIDIwMTItMDMtMDUgIFJvYmluIENhbyAgPHJvYmluLmNhb0B0b3JjaG1vYmlsZS5jb20uY24+
CiAKICAgICAgICAgW0JsYWNrQmVycnldIFVwc3RyZWFtIExheWVyUmVuZGVyZXJTdXJmYWNlLntj
cHAsIGh9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEwOTgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDYgKzY1LDEzIEBAIHB1YmxpYzoKICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CiAK
KyAgICBpbnQgcGl4ZWxTbmFwcGVkWCgpIGNvbnN0IHsgcmV0dXJuIHgoKS5yb3VuZCgpOyB9Cisg
ICAgaW50IHBpeGVsU25hcHBlZFkoKSBjb25zdCB7IHJldHVybiB5KCkucm91bmQoKTsgfQorICAg
IGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHNuYXBTaXplVG9QaXhlbCh3
aWR0aCgpLCB4KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHNuYXBTaXplVG9QaXhlbChoZWlnaHQoKSwgeSgpKTsgfQorICAgIGludCBwaXhlbFNuYXBw
ZWRNYXhYKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkWCgpICsgcGl4ZWxTbmFwcGVkV2lk
dGgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxT
bmFwcGVkWSgpICsgcGl4ZWxTbmFwcGVkSGVpZ2h0KCk7IH0KKwogICAgIHZvaWQgc2V0WChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQogICAgIHZvaWQgc2V0
WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQogICAgIHZv
aWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRo
KHdpZHRoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaAkocmV2aXNpb24gMTA5ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDE1IEBAIHB1YmxpYzoK
ICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQogICAgIGlu
dCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KIAorICAgIC8vIEZJ
WE1FOiBUaGVzZSBtZXRob2RzIGFyZSBoZXJlIG9ubHkgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0
byBzdWItcGl4ZWwgbGF5b3V0LiBUaGV5IHNob3VsZAorICAgIC8vIGJlIHJlbW92ZWQgd2hlbiB3
ZSBjbG9zZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYwMzE4CisgICAgaW50IHBpeGVsU25hcHBlZFgo
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRZ
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVk
TWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFw
cGVkTWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9CisgICAgaW50IHBpeGVs
U25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBpbnQg
cGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisK
ICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9CiAgICAgdm9pZCBz
ZXRZKGludCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQogICAgIHZvaWQgc2V0V2lkdGgoaW50
IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMDk4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBA
QAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDEx
ICs2NCwyMiBAQCBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91CiAgICAg
cmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAoraW5saW5lIElu
dFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNv
bnN0IExheW91dFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIHNp
emUpOworfQorCiBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKExh
eW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91dFVu
aXQgYm90dG9tKQogewogICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0
LCBib3R0b20gLSB0b3ApOwogfQogCitpbmxpbmUgaW50IHNuYXBTaXplVG9QaXhlbChMYXlvdXRV
bml0IHNpemUsIExheW91dFVuaXQgbG9jYXRpb24pIAoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgcmV0dXJuIHNpemU7Cit9CisKIGlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRT
aXplKGNvbnN0IExheW91dFNpemUmIHMpCiB7CiAgICAgcmV0dXJuIHM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTA5ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCwx
MiArNDgwLDEyIEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb24KIAog
aW50IFJlbmRlckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgoKSBjb25zdAogewotICAgIHJl
dHVybiBjbGllbnRXaWR0aCgpOworICAgIHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwoY2xpZW50V2lk
dGgoKSwgY2xpZW50TGVmdCgpKTsKIH0KIAogaW50IFJlbmRlckJveDo6cGl4ZWxTbmFwcGVkQ2xp
ZW50SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xpZW50SGVpZ2h0KCk7CisgICAgcmV0
dXJuIHNuYXBTaXplVG9QaXhlbChjbGllbnRIZWlnaHQoKSwgY2xpZW50VG9wKCkpOwogfQogCiBp
bnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CkBAIC01MzIsNyArNTMyLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogCiB2b2lkIFJlbmRlckJveDo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3Qo
YWNjdW11bGF0ZWRPZmZzZXQsIHNpemUoKSkpOworICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBw
ZWRJbnRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhl
ZCkgY29uc3QKQEAgLTU4MSwxMCArNTgxLDEwIEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpvdXRs
aW5lQm91bmRzRm9yUmUKICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIFJlbmRlckJveDo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9p
bnQmIGFkZGl0aW9uYWxPZmZzZXQpCit2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZz
ZXQpCiB7CiAgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQo
TGF5b3V0UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKKyAgICAgICAgcmVjdHMuYXBw
ZW5kKHBpeGVsU25hcHBlZEludFJlY3QoYWRkaXRpb25hbE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAK
IExheW91dFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKQEAgLTEwNzgsNyAr
MTA3OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMoY29uc3QgUGEKIHZvaWQg
UmVuZGVyQm94OjpwYWludEZpbGxMYXllcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgQ29sb3ImIGMsIGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0LAogICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCkKIHsKLSAg
ICBwYWludEZpbGxMYXllckV4dGVuZGVkKHBhaW50SW5mbywgYywgZmlsbExheWVyLCByZWN0LCBi
bGVlZEF2b2lkYW5jZSwgMCwgSW50U2l6ZSgpLCBvcCwgYmFja2dyb3VuZE9iamVjdCk7CisgICAg
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChwYWludEluZm8sIGMsIGZpbGxMYXllciwgcmVjdCwgYmxl
ZWRBdm9pZGFuY2UsIDAsIExheW91dFNpemUoKSwgb3AsIGJhY2tncm91bmRPYmplY3QpOwogfQog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTI3Niw3ICsxMjc2LDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aAogICAgIExheW91dFVuaXQg
bG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0
ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSAtIGxvZ2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+b2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSA6IDA7CisgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJl
Z2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
IC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IHplcm9MYXlvdXRVbml0OwogICAg
ICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2Fs
VG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKICAgICB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFJlbmRlckJveDo6cG9zaXRpb25M
aW5lQm94KElubGluZUJvCiAgICAgICAgICAgICAvLyBvdXIgb2JqZWN0IHdhcyBpbmxpbmUgb3Jp
Z2luYWxseSwgc2luY2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUgZW5kZWQgdXAgdW5kZXJuZWF0
aAogICAgICAgICAgICAgLy8gdGhlIGlubGluZXMuCiAgICAgICAgICAgICBSb290SW5saW5lQm94
KiByb290ID0gYm94LT5yb290KCk7Ci0gICAgICAgICAgICByb290LT5ibG9jaygpLT5zZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKHRoaXMsIHJvb3QtPmxpbmVUb3BXaXRoTGVhZGluZygp
LCBscm91bmRmKGJveC0+bG9naWNhbExlZnQoKSkpOworICAgICAgICAgICAgcm9vdC0+YmxvY2so
KS0+c2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZCh0aGlzLCByb290LT5saW5lVG9wV2l0
aExlYWRpbmcoKSwgcm91bmRlZExheW91dFVuaXQoYm94LT5sb2dpY2FsTGVmdCgpKSk7CiAgICAg
ICAgICAgICBpZiAoc3R5bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRpb24oYm94LT5pc0hvcml6
b250YWwoKSkpCiAgICAgICAgICAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7IC8vIEp1c3QgZ28gYWhlYWQgYW5kIG1hcmsgdGhlIHBvc2l0aW9uZWQgb2JqZWN0IGFzIG5l
ZWRpbmcgbGF5b3V0LCBzbyBpdCB3aWxsIHVwZGF0ZSBpdHMgcG9zaXRpb24gcHJvcGVybHkuCiAg
ICAgICAgIH0gZWxzZSB7CkBAIC0zODk1LDcgKzM4OTUsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJC
b3g6OmZsaXBGb3JXcml0aW5nTW9kCiAgICAgcmV0dXJuIExheW91dFBvaW50KHBvaW50LngoKSAr
IHdpZHRoKCkgLSBjaGlsZC0+d2lkdGgoKSAtICgyICogY2hpbGQtPngoKSksIHBvaW50LnkoKSk7
CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYgcmVjdCkg
Y29uc3QKK3ZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoTGF5b3V0UmVjdCYgcmVj
dCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MDYsMTggKzM5MDYsMTggQEAgdm9pZCBSZW5kZXJC
b3g6OmZsaXBGb3JXcml0aW5nTW9kZShJbnRSZQogICAgICAgICByZWN0LnNldFgod2lkdGgoKSAt
IHJlY3QubWF4WCgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGlu
dCBwb3NpdGlvbikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01v
ZGUoTGF5b3V0VW5pdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICBy
ZXR1cm4gbG9naWNhbEhlaWdodCgpIC0gcG9zaXRpb247CiB9CiAKLUludFBvaW50IFJlbmRlckJv
eDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikgY29uc3QKK0xh
eW91dFBvaW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IExheW91dFBvaW50
JiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IEludFBvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBw
b3NpdGlvbi55KCkpIDogSW50UG9pbnQod2lkdGgoKSAtIHBvc2l0aW9uLngoKSwgcG9zaXRpb24u
eSgpKTsKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExheW91dFBvaW50
KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkpIDogTGF5b3V0UG9pbnQod2lk
dGgoKSAtIHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKIH0KIAogTGF5b3V0UG9pbnQgUmVu
ZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgY29uc3QKQEAgLTM5MjcsMTEgKzM5MjcsMTEgQEAgTGF5b3V0UG9pbnQgUmVu
ZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZAogICAgIHJldHVybiB0b1JlbmRlckJsb2NrKHRoaXMp
LT5mbGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKHBvaW50KTsKIH0KIAotSW50U2l6
ZSBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBJbnRTaXplJiBvZmZzZXQpIGNv
bnN0CitMYXlvdXRTaXplIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IExheW91
dFNpemUmIG9mZnNldCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRTaXplKG9mZnNldC53aWR0aCgpLCBoZWlnaHQoKSAt
IG9mZnNldC5oZWlnaHQoKSkgOiBJbnRTaXplKHdpZHRoKCkgLSBvZmZzZXQud2lkdGgoKSwgb2Zm
c2V0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExh
eW91dFNpemUob2Zmc2V0LndpZHRoKCksIGhlaWdodCgpIC0gb2Zmc2V0LmhlaWdodCgpKSA6IExh
eW91dFNpemUod2lkdGgoKSAtIG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwogfQog
CiBGbG9hdFBvaW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAkocmV2aXNpb24gMTA5ODA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHB1YmxpYzoKICAgICBMYXlv
dXRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CiAgICAgdm9p
ZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgeyBtX2ZyYW1lUmVjdCA9IHJl
Y3Q7IH0KIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIHRoaXMgYXMg
YSBMYXlvdXRSZWN0LCBzaW5jZSBpdCBsb3NlcyBpdHMgcG9zaXRpb24gYW5kIHdvbid0IHByb3Bl
cmx5IHBpeGVsIHNuYXAuCiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBzaXplKCkpOyB9Ci0gICAgdmlydHVhbCBM
YXlvdXRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQm94UmVj
dCgpOyB9IAorICAgIEludFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShtX2ZyYW1lUmVjdC5waXhlbFNuYXBw
ZWRXaWR0aCgpLCBtX2ZyYW1lUmVjdC5waXhlbFNuYXBwZWRIZWlnaHQoKSkpOyB9CisgICAgdmly
dHVhbCBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFw
cGVkQm9yZGVyQm94UmVjdCgpOyB9CiAKICAgICAvLyBUaGUgY29udGVudCBhcmVhIG9mIHRoZSBi
b3ggKGV4Y2x1ZGVzIHBhZGRpbmcgYW5kIGJvcmRlcikuCiAgICAgTGF5b3V0UmVjdCBjb250ZW50
Qm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRlbnRXaWR0aCgpLCBjb250
ZW50SGVpZ2h0KCkpOyB9CkBAIC0xMzksNyArMTQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gQm91
bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIFJlc3BlY3RzIHRyYW5z
Zm9ybXMKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBMYXlvdXRQb2ludCogY2Fj
aGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIC8vIFVzZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlw
ZSBjaGVja2luZyBpcyBkb25lIQogICAgIFJlbmRlckJveCogcHJldmlvdXNTaWJsaW5nQm94KCkg
Y29uc3Q7CkBAIC0yNDYsNyArMjQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKTsg
fQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJnaW5BZnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1hcmdpbkFmdGVyKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVk
KSBjb25zdDsKICAgICAKICAgICBMYXlvdXRSZWN0IHJlZmxlY3Rpb25Cb3goKSBjb25zdDsKQEAg
LTMyMSw3ICszMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKSAmJiBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSAmJiAoaXNSb290KCkgfHwgaXNCb2R5KCkpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gTGF5
b3V0U2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdCB7
IHJldHVybiBJbnRTaXplKCk7IH0KICAgICBMYXlvdXRVbml0IGludHJpbnNpY0xvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBp
bnRyaW5zaWNTaXplKCkud2lkdGgoKSA6IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsgfQogICAg
IExheW91dFVuaXQgaW50cmluc2ljTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkg
OiBpbnRyaW5zaWNTaXplKCkud2lkdGgoKTsgfQogCkBAIC00MjQsMTEgKzQyNiwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgZmxpcEZv
cldyaXRpbmdNb2RlRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTGF5b3V0
UG9pbnQmKSBjb25zdDsKLSAgICBpbnQgZmxpcEZvcldyaXRpbmdNb2RlKGludCBwb3NpdGlvbikg
Y29uc3Q7IC8vIFRoZSBvZmZzZXQgaXMgaW4gdGhlIGJsb2NrIGRpcmVjdGlvbiAoeSBmb3IgaG9y
aXpvbnRhbCB3cml0aW5nIG1vZGVzLCB4IGZvciB2ZXJ0aWNhbCB3cml0aW5nIG1vZGVzKS4KLSAg
ICBJbnRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRVbml0IHBvc2l0aW9uKSBjb25z
dDsgLy8gVGhlIG9mZnNldCBpcyBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uICh5IGZvciBob3Jpem9u
dGFsIHdyaXRpbmcgbW9kZXMsIHggZm9yIHZlcnRpY2FsIHdyaXRpbmcgbW9kZXMpLgorICAgIExh
eW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
ICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3Qg
TGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICBJbnRTaXplIGZsaXBGb3JXcml0aW5nTW9kZShjb25z
dCBJbnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYp
IGNvbnN0OworICAgIExheW91dFNpemUgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IExheW91dFNp
emUmKSBjb25zdDsKKyAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRSZWN0JikgY29u
c3Q7CiAgICAgRmxvYXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OwogICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYpIGNvbnN0Owog
ICAgIC8vIFRoZXNlIHJlcHJlc2VudCB5b3VyIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHlvdXIgY29u
dGFpbmVyIGFzIGEgcGh5c2ljYWwgb2Zmc2V0Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>