<?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>60209</bug_id>
          
          <creation_ts>2011-05-04 14:12:33 -0700</creation_ts>
          <short_desc>Split findNextLineBreak into a LineBreaker class</short_desc>
          <delta_ts>2011-05-04 17:01:27 -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>All</rep_platform>
          <op_sys>All</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>57779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398245</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-04 14:12:33 -0700</bug_when>
    <thetext>Splitting findNextLineBreak into a separate class will make it much easier to further refactor the giant function by allowing its state to be kept in member variables accessible to new helper functions without having to pass them in giant parameter lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398249</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-04 14:15:11 -0700</bug_when>
    <thetext>Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398265</commentid>
    <comment_count>2</comment_count>
      <attachid>92317</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-04 14:41:08 -0700</bug_when>
    <thetext>Created attachment 92317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398277</commentid>
    <comment_count>3</comment_count>
      <attachid>92317</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-04 14:57:44 -0700</bug_when>
    <thetext>Comment on attachment 92317
Patch

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

Hm... LineBreaker seems like a class of logic, and the actual state will likely end up separate.  Sorta like how BidiStatus is separate from the actual BidiResolver, and the Token is separate from the Tokenizer, etc.  But I think this is moving us in a good direction!

it&apos;s not clear what m_hyphenated and m_clear apply to.  I assume the current line, but it would be nice to make that more clear some how.  Again, tha tmay be part of some later state from state-machine split. :)

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:901
&gt; +    LineBreaker lb(this);

I would have called this lineBreaker. :)

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2333
&gt; +// FIXME: The entire concept of the skipTrailingWhitespace function is flawed, since we really need to be building
&gt; +// line boxes even for containers that may ultimately collapse away. Otherwise we&apos;ll never get positioned
&gt; +// elements quite right. In other words, we need to build this function&apos;s work into the normal line
&gt; +// object iteration process.
&gt; +// NB. this function will insert any floating elements that would otherwise
&gt; +// be skipped but it will not position them.
&gt; +void RenderBlock::LineBreaker::skipTrailingWhitespace(InlineIterator&amp; iterator, const LineInfo&amp; lineInfo)
&gt; +{
&gt; +    while (!iterator.atEnd() &amp;&amp; !requiresLineBox(iterator, lineInfo)) {

I wouldn&apos;t have bothered moving these from their previous location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398280</commentid>
    <comment_count>4</comment_count>
      <attachid>92317</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-04 15:02:37 -0700</bug_when>
    <thetext>Comment on attachment 92317
Patch

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

Thanks for the review! I&apos;m going to take both of your suggestions before landing.

&gt;&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:901
&gt;&gt; +    LineBreaker lb(this);
&gt; 
&gt; I would have called this lineBreaker. :)

Renaming it :)

&gt;&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2333
&gt;&gt; +    while (!iterator.atEnd() &amp;&amp; !requiresLineBox(iterator, lineInfo)) {
&gt; 
&gt; I wouldn&apos;t have bothered moving these from their previous location.

Fair point. It needlessly clutters blame and all...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398293</commentid>
    <comment_count>5</comment_count>
      <attachid>92324</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-04 15:10:20 -0700</bug_when>
    <thetext>Created attachment 92324
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398410</commentid>
    <comment_count>6</comment_count>
      <attachid>92324</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-04 17:01:21 -0700</bug_when>
    <thetext>Comment on attachment 92324
Patch for landing

Clearing flags on attachment: 92324

Committed r85810: &lt;http://trac.webkit.org/changeset/85810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398411</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-04 17:01:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92317</attachid>
            <date>2011-05-04 14:41:08 -0700</date>
            <delta_ts>2011-05-04 15:10:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60209-20110504144107.patch</filename>
            <type>text/plain</type>
            <size>21636</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1Nzg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDUtMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IGZpbmROZXh0TGluZUJyZWFrIGludG8gYSBMaW5l
QnJlYWtlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjAyMDkKKworICAgICAgICBCcmVha2luZyBmaW5kTmV4dExpbmVCcmVhayBpbnRvIGEg
bmV3IGNsYXNzIGluc2lkZSBSZW5kZXJCbG9jay4gQ3VycmVudGx5IGl0J3MgdHJhY2tpbmcKKyAg
ICAgICAgbmVhcmx5IG5vIHN0YXRlLCBidXQgc3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgbW92ZSBz
b21lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMgdXNlZCB0aHJvdWdob3V0CisgICAgICAgIHRoZSBu
ZXh0TGluZUJyZWFrIGZ1bmN0aW9uIGludG8gbWVtYmVyIHZhcmlhYmxlcyB0byBzaW1wbGlmeSBi
cmVha2luZyBvZmYgaGVscGVyIGZ1bmN0aW9ucyBmcm9tCisgICAgICAgIHRoZSBibG9hdGVkIGZ1
bmN0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGp1c3QgbW92aW5n
IGNvZGUgYXJvdW5kLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpMaW5lQnJlYWtlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OmxpbmVXYXNIeXBoZW5hdGVkKTogQWNjZXNz
b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnBvc2l0aW9u
ZWRPYmplY3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJy
ZWFrZXI6OmNsZWFyKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnNr
aXBUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Okxp
bmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorCiAyMDExLTA1LTA0ICBUYW8gQmFp
ICA8bWljaGFlbGJhaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
S2lsemVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDg1NzYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5NCw2ICs0OTQsMzIgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAv
LyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucycgaW1wbGVtZW50YXRpb25zIGFyZSBpbiBSZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwLgorICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlbmRlclRleHQqLCBM
YXp5TGluZUJyZWFrSXRlcmF0b3I+IExpbmVCcmVha0l0ZXJhdG9ySW5mbzsKKyAgICBjbGFzcyBM
aW5lQnJlYWtlciB7CisgICAgcHVibGljOgorICAgICAgICBMaW5lQnJlYWtlcihSZW5kZXJCbG9j
ayogYmxvY2spCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBJbmxpbmVJdGVyYXRvciBuZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYsIExpbmVJbmZvJiwgTGluZUJyZWFrSXRlcmF0
b3JJbmZvJiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOworCisg
ICAgICAgIGJvb2wgbGluZVdhc0h5cGhlbmF0ZWQoKSB7IHJldHVybiBtX2h5cGhlbmF0ZWQ7IH0K
KyAgICAgICAgY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdGlvbmVkT2JqZWN0cygpIHsg
cmV0dXJuIG1fcG9zaXRpb25lZE9iamVjdHM7IH0KKyAgICAgICAgRUNsZWFyIGNsZWFyKCkgeyBy
ZXR1cm4gbV9jbGVhcjsgfQorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRv
ciYsIGNvbnN0IExpbmVJbmZvJik7CisgICAgICAgIHZvaWQgc2tpcExlYWRpbmdXaGl0ZXNwYWNl
KElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExpbmVJbmZvJiwgRmxvYXRpbmdPYmplY3QqIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVXaWR0aCYpOworICAgICAgICAKKyAgICAgICAg
UmVuZGVyQmxvY2sqIG1fYmxvY2s7CisgICAgICAgIGJvb2wgbV9oeXBoZW5hdGVkOworICAgICAg
ICBFQ2xlYXIgbV9jbGVhcjsKKyAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+IG1fcG9zaXRpb25l
ZE9iamVjdHM7CisgICAgfTsKKyAgICAKICAgICB2b2lkIGNoZWNrRmxvYXRzSW5DbGVhbkxpbmUo
Um9vdElubGluZUJveCosIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYsIHNpemVfdCYgZmxvYXRJbmRl
eCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9vbCYgZGlydGllZEJ5RmxvYXQpOwogICAg
IFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUluZm8mLCBib29sJiBm
dWxsTGF5b3V0LCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZs
b2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBhaW50VG9w
LCBpbnQmIHJlcGFpbnRCb3R0b20pOwpAQCAtNTAyLDExICs1MjgsNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgSW5s
aW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1
cywKICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQm
IGVuZFlQb3MsIGludCYgcmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAotICAgIHZv
aWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYsIGNvbnN0IExpbmVJbmZv
Jik7Ci0gICAgdm9pZCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiwg
Y29uc3QgTGluZUluZm8mLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSwgTGluZVdpZHRoJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVuZGVyVGV4dCosIExhenlM
aW5lQnJlYWtJdGVyYXRvcj4gTGluZUJyZWFrSXRlcmF0b3JJbmZvOwotICAgIElubGluZUl0ZXJh
dG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYsIExpbmVJbmZvJiwgTGlu
ZUJyZWFrSXRlcmF0b3JJbmZvJiwgYm9vbCYgaHlwaGVuYXRlZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFQ2xlYXIqLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgVmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdGlvbmVkT2JqZWN0cyk7CiAg
ICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNv
bnN0IExpbmVJbmZvJik7CiAgICAgSW5saW5lRmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJlbmRl
ck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5lQm94KiBjaGlsZEJveCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCShyZXZpc2lvbiA4NTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsNiArODk4LDggQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhibwogICAgIExpbmVCcmVha0l0ZXJh
dG9ySW5mbyBsaW5lQnJlYWtJdGVyYXRvckluZm87CiAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hl
IHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKIAorICAgIExpbmVCcmVha2VyIGxiKHRoaXMpOworCiAg
ICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewogICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVj
ayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24gb3IgY2FuIGl0IGJlIG1vdmVk
IHRvIHRoZSBlbmQ/CiAgICAgICAgIGlmIChjaGVja0ZvckVuZExpbmVNYXRjaCAmJiAoZW5kTGlu
ZU1hdGNoZWQgPSBtYXRjaGVkRW5kTGluZShyZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFu
TGluZUJpZGlTdGF0dXMsIGVuZExpbmUsIGVuZExpbmVMb2dpY2FsVG9wLCByZXBhaW50TG9naWNh
bEJvdHRvbSwgcmVwYWludExvZ2ljYWxUb3ApKSkKQEAgLTkwNywxMyArOTA5LDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhibwogCiAgICAgICAgIGxpbmVJbmZvLnNl
dEVtcHR5KHRydWUpOwogCi0gICAgICAgIEVDbGVhciBjbGVhciA9IENOT05FOwotICAgICAgICBi
b29sIGh5cGhlbmF0ZWQ7Ci0gICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPiBwb3NpdGlvbmVkT2Jq
ZWN0czsKLQogICAgICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7CiAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmpl
Y3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOwotICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVh
ayhyZXNvbHZlciwgbGluZUluZm8sIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgaHlwaGVuYXRlZCwg
JmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBwb3NpdGlvbmVkT2JqZWN0cyk7Cisg
ICAgICAgIGVuZCA9IGxiLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCBsaW5lQnJl
YWtJdGVyYXRvckluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAgICBpZiAo
cmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGJlIGNyZWF0aW5nIGFueSBydW5zIGluIGZpbmROZXh0TGluZUJyZWFrIHRvIGJl
Z2luIHdpdGghCiAgICAgICAgICAgICAvLyBPbmNlIEJpZGlSdW5MaXN0IGlzIHNlcGFyYXRlZCBm
cm9tIEJpZGlSZXNvbHZlciB0aGlzIHdpbGwgbm90IGJlIG5lZWRlZC4KQEAgLTkzNyw3ICs5MzUs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKGJvCiAKICAgICAgICAg
ICAgIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4gPSAhbGluZUluZm8ucHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KCkgPyBoYW5kbGVUcmFpbGluZ1NwYWNlcyhiaWRpUnVucywgcmVzb2x2ZXIuY29u
dGV4dCgpKSA6IDA7CiAKLSAgICAgICAgICAgIGlmIChiaWRpUnVucy5ydW5Db3VudCgpICYmIGh5
cGhlbmF0ZWQpCisgICAgICAgICAgICBpZiAoYmlkaVJ1bnMucnVuQ291bnQoKSAmJiBsYi5saW5l
V2FzSHlwaGVuYXRlZCgpKQogICAgICAgICAgICAgICAgIGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RS
dW4oKS0+bV9oYXNIeXBoZW4gPSB0cnVlOwogCiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUg
cnVucyBoYXZlIGJlZW4gb3JkZXJlZCwgd2UgY3JlYXRlIHRoZSBsaW5lIGJveGVzLgpAQCAtOTgx
LDExICs5NzksMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhibwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwb3NpdGlvbmVkT2JqZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
ICAgICBzZXRTdGF0aWNQb3NpdGlvbnModGhpcywgcG9zaXRpb25lZE9iamVjdHNbaV0pOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYi5wb3NpdGlvbmVkT2JqZWN0cygpLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyh0aGlzLCBsYi5w
b3NpdGlvbmVkT2JqZWN0cygpW2ldKTsKIAogICAgICAgICAgICAgbGluZUluZm8uc2V0Rmlyc3RM
aW5lKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld0xpbmUoY2xlYXIpOworICAgICAgICAgICAgbmV3
TGluZShsYi5jbGVhcigpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7CkBAIC0xNTA1LDM4ICsxNTAzLDYgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySQogICAgIHJldHVybiAhaXQuYXRFbmQoKTsK
IH0KIAotLy8gRklYTUU6IFRoZSBlbnRpcmUgY29uY2VwdCBvZiB0aGUgc2tpcFRyYWlsaW5nV2hp
dGVzcGFjZSBmdW5jdGlvbiBpcyBmbGF3ZWQsIHNpbmNlIHdlIHJlYWxseSBuZWVkIHRvIGJlIGJ1
aWxkaW5nCi0vLyBsaW5lIGJveGVzIGV2ZW4gZm9yIGNvbnRhaW5lcnMgdGhhdCBtYXkgdWx0aW1h
dGVseSBjb2xsYXBzZSBhd2F5LiAgT3RoZXJ3aXNlIHdlJ2xsIG5ldmVyIGdldCBwb3NpdGlvbmVk
Ci0vLyBlbGVtZW50cyBxdWl0ZSByaWdodC4gIEluIG90aGVyIHdvcmRzLCB3ZSBuZWVkIHRvIGJ1
aWxkIHRoaXMgZnVuY3Rpb24ncyB3b3JrIGludG8gdGhlIG5vcm1hbCBsaW5lCi0vLyBvYmplY3Qg
aXRlcmF0aW9uIHByb2Nlc3MuCi0vLyBOQi4gdGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhbnkg
ZmxvYXRpbmcgZWxlbWVudHMgdGhhdCB3b3VsZCBvdGhlcndpc2UKLS8vIGJlIHNraXBwZWQgYnV0
IGl0IHdpbGwgbm90IHBvc2l0aW9uIHRoZW0uCi12b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxp
bmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgTGluZUluZm8mIGxp
bmVJbmZvKQotewotICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5l
Qm94KGl0ZXJhdG9yLCBsaW5lSW5mbykpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3Qg
PSBpdGVyYXRvci5tX29iajsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7Ci0g
ICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgc2V0
U3RhdGljUG9zaXRpb25zKHRoaXMsIHRvUmVuZGVyQm94KG9iamVjdCkpOwotICAgICAgICBpdGVy
YXRvci5pbmNyZW1lbnQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OnNraXBMZWFk
aW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8sCi0gICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIExpbmVXaWR0aCYgd2lkdGgpCi17Ci0gICAgd2hpbGUgKCFyZXNvbHZlci5wb3NpdGlvbigp
LmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChyZXNvbHZlci5wb3NpdGlvbigpLCBsaW5lSW5m
bykpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZXNvbHZlci5wb3NpdGlvbigp
Lm1fb2JqOwotICAgICAgICBpZiAob2JqZWN0LT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBw
b3NpdGlvbk5ld0Zsb2F0T25MaW5lKGluc2VydEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9i
amVjdCkpLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCB3aWR0aCk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9iamVjdC0+aXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlv
bnModGhpcywgdG9SZW5kZXJCb3gob2JqZWN0KSk7Ci0gICAgICAgIHJlc29sdmVyLmluY3JlbWVu
dCgpOwotICAgIH0KLSAgICByZXNvbHZlci5jb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotfQot
CiAvLyBUaGlzIGlzIGN1cnJlbnRseSBqdXN0IHVzZWQgZm9yIGxpc3QgbWFya2VycyBhbmQgaW5s
aW5lIGZsb3dzIHRoYXQgaGF2ZSBsaW5lIGJveGVzLiBOZWl0aGVyIHNob3VsZAogLy8gaGF2ZSBh
biBlZmZlY3Qgb24gd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCiBzdGF0aWMg
Ym9vbCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QoUmVuZGVyQmxvY2sqIGJs
b2NrLCBSZW5kZXJPYmplY3QqIG8sIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0
ZSkKQEAgLTE4MDAsMTUgKzE3NjYsMjQgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0ZU1p
ZHBvaW50c0ZvcgogICAgIH0KIH0KIAotSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmRO
ZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJiBsaW5l
SW5mbywgTGluZUJyZWFrSXRlcmF0b3JJbmZvJiBsaW5lQnJlYWtJdGVyYXRvckluZm8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaHlwaGVuYXRl
ZCwgRUNsZWFyKiBjbGVhciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXRpb25lZEJveGVzKQordm9pZCBSZW5kZXJCbG9j
azo6TGluZUJyZWFrZXI6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24o
KS5yb290KCkgPT0gdGhpcyk7CisgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy5jbGVhcigpOworICAg
IG1faHlwaGVuYXRlZCA9IGZhbHNlOworICAgIG1fY2xlYXIgPSBDTk9ORTsKK30KKworSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJiBsaW5lSW5mbywKKyAgICBMaW5lQnJlYWtJ
dGVyYXRvckluZm8mIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgRmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUpCit7CisgICAgcmVzZXQoKTsKKworICAgIEFTU0VSVChyZXNv
bHZlci5wb3NpdGlvbigpLnJvb3QoKSA9PSBtX2Jsb2NrKTsKIAogICAgIGJvb2wgYXBwbGllZFN0
YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLm1fcG9zID4gMDsKICAgICBMaW5lTWlkcG9p
bnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CiAK
LSAgICBMaW5lV2lkdGggd2lkdGgodGhpcywgbGluZUluZm8uaXNGaXJzdExpbmUoKSk7CisgICAg
TGluZVdpZHRoIHdpZHRoKG1fYmxvY2ssIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpOwogCiAgICAg
c2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBsaW5lSW5mbywgbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgd2lkdGgpOwogCkBAIC0xODM4LDIwICsxODEzLDE4IEBAIElubGluZUl0ZXJh
dG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICBib29sIHN0YXJ0aW5nTmV3UGFyYWdy
YXBoID0gbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCk7CiAgICAgbGluZUluZm8u
c2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KGZhbHNlKTsKIAotICAgIGh5cGhlbmF0ZWQgPSBm
YWxzZTsKLQogICAgIGJvb2wgYXV0b1dyYXBXYXNFdmVyVHJ1ZU9uTGluZSA9IGZhbHNlOwogICAg
IGJvb2wgZmxvYXRzRml0T25MaW5lID0gdHJ1ZTsKIAogICAgIC8vIEZpcmVmb3ggYW5kIE9wZXJh
IHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0IGFuIGltYWdlIGluc2lkZSBp
dCB1bmRlcgogICAgIC8vIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8g
bWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLgogICAgIC8vIE5vdCBzdXBwb3J0aW5nIHRo
ZSBxdWlyayBoYXMgY2F1c2VkIHVzIHRvIG1pcy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2Vl
IEJ1Z3ppbGxhIDEwNTE3LikKLSAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVhayA9ICFkb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8fCAhc3R5bGUoKS0+bG9naWNh
bFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKKyAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVh
ayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSB8fCAhbV9ibG9jay0+aXNU
YWJsZUNlbGwoKSB8fCAhbV9ibG9jay0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKTsKIAotICAgIEVXaGl0ZVNwYWNlIGN1cnJXUyA9IHN0eWxlKCktPndoaXRlU3Bh
Y2UoKTsKKyAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBtX2Jsb2NrLT5zdHlsZSgpLT53aGl0ZVNw
YWNlKCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldTOwogICAgIHdoaWxlIChjdXJy
ZW50Lm1fb2JqKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGJpZGlOZXh0KHRoaXMs
IGN1cnJlbnQubV9vYmopOworICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRpTmV4dCht
X2Jsb2NrLCBjdXJyZW50Lm1fb2JqKTsKIAogICAgICAgICBjdXJyV1MgPSBjdXJyZW50Lm1fb2Jq
LT5pc1JlcGxhY2VkKCkgPyBjdXJyZW50Lm1fb2JqLT5wYXJlbnQoKS0+c3R5bGUoKS0+d2hpdGVT
cGFjZSgpIDogY3VycmVudC5tX29iai0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpOwogICAgICAgICBs
YXN0V1MgPSBsYXN0LT5pc1JlcGxhY2VkKCkgPyBsYXN0LT5wYXJlbnQoKS0+c3R5bGUoKS0+d2hp
dGVTcGFjZSgpIDogbGFzdC0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpOwpAQCAtMTg4MiwyMCArMTg1
NSwyMCBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAg
ICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgbGluZUlu
Zm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KHRydWUpOwogCi0gICAgICAgICAgICAgICAg
aWYgKCFsaW5lSW5mby5pc0VtcHR5KCkgJiYgY2xlYXIpCi0gICAgICAgICAgICAgICAgICAgICpj
bGVhciA9IGN1cnJlbnQubV9vYmotPnN0eWxlKCktPmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
aWYgKCFsaW5lSW5mby5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIG1fY2xlYXIgPSBj
dXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZ290byBlbmQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3VycmVudC5tX29iai0+aXNG
bG9hdGluZygpKSB7CiAgICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0Qm94ID0gdG9SZW5kZXJC
b3goY3VycmVudC5tX29iaik7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGluc2Vy
dEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gbV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOwogICAgICAgICAgICAg
Ly8gY2hlY2sgaWYgaXQgZml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgLy8g
SWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAg
ICAgICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykK
LSAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGluZShsb2dp
Y2FsV2lkdGhGb3JGbG9hdChmKSkpIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0
T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHdpZHRoKTsKKyAgICAgICAgICAg
IGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGluZShtX2Jsb2NrLT5sb2dpY2Fs
V2lkdGhGb3JGbG9hdChmKSkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT5wb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHdpZHRoKTsKICAgICAg
ICAgICAgICAgICBpZiAobEJyZWFrLm1fb2JqID09IGN1cnJlbnQubV9vYmopIHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFsQnJlYWsubV9wb3MpOwogICAgICAgICAgICAgICAgICAgICBs
QnJlYWsuaW5jcmVtZW50KCk7CkBAIC0xOTA4LDExICsxODgxLDExIEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3goY3VycmVudC5tX29iaik7CiAgICAgICAgICAgICBib29sIGlzSW5saW5lVHlw
ZSA9IGJveC0+c3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCk7CiAgICAgICAg
ICAgICBpZiAoIWlzSW5saW5lVHlwZSkKLSAgICAgICAgICAgICAgICBib3gtPmxheWVyKCktPnNl
dFN0YXRpY0lubGluZVBvc2l0aW9uKGJvcmRlckFuZFBhZGRpbmdTdGFydCgpKTsKKyAgICAgICAg
ICAgICAgICBib3gtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBvc2l0aW9uKG1fYmxvY2stPmJv
cmRlckFuZFBhZGRpbmdTdGFydCgpKTsKICAgICAgICAgICAgIGVsc2UgIHsKICAgICAgICAgICAg
ICAgICAvLyBJZiBvdXIgb3JpZ2luYWwgZGlzcGxheSB3YXMgYW4gSU5MSU5FIHR5cGUsIHRoZW4g
d2UgY2FuIGdvIGFoZWFkCiAgICAgICAgICAgICAgICAgLy8gYW5kIGRldGVybWluZSBvdXIgc3Rh
dGljIHkgcG9zaXRpb24gbm93LgotICAgICAgICAgICAgICAgIGJveC0+bGF5ZXIoKS0+c2V0U3Rh
dGljQmxvY2tQb3NpdGlvbihsb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJveC0+
bGF5ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpZ25vcmluZyBzcGFj
ZXMsIHdlIGhhdmUgdG8gc3RvcCBhbmQgaW5jbHVkZSB0aGlzIG9iamVjdCBhbmQKQEAgLTE5MjYs
NyArMTg5OSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmFwcGVuZEJv
eElmTmVlZGVkKGJveCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwb3Np
dGlvbmVkQm94ZXMuYXBwZW5kKGJveCk7CisgICAgICAgICAgICAgICAgbV9wb3NpdGlvbmVkT2Jq
ZWN0cy5hcHBlbmQoYm94KTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm1fb2JqLT5pc1Jl
bmRlcklubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBSaWdodCBub3csIHdlIHNob3VsZCBvbmx5
IGVuY291bnRlciBlbXB0eSBpbmxpbmVzIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWN1cnJl
bnQubV9vYmotPmZpcnN0Q2hpbGQoKSk7CkBAIC0xOTQzLDggKzE5MTYsOCBAQCBJbmxpbmVJdGVy
YXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgIHRyYWls
aW5nT2JqZWN0cy5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5l
TWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgY3VycmVudC5tX29iaiwgMCkpOyAvLyBT
dG9wIGlnbm9yaW5nIHNwYWNlcy4KICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGlu
ZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIGN1cnJlbnQubV9vYmosIDApKTsgLy8g
U3RhcnQgaWdub3JpbmcgYWdhaW4uCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSgp
LT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiByZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09IGN1
cnJlbnQubV9vYmoKLSAgICAgICAgICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VB
ZnRlclN0YXJ0T2JqZWN0KHRoaXMsIGN1cnJlbnQubV9vYmosIGxpbmVNaWRwb2ludFN0YXRlKSkg
eworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ibG9jay0+c3R5bGUoKS0+Y29sbGFwc2VX
aGl0ZVNwYWNlKCkgJiYgcmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiA9PSBjdXJyZW50Lm1fb2Jq
CisgICAgICAgICAgICAgICAgICAgICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9i
amVjdChtX2Jsb2NrLCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFya2Vycywgd2Ugc3RhcnQgaWdub3Jp
bmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgICAgICAgICAvLyBh
ZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKQEAgLTE5NzQsOSArMTk0Nyw5
IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKIAogICAgICAgICAg
ICAgLy8gT3B0aW1pemUgZm9yIGEgY29tbW9uIGNhc2UuIElmIHdlIGNhbid0IGZpbmQgd2hpdGVz
cGFjZSBhZnRlciB0aGUgbGlzdAogICAgICAgICAgICAgLy8gaXRlbSwgdGhlbiB0aGlzIGlzIGFs
bCBtb290LgotICAgICAgICAgICAgaW50IHJlcGxhY2VkTG9naWNhbFdpZHRoID0gbG9naWNhbFdp
ZHRoRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbWFyZ2luU3RhcnRGb3JDaGlsZChyZXBsYWNlZEJv
eCkgKyBtYXJnaW5FbmRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgo
Y3VycmVudC5tX29iaik7CisgICAgICAgICAgICBpbnQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBt
X2Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLT5tYXJn
aW5TdGFydEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2stPm1hcmdpbkVuZEZvckNoaWxk
KHJlcGxhY2VkQm94KSArIGlubGluZUxvZ2ljYWxXaWR0aChjdXJyZW50Lm1fb2JqKTsKICAgICAg
ICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5pc0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVz
cGFjZUFmdGVyU3RhcnRPYmplY3QodGhpcywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3Rh
dGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmxvY2stPnN0eWxlKCktPmNvbGxhcHNlV2hp
dGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2Nr
LCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRv
IG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNw
YWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKQEAgLTIxMTYsOCArMjA4OSw4IEBAIElubGluZUl0
ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lV2FzVG9vV2lkZSB8fCAhd2lkdGgu
Zml0c09uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkh5cGhl
bmF0ZSAmJiAhd2lkdGguZml0c09uTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5cGhl
bmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0
U3BhY2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRt
cFcsIHdpZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNw
YWNlLCBsYXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uLCBoeXBoZW5hdGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGh5cGhlbmF0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUh5cGhl
bmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRCZWZv
cmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2UsIGN1cnJlbnQu
bV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRtcFcsIHdpZHRoLmF2YWls
YWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBsYXN0U3BhY2VX
b3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uLCBtX2h5
cGhlbmF0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9oeXBoZW5h
dGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsQnJlYWsuYXRUZXh0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKQEAgLTIxMzAsNyArMjEwMyw3
IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobEJyZWFrLm1fb2JqICYmIGxCcmVhay5tX3BvcyAmJiBsQnJlYWsubV9v
YmotPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChsQnJlYWsubV9vYmopLT50ZXh0TGVuZ3RoKCkg
JiYgdG9SZW5kZXJUZXh0KGxCcmVhay5tX29iaiktPmNoYXJhY3RlcnMoKVtsQnJlYWsubV9wb3Mg
LSAxXSA9PSBzb2Z0SHlwaGVuICYmIHN0eWxlLT5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGhlbmF0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2h5cGhlbmF0ZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOyAvLyBEaWRuJ3QgZml0LiBKdW1wIHRvIHRoZSBl
bmQuCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghYmV0d2VlbldvcmRzIHx8IChtaWRXb3JkQnJlYWsgJiYgIWF1dG9XcmFw
KSkKQEAgLTIyMzIsMTIgKzIyMDUsMTIgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZQogCiAgICAgICAgICAgICBpZiAoIXdpZHRoLmZpdHNPbkxpbmUoKSkgewogICAg
ICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUpCi0gICAgICAgICAgICAgICAgICAgIHRyeUh5
cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRC
ZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2UsIGN1cnJl
bnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRtcFcsIHdpZHRoLmF2
YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBsYXN0U3Bh
Y2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uLCBo
eXBoZW5hdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5
bGUtPmxvY2FsZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+aHlw
aGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFjZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3Vy
cmVudFdpZHRoKCkgLSBhZGRpdGlvbmFsVG1wVywgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNG
aXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJl
YWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIWh5cGhlbmF0ZWQgJiYgbEJyZWFrLnByZXZpb3VzSW5TYW1lTm9k
ZSgpID09IHNvZnRIeXBoZW4gJiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkKLSAg
ICAgICAgICAgICAgICAgICAgaHlwaGVuYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYg
KCFtX2h5cGhlbmF0ZWQgJiYgbEJyZWFrLnByZXZpb3VzSW5TYW1lTm9kZSgpID09IHNvZnRIeXBo
ZW4gJiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9oeXBoZW5hdGVkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChoeXBoZW5hdGVk
KQorICAgICAgICAgICAgICAgIGlmIChtX2h5cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZW5kOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTIzMTEsNyArMjI4
NCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICBlbmQ6CiAg
ICAgaWYgKGxCcmVhayA9PSByZXNvbHZlci5wb3NpdGlvbigpICYmICghbEJyZWFrLm1fb2JqIHx8
ICFsQnJlYWsubV9vYmotPmlzQlIoKSkpIHsKICAgICAgICAgLy8gd2UganVzdCBhZGQgYXMgbXVj
aCBhcyBwb3NzaWJsZQotICAgICAgICBpZiAoc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSkg
eworICAgICAgICBpZiAobV9ibG9jay0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IHJlYWxseSB1bmRlcnN0YW5kIHRoaXMgY2FzZS4K
ICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fcG9zKSB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNhbGwgbW92ZVRvIHdoaWNoIHdvdWxkIGNsZWFyIG1fbmV4dEJyZWFr
YWJsZVBvc2l0aW9uCkBAIC0yMzQ5LDYgKzIzMjIsMzggQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVy
QmxvY2s6OmZpbmROZXh0TGluZQogICAgIHJldHVybiBsQnJlYWs7CiB9CiAKKy8vIEZJWE1FOiBU
aGUgZW50aXJlIGNvbmNlcHQgb2YgdGhlIHNraXBUcmFpbGluZ1doaXRlc3BhY2UgZnVuY3Rpb24g
aXMgZmxhd2VkLCBzaW5jZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBidWlsZGluZworLy8gbGluZSBi
b3hlcyBldmVuIGZvciBjb250YWluZXJzIHRoYXQgbWF5IHVsdGltYXRlbHkgY29sbGFwc2UgYXdh
eS4gT3RoZXJ3aXNlIHdlJ2xsIG5ldmVyIGdldCBwb3NpdGlvbmVkCisvLyBlbGVtZW50cyBxdWl0
ZSByaWdodC4gSW4gb3RoZXIgd29yZHMsIHdlIG5lZWQgdG8gYnVpbGQgdGhpcyBmdW5jdGlvbidz
IHdvcmsgaW50byB0aGUgbm9ybWFsIGxpbmUKKy8vIG9iamVjdCBpdGVyYXRpb24gcHJvY2Vzcy4K
Ky8vIE5CLiB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFueSBmbG9hdGluZyBlbGVtZW50cyB0
aGF0IHdvdWxkIG90aGVyd2lzZQorLy8gYmUgc2tpcHBlZCBidXQgaXQgd2lsbCBub3QgcG9zaXRp
b24gdGhlbS4KK3ZvaWQgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpza2lwVHJhaWxpbmdXaGl0
ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZv
KQoreworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0
ZXJhdG9yLCBsaW5lSW5mbykpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBpdGVy
YXRvci5tX29iajsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7CisgICAgICAg
ICAgICBtX2Jsb2NrLT5pbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAg
c2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAg
ICBpdGVyYXRvci5pbmNyZW1lbnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6Okxp
bmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNv
bHZlciwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgTGluZVdpZHRoJiB3aWR0aCkKK3sKKyAgICB3aGlsZSAoIXJlc29sdmVy
LnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9u
KCksIGxpbmVJbmZvKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlc29sdmVy
LnBvc2l0aW9uKCkubV9vYmo7CisgICAgICAgIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkKKyAg
ICAgICAgICAgIG1fYmxvY2stPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobV9ibG9jay0+aW5zZXJ0
RmxvYXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSksIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUsIHdpZHRoKTsKKyAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkK
KyAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCB0b1JlbmRlckJveChvYmpl
Y3QpKTsKKyAgICAgICAgcmVzb2x2ZXIuaW5jcmVtZW50KCk7CisgICAgfQorICAgIHJlc29sdmVy
LmNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Cit9CisKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92
ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCkKIHsKICAgICBpbnQgZW5kUGFkZGluZyA9IGhhc092
ZXJmbG93Q2xpcCgpID8gcGFkZGluZ0VuZCgpIDogMDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92324</attachid>
            <date>2011-05-04 15:10:20 -0700</date>
            <delta_ts>2011-05-04 17:01:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60209-20110504151019.patch</filename>
            <type>text/plain</type>
            <size>20323</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1Nzg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDUtMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgorCisgICAgICAgIFNwbGl0IGZpbmROZXh0TGluZUJyZWFrIGludG8gYSBMaW5lQnJl
YWtlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAyMDkKKworICAgICAgICBCcmVha2luZyBmaW5kTmV4dExpbmVCcmVhayBpbnRvIGEgbmV3
IGNsYXNzIGluc2lkZSBSZW5kZXJCbG9jay4gQ3VycmVudGx5IGl0J3MgdHJhY2tpbmcKKyAgICAg
ICAgbmVhcmx5IG5vIHN0YXRlLCBidXQgc3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgbW92ZSBzb21l
IG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMgdXNlZCB0aHJvdWdob3V0CisgICAgICAgIHRoZSBuZXh0
TGluZUJyZWFrIGZ1bmN0aW9uIGludG8gbWVtYmVyIHZhcmlhYmxlcyB0byBzaW1wbGlmeSBicmVh
a2luZyBvZmYgaGVscGVyIGZ1bmN0aW9ucyBmcm9tCisgICAgICAgIHRoZSBibG9hdGVkIGZ1bmN0
aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGp1c3QgbW92aW5nIGNv
ZGUgYXJvdW5kLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpMaW5lQnJlYWtlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OmxpbmVXYXNIeXBoZW5hdGVkKTogQWNjZXNzb3Iu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnBvc2l0aW9uZWRP
YmplY3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFr
ZXI6OmNsZWFyKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZs
b2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnNraXBU
cmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkxpbmVC
cmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkxpbmVCcmVha2VyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorCiAyMDExLTA1LTA0ICBSb2IgQnVpcyAg
PHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gODU3ODgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtNDk0LDYgKzQ5NCwzMiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFRoZSBmb2xsb3dp
bmcgZnVuY3Rpb25zJyBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGluZUxheW91
dC5jcHAuCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVuZGVyVGV4dCosIExhenlMaW5lQnJlYWtJ
dGVyYXRvcj4gTGluZUJyZWFrSXRlcmF0b3JJbmZvOworICAgIGNsYXNzIExpbmVCcmVha2VyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIExpbmVCcmVha2VyKFJlbmRlckJsb2NrKiBibG9jaykKKyAg
ICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIElubGluZUl0ZXJhdG9yIG5leHRMaW5lQnJlYWsoSW5s
aW5lQmlkaVJlc29sdmVyJiwgTGluZUluZm8mLCBMaW5lQnJlYWtJdGVyYXRvckluZm8mLCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CisKKyAgICAgICAgYm9vbCBs
aW5lV2FzSHlwaGVuYXRlZCgpIHsgcmV0dXJuIG1faHlwaGVuYXRlZDsgfQorICAgICAgICBjb25z
dCBWZWN0b3I8UmVuZGVyQm94Kj4mIHBvc2l0aW9uZWRPYmplY3RzKCkgeyByZXR1cm4gbV9wb3Np
dGlvbmVkT2JqZWN0czsgfQorICAgICAgICBFQ2xlYXIgY2xlYXIoKSB7IHJldHVybiBtX2NsZWFy
OyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiwgY29uc3QgTGlu
ZUluZm8mKTsKKyAgICAgICAgdm9pZCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJl
c29sdmVyJiwgY29uc3QgTGluZUluZm8mLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgTGluZVdpZHRoJik7CisgICAgICAgIAorICAgICAgICBSZW5kZXJCbG9jayog
bV9ibG9jazsKKyAgICAgICAgYm9vbCBtX2h5cGhlbmF0ZWQ7CisgICAgICAgIEVDbGVhciBtX2Ns
ZWFyOworICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gbV9wb3NpdGlvbmVkT2JqZWN0czsKKyAg
ICB9OworICAgIAogICAgIHZvaWQgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5saW5lQm94
KiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+Jiwgc2l6ZV90JiBmbG9hdEluZGV4LCBib29sJiBlbmNv
dW50ZXJlZE5ld0Zsb2F0LCBib29sJiBkaXJ0aWVkQnlGbG9hdCk7CiAgICAgUm9vdElubGluZUJv
eCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lSW5mbyYsIGJvb2wmIGZ1bGxMYXlvdXQsIElu
bGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25l
ZCYgbnVtQ2xlYW5GbG9hdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWlu
dEJvdHRvbSk7CkBAIC01MDIsMTEgKzUyOCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtYXRjaGVk
RW5kTGluZShjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYg
ZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgUm9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcywgaW50
JiByZXBhaW50Qm90dG9tLCBpbnQmIHJlcGFpbnRUb3ApOwogCi0gICAgdm9pZCBza2lwVHJhaWxp
bmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiwgY29uc3QgTGluZUluZm8mKTsKLSAgICB2b2lk
IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMaW5lSW5m
byYsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBMaW5lV2lkdGgm
KTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxSZW5kZXJUZXh0KiwgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yPiBMaW5lQnJlYWtJdGVyYXRvckluZm87Ci0gICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRM
aW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgTGluZUluZm8mLCBMaW5lQnJlYWtJdGVyYXRv
ckluZm8mLCBib29sJiBoeXBoZW5hdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVDbGVhciosIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
LCBWZWN0b3I8UmVuZGVyQm94Kj4mIHBvc2l0aW9uZWRPYmplY3RzKTsKICAgICBSb290SW5saW5l
Qm94KiBjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8m
KTsKICAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgY29u
c3QgTGluZUluZm8mLCBJbmxpbmVCb3gqIGNoaWxkQm94KTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9u
IDg1Nzg4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OCw2ICs4OTgsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRSdW5zQW5kRmxvYXRzKGJvCiAgICAgTGluZUJyZWFrSXRlcmF0b3JJbmZvIGxpbmVC
cmVha0l0ZXJhdG9ySW5mbzsKICAgICBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUgdmVydGljYWxQb3Np
dGlvbkNhY2hlOwogCisgICAgTGluZUJyZWFrZXIgbGluZUJyZWFrZXIodGhpcyk7CisKICAgICB3
aGlsZSAoIWVuZC5hdEVuZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5l
Y2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8g
dGhlIGVuZD8KICAgICAgICAgaWYgKGNoZWNrRm9yRW5kTGluZU1hdGNoICYmIChlbmRMaW5lTWF0
Y2hlZCA9IG1hdGNoZWRFbmRMaW5lKHJlc29sdmVyLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5l
QmlkaVN0YXR1cywgZW5kTGluZSwgZW5kTGluZUxvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90
dG9tLCByZXBhaW50TG9naWNhbFRvcCkpKQpAQCAtOTA3LDEzICs5MDksOSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKGJvCiAKICAgICAgICAgbGluZUluZm8uc2V0RW1w
dHkodHJ1ZSk7CiAKLSAgICAgICAgRUNsZWFyIGNsZWFyID0gQ05PTkU7Ci0gICAgICAgIGJvb2wg
aHlwaGVuYXRlZDsKLSAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+IHBvc2l0aW9uZWRPYmplY3Rz
OwotCiAgICAgICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAobV9mbG9hdGluZ09iamVjdHMg
JiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpLmxhc3QoKSA6IDA7Ci0gICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJl
c29sdmVyLCBsaW5lSW5mbywgbGluZUJyZWFrSXRlcmF0b3JJbmZvLCBoeXBoZW5hdGVkLCAmY2xl
YXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHBvc2l0aW9uZWRPYmplY3RzKTsKKyAgICAg
ICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIGxp
bmVCcmVha0l0ZXJhdG9ySW5mbywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAg
IGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJlYWsg
dG8gYmVnaW4gd2l0aCEKICAgICAgICAgICAgIC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJh
dGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMgd2lsbCBub3QgYmUgbmVlZGVkLgpAQCAtOTM3LDcg
KzkzNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoYm8KIAogICAg
ICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biA9ICFsaW5lSW5mby5wcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkoKSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5zLCByZXNvbHZl
ci5jb250ZXh0KCkpIDogMDsKIAotICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1bkNvdW50KCkg
JiYgaHlwaGVuYXRlZCkKKyAgICAgICAgICAgIGlmIChiaWRpUnVucy5ydW5Db3VudCgpICYmIGxp
bmVCcmVha2VyLmxpbmVXYXNIeXBoZW5hdGVkKCkpCiAgICAgICAgICAgICAgICAgYmlkaVJ1bnMu
bG9naWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7CiAKICAgICAgICAgICAgIC8v
IE5vdyB0aGF0IHRoZSBydW5zIGhhdmUgYmVlbiBvcmRlcmVkLCB3ZSBjcmVhdGUgdGhlIGxpbmUg
Ym94ZXMuCkBAIC05ODEsMTEgKzk3OSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5z
QW5kRmxvYXRzKGJvCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc2l0aW9uZWRPYmplY3RzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyh0aGlzLCBwb3NpdGlvbmVkT2Jq
ZWN0c1tpXSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCcmVha2Vy
LnBvc2l0aW9uZWRPYmplY3RzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgc2V0U3Rh
dGljUG9zaXRpb25zKHRoaXMsIGxpbmVCcmVha2VyLnBvc2l0aW9uZWRPYmplY3RzKClbaV0pOwog
CiAgICAgICAgICAgICBsaW5lSW5mby5zZXRGaXJzdExpbmUoZmFsc2UpOwotICAgICAgICAgICAg
bmV3TGluZShjbGVhcik7CisgICAgICAgICAgICBuZXdMaW5lKGxpbmVCcmVha2VyLmNsZWFyKCkp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290
Qm94KCkpIHsKQEAgLTE1MDYsMzIgKzE1MDQsMzIgQEAgYm9vbCBSZW5kZXJCbG9jazo6Z2VuZXJh
dGVzTGluZUJveGVzRm9ySQogfQogCiAvLyBGSVhNRTogVGhlIGVudGlyZSBjb25jZXB0IG9mIHRo
ZSBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlIGZ1bmN0aW9uIGlzIGZsYXdlZCwgc2luY2Ugd2UgcmVh
bGx5IG5lZWQgdG8gYmUgYnVpbGRpbmcKLS8vIGxpbmUgYm94ZXMgZXZlbiBmb3IgY29udGFpbmVy
cyB0aGF0IG1heSB1bHRpbWF0ZWx5IGNvbGxhcHNlIGF3YXkuICBPdGhlcndpc2Ugd2UnbGwgbmV2
ZXIgZ2V0IHBvc2l0aW9uZWQKLS8vIGVsZW1lbnRzIHF1aXRlIHJpZ2h0LiAgSW4gb3RoZXIgd29y
ZHMsIHdlIG5lZWQgdG8gYnVpbGQgdGhpcyBmdW5jdGlvbidzIHdvcmsgaW50byB0aGUgbm9ybWFs
IGxpbmUKKy8vIGxpbmUgYm94ZXMgZXZlbiBmb3IgY29udGFpbmVycyB0aGF0IG1heSB1bHRpbWF0
ZWx5IGNvbGxhcHNlIGF3YXkuIE90aGVyd2lzZSB3ZSdsbCBuZXZlciBnZXQgcG9zaXRpb25lZAor
Ly8gZWxlbWVudHMgcXVpdGUgcmlnaHQuIEluIG90aGVyIHdvcmRzLCB3ZSBuZWVkIHRvIGJ1aWxk
IHRoaXMgZnVuY3Rpb24ncyB3b3JrIGludG8gdGhlIG5vcm1hbCBsaW5lCiAvLyBvYmplY3QgaXRl
cmF0aW9uIHByb2Nlc3MuCiAvLyBOQi4gdGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhbnkgZmxv
YXRpbmcgZWxlbWVudHMgdGhhdCB3b3VsZCBvdGhlcndpc2UKIC8vIGJlIHNraXBwZWQgYnV0IGl0
IHdpbGwgbm90IHBvc2l0aW9uIHRoZW0uCi12b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdX
aGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgTGluZUluZm8mIGxpbmVJ
bmZvKQordm9pZCBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnNraXBUcmFpbGluZ1doaXRlc3Bh
Y2UoSW5saW5lSXRlcmF0b3ImIGl0ZXJhdG9yLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCiB7
CiAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3goaXRlcmF0
b3IsIGxpbmVJbmZvKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGl0ZXJhdG9y
Lm1fb2JqOwogICAgICAgICBpZiAob2JqZWN0LT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAg
IGluc2VydEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAgICAgICAg
bV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHNldFN0
YXRpY1Bvc2l0aW9ucyh0aGlzLCB0b1JlbmRlckJveChvYmplY3QpKTsKKyAgICAgICAgICAgIHNl
dFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCB0b1JlbmRlckJveChvYmplY3QpKTsKICAgICAgICAg
aXRlcmF0b3IuaW5jcmVtZW50KCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpza2lw
TGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgTGlu
ZUluZm8mIGxpbmVJbmZvLAotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBMaW5lV2lkdGgmIHdpZHRoKQordm9pZCBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6
OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25z
dCBMaW5lSW5mbyYgbGluZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBMaW5lV2lkdGgmIHdpZHRoKQogewogICAgIHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24o
KS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIucG9zaXRpb24oKSwgbGluZUlu
Zm8pKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24o
KS5tX29iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAg
cG9zaXRpb25OZXdGbG9hdE9uTGluZShpbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChv
YmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgd2lkdGgpOworICAgICAgICAgICAg
bV9ibG9jay0+cG9zaXRpb25OZXdGbG9hdE9uTGluZShtX2Jsb2NrLT5pbnNlcnRGbG9hdGluZ09i
amVjdCh0b1JlbmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgd2lk
dGgpOwogICAgICAgICBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKQotICAgICAgICAg
ICAgc2V0U3RhdGljUG9zaXRpb25zKHRoaXMsIHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAg
ICAgICAgc2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOwog
ICAgICAgICByZXNvbHZlci5pbmNyZW1lbnQoKTsKICAgICB9CiAgICAgcmVzb2x2ZXIuY29tbWl0
RXhwbGljaXRFbWJlZGRpbmcoKTsKQEAgLTE4MDAsMTUgKzE3OTgsMjQgQEAgdm9pZCBUcmFpbGlu
Z09iamVjdHM6OnVwZGF0ZU1pZHBvaW50c0ZvcgogICAgIH0KIH0KIAotSW5saW5lSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIsIExpbmVJbmZvJiBsaW5lSW5mbywgTGluZUJyZWFrSXRlcmF0b3JJbmZvJiBsaW5lQnJlYWtJ
dGVyYXRvckluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiBjbGVhciwgRmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUsIFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXRpb25lZEJveGVz
KQordm9pZCBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQo
cmVzb2x2ZXIucG9zaXRpb24oKS5yb290KCkgPT0gdGhpcyk7CisgICAgbV9wb3NpdGlvbmVkT2Jq
ZWN0cy5jbGVhcigpOworICAgIG1faHlwaGVuYXRlZCA9IGZhbHNlOworICAgIG1fY2xlYXIgPSBD
Tk9ORTsKK30KKworSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJiBsaW5lSW5m
bywKKyAgICBMaW5lQnJlYWtJdGVyYXRvckluZm8mIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgRmxv
YXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCit7CisgICAgcmVzZXQoKTsK
KworICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlvbigpLnJvb3QoKSA9PSBtX2Jsb2NrKTsKIAog
ICAgIGJvb2wgYXBwbGllZFN0YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLm1fcG9zID4g
MDsKICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5t
aWRwb2ludFN0YXRlKCk7CiAKLSAgICBMaW5lV2lkdGggd2lkdGgodGhpcywgbGluZUluZm8uaXNG
aXJzdExpbmUoKSk7CisgICAgTGluZVdpZHRoIHdpZHRoKG1fYmxvY2ssIGxpbmVJbmZvLmlzRmly
c3RMaW5lKCkpOwogCiAgICAgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBsaW5lSW5m
bywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgd2lkdGgpOwogCkBAIC0xODM4LDIwICsxODQ1
LDE4IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICBib29s
IHN0YXJ0aW5nTmV3UGFyYWdyYXBoID0gbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KCk7CiAgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KGZhbHNlKTsKIAot
ICAgIGh5cGhlbmF0ZWQgPSBmYWxzZTsKLQogICAgIGJvb2wgYXV0b1dyYXBXYXNFdmVyVHJ1ZU9u
TGluZSA9IGZhbHNlOwogICAgIGJvb2wgZmxvYXRzRml0T25MaW5lID0gdHJ1ZTsKIAogICAgIC8v
IEZpcmVmb3ggYW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0
IGFuIGltYWdlIGluc2lkZSBpdCB1bmRlcgogICAgIC8vIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3Rh
bmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLgogICAgIC8v
IE5vdCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1c2VkIHVzIHRvIG1pcy1yZW5kZXIgc29t
ZSByZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikKLSAgICBib29sIGFsbG93SW1hZ2Vz
VG9CcmVhayA9ICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8
fCAhc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKKyAgICBib29s
IGFsbG93SW1hZ2VzVG9CcmVhayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUo
KSB8fCAhbV9ibG9jay0+aXNUYWJsZUNlbGwoKSB8fCAhbV9ibG9jay0+c3R5bGUoKS0+bG9naWNh
bFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKIAotICAgIEVXaGl0ZVNwYWNlIGN1cnJXUyA9
IHN0eWxlKCktPndoaXRlU3BhY2UoKTsKKyAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBtX2Jsb2Nr
LT5zdHlsZSgpLT53aGl0ZVNwYWNlKCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldT
OwogICAgIHdoaWxlIChjdXJyZW50Lm1fb2JqKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbmV4
dCA9IGJpZGlOZXh0KHRoaXMsIGN1cnJlbnQubV9vYmopOworICAgICAgICBSZW5kZXJPYmplY3Qq
IG5leHQgPSBiaWRpTmV4dChtX2Jsb2NrLCBjdXJyZW50Lm1fb2JqKTsKIAogICAgICAgICBjdXJy
V1MgPSBjdXJyZW50Lm1fb2JqLT5pc1JlcGxhY2VkKCkgPyBjdXJyZW50Lm1fb2JqLT5wYXJlbnQo
KS0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpIDogY3VycmVudC5tX29iai0+c3R5bGUoKS0+d2hpdGVT
cGFjZSgpOwogICAgICAgICBsYXN0V1MgPSBsYXN0LT5pc1JlcGxhY2VkKCkgPyBsYXN0LT5wYXJl
bnQoKS0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpIDogbGFzdC0+c3R5bGUoKS0+d2hpdGVTcGFjZSgp
OwpAQCAtMTg4MiwyMCArMTg4NywyMCBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6Zmlu
ZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KHRydWUpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5lSW5mby5pc0VtcHR5KCkgJiYgY2xlYXIpCi0gICAg
ICAgICAgICAgICAgICAgICpjbGVhciA9IGN1cnJlbnQubV9vYmotPnN0eWxlKCktPmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgaWYgKCFsaW5lSW5mby5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIG1fY2xlYXIgPSBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5jbGVhcigpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Y3VycmVudC5tX29iai0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICBSZW5kZXJCb3gqIGZs
b2F0Qm94ID0gdG9SZW5kZXJCb3goY3VycmVudC5tX29iaik7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogZiA9IGluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKKyAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmID0gbV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRC
b3gpOwogICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgZml0cyBpbiB0aGUgY3VycmVudCBsaW5l
LgogICAgICAgICAgICAgLy8gSWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2Us
IHBvc2l0aW9uCiAgICAgICAgICAgICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChp
biBuZXdMaW5lKCkgZnVuYykKLSAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lk
dGguZml0c09uTGluZShsb2dpY2FsV2lkdGhGb3JGbG9hdChmKSkpIHsKLSAgICAgICAgICAgICAg
ICBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHdp
ZHRoKTsKKyAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGlu
ZShtX2Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JGbG9hdChmKSkpIHsKKyAgICAgICAgICAgICAgICBt
X2Jsb2NrLT5wb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIHdpZHRoKTsKICAgICAgICAgICAgICAgICBpZiAobEJyZWFrLm1fb2JqID09IGN1cnJlbnQu
bV9vYmopIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFsQnJlYWsubV9wb3MpOwogICAg
ICAgICAgICAgICAgICAgICBsQnJlYWsuaW5jcmVtZW50KCk7CkBAIC0xOTA4LDExICsxOTEzLDEx
IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAg
IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3VycmVudC5tX29iaik7CiAgICAgICAgICAg
ICBib29sIGlzSW5saW5lVHlwZSA9IGJveC0+c3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxp
bmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAoIWlzSW5saW5lVHlwZSkKLSAgICAgICAgICAgICAg
ICBib3gtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGJvcmRlckFuZFBhZGRpbmdT
dGFydCgpKTsKKyAgICAgICAgICAgICAgICBib3gtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBv
c2l0aW9uKG1fYmxvY2stPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpKTsKICAgICAgICAgICAgIGVs
c2UgIHsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgb3JpZ2luYWwgZGlzcGxheSB3YXMgYW4g
SU5MSU5FIHR5cGUsIHRoZW4gd2UgY2FuIGdvIGFoZWFkCiAgICAgICAgICAgICAgICAgLy8gYW5k
IGRldGVybWluZSBvdXIgc3RhdGljIHkgcG9zaXRpb24gbm93LgotICAgICAgICAgICAgICAgIGJv
eC0+bGF5ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihsb2dpY2FsSGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIGJveC0+bGF5ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihtX2Jsb2Nr
LT5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZiB3
ZSdyZSBpZ25vcmluZyBzcGFjZXMsIHdlIGhhdmUgdG8gc3RvcCBhbmQgaW5jbHVkZSB0aGlzIG9i
amVjdCBhbmQKQEAgLTE5MjYsNyArMTkzMSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2Nr
OjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdHJhaWxp
bmdPYmplY3RzLmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBwb3NpdGlvbmVkQm94ZXMuYXBwZW5kKGJveCk7CisgICAgICAgICAgICAg
ICAgbV9wb3NpdGlvbmVkT2JqZWN0cy5hcHBlbmQoYm94KTsKICAgICAgICAgfSBlbHNlIGlmIChj
dXJyZW50Lm1fb2JqLT5pc1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBSaWdodCBu
b3csIHdlIHNob3VsZCBvbmx5IGVuY291bnRlciBlbXB0eSBpbmxpbmVzIGhlcmUuCiAgICAgICAg
ICAgICBBU1NFUlQoIWN1cnJlbnQubV9vYmotPmZpcnN0Q2hpbGQoKSk7CkBAIC0xOTQzLDggKzE5
NDgsOCBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAg
ICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogICAgICAgICAgICAgICAgICAg
ICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgY3VycmVu
dC5tX29iaiwgMCkpOyAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcy4KICAgICAgICAgICAgICAgICAg
ICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIGN1cnJl
bnQubV9vYmosIDApKTsgLy8gU3RhcnQgaWdub3JpbmcgYWdhaW4uCi0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiByZXNvbHZlci5wb3Np
dGlvbigpLm1fb2JqID09IGN1cnJlbnQubV9vYmoKLSAgICAgICAgICAgICAgICAgICAgJiYgc2hv
dWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KHRoaXMsIGN1cnJlbnQubV9vYmosIGxp
bmVNaWRwb2ludFN0YXRlKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ibG9jay0+
c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcmVzb2x2ZXIucG9zaXRpb24oKS5tX29i
aiA9PSBjdXJyZW50Lm1fb2JqCisgICAgICAgICAgICAgICAgICAgICYmIHNob3VsZFNraXBXaGl0
ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9p
bnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFya2Vy
cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJk
ZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsK
QEAgLTE5NzQsOSArMTk3OSw5IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4
dExpbmUKIAogICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIGEgY29tbW9uIGNhc2UuIElmIHdl
IGNhbid0IGZpbmQgd2hpdGVzcGFjZSBhZnRlciB0aGUgbGlzdAogICAgICAgICAgICAgLy8gaXRl
bSwgdGhlbiB0aGlzIGlzIGFsbCBtb290LgotICAgICAgICAgICAgaW50IHJlcGxhY2VkTG9naWNh
bFdpZHRoID0gbG9naWNhbFdpZHRoRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbWFyZ2luU3RhcnRG
b3JDaGlsZChyZXBsYWNlZEJveCkgKyBtYXJnaW5FbmRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBp
bmxpbmVMb2dpY2FsV2lkdGgoY3VycmVudC5tX29iaik7CisgICAgICAgICAgICBpbnQgcmVwbGFj
ZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JDaGlsZChyZXBsYWNlZEJv
eCkgKyBtX2Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2st
Pm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2VkQm94KSArIGlubGluZUxvZ2ljYWxXaWR0aChjdXJy
ZW50Lm1fb2JqKTsKICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5pc0xpc3RNYXJrZXIo
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAm
JiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QodGhpcywgY3VycmVudC5tX29i
aiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmxvY2stPnN0
eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJT
dGFydE9iamVjdChtX2Jsb2NrLCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQg
aWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgICAgICAg
ICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKQEAgLTIxMTYsOCAr
MjEyMSw4IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lV2Fz
VG9vV2lkZSB8fCAhd2lkdGguZml0c09uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbkh5cGhlbmF0ZSAmJiAhd2lkdGguZml0c09uTGluZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2Nh
bGUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9u
TGltaXRBZnRlcigpLCBsYXN0U3BhY2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0
aCgpIC0gYWRkaXRpb25hbFRtcFcsIHdpZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRj
aCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBsYXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJy
ZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uLCBoeXBoZW5hdGVkKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGh5cGhlbmF0ZWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5
cGhlbmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBs
YXN0U3BhY2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25h
bFRtcFcsIHdpZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0
ZVNwYWNlLCBsYXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFr
YWJsZVBvc2l0aW9uLCBtX2h5cGhlbmF0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9oeXBoZW5hdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBlbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsQnJlYWsuYXRUZXh0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsK
QEAgLTIxMzAsNyArMjEzNSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4
dExpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobEJyZWFrLm1fb2JqICYmIGxCcmVhay5t
X3BvcyAmJiBsQnJlYWsubV9vYmotPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChsQnJlYWsubV9v
YmopLT50ZXh0TGVuZ3RoKCkgJiYgdG9SZW5kZXJUZXh0KGxCcmVhay5tX29iaiktPmNoYXJhY3Rl
cnMoKVtsQnJlYWsubV9wb3MgLSAxXSA9PSBzb2Z0SHlwaGVuICYmIHN0eWxlLT5oeXBoZW5zKCkg
IT0gSHlwaGVuc05vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGhlbmF0
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2h5cGhlbmF0ZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOyAvLyBEaWRuJ3Qg
Zml0LiBKdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmV0d2VlbldvcmRzIHx8IChtaWRXb3Jk
QnJlYWsgJiYgIWF1dG9XcmFwKSkKQEAgLTIyMzIsMTIgKzIyMzcsMTIgQEAgSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogCiAgICAgICAgICAgICBpZiAoIXdpZHRoLmZp
dHNPbkxpbmUoKSkgewogICAgICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUpCi0gICAgICAg
ICAgICAgICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUt
Pmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigp
LCBsYXN0U3BhY2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRp
b25hbFRtcFcsIHdpZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VX
aGl0ZVNwYWNlLCBsYXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uLCBoeXBoZW5hdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5SHlw
aGVuYXRpbmcodCwgZiwgc3R5bGUtPmxvY2FsZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJl
Zm9yZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFjZSwgY3VycmVu
dC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkgLSBhZGRpdGlvbmFsVG1wVywgd2lkdGguYXZh
aWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGxhc3RTcGFj
ZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24sIG1f
aHlwaGVuYXRlZCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWh5cGhlbmF0ZWQgJiYgbEJyZWFr
LnByZXZpb3VzSW5TYW1lTm9kZSgpID09IHNvZnRIeXBoZW4gJiYgc3R5bGUtPmh5cGhlbnMoKSAh
PSBIeXBoZW5zTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgaHlwaGVuYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2h5cGhlbmF0ZWQgJiYgbEJyZWFrLnByZXZpb3VzSW5TYW1l
Tm9kZSgpID09IHNvZnRIeXBoZW4gJiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkK
KyAgICAgICAgICAgICAgICAgICAgbV9oeXBoZW5hdGVkID0gdHJ1ZTsKIAotICAgICAgICAgICAg
ICAgIGlmIChoeXBoZW5hdGVkKQorICAgICAgICAgICAgICAgIGlmIChtX2h5cGhlbmF0ZWQpCiAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UKQEAgLTIzMTEsNyArMjMxNiw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5k
TmV4dExpbmUKICBlbmQ6CiAgICAgaWYgKGxCcmVhayA9PSByZXNvbHZlci5wb3NpdGlvbigpICYm
ICghbEJyZWFrLm1fb2JqIHx8ICFsQnJlYWsubV9vYmotPmlzQlIoKSkpIHsKICAgICAgICAgLy8g
d2UganVzdCBhZGQgYXMgbXVjaCBhcyBwb3NzaWJsZQotICAgICAgICBpZiAoc3R5bGUoKS0+d2hp
dGVTcGFjZSgpID09IFBSRSkgeworICAgICAgICBpZiAobV9ibG9jay0+c3R5bGUoKS0+d2hpdGVT
cGFjZSgpID09IFBSRSkgewogICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IHJlYWxseSB1bmRl
cnN0YW5kIHRoaXMgY2FzZS4KICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fcG9zKSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNhbGwgbW92ZVRvIHdoaWNoIHdvdWxk
IGNsZWFyIG1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>