<?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>71240</bug_id>
          
          <creation_ts>2011-10-31 15:16:55 -0700</creation_ts>
          <short_desc>Switch background/border image back to Int</short_desc>
          <delta_ts>2011-11-01 17:56:10 -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="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>493525</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-10-31 15:16:55 -0700</bug_when>
    <thetext>We went a bit too far with the LayoutRect/Point/Size conversion a while ago, it turns out that we want to keep image background and border rendering aligned to int boundaries to match up with device pixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493529</commentid>
    <comment_count>1</comment_count>
      <attachid>113091</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-10-31 15:20:38 -0700</bug_when>
    <thetext>Created attachment 113091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493657</commentid>
    <comment_count>2</comment_count>
      <attachid>113113</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-10-31 17:25:40 -0700</bug_when>
    <thetext>Created attachment 113113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493716</commentid>
    <comment_count>3</comment_count>
      <attachid>113113</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-31 19:24:40 -0700</bug_when>
    <thetext>Comment on attachment 113113
Patch

Attachment 113113 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10245500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494030</commentid>
    <comment_count>4</comment_count>
      <attachid>113197</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-01 11:04:43 -0700</bug_when>
    <thetext>Created attachment 113197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494126</commentid>
    <comment_count>5</comment_count>
      <attachid>113197</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-01 14:04:14 -0700</bug_when>
    <thetext>Comment on attachment 113197
Patch

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

This is a mix of two changes. About 2/3 of this is changing background and border back to int, and about 1/3 is changes for the newer version of LayoutUnit where implicit conversion from int is not allowed. It would be better if the change log told the truth about that.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:441
&gt; -    LayoutUnit xPos = (isBox() ? toRenderBox(this)-&gt;left() : 0);
&gt; -    
&gt; +    LayoutUnit xPos = (isBox() ? toRenderBox(this)-&gt;left() : LayoutUnit(0));

This change is not part of changing background and border back to int.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:475
&gt; -    LayoutUnit yPos = (isBox() ? toRenderBox(this)-&gt;top() : 0);
&gt; +    LayoutUnit yPos = (isBox() ? toRenderBox(this)-&gt;top() : LayoutUnit(0));

Neither is this.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:657
&gt; -    LayoutUnit bLeft = includeLeftEdge ? borderLeft() : 0;
&gt; -    LayoutUnit bRight = includeRightEdge ? borderRight() : 0;
&gt; -    LayoutUnit pLeft = includeLeftEdge ? paddingLeft() : 0;
&gt; -    LayoutUnit pRight = includeRightEdge ? paddingRight() : 0;
&gt; +    LayoutUnit bLeft = includeLeftEdge ? borderLeft() : LayoutUnit(0);
&gt; +    LayoutUnit bRight = includeRightEdge ? borderRight() : LayoutUnit(0);
&gt; +    LayoutUnit pLeft = includeLeftEdge ? paddingLeft() : LayoutUnit(0);
&gt; +    LayoutUnit pRight = includeRightEdge ? paddingRight() : LayoutUnit(0);

Neither is this.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:679
&gt; -        LayoutRect clipRect = LayoutRect(scrolledPaintRect.x() + bLeft + (includePadding ? pLeft : 0),
&gt; -                                   scrolledPaintRect.y() + borderTop() + (includePadding ? paddingTop() : 0),
&gt; -                                   scrolledPaintRect.width() - bLeft - bRight - (includePadding ? pLeft + pRight : 0),
&gt; -                                   scrolledPaintRect.height() - borderTop() - borderBottom() - (includePadding ? paddingTop() + paddingBottom() : 0));
&gt; +        LayoutRect clipRect = LayoutRect(scrolledPaintRect.x() + bLeft + (includePadding ? pLeft : LayoutUnit(0)),
&gt; +                                   scrolledPaintRect.y() + borderTop() + (includePadding ? paddingTop() : LayoutUnit(0)),
&gt; +                                   scrolledPaintRect.width() - bLeft - bRight - (includePadding ? pLeft + pRight : LayoutUnit(0)),
&gt; +                                   scrolledPaintRect.height() - borderTop() - borderBottom() - (includePadding ? paddingTop() + paddingBottom() : LayoutUnit(0)));

Neither is this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494222</commentid>
    <comment_count>6</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-01 15:37:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 113197 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113197&amp;action=review
&gt; 
&gt; This is a mix of two changes. About 2/3 of this is changing background and border back to int, and about 1/3 is changes for the newer version of LayoutUnit where implicit conversion from int is not allowed. It would be better if the change log told the truth about that.

Good point, I&apos;ll update the ChangeLog to be explicit about this and try to avoid making unrelated changes going forward.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494263</commentid>
    <comment_count>7</comment_count>
      <attachid>113248</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-01 16:10:28 -0700</bug_when>
    <thetext>Created attachment 113248
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494264</commentid>
    <comment_count>8</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-01 16:11:24 -0700</bug_when>
    <thetext>I reverted all changes unrelated to background and border images instead. Seemed like the better option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494368</commentid>
    <comment_count>9</comment_count>
      <attachid>113248</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 17:56:06 -0700</bug_when>
    <thetext>Comment on attachment 113248
Patch for landing

Clearing flags on attachment: 113248

Committed r99019: &lt;http://trac.webkit.org/changeset/99019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494369</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 17:56:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113091</attachid>
            <date>2011-10-31 15:20:38 -0700</date>
            <delta_ts>2011-10-31 15:39:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71240-20111031152037.patch</filename>
            <type>text/plain</type>
            <size>32558</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4ODg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMzEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBiYWNrZ3JvdW5kL2Jv
cmRlciBpbWFnZSBiYWNrIHRvIEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTd2l0Y2ggYmFja2dyb3VuZC0gYW5kIGJvcmRlci1pbWFnZSByZW5kZXJp
bmcgYmFjayB0byBpbnQgdG8gYWxpZ24gd2l0aAorICAgICAgICBkZXZpY2UgcGl4ZWxzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zm
c2V0TGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxM
YXllckV4dGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZp
eGVkQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpyZWxhdGl2ZVBoYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxh
dGVBZGp1c3RlZElubmVyQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFj
a2dyb3VuZEltYWdlR2VvbWV0cnk6OmRlc3RPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0T3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1h
Z2VHZW9tZXRyeTo6ZGVzdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnBo
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5k
SW1hZ2VHZW9tZXRyeTo6c2V0UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5Ojp0aWxlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNl
dFRpbGVTaXplKToKKwogMjAxMS0xMC0zMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICB3aW5kb3cub25lcnJvciBkb2Vzbid0IHdvcmsgd2l0aCBpbmxp
bmUgKGF0dHJpYnV0ZSkgc2NyaXB0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5ODg4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzOCw4ICs0MzgsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpv
ZmZzZXRMCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBvZmZzZXRQYXIgPSBvZmZzZXRQYXJlbnQoKTsKLSAgICBMYXlvdXRVbml0IHhQb3MgPSAoaXNC
b3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5sZWZ0KCkgOiAwKTsKLSAgICAKKyAgICBMYXlvdXRV
bml0IHhQb3MgPSAoaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5sZWZ0KCkgOiBMYXlvdXRV
bml0KDApKTsKKwogICAgIC8vIElmIHRoZSBvZmZzZXRQYXJlbnQgb2YgdGhlIGVsZW1lbnQgaXMg
bnVsbCwgb3IgaXMgdGhlIEhUTUwgYm9keSBlbGVtZW50LAogICAgIC8vIHJldHVybiB0aGUgZGlz
dGFuY2UgYmV0d2VlbiB0aGUgY2FudmFzIG9yaWdpbiBhbmQgdGhlIGxlZnQgYm9yZGVyIGVkZ2Ug
CiAgICAgLy8gb2YgdGhlIGVsZW1lbnQgYW5kIHN0b3AgdGhpcyBhbGdvcml0aG0uCkBAIC00NzIs
NyArNDcyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0VAogICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2Zmc2V0UGFy
ID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAgTGF5b3V0VW5pdCB5UG9zID0gKGlzQm94KCkgPyB0b1Jl
bmRlckJveCh0aGlzKS0+dG9wKCkgOiAwKTsKKyAgICBMYXlvdXRVbml0IHlQb3MgPSAoaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT50b3AoKSA6IExheW91dFVuaXQoMCkpOwogICAgIAogICAg
IC8vIElmIHRoZSBvZmZzZXRQYXJlbnQgb2YgdGhlIGVsZW1lbnQgaXMgbnVsbCwgb3IgaXMgdGhl
IEhUTUwgYm9keSBlbGVtZW50LAogICAgIC8vIHJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0
aGUgY2FudmFzIG9yaWdpbiBhbmQgdGhlIHRvcCBib3JkZXIgZWRnZSAKQEAgLTY1MSwxMCArNjUx
LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICAgICAg
Y29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvcmRlcik7CiAgICAgfQogICAgIAotICAgIExh
eW91dFVuaXQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiAwOwotICAg
IExheW91dFVuaXQgYlJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJvcmRlclJpZ2h0KCkgOiAw
OwotICAgIExheW91dFVuaXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgp
IDogMDsKLSAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5n
UmlnaHQoKSA6IDA7CisgICAgTGF5b3V0VW5pdCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJv
cmRlckxlZnQoKSA6IExheW91dFVuaXQoMCk7CisgICAgTGF5b3V0VW5pdCBiUmlnaHQgPSBpbmNs
dWRlUmlnaHRFZGdlID8gYm9yZGVyUmlnaHQoKSA6IExheW91dFVuaXQoMCk7CisgICAgTGF5b3V0
VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0KCkgOiBMYXlvdXRVbml0
KDApOworICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdS
aWdodCgpIDogTGF5b3V0VW5pdCgwKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
Y2xpcFdpdGhTY3JvbGxpbmdTdGF0ZVNhdmVyKCpjb250ZXh0LCBjbGlwcGVkV2l0aExvY2FsU2Ny
b2xsaW5nKTsKICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUGFpbnRSZWN0ID0gcmVjdDsKQEAgLTY3
MywxNyArNjczLDE3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUK
ICAgICBpZiAoYmdMYXllci0+Y2xpcCgpID09IFBhZGRpbmdGaWxsQm94IHx8IGJnTGF5ZXItPmNs
aXAoKSA9PSBDb250ZW50RmlsbEJveCkgewogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5n
IG9yIGNvbnRlbnQgYm94ZXMgYXMgbmVjZXNzYXJ5LgogICAgICAgICBib29sIGluY2x1ZGVQYWRk
aW5nID0gYmdMYXllci0+Y2xpcCgpID09IENvbnRlbnRGaWxsQm94OwotICAgICAgICBMYXlvdXRS
ZWN0IGNsaXBSZWN0ID0gTGF5b3V0UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCAr
IChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0IDogMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQ
YWRkaW5nID8gcGFkZGluZ1RvcCgpIDogMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVmdCAtIGJSaWdodCAtIChpbmNs
dWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogMCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBi
b3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdC
b3R0b20oKSA6IDApKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qo
c2Nyb2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQgKyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6
IExheW91dFVuaXQoMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxlZFBhaW50UmVjdC55KCkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRp
bmdUb3AoKSA6IExheW91dFVuaXQoMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxlZFBhaW50UmVjdC53aWR0aCgpIC0gYkxlZnQgLSBiUmlnaHQgLSAoaW5jbHVk
ZVBhZGRpbmcgPyBwTGVmdCArIHBSaWdodCA6IExheW91dFVuaXQoMCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkg
KyBwYWRkaW5nQm90dG9tKCkgOiBMYXlvdXRVbml0KDApKSk7CiAgICAgICAgIGJhY2tncm91bmRD
bGlwU3RhdGVTYXZlci5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwog
ICAgIH0gZWxzZSBpZiAoYmdMYXllci0+Y2xpcCgpID09IFRleHRGaWxsQm94KSB7CiAgICAgICAg
IC8vIFdlIGhhdmUgdG8gZHJhdyBvdXIgdGV4dCBpbnRvIGEgbWFzayB0aGF0IGNhbiB0aGVuIGJl
IHVzZWQgdG8gY2xpcCBiYWNrZ3JvdW5kIGRyYXdpbmcuCiAgICAgICAgIC8vIEZpcnN0IGZpZ3Vy
ZSBvdXQgaG93IGJpZyB0aGUgbWFzayBoYXMgdG8gYmUuICBJdCBzaG91bGQgYmUgbm8gYmlnZ2Vy
IHRoYW4gd2hhdCB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIGFjdHVhbGx5IHJlbmRlciwgc28gd2Ug
c2hvdWxkIGludGVyc2VjdCB0aGUgZGlydHkgcmVjdCB3aXRoIHRoZSBib3JkZXIgYm94IG9mIHRo
ZSBiYWNrZ3JvdW5kLgotICAgICAgICBMYXlvdXRSZWN0IG1hc2tSZWN0ID0gcmVjdDsKKyAgICAg
ICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiAgICAgICAgIG1h
c2tSZWN0LmludGVyc2VjdChwYWludEluZm8ucmVjdCk7CiAgICAgICAgIAogICAgICAgICAvLyBO
b3cgY3JlYXRlIHRoZSBtYXNrLgpAQCAtODMzLDEwICs4MzMsMTAgQEAgc3RhdGljIGlubGluZSBM
YXlvdXRTaXplIHJlc29sdmVBZ2FpbnN0SQogICAgIHJldHVybiBMYXlvdXRTaXplKHNpemUud2lk
dGgoKSwgc29sdXRpb25IZWlnaHQpOwogfQogCi1MYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5bGVJbWFnZSogaW1hZ2Us
IGNvbnN0IExheW91dFNpemUmIHBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0CitJbnRTaXplIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5
bGVJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0
CiB7Ci0gICAgTGF5b3V0VW5pdCByZXNvbHZlZFdpZHRoID0gMDsKLSAgICBMYXlvdXRVbml0IHJl
c29sdmVkSGVpZ2h0ID0gMDsKKyAgICBpbnQgcmVzb2x2ZWRXaWR0aCA9IDA7CisgICAgaW50IHJl
c29sdmVkSGVpZ2h0ID0gMDsKICAgICBGbG9hdFNpemUgaW50cmluc2ljUmF0aW87CiAKICAgICAv
LyBBIGdlbmVyYXRlZCBpbWFnZSB3aXRob3V0IGEgZml4ZWQgc2l6ZSwgd2lsbCBhbHdheXMgcmV0
dXJuIHRoZSBjb250YWluZXIgc2l6ZSBhcyBpbnRyaW5zaWMgc2l6ZS4KQEAgLTg1MCw0NiArODUw
LDQ2IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGEKIAogICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9m
ZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICAgICAgaWYgKGludHJpbnNpY1dpZHRoLmlz
Rml4ZWQoKSkKLSAgICAgICAgICAgIHJlc29sdmVkV2lkdGggPSBzdGF0aWNfY2FzdDxMYXlvdXRV
bml0PihjZWlsZihpbnRyaW5zaWNXaWR0aC52YWx1ZSgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKSk7CisgICAgICAgICAgICByZXNvbHZlZFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWls
ZihpbnRyaW5zaWNXaWR0aC52YWx1ZSgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAg
ICAgICAgIGlmIChpbnRyaW5zaWNIZWlnaHQuaXNGaXhlZCgpKQotICAgICAgICAgICAgcmVzb2x2
ZWRIZWlnaHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWlsZihpbnRyaW5zaWNIZWlnaHQu
dmFsdWUoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOworICAgICAgICAgICAgcmVzb2x2
ZWRIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGludHJpbnNpY0hlaWdodC52YWx1ZSgp
ICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgLy8gSW50cmluc2lj
IGRpbWVuc2lvbnMgZXhwcmVzc2VkIGFzIHBlcmNlbnRhZ2VzIG11c3QgYmUgcmVzb2x2ZWQgcmVs
YXRpdmUgdG8gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRoYXQgZXN0
YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgJ2JhY2tncm91bmQtcG9zaXRp
b24nIHByb3BlcnR5LiBTVkcgb24gdGhlIG90aGVyIGhhbmQKICAgICAvLyBfZXhwbGljaXRlbHlf
IHNheXMgdGhhdCBwZXJjZW50YWdlIHZhbHVlcyBmb3IgdGhlIHdpZHRoL2hlaWdodCBhdHRyaWJ1
dGVzIGRvIE5PVCBkZWZpbmUgaW50cmluc2ljIGRpbWVuc2lvbnMuCiAgICAgaWYgKHJlc29sdmVk
V2lkdGggPiAwICYmIHJlc29sdmVkSGVpZ2h0ID4gMCkKLSAgICAgICAgcmV0dXJuIExheW91dFNp
emUocmVzb2x2ZWRXaWR0aCwgcmVzb2x2ZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gSW50U2l6
ZShyZXNvbHZlZFdpZHRoLCByZXNvbHZlZEhlaWdodCk7CiAKICAgICAvLyBJZiB0aGUgaW1hZ2Ug
aGFzIG9uZSBvZiBlaXRoZXIgYW4gaW50cmluc2ljIHdpZHRoIG9yIGFuIGludHJpbnNpYyBoZWln
aHQ6CiAgICAgLy8gKiBhbmQgYW4gaW50cmluc2ljIGFzcGVjdCByYXRpbywgdGhlbiB0aGUgbWlz
c2luZyBkaW1lbnNpb24gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBkaW1lbnNpb24gYW5k
IHRoZSByYXRpby4KICAgICAvLyAqIGFuZCBubyBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvLCB0aGVu
IHRoZSBtaXNzaW5nIGRpbWVuc2lvbiBpcyBhc3N1bWVkIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBy
ZWN0YW5nbGUgdGhhdAogICAgIC8vICAgZXN0YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IGZvciB0aGUgJ2JhY2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgogICAgIGlmICgocmVzb2x2
ZWRXaWR0aCAmJiAhcmVzb2x2ZWRIZWlnaHQpIHx8ICghcmVzb2x2ZWRXaWR0aCAmJiByZXNvbHZl
ZEhlaWdodCkpCi0gICAgICAgIHJldHVybiByZXNvbHZlQWdhaW5zdEludHJpbnNpY1dpZHRoT3JI
ZWlnaHRBbmRSYXRpbyhwb3NpdGlvbmluZ0FyZWFTaXplLCBpbnRyaW5zaWNSYXRpbywgcmVzb2x2
ZWRXaWR0aCwgcmVzb2x2ZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXpl
KHJlc29sdmVBZ2FpbnN0SW50cmluc2ljV2lkdGhPckhlaWdodEFuZFJhdGlvKHBvc2l0aW9uaW5n
QXJlYVNpemUsIGludHJpbnNpY1JhdGlvLCByZXNvbHZlZFdpZHRoLCByZXNvbHZlZEhlaWdodCkp
OwogCiAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgZGltZW5zaW9ucyBhbmQg
aGFzIGFuIGludHJpbnNpYyByYXRpbyB0aGUgZGltZW5zaW9ucyBtdXN0IGJlIGFzc3VtZWQgdG8g
YmUgdGhlCiAgICAgLy8gbGFyZ2VzdCBkaW1lbnNpb25zIGF0IHRoYXQgcmF0aW8gc3VjaCB0aGF0
IG5laXRoZXIgZGltZW5zaW9uIGV4Y2VlZHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlY3Rhbmds
ZSB0aGF0CiAgICAgLy8gZXN0YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUg
J2JhY2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgogICAgIGlmICghcmVzb2x2ZWRXaWR0aCAm
JiAhcmVzb2x2ZWRIZWlnaHQgJiYgIWludHJpbnNpY1JhdGlvLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHJlc29sdmVBZ2FpbnN0SW50cmluc2ljUmF0aW8ocG9zaXRpb25pbmdBcmVhU2l6ZSwg
aW50cmluc2ljUmF0aW8pOworICAgICAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHJlc29sdmVB
Z2FpbnN0SW50cmluc2ljUmF0aW8ocG9zaXRpb25pbmdBcmVhU2l6ZSwgaW50cmluc2ljUmF0aW8p
KTsKIAogICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgbm8gaW50cmluc2ljIHJhdGlvIGVpdGhlciwg
dGhlbiB0aGUgZGltZW5zaW9ucyBtdXN0IGJlIGFzc3VtZWQgdG8gYmUgdGhlIHJlY3RhbmdsZSB0
aGF0CiAgICAgLy8gZXN0YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgJ2Jh
Y2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgogICAgIHJldHVybiBwb3NpdGlvbmluZ0FyZWFT
aXplOwogfQogCi1MYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVGaWxs
VGlsZVNpemUoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHBv
c2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0CitJbnRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IElu
dFNpemUmIHBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0CiB7CiAgICAgU3R5bGVJbWFnZSogaW1h
Z2UgPSBmaWxsTGF5ZXItPmltYWdlKCk7CiAgICAgRUZpbGxTaXplVHlwZSB0eXBlID0gZmlsbExh
eWVyLT5zaXplKCkudHlwZTsKIAotICAgIExheW91dFNpemUgaW1hZ2VJbnRyaW5zaWNTaXplID0g
Y2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKGltYWdlLCBwb3NpdGlvbmluZ0FyZWFT
aXplKTsKKyAgICBJbnRTaXplIGltYWdlSW50cmluc2ljU2l6ZSA9IGNhbGN1bGF0ZUltYWdlSW50
cmluc2ljRGltZW5zaW9ucyhpbWFnZSwgcG9zaXRpb25pbmdBcmVhU2l6ZSk7CiAKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTaXplTGVuZ3RoOiB7Ci0gICAgICAgICAgICBMYXlv
dXRVbml0IHcgPSBwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICBMYXlv
dXRVbml0IGggPSBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpOworICAgICAgICAgICAgaW50
IHcgPSBwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgaCA9IHBv
c2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIExlbmd0aCBsYXllcldp
ZHRoID0gZmlsbExheWVyLT5zaXplKCkuc2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgTGVuZ3Ro
IGxheWVySGVpZ2h0ID0gZmlsbExheWVyLT5zaXplKCkuc2l6ZS5oZWlnaHQoKTsKQEAgLTkxOCw3
ICs5MTgsNyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhCiAgICAg
ICAgICAgICAgICAgaCA9IGltYWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUobWF4PExheW91
dFVuaXQ+KDEsIHcpLCBtYXg8TGF5b3V0VW5pdD4oMSwgaCkpOworICAgICAgICAgICAgcmV0dXJu
IEludFNpemUobWF4KDEsIHcpLCBtYXgoMSwgaCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
U2l6ZU5vbmU6IHsKICAgICAgICAgICAgIC8vIElmIGJvdGggdmFsdWVzIGFyZSDigJhhdXRv4oCZ
IHRoZW4gdGhlIGludHJpbnNpYyB3aWR0aCBhbmQvb3IgaGVpZ2h0IG9mIHRoZSBpbWFnZSBzaG91
bGQgYmUgdXNlZCwgaWYgYW55LgpAQCAtOTM1LDEyICs5MzUsMTIgQEAgTGF5b3V0U2l6ZSBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYQogICAgICAgICAgICAgZmxvYXQgdmVydGljYWxTY2Fs
ZUZhY3RvciA9IGltYWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKQogICAgICAgICAgICAgICAgID8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvc2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkpIC8gaW1hZ2VJ
bnRyaW5zaWNTaXplLmhlaWdodCgpIDogMTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gdHlwZSA9PSBDb250YWluID8gbWluKGhvcml6b250YWxTY2FsZUZhY3RvciwgdmVydGljYWxT
Y2FsZUZhY3RvcikgOiBtYXgoaG9yaXpvbnRhbFNjYWxlRmFjdG9yLCB2ZXJ0aWNhbFNjYWxlRmFj
dG9yKTsKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKG1heDxMYXlvdXRVbml0PigxLCBp
bWFnZUludHJpbnNpY1NpemUud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwgbWF4PExheW91dFVuaXQ+
KDEsIGltYWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSk7CisgICAgICAg
ICAgICByZXR1cm4gSW50U2l6ZShtYXgoMSwgc3RhdGljX2Nhc3Q8aW50PihpbWFnZUludHJpbnNp
Y1NpemUud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSksIG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KGlt
YWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSkpOwogICAgICAgIH0KICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZSgp
OworICAgIHJldHVybiBJbnRTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXROb1JlcGVhdFgoaW50IHhPZmZzZXQpCkBAIC05
NTYsMTkgKzk1NiwyMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1h
CiAgICAgbV9kZXN0UmVjdC5zZXRIZWlnaHQobV90aWxlU2l6ZS5oZWlnaHQoKSArIG1pbih5T2Zm
c2V0LCAwKSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFn
ZUdlb21ldHJ5Ojp1c2VGaXhlZEF0dGFjaG1lbnQoY29uc3QgTGF5b3V0UG9pbnQmIGF0dGFjaG1l
bnRQb2ludCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21l
dHJ5Ojp1c2VGaXhlZEF0dGFjaG1lbnQoY29uc3QgSW50UG9pbnQmIGF0dGFjaG1lbnRQb2ludCkK
IHsKLSAgICBtX3BoYXNlLm1vdmUobWF4PExheW91dFVuaXQ+KGF0dGFjaG1lbnRQb2ludC54KCkg
LSBtX2Rlc3RSZWN0LngoKSwgMCksIG1heDxMYXlvdXRVbml0PihhdHRhY2htZW50UG9pbnQueSgp
IC0gbV9kZXN0UmVjdC55KCksIDApKTsKKyAgICBJbnRQb2ludCBhbGlnbmVkUG9pbnQgPSBhdHRh
Y2htZW50UG9pbnQ7CisgICAgbV9waGFzZS5tb3ZlKG1heChhbGlnbmVkUG9pbnQueCgpIC0gbV9k
ZXN0UmVjdC54KCksIDApLCBtYXgoYWxpZ25lZFBvaW50LnkoKSAtIG1fZGVzdFJlY3QueSgpLCAw
KSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21l
dHJ5OjpjbGlwKGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXAoY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCiB7CiAgICAgbV9kZXN0UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogfQogCi1MYXlv
dXRQb2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnJl
bGF0aXZlUGhhc2UoKSBjb25zdAorSW50UG9pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5OjpyZWxhdGl2ZVBoYXNlKCkgY29uc3QKIHsKLSAgICBMYXlvdXRQ
b2ludCBwaGFzZSA9IG1fcGhhc2U7CisgICAgSW50UG9pbnQgcGhhc2UgPSBtX3BoYXNlOwogICAg
IHBoYXNlICs9IG1fZGVzdFJlY3QubG9jYXRpb24oKSAtIG1fZGVzdE9yaWdpbjsKICAgICByZXR1
cm4gcGhhc2U7CiB9CkBAIC05NzgsNyArOTc5LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y2FsY3VsYXRlQmFjawogewogICAgIExheW91dFVuaXQgbGVmdCA9IDA7CiAgICAgTGF5b3V0
VW5pdCB0b3AgPSAwOwotICAgIExheW91dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKKyAgICBJ
bnRTaXplIHBvc2l0aW9uaW5nQXJlYVNpemU7CisgICAgSW50UmVjdCBhbGlnbmVkUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KTsKIAogICAgIC8vIERldGVybWluZSB0aGUgYmFja2dy
b3VuZCBwb3NpdGlvbmluZyBhcmVhIGFuZCBzZXQgZGVzdFJlY3QgdG8gdGhlIGJhY2tncm91bmQg
cGFpbnRpbmcgYXJlYS4KICAgICAvLyBkZXN0UmVjdCB3aWxsIGJlIGFkanVzdGVkIGxhdGVyIGlm
IHRoZSBiYWNrZ3JvdW5kIGlzIG5vbi1yZXBlYXRpbmcuCkBAIC05OTUsNyArOTk3LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawogI2VuZGlmCiAKICAgICBpZiAo
IWZpeGVkQXR0YWNobWVudCkgewotICAgICAgICBnZW9tZXRyeS5zZXREZXN0UmVjdChwYWludFJl
Y3QpOworICAgICAgICBnZW9tZXRyeS5zZXREZXN0UmVjdChhbGlnbmVkUmVjdCk7CiAKICAgICAg
ICAgTGF5b3V0VW5pdCByaWdodCA9IDA7CiAgICAgICAgIExheW91dFVuaXQgYm90dG9tID0gMDsK
QEAgLTEwMTcsMTcgKzEwMTksMTcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3Vs
YXRlQmFjawogICAgICAgICAvLyBpdHMgbWFyZ2lucy4gU2luY2UgdGhvc2Ugd2VyZSBhZGRlZCBp
biBhbHJlYWR5LCB3ZSBoYXZlIHRvIGZhY3RvciB0aGVtIG91dCB3aGVuIGNvbXB1dGluZwogICAg
ICAgICAvLyB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhLgogICAgICAgICBpZiAoaXNS
b290KCkpIHsKLSAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBMYXlvdXRTaXplKHRv
UmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIC0gbGVmdCAtIHJpZ2h0LCB0b1JlbmRlckJveCh0aGlz
KS0+aGVpZ2h0KCkgLSB0b3AgLSBib3R0b20pOworICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVh
U2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShMYXlvdXRTaXplKHRvUmVuZGVyQm94KHRoaXMpLT53aWR0
aCgpIC0gbGVmdCAtIHJpZ2h0LCB0b1JlbmRlckJveCh0aGlzKS0+aGVpZ2h0KCkgLSB0b3AgLSBi
b3R0b20pKTsKICAgICAgICAgICAgIGxlZnQgKz0gbWFyZ2luTGVmdCgpOwogICAgICAgICAgICAg
dG9wICs9IG1hcmdpblRvcCgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBvc2l0aW9u
aW5nQXJlYVNpemUgPSBMYXlvdXRTaXplKHBhaW50UmVjdC53aWR0aCgpIC0gbGVmdCAtIHJpZ2h0
LCBwYWludFJlY3QuaGVpZ2h0KCkgLSB0b3AgLSBib3R0b20pOworICAgICAgICAgICAgcG9zaXRp
b25pbmdBcmVhU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShMYXlvdXRTaXplKHBhaW50UmVjdC53aWR0
aCgpIC0gbGVmdCAtIHJpZ2h0LCBwYWludFJlY3QuaGVpZ2h0KCkgLSB0b3AgLSBib3R0b20pKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBnZW9tZXRyeS5zZXREZXN0UmVjdCh2aWV3UmVjdCgpKTsK
KyAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3QoZW5jbG9zaW5nSW50UmVjdCh2aWV3UmVjdCgp
KSk7CiAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBnZW9tZXRyeS5kZXN0UmVjdCgpLnNp
emUoKTsKICAgICB9CiAKLSAgICBMYXlvdXRTaXplIGZpbGxUaWxlU2l6ZSA9IGNhbGN1bGF0ZUZp
bGxUaWxlU2l6ZShmaWxsTGF5ZXIsIHBvc2l0aW9uaW5nQXJlYVNpemUpOworICAgIEludFNpemUg
ZmlsbFRpbGVTaXplID0gY2FsY3VsYXRlRmlsbFRpbGVTaXplKGZpbGxMYXllciwgcG9zaXRpb25p
bmdBcmVhU2l6ZSk7CiAgICAgZmlsbExheWVyLT5pbWFnZSgpLT5zZXRDb250YWluZXJTaXplRm9y
UmVuZGVyZXIodGhpcywgZmlsbFRpbGVTaXplLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwog
ICAgIGdlb21ldHJ5LnNldFRpbGVTaXplKGZpbGxUaWxlU2l6ZSk7CiAKQEAgLTEwMzYsMjAgKzEw
MzgsMjAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawogCiAgICAg
TGF5b3V0VW5pdCB4UG9zaXRpb24gPSBmaWxsTGF5ZXItPnhQb3NpdGlvbigpLmNhbGNNaW5WYWx1
ZShwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCkgLSBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRo
KCksIHRydWUpOwogICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0WCA9PSBSZXBlYXRGaWxsKQotICAg
ICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gbGF5
b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSwg
Z2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpKSA6IDApOworICAgICAgICBnZW9tZXRyeS5zZXRQ
aGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5LnRp
bGVTaXplKCkud2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSwgZ2VvbWV0cnkudGlsZVNpemUo
KS53aWR0aCgpKSA6IExheW91dFVuaXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgZ2VvbWV0cnku
c2V0Tm9SZXBlYXRYKHhQb3NpdGlvbiArIGxlZnQpOwogCiAgICAgTGF5b3V0VW5pdCB5UG9zaXRp
b24gPSBmaWxsTGF5ZXItPnlQb3NpdGlvbigpLmNhbGNNaW5WYWx1ZShwb3NpdGlvbmluZ0FyZWFT
aXplLmhlaWdodCgpIC0gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSwgdHJ1ZSk7CiAgICAg
aWYgKGJhY2tncm91bmRSZXBlYXRZID09IFJlcGVhdEZpbGwpCi0gICAgICAgIGdlb21ldHJ5LnNl
dFBoYXNlWShnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5
LnRpbGVTaXplKCkuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9wKSwgZ2VvbWV0cnkudGlsZVNp
emUoKS5oZWlnaHQoKSkgOiAwKTsKKyAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VZKGdlb21ldHJ5
LnRpbGVTaXplKCkuaGVpZ2h0KCkgPyBsYXlvdXRNb2QoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWln
aHQoKSAtICh5UG9zaXRpb24gKyB0b3ApLCBnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpKSA6
IExheW91dFVuaXQoMCkpOwogICAgIGVsc2UgCiAgICAgICAgIGdlb21ldHJ5LnNldE5vUmVwZWF0
WSh5UG9zaXRpb24gKyB0b3ApOwogCiAgICAgaWYgKGZpeGVkQXR0YWNobWVudCkKLSAgICAgICAg
Z2VvbWV0cnkudXNlRml4ZWRBdHRhY2htZW50KHBhaW50UmVjdC5sb2NhdGlvbigpKTsKKyAgICAg
ICAgZ2VvbWV0cnkudXNlRml4ZWRBdHRhY2htZW50KGFsaWduZWRSZWN0LmxvY2F0aW9uKCkpOwog
Ci0gICAgZ2VvbWV0cnkuY2xpcChwYWludFJlY3QpOworICAgIGdlb21ldHJ5LmNsaXAoYWxpZ25l
ZFJlY3QpOwogICAgIGdlb21ldHJ5LnNldERlc3RPcmlnaW4oZ2VvbWV0cnkuZGVzdFJlY3QoKS5s
b2NhdGlvbigpKTsKIH0KIApAQCAtMTA4OSwxOSArMTA5MSwxOSBAQCBib29sIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgTGF5b3V0VW5pdCByaWdodFdpdGhPdXRzZXQg
PSByZWN0Lm1heFgoKSArIHJpZ2h0T3V0c2V0OwogICAgIExheW91dFJlY3QgYm9yZGVySW1hZ2VS
ZWN0ID0gTGF5b3V0UmVjdChsZWZ0V2l0aE91dHNldCwgdG9wV2l0aE91dHNldCwgcmlnaHRXaXRo
T3V0c2V0IC0gbGVmdFdpdGhPdXRzZXQsIGJvdHRvbVdpdGhPdXRzZXQgLSB0b3BXaXRoT3V0c2V0
KTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNE
aW1lbnNpb25zKHN0eWxlSW1hZ2UsIGJvcmRlckltYWdlUmVjdC5zaXplKCkpOworICAgIEludFNp
emUgaW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1h
Z2UsIGV4cGFuZGVkSW50U2l6ZShib3JkZXJJbWFnZVJlY3Quc2l6ZSgpKSk7CiAKICAgICAvLyBJ
ZiBib3RoIHZhbHVlcyBhcmUg4oCYYXV0b+KAmSB0aGVuIHRoZSBpbnRyaW5zaWMgd2lkdGggYW5k
L29yIGhlaWdodCBvZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVzZWQsIGlmIGFueS4KLSAgICBMYXlv
dXRTaXplIGNvbnRhaW5lclNpemUgPSBpbWFnZVNpemUuaXNFbXB0eSgpID8gYm9yZGVySW1hZ2VS
ZWN0LnNpemUoKSA6IGltYWdlU2l6ZTsKKyAgICBJbnRTaXplIGNvbnRhaW5lclNpemUgPSBpbWFn
ZVNpemUuaXNFbXB0eSgpID8gZXhwYW5kZWRJbnRTaXplKGJvcmRlckltYWdlUmVjdC5zaXplKCkp
IDogaW1hZ2VTaXplOwogICAgIHN0eWxlSW1hZ2UtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJl
cih0aGlzLCBjb250YWluZXJTaXplLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKIAotICAgIExh
eW91dFVuaXQgaW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwotICAgIExheW91dFVuaXQg
aW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgaW50IGltYWdlV2lkdGggPSBp
bWFnZVNpemUud2lkdGgoKTsKKyAgICBpbnQgaW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0
KCk7CiAKLSAgICBMYXlvdXRVbml0IHRvcFNsaWNlID0gbWluPExheW91dFVuaXQ+KGltYWdlSGVp
Z2h0LCBuaW5lUGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLmNhbGNWYWx1ZShpbWFnZUhl
aWdodCkpOwotICAgIExheW91dFVuaXQgcmlnaHRTbGljZSA9IG1pbjxMYXlvdXRVbml0PihpbWFn
ZVdpZHRoLCBuaW5lUGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkuY2FsY1ZhbHVlKGlt
YWdlV2lkdGgpKTsKLSAgICBMYXlvdXRVbml0IGJvdHRvbVNsaWNlID0gbWluPExheW91dFVuaXQ+
KGltYWdlSGVpZ2h0LCBuaW5lUGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLmNhbGNW
YWx1ZShpbWFnZUhlaWdodCkpOwotICAgIExheW91dFVuaXQgbGVmdFNsaWNlID0gbWluPExheW91
dFVuaXQ+KGltYWdlV2lkdGgsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpLmNh
bGNWYWx1ZShpbWFnZVdpZHRoKSk7CisgICAgaW50IHRvcFNsaWNlID0gbWluPGludD4oaW1hZ2VI
ZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkuY2FsY1ZhbHVlKGltYWdl
SGVpZ2h0KSk7CisgICAgaW50IHJpZ2h0U2xpY2UgPSBtaW48aW50PihpbWFnZVdpZHRoLCBuaW5l
UGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkuY2FsY1ZhbHVlKGltYWdlV2lkdGgpKTsK
KyAgICBpbnQgYm90dG9tU2xpY2UgPSBtaW48aW50PihpbWFnZUhlaWdodCwgbmluZVBpZWNlSW1h
Z2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS5jYWxjVmFsdWUoaW1hZ2VIZWlnaHQpKTsKKyAgICBp
bnQgbGVmdFNsaWNlID0gbWluPGludD4oaW1hZ2VXaWR0aCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VT
bGljZXMoKS5sZWZ0KCkuY2FsY1ZhbHVlKGltYWdlV2lkdGgpKTsKIAogICAgIEVOaW5lUGllY2VJ
bWFnZVJ1bGUgaFJ1bGUgPSBuaW5lUGllY2VJbWFnZS5ob3Jpem9udGFsUnVsZSgpOwogICAgIEVO
aW5lUGllY2VJbWFnZVJ1bGUgdlJ1bGUgPSBuaW5lUGllY2VJbWFnZS52ZXJ0aWNhbFJ1bGUoKTsK
QEAgLTExMTUsOCArMTExNyw4IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Tmlu
ZVBpZWMKICAgICAvLyBUaGUgc3BlYyBzYXlzOiBHaXZlbiBMd2lkdGggYXMgdGhlIHdpZHRoIG9m
IHRoZSBib3JkZXIgaW1hZ2UgYXJlYSwgTGhlaWdodCBhcyBpdHMgaGVpZ2h0LCBhbmQgV3NpZGUg
YXMgdGhlIGJvcmRlciBpbWFnZSB3aWR0aAogICAgIC8vIG9mZnNldCBmb3IgdGhlIHNpZGUsIGxl
dCBmID0gbWluKEx3aWR0aC8oV2xlZnQrV3JpZ2h0KSwgTGhlaWdodC8oV3RvcCtXYm90dG9tKSku
IElmIGYgPCAxLCB0aGVuIGFsbCBXIGFyZSByZWR1Y2VkIGJ5CiAgICAgLy8gbXVsdGlwbHlpbmcg
dGhlbSBieSBmLgotICAgIGludCBib3JkZXJTaWRlV2lkdGggPSBtYXgoMSwgbGVmdFdpZHRoICsg
cmlnaHRXaWR0aCk7Ci0gICAgaW50IGJvcmRlclNpZGVIZWlnaHQgPSBtYXgoMSwgdG9wV2lkdGgg
KyBib3R0b21XaWR0aCk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJTaWRlV2lkdGggPSBtYXg8TGF5
b3V0VW5pdD4oMSwgbGVmdFdpZHRoICsgcmlnaHRXaWR0aCk7CisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJTaWRlSGVpZ2h0ID0gbWF4PExheW91dFVuaXQ+KDEsIHRvcFdpZHRoICsgYm90dG9tV2lkdGgp
OwogICAgIGZsb2F0IGJvcmRlclNpZGVTY2FsZUZhY3RvciA9IG1pbigoZmxvYXQpYm9yZGVySW1h
Z2VSZWN0LndpZHRoKCkgLyBib3JkZXJTaWRlV2lkdGgsIChmbG9hdClib3JkZXJJbWFnZVJlY3Qu
aGVpZ2h0KCkgLyBib3JkZXJTaWRlSGVpZ2h0KTsKICAgICBpZiAoYm9yZGVyU2lkZVNjYWxlRmFj
dG9yIDwgMSkgewogICAgICAgICB0b3BXaWR0aCAqPSBib3JkZXJTaWRlU2NhbGVGYWN0b3I7CkBA
IC0xMTYzLDkgKzExNjUsOSBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQ
aWVjCiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0
byBzY2FsZSBhbmQgdGlsZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVj
dChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGxl
ZnRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5n
ZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFn
ZVJlY3QueSgpICsgdG9wV2lkdGgsIGxlZnRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkhlaWdodCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCBz
b3VyY2VIZWlnaHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgc291cmNlSGVpZ2h0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUobGVmdFNpZGVTY2FsZSwgbGVm
dFNpZGVTY2FsZSksIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdlOjpUaWxlUnVsZSl2UnVsZSwg
b3ApOwogICAgIH0KIApAQCAtMTE4NCwyNCArMTE4NiwyNCBAQCBib29sIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJv
dHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAgICAvLyBQ
YWludCB0aGUgcmlnaHQgZWRnZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3Qu
bWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdo
dFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdl
dCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdp
ZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25IZWlnaHQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0
aCAtIHJpZ2h0U2xpY2UsIHRvcFNsaWNlLCByaWdodFNsaWNlLCBzb3VyY2VIZWlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VXaWR0aCAt
IHJpZ2h0U2xpY2UsIHRvcFNsaWNlLCByaWdodFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShyaWdodFNpZGVTY2Fs
ZSwgcmlnaHRTaWRlU2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdlOjpUaWxlUnVsZSl2UnVsZSwgb3ApOwogICAg
IH0KIAogICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAoZHJhd1RvcCkKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFj
ZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFn
ZVJlY3QueSgpLCBkZXN0aW5hdGlvbldpZHRoLCB0b3BXaWR0aCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2UsIDAsIHNvdXJjZVdp
ZHRoLCB0b3BTbGljZSksCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxl
ZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwgZGVzdGluYXRpb25XaWR0aCwgdG9wV2lkdGgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QobGVmdFNs
aWNlLCAwLCBzb3VyY2VXaWR0aCwgdG9wU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSh0b3BTaWRlU2NhbGUsIHRvcFNpZGVTY2FsZSksIChJ
bWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSwgb3ApOwogCiAgICAgLy8g
UGFpbnQgdGhlIGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICBncmFw
aGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlv
dXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5t
YXhZKCkgLSBib3R0b21XaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgp
ICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25XaWR0aCwgYm90
dG9tV2lkdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFJlY3QobGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBzb3VyY2VXaWR0aCwg
Ym90dG9tU2xpY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QobGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBzb3VyY2VXaWR0aCwg
Ym90dG9tU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0U2l6ZShib3R0b21TaWRlU2NhbGUsIGJvdHRvbVNpZGVTY2FsZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6
OlN0cmV0Y2hUaWxlLCBvcCk7CiAKQEAgLTEyMjgsOCArMTIzMCw4IEBAIGJvb2wgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgICAgIG1pZGRsZVNjYWxlRmFjdG9y
LnNldEhlaWdodChkZXN0aW5hdGlvbkhlaWdodCAvIHNvdXJjZUhlaWdodCk7CiAgICAgICAgIAog
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xv
clNwYWNlLAotICAgICAgICAgICAgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVm
dFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGRlc3RpbmF0aW9uV2lkdGgs
IGRlc3RpbmF0aW9uSGVpZ2h0KSwKLSAgICAgICAgICAgIExheW91dFJlY3QobGVmdFNsaWNlLCB0
b3BTbGljZSwgc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCksCisgICAgICAgICAgICBJbnRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0
b3BXaWR0aCwgZGVzdGluYXRpb25XaWR0aCwgZGVzdGluYXRpb25IZWlnaHQpLAorICAgICAgICAg
ICAgSW50UmVjdChsZWZ0U2xpY2UsIHRvcFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0
KSwKICAgICAgICAgICAgIG1pZGRsZVNjYWxlRmFjdG9yLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxl
LCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CiAgICAgfQogCkBAIC0xODcxLDcgKzE4NzMs
NyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyCiAKICAgICBncmFw
aGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKICAgICBncmFwaGljc0NvbnRl
eHQtPnNldEZpbGxDb2xvcihjb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3UmVjdChib3JkZXJSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRy
YXdSZWN0KGVuY2xvc2luZ0ludFJlY3QoYm9yZGVyUmVjdCkpOwogfQogI2Vsc2UKIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLApAQCAtMjM0Niw3ICsy
MzQ4LDcgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZQogICAgIC8v
IFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0IHdlIG9ubHkgZ2V0IHJhZGlpIG5vdCBj
b250YWluZWQgd2l0aGluIGVhY2ggZWRnZSBpZiBvbmUgb2YgdGhlIHJhZGlpCiAgICAgLy8gZm9y
IGFuIGVkZ2UgaXMgemVybywgc28gd2UgY2FuIHNoaWZ0IHRoZSBhcmMgdG93YXJkcyB0aGUgemVy
byByYWRpdXMgY29ybmVyLgogICAgIFJvdW5kZWRSZWN0OjpSYWRpaSBuZXdSYWRpaSA9IGlubmVy
Qm9yZGVyLnJhZGlpKCk7Ci0gICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gaW5uZXJCb3JkZXIucmVj
dCgpOworICAgIEludFJlY3QgbmV3UmVjdCA9IGlubmVyQm9yZGVyLnJlY3QoKTsKIAogICAgIGZs
b2F0IG92ZXJzaG9vdDsKICAgICBmbG9hdCBtYXhSYWRpaTsKQEAgLTIzNjAsOSArMjM2Miw5IEBA
IHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmUKICAgICAgICAgICAgIGlm
ICghbmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5t
b3ZlKC1vdmVyc2hvb3QsIDApOwogICAgICAgICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRv
bUxlZnQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0
KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBtYXhSYWRpaSA9IG1heDxMYXlvdXRVbml0Pihu
ZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCksIG5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkp
OworICAgICAgICBuZXdSYWRpaS5zZXRCb3R0b21MZWZ0KEludFNpemUoMCwgMCkpOworICAgICAg
ICBuZXdSYWRpaS5zZXRCb3R0b21SaWdodChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbWF4UmFk
aWkgPSBtYXgobmV3UmFkaWkudG9wTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS50b3BSaWdodCgp
LmhlaWdodCgpKTsKICAgICAgICAgaWYgKG1heFJhZGlpID4gbmV3UmVjdC5oZWlnaHQoKSkKICAg
ICAgICAgICAgIG5ld1JlY3Quc2V0SGVpZ2h0KG1heFJhZGlpKTsKICAgICAgICAgYnJlYWs7CkBA
IC0yMzc1LDkgKzIzNzcsOSBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJ
bm5lCiAgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpKQogICAg
ICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgtb3ZlcnNob290LCAwKTsKICAgICAgICAgfQotICAg
ICAgICBuZXdSYWRpaS5zZXRUb3BMZWZ0KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBuZXdS
YWRpaS5zZXRUb3BSaWdodChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbWF4UmFkaWkgPSBt
YXg8TGF5b3V0VW5pdD4obmV3UmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS5i
b3R0b21SaWdodCgpLmhlaWdodCgpKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wTGVmdChJbnRT
aXplKDAsIDApKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wUmlnaHQoSW50U2l6ZSgwLCAwKSk7
CisgICAgICAgIG1heFJhZGlpID0gbWF4KG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSwg
bmV3UmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSk7CiAgICAgICAgIGlmIChtYXhSYWRpaSA+
IG5ld1JlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgwLCBuZXdSZWN0
LmhlaWdodCgpIC0gbWF4UmFkaWkpOwogICAgICAgICAgICAgbmV3UmVjdC5zZXRIZWlnaHQobWF4
UmFkaWkpOwpAQCAtMjM5Miw5ICsyMzk0LDkgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0
ZUFkanVzdGVkSW5uZQogICAgICAgICAgICAgaWYgKCFuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0
KCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKDAsIC1vdmVyc2hvb3QpOwogICAgICAg
ICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldFRvcFJpZ2h0KExheW91dFNpemUoMCwgMCkpOwotICAg
ICAgICBuZXdSYWRpaS5zZXRCb3R0b21SaWdodChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAg
bWF4UmFkaWkgPSBtYXg8TGF5b3V0VW5pdD4obmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCksIG5l
d1JhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wUmln
aHQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0KEludFNp
emUoMCwgMCkpOworICAgICAgICBtYXhSYWRpaSA9IG1heChuZXdSYWRpaS50b3BMZWZ0KCkud2lk
dGgoKSwgbmV3UmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkpOwogICAgICAgICBpZiAobWF4UmFk
aWkgPiBuZXdSZWN0LndpZHRoKCkpCiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1heFJh
ZGlpKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNDA3LDkgKzI0MDksOSBAQCBzdGF0aWMgUm91bmRl
ZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lCiAgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLnRv
cFJpZ2h0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKDAsIC1vdmVy
c2hvb3QpOwogICAgICAgICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldFRvcExlZnQoTGF5b3V0U2l6
ZSgwLCAwKSk7Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbUxlZnQoTGF5b3V0U2l6ZSgwLCAw
KSk7Ci0gICAgICAgIG1heFJhZGlpID0gbWF4PExheW91dFVuaXQ+KG5ld1JhZGlpLnRvcFJpZ2h0
KCkud2lkdGgoKSwgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKKyAgICAgICAgbmV3
UmFkaWkuc2V0VG9wTGVmdChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0Qm90
dG9tTGVmdChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbWF4UmFkaWkgPSBtYXgobmV3UmFkaWku
dG9wUmlnaHQoKS53aWR0aCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwogICAg
ICAgICBpZiAobWF4UmFkaWkgPiBuZXdSZWN0LndpZHRoKCkpIHsKICAgICAgICAgICAgIG5ld1Jl
Y3QubW92ZShuZXdSZWN0LndpZHRoKCkgLSBtYXhSYWRpaSwgMCk7CiAgICAgICAgICAgICBuZXdS
ZWN0LnNldFdpZHRoKG1heFJhZGlpKTsKQEAgLTI1NTIsNyArMjU1NCw3IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAgIC8vIGJsZWVkIGluIChk
dWUgdG8gYW50aWFsaWFzaW5nKSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2Zvcm1lZC4KICAgICAg
ICAgICAgIExheW91dFNpemUgZXh0cmFPZmZzZXQocGFpbnRSZWN0LndpZHRoKCkgKyBtYXg8TGF5
b3V0VW5pdD4oMCwgc2hhZG93T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93Qmx1ciArIDIgKiBzaGFk
b3dTcHJlYWQgKyAxLCAwKTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNl
dDsKLSAgICAgICAgICAgIGZpbGxSZWN0Lm1vdmUoZXh0cmFPZmZzZXQpOworICAgICAgICAgICAg
ZmlsbFJlY3QubW92ZShyb3VuZGVkSW50U2l6ZShleHRyYU9mZnNldCkpOwogCiAgICAgICAgICAg
ICBpZiAoc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
LCBzLT5jb2xvclNwYWNlKCkpOwpAQCAtMjU3Miw3ICsyNTc0LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGlmICghcmVjdFRvQ2xp
cE91dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsaXBPdXRSb3Vu
ZGVkUmVjdChyZWN0VG9DbGlwT3V0KTsKIAotICAgICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGlu
Zmx1ZW5jZVJlY3Qoc2hhZG93UmVjdCwgYm9yZGVyLnJhZGlpKCkpOworICAgICAgICAgICAgICAg
IFJvdW5kZWRSZWN0IGluZmx1ZW5jZVJlY3QoZW5jbG9zaW5nSW50UmVjdChzaGFkb3dSZWN0KSwg
Ym9yZGVyLnJhZGlpKCkpOwogICAgICAgICAgICAgICAgIGluZmx1ZW5jZVJlY3QuZXhwYW5kUmFk
aWkoMiAqIHNoYWRvd0JsdXIgKyBzaGFkb3dTcHJlYWQpOwogICAgICAgICAgICAgICAgIGlmIChh
bGxDb3JuZXJzQ2xpcHBlZE91dChpbmZsdWVuY2VSZWN0LCBpbmZvLnJlY3QpKQogICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChmaWxsUmVjdC5yZWN0KCksIENvbG9yOjpibGFj
aywgcy0+Y29sb3JTcGFjZSgpKTsKQEAgLTI1OTUsNyArMjU5Nyw3IEBAIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICBpZiAoIXJlY3RUb0NsaXBPdXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5jbGlwT3V0KHJlY3RUb0NsaXBPdXQpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5jbGlwT3V0KGVuY2xvc2luZ0ludFJlY3QocmVjdFRvQ2xpcE91dCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0LnJlY3QoKSwgQ29sb3I6OmJsYWNr
LCBzLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAt
MjYzMCw3ICsyNjMyLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFk
bwogICAgICAgICAgICAgQ29sb3IgZmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dD
b2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIDI1NSk7CiAKICAgICAgICAgICAgIExh
eW91dFJlY3Qgb3V0ZXJSZWN0ID0gYXJlYUNhc3RpbmdTaGFkb3dJbkhvbGUoYm9yZGVyLnJlY3Qo
KSwgc2hhZG93Qmx1ciwgc2hhZG93U3ByZWFkLCBzaGFkb3dPZmZzZXQpOwotICAgICAgICAgICAg
Um91bmRlZFJlY3Qgcm91bmRlZEhvbGUoaG9sZVJlY3QsIGJvcmRlci5yYWRpaSgpKTsKKyAgICAg
ICAgICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlKGVuY2xvc2luZ0ludFJlY3QoaG9sZVJlY3Qp
LCBib3JkZXIucmFkaWkoKSk7CiAKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVz
KSB7CkBAIC0yNjUwLDcgKzI2NTIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJveFNoYWRvCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHMtPmNvbG9yU3Bh
Y2UoKSk7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG91
dGVyUmVjdCwgcm91bmRlZEhvbGUsIGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGVuY2xvc2luZ0ludFJlY3Qo
b3V0ZXJSZWN0KSwgcm91bmRlZEhvbGUsIGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA5ODg4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcs
MjkgKzEzNywyOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBjbGFzcyBCYWNrZ3JvdW5kSW1hZ2VHZW9t
ZXRyeSB7CiAgICAgcHVibGljOgotICAgICAgICBMYXlvdXRQb2ludCBkZXN0T3JpZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9kZXN0T3JpZ2luOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVzdE9yaWdpbihj
b25zdCBMYXlvdXRQb2ludCYgZGVzdE9yaWdpbikKKyAgICAgICAgSW50UG9pbnQgZGVzdE9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdE9yaWdpbjsgfQorICAgICAgICB2b2lkIHNldERlc3RP
cmlnaW4oY29uc3QgSW50UG9pbnQmIGRlc3RPcmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgICAg
IG1fZGVzdE9yaWdpbiA9IGRlc3RPcmlnaW47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IExheW91dFJlY3QgZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0OyB9Ci0gICAg
ICAgIHZvaWQgc2V0RGVzdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZGVzdFJlY3QpCisgICAgICAg
IEludFJlY3QgZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0OyB9CisgICAgICAg
IHZvaWQgc2V0RGVzdFJlY3QoY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IFJldHVybnMgdGhlIHBoYXNlIHJlbGF0aXZlIHRvIHRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUu
Ci0gICAgICAgIExheW91dFBvaW50IHJlbGF0aXZlUGhhc2UoKSBjb25zdDsKKyAgICAgICAgSW50
UG9pbnQgcmVsYXRpdmVQaGFzZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTGF5b3V0UG9p
bnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9ICAgCi0gICAgICAgIHZvaWQgc2V0
UGhhc2UoY29uc3QgTGF5b3V0UG9pbnQmIHBoYXNlKQorICAgICAgICBJbnRQb2ludCBwaGFzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0gICAKKyAgICAgICAgdm9pZCBzZXRQaGFzZShjb25z
dCBJbnRQb2ludCYgcGhhc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcGhhc2UgPSBwaGFz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIExheW91dFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVTaXplOyB9ICAgIAotICAgICAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IExh
eW91dFNpemUmIHRpbGVTaXplKQorICAgICAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV90aWxlU2l6ZTsgfSAgICAKKyAgICAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSkKICAgICAgICAgewogICAgICAgICAgICAgbV90aWxlU2l6ZSA9IHRp
bGVTaXplOwogICAgICAgICB9CkBAIC0xNzAsMTQgKzE3MCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZvaWQgc2V0Tm9SZXBlYXRYKGludCB4T2Zmc2V0KTsKICAgICAgICAgdm9pZCBzZXROb1Jl
cGVhdFkoaW50IHlPZmZzZXQpOwogICAgICAgICAKLSAgICAgICAgdm9pZCB1c2VGaXhlZEF0dGFj
aG1lbnQoY29uc3QgTGF5b3V0UG9pbnQmIGF0dGFjaG1lbnRQb2ludCk7CisgICAgICAgIHZvaWQg
dXNlRml4ZWRBdHRhY2htZW50KGNvbnN0IEludFBvaW50JiBhdHRhY2htZW50UG9pbnQpOwogICAg
ICAgICAKLSAgICAgICAgdm9pZCBjbGlwKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICAgICAgdm9p
ZCBjbGlwKGNvbnN0IEludFJlY3QmKTsKICAgICBwcml2YXRlOgotICAgICAgICBMYXlvdXRSZWN0
IG1fZGVzdFJlY3Q7Ci0gICAgICAgIExheW91dFBvaW50IG1fZGVzdE9yaWdpbjsKLSAgICAgICAg
TGF5b3V0UG9pbnQgbV9waGFzZTsKLSAgICAgICAgTGF5b3V0U2l6ZSBtX3RpbGVTaXplOworICAg
ICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7CisgICAgICAgIEludFBvaW50IG1fZGVzdE9yaWdpbjsK
KyAgICAgICAgSW50UG9pbnQgbV9waGFzZTsKKyAgICAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwog
ICAgIH07CiAKICAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0
IEZpbGxMYXllciosIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCwgQmFja2dyb3VuZEltYWdl
R2VvbWV0cnkmKTsKQEAgLTE5NSw4ICsxOTUsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc0JveE1vZGVsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgTGF5b3V0U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiwg
Y29uc3QgTGF5b3V0U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3Q7Ci0gICAg
TGF5b3V0U2l6ZSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5bGVJbWFnZSos
IGNvbnN0IExheW91dFNpemUmIHNjYWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0OworICAg
IEludFNpemUgY2FsY3VsYXRlRmlsbFRpbGVTaXplKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IElu
dFNpemUmIHNjYWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0OworICAgIEludFNpemUgY2Fs
Y3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1hZ2UqLCBjb25zdCBJbnRTaXpl
JiBzY2FsZWRQb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdDsKIAogICAgIFJvdW5kZWRSZWN0IGdl
dEJhY2tncm91bmRSb3VuZGVkUmVjdChjb25zdCBMYXlvdXRSZWN0JiwgSW5saW5lRmxvd0JveCos
IExheW91dFVuaXQgaW5saW5lQm94V2lkdGgsIExheW91dFVuaXQgaW5saW5lQm94SGVpZ2h0LAog
ICAgICAgICBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxS
aWdodEVkZ2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113113</attachid>
            <date>2011-10-31 17:25:40 -0700</date>
            <delta_ts>2011-11-01 11:04:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71240-20111031172539.patch</filename>
            <type>text/plain</type>
            <size>32569</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMzEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBiYWNrZ3JvdW5kL2Jv
cmRlciBpbWFnZSBiYWNrIHRvIEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTd2l0Y2ggYmFja2dyb3VuZC0gYW5kIGJvcmRlci1pbWFnZSByZW5kZXJp
bmcgYmFjayB0byBpbnQgdG8gYWxpZ24gd2l0aAorICAgICAgICBkZXZpY2UgcGl4ZWxzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zm
c2V0TGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxM
YXllckV4dGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZp
eGVkQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpyZWxhdGl2ZVBoYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxh
dGVBZGp1c3RlZElubmVyQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFj
a2dyb3VuZEltYWdlR2VvbWV0cnk6OmRlc3RPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0T3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1h
Z2VHZW9tZXRyeTo6ZGVzdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnBo
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5k
SW1hZ2VHZW9tZXRyeTo6c2V0UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5Ojp0aWxlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNl
dFRpbGVTaXplKToKKwogMjAxMS0xMC0yOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBXZWJLaXQgbmVzdHMgcHJlIG9uIGNvcHkgYW5kIHBhc3RlIHdoZW4gdGhl
IHByZSBpcyB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDk4OTA0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM4LDggKzQzOCw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6Om9mZnNldEwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwotICAgIExheW91dFVuaXQg
eFBvcyA9IChpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmxlZnQoKSA6IDApOwotICAgIAor
ICAgIExheW91dFVuaXQgeFBvcyA9IChpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmxlZnQo
KSA6IExheW91dFVuaXQoMCkpOworCiAgICAgLy8gSWYgdGhlIG9mZnNldFBhcmVudCBvZiB0aGUg
ZWxlbWVudCBpcyBudWxsLCBvciBpcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQsCiAgICAgLy8gcmV0
dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjYW52YXMgb3JpZ2luIGFuZCB0aGUgbGVmdCBi
b3JkZXIgZWRnZSAKICAgICAvLyBvZiB0aGUgZWxlbWVudCBhbmQgc3RvcCB0aGlzIGFsZ29yaXRo
bS4KQEAgLTQ3Miw3ICs0NzIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpv
ZmZzZXRUCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBvZmZzZXRQYXIgPSBvZmZzZXRQYXJlbnQoKTsKLSAgICBMYXlvdXRVbml0IHlQb3MgPSAoaXNC
b3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT50b3AoKSA6IDApOworICAgIExheW91dFVuaXQgeVBv
cyA9IChpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPnRvcCgpIDogTGF5b3V0VW5pdCgwKSk7
CiAgICAgCiAgICAgLy8gSWYgdGhlIG9mZnNldFBhcmVudCBvZiB0aGUgZWxlbWVudCBpcyBudWxs
LCBvciBpcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQsCiAgICAgLy8gcmV0dXJuIHRoZSBkaXN0YW5j
ZSBiZXR3ZWVuIHRoZSBjYW52YXMgb3JpZ2luIGFuZCB0aGUgdG9wIGJvcmRlciBlZGdlIApAQCAt
NjUxLDEwICs2NTEsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5
ZQogICAgICAgICBjb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKICAgICB9CiAg
ICAgCi0gICAgTGF5b3V0VW5pdCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJvcmRlckxlZnQo
KSA6IDA7Ci0gICAgTGF5b3V0VW5pdCBiUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gYm9yZGVy
UmlnaHQoKSA6IDA7Ci0gICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBh
ZGRpbmdMZWZ0KCkgOiAwOwotICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRn
ZSA/IHBhZGRpbmdSaWdodCgpIDogMDsKKyAgICBMYXlvdXRVbml0IGJMZWZ0ID0gaW5jbHVkZUxl
ZnRFZGdlID8gYm9yZGVyTGVmdCgpIDogTGF5b3V0VW5pdCgwKTsKKyAgICBMYXlvdXRVbml0IGJS
aWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogTGF5b3V0VW5pdCgwKTsK
KyAgICBMYXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6
IExheW91dFVuaXQoMCk7CisgICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdl
ID8gcGFkZGluZ1JpZ2h0KCkgOiBMYXlvdXRVbml0KDApOwogCiAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoKmNvbnRleHQsIGNsaXBwZWRX
aXRoTG9jYWxTY3JvbGxpbmcpOwogICAgIExheW91dFJlY3Qgc2Nyb2xsZWRQYWludFJlY3QgPSBy
ZWN0OwpAQCAtNjczLDE3ICs2NzMsMTcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRGaWxsTGF5ZQogICAgIGlmIChiZ0xheWVyLT5jbGlwKCkgPT0gUGFkZGluZ0ZpbGxCb3ggfHwg
YmdMYXllci0+Y2xpcCgpID09IENvbnRlbnRGaWxsQm94KSB7CiAgICAgICAgIC8vIENsaXAgdG8g
dGhlIHBhZGRpbmcgb3IgY29udGVudCBib3hlcyBhcyBuZWNlc3NhcnkuCiAgICAgICAgIGJvb2wg
aW5jbHVkZVBhZGRpbmcgPSBiZ0xheWVyLT5jbGlwKCkgPT0gQ29udGVudEZpbGxCb3g7Ci0gICAg
ICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0Lngo
KSArIGJMZWZ0ICsgKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgOiAwKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QueSgpICsgYm9yZGVyVG9wKCkg
KyAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgOiAwKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJp
Z2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiAwKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0KCkgLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgp
ICsgcGFkZGluZ0JvdHRvbSgpIDogMCkpOworICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
TGF5b3V0UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGlu
ZyA/IHBMZWZ0IDogTGF5b3V0VW5pdCgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRk
aW5nID8gcGFkZGluZ1RvcCgpIDogTGF5b3V0VW5pdCgwKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVmdCAtIGJSaWdo
dCAtIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogTGF5b3V0VW5pdCgwKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdo
dCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBh
ZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSA6IExheW91dFVuaXQoMCkpKTsKICAgICAgICAg
YmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyLnNhdmUoKTsKICAgICAgICAgY29udGV4dC0+Y2xpcChj
bGlwUmVjdCk7CiAgICAgfSBlbHNlIGlmIChiZ0xheWVyLT5jbGlwKCkgPT0gVGV4dEZpbGxCb3gp
IHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBkcmF3IG91ciB0ZXh0IGludG8gYSBtYXNrIHRoYXQg
Y2FuIHRoZW4gYmUgdXNlZCB0byBjbGlwIGJhY2tncm91bmQgZHJhd2luZy4KICAgICAgICAgLy8g
Rmlyc3QgZmlndXJlIG91dCBob3cgYmlnIHRoZSBtYXNrIGhhcyB0byBiZS4gIEl0IHNob3VsZCBi
ZSBubyBiaWdnZXIgdGhhbiB3aGF0IHdlIG5lZWQKICAgICAgICAgLy8gdG8gYWN0dWFsbHkgcmVu
ZGVyLCBzbyB3ZSBzaG91bGQgaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGJvcmRl
ciBib3ggb2YgdGhlIGJhY2tncm91bmQuCi0gICAgICAgIExheW91dFJlY3QgbWFza1JlY3QgPSBy
ZWN0OworICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsK
ICAgICAgICAgbWFza1JlY3QuaW50ZXJzZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICAgICAgCiAg
ICAgICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCkBAIC04MzMsMTAgKzgzMywxMCBAQCBzdGF0
aWMgaW5saW5lIExheW91dFNpemUgcmVzb2x2ZUFnYWluc3RJCiAgICAgcmV0dXJuIExheW91dFNp
emUoc2l6ZS53aWR0aCgpLCBzb2x1dGlvbkhlaWdodCk7CiB9CiAKLUxheW91dFNpemUgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhTdHlsZUlt
YWdlKiBpbWFnZSwgY29uc3QgTGF5b3V0U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3QK
K0ludFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGlt
ZW5zaW9ucyhTdHlsZUltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgcG9zaXRpb25pbmdBcmVh
U2l6ZSkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHJlc29sdmVkV2lkdGggPSAwOwotICAgIExh
eW91dFVuaXQgcmVzb2x2ZWRIZWlnaHQgPSAwOworICAgIGludCByZXNvbHZlZFdpZHRoID0gMDsK
KyAgICBpbnQgcmVzb2x2ZWRIZWlnaHQgPSAwOwogICAgIEZsb2F0U2l6ZSBpbnRyaW5zaWNSYXRp
bzsKIAogICAgIC8vIEEgZ2VuZXJhdGVkIGltYWdlIHdpdGhvdXQgYSBmaXhlZCBzaXplLCB3aWxs
IGFsd2F5cyByZXR1cm4gdGhlIGNvbnRhaW5lciBzaXplIGFzIGludHJpbnNpYyBzaXplLgpAQCAt
ODUwLDQ2ICs4NTAsNDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3Vs
YQogCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBs
YXlvdXQgaXMgb2ZmIGludHM6IHdlYmtpdC5vcmcvYi82MzY1NgogICAgICAgICBpZiAoaW50cmlu
c2ljV2lkdGguaXNGaXhlZCgpKQotICAgICAgICAgICAgcmVzb2x2ZWRXaWR0aCA9IHN0YXRpY19j
YXN0PExheW91dFVuaXQ+KGNlaWxmKGludHJpbnNpY1dpZHRoLnZhbHVlKCkgKiBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHJlc29sdmVkV2lkdGggPSBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWxmKGludHJpbnNpY1dpZHRoLnZhbHVlKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpKTsKICAgICAgICAgaWYgKGludHJpbnNpY0hlaWdodC5pc0ZpeGVkKCkpCi0gICAgICAg
ICAgICByZXNvbHZlZEhlaWdodCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxmKGludHJp
bnNpY0hlaWdodC52YWx1ZSgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAg
ICAgICByZXNvbHZlZEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoaW50cmluc2ljSGVp
Z2h0LnZhbHVlKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAKICAgICAv
LyBJbnRyaW5zaWMgZGltZW5zaW9ucyBleHByZXNzZWQgYXMgcGVyY2VudGFnZXMgbXVzdCBiZSBy
ZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVjdGFuZ2xlCiAgICAg
Ly8gdGhhdCBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZSAnYmFja2dy
b3VuZC1wb3NpdGlvbicgcHJvcGVydHkuIFNWRyBvbiB0aGUgb3RoZXIgaGFuZAogICAgIC8vIF9l
eHBsaWNpdGVseV8gc2F5cyB0aGF0IHBlcmNlbnRhZ2UgdmFsdWVzIGZvciB0aGUgd2lkdGgvaGVp
Z2h0IGF0dHJpYnV0ZXMgZG8gTk9UIGRlZmluZSBpbnRyaW5zaWMgZGltZW5zaW9ucy4KICAgICBp
ZiAocmVzb2x2ZWRXaWR0aCA+IDAgJiYgcmVzb2x2ZWRIZWlnaHQgPiAwKQotICAgICAgICByZXR1
cm4gTGF5b3V0U2l6ZShyZXNvbHZlZFdpZHRoLCByZXNvbHZlZEhlaWdodCk7CisgICAgICAgIHJl
dHVybiBJbnRTaXplKHJlc29sdmVkV2lkdGgsIHJlc29sdmVkSGVpZ2h0KTsKIAogICAgIC8vIElm
IHRoZSBpbWFnZSBoYXMgb25lIG9mIGVpdGhlciBhbiBpbnRyaW5zaWMgd2lkdGggb3IgYW4gaW50
cmluc2ljIGhlaWdodDoKICAgICAvLyAqIGFuZCBhbiBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvLCB0
aGVuIHRoZSBtaXNzaW5nIGRpbWVuc2lvbiBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGdpdmVuIGRp
bWVuc2lvbiBhbmQgdGhlIHJhdGlvLgogICAgIC8vICogYW5kIG5vIGludHJpbnNpYyBhc3BlY3Qg
cmF0aW8sIHRoZW4gdGhlIG1pc3NpbmcgZGltZW5zaW9uIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHNp
emUgb2YgdGhlIHJlY3RhbmdsZSB0aGF0CiAgICAgLy8gICBlc3RhYmxpc2hlcyB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gZm9yIHRoZSAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCiAgICAg
aWYgKChyZXNvbHZlZFdpZHRoICYmICFyZXNvbHZlZEhlaWdodCkgfHwgKCFyZXNvbHZlZFdpZHRo
ICYmIHJlc29sdmVkSGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuIHJlc29sdmVBZ2FpbnN0SW50cmlu
c2ljV2lkdGhPckhlaWdodEFuZFJhdGlvKHBvc2l0aW9uaW5nQXJlYVNpemUsIGludHJpbnNpY1Jh
dGlvLCByZXNvbHZlZFdpZHRoLCByZXNvbHZlZEhlaWdodCk7CisgICAgICAgIHJldHVybiBleHBh
bmRlZEludFNpemUocmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNXaWR0aE9ySGVpZ2h0QW5kUmF0aW8o
cG9zaXRpb25pbmdBcmVhU2l6ZSwgaW50cmluc2ljUmF0aW8sIHJlc29sdmVkV2lkdGgsIHJlc29s
dmVkSGVpZ2h0KSk7CiAKICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG5vIGludHJpbnNpYyBkaW1l
bnNpb25zIGFuZCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZSBkaW1lbnNpb25zIG11c3QgYmUg
YXNzdW1lZCB0byBiZSB0aGUKICAgICAvLyBsYXJnZXN0IGRpbWVuc2lvbnMgYXQgdGhhdCByYXRp
byBzdWNoIHRoYXQgbmVpdGhlciBkaW1lbnNpb24gZXhjZWVkcyB0aGUgZGltZW5zaW9ucyBvZiB0
aGUgcmVjdGFuZ2xlIHRoYXQKICAgICAvLyBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0
ZW0gZm9yIHRoZSAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCiAgICAgaWYgKCFyZXNv
bHZlZFdpZHRoICYmICFyZXNvbHZlZEhlaWdodCAmJiAhaW50cmluc2ljUmF0aW8uaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gcmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNSYXRpbyhwb3NpdGlvbmlu
Z0FyZWFTaXplLCBpbnRyaW5zaWNSYXRpbyk7CisgICAgICAgIHJldHVybiBleHBhbmRlZEludFNp
emUocmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNSYXRpbyhwb3NpdGlvbmluZ0FyZWFTaXplLCBpbnRy
aW5zaWNSYXRpbykpOwogCiAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgcmF0
aW8gZWl0aGVyLCB0aGVuIHRoZSBkaW1lbnNpb25zIG11c3QgYmUgYXNzdW1lZCB0byBiZSB0aGUg
cmVjdGFuZ2xlIHRoYXQKICAgICAvLyBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
Zm9yIHRoZSAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCiAgICAgcmV0dXJuIHBvc2l0
aW9uaW5nQXJlYVNpemU7CiB9CiAKLUxheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNh
bGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciwgY29uc3QgTGF5
b3V0U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3QKK0ludFNpemUgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXll
ciwgY29uc3QgSW50U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3QKIHsKICAgICBTdHls
ZUltYWdlKiBpbWFnZSA9IGZpbGxMYXllci0+aW1hZ2UoKTsKICAgICBFRmlsbFNpemVUeXBlIHR5
cGUgPSBmaWxsTGF5ZXItPnNpemUoKS50eXBlOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZUludHJp
bnNpY1NpemUgPSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoaW1hZ2UsIHBvc2l0
aW9uaW5nQXJlYVNpemUpOworICAgIEludFNpemUgaW1hZ2VJbnRyaW5zaWNTaXplID0gY2FsY3Vs
YXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKGltYWdlLCBwb3NpdGlvbmluZ0FyZWFTaXplKTsK
IAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFNpemVMZW5ndGg6IHsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgdyA9IHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKTsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgaCA9IHBvc2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCk7CisgICAg
ICAgICAgICBpbnQgdyA9IHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKTsKKyAgICAgICAgICAg
IGludCBoID0gcG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKTsKIAogICAgICAgICAgICAgTGVu
Z3RoIGxheWVyV2lkdGggPSBmaWxsTGF5ZXItPnNpemUoKS5zaXplLndpZHRoKCk7CiAgICAgICAg
ICAgICBMZW5ndGggbGF5ZXJIZWlnaHQgPSBmaWxsTGF5ZXItPnNpemUoKS5zaXplLmhlaWdodCgp
OwpAQCAtOTE4LDcgKzkxOCw3IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNh
bGN1bGEKICAgICAgICAgICAgICAgICBoID0gaW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTGF5b3V0U2l6
ZShtYXg8TGF5b3V0VW5pdD4oMSwgdyksIG1heDxMYXlvdXRVbml0PigxLCBoKSk7CisgICAgICAg
ICAgICByZXR1cm4gSW50U2l6ZShtYXgoMSwgdyksIG1heCgxLCBoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBTaXplTm9uZTogewogICAgICAgICAgICAgLy8gSWYgYm90aCB2YWx1ZXMgYXJl
IOKAmGF1dG/igJkgdGhlbiB0aGUgaW50cmluc2ljIHdpZHRoIGFuZC9vciBoZWlnaHQgb2YgdGhl
IGltYWdlIHNob3VsZCBiZSB1c2VkLCBpZiBhbnkuCkBAIC05MzUsMTIgKzkzNSwxMiBAQCBMYXlv
dXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhCiAgICAgICAgICAgICBmbG9hdCB2
ZXJ0aWNhbFNjYWxlRmFjdG9yID0gaW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpCiAgICAgICAg
ICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4ocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQo
KSkgLyBpbWFnZUludHJpbnNpY1NpemUuaGVpZ2h0KCkgOiAxOwogICAgICAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSB0eXBlID09IENvbnRhaW4gPyBtaW4oaG9yaXpvbnRhbFNjYWxlRmFjdG9y
LCB2ZXJ0aWNhbFNjYWxlRmFjdG9yKSA6IG1heChob3Jpem9udGFsU2NhbGVGYWN0b3IsIHZlcnRp
Y2FsU2NhbGVGYWN0b3IpOwotICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUobWF4PExheW91
dFVuaXQ+KDEsIGltYWdlSW50cmluc2ljU2l6ZS53aWR0aCgpICogc2NhbGVGYWN0b3IpLCBtYXg8
TGF5b3V0VW5pdD4oMSwgaW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpICogc2NhbGVGYWN0b3Ip
KTsKKyAgICAgICAgICAgIHJldHVybiBJbnRTaXplKG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KGlt
YWdlSW50cmluc2ljU2l6ZS53aWR0aCgpICogc2NhbGVGYWN0b3IpKSwgbWF4KDEsIHN0YXRpY19j
YXN0PGludD4oaW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpKSk7CiAg
ICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBM
YXlvdXRTaXplKCk7CisgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNldE5vUmVwZWF0WChpbnQgeE9m
ZnNldCkKQEAgLTk1NiwxOSArOTU2LDIwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJh
Y2tncm91bmRJbWEKICAgICBtX2Rlc3RSZWN0LnNldEhlaWdodChtX3RpbGVTaXplLmhlaWdodCgp
ICsgbWluKHlPZmZzZXQsIDApKTsKIH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFj
a2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZpeGVkQXR0YWNobWVudChjb25zdCBMYXlvdXRQb2lu
dCYgYXR0YWNobWVudFBvaW50KQordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3Vu
ZEltYWdlR2VvbWV0cnk6OnVzZUZpeGVkQXR0YWNobWVudChjb25zdCBJbnRQb2ludCYgYXR0YWNo
bWVudFBvaW50KQogewotICAgIG1fcGhhc2UubW92ZShtYXg8TGF5b3V0VW5pdD4oYXR0YWNobWVu
dFBvaW50LngoKSAtIG1fZGVzdFJlY3QueCgpLCAwKSwgbWF4PExheW91dFVuaXQ+KGF0dGFjaG1l
bnRQb2ludC55KCkgLSBtX2Rlc3RSZWN0LnkoKSwgMCkpOworICAgIEludFBvaW50IGFsaWduZWRQ
b2ludCA9IGF0dGFjaG1lbnRQb2ludDsKKyAgICBtX3BoYXNlLm1vdmUobWF4KGFsaWduZWRQb2lu
dC54KCkgLSBtX2Rlc3RSZWN0LngoKSwgMCksIG1heChhbGlnbmVkUG9pbnQueSgpIC0gbV9kZXN0
UmVjdC55KCksIDApKTsKIH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3Vu
ZEltYWdlR2VvbWV0cnk6OmNsaXAoY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpCit2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6Y2xpcChjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX2Rlc3RSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7
CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VH
ZW9tZXRyeTo6cmVsYXRpdmVQaGFzZSgpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnJlbGF0aXZlUGhhc2UoKSBjb25zdAogewot
ICAgIExheW91dFBvaW50IHBoYXNlID0gbV9waGFzZTsKKyAgICBJbnRQb2ludCBwaGFzZSA9IG1f
cGhhc2U7CiAgICAgcGhhc2UgKz0gbV9kZXN0UmVjdC5sb2NhdGlvbigpIC0gbV9kZXN0T3JpZ2lu
OwogICAgIHJldHVybiBwaGFzZTsKIH0KQEAgLTk3OCw3ICs5NzksOCBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiB7CiAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gMDsK
ICAgICBMYXlvdXRVbml0IHRvcCA9IDA7Ci0gICAgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFT
aXplOworICAgIEludFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKKyAgICBJbnRSZWN0IGFsaWdu
ZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5l
IHRoZSBiYWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEgYW5kIHNldCBkZXN0UmVjdCB0byB0aGUg
YmFja2dyb3VuZCBwYWludGluZyBhcmVhLgogICAgIC8vIGRlc3RSZWN0IHdpbGwgYmUgYWRqdXN0
ZWQgbGF0ZXIgaWYgdGhlIGJhY2tncm91bmQgaXMgbm9uLXJlcGVhdGluZy4KQEAgLTk5NSw3ICs5
OTcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAjZW5kaWYK
IAogICAgIGlmICghZml4ZWRBdHRhY2htZW50KSB7Ci0gICAgICAgIGdlb21ldHJ5LnNldERlc3RS
ZWN0KHBhaW50UmVjdCk7CisgICAgICAgIGdlb21ldHJ5LnNldERlc3RSZWN0KGFsaWduZWRSZWN0
KTsKIAogICAgICAgICBMYXlvdXRVbml0IHJpZ2h0ID0gMDsKICAgICAgICAgTGF5b3V0VW5pdCBi
b3R0b20gPSAwOwpAQCAtMTAxNywxNyArMTAxOSwxNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAgIC8vIGl0cyBtYXJnaW5zLiBTaW5jZSB0aG9zZSB3
ZXJlIGFkZGVkIGluIGFscmVhZHksIHdlIGhhdmUgdG8gZmFjdG9yIHRoZW0gb3V0IHdoZW4gY29t
cHV0aW5nCiAgICAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEuCiAgICAg
ICAgIGlmIChpc1Jvb3QoKSkgewotICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IExh
eW91dFNpemUodG9SZW5kZXJCb3godGhpcyktPndpZHRoKCkgLSBsZWZ0IC0gcmlnaHQsIHRvUmVu
ZGVyQm94KHRoaXMpLT5oZWlnaHQoKSAtIHRvcCAtIGJvdHRvbSk7CisgICAgICAgICAgICBwb3Np
dGlvbmluZ0FyZWFTaXplID0gZXhwYW5kZWRJbnRTaXplKExheW91dFNpemUodG9SZW5kZXJCb3go
dGhpcyktPndpZHRoKCkgLSBsZWZ0IC0gcmlnaHQsIHRvUmVuZGVyQm94KHRoaXMpLT5oZWlnaHQo
KSAtIHRvcCAtIGJvdHRvbSkpOwogICAgICAgICAgICAgbGVmdCArPSBtYXJnaW5MZWZ0KCk7CiAg
ICAgICAgICAgICB0b3AgKz0gbWFyZ2luVG9wKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IExheW91dFNpemUocGFpbnRSZWN0LndpZHRoKCkgLSBs
ZWZ0IC0gcmlnaHQsIHBhaW50UmVjdC5oZWlnaHQoKSAtIHRvcCAtIGJvdHRvbSk7CisgICAgICAg
ICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gZXhwYW5kZWRJbnRTaXplKExheW91dFNpemUocGFp
bnRSZWN0LndpZHRoKCkgLSBsZWZ0IC0gcmlnaHQsIHBhaW50UmVjdC5oZWlnaHQoKSAtIHRvcCAt
IGJvdHRvbSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdlb21ldHJ5LnNldERlc3RSZWN0KHZp
ZXdSZWN0KCkpOworICAgICAgICBnZW9tZXRyeS5zZXREZXN0UmVjdChlbmNsb3NpbmdJbnRSZWN0
KHZpZXdSZWN0KCkpKTsKICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IGdlb21ldHJ5LmRl
c3RSZWN0KCkuc2l6ZSgpOwogICAgIH0KIAotICAgIExheW91dFNpemUgZmlsbFRpbGVTaXplID0g
Y2FsY3VsYXRlRmlsbFRpbGVTaXplKGZpbGxMYXllciwgcG9zaXRpb25pbmdBcmVhU2l6ZSk7Cisg
ICAgSW50U2l6ZSBmaWxsVGlsZVNpemUgPSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoZmlsbExheWVy
LCBwb3NpdGlvbmluZ0FyZWFTaXplKTsKICAgICBmaWxsTGF5ZXItPmltYWdlKCktPnNldENvbnRh
aW5lclNpemVGb3JSZW5kZXJlcih0aGlzLCBmaWxsVGlsZVNpemUsIHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7CiAgICAgZ2VvbWV0cnkuc2V0VGlsZVNpemUoZmlsbFRpbGVTaXplKTsKIApAQCAt
MTAzNiwyMCArMTAzOCwyMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVC
YWNrCiAKICAgICBMYXlvdXRVbml0IHhQb3NpdGlvbiA9IGZpbGxMYXllci0+eFBvc2l0aW9uKCku
Y2FsY01pblZhbHVlKHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAtIGdlb21ldHJ5LnRpbGVT
aXplKCkud2lkdGgoKSwgdHJ1ZSk7CiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRYID09IFJlcGVh
dEZpbGwpCi0gICAgICAgIGdlb21ldHJ5LnNldFBoYXNlWChnZW9tZXRyeS50aWxlU2l6ZSgpLndp
ZHRoKCkgPyBsYXlvdXRNb2QoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpIC0gKHhQb3NpdGlv
biArIGxlZnQpLCBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCkpIDogMCk7CisgICAgICAgIGdl
b21ldHJ5LnNldFBoYXNlWChnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCkgPyBsYXlvdXRNb2Qo
Z2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpIC0gKHhQb3NpdGlvbiArIGxlZnQpLCBnZW9tZXRy
eS50aWxlU2l6ZSgpLndpZHRoKCkpIDogTGF5b3V0VW5pdCgwKSk7CiAgICAgZWxzZQogICAgICAg
ICBnZW9tZXRyeS5zZXROb1JlcGVhdFgoeFBvc2l0aW9uICsgbGVmdCk7CiAKICAgICBMYXlvdXRV
bml0IHlQb3NpdGlvbiA9IGZpbGxMYXllci0+eVBvc2l0aW9uKCkuY2FsY01pblZhbHVlKHBvc2l0
aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkgLSBnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpLCB0
cnVlKTsKICAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFkgPT0gUmVwZWF0RmlsbCkKLSAgICAgICAg
Z2VvbWV0cnkuc2V0UGhhc2VZKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgPyBsYXlvdXRN
b2QoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSAtICh5UG9zaXRpb24gKyB0b3ApLCBnZW9t
ZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpKSA6IDApOworICAgICAgICBnZW9tZXRyeS5zZXRQaGFz
ZVkoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSA/IGxheW91dE1vZChnZW9tZXRyeS50aWxl
U2l6ZSgpLmhlaWdodCgpIC0gKHlQb3NpdGlvbiArIHRvcCksIGdlb21ldHJ5LnRpbGVTaXplKCku
aGVpZ2h0KCkpIDogTGF5b3V0VW5pdCgwKSk7CiAgICAgZWxzZSAKICAgICAgICAgZ2VvbWV0cnku
c2V0Tm9SZXBlYXRZKHlQb3NpdGlvbiArIHRvcCk7CiAKICAgICBpZiAoZml4ZWRBdHRhY2htZW50
KQotICAgICAgICBnZW9tZXRyeS51c2VGaXhlZEF0dGFjaG1lbnQocGFpbnRSZWN0LmxvY2F0aW9u
KCkpOworICAgICAgICBnZW9tZXRyeS51c2VGaXhlZEF0dGFjaG1lbnQoYWxpZ25lZFJlY3QubG9j
YXRpb24oKSk7CiAKLSAgICBnZW9tZXRyeS5jbGlwKHBhaW50UmVjdCk7CisgICAgZ2VvbWV0cnku
Y2xpcChhbGlnbmVkUmVjdCk7CiAgICAgZ2VvbWV0cnkuc2V0RGVzdE9yaWdpbihnZW9tZXRyeS5k
ZXN0UmVjdCgpLmxvY2F0aW9uKCkpOwogfQogCkBAIC0xMDg5LDE5ICsxMDkxLDE5IEBAIGJvb2wg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICBMYXlvdXRVbml0IHJpZ2h0
V2l0aE91dHNldCA9IHJlY3QubWF4WCgpICsgcmlnaHRPdXRzZXQ7CiAgICAgTGF5b3V0UmVjdCBi
b3JkZXJJbWFnZVJlY3QgPSBMYXlvdXRSZWN0KGxlZnRXaXRoT3V0c2V0LCB0b3BXaXRoT3V0c2V0
LCByaWdodFdpdGhPdXRzZXQgLSBsZWZ0V2l0aE91dHNldCwgYm90dG9tV2l0aE91dHNldCAtIHRv
cFdpdGhPdXRzZXQpOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBjYWxjdWxhdGVJbWFn
ZUludHJpbnNpY0RpbWVuc2lvbnMoc3R5bGVJbWFnZSwgYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7
CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lv
bnMoc3R5bGVJbWFnZSwgZXhwYW5kZWRJbnRTaXplKGJvcmRlckltYWdlUmVjdC5zaXplKCkpKTsK
IAogICAgIC8vIElmIGJvdGggdmFsdWVzIGFyZSDigJhhdXRv4oCZIHRoZW4gdGhlIGludHJpbnNp
YyB3aWR0aCBhbmQvb3IgaGVpZ2h0IG9mIHRoZSBpbWFnZSBzaG91bGQgYmUgdXNlZCwgaWYgYW55
LgotICAgIExheW91dFNpemUgY29udGFpbmVyU2l6ZSA9IGltYWdlU2l6ZS5pc0VtcHR5KCkgPyBi
b3JkZXJJbWFnZVJlY3Quc2l6ZSgpIDogaW1hZ2VTaXplOworICAgIEludFNpemUgY29udGFpbmVy
U2l6ZSA9IGltYWdlU2l6ZS5pc0VtcHR5KCkgPyBleHBhbmRlZEludFNpemUoYm9yZGVySW1hZ2VS
ZWN0LnNpemUoKSkgOiBpbWFnZVNpemU7CiAgICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVyU2l6
ZUZvclJlbmRlcmVyKHRoaXMsIGNvbnRhaW5lclNpemUsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkp
OwogCi0gICAgTGF5b3V0VW5pdCBpbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7Ci0gICAg
TGF5b3V0VW5pdCBpbWFnZUhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgaW1h
Z2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOworICAgIGludCBpbWFnZUhlaWdodCA9IGltYWdl
U2l6ZS5oZWlnaHQoKTsKIAotICAgIExheW91dFVuaXQgdG9wU2xpY2UgPSBtaW48TGF5b3V0VW5p
dD4oaW1hZ2VIZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkuY2FsY1Zh
bHVlKGltYWdlSGVpZ2h0KSk7Ci0gICAgTGF5b3V0VW5pdCByaWdodFNsaWNlID0gbWluPExheW91
dFVuaXQ+KGltYWdlV2lkdGgsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS5j
YWxjVmFsdWUoaW1hZ2VXaWR0aCkpOwotICAgIExheW91dFVuaXQgYm90dG9tU2xpY2UgPSBtaW48
TGF5b3V0VW5pdD4oaW1hZ2VIZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkuYm90
dG9tKCkuY2FsY1ZhbHVlKGltYWdlSGVpZ2h0KSk7Ci0gICAgTGF5b3V0VW5pdCBsZWZ0U2xpY2Ug
PSBtaW48TGF5b3V0VW5pdD4oaW1hZ2VXaWR0aCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMo
KS5sZWZ0KCkuY2FsY1ZhbHVlKGltYWdlV2lkdGgpKTsKKyAgICBpbnQgdG9wU2xpY2UgPSBtaW48
aW50PihpbWFnZUhlaWdodCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS5jYWxj
VmFsdWUoaW1hZ2VIZWlnaHQpKTsKKyAgICBpbnQgcmlnaHRTbGljZSA9IG1pbjxpbnQ+KGltYWdl
V2lkdGgsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS5jYWxjVmFsdWUoaW1h
Z2VXaWR0aCkpOworICAgIGludCBib3R0b21TbGljZSA9IG1pbjxpbnQ+KGltYWdlSGVpZ2h0LCBu
aW5lUGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLmNhbGNWYWx1ZShpbWFnZUhlaWdo
dCkpOworICAgIGludCBsZWZ0U2xpY2UgPSBtaW48aW50PihpbWFnZVdpZHRoLCBuaW5lUGllY2VJ
bWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKS5jYWxjVmFsdWUoaW1hZ2VXaWR0aCkpOwogCiAgICAg
RU5pbmVQaWVjZUltYWdlUnVsZSBoUnVsZSA9IG5pbmVQaWVjZUltYWdlLmhvcml6b250YWxSdWxl
KCk7CiAgICAgRU5pbmVQaWVjZUltYWdlUnVsZSB2UnVsZSA9IG5pbmVQaWVjZUltYWdlLnZlcnRp
Y2FsUnVsZSgpOwpAQCAtMTExNSw4ICsxMTE3LDggQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnROaW5lUGllYwogICAgIC8vIFRoZSBzcGVjIHNheXM6IEdpdmVuIEx3aWR0aCBhcyB0
aGUgd2lkdGggb2YgdGhlIGJvcmRlciBpbWFnZSBhcmVhLCBMaGVpZ2h0IGFzIGl0cyBoZWlnaHQs
IGFuZCBXc2lkZSBhcyB0aGUgYm9yZGVyIGltYWdlIHdpZHRoCiAgICAgLy8gb2Zmc2V0IGZvciB0
aGUgc2lkZSwgbGV0IGYgPSBtaW4oTHdpZHRoLyhXbGVmdCtXcmlnaHQpLCBMaGVpZ2h0LyhXdG9w
K1dib3R0b20pKS4gSWYgZiA8IDEsIHRoZW4gYWxsIFcgYXJlIHJlZHVjZWQgYnkKICAgICAvLyBt
dWx0aXBseWluZyB0aGVtIGJ5IGYuCi0gICAgaW50IGJvcmRlclNpZGVXaWR0aCA9IG1heCgxLCBs
ZWZ0V2lkdGggKyByaWdodFdpZHRoKTsKLSAgICBpbnQgYm9yZGVyU2lkZUhlaWdodCA9IG1heCgx
LCB0b3BXaWR0aCArIGJvdHRvbVdpZHRoKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlclNpZGVXaWR0
aCA9IG1heDxMYXlvdXRVbml0PigxLCBsZWZ0V2lkdGggKyByaWdodFdpZHRoKTsKKyAgICBMYXlv
dXRVbml0IGJvcmRlclNpZGVIZWlnaHQgPSBtYXg8TGF5b3V0VW5pdD4oMSwgdG9wV2lkdGggKyBi
b3R0b21XaWR0aCk7CiAgICAgZmxvYXQgYm9yZGVyU2lkZVNjYWxlRmFjdG9yID0gbWluKChmbG9h
dClib3JkZXJJbWFnZVJlY3Qud2lkdGgoKSAvIGJvcmRlclNpZGVXaWR0aCwgKGZsb2F0KWJvcmRl
ckltYWdlUmVjdC5oZWlnaHQoKSAvIGJvcmRlclNpZGVIZWlnaHQpOwogICAgIGlmIChib3JkZXJT
aWRlU2NhbGVGYWN0b3IgPCAxKSB7CiAgICAgICAgIHRvcFdpZHRoICo9IGJvcmRlclNpZGVTY2Fs
ZUZhY3RvcjsKQEAgLTExNjMsOSArMTE2NSw5IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50TmluZVBpZWMKIAogICAgICAgICAvLyBQYWludCB0aGUgbGVmdCBlZGdlLgogICAgICAg
ICAvLyBIYXZlIHRvIHNjYWxlIGFuZCB0aWxlIGludG8gdGhlIGJvcmRlciByZWN0LgotICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNl
LCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0
b3BXaWR0aCwgbGVmdFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZElt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54KCks
IGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIHRvcFNsaWNlLCBs
ZWZ0U2xpY2UsIHNvdXJjZUhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCBzb3VyY2VIZWlnaHQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShsZWZ0U2lk
ZVNjYWxlLCBsZWZ0U2lkZVNjYWxlKSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVS
dWxlKXZSdWxlLCBvcCk7CiAgICAgfQogCkBAIC0xMTg0LDI0ICsxMTg2LDI0IEBAIGJvb2wgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdl
SGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3ApOwogCiAg
ICAgICAgIC8vIFBhaW50IHRoZSByaWdodCBlZGdlLgotICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRl
ckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9w
V2lkdGgsIHJpZ2h0V2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1h
Z2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgo
KSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkhl
aWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIHNvdXJjZUhl
aWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChp
bWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIHNvdXJjZUhlaWdo
dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHJp
Z2h0U2lkZVNjYWxlLCByaWdodFNpZGVTY2FsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxl
LCBvcCk7CiAgICAgfQogCiAgICAgLy8gUGFpbnQgdGhlIHRvcCBlZGdlLgogICAgIGlmIChkcmF3
VG9wKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgp
LCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgs
IGJvcmRlckltYWdlUmVjdC55KCksIGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdpZHRoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwg
MCwgc291cmNlV2lkdGgsIHRvcFNsaWNlKSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJl
Y3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCBkZXN0aW5hdGlvbldpZHRo
LCB0b3BXaWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdChsZWZ0U2xpY2UsIDAsIHNvdXJjZVdpZHRoLCB0b3BTbGljZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHRvcFNpZGVTY2FsZSwgdG9wU2lk
ZVNjYWxlKSwgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7
CiAKICAgICAvLyBQYWludCB0aGUgYm90dG9tIGVkZ2UuCiAgICAgaWYgKGRyYXdCb3R0b20pCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9y
U3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVy
SW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlcklt
YWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bldpZHRoLCBib3R0b21XaWR0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNv
dXJjZVdpZHRoLCBib3R0b21TbGljZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNv
dXJjZVdpZHRoLCBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXRTaXplKGJvdHRvbVNpZGVTY2FsZSwgYm90dG9tU2lkZVNjYWxlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1hZ2U6OlRpbGVSdWxlKWhS
dWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIApAQCAtMTIyOCw4ICsxMjMwLDggQEAgYm9v
bCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgICAgICAgICAgbWlkZGxl
U2NhbGVGYWN0b3Iuc2V0SGVpZ2h0KGRlc3RpbmF0aW9uSGVpZ2h0IC8gc291cmNlSGVpZ2h0KTsK
ICAgICAgICAgCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsCi0gICAgICAgICAgICBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVj
dC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgZGVzdGlu
YXRpb25XaWR0aCwgZGVzdGluYXRpb25IZWlnaHQpLAotICAgICAgICAgICAgTGF5b3V0UmVjdChs
ZWZ0U2xpY2UsIHRvcFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0KSwKKyAgICAgICAg
ICAgIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VS
ZWN0LnkoKSArIHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0aW5hdGlvbkhlaWdodCks
CisgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIHNvdXJjZVdpZHRoLCBz
b3VyY2VIZWlnaHQpLAogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0b3IsIChJbWFnZTo6VGls
ZVJ1bGUpaFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKICAgICB9CiAKQEAgLTE4
NzEsNyArMTg3Myw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnIK
IAogICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwogICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsK
LSAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KGJvcmRlclJlY3QpOworICAgIGdyYXBoaWNz
Q29udGV4dC0+ZHJhd1JlY3QoZW5jbG9zaW5nSW50UmVjdChib3JkZXJSZWN0KSk7CiB9CiAjZWxz
ZQogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsCkBA
IC0yMzQ2LDcgKzIzNDgsNyBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJ
bm5lCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGZhY3Qgd2Ugb25seSBnZXQg
cmFkaWkgbm90IGNvbnRhaW5lZCB3aXRoaW4gZWFjaCBlZGdlIGlmIG9uZSBvZiB0aGUgcmFkaWkK
ICAgICAvLyBmb3IgYW4gZWRnZSBpcyB6ZXJvLCBzbyB3ZSBjYW4gc2hpZnQgdGhlIGFyYyB0b3dh
cmRzIHRoZSB6ZXJvIHJhZGl1cyBjb3JuZXIuCiAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIG5ld1Jh
ZGlpID0gaW5uZXJCb3JkZXIucmFkaWkoKTsKLSAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBpbm5l
ckJvcmRlci5yZWN0KCk7CisgICAgSW50UmVjdCBuZXdSZWN0ID0gaW5uZXJCb3JkZXIucmVjdCgp
OwogCiAgICAgZmxvYXQgb3ZlcnNob290OwogICAgIGZsb2F0IG1heFJhZGlpOwpAQCAtMjM2MCw5
ICsyMzYyLDkgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZQogICAg
ICAgICAgICAgaWYgKCFuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSkKICAgICAgICAgICAgICAg
ICBuZXdSZWN0Lm1vdmUoLW92ZXJzaG9vdCwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgbmV3UmFk
aWkuc2V0Qm90dG9tTGVmdChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbmV3UmFkaWkuc2V0
Qm90dG9tUmlnaHQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAgIG1heFJhZGlpID0gbWF4PExh
eW91dFVuaXQ+KG5ld1JhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSwgbmV3UmFkaWkudG9wUmlnaHQo
KS5oZWlnaHQoKSk7CisgICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbUxlZnQoSW50U2l6ZSgwLCAw
KSk7CisgICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0KEludFNpemUoMCwgMCkpOworICAg
ICAgICBtYXhSYWRpaSA9IG1heChuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCksIG5ld1JhZGlp
LnRvcFJpZ2h0KCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobWF4UmFkaWkgPiBuZXdSZWN0Lmhl
aWdodCgpKQogICAgICAgICAgICAgbmV3UmVjdC5zZXRIZWlnaHQobWF4UmFkaWkpOwogICAgICAg
ICBicmVhazsKQEAgLTIzNzUsOSArMjM3Nyw5IEBAIHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxjdWxh
dGVBZGp1c3RlZElubmUKICAgICAgICAgICAgIGlmICghbmV3UmFkaWkuYm90dG9tTGVmdCgpLndp
ZHRoKCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKC1vdmVyc2hvb3QsIDApOwogICAg
ICAgICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldFRvcExlZnQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0g
ICAgICAgIG5ld1JhZGlpLnNldFRvcFJpZ2h0KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBt
YXhSYWRpaSA9IG1heDxMYXlvdXRVbml0PihuZXdSYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCks
IG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOworICAgICAgICBuZXdSYWRpaS5zZXRU
b3BMZWZ0KEludFNpemUoMCwgMCkpOworICAgICAgICBuZXdSYWRpaS5zZXRUb3BSaWdodChJbnRT
aXplKDAsIDApKTsKKyAgICAgICAgbWF4UmFkaWkgPSBtYXgobmV3UmFkaWkuYm90dG9tTGVmdCgp
LmhlaWdodCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsKICAgICAgICAgaWYg
KG1heFJhZGlpID4gbmV3UmVjdC5oZWlnaHQoKSkgewogICAgICAgICAgICAgbmV3UmVjdC5tb3Zl
KDAsIG5ld1JlY3QuaGVpZ2h0KCkgLSBtYXhSYWRpaSk7CiAgICAgICAgICAgICBuZXdSZWN0LnNl
dEhlaWdodChtYXhSYWRpaSk7CkBAIC0yMzkyLDkgKzIzOTQsOSBAQCBzdGF0aWMgUm91bmRlZFJl
Y3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lCiAgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLnRvcExl
ZnQoKS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBuZXdSZWN0Lm1vdmUoMCwgLW92ZXJzaG9v
dCk7CiAgICAgICAgIH0KLSAgICAgICAgbmV3UmFkaWkuc2V0VG9wUmlnaHQoTGF5b3V0U2l6ZSgw
LCAwKSk7Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0KExheW91dFNpemUoMCwgMCkp
OwotICAgICAgICBtYXhSYWRpaSA9IG1heDxMYXlvdXRVbml0PihuZXdSYWRpaS50b3BMZWZ0KCku
d2lkdGgoKSwgbmV3UmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkpOworICAgICAgICBuZXdSYWRp
aS5zZXRUb3BSaWdodChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0Qm90dG9t
UmlnaHQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG1heFJhZGlpID0gbWF4KG5ld1JhZGlpLnRv
cExlZnQoKS53aWR0aCgpLCBuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSk7CiAgICAgICAg
IGlmIChtYXhSYWRpaSA+IG5ld1JlY3Qud2lkdGgoKSkKICAgICAgICAgICAgIG5ld1JlY3Quc2V0
V2lkdGgobWF4UmFkaWkpOwogICAgICAgICBicmVhazsKQEAgLTI0MDcsOSArMjQwOSw5IEBAIHN0
YXRpYyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmUKICAgICAgICAgICAgIGlmICgh
bmV3UmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBuZXdSZWN0Lm1v
dmUoMCwgLW92ZXJzaG9vdCk7CiAgICAgICAgIH0KLSAgICAgICAgbmV3UmFkaWkuc2V0VG9wTGVm
dChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbmV3UmFkaWkuc2V0Qm90dG9tTGVmdChMYXlv
dXRTaXplKDAsIDApKTsKLSAgICAgICAgbWF4UmFkaWkgPSBtYXg8TGF5b3V0VW5pdD4obmV3UmFk
aWkudG9wUmlnaHQoKS53aWR0aCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwor
ICAgICAgICBuZXdSYWRpaS5zZXRUb3BMZWZ0KEludFNpemUoMCwgMCkpOworICAgICAgICBuZXdS
YWRpaS5zZXRCb3R0b21MZWZ0KEludFNpemUoMCwgMCkpOworICAgICAgICBtYXhSYWRpaSA9IG1h
eChuZXdSYWRpaS50b3BSaWdodCgpLndpZHRoKCksIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkud2lk
dGgoKSk7CiAgICAgICAgIGlmIChtYXhSYWRpaSA+IG5ld1JlY3Qud2lkdGgoKSkgewogICAgICAg
ICAgICAgbmV3UmVjdC5tb3ZlKG5ld1JlY3Qud2lkdGgoKSAtIG1heFJhZGlpLCAwKTsKICAgICAg
ICAgICAgIG5ld1JlY3Quc2V0V2lkdGgobWF4UmFkaWkpOwpAQCAtMjU1Miw3ICsyNTU0LDcgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgLy8g
YmxlZWQgaW4gKGR1ZSB0byBhbnRpYWxpYXNpbmcpIGlmIHRoZSBjb250ZXh0IGlzIHRyYW5zZm9y
bWVkLgogICAgICAgICAgICAgTGF5b3V0U2l6ZSBleHRyYU9mZnNldChwYWludFJlY3Qud2lkdGgo
KSArIG1heDxMYXlvdXRVbml0PigwLCBzaGFkb3dPZmZzZXQud2lkdGgoKSkgKyBzaGFkb3dCbHVy
ICsgMiAqIHNoYWRvd1NwcmVhZCArIDEsIDApOwogICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09
IGV4dHJhT2Zmc2V0OwotICAgICAgICAgICAgZmlsbFJlY3QubW92ZShleHRyYU9mZnNldCk7Cisg
ICAgICAgICAgICBmaWxsUmVjdC5tb3ZlKHJvdW5kZWRJbnRTaXplKGV4dHJhT2Zmc2V0KSk7CiAK
ICAgICAgICAgICAgIGlmIChzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IsIHMtPmNvbG9yU3BhY2UoKSk7CkBAIC0yNTcyLDcgKzI1NzQsNyBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICAgICAgaWYg
KCFyZWN0VG9DbGlwT3V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
Y2xpcE91dFJvdW5kZWRSZWN0KHJlY3RUb0NsaXBPdXQpOwogCi0gICAgICAgICAgICAgICAgUm91
bmRlZFJlY3QgaW5mbHVlbmNlUmVjdChzaGFkb3dSZWN0LCBib3JkZXIucmFkaWkoKSk7CisgICAg
ICAgICAgICAgICAgUm91bmRlZFJlY3QgaW5mbHVlbmNlUmVjdChlbmNsb3NpbmdJbnRSZWN0KHNo
YWRvd1JlY3QpLCBib3JkZXIucmFkaWkoKSk7CiAgICAgICAgICAgICAgICAgaW5mbHVlbmNlUmVj
dC5leHBhbmRSYWRpaSgyICogc2hhZG93Qmx1ciArIHNoYWRvd1NwcmVhZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGFsbENvcm5lcnNDbGlwcGVkT3V0KGluZmx1ZW5jZVJlY3QsIGluZm8ucmVjdCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0LnJlY3QoKSwg
Q29sb3I6OmJsYWNrLCBzLT5jb2xvclNwYWNlKCkpOwpAQCAtMjU5NSw3ICsyNTk3LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIGlmICghcmVjdFRvQ2xpcE91dC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmNsaXBPdXQocmVjdFRvQ2xpcE91dCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmNsaXBPdXQoZW5jbG9zaW5nSW50UmVjdChyZWN0VG9DbGlwT3V0
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoZmlsbFJlY3QucmVjdCgpLCBD
b2xvcjo6YmxhY2ssIHMtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSB7CkBAIC0yNjMwLDcgKzI2MzIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJveFNoYWRvCiAgICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVk
KCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgMjU1KTsKIAogICAg
ICAgICAgICAgTGF5b3V0UmVjdCBvdXRlclJlY3QgPSBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShi
b3JkZXIucmVjdCgpLCBzaGFkb3dCbHVyLCBzaGFkb3dTcHJlYWQsIHNoYWRvd09mZnNldCk7Ci0g
ICAgICAgICAgICBSb3VuZGVkUmVjdCByb3VuZGVkSG9sZShob2xlUmVjdCwgYm9yZGVyLnJhZGlp
KCkpOworICAgICAgICAgICAgUm91bmRlZFJlY3Qgcm91bmRlZEhvbGUoZW5jbG9zaW5nSW50UmVj
dChob2xlUmVjdCksIGJvcmRlci5yYWRpaSgpKTsKIAogICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChoYXNC
b3JkZXJSYWRpdXMpIHsKQEAgLTI2NTAsNyArMjY1Miw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwg
cy0+Y29sb3JTcGFjZSgpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUob3V0ZXJSZWN0LCByb3VuZGVkSG9sZSwgZmlsbENvbG9yLCBzLT5jb2xvclNwYWNl
KCkpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoZW5jbG9z
aW5nSW50UmVjdChvdXRlclJlY3QpLCByb3VuZGVkSG9sZSwgZmlsbENvbG9yLCBzLT5jb2xvclNw
YWNlKCkpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDk4OTA0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNywyOSArMTM3LDI5IEBAIHByb3RlY3RlZDoKIAogICAgIGNsYXNzIEJhY2tncm91
bmRJbWFnZUdlb21ldHJ5IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExheW91dFBvaW50IGRlc3RP
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RPcmlnaW47IH0KLSAgICAgICAgdm9pZCBzZXRE
ZXN0T3JpZ2luKGNvbnN0IExheW91dFBvaW50JiBkZXN0T3JpZ2luKQorICAgICAgICBJbnRQb2lu
dCBkZXN0T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0T3JpZ2luOyB9CisgICAgICAgIHZv
aWQgc2V0RGVzdE9yaWdpbihjb25zdCBJbnRQb2ludCYgZGVzdE9yaWdpbikKICAgICAgICAgewog
ICAgICAgICAgICAgbV9kZXN0T3JpZ2luID0gZGVzdE9yaWdpbjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFJl
Y3Q7IH0KLSAgICAgICAgdm9pZCBzZXREZXN0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBkZXN0UmVj
dCkKKyAgICAgICAgSW50UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFJlY3Q7
IH0KKyAgICAgICAgdm9pZCBzZXREZXN0UmVjdChjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKICAg
ICAgICAgewogICAgICAgICAgICAgbV9kZXN0UmVjdCA9IGRlc3RSZWN0OwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgcGhhc2UgcmVsYXRpdmUgdG8gdGhlIGRlc3RpbmF0aW9u
IHJlY3RhbmdsZS4KLSAgICAgICAgTGF5b3V0UG9pbnQgcmVsYXRpdmVQaGFzZSgpIGNvbnN0Owor
ICAgICAgICBJbnRQb2ludCByZWxhdGl2ZVBoYXNlKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAg
ICBMYXlvdXRQb2ludCBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0gICAKLSAgICAg
ICAgdm9pZCBzZXRQaGFzZShjb25zdCBMYXlvdXRQb2ludCYgcGhhc2UpCisgICAgICAgIEludFBv
aW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfSAgIAorICAgICAgICB2b2lkIHNl
dFBoYXNlKGNvbnN0IEludFBvaW50JiBwaGFzZSkKICAgICAgICAgewogICAgICAgICAgICAgbV9w
aGFzZSA9IHBoYXNlOwogICAgICAgICB9CiAKLSAgICAgICAgTGF5b3V0U2l6ZSB0aWxlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0gICAgCi0gICAgICAgIHZvaWQgc2V0VGlsZVNp
emUoY29uc3QgTGF5b3V0U2l6ZSYgdGlsZVNpemUpCisgICAgICAgIEludFNpemUgdGlsZVNpemUo
KSBjb25zdCB7IHJldHVybiBtX3RpbGVTaXplOyB9ICAgIAorICAgICAgICB2b2lkIHNldFRpbGVT
aXplKGNvbnN0IEludFNpemUmIHRpbGVTaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3Rp
bGVTaXplID0gdGlsZVNpemU7CiAgICAgICAgIH0KQEAgLTE3MCwxNCArMTcwLDE0IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgdm9pZCBzZXROb1JlcGVhdFgoaW50IHhPZmZzZXQpOwogICAgICAgICB2
b2lkIHNldE5vUmVwZWF0WShpbnQgeU9mZnNldCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIHVz
ZUZpeGVkQXR0YWNobWVudChjb25zdCBMYXlvdXRQb2ludCYgYXR0YWNobWVudFBvaW50KTsKKyAg
ICAgICAgdm9pZCB1c2VGaXhlZEF0dGFjaG1lbnQoY29uc3QgSW50UG9pbnQmIGF0dGFjaG1lbnRQ
b2ludCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIGNsaXAoY29uc3QgTGF5b3V0UmVjdCYpOwor
ICAgICAgICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwogICAgIHByaXZhdGU6Ci0gICAgICAg
IExheW91dFJlY3QgbV9kZXN0UmVjdDsKLSAgICAgICAgTGF5b3V0UG9pbnQgbV9kZXN0T3JpZ2lu
OwotICAgICAgICBMYXlvdXRQb2ludCBtX3BoYXNlOwotICAgICAgICBMYXlvdXRTaXplIG1fdGls
ZVNpemU7CisgICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKKyAgICAgICAgSW50UG9pbnQgbV9k
ZXN0T3JpZ2luOworICAgICAgICBJbnRQb2ludCBtX3BoYXNlOworICAgICAgICBJbnRTaXplIG1f
dGlsZVNpemU7CiAgICAgfTsKIAogICAgIHZvaWQgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2Vv
bWV0cnkoY29uc3QgRmlsbExheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBCYWNr
Z3JvdW5kSW1hZ2VHZW9tZXRyeSYpOwpAQCAtMTk1LDggKzE5NSw4IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQm94TW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBMYXlvdXRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBG
aWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRTaXplJiBzY2FsZWRQb3NpdGlvbmluZ0FyZWFTaXplKSBj
b25zdDsKLSAgICBMYXlvdXRTaXplIGNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhT
dHlsZUltYWdlKiwgY29uc3QgTGF5b3V0U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkg
Y29uc3Q7CisgICAgSW50U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVy
KiwgY29uc3QgSW50U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3Q7CisgICAg
SW50U2l6ZSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5bGVJbWFnZSosIGNv
bnN0IEludFNpemUmIHNjYWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0OwogCiAgICAgUm91
bmRlZFJlY3QgZ2V0QmFja2dyb3VuZFJvdW5kZWRSZWN0KGNvbnN0IExheW91dFJlY3QmLCBJbmxp
bmVGbG93Qm94KiwgTGF5b3V0VW5pdCBpbmxpbmVCb3hXaWR0aCwgTGF5b3V0VW5pdCBpbmxpbmVC
b3hIZWlnaHQsCiAgICAgICAgIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113197</attachid>
            <date>2011-11-01 11:04:43 -0700</date>
            <delta_ts>2011-11-01 16:10:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71240-20111101110442.patch</filename>
            <type>text/plain</type>
            <size>26792</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTEtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBiYWNrZ3JvdW5kL2Jv
cmRlciBpbWFnZSBiYWNrIHRvIEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTd2l0Y2ggYmFja2dyb3VuZC0gYW5kIGJvcmRlci1pbWFnZSByZW5kZXJp
bmcgYmFjayB0byBpbnQgdG8gYWxpZ24gd2l0aAorICAgICAgICBkZXZpY2UgcGl4ZWxzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zm
c2V0TGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxM
YXllckV4dGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZp
eGVkQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpyZWxhdGl2ZVBoYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVBZGp1
c3RlZElubmVyQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5k
SW1hZ2VHZW9tZXRyeTo6ZGVzdE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNldERlc3RPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21l
dHJ5OjpkZXN0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNldERlc3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6cGhhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdl
b21ldHJ5OjpzZXRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6c2V0VGlsZVNp
emUpOgorCiAyMDExLTExLTAxICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBTb21lIG1lZGlhL3ZpZGVvLSouaHRtbCBsYXlvdXQgdGVz
dHMgb2NjYXNpb25hbGx5IGNyYXNoIG9uIFdJTiBHUFUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gOTg5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzgsOCArNDM4LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6b2Zmc2V0TAogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAgTGF5b3V0VW5pdCB4
UG9zID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+bGVmdCgpIDogMCk7Ci0gICAgCisg
ICAgTGF5b3V0VW5pdCB4UG9zID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+bGVmdCgp
IDogTGF5b3V0VW5pdCgwKSk7CisKICAgICAvLyBJZiB0aGUgb2Zmc2V0UGFyZW50IG9mIHRoZSBl
bGVtZW50IGlzIG51bGwsIG9yIGlzIHRoZSBIVE1MIGJvZHkgZWxlbWVudCwKICAgICAvLyByZXR1
cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNhbnZhcyBvcmlnaW4gYW5kIHRoZSBsZWZ0IGJv
cmRlciBlZGdlIAogICAgIC8vIG9mIHRoZSBlbGVtZW50IGFuZCBzdG9wIHRoaXMgYWxnb3JpdGht
LgpAQCAtNDcyLDcgKzQ3Miw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om9m
ZnNldFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwotICAgIExheW91dFVuaXQgeVBvcyA9IChpc0Jv
eCgpID8gdG9SZW5kZXJCb3godGhpcyktPnRvcCgpIDogMCk7CisgICAgTGF5b3V0VW5pdCB5UG9z
ID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+dG9wKCkgOiBMYXlvdXRVbml0KDApKTsK
ICAgICAKICAgICAvLyBJZiB0aGUgb2Zmc2V0UGFyZW50IG9mIHRoZSBlbGVtZW50IGlzIG51bGws
IG9yIGlzIHRoZSBIVE1MIGJvZHkgZWxlbWVudCwKICAgICAvLyByZXR1cm4gdGhlIGRpc3RhbmNl
IGJldHdlZW4gdGhlIGNhbnZhcyBvcmlnaW4gYW5kIHRoZSB0b3AgYm9yZGVyIGVkZ2UgCkBAIC02
NTEsMTAgKzY1MSwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXll
CiAgICAgICAgIGNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwogICAgIH0KICAg
ICAKLSAgICBMYXlvdXRVbml0IGJMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gYm9yZGVyTGVmdCgp
IDogMDsKLSAgICBMYXlvdXRVbml0IGJSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJS
aWdodCgpIDogMDsKLSAgICBMYXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFk
ZGluZ0xlZnQoKSA6IDA7Ci0gICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdl
ID8gcGFkZGluZ1JpZ2h0KCkgOiAwOworICAgIExheW91dFVuaXQgYkxlZnQgPSBpbmNsdWRlTGVm
dEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiBMYXlvdXRVbml0KDApOworICAgIExheW91dFVuaXQgYlJp
Z2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJvcmRlclJpZ2h0KCkgOiBMYXlvdXRVbml0KDApOwor
ICAgIExheW91dFVuaXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgpIDog
TGF5b3V0VW5pdCgwKTsKKyAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2Ug
PyBwYWRkaW5nUmlnaHQoKSA6IExheW91dFVuaXQoMCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIGNsaXBXaXRoU2Nyb2xsaW5nU3RhdGVTYXZlcigqY29udGV4dCwgY2xpcHBlZFdp
dGhMb2NhbFNjcm9sbGluZyk7CiAgICAgTGF5b3V0UmVjdCBzY3JvbGxlZFBhaW50UmVjdCA9IHJl
Y3Q7CkBAIC02NzMsMTcgKzY3MywxNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEZpbGxMYXllCiAgICAgaWYgKGJnTGF5ZXItPmNsaXAoKSA9PSBQYWRkaW5nRmlsbEJveCB8fCBi
Z0xheWVyLT5jbGlwKCkgPT0gQ29udGVudEZpbGxCb3gpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0
aGUgcGFkZGluZyBvciBjb250ZW50IGJveGVzIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgYm9vbCBp
bmNsdWRlUGFkZGluZyA9IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50RmlsbEJveDsKLSAgICAg
ICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgp
ICsgYkxlZnQgKyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IDApLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBib3JkZXJUb3AoKSAr
IChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IDApLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC53aWR0aCgpIC0gYkxlZnQgLSBiUmln
aHQgLSAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCArIHBSaWdodCA6IDApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkg
KyBwYWRkaW5nQm90dG9tKCkgOiAwKSk7CisgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBM
YXlvdXRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0LngoKSArIGJMZWZ0ICsgKGluY2x1ZGVQYWRkaW5n
ID8gcExlZnQgOiBMYXlvdXRVbml0KDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsZWRQYWludFJlY3QueSgpICsgYm9yZGVyVG9wKCkgKyAoaW5jbHVkZVBhZGRp
bmcgPyBwYWRkaW5nVG9wKCkgOiBMYXlvdXRVbml0KDApKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0
IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRVbml0KDApKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0
KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFk
ZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpIDogTGF5b3V0VW5pdCgwKSkpOwogICAgICAgICBi
YWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIuc2F2ZSgpOwogICAgICAgICBjb250ZXh0LT5jbGlwKGNs
aXBSZWN0KTsKICAgICB9IGVsc2UgaWYgKGJnTGF5ZXItPmNsaXAoKSA9PSBUZXh0RmlsbEJveCkg
ewogICAgICAgICAvLyBXZSBoYXZlIHRvIGRyYXcgb3VyIHRleHQgaW50byBhIG1hc2sgdGhhdCBj
YW4gdGhlbiBiZSB1c2VkIHRvIGNsaXAgYmFja2dyb3VuZCBkcmF3aW5nLgogICAgICAgICAvLyBG
aXJzdCBmaWd1cmUgb3V0IGhvdyBiaWcgdGhlIG1hc2sgaGFzIHRvIGJlLiAgSXQgc2hvdWxkIGJl
IG5vIGJpZ2dlciB0aGFuIHdoYXQgd2UgbmVlZAogICAgICAgICAvLyB0byBhY3R1YWxseSByZW5k
ZXIsIHNvIHdlIHNob3VsZCBpbnRlcnNlY3QgdGhlIGRpcnR5IHJlY3Qgd2l0aCB0aGUgYm9yZGVy
IGJveCBvZiB0aGUgYmFja2dyb3VuZC4KLSAgICAgICAgTGF5b3V0UmVjdCBtYXNrUmVjdCA9IHJl
Y3Q7CisgICAgICAgIEludFJlY3QgbWFza1JlY3QgPSByZWN0OwogICAgICAgICBtYXNrUmVjdC5p
bnRlcnNlY3QocGFpbnRJbmZvLnJlY3QpOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGNyZWF0
ZSB0aGUgbWFzay4KQEAgLTgzMywxMCArODMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0U2l6
ZSByZXNvbHZlQWdhaW5zdEkKICAgICByZXR1cm4gTGF5b3V0U2l6ZShzaXplLndpZHRoKCksIHNv
bHV0aW9uSGVpZ2h0KTsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2Fs
Y3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1hZ2UqIGltYWdlLCBjb25zdCBM
YXlvdXRTaXplJiBwb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdAorSW50U2l6ZSBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1hZ2Uq
IGltYWdlLCBjb25zdCBJbnRTaXplJiBwb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdAogewotICAg
IExheW91dFVuaXQgcmVzb2x2ZWRXaWR0aCA9IDA7Ci0gICAgTGF5b3V0VW5pdCByZXNvbHZlZEhl
aWdodCA9IDA7CisgICAgaW50IHJlc29sdmVkV2lkdGggPSAwOworICAgIGludCByZXNvbHZlZEhl
aWdodCA9IDA7CiAgICAgRmxvYXRTaXplIGludHJpbnNpY1JhdGlvOwogCiAgICAgLy8gQSBnZW5l
cmF0ZWQgaW1hZ2Ugd2l0aG91dCBhIGZpeGVkIHNpemUsIHdpbGwgYWx3YXlzIHJldHVybiB0aGUg
Y29udGFpbmVyIHNpemUgYXMgaW50cmluc2ljIHNpemUuCkBAIC04NTAsMTYgKzg1MCwxNiBAQCBM
YXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhCiAKICAgICAgICAgLy8gRklY
TUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czog
d2Via2l0Lm9yZy9iLzYzNjU2CiAgICAgICAgIGlmIChpbnRyaW5zaWNXaWR0aC5pc0ZpeGVkKCkp
Ci0gICAgICAgICAgICByZXNvbHZlZFdpZHRoID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2Vp
bGYoaW50cmluc2ljV2lkdGgudmFsdWUoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwor
ICAgICAgICAgICAgcmVzb2x2ZWRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoaW50cmlu
c2ljV2lkdGgudmFsdWUoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgICAgICBp
ZiAoaW50cmluc2ljSGVpZ2h0LmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHJlc29sdmVkSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGYoaW50cmluc2ljSGVpZ2h0LnZhbHVlKCkg
KiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHJlc29sdmVkSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihpbnRyaW5zaWNIZWlnaHQudmFsdWUoKSAqIHN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIC8vIEludHJpbnNpYyBkaW1lbnNp
b25zIGV4cHJlc3NlZCBhcyBwZXJjZW50YWdlcyBtdXN0IGJlIHJlc29sdmVkIHJlbGF0aXZlIHRv
IHRoZSBkaW1lbnNpb25zIG9mIHRoZSByZWN0YW5nbGUKICAgICAvLyB0aGF0IGVzdGFibGlzaGVz
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyBwcm9w
ZXJ0eS4gU1ZHIG9uIHRoZSBvdGhlciBoYW5kCiAgICAgLy8gX2V4cGxpY2l0ZWx5XyBzYXlzIHRo
YXQgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIHRoZSB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyBkbyBO
T1QgZGVmaW5lIGludHJpbnNpYyBkaW1lbnNpb25zLgogICAgIGlmIChyZXNvbHZlZFdpZHRoID4g
MCAmJiByZXNvbHZlZEhlaWdodCA+IDApCi0gICAgICAgIHJldHVybiBMYXlvdXRTaXplKHJlc29s
dmVkV2lkdGgsIHJlc29sdmVkSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzb2x2
ZWRXaWR0aCwgcmVzb2x2ZWRIZWlnaHQpOwogCiAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBvbmUg
b2YgZWl0aGVyIGFuIGludHJpbnNpYyB3aWR0aCBvciBhbiBpbnRyaW5zaWMgaGVpZ2h0OgogICAg
IC8vICogYW5kIGFuIGludHJpbnNpYyBhc3BlY3QgcmF0aW8sIHRoZW4gdGhlIG1pc3NpbmcgZGlt
ZW5zaW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZ2l2ZW4gZGltZW5zaW9uIGFuZCB0aGUgcmF0
aW8uCkBAIC04NzksMTcgKzg3OSwxNyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpjYWxjdWxhCiAgICAgcmV0dXJuIHBvc2l0aW9uaW5nQXJlYVNpemU7CiB9CiAKLUxheW91dFNp
emUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxs
TGF5ZXIqIGZpbGxMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkg
Y29uc3QKK0ludFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6
ZShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciwgY29uc3QgSW50U2l6ZSYgcG9zaXRpb25pbmdB
cmVhU2l6ZSkgY29uc3QKIHsKICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IGZpbGxMYXllci0+aW1h
Z2UoKTsKICAgICBFRmlsbFNpemVUeXBlIHR5cGUgPSBmaWxsTGF5ZXItPnNpemUoKS50eXBlOwog
Ci0gICAgTGF5b3V0U2l6ZSBpbWFnZUludHJpbnNpY1NpemUgPSBjYWxjdWxhdGVJbWFnZUludHJp
bnNpY0RpbWVuc2lvbnMoaW1hZ2UsIHBvc2l0aW9uaW5nQXJlYVNpemUpOworICAgIEludFNpemUg
aW1hZ2VJbnRyaW5zaWNTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKGlt
YWdlLCBwb3NpdGlvbmluZ0FyZWFTaXplKTsKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIFNpemVMZW5ndGg6IHsKLSAgICAgICAgICAgIExheW91dFVuaXQgdyA9IHBvc2l0aW9u
aW5nQXJlYVNpemUud2lkdGgoKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgaCA9IHBvc2l0aW9u
aW5nQXJlYVNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgdyA9IHBvc2l0aW9uaW5nQXJl
YVNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBoID0gcG9zaXRpb25pbmdBcmVhU2l6ZS5o
ZWlnaHQoKTsKIAogICAgICAgICAgICAgTGVuZ3RoIGxheWVyV2lkdGggPSBmaWxsTGF5ZXItPnNp
emUoKS5zaXplLndpZHRoKCk7CiAgICAgICAgICAgICBMZW5ndGggbGF5ZXJIZWlnaHQgPSBmaWxs
TGF5ZXItPnNpemUoKS5zaXplLmhlaWdodCgpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIExheW91dFNp
emUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGEKICAgICAgICAgICAgICAgICBoID0gaW1h
Z2VJbnRyaW5zaWNTaXplLmhlaWdodCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtYXg8TGF5b3V0VW5pdD4oMSwgdyksIG1heDxM
YXlvdXRVbml0PigxLCBoKSk7CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShtYXgoMSwgdyks
IG1heCgxLCBoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTaXplTm9uZTogewogICAgICAg
ICAgICAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIOKAmGF1dG/igJkgdGhlbiB0aGUgaW50cmluc2lj
IHdpZHRoIGFuZC9vciBoZWlnaHQgb2YgdGhlIGltYWdlIHNob3VsZCBiZSB1c2VkLCBpZiBhbnku
CkBAIC05MzUsMTIgKzkzNSwxMiBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhCiAgICAgICAgICAgICBmbG9hdCB2ZXJ0aWNhbFNjYWxlRmFjdG9yID0gaW1hZ2VJbnRy
aW5zaWNTaXplLmhlaWdodCgpCiAgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4o
cG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSkgLyBpbWFnZUludHJpbnNpY1NpemUuaGVpZ2h0
KCkgOiAxOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSB0eXBlID09IENvbnRhaW4g
PyBtaW4oaG9yaXpvbnRhbFNjYWxlRmFjdG9yLCB2ZXJ0aWNhbFNjYWxlRmFjdG9yKSA6IG1heCho
b3Jpem9udGFsU2NhbGVGYWN0b3IsIHZlcnRpY2FsU2NhbGVGYWN0b3IpOwotICAgICAgICAgICAg
cmV0dXJuIExheW91dFNpemUobWF4PExheW91dFVuaXQ+KDEsIGltYWdlSW50cmluc2ljU2l6ZS53
aWR0aCgpICogc2NhbGVGYWN0b3IpLCBtYXg8TGF5b3V0VW5pdD4oMSwgaW1hZ2VJbnRyaW5zaWNT
aXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRTaXpl
KG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlSW50cmluc2ljU2l6ZS53aWR0aCgpICogc2Nh
bGVGYWN0b3IpKSwgbWF4KDEsIHN0YXRpY19jYXN0PGludD4oaW1hZ2VJbnRyaW5zaWNTaXplLmhl
aWdodCgpICogc2NhbGVGYWN0b3IpKSk7CiAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBMYXlvdXRTaXplKCk7CisgICAgcmV0dXJuIEludFNp
emUoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2Vv
bWV0cnk6OnNldE5vUmVwZWF0WChpbnQgeE9mZnNldCkKQEAgLTk1NiwxOSArOTU2LDIwIEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWEKICAgICBtX2Rlc3RSZWN0LnNl
dEhlaWdodChtX3RpbGVTaXplLmhlaWdodCgpICsgbWluKHlPZmZzZXQsIDApKTsKIH0KIAotdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZpeGVk
QXR0YWNobWVudChjb25zdCBMYXlvdXRQb2ludCYgYXR0YWNobWVudFBvaW50KQordm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnVzZUZpeGVkQXR0YWNo
bWVudChjb25zdCBJbnRQb2ludCYgYXR0YWNobWVudFBvaW50KQogewotICAgIG1fcGhhc2UubW92
ZShtYXg8TGF5b3V0VW5pdD4oYXR0YWNobWVudFBvaW50LngoKSAtIG1fZGVzdFJlY3QueCgpLCAw
KSwgbWF4PExheW91dFVuaXQ+KGF0dGFjaG1lbnRQb2ludC55KCkgLSBtX2Rlc3RSZWN0LnkoKSwg
MCkpOworICAgIEludFBvaW50IGFsaWduZWRQb2ludCA9IGF0dGFjaG1lbnRQb2ludDsKKyAgICBt
X3BoYXNlLm1vdmUobWF4KGFsaWduZWRQb2ludC54KCkgLSBtX2Rlc3RSZWN0LngoKSwgMCksIG1h
eChhbGlnbmVkUG9pbnQueSgpIC0gbV9kZXN0UmVjdC55KCksIDApKTsKIH0KIAotdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXAoY29uc3QgTGF5
b3V0UmVjdCYgY2xpcFJlY3QpCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5k
SW1hZ2VHZW9tZXRyeTo6Y2xpcChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX2Rl
c3RSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6cmVsYXRpdmVQaGFzZSgpIGNvbnN0
CitJbnRQb2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6
OnJlbGF0aXZlUGhhc2UoKSBjb25zdAogewotICAgIExheW91dFBvaW50IHBoYXNlID0gbV9waGFz
ZTsKKyAgICBJbnRQb2ludCBwaGFzZSA9IG1fcGhhc2U7CiAgICAgcGhhc2UgKz0gbV9kZXN0UmVj
dC5sb2NhdGlvbigpIC0gbV9kZXN0T3JpZ2luOwogICAgIHJldHVybiBwaGFzZTsKIH0KQEAgLTk3
OCw3ICs5NzksNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiB7
CiAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gMDsKICAgICBMYXlvdXRVbml0IHRvcCA9IDA7Ci0gICAg
TGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFTaXplOworICAgIEludFNpemUgcG9zaXRpb25pbmdB
cmVhU2l6ZTsKIAogICAgIC8vIERldGVybWluZSB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBh
cmVhIGFuZCBzZXQgZGVzdFJlY3QgdG8gdGhlIGJhY2tncm91bmQgcGFpbnRpbmcgYXJlYS4KICAg
ICAvLyBkZXN0UmVjdCB3aWxsIGJlIGFkanVzdGVkIGxhdGVyIGlmIHRoZSBiYWNrZ3JvdW5kIGlz
IG5vbi1yZXBlYXRpbmcuCkBAIC0xMDI3LDcgKzEwMjgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBnZW9t
ZXRyeS5kZXN0UmVjdCgpLnNpemUoKTsKICAgICB9CiAKLSAgICBMYXlvdXRTaXplIGZpbGxUaWxl
U2l6ZSA9IGNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShmaWxsTGF5ZXIsIHBvc2l0aW9uaW5nQXJlYVNp
emUpOworICAgIEludFNpemUgZmlsbFRpbGVTaXplID0gY2FsY3VsYXRlRmlsbFRpbGVTaXplKGZp
bGxMYXllciwgcG9zaXRpb25pbmdBcmVhU2l6ZSk7CiAgICAgZmlsbExheWVyLT5pbWFnZSgpLT5z
ZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIodGhpcywgZmlsbFRpbGVTaXplLCBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogICAgIGdlb21ldHJ5LnNldFRpbGVTaXplKGZpbGxUaWxlU2l6ZSk7
CiAKQEAgLTEwMzYsMTMgKzEwMzcsMTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2Fs
Y3VsYXRlQmFjawogCiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb24gPSBmaWxsTGF5ZXItPnhQb3Np
dGlvbigpLmNhbGNNaW5WYWx1ZShwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCkgLSBnZW9tZXRy
eS50aWxlU2l6ZSgpLndpZHRoKCksIHRydWUpOwogICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0WCA9
PSBSZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNp
emUoKS53aWR0aCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtICh4
UG9zaXRpb24gKyBsZWZ0KSwgZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpKSA6IDApOworICAg
ICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gbGF5
b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSwg
Z2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpKSA6IExheW91dFVuaXQoMCkpOwogICAgIGVsc2UK
ICAgICAgICAgZ2VvbWV0cnkuc2V0Tm9SZXBlYXRYKHhQb3NpdGlvbiArIGxlZnQpOwogCiAgICAg
TGF5b3V0VW5pdCB5UG9zaXRpb24gPSBmaWxsTGF5ZXItPnlQb3NpdGlvbigpLmNhbGNNaW5WYWx1
ZShwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC0gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWln
aHQoKSwgdHJ1ZSk7CiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRZID09IFJlcGVhdEZpbGwpCi0g
ICAgICAgIGdlb21ldHJ5LnNldFBoYXNlWShnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpID8g
bGF5b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9w
KSwgZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSkgOiAwKTsKKyAgICAgICAgZ2VvbWV0cnku
c2V0UGhhc2VZKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgPyBsYXlvdXRNb2QoZ2VvbWV0
cnkudGlsZVNpemUoKS5oZWlnaHQoKSAtICh5UG9zaXRpb24gKyB0b3ApLCBnZW9tZXRyeS50aWxl
U2l6ZSgpLmhlaWdodCgpKSA6IExheW91dFVuaXQoMCkpOwogICAgIGVsc2UgCiAgICAgICAgIGdl
b21ldHJ5LnNldE5vUmVwZWF0WSh5UG9zaXRpb24gKyB0b3ApOwogCkBAIC0xMDg5LDE5ICsxMDkw
LDE5IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICBMYXlv
dXRVbml0IHJpZ2h0V2l0aE91dHNldCA9IHJlY3QubWF4WCgpICsgcmlnaHRPdXRzZXQ7CiAgICAg
TGF5b3V0UmVjdCBib3JkZXJJbWFnZVJlY3QgPSBMYXlvdXRSZWN0KGxlZnRXaXRoT3V0c2V0LCB0
b3BXaXRoT3V0c2V0LCByaWdodFdpdGhPdXRzZXQgLSBsZWZ0V2l0aE91dHNldCwgYm90dG9tV2l0
aE91dHNldCAtIHRvcFdpdGhPdXRzZXQpOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBj
YWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoc3R5bGVJbWFnZSwgYm9yZGVySW1hZ2VS
ZWN0LnNpemUoKSk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBjYWxjdWxhdGVJbWFnZUludHJp
bnNpY0RpbWVuc2lvbnMoc3R5bGVJbWFnZSwgYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7CiAKICAg
ICAvLyBJZiBib3RoIHZhbHVlcyBhcmUg4oCYYXV0b+KAmSB0aGVuIHRoZSBpbnRyaW5zaWMgd2lk
dGggYW5kL29yIGhlaWdodCBvZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVzZWQsIGlmIGFueS4KLSAg
ICBMYXlvdXRTaXplIGNvbnRhaW5lclNpemUgPSBpbWFnZVNpemUuaXNFbXB0eSgpID8gYm9yZGVy
SW1hZ2VSZWN0LnNpemUoKSA6IGltYWdlU2l6ZTsKKyAgICBJbnRTaXplIGNvbnRhaW5lclNpemUg
PSBpbWFnZVNpemUuaXNFbXB0eSgpID8gYm9yZGVySW1hZ2VSZWN0LnNpemUoKSA6IGltYWdlU2l6
ZTsKICAgICBzdHlsZUltYWdlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIodGhpcywgY29u
dGFpbmVyU2l6ZSwgc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBMYXlvdXRVbml0IGlt
YWdlV2lkdGggPSBpbWFnZVNpemUud2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IGltYWdlSGVpZ2h0
ID0gaW1hZ2VTaXplLmhlaWdodCgpOworICAgIGludCBpbWFnZVdpZHRoID0gaW1hZ2VTaXplLndp
ZHRoKCk7CisgICAgaW50IGltYWdlSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpOwogCi0gICAg
TGF5b3V0VW5pdCB0b3BTbGljZSA9IG1pbjxMYXlvdXRVbml0PihpbWFnZUhlaWdodCwgbmluZVBp
ZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS5jYWxjVmFsdWUoaW1hZ2VIZWlnaHQpKTsKLSAg
ICBMYXlvdXRVbml0IHJpZ2h0U2xpY2UgPSBtaW48TGF5b3V0VW5pdD4oaW1hZ2VXaWR0aCwgbmlu
ZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLmNhbGNWYWx1ZShpbWFnZVdpZHRoKSk7
Ci0gICAgTGF5b3V0VW5pdCBib3R0b21TbGljZSA9IG1pbjxMYXlvdXRVbml0PihpbWFnZUhlaWdo
dCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS5jYWxjVmFsdWUoaW1hZ2VI
ZWlnaHQpKTsKLSAgICBMYXlvdXRVbml0IGxlZnRTbGljZSA9IG1pbjxMYXlvdXRVbml0PihpbWFn
ZVdpZHRoLCBuaW5lUGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKS5jYWxjVmFsdWUoaW1h
Z2VXaWR0aCkpOworICAgIGludCB0b3BTbGljZSA9IG1pbjxpbnQ+KGltYWdlSGVpZ2h0LCBuaW5l
UGllY2VJbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLmNhbGNWYWx1ZShpbWFnZUhlaWdodCkpOwor
ICAgIGludCByaWdodFNsaWNlID0gbWluPGludD4oaW1hZ2VXaWR0aCwgbmluZVBpZWNlSW1hZ2Uu
aW1hZ2VTbGljZXMoKS5yaWdodCgpLmNhbGNWYWx1ZShpbWFnZVdpZHRoKSk7CisgICAgaW50IGJv
dHRvbVNsaWNlID0gbWluPGludD4oaW1hZ2VIZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xp
Y2VzKCkuYm90dG9tKCkuY2FsY1ZhbHVlKGltYWdlSGVpZ2h0KSk7CisgICAgaW50IGxlZnRTbGlj
ZSA9IG1pbjxpbnQ+KGltYWdlV2lkdGgsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkubGVm
dCgpLmNhbGNWYWx1ZShpbWFnZVdpZHRoKSk7CiAKICAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIGhS
dWxlID0gbmluZVBpZWNlSW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKTsKICAgICBFTmluZVBpZWNlSW1h
Z2VSdWxlIHZSdWxlID0gbmluZVBpZWNlSW1hZ2UudmVydGljYWxSdWxlKCk7CkBAIC0xMTE1LDgg
KzExMTYsOCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAg
Ly8gVGhlIHNwZWMgc2F5czogR2l2ZW4gTHdpZHRoIGFzIHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVy
IGltYWdlIGFyZWEsIExoZWlnaHQgYXMgaXRzIGhlaWdodCwgYW5kIFdzaWRlIGFzIHRoZSBib3Jk
ZXIgaW1hZ2Ugd2lkdGgKICAgICAvLyBvZmZzZXQgZm9yIHRoZSBzaWRlLCBsZXQgZiA9IG1pbihM
d2lkdGgvKFdsZWZ0K1dyaWdodCksIExoZWlnaHQvKFd0b3ArV2JvdHRvbSkpLiBJZiBmIDwgMSwg
dGhlbiBhbGwgVyBhcmUgcmVkdWNlZCBieQogICAgIC8vIG11bHRpcGx5aW5nIHRoZW0gYnkgZi4K
LSAgICBpbnQgYm9yZGVyU2lkZVdpZHRoID0gbWF4KDEsIGxlZnRXaWR0aCArIHJpZ2h0V2lkdGgp
OwotICAgIGludCBib3JkZXJTaWRlSGVpZ2h0ID0gbWF4KDEsIHRvcFdpZHRoICsgYm90dG9tV2lk
dGgpOworICAgIExheW91dFVuaXQgYm9yZGVyU2lkZVdpZHRoID0gbWF4PExheW91dFVuaXQ+KDEs
IGxlZnRXaWR0aCArIHJpZ2h0V2lkdGgpOworICAgIExheW91dFVuaXQgYm9yZGVyU2lkZUhlaWdo
dCA9IG1heDxMYXlvdXRVbml0PigxLCB0b3BXaWR0aCArIGJvdHRvbVdpZHRoKTsKICAgICBmbG9h
dCBib3JkZXJTaWRlU2NhbGVGYWN0b3IgPSBtaW4oKGZsb2F0KWJvcmRlckltYWdlUmVjdC53aWR0
aCgpIC8gYm9yZGVyU2lkZVdpZHRoLCAoZmxvYXQpYm9yZGVySW1hZ2VSZWN0LmhlaWdodCgpIC8g
Ym9yZGVyU2lkZUhlaWdodCk7CiAgICAgaWYgKGJvcmRlclNpZGVTY2FsZUZhY3RvciA8IDEpIHsK
ICAgICAgICAgdG9wV2lkdGggKj0gYm9yZGVyU2lkZVNjYWxlRmFjdG9yOwpAQCAtMTE2Myw5ICsx
MTY0LDkgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogCiAgICAg
ICAgIC8vIFBhaW50IHRoZSBsZWZ0IGVkZ2UuCiAgICAgICAgIC8vIEhhdmUgdG8gc2NhbGUgYW5k
IHRpbGUgaW50byB0aGUgYm9yZGVyIHJlY3QuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1h
Z2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBsZWZ0V2lkdGgsCisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9y
U3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0LnkoKSAr
IHRvcFdpZHRoLCBsZWZ0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25IZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExheW91dFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgc291cmNlSGVpZ2h0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIHRv
cFNsaWNlLCBsZWZ0U2xpY2UsIHNvdXJjZUhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKGxlZnRTaWRlU2NhbGUsIGxlZnRTaWRlU2NhbGUp
LCBJbWFnZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKICAgICB9
CiAKQEAgLTExODQsMjQgKzExODUsMjQgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnROaW5lUGllYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwg
cmlnaHRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJp
Z2h0IGVkZ2UuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJp
Z2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JT
cGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVy
SW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNs
aWNlLCB0b3BTbGljZSwgcmlnaHRTbGljZSwgc291cmNlSGVpZ2h0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNl
LCB0b3BTbGljZSwgcmlnaHRTbGljZSwgc291cmNlSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUocmlnaHRTaWRlU2NhbGUsIHJpZ2h0U2lk
ZVNjYWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6
U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKICAgICB9CiAKICAgICAv
LyBQYWludCB0aGUgdG9wIGVkZ2UuCiAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJl
Y3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwg
ZGVzdGluYXRpb25XaWR0aCwgdG9wV2lkdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFJlY3QobGVmdFNsaWNlLCAwLCBzb3VyY2VXaWR0aCwgdG9wU2xp
Y2UpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgp
LCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJv
cmRlckltYWdlUmVjdC55KCksIGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdpZHRoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgMCwgc291
cmNlV2lkdGgsIHRvcFNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFNpemUodG9wU2lkZVNjYWxlLCB0b3BTaWRlU2NhbGUpLCAoSW1hZ2U6OlRpbGVS
dWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAogICAgIC8vIFBhaW50IHRoZSBi
b3R0b20gZWRnZS4KICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3Jk
ZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90
dG9tV2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0
aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uV2lkdGgsIGJvdHRvbVdpZHRoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRT
bGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgc291cmNlV2lkdGgsIGJvdHRvbVNsaWNl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRT
bGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgc291cmNlV2lkdGgsIGJvdHRvbVNsaWNl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUoYm90
dG9tU2lkZVNjYWxlLCBib3R0b21TaWRlU2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGls
ZSwgb3ApOwogCkBAIC0xMjI4LDggKzEyMjksOCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludE5pbmVQaWVjCiAgICAgICAgICAgICBtaWRkbGVTY2FsZUZhY3Rvci5zZXRIZWlnaHQo
ZGVzdGluYXRpb25IZWlnaHQgLyBzb3VyY2VIZWlnaHQpOwogICAgICAgICAKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKLSAg
ICAgICAgICAgIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9y
ZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0aW5hdGlv
bkhlaWdodCksCi0gICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIHNv
dXJjZVdpZHRoLCBzb3VyY2VIZWlnaHQpLAorICAgICAgICAgICAgSW50UmVjdChib3JkZXJJbWFn
ZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGRl
c3RpbmF0aW9uV2lkdGgsIGRlc3RpbmF0aW9uSGVpZ2h0KSwKKyAgICAgICAgICAgIEludFJlY3Qo
bGVmdFNsaWNlLCB0b3BTbGljZSwgc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCksCiAgICAgICAg
ICAgICBtaWRkbGVTY2FsZUZhY3RvciwgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgKEltYWdlOjpU
aWxlUnVsZSl2UnVsZSwgb3ApOwogICAgIH0KIApAQCAtMjM0Niw3ICsyMzQ3LDcgQEAgc3RhdGlj
IFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZQogICAgIC8vIFRoaXMgZnVuY3Rpb24g
cmVsaWVzIG9uIHRoZSBmYWN0IHdlIG9ubHkgZ2V0IHJhZGlpIG5vdCBjb250YWluZWQgd2l0aGlu
IGVhY2ggZWRnZSBpZiBvbmUgb2YgdGhlIHJhZGlpCiAgICAgLy8gZm9yIGFuIGVkZ2UgaXMgemVy
bywgc28gd2UgY2FuIHNoaWZ0IHRoZSBhcmMgdG93YXJkcyB0aGUgemVybyByYWRpdXMgY29ybmVy
LgogICAgIFJvdW5kZWRSZWN0OjpSYWRpaSBuZXdSYWRpaSA9IGlubmVyQm9yZGVyLnJhZGlpKCk7
Ci0gICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gaW5uZXJCb3JkZXIucmVjdCgpOworICAgIEludFJl
Y3QgbmV3UmVjdCA9IGlubmVyQm9yZGVyLnJlY3QoKTsKIAogICAgIGZsb2F0IG92ZXJzaG9vdDsK
ICAgICBmbG9hdCBtYXhSYWRpaTsKQEAgLTIzNjAsOSArMjM2MSw5IEBAIHN0YXRpYyBSb3VuZGVk
UmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmUKICAgICAgICAgICAgIGlmICghbmV3UmFkaWkudG9w
TGVmdCgpLndpZHRoKCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKC1vdmVyc2hvb3Qs
IDApOwogICAgICAgICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbUxlZnQoTGF5b3V0U2l6
ZSgwLCAwKSk7Ci0gICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0KExheW91dFNpemUoMCwg
MCkpOwotICAgICAgICBtYXhSYWRpaSA9IG1heDxMYXlvdXRVbml0PihuZXdSYWRpaS50b3BMZWZ0
KCkuaGVpZ2h0KCksIG5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkpOworICAgICAgICBuZXdS
YWRpaS5zZXRCb3R0b21MZWZ0KEludFNpemUoMCwgMCkpOworICAgICAgICBuZXdSYWRpaS5zZXRC
b3R0b21SaWdodChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbWF4UmFkaWkgPSBtYXgobmV3UmFk
aWkudG9wTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS50b3BSaWdodCgpLmhlaWdodCgpKTsKICAg
ICAgICAgaWYgKG1heFJhZGlpID4gbmV3UmVjdC5oZWlnaHQoKSkKICAgICAgICAgICAgIG5ld1Jl
Y3Quc2V0SGVpZ2h0KG1heFJhZGlpKTsKICAgICAgICAgYnJlYWs7CkBAIC0yMzc1LDkgKzIzNzYs
OSBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lCiAgICAgICAgICAg
ICBpZiAoIW5ld1JhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpKQogICAgICAgICAgICAgICAgIG5l
d1JlY3QubW92ZSgtb3ZlcnNob290LCAwKTsKICAgICAgICAgfQotICAgICAgICBuZXdSYWRpaS5z
ZXRUb3BMZWZ0KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBuZXdSYWRpaS5zZXRUb3BSaWdo
dChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbWF4UmFkaWkgPSBtYXg8TGF5b3V0VW5pdD4o
bmV3UmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhl
aWdodCgpKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wTGVmdChJbnRTaXplKDAsIDApKTsKKyAg
ICAgICAgbmV3UmFkaWkuc2V0VG9wUmlnaHQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG1heFJh
ZGlpID0gbWF4KG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSwgbmV3UmFkaWkuYm90dG9t
UmlnaHQoKS5oZWlnaHQoKSk7CiAgICAgICAgIGlmIChtYXhSYWRpaSA+IG5ld1JlY3QuaGVpZ2h0
KCkpIHsKICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgwLCBuZXdSZWN0LmhlaWdodCgpIC0gbWF4
UmFkaWkpOwogICAgICAgICAgICAgbmV3UmVjdC5zZXRIZWlnaHQobWF4UmFkaWkpOwpAQCAtMjM5
Miw5ICsyMzkzLDkgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZQog
ICAgICAgICAgICAgaWYgKCFuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAg
ICAgICAgbmV3UmVjdC5tb3ZlKDAsIC1vdmVyc2hvb3QpOwogICAgICAgICB9Ci0gICAgICAgIG5l
d1JhZGlpLnNldFRvcFJpZ2h0KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBuZXdSYWRpaS5z
ZXRCb3R0b21SaWdodChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbWF4UmFkaWkgPSBtYXg8
TGF5b3V0VW5pdD4obmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCksIG5ld1JhZGlpLmJvdHRvbUxl
ZnQoKS53aWR0aCgpKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wUmlnaHQoSW50U2l6ZSgwLCAw
KSk7CisgICAgICAgIG5ld1JhZGlpLnNldEJvdHRvbVJpZ2h0KEludFNpemUoMCwgMCkpOworICAg
ICAgICBtYXhSYWRpaSA9IG1heChuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSwgbmV3UmFkaWku
Ym90dG9tTGVmdCgpLndpZHRoKCkpOwogICAgICAgICBpZiAobWF4UmFkaWkgPiBuZXdSZWN0Lndp
ZHRoKCkpCiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1heFJhZGlpKTsKICAgICAgICAg
YnJlYWs7CkBAIC0yNDA3LDkgKzI0MDgsOSBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3VsYXRl
QWRqdXN0ZWRJbm5lCiAgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0
KCkpCiAgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKDAsIC1vdmVyc2hvb3QpOwogICAgICAg
ICB9Ci0gICAgICAgIG5ld1JhZGlpLnNldFRvcExlZnQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAg
ICAgIG5ld1JhZGlpLnNldEJvdHRvbUxlZnQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAgIG1h
eFJhZGlpID0gbWF4PExheW91dFVuaXQ+KG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSwgbmV3
UmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0VG9wTGVm
dChJbnRTaXplKDAsIDApKTsKKyAgICAgICAgbmV3UmFkaWkuc2V0Qm90dG9tTGVmdChJbnRTaXpl
KDAsIDApKTsKKyAgICAgICAgbWF4UmFkaWkgPSBtYXgobmV3UmFkaWkudG9wUmlnaHQoKS53aWR0
aCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwogICAgICAgICBpZiAobWF4UmFk
aWkgPiBuZXdSZWN0LndpZHRoKCkpIHsKICAgICAgICAgICAgIG5ld1JlY3QubW92ZShuZXdSZWN0
LndpZHRoKCkgLSBtYXhSYWRpaSwgMCk7CiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1h
eFJhZGlpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oCShyZXZpc2lvbiA5ODk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjkgKzEzNywy
OSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBjbGFzcyBCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSB7CiAg
ICAgcHVibGljOgotICAgICAgICBMYXlvdXRQb2ludCBkZXN0T3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0T3JpZ2luOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVzdE9yaWdpbihjb25zdCBMYXlv
dXRQb2ludCYgZGVzdE9yaWdpbikKKyAgICAgICAgSW50UG9pbnQgZGVzdE9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdE9yaWdpbjsgfQorICAgICAgICB2b2lkIHNldERlc3RPcmlnaW4oY29u
c3QgSW50UG9pbnQmIGRlc3RPcmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZGVzdE9y
aWdpbiA9IGRlc3RPcmlnaW47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExheW91dFJl
Y3QgZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0OyB9Ci0gICAgICAgIHZvaWQg
c2V0RGVzdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgIEludFJlY3Qg
ZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0
RGVzdFJlY3QoY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAg
IG1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJldHVybnMg
dGhlIHBoYXNlIHJlbGF0aXZlIHRvIHRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUuCi0gICAgICAg
IExheW91dFBvaW50IHJlbGF0aXZlUGhhc2UoKSBjb25zdDsKKyAgICAgICAgSW50UG9pbnQgcmVs
YXRpdmVQaGFzZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTGF5b3V0UG9pbnQgcGhhc2Uo
KSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9ICAgCi0gICAgICAgIHZvaWQgc2V0UGhhc2UoY29u
c3QgTGF5b3V0UG9pbnQmIHBoYXNlKQorICAgICAgICBJbnRQb2ludCBwaGFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGhhc2U7IH0gICAKKyAgICAgICAgdm9pZCBzZXRQaGFzZShjb25zdCBJbnRQb2lu
dCYgcGhhc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcGhhc2UgPSBwaGFzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIExheW91dFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rp
bGVTaXplOyB9ICAgIAotICAgICAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IExheW91dFNpemUm
IHRpbGVTaXplKQorICAgICAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90
aWxlU2l6ZTsgfSAgICAKKyAgICAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSkKICAgICAgICAgewogICAgICAgICAgICAgbV90aWxlU2l6ZSA9IHRpbGVTaXplOwog
ICAgICAgICB9CkBAIC0xNzAsMTQgKzE3MCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQg
c2V0Tm9SZXBlYXRYKGludCB4T2Zmc2V0KTsKICAgICAgICAgdm9pZCBzZXROb1JlcGVhdFkoaW50
IHlPZmZzZXQpOwogICAgICAgICAKLSAgICAgICAgdm9pZCB1c2VGaXhlZEF0dGFjaG1lbnQoY29u
c3QgTGF5b3V0UG9pbnQmIGF0dGFjaG1lbnRQb2ludCk7CisgICAgICAgIHZvaWQgdXNlRml4ZWRB
dHRhY2htZW50KGNvbnN0IEludFBvaW50JiBhdHRhY2htZW50UG9pbnQpOwogICAgICAgICAKLSAg
ICAgICAgdm9pZCBjbGlwKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGlwKGNv
bnN0IEludFJlY3QmKTsKICAgICBwcml2YXRlOgotICAgICAgICBMYXlvdXRSZWN0IG1fZGVzdFJl
Y3Q7Ci0gICAgICAgIExheW91dFBvaW50IG1fZGVzdE9yaWdpbjsKLSAgICAgICAgTGF5b3V0UG9p
bnQgbV9waGFzZTsKLSAgICAgICAgTGF5b3V0U2l6ZSBtX3RpbGVTaXplOworICAgICAgICBJbnRS
ZWN0IG1fZGVzdFJlY3Q7CisgICAgICAgIEludFBvaW50IG1fZGVzdE9yaWdpbjsKKyAgICAgICAg
SW50UG9pbnQgbV9waGFzZTsKKyAgICAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIH07CiAK
ICAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCwgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkm
KTsKQEAgLTE5NSw4ICsxOTUsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0JveE1vZGVsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgTGF5
b3V0U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiwgY29uc3QgTGF5
b3V0U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3Q7Ci0gICAgTGF5b3V0U2l6
ZSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5bGVJbWFnZSosIGNvbnN0IExh
eW91dFNpemUmIHNjYWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0OworICAgIEludFNpemUg
Y2FsY3VsYXRlRmlsbFRpbGVTaXplKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEludFNpemUmIHNj
YWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0OworICAgIEludFNpemUgY2FsY3VsYXRlSW1h
Z2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1hZ2UqLCBjb25zdCBJbnRTaXplJiBzY2FsZWRQ
b3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdDsKIAogICAgIFJvdW5kZWRSZWN0IGdldEJhY2tncm91
bmRSb3VuZGVkUmVjdChjb25zdCBMYXlvdXRSZWN0JiwgSW5saW5lRmxvd0JveCosIExheW91dFVu
aXQgaW5saW5lQm94V2lkdGgsIExheW91dFVuaXQgaW5saW5lQm94SGVpZ2h0LAogICAgICAgICBi
b29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2Up
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113248</attachid>
            <date>2011-11-01 16:10:28 -0700</date>
            <delta_ts>2011-11-01 17:56:05 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71240-20111101161027.patch</filename>
            <type>text/plain</type>
            <size>22929</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MDA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTEtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBiYWNrZ3JvdW5kL2Jv
cmRlciBpbWFnZSBiYWNrIHRvIEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
KworICAgICAgICBTd2l0Y2ggYmFja2dyb3VuZC0gYW5kIGJvcmRlci1pbWFnZSByZW5kZXJpbmcg
YmFjayB0byBpbnQgdG8gYWxpZ24gd2l0aAorICAgICAgICBkZXZpY2UgcGl4ZWxzLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3Vs
YXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVGaWxsVGlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5Ojp1c2VGaXhlZEF0
dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6cmVsYXRpdmVQaGFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dyb3VuZElt
YWdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlQWRqdXN0ZWRJ
bm5lckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdl
R2VvbWV0cnk6OmRlc3RPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0T3JpZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTo6
ZGVzdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5OjpzZXREZXN0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnBoYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRy
eTo6c2V0UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OkJh
Y2tncm91bmRJbWFnZUdlb21ldHJ5Ojp0aWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnNldFRpbGVTaXplKToK
KwogMjAxMS0xMS0wMSAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgU3dpdGNoIFJlbmRlck9iamVjdCB0byBsYXlvdXQgYWJzdHJhY3Rpb24KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gOTkwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzMsMTAgKzgzMywxMCBAQCBzdGF0aWMgaW5s
aW5lIExheW91dFNpemUgcmVzb2x2ZUFnYWluc3RJCiAgICAgcmV0dXJuIExheW91dFNpemUoc2l6
ZS53aWR0aCgpLCBzb2x1dGlvbkhlaWdodCk7CiB9CiAKLUxheW91dFNpemUgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhTdHlsZUltYWdlKiBp
bWFnZSwgY29uc3QgTGF5b3V0U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3QKK0ludFNp
emUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9u
cyhTdHlsZUltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgcG9zaXRpb25pbmdBcmVhU2l6ZSkg
Y29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHJlc29sdmVkV2lkdGggPSAwOwotICAgIExheW91dFVu
aXQgcmVzb2x2ZWRIZWlnaHQgPSAwOworICAgIGludCByZXNvbHZlZFdpZHRoID0gMDsKKyAgICBp
bnQgcmVzb2x2ZWRIZWlnaHQgPSAwOwogICAgIEZsb2F0U2l6ZSBpbnRyaW5zaWNSYXRpbzsKIAog
ICAgIC8vIEEgZ2VuZXJhdGVkIGltYWdlIHdpdGhvdXQgYSBmaXhlZCBzaXplLCB3aWxsIGFsd2F5
cyByZXR1cm4gdGhlIGNvbnRhaW5lciBzaXplIGFzIGludHJpbnNpYyBzaXplLgpAQCAtODUwLDE2
ICs4NTAsMTYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYQogCiAg
ICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBsYXlvdXQg
aXMgb2ZmIGludHM6IHdlYmtpdC5vcmcvYi82MzY1NgogICAgICAgICBpZiAoaW50cmluc2ljV2lk
dGguaXNGaXhlZCgpKQotICAgICAgICAgICAgcmVzb2x2ZWRXaWR0aCA9IHN0YXRpY19jYXN0PExh
eW91dFVuaXQ+KGNlaWxmKGludHJpbnNpY1dpZHRoLnZhbHVlKCkgKiBzdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKTsKKyAgICAgICAgICAgIHJlc29sdmVkV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWxmKGludHJpbnNpY1dpZHRoLnZhbHVlKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KTsKICAgICAgICAgaWYgKGludHJpbnNpY0hlaWdodC5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBy
ZXNvbHZlZEhlaWdodCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxmKGludHJpbnNpY0hl
aWdodC52YWx1ZSgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBy
ZXNvbHZlZEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoaW50cmluc2ljSGVpZ2h0LnZh
bHVlKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAKICAgICAvLyBJbnRy
aW5zaWMgZGltZW5zaW9ucyBleHByZXNzZWQgYXMgcGVyY2VudGFnZXMgbXVzdCBiZSByZXNvbHZl
ZCByZWxhdGl2ZSB0byB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVjdGFuZ2xlCiAgICAgLy8gdGhh
dCBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZSAnYmFja2dyb3VuZC1w
b3NpdGlvbicgcHJvcGVydHkuIFNWRyBvbiB0aGUgb3RoZXIgaGFuZAogICAgIC8vIF9leHBsaWNp
dGVseV8gc2F5cyB0aGF0IHBlcmNlbnRhZ2UgdmFsdWVzIGZvciB0aGUgd2lkdGgvaGVpZ2h0IGF0
dHJpYnV0ZXMgZG8gTk9UIGRlZmluZSBpbnRyaW5zaWMgZGltZW5zaW9ucy4KICAgICBpZiAocmVz
b2x2ZWRXaWR0aCA+IDAgJiYgcmVzb2x2ZWRIZWlnaHQgPiAwKQotICAgICAgICByZXR1cm4gTGF5
b3V0U2l6ZShyZXNvbHZlZFdpZHRoLCByZXNvbHZlZEhlaWdodCk7CisgICAgICAgIHJldHVybiBJ
bnRTaXplKHJlc29sdmVkV2lkdGgsIHJlc29sdmVkSGVpZ2h0KTsKIAogICAgIC8vIElmIHRoZSBp
bWFnZSBoYXMgb25lIG9mIGVpdGhlciBhbiBpbnRyaW5zaWMgd2lkdGggb3IgYW4gaW50cmluc2lj
IGhlaWdodDoKICAgICAvLyAqIGFuZCBhbiBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvLCB0aGVuIHRo
ZSBtaXNzaW5nIGRpbWVuc2lvbiBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGdpdmVuIGRpbWVuc2lv
biBhbmQgdGhlIHJhdGlvLgpAQCAtODc5LDE3ICs4NzksMTcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y2FsY3VsYQogICAgIHJldHVybiBwb3NpdGlvbmluZ0FyZWFTaXplOwog
fQogCi1MYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVGaWxsVGlsZVNp
emUoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHBvc2l0aW9u
aW5nQXJlYVNpemUpIGNvbnN0CitJbnRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxh
dGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IEludFNpemUm
IHBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0CiB7CiAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBm
aWxsTGF5ZXItPmltYWdlKCk7CiAgICAgRUZpbGxTaXplVHlwZSB0eXBlID0gZmlsbExheWVyLT5z
aXplKCkudHlwZTsKIAotICAgIExheW91dFNpemUgaW1hZ2VJbnRyaW5zaWNTaXplID0gY2FsY3Vs
YXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKGltYWdlLCBwb3NpdGlvbmluZ0FyZWFTaXplKTsK
KyAgICBJbnRTaXplIGltYWdlSW50cmluc2ljU2l6ZSA9IGNhbGN1bGF0ZUltYWdlSW50cmluc2lj
RGltZW5zaW9ucyhpbWFnZSwgcG9zaXRpb25pbmdBcmVhU2l6ZSk7CiAKICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBTaXplTGVuZ3RoOiB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IHcgPSBwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IGggPSBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpOworICAgICAgICAgICAgaW50IHcgPSBw
b3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgaCA9IHBvc2l0aW9u
aW5nQXJlYVNpemUuaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIExlbmd0aCBsYXllcldpZHRoID0g
ZmlsbExheWVyLT5zaXplKCkuc2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgTGVuZ3RoIGxheWVy
SGVpZ2h0ID0gZmlsbExheWVyLT5zaXplKCkuc2l6ZS5oZWlnaHQoKTsKQEAgLTkxOCw3ICs5MTgs
NyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhCiAgICAgICAgICAg
ICAgICAgaCA9IGltYWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUobWF4PExheW91dFVuaXQ+
KDEsIHcpLCBtYXg8TGF5b3V0VW5pdD4oMSwgaCkpOworICAgICAgICAgICAgcmV0dXJuIEludFNp
emUobWF4KDEsIHcpLCBtYXgoMSwgaCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU2l6ZU5v
bmU6IHsKICAgICAgICAgICAgIC8vIElmIGJvdGggdmFsdWVzIGFyZSDigJhhdXRv4oCZIHRoZW4g
dGhlIGludHJpbnNpYyB3aWR0aCBhbmQvb3IgaGVpZ2h0IG9mIHRoZSBpbWFnZSBzaG91bGQgYmUg
dXNlZCwgaWYgYW55LgpAQCAtOTM1LDEyICs5MzUsMTIgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y2FsY3VsYQogICAgICAgICAgICAgZmxvYXQgdmVydGljYWxTY2FsZUZhY3Rv
ciA9IGltYWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKQogICAgICAgICAgICAgICAgID8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBvc2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkpIC8gaW1hZ2VJbnRyaW5z
aWNTaXplLmhlaWdodCgpIDogMTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gdHlw
ZSA9PSBDb250YWluID8gbWluKGhvcml6b250YWxTY2FsZUZhY3RvciwgdmVydGljYWxTY2FsZUZh
Y3RvcikgOiBtYXgoaG9yaXpvbnRhbFNjYWxlRmFjdG9yLCB2ZXJ0aWNhbFNjYWxlRmFjdG9yKTsK
LSAgICAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKG1heDxMYXlvdXRVbml0PigxLCBpbWFnZUlu
dHJpbnNpY1NpemUud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwgbWF4PExheW91dFVuaXQ+KDEsIGlt
YWdlSW50cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSk7CisgICAgICAgICAgICBy
ZXR1cm4gSW50U2l6ZShtYXgoMSwgc3RhdGljX2Nhc3Q8aW50PihpbWFnZUludHJpbnNpY1NpemUu
d2lkdGgoKSAqIHNjYWxlRmFjdG9yKSksIG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlSW50
cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSkpOwogICAgICAgIH0KICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOworICAg
IHJldHVybiBJbnRTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5OjpzZXROb1JlcGVhdFgoaW50IHhPZmZzZXQpCkBAIC05NTYsMTkg
Kzk1NiwyMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpCYWNrZ3JvdW5kSW1hCiAgICAg
bV9kZXN0UmVjdC5zZXRIZWlnaHQobV90aWxlU2l6ZS5oZWlnaHQoKSArIG1pbih5T2Zmc2V0LCAw
KSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21l
dHJ5Ojp1c2VGaXhlZEF0dGFjaG1lbnQoY29uc3QgTGF5b3V0UG9pbnQmIGF0dGFjaG1lbnRQb2lu
dCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5Ojp1
c2VGaXhlZEF0dGFjaG1lbnQoY29uc3QgSW50UG9pbnQmIGF0dGFjaG1lbnRQb2ludCkKIHsKLSAg
ICBtX3BoYXNlLm1vdmUobWF4PExheW91dFVuaXQ+KGF0dGFjaG1lbnRQb2ludC54KCkgLSBtX2Rl
c3RSZWN0LngoKSwgMCksIG1heDxMYXlvdXRVbml0PihhdHRhY2htZW50UG9pbnQueSgpIC0gbV9k
ZXN0UmVjdC55KCksIDApKTsKKyAgICBJbnRQb2ludCBhbGlnbmVkUG9pbnQgPSBhdHRhY2htZW50
UG9pbnQ7CisgICAgbV9waGFzZS5tb3ZlKG1heChhbGlnbmVkUG9pbnQueCgpIC0gbV9kZXN0UmVj
dC54KCksIDApLCBtYXgoYWxpZ25lZFBvaW50LnkoKSAtIG1fZGVzdFJlY3QueSgpLCAwKSk7CiB9
CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJbWFnZUdlb21ldHJ5Ojpj
bGlwKGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OmNsaXAoY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
CiB7CiAgICAgbV9kZXN0UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogfQogCi1MYXlvdXRQb2lu
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6QmFja2dyb3VuZEltYWdlR2VvbWV0cnk6OnJlbGF0aXZl
UGhhc2UoKSBjb25zdAorSW50UG9pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OkJhY2tncm91bmRJ
bWFnZUdlb21ldHJ5OjpyZWxhdGl2ZVBoYXNlKCkgY29uc3QKIHsKLSAgICBMYXlvdXRQb2ludCBw
aGFzZSA9IG1fcGhhc2U7CisgICAgSW50UG9pbnQgcGhhc2UgPSBtX3BoYXNlOwogICAgIHBoYXNl
ICs9IG1fZGVzdFJlY3QubG9jYXRpb24oKSAtIG1fZGVzdE9yaWdpbjsKICAgICByZXR1cm4gcGhh
c2U7CiB9CkBAIC05NzgsNyArOTc5LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2Fs
Y3VsYXRlQmFjawogewogICAgIExheW91dFVuaXQgbGVmdCA9IDA7CiAgICAgTGF5b3V0VW5pdCB0
b3AgPSAwOwotICAgIExheW91dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKKyAgICBJbnRTaXpl
IHBvc2l0aW9uaW5nQXJlYVNpemU7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGJhY2tncm91bmQg
cG9zaXRpb25pbmcgYXJlYSBhbmQgc2V0IGRlc3RSZWN0IHRvIHRoZSBiYWNrZ3JvdW5kIHBhaW50
aW5nIGFyZWEuCiAgICAgLy8gZGVzdFJlY3Qgd2lsbCBiZSBhZGp1c3RlZCBsYXRlciBpZiB0aGUg
YmFja2dyb3VuZCBpcyBub24tcmVwZWF0aW5nLgpAQCAtMTAyNyw3ICsxMDI4LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawogICAgICAgICBwb3NpdGlvbmluZ0Fy
ZWFTaXplID0gZ2VvbWV0cnkuZGVzdFJlY3QoKS5zaXplKCk7CiAgICAgfQogCi0gICAgTGF5b3V0
U2l6ZSBmaWxsVGlsZVNpemUgPSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoZmlsbExheWVyLCBwb3Np
dGlvbmluZ0FyZWFTaXplKTsKKyAgICBJbnRTaXplIGZpbGxUaWxlU2l6ZSA9IGNhbGN1bGF0ZUZp
bGxUaWxlU2l6ZShmaWxsTGF5ZXIsIHBvc2l0aW9uaW5nQXJlYVNpemUpOwogICAgIGZpbGxMYXll
ci0+aW1hZ2UoKS0+c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHRoaXMsIGZpbGxUaWxlU2l6
ZSwgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBnZW9tZXRyeS5zZXRUaWxlU2l6ZShm
aWxsVGlsZVNpemUpOwogCkBAIC0xMDM2LDEzICsxMDM3LDEzIEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2sKIAogICAgIExheW91dFVuaXQgeFBvc2l0aW9uID0gZmls
bExheWVyLT54UG9zaXRpb24oKS5jYWxjTWluVmFsdWUocG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0
aCgpIC0gZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpLCB0cnVlKTsKICAgICBpZiAoYmFja2dy
b3VuZFJlcGVhdFggPT0gUmVwZWF0RmlsbCkKLSAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VYKGdl
b21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSA/IGxheW91dE1vZChnZW9tZXRyeS50aWxlU2l6ZSgp
LndpZHRoKCkgLSAoeFBvc2l0aW9uICsgbGVmdCksIGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgo
KSkgOiAwKTsKKyAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VYKGdlb21ldHJ5LnRpbGVTaXplKCku
d2lkdGgoKSA/IGxheW91dE1vZChnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCkgLSAoeFBvc2l0
aW9uICsgbGVmdCksIGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSkgOiBMYXlvdXRVbml0KDAp
KTsKICAgICBlbHNlCiAgICAgICAgIGdlb21ldHJ5LnNldE5vUmVwZWF0WCh4UG9zaXRpb24gKyBs
ZWZ0KTsKIAogICAgIExheW91dFVuaXQgeVBvc2l0aW9uID0gZmlsbExheWVyLT55UG9zaXRpb24o
KS5jYWxjTWluVmFsdWUocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSAtIGdlb21ldHJ5LnRp
bGVTaXplKCkuaGVpZ2h0KCksIHRydWUpOwogICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0WSA9PSBS
ZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVkoZ2VvbWV0cnkudGlsZVNpemUo
KS5oZWlnaHQoKSA/IGxheW91dE1vZChnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpIC0gKHlQ
b3NpdGlvbiArIHRvcCksIGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkpIDogMCk7CisgICAg
ICAgIGdlb21ldHJ5LnNldFBoYXNlWShnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpID8gbGF5
b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9wKSwg
Z2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSkgOiBMYXlvdXRVbml0KDApKTsKICAgICBlbHNl
IAogICAgICAgICBnZW9tZXRyeS5zZXROb1JlcGVhdFkoeVBvc2l0aW9uICsgdG9wKTsKIApAQCAt
MTA4OSwxOSArMTA5MCwxOSBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQ
aWVjCiAgICAgTGF5b3V0VW5pdCByaWdodFdpdGhPdXRzZXQgPSByZWN0Lm1heFgoKSArIHJpZ2h0
T3V0c2V0OwogICAgIExheW91dFJlY3QgYm9yZGVySW1hZ2VSZWN0ID0gTGF5b3V0UmVjdChsZWZ0
V2l0aE91dHNldCwgdG9wV2l0aE91dHNldCwgcmlnaHRXaXRoT3V0c2V0IC0gbGVmdFdpdGhPdXRz
ZXQsIGJvdHRvbVdpdGhPdXRzZXQgLSB0b3BXaXRoT3V0c2V0KTsKIAotICAgIExheW91dFNpemUg
aW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2Us
IGJvcmRlckltYWdlUmVjdC5zaXplKCkpOworICAgIEludFNpemUgaW1hZ2VTaXplID0gY2FsY3Vs
YXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2UsIGJvcmRlckltYWdlUmVjdC5z
aXplKCkpOwogCiAgICAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIOKAmGF1dG/igJkgdGhlbiB0aGUg
aW50cmluc2ljIHdpZHRoIGFuZC9vciBoZWlnaHQgb2YgdGhlIGltYWdlIHNob3VsZCBiZSB1c2Vk
LCBpZiBhbnkuCi0gICAgTGF5b3V0U2l6ZSBjb250YWluZXJTaXplID0gaW1hZ2VTaXplLmlzRW1w
dHkoKSA/IGJvcmRlckltYWdlUmVjdC5zaXplKCkgOiBpbWFnZVNpemU7CisgICAgSW50U2l6ZSBj
b250YWluZXJTaXplID0gaW1hZ2VTaXplLmlzRW1wdHkoKSA/IGJvcmRlckltYWdlUmVjdC5zaXpl
KCkgOiBpbWFnZVNpemU7CiAgICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRl
cmVyKHRoaXMsIGNvbnRhaW5lclNpemUsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwogCi0gICAg
TGF5b3V0VW5pdCBpbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7Ci0gICAgTGF5b3V0VW5p
dCBpbWFnZUhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgaW1hZ2VXaWR0aCA9
IGltYWdlU2l6ZS53aWR0aCgpOworICAgIGludCBpbWFnZUhlaWdodCA9IGltYWdlU2l6ZS5oZWln
aHQoKTsKIAotICAgIExheW91dFVuaXQgdG9wU2xpY2UgPSBtaW48TGF5b3V0VW5pdD4oaW1hZ2VI
ZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkuY2FsY1ZhbHVlKGltYWdl
SGVpZ2h0KSk7Ci0gICAgTGF5b3V0VW5pdCByaWdodFNsaWNlID0gbWluPExheW91dFVuaXQ+KGlt
YWdlV2lkdGgsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS5jYWxjVmFsdWUo
aW1hZ2VXaWR0aCkpOwotICAgIExheW91dFVuaXQgYm90dG9tU2xpY2UgPSBtaW48TGF5b3V0VW5p
dD4oaW1hZ2VIZWlnaHQsIG5pbmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9tKCkuY2Fs
Y1ZhbHVlKGltYWdlSGVpZ2h0KSk7Ci0gICAgTGF5b3V0VW5pdCBsZWZ0U2xpY2UgPSBtaW48TGF5
b3V0VW5pdD4oaW1hZ2VXaWR0aCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS5sZWZ0KCku
Y2FsY1ZhbHVlKGltYWdlV2lkdGgpKTsKKyAgICBpbnQgdG9wU2xpY2UgPSBtaW48aW50PihpbWFn
ZUhlaWdodCwgbmluZVBpZWNlSW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS5jYWxjVmFsdWUoaW1h
Z2VIZWlnaHQpKTsKKyAgICBpbnQgcmlnaHRTbGljZSA9IG1pbjxpbnQ+KGltYWdlV2lkdGgsIG5p
bmVQaWVjZUltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS5jYWxjVmFsdWUoaW1hZ2VXaWR0aCkp
OworICAgIGludCBib3R0b21TbGljZSA9IG1pbjxpbnQ+KGltYWdlSGVpZ2h0LCBuaW5lUGllY2VJ
bWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLmNhbGNWYWx1ZShpbWFnZUhlaWdodCkpOworICAg
IGludCBsZWZ0U2xpY2UgPSBtaW48aW50PihpbWFnZVdpZHRoLCBuaW5lUGllY2VJbWFnZS5pbWFn
ZVNsaWNlcygpLmxlZnQoKS5jYWxjVmFsdWUoaW1hZ2VXaWR0aCkpOwogCiAgICAgRU5pbmVQaWVj
ZUltYWdlUnVsZSBoUnVsZSA9IG5pbmVQaWVjZUltYWdlLmhvcml6b250YWxSdWxlKCk7CiAgICAg
RU5pbmVQaWVjZUltYWdlUnVsZSB2UnVsZSA9IG5pbmVQaWVjZUltYWdlLnZlcnRpY2FsUnVsZSgp
OwpAQCAtMTExNSw4ICsxMTE2LDggQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRO
aW5lUGllYwogICAgIC8vIFRoZSBzcGVjIHNheXM6IEdpdmVuIEx3aWR0aCBhcyB0aGUgd2lkdGgg
b2YgdGhlIGJvcmRlciBpbWFnZSBhcmVhLCBMaGVpZ2h0IGFzIGl0cyBoZWlnaHQsIGFuZCBXc2lk
ZSBhcyB0aGUgYm9yZGVyIGltYWdlIHdpZHRoCiAgICAgLy8gb2Zmc2V0IGZvciB0aGUgc2lkZSwg
bGV0IGYgPSBtaW4oTHdpZHRoLyhXbGVmdCtXcmlnaHQpLCBMaGVpZ2h0LyhXdG9wK1dib3R0b20p
KS4gSWYgZiA8IDEsIHRoZW4gYWxsIFcgYXJlIHJlZHVjZWQgYnkKICAgICAvLyBtdWx0aXBseWlu
ZyB0aGVtIGJ5IGYuCi0gICAgaW50IGJvcmRlclNpZGVXaWR0aCA9IG1heCgxLCBsZWZ0V2lkdGgg
KyByaWdodFdpZHRoKTsKLSAgICBpbnQgYm9yZGVyU2lkZUhlaWdodCA9IG1heCgxLCB0b3BXaWR0
aCArIGJvdHRvbVdpZHRoKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlclNpZGVXaWR0aCA9IG1heDxM
YXlvdXRVbml0PigxLCBsZWZ0V2lkdGggKyByaWdodFdpZHRoKTsKKyAgICBMYXlvdXRVbml0IGJv
cmRlclNpZGVIZWlnaHQgPSBtYXg8TGF5b3V0VW5pdD4oMSwgdG9wV2lkdGggKyBib3R0b21XaWR0
aCk7CiAgICAgZmxvYXQgYm9yZGVyU2lkZVNjYWxlRmFjdG9yID0gbWluKChmbG9hdClib3JkZXJJ
bWFnZVJlY3Qud2lkdGgoKSAvIGJvcmRlclNpZGVXaWR0aCwgKGZsb2F0KWJvcmRlckltYWdlUmVj
dC5oZWlnaHQoKSAvIGJvcmRlclNpZGVIZWlnaHQpOwogICAgIGlmIChib3JkZXJTaWRlU2NhbGVG
YWN0b3IgPCAxKSB7CiAgICAgICAgIHRvcFdpZHRoICo9IGJvcmRlclNpZGVTY2FsZUZhY3RvcjsK
QEAgLTExNjMsOSArMTE2NCw5IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Tmlu
ZVBpZWMKIAogICAgICAgICAvLyBQYWludCB0aGUgbGVmdCBlZGdlLgogICAgICAgICAvLyBIYXZl
IHRvIHNjYWxlIGFuZCB0aWxlIGludG8gdGhlIGJvcmRlciByZWN0LgotICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRS
ZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwg
bGVmdFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdl
LmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlcklt
YWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2Us
IHNvdXJjZUhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShsZWZ0U2lkZVNjYWxlLCBs
ZWZ0U2lkZVNjYWxlKSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxl
LCBvcCk7CiAgICAgfQogCkBAIC0xMTg0LDI0ICsxMTg1LDI0IEBAIGJvb2wgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0g
Ym90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8v
IFBhaW50IHRoZSByaWdodCBlZGdlLgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxl
ZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVj
dC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIHJp
Z2h0V2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0
V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkhlaWdodCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdChpbWFnZVdp
ZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIHNvdXJjZUhlaWdodCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChpbWFnZVdpZHRo
IC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIHNvdXJjZUhlaWdodCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHJpZ2h0U2lkZVNj
YWxlLCByaWdodFNpZGVTY2FsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CiAg
ICAgfQogCiAgICAgLy8gUGFpbnQgdGhlIHRvcCBlZGdlLgogICAgIGlmIChkcmF3VG9wKQotICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNw
YWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlcklt
YWdlUmVjdC55KCksIGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdpZHRoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwgMCwgc291cmNl
V2lkdGgsIHRvcFNsaWNlKSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFn
ZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsg
bGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCBkZXN0aW5hdGlvbldpZHRoLCB0b3BXaWR0
aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0
U2xpY2UsIDAsIHNvdXJjZVdpZHRoLCB0b3BTbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHRvcFNpZGVTY2FsZSwgdG9wU2lkZVNjYWxlKSwg
KEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAv
LyBQYWludCB0aGUgYm90dG9tIGVkZ2UuCiAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExh
eW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0
Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxl
ZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54
KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbldpZHRoLCBi
b3R0b21XaWR0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5
b3V0UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNvdXJjZVdpZHRo
LCBib3R0b21TbGljZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNvdXJjZVdpZHRo
LCBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmxvYXRTaXplKGJvdHRvbVNpZGVTY2FsZSwgYm90dG9tU2lkZVNjYWxlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFn
ZTo6U3RyZXRjaFRpbGUsIG9wKTsKIApAQCAtMTIyOCw4ICsxMjI5LDggQEAgYm9vbCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0
b3Iuc2V0SGVpZ2h0KGRlc3RpbmF0aW9uSGVpZ2h0IC8gc291cmNlSGVpZ2h0KTsKICAgICAgICAg
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNv
bG9yU3BhY2UsCi0gICAgICAgICAgICBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBs
ZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgZGVzdGluYXRpb25XaWR0
aCwgZGVzdGluYXRpb25IZWlnaHQpLAotICAgICAgICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2Us
IHRvcFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0KSwKKyAgICAgICAgICAgIEludFJl
Y3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSAr
IHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0aW5hdGlvbkhlaWdodCksCisgICAgICAg
ICAgICBJbnRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIHNvdXJjZVdpZHRoLCBzb3VyY2VIZWln
aHQpLAogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0b3IsIChJbWFnZTo6VGlsZVJ1bGUpaFJ1
bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKICAgICB9CiAKQEAgLTIzNDYsNyArMjM0
Nyw3IEBAIHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmUKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZmFjdCB3ZSBvbmx5IGdldCByYWRpaSBub3QgY29u
dGFpbmVkIHdpdGhpbiBlYWNoIGVkZ2UgaWYgb25lIG9mIHRoZSByYWRpaQogICAgIC8vIGZvciBh
biBlZGdlIGlzIHplcm8sIHNvIHdlIGNhbiBzaGlmdCB0aGUgYXJjIHRvd2FyZHMgdGhlIHplcm8g
cmFkaXVzIGNvcm5lci4KICAgICBSb3VuZGVkUmVjdDo6UmFkaWkgbmV3UmFkaWkgPSBpbm5lckJv
cmRlci5yYWRpaSgpOwotICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGlubmVyQm9yZGVyLnJlY3Qo
KTsKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBpbm5lckJvcmRlci5yZWN0KCk7CiAKICAgICBmbG9h
dCBvdmVyc2hvb3Q7CiAgICAgZmxvYXQgbWF4UmFkaWk7CkBAIC0yMzYwLDkgKzIzNjEsOSBAQCBz
dGF0aWMgUm91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lCiAgICAgICAgICAgICBpZiAo
IW5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpKQogICAgICAgICAgICAgICAgIG5ld1JlY3QubW92
ZSgtb3ZlcnNob290LCAwKTsKICAgICAgICAgfQotICAgICAgICBuZXdSYWRpaS5zZXRCb3R0b21M
ZWZ0KExheW91dFNpemUoMCwgMCkpOwotICAgICAgICBuZXdSYWRpaS5zZXRCb3R0b21SaWdodChM
YXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbWF4UmFkaWkgPSBtYXg8TGF5b3V0VW5pdD4obmV3
UmFkaWkudG9wTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS50b3BSaWdodCgpLmhlaWdodCgpKTsK
KyAgICAgICAgbmV3UmFkaWkuc2V0Qm90dG9tTGVmdChJbnRTaXplKDAsIDApKTsKKyAgICAgICAg
bmV3UmFkaWkuc2V0Qm90dG9tUmlnaHQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG1heFJhZGlp
ID0gbWF4KG5ld1JhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSwgbmV3UmFkaWkudG9wUmlnaHQoKS5o
ZWlnaHQoKSk7CiAgICAgICAgIGlmIChtYXhSYWRpaSA+IG5ld1JlY3QuaGVpZ2h0KCkpCiAgICAg
ICAgICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRpaSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
MjM3NSw5ICsyMzc2LDkgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5u
ZQogICAgICAgICAgICAgaWYgKCFuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSkKICAgICAg
ICAgICAgICAgICBuZXdSZWN0Lm1vdmUoLW92ZXJzaG9vdCwgMCk7CiAgICAgICAgIH0KLSAgICAg
ICAgbmV3UmFkaWkuc2V0VG9wTGVmdChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAgICAgbmV3UmFk
aWkuc2V0VG9wUmlnaHQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAgIG1heFJhZGlpID0gbWF4
PExheW91dFVuaXQ+KG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSwgbmV3UmFkaWkuYm90
dG9tUmlnaHQoKS5oZWlnaHQoKSk7CisgICAgICAgIG5ld1JhZGlpLnNldFRvcExlZnQoSW50U2l6
ZSgwLCAwKSk7CisgICAgICAgIG5ld1JhZGlpLnNldFRvcFJpZ2h0KEludFNpemUoMCwgMCkpOwor
ICAgICAgICBtYXhSYWRpaSA9IG1heChuZXdSYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCksIG5l
d1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobWF4UmFkaWkgPiBu
ZXdSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgICAgICBuZXdSZWN0Lm1vdmUoMCwgbmV3UmVjdC5o
ZWlnaHQoKSAtIG1heFJhZGlpKTsKICAgICAgICAgICAgIG5ld1JlY3Quc2V0SGVpZ2h0KG1heFJh
ZGlpKTsKQEAgLTIzOTIsOSArMjM5Myw5IEBAIHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVB
ZGp1c3RlZElubmUKICAgICAgICAgICAgIGlmICghbmV3UmFkaWkudG9wTGVmdCgpLmhlaWdodCgp
KQogICAgICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgwLCAtb3ZlcnNob290KTsKICAgICAgICAg
fQotICAgICAgICBuZXdSYWRpaS5zZXRUb3BSaWdodChMYXlvdXRTaXplKDAsIDApKTsKLSAgICAg
ICAgbmV3UmFkaWkuc2V0Qm90dG9tUmlnaHQoTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAgIG1h
eFJhZGlpID0gbWF4PExheW91dFVuaXQ+KG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpLCBuZXdS
YWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSk7CisgICAgICAgIG5ld1JhZGlpLnNldFRvcFJpZ2h0
KEludFNpemUoMCwgMCkpOworICAgICAgICBuZXdSYWRpaS5zZXRCb3R0b21SaWdodChJbnRTaXpl
KDAsIDApKTsKKyAgICAgICAgbWF4UmFkaWkgPSBtYXgobmV3UmFkaWkudG9wTGVmdCgpLndpZHRo
KCksIG5ld1JhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpKTsKICAgICAgICAgaWYgKG1heFJhZGlp
ID4gbmV3UmVjdC53aWR0aCgpKQogICAgICAgICAgICAgbmV3UmVjdC5zZXRXaWR0aChtYXhSYWRp
aSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjQwNyw5ICsyNDA4LDkgQEAgc3RhdGljIFJvdW5kZWRS
ZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZQogICAgICAgICAgICAgaWYgKCFuZXdSYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpKQogICAgICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgwLCAtb3ZlcnNo
b290KTsKICAgICAgICAgfQotICAgICAgICBuZXdSYWRpaS5zZXRUb3BMZWZ0KExheW91dFNpemUo
MCwgMCkpOwotICAgICAgICBuZXdSYWRpaS5zZXRCb3R0b21MZWZ0KExheW91dFNpemUoMCwgMCkp
OwotICAgICAgICBtYXhSYWRpaSA9IG1heDxMYXlvdXRVbml0PihuZXdSYWRpaS50b3BSaWdodCgp
LndpZHRoKCksIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSk7CisgICAgICAgIG5ld1Jh
ZGlpLnNldFRvcExlZnQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG5ld1JhZGlpLnNldEJvdHRv
bUxlZnQoSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIG1heFJhZGlpID0gbWF4KG5ld1JhZGlpLnRv
cFJpZ2h0KCkud2lkdGgoKSwgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICAg
ICAgaWYgKG1heFJhZGlpID4gbmV3UmVjdC53aWR0aCgpKSB7CiAgICAgICAgICAgICBuZXdSZWN0
Lm1vdmUobmV3UmVjdC53aWR0aCgpIC0gbWF4UmFkaWksIDApOwogICAgICAgICAgICAgbmV3UmVj
dC5zZXRXaWR0aChtYXhSYWRpaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gOTkwMDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDI5ICsxMzcsMjkgQEAgcHJvdGVjdGVkOgogCiAgICAgY2xhc3MgQmFja2dyb3VuZEltYWdl
R2VvbWV0cnkgewogICAgIHB1YmxpYzoKLSAgICAgICAgTGF5b3V0UG9pbnQgZGVzdE9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGVzdE9yaWdpbjsgfQotICAgICAgICB2b2lkIHNldERlc3RPcmln
aW4oY29uc3QgTGF5b3V0UG9pbnQmIGRlc3RPcmlnaW4pCisgICAgICAgIEludFBvaW50IGRlc3RP
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RPcmlnaW47IH0KKyAgICAgICAgdm9pZCBzZXRE
ZXN0T3JpZ2luKGNvbnN0IEludFBvaW50JiBkZXN0T3JpZ2luKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2Rlc3RPcmlnaW4gPSBkZXN0T3JpZ2luOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBMYXlvdXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UmVjdDsgfQot
ICAgICAgICB2b2lkIHNldERlc3RSZWN0KGNvbnN0IExheW91dFJlY3QmIGRlc3RSZWN0KQorICAg
ICAgICBJbnRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UmVjdDsgfQorICAg
ICAgICB2b2lkIHNldERlc3RSZWN0KGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2Rlc3RSZWN0ID0gZGVzdFJlY3Q7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBSZXR1cm5zIHRoZSBwaGFzZSByZWxhdGl2ZSB0byB0aGUgZGVzdGluYXRpb24gcmVjdGFu
Z2xlLgotICAgICAgICBMYXlvdXRQb2ludCByZWxhdGl2ZVBoYXNlKCkgY29uc3Q7CisgICAgICAg
IEludFBvaW50IHJlbGF0aXZlUGhhc2UoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIExheW91
dFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfSAgIAotICAgICAgICB2b2lk
IHNldFBoYXNlKGNvbnN0IExheW91dFBvaW50JiBwaGFzZSkKKyAgICAgICAgSW50UG9pbnQgcGhh
c2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9ICAgCisgICAgICAgIHZvaWQgc2V0UGhhc2Uo
Y29uc3QgSW50UG9pbnQmIHBoYXNlKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3BoYXNlID0g
cGhhc2U7CiAgICAgICAgIH0KIAotICAgICAgICBMYXlvdXRTaXplIHRpbGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlU2l6ZTsgfSAgICAKLSAgICAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25z
dCBMYXlvdXRTaXplJiB0aWxlU2l6ZSkKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0gICAgCisgICAgICAgIHZvaWQgc2V0VGlsZVNpemUoY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fdGlsZVNpemUg
PSB0aWxlU2l6ZTsKICAgICAgICAgfQpAQCAtMTcwLDE0ICsxNzAsMTQgQEAgcHJvdGVjdGVkOgog
ICAgICAgICB2b2lkIHNldE5vUmVwZWF0WChpbnQgeE9mZnNldCk7CiAgICAgICAgIHZvaWQgc2V0
Tm9SZXBlYXRZKGludCB5T2Zmc2V0KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgdXNlRml4ZWRB
dHRhY2htZW50KGNvbnN0IExheW91dFBvaW50JiBhdHRhY2htZW50UG9pbnQpOworICAgICAgICB2
b2lkIHVzZUZpeGVkQXR0YWNobWVudChjb25zdCBJbnRQb2ludCYgYXR0YWNobWVudFBvaW50KTsK
ICAgICAgICAgCi0gICAgICAgIHZvaWQgY2xpcChjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgICAg
IHZvaWQgY2xpcChjb25zdCBJbnRSZWN0Jik7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgTGF5b3V0
UmVjdCBtX2Rlc3RSZWN0OwotICAgICAgICBMYXlvdXRQb2ludCBtX2Rlc3RPcmlnaW47Ci0gICAg
ICAgIExheW91dFBvaW50IG1fcGhhc2U7Ci0gICAgICAgIExheW91dFNpemUgbV90aWxlU2l6ZTsK
KyAgICAgICAgSW50UmVjdCBtX2Rlc3RSZWN0OworICAgICAgICBJbnRQb2ludCBtX2Rlc3RPcmln
aW47CisgICAgICAgIEludFBvaW50IG1fcGhhc2U7CisgICAgICAgIEludFNpemUgbV90aWxlU2l6
ZTsKICAgICB9OwogCiAgICAgdm9pZCBjYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShj
b25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QsIEJhY2tncm91bmRJ
bWFnZUdlb21ldHJ5Jik7CkBAIC0xOTUsOCArMTk1LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNCb3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIExheW91dFNpemUgY2FsY3VsYXRlRmlsbFRpbGVTaXplKGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IExheW91dFNpemUmIHNjYWxlZFBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0Owot
ICAgIExheW91dFNpemUgY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1h
Z2UqLCBjb25zdCBMYXlvdXRTaXplJiBzY2FsZWRQb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdDsK
KyAgICBJbnRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIqLCBjb25z
dCBJbnRTaXplJiBzY2FsZWRQb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdDsKKyAgICBJbnRTaXpl
IGNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhTdHlsZUltYWdlKiwgY29uc3QgSW50
U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3Q7CiAKICAgICBSb3VuZGVkUmVj
dCBnZXRCYWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYsIElubGluZUZsb3dC
b3gqLCBMYXlvdXRVbml0IGlubGluZUJveFdpZHRoLCBMYXlvdXRVbml0IGlubGluZUJveEhlaWdo
dCwKICAgICAgICAgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>