<?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>71205</bug_id>
          
          <creation_ts>2011-10-30 23:26:04 -0700</creation_ts>
          <short_desc>[Chromium] The Chromium port calls OwnPtr::get and RefPtr::get way more often than needed</short_desc>
          <delta_ts>2011-10-31 00:48:45 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>493164</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-30 23:26:04 -0700</bug_when>
    <thetext>[Chromium] The Chromium port calls OwnPtr::get and RefPtr::get way more often than needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493165</commentid>
    <comment_count>1</comment_count>
      <attachid>113015</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-30 23:28:41 -0700</bug_when>
    <thetext>Created attachment 113015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493166</commentid>
    <comment_count>2</comment_count>
      <attachid>113015</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-30 23:31:35 -0700</bug_when>
    <thetext>Comment on attachment 113015
Patch

Attachment 113015 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10242684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493167</commentid>
    <comment_count>3</comment_count>
      <attachid>113015</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-30 23:33:24 -0700</bug_when>
    <thetext>Comment on attachment 113015
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:9
&gt; +        calling get() on these pointer types.  This patch cleans up most (all?)

Nit: one space after period.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2180
&gt; +    HTMLInputElement* inputElem = static_cast&lt;HTMLInputElement*&gt;(focusedNode.get());

Can we call Node::toInputElement here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493168</commentid>
    <comment_count>4</comment_count>
      <attachid>113015</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-30 23:33:47 -0700</bug_when>
    <thetext>Comment on attachment 113015
Patch

Sigh.  WebPrivatePtr makes this trickier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493169</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-30 23:34:22 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2180
&gt; &gt; +    HTMLInputElement* inputElem = static_cast&lt;HTMLInputElement*&gt;(focusedNode.get());
&gt; 
&gt; Can we call Node::toInputElement here?

Yeah, that would be better.  This code looks sketchy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493170</commentid>
    <comment_count>6</comment_count>
      <attachid>113015</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-30 23:35:05 -0700</bug_when>
    <thetext>Comment on attachment 113015
Patch

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

&gt; Source/WebKit/chromium/src/WebIDBKey.cpp:128
&gt; -    if (!m_private.get())
&gt; +    if (!m_private)

Apparently this one is WebPrivatePtr :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493171</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-30 23:36:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2180
&gt; &gt; &gt; +    HTMLInputElement* inputElem = static_cast&lt;HTMLInputElement*&gt;(focusedNode.get());
&gt; &gt; 
&gt; &gt; Can we call Node::toInputElement here?
&gt; 
&gt; Yeah, that would be better.  This code looks sketchy.

I&apos;m seeing a horror a few lines beneath that:
2185        m_autofillPopupClient = adoptPtr(new AutofillPopupMenuClient);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493180</commentid>
    <comment_count>8</comment_count>
      <attachid>113017</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-31 00:06:31 -0700</bug_when>
    <thetext>Created attachment 113017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493181</commentid>
    <comment_count>9</comment_count>
      <attachid>113017</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-31 00:09:11 -0700</bug_when>
    <thetext>Comment on attachment 113017
Patch

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

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2180
&gt; +    HTMLInputElement* inputElem = static_cast&lt;HTMLInputElement*&gt;(focusedNode.get());

Please do focusedNode-&gt;toInputElement();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493185</commentid>
    <comment_count>10</comment_count>
      <attachid>113018</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-31 00:16:27 -0700</bug_when>
    <thetext>Created attachment 113018
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493197</commentid>
    <comment_count>11</comment_count>
      <attachid>113018</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 00:48:38 -0700</bug_when>
    <thetext>Comment on attachment 113018
Patch for landing

Clearing flags on attachment: 113018

Committed r98837: &lt;http://trac.webkit.org/changeset/98837&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493198</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 00:48:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113015</attachid>
            <date>2011-10-30 23:28:41 -0700</date>
            <delta_ts>2011-10-31 00:06:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71205-20111030232842.patch</filename>
            <type>text/plain</type>
            <size>45402</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQx
IEBACisyMDExLTEwLTMwICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBUaGUgQ2hyb21pdW0gcG9ydCBjYWxscyBPd25QdHI6OmdldCBhbmQgUmVm
UHRyOjpnZXQgd2F5IG1vcmUgb2Z0ZW4gdGhhbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IHN0eWxlIGlzIHRvIHVzZSB0aGUgaW1w
bGljaXQgQm9vbGVhbiBjb252ZXJzaW9ucyByYXRoZXIgdGhhbgorICAgICAgICBjYWxsaW5nIGdl
dCgpIG9uIHRoZXNlIHBvaW50ZXIgdHlwZXMuICBUaGlzIHBhdGNoIGNsZWFucyB1cCBtb3N0IChh
bGw/KQorICAgICAgICBvZiB0aGVzZSBzdHlsZSBpc3N1ZXMgaW4gdGhlIENocm9taXVtIHBvcnQg
aW4gdGhlIGhvcGVzIHRoYXQgdGhleSdsbCBiZQorICAgICAgICBjb3B5L3Bhc3RlZCBsZXNzIGlu
IHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBzcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5h
bC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbDo6dG9X
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgICogc3JjL0F1ZGlvRGVzdGluYXRpb25D
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06
OkF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uQ2hyb21pdW06OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bTo6c3RvcCk6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2V0TWFpbkRvY3Vt
ZW50RXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvbW1p
dHRlZExvYWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlz
aGVkTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cmVk
aXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBzcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVuU3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZENsb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRGYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6CisgICAgICAg
ICogc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeUV4cHJlc3Np
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNUZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc01hcmt1cCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6Z2V0UHJpbnRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OnByaW50RW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01h
dGNoZXMpOgorICAgICAgICAqIHNyYy9XZWJJREJLZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJLZXk6OnR5cGUpOgorICAgICAgICAqIHNyYy9XZWJJREJLZXlSYW5nZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQktleVJhbmdlOjpsb3dlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQktleVJhbmdlOjp1cHBlcik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQktleVJhbmdlOjps
b3dlck9wZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJLZXlSYW5nZTo6dXBwZXJPcGVuKToK
KyAgICAgICAgKiBzcmMvV2ViSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
OjpXZWJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6On5XZWJNZWRpYVBsYXllckNsaWVudEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnJlYWR5U3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZXBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpsb2FkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmNhbmNlbExv
YWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBhdXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzb3VyY2VBcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNvdXJjZUVuZE9mU3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpuYXR1cmFsU2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aGFzVmlkZW8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc0F1ZGlvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3VycmVudFRpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWspOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWtpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldEVuZFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBhdXNlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1NhdmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFZvbHVtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bmV0d29ya1N0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptYXhUaW1lU2Vla2FibGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmJ1ZmZlcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkYXRhUmF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlc0tub3duKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp0b3RhbEJ5dGVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpieXRlc0xvYWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OnNldFByZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjptZWRpYVRpbWVGb3JUaW1lVmFsdWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmRlY29kZWRGcmFtZUNvdW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkcm9wcGVkRnJhbWVDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6YXVkaW9EZWNvZGVkQnl0
ZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp2aWRl
b0RlY29kZWRCeXRlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OmFjY2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnB1dEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3RhcnREZWxheWVkTG9hZCk6CisgICAgICAgICog
c3JjL1dlYlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpl
eHRyYURhdGEpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp0aGVtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpt
YWluRnJhbWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlU2Vs
ZWN0UG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cG9wdXBDbG9zZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Zm9jdXNlZFdlYkNvcmVGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNldEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldHRpbmdzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnBhZ2VFbmNvZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzZXRQYWdlRW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0SW5pdGlhbEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyRm9j
dXNlZE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29weUltYWdlQXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aW5zcGVjdEVsZW1lbnRBdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjphcHBseUF1dG9maWxsU3VnZ2VzdGlvbnMpOgorICAgICAgICAqIHNyYy9XZWJXb3Jr
ZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OndhaXRGb3JP
cGVyYXRpb25Ub0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtOjpjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKToKKwog
MjAxMS0xMC0yOSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50
ZXJuYWwuaAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
cHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFdlYktpdDo6V2ViQXBwbGljYXRpb25DYWNoZUhv
c3QqIHRvV2ViQXBwbGljYXRpb25DYWNoZUhvc3QoQXBwbGljYXRpb25DYWNoZUhvc3QqIGlubmVy
SG9zdCkKICAgICB7Ci0gICAgICAgIGlmIChpbm5lckhvc3QgJiYgaW5uZXJIb3N0LT5tX2ludGVy
bmFsLmdldCgpKQorICAgICAgICBpZiAoaW5uZXJIb3N0ICYmIGlubmVySG9zdC0+bV9pbnRlcm5h
bCkKICAgICAgICAgICAgIHJldHVybiBpbm5lckhvc3QtPm1faW50ZXJuYWwtPm1fb3V0ZXJIb3N0
LmdldCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXVkaW9EZXN0aW5h
dGlvbkNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBBdWRpb0Rl
c3RpbmF0aW9uQ2hyb21pdW06OkF1ZGlvRGVzdGluYXRpCiAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgbV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVh
dGVBdWRpb0RldmljZShtX2NhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVyT2ZDaGFubmVscywgc2Ft
cGxlUmF0ZSwgdGhpcykpOwotICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNlLmdldCgpKTsKKyAgICBB
U1NFUlQobV9hdWRpb0RldmljZSk7CiB9CiAKIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bTo6fkF1
ZGlvRGVzdGluYXRpb25DaHJvbWl1bSgpCkBAIC04Nyw3ICs4Nyw3IEBAIEF1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bTo6fkF1ZGlvRGVzdGluYXQKIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21p
dW06OnN0YXJ0KCkKIHsKLSAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2UuZ2V0
KCkpIHsKKyAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2UpIHsKICAgICAgICAg
bV9hdWRpb0RldmljZS0+c3RhcnQoKTsKICAgICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogICAg
IH0KQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OnN0YXJ0
KCkKIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OnN0b3AoKQogewotICAgIGlmICht
X2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlLmdldCgpKSB7CisgICAgaWYgKG1faXNQbGF5aW5n
ICYmIG1fYXVkaW9EZXZpY2UpIHsKICAgICAgICAgbV9hdWRpb0RldmljZS0+c3RvcCgpOwogICAg
ICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24g
OTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6cmV2ZXJ0VG9Qcm92CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIGlmIChtX3BsdWdpbldpZGdldC5nZXQoKSkgeworICAgIGlmIChtX3BsdWdpbldp
ZGdldCkgewogICAgICAgICBpZiAobV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4pIHsKICAg
ICAgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRGYWlsTG9hZGluZyhlcnJvcik7CiAgICAgICAg
ICAgICBtX3NlbnRJbml0aWFsUmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwpAQCAtMTEwNyw3ICsx
MTA3LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZENoYW5nZVRpdAogLy8gQ2Fs
bGVkIHdoZW5ldmVyIGRhdGEgaXMgcmVjZWl2ZWQuCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQogewotICAgIGlmICghbV9wbHVnaW5XaWRnZXQuZ2V0KCkpIHsKKyAgICBp
ZiAoIW1fcGx1Z2luV2lkZ2V0KSB7CiAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkg
ewogICAgICAgICAgICAgYm9vbCBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlOwogICAgICAgICAgICAg
bV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEb2N1bWVudERhdGEobV93ZWJGcmFtZSwg
ZGF0YSwgbGVuZ3RoLCBwcmV2ZW50RGVmYXVsdCk7CkBAIC0xMTIzLDcgKzExMjMsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29tbWl0dGVkTG9hCiAKICAgICAvLyBUaGUgcGx1Z2lu
IHdpZGdldCBjb3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbiB0aGUgbV93ZWJGcmFtZS0+RGlkUmVj
ZWl2ZURhdGEKICAgICAvLyBmdW5jdGlvbi4KLSAgICBpZiAobV9wbHVnaW5XaWRnZXQuZ2V0KCkp
IHsKKyAgICBpZiAobV9wbHVnaW5XaWRnZXQpIHsKICAgICAgICAgaWYgKCFtX3NlbnRJbml0aWFs
UmVzcG9uc2VUb1BsdWdpbikgewogICAgICAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9Q
bHVnaW4gPSB0cnVlOwogICAgICAgICAgICAgbV9wbHVnaW5XaWRnZXQtPmRpZFJlY2VpdmVSZXNw
b25zZSgKQEAgLTExMzIsMTQgKzExMzIsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmNvbW1pdHRlZExvYQogCiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgYWJvdmUg
Y2FsbCByZW1vdmVkIHRoZSBwb2ludGVyIHRvIHRoZSBwbHVnaW4sIHNvCiAgICAgICAgIC8vIGNo
ZWNrIGJlZm9yZSBjYWxsaW5nIGl0LgotICAgICAgICBpZiAobV9wbHVnaW5XaWRnZXQuZ2V0KCkp
CisgICAgICAgIGlmIChtX3BsdWdpbldpZGdldCkKICAgICAgICAgICAgIG1fcGx1Z2luV2lkZ2V0
LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOwogICAgIH0KIH0KIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZGwpCiB7Ci0g
ICAgaWYgKG1fcGx1Z2luV2lkZ2V0LmdldCgpKSB7CisgICAgaWYgKG1fcGx1Z2luV2lkZ2V0KSB7
CiAgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIG1f
cGx1Z2luV2lkZ2V0ID0gMDsKICAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKQEAgLTE1MDgsNyArMTUwOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBs
OjpyZWRpcmVjdERhdGEKIHsKICAgICBpZiAocGx1Z2luV2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5l
cigpKQogICAgICAgICBtX3BsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFdlYlBsdWdpbkNvbnRh
aW5lckltcGwqPihwbHVnaW5XaWRnZXQpOwotICAgIEFTU0VSVChtX3BsdWdpbldpZGdldC5nZXQo
KSk7CisgICAgQVNTRVJUKG1fcGx1Z2luV2lkZ2V0KTsKIH0KIAogUGFzc1JlZlB0cjxXaWRnZXQ+
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCgKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODIsNyArMTgyLDcgQEAgdm9pZCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lcwog
ICAgIFdlYlN0cmluZyBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+bWVzc2FnZSgpLT50b1dpcmVT
dHJpbmcoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNo
YW5uZWxzID0gbWVzc2FnZS0+Y2hhbm5lbHMoKTsKICAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxB
cnJheSogd2ViQ2hhbm5lbHMgPSAwOwotICAgIGlmIChjaGFubmVscy5nZXQoKSAmJiBjaGFubmVs
cy0+c2l6ZSgpKSB7CisgICAgaWYgKGNoYW5uZWxzICYmIGNoYW5uZWxzLT5zaXplKCkpIHsKICAg
ICAgICAgd2ViQ2hhbm5lbHMgPSBuZXcgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkoY2hhbm5l
bHMtPnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhbm5lbHMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbCogcGxhdGZvcm1DaGFubmVsID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlz
aW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6c3RhcnQoKQogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVTdGFydGVkOwog
CiAgICAgbV9sb2FkZXIgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRl
VVJMTG9hZGVyKCkpOwotICAgIEFTU0VSVChtX2xvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKG1f
bG9hZGVyKTsKIAogICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZFJlcXVlc3QobV9y
ZXF1ZXN0KTsKICAgICB3cmFwcGVkUmVxdWVzdC5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGFs
bG93U3RvcmVkQ3JlZGVudGlhbHMoKSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CiAgICAgT3duUHRyPFdl
YlVSTExvYWRlcj4gbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNy
ZWF0ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKKyAgICBBU1NFUlQo
bG9hZGVyKTsKIAogICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3Qp
OwogICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRp
YWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiA5ODgzNSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpjb25uZWN0CiB7CiAgICAgbV9zb2NrZXQgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKCkpOwogICAgIExPRyhOZXR3b3Jr
LCAiY29ubmVjdCIpOwotICAgIEFTU0VSVChtX3NvY2tldC5nZXQoKSk7CisgICAgQVNTRVJUKG1f
c29ja2V0KTsKICAgICBtX3NvY2tldC0+Y29ubmVjdCh1cmwsIHRoaXMpOwogfQogCiBpbnQgU29j
a2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikK
IHsKICAgICBMT0coTmV0d29yaywgInNlbmQgbGVuPSVkIiwgbGVuKTsKLSAgICBBU1NFUlQobV9z
b2NrZXQuZ2V0KCkpOworICAgIEFTU0VSVChtX3NvY2tldCk7CiAgICAgaWYgKG1fcGVuZGluZ0Ft
b3VudFNlbnQgKyBsZW4gPj0gbV9tYXhQZW5kaW5nU2VuZEFsbG93ZWQpCiAgICAgICAgIGxlbiA9
IG1fbWF4UGVuZGluZ1NlbmRBbGxvd2VkIC0gbV9wZW5kaW5nQW1vdW50U2VudCAtIDE7CiAKQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVu
CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkT3BlbiAl
ZCIsCiAgICAgICAgIG1heFBlbmRpbmdTZW5kQWxsb3dlZCk7CiAgICAgQVNTRVJUKG1heFBlbmRp
bmdTZW5kQWxsb3dlZCA+IDApOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldC5nZXQoKSkg
eworICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NFUlQoc29ja2V0
SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9tYXhQZW5kaW5nU2VuZEFsbG93
ZWQgPSBtYXhQZW5kaW5nU2VuZEFsbG93ZWQ7CiAgICAgICAgIG1faGFuZGxlLT5tX3N0YXRlID0g
U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6T3BlbjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRTZW5kCiB7CiAgICAgTE9HKE5ldHdvcmssICJT
b2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkU2VuZERhdGEgJWQiLCBhbW91bnRTZW50KTsK
ICAgICBBU1NFUlQoYW1vdW50U2VudCA+IDApOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tl
dC5nZXQoKSkgeworICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NF
UlQoc29ja2V0SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9wZW5kaW5nQW1v
dW50U2VudCAtPSBhbW91bnRTZW50OwogICAgICAgICBBU1NFUlQobV9wZW5kaW5nQW1vdW50U2Vu
dCA+PSAwKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVy
bmFsOjpkaWRTZW5kCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZl
RGF0YShXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSwgY29uc3QgV2ViRGF0YSYg
ZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgImRpZFJlY2VpdmVEYXRhIik7Ci0gICAgaWYgKG1f
aGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7CisgICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0
KSB7CiAgICAgICAgIEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwogICAg
ICAgICBpZiAobV9oYW5kbGUtPm1fY2xpZW50KQogICAgICAgICAgICAgbV9oYW5kbGUtPm1fY2xp
ZW50LT5kaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YShtX2hhbmRsZSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpkaWRSZWNlCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRDbG9z
ZShXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSkKIHsKICAgICBMT0coTmV0d29y
aywgImRpZENsb3NlIik7Ci0gICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7Cisg
ICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0KSB7CiAgICAgICAgIEFTU0VSVChzb2NrZXRIYW5k
bGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwogICAgICAgICBtX3NvY2tldC5jbGVhcigpOwogICAgICAg
ICBTb2NrZXRTdHJlYW1IYW5kbGUqIGggPSBtX2hhbmRsZTsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRDbG9zCiB2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZUludGVybmFsOjpkaWRGYWlsKFdlYlNvY2tldFN0cmVhbUhhbmRsZSogc29ja2V0SGFu
ZGxlLCBjb25zdCBXZWJTb2NrZXRTdHJlYW1FcnJvciYgZXJyKQogewogICAgIExPRyhOZXR3b3Jr
LCAiZGlkRmFpbCIpOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldC5nZXQoKSkgeworICAg
IGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NFUlQoc29ja2V0SGFuZGxl
ID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9zb2NrZXQuY2xlYXIoKTsKICAgICAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoID0gbV9oYW5kbGU7CkBAIC0yMDQsMTQgKzIwNCwxNCBAQCBT
b2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoCiAKIGludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBidWYsIGludCBsZW4pCiB7Ci0gICAg
aWYgKCFtX2ludGVybmFsLmdldCgpKQorICAgIGlmICghbV9pbnRlcm5hbCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPnNlbmQoYnVmLCBsZW4pOwogfQogCiB2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiB7Ci0gICAgaWYgKG1faW50ZXJu
YWwuZ2V0KCkpCisgICAgaWYgKG1faW50ZXJuYWwpCiAgICAgICAgIG1faW50ZXJuYWwtPmNsb3Nl
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MzIsNyArNTMyLDcgQEAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJBY2Nlc3NpYmls
aXR5TwogICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBtX3ByaXZhdGUtPmRvY3VtZW50RnJh
bWVWaWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBoaXQgPSBtX3ByaXZhdGUtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnRlbnRz
UG9pbnQpOwogCi0gICAgaWYgKGhpdC5nZXQoKSkKKyAgICBpZiAoaGl0KQogICAgICAgICByZXR1
cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdChoaXQpOwogCiAgICAgaWYgKG1fcHJpdmF0ZS0+Ym91
bmRpbmdCb3hSZWN0KCkuY29udGFpbnMoY29udGVudHNQb2ludCkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQ0LDcgKzc0NCw3IEBAIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5
RXhwcmUKICAgICAgICAgWFBhdGhSZXN1bHQ6Ok9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLAog
ICAgICAgICAwLCAvLyBYUGF0aFJlc3VsdCBvYmplY3QKICAgICAgICAgZWMpOwotICAgIGlmICgh
eHBhdGhSZXN1bHQuZ2V0KCkpCisgICAgaWYgKCF4cGF0aFJlc3VsdCkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBOb2RlKiBub2RlID0geHBhdGhSZXN1bHQtPml0ZXJhdGVOZXh0KGVjKTsKQEAg
LTkzNyw3ICs5MzcsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZFJlcXVlc3QoY29uc3QgV2Vi
CiB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhpc3RvcnlJdGVtKGNvbnN0IFdlYkhpc3RvcnlJdGVt
JiBpdGVtKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaGlzdG9yeUl0ZW0gPSBQYXNzUmVm
UHRyPEhpc3RvcnlJdGVtPihpdGVtKTsKLSAgICBBU1NFUlQoaGlzdG9yeUl0ZW0uZ2V0KCkpOwor
ICAgIEFTU0VSVChoaXN0b3J5SXRlbSk7CiAKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cHJlcGFy
ZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCk7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50
SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7CkBAIC0x
MTgyLDcgKzExODIsNyBAQCBzaXplX3QgV2ViRnJhbWVJbXBsOjpjaGFyYWN0ZXJJbmRleEZvclBv
CiAgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
d2ViUG9pbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUoKS0+ZXZlbnRIYW5k
bGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CiAgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lKCktPnJhbmdlRm9yUG9pbnQocmVzdWx0LnBvaW50KCkpOwotICAg
IGlmICghcmFuZ2UuZ2V0KCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwogCiAgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CkBAIC0xMzA4LDcgKzEzMDgsNyBA
QCBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc1RleHQoCiAgICAgICAgIHJldHVy
biBwbHVnaW5Db250YWluZXItPnBsdWdpbigpLT5zZWxlY3Rpb25Bc1RleHQoKTsKIAogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gcmFuZ2UtPnRleHQoKTsKQEAg
LTEzMjYsNyArMTMyNiw3IEBAIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6OnNlbGVjdGlvbkFzTWFy
a3UKICAgICAgICAgcmV0dXJuIHBsdWdpbkNvbnRhaW5lci0+cGx1Z2luKCktPnNlbGVjdGlvbkFz
TWFya3VwKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiAKICAgICByZXR1cm4gY3JlYXRl
TWFya3VwKHJhbmdlLmdldCgpLCAwKTsKQEAgLTE0MjIsNyArMTQyMiw3IEBAIGludCBXZWJGcmFt
ZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2ViU2kKIGZsb2F0IFdlYkZyYW1lSW1wbDo6Z2V0UHJp
bnRQYWdlU2hyaW5rKGludCBwYWdlKQogewogICAgIC8vIEVuc3VyZSBjb3JyZWN0IHN0YXRlLgot
ICAgIGlmICghbV9wcmludENvbnRleHQuZ2V0KCkgfHwgcGFnZSA8IDApIHsKKyAgICBpZiAoIW1f
cHJpbnRDb250ZXh0IHx8IHBhZ2UgPCAwKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNDMzLDcgKzE0MzMsNyBAQCBmbG9hdCBX
ZWJGcmFtZUltcGw6OmdldFByaW50UGFnZVNocmluayhpCiBmbG9hdCBXZWJGcmFtZUltcGw6OnBy
aW50UGFnZShpbnQgcGFnZSwgV2ViQ2FudmFzKiBjYW52YXMpCiB7CiAgICAgLy8gRW5zdXJlIGNv
cnJlY3Qgc3RhdGUuCi0gICAgaWYgKCFtX3ByaW50Q29udGV4dC5nZXQoKSB8fCBwYWdlIDwgMCB8
fCAhZnJhbWUoKSB8fCAhZnJhbWUoKS0+ZG9jdW1lbnQoKSkgeworICAgIGlmICghbV9wcmludENv
bnRleHQgfHwgcGFnZSA8IDAgfHwgIWZyYW1lKCkgfHwgIWZyYW1lKCktPmRvY3VtZW50KCkpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
QEAgLTE0NDksOCArMTQ0OSw4IEBAIGZsb2F0IFdlYkZyYW1lSW1wbDo6cHJpbnRQYWdlKGludCBw
YWdlLCAKIAogdm9pZCBXZWJGcmFtZUltcGw6OnByaW50RW5kKCkKIHsKLSAgICBBU1NFUlQobV9w
cmludENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3ByaW50Q29udGV4dC5nZXQoKSkKKyAgICBB
U1NFUlQobV9wcmludENvbnRleHQpOworICAgIGlmIChtX3ByaW50Q29udGV4dCkKICAgICAgICAg
bV9wcmludENvbnRleHQtPmVuZCgpOwogICAgIG1fcHJpbnRDb250ZXh0LmNsZWFyKCk7CiB9CkBA
IC0xNjQzLDcgKzE2NDMsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVz
KGluCiAgICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2UtPmVuZE9mZnNldCgp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDAsIGVjMiA9IDA7Ci0gICAgaWYgKG1fcmVzdW1l
U2NvcGluZ0Zyb21SYW5nZS5nZXQoKSkgeworICAgIGlmIChtX3Jlc3VtZVNjb3BpbmdGcm9tUmFu
Z2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHNjb3Bpbmcgb3Bl
cmF0aW9uIHRoYXQgdGltZWQgb3V0IGFuZCBkaWRuJ3QKICAgICAgICAgLy8gY29tcGxldGUgbGFz
dCB0aW1lIGFyb3VuZCwgc28gd2Ugc2hvdWxkIHN0YXJ0IGZyb20gd2hlcmUgd2UgbGVmdCBvZmYu
CiAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChtX3Jlc3VtZVNjb3BpbmdGcm9tUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCksCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QktleS5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgV2Vi
SURCS2V5OjpyZXNldCgpCiAKIFdlYklEQktleTo6VHlwZSBXZWJJREJLZXk6OnR5cGUoKSBjb25z
dAogewotICAgIGlmICghbV9wcml2YXRlLmdldCgpKQorICAgIGlmICghbV9wcml2YXRlKQogICAg
ICAgICByZXR1cm4gSW52YWxpZFR5cGU7CiAgICAgcmV0dXJuIFR5cGUobV9wcml2YXRlLT50eXBl
KCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCS2V5UmFuZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQktleVJh
bmdlLmNwcAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJLZXlSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDI2ICs1NiwyNiBAQCB2b2lk
IFdlYklEQktleVJhbmdlOjpyZXNldCgpCiAKIFdlYklEQktleSBXZWJJREJLZXlSYW5nZTo6bG93
ZXIoKSBjb25zdAogewotICAgIGlmICghbV9wcml2YXRlLmdldCgpKQorICAgIGlmICghbV9wcml2
YXRlKQogICAgICAgICByZXR1cm4gV2ViSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiAgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bG93ZXIoKTsKIH0KIAogV2ViSURCS2V5IFdlYklEQktleVJhbmdlOjp1
cHBlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3ByaXZhdGUuZ2V0KCkpCisgICAgaWYgKCFtX3By
aXZhdGUpCiAgICAgICAgIHJldHVybiBXZWJJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKICAgICBy
ZXR1cm4gbV9wcml2YXRlLT51cHBlcigpOwogfQogCiBib29sIFdlYklEQktleVJhbmdlOjpsb3dl
ck9wZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCkgJiYgbV9wcml2YXRl
LT5sb3dlck9wZW4oKTsKKyAgICByZXR1cm4gbV9wcml2YXRlICYmIG1fcHJpdmF0ZS0+bG93ZXJP
cGVuKCk7CiB9CiAKIGJvb2wgV2ViSURCS2V5UmFuZ2U6OnVwcGVyT3BlbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKSAmJiBtX3ByaXZhdGUtPnVwcGVyT3BlbigpOworICAg
IHJldHVybiBtX3ByaXZhdGUgJiYgbV9wcml2YXRlLT51cHBlck9wZW4oKTsKIH0KIAogV2ViSURC
S2V5UmFuZ2U6OldlYklEQktleVJhbmdlKGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+JiB2
YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlQ0cuY3BwCShy
ZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCBXZWJJbWFnZTo6V2ViSW1h
Z2UoY29uc3QgUGFzc1JlZlB0cjxJbWFnCiAgICAgOiBtX2ltYWdlUmVmKDApCiB7CiAgICAgTmF0
aXZlSW1hZ2VQdHIgcDsKLSAgICBpZiAoaW1hZ2UuZ2V0KCkgJiYgKHAgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCisgICAgaWYgKGltYWdlICYmIChwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKQogICAgICAgICBhc3NpZ24ocCk7CiB9CiAKIFdl
YkltYWdlJiBXZWJJbWFnZTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8SW1hZ2U+JiBpbWFn
ZSkKIHsKICAgICBOYXRpdmVJbWFnZVB0ciBwOwotICAgIGlmIChpbWFnZS5nZXQoKSAmJiAocCA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKKyAgICBpZiAoaW1hZ2UgJiYg
KHAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCiAgICAgICAgIGFzc2ln
bihwKTsKICAgICBlbHNlCiAgICAgICAgIHJlc2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAJKHJl
dmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6fldlYk1lZGlhUGxheWUKIHsKICAgICAvLyBWaWRlb0xheWVy
Q2hyb21pdW0gbWF5IG91dGxpdmUgdGhpcyBvYmplY3Qgc28gY2xlYXIgdGhlIGJhY2sgcG9pbnRl
ci4KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fdmlkZW9MYXll
ci5nZXQoKSkKKyAgICBpZiAobV92aWRlb0xheWVyKQogICAgICAgICBtX3ZpZGVvTGF5ZXItPnJl
bGVhc2VQcm92aWRlcigpOwogI2VuZGlmCiB9CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnJlYWR5U3RhdAogICAgIEFTU0VSVChtX21lZGlhUGxheWVy
KTsKICAgICBtX21lZGlhUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoaGFzVmlkZW8oKSAmJiBzdXBwb3J0c0FjY2Vs
ZXJhdGVkUmVuZGVyaW5nKCkgJiYgIW1fdmlkZW9MYXllci5nZXQoKSkKKyAgICBpZiAoaGFzVmlk
ZW8oKSAmJiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgJiYgIW1fdmlkZW9MYXllcikK
ICAgICAgICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUoMCwgdGhp
cyk7CiAjZW5kaWYKIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6cmVwYWludCgpCiB7CiAgICAgQVNTRVJUKG1fbWVkaWFQbGF5ZXIpOwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV92aWRlb0xheWVyLmdldCgpICYm
IHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKKyAgICBpZiAobV92aWRlb0xheWVyICYm
IHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKICAgICAgICAgbV92aWRlb0xheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoSW50UmVjdCgwLCAwLCBtX3ZpZGVvTGF5ZXItPmJvdW5kcygpLndpZHRo
KCksIG1fdmlkZW9MYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKTsKICNlbmRpZgogICAgIG1fbWVk
aWFQbGF5ZXItPnJlcGFpbnQoKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6bG9hZEludGVyCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nh
c3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkp
LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIG1fd2ViTWVkaWFQbGF5ZXIgPSBjcmVhdGVXZWJN
ZWRpYVBsYXllcih0aGlzLCBmcmFtZSk7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkp
IHsKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikgewogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSBpZiB3ZSBjcmVhdGUvcmUtY3JlYXRlIHRoZSBXZWJNZWRpYVBs
YXllciB0aGF0IHdlIHVwZGF0ZSBvdXIgd3JhcHBlci4KICAgICAgICAgbV9hdWRpb1NvdXJjZVBy
b3ZpZGVyLndyYXAobV93ZWJNZWRpYVBsYXllci0+YXVkaW9Tb3VyY2VQcm92aWRlcigpKTsKQEAg
LTI0Myw3ICsyNDMsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bG9hZEludGVy
CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpjYW5jZWxMb2FkKCkKIHsKLSAgICBp
ZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAg
ICAgICAgbV93ZWJNZWRpYVBsYXllci0+Y2FuY2VsTG9hZCgpOwogfQogCkBAIC0yNjUsMjcgKzI2
NSwyNyBAQCBQbGF0Zm9ybU1lZGlhIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6CiAKIHZvaWQg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwbGF5KCkKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBs
YXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgbV93ZWJNZWRp
YVBsYXllci0+cGxheSgpOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cGF1
c2UoKQogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1l
ZGlhUGxheWVyKQogICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5wYXVzZSgpOwogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzb3Vy
Y2VBcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewot
ICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVy
KQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNlQXBwZW5kKGRhdGEsIGxl
bmd0aCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6c291cmNlRW5kT2ZTdHJlYW0oV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkVuZE9mU3RyZWFt
U3RhdHVzIHN0YXR1cykKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBp
ZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+c291cmNlRW5k
T2ZTdHJlYW0oc3RhdGljX2Nhc3Q8V2ViTWVkaWFQbGF5ZXI6OkVuZE9mU3RyZWFtU3RhdHVzPihz
dGF0dXMpKTsKIH0KICNlbmRpZgpAQCAtMjk4LDEyMSArMjk4LDEyMSBAQCB2b2lkIFdlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6cHJlcGFyZVRvCiAKIEludFNpemUgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIu
Z2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1l
ZGlhUGxheWVyLT5uYXR1cmFsU2l6ZSgpOwogICAgIHJldHVybiBJbnRTaXplKCk7CiB9CiAKIGJv
b2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpoYXNWaWRlbygpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5oYXNWaWRlbygpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc0F1ZGlvKCkgY29uc3QK
IHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBs
YXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmhhc0F1ZGlvKCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisg
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldFZp
c2libGUodmlzaWJsZSk7CiB9CiAKIGZsb2F0IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZHVy
YXRpb24oKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVy
YXRpb24oKTsKICAgICByZXR1cm4gMC4wZjsKIH0KIAogZmxvYXQgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIu
Z2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1l
ZGlhUGxheWVyLT5jdXJyZW50VGltZSgpOwogICAgIHJldHVybiAwLjBmOwogfQogCiB2b2lkIFdl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2VlayhmbG9hdCB0aW1lKQogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBt
X3dlYk1lZGlhUGxheWVyLT5zZWVrKHRpbWUpOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6c2Vla2luZygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0
KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlh
UGxheWVyLT5zZWVraW5nKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6c2V0RW5kVGltZShmbG9hdCB0aW1lKQogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBt
X3dlYk1lZGlhUGxheWVyLT5zZXRFbmRUaW1lKHRpbWUpOwogfQogCiB2b2lkIFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6c2V0UmF0ZShmbG9hdCByYXRlKQogewotICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBtX3dlYk1l
ZGlhUGxheWVyLT5zZXRSYXRlKHJhdGUpOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkK
KyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5
ZXItPnBhdXNlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2Vi
TWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJl
dHVybiBtX3dlYk1lZGlhUGxheWVyLT5zdXBwb3J0c0Z1bGxzY3JlZW4oKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1NhdmUo
KSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c3VwcG9ydHNT
YXZlKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXll
ci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgbV93ZWJNZWRpYVBs
YXllci0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpuZXR3b3JrU3RhdGUoKSBjb25zdAogewotICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZT4obV93ZWJN
ZWRpYVBsYXllci0+bmV0d29ya1N0YXRlKCkpOwogICAgIHJldHVybiBNZWRpYVBsYXllcjo6RW1w
dHk7CiB9CiAKIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkp
CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZT4obV93ZWJNZWRpYVBsYXllci0+cmVhZHlTdGF0ZSgpKTsK
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwogfQogCiBmbG9hdCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
d2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAg
IHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5tYXhUaW1lU2Vla2FibGUoKTsKICAgICByZXR1cm4g
MC4wZjsKIH0KIAogUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBXZWJNZWRpYVBsYXllckNsaWVudElt
cGw6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkg
eworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKSB7CiAgICAgICAgIGNvbnN0IFdlYlRpbWVSYW5n
ZXMmIHdlYlJhbmdlcyA9IG1fd2ViTWVkaWFQbGF5ZXItPmJ1ZmZlcmVkKCk7CiAKICAgICAgICAg
Ly8gRklYTUU6IFNhdmUgdGhlIHRpbWUgcmFuZ2VzIGluIGEgbWVtYmVyIHZhcmlhYmxlIGFuZCB1
cGRhdGUgaXQgd2hlbiBuZWVkZWQuCkBAIC00MjYsMzUgKzQyNiwzNSBAQCBQYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IFdlYk1lZGlhUGxheWVyQ2xpCiAKIGludCBXZWJNZWRpYVBsYXllckNsaWVudElt
cGw6OmRhdGFSYXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkK
KyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5
ZXItPmRhdGFSYXRlKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIGJvb2wgV2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4g
bV93ZWJNZWRpYVBsYXllci0+dG90YWxCeXRlc0tub3duKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB1bnNpZ25lZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnRvdGFsQnl0ZXMoKSBjb25z
dAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fd2ViTWVkaWFQ
bGF5ZXItPnRvdGFsQnl0ZXMoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHVuc2lnbmVkIFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fd2ViTWVkaWFQbGF5ZXItPmJ5dGVzTG9hZGVk
KCkpOwogICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVy
LmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBtX3dlYk1lZGlhUGxh
eWVyLT5zZXRTaXplKFdlYlNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9CiAK
QEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cGFpbnRD
dXJyCiAgICAgLy8gTm9ybWFsbHkgR3JhcGhpY3NDb250ZXh0IG9wZXJhdGlvbnMgZG8gbm90aGlu
ZyB3aGVuIHBhaW50aW5nIGlzIGRpc2FibGVkLgogICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2lu
ZyBwbGF0Zm9ybUNvbnRleHQoKSBkaXJlY3RseSB3ZSBoYXZlIHRvIG1hbnVhbGx5CiAgICAgLy8g
Y2hlY2suCi0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkgJiYgIWNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkgeworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyICYmICFjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpIHsKICNpZiBXRUJLSVRfVVNJTkdfU0tJQQogICAgICAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgICAgIFdlYkNhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5j
YW52YXMoKTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6c2V0UHJlbG9hCiB7CiAgICAgbV9wcmVsb2FkID0gcHJlbG9hZDsKIAotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBt
X3dlYk1lZGlhUGxheWVyLT5zZXRQcmVsb2FkKHN0YXRpY19jYXN0PFdlYk1lZGlhUGxheWVyOjpQ
cmVsb2FkPihwcmVsb2FkKSk7CiAKICAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2Fk
ICE9IE1lZGlhUGxheWVyOjpOb25lKQpAQCAtNTA1LDE0ICs1MDUsMTQgQEAgdm9pZCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OnNldFByZWxvYQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAogewotICAgIGlmIChtX3dlYk1l
ZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1
cm4gbV93ZWJNZWRpYVBsYXllci0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIFdlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQ
bGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZT4oCiAgICAgICAgICAgICBtX3dl
Yk1lZGlhUGxheWVyLT5tb3ZpZUxvYWRUeXBlKCkpOwogICAgIHJldHVybiBNZWRpYVBsYXllcjo6
VW5rbm93bjsKQEAgLTUyMCwzNSArNTIwLDM1IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBl
IFdlYk1lZGlhUGxheWUKIAogZmxvYXQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptZWRpYVRp
bWVGb3JUaW1lVmFsdWUoZmxvYXQgdGltZVZhbHVlKSBjb25zdAogewotICAgIGlmIChtX3dlYk1l
ZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1
cm4gbV93ZWJNZWRpYVBsYXllci0+bWVkaWFUaW1lRm9yVGltZVZhbHVlKHRpbWVWYWx1ZSk7CiAg
ICAgcmV0dXJuIHRpbWVWYWx1ZTsKIH0KIAogdW5zaWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5
ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dl
Yk1lZGlhUGxheWVyLT5kZWNvZGVkRnJhbWVDb3VudCgpOwogICAgIHJldHVybiAwOwogfQogCiB1
bnNpZ25lZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmRyb3BwZWRGcmFtZUNvdW50KCkgY29u
c3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRp
YVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmRyb3BwZWRGcmFtZUNv
dW50KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHVuc2lnbmVkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRp
YVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJu
IG1fd2ViTWVkaWFQbGF5ZXItPmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpOwogICAgIHJldHVybiAw
OwogfQogCiB1bnNpZ25lZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnZpZGVvRGVjb2RlZEJ5
dGVDb3VudCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT52
aWRlb0RlY29kZWRCeXRlQ291bnQoKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTU2OCw3ICs1Njgs
NyBAQCBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNBCiAKIGJvb2wgV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsOjphY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKCkKIHsKLSAg
ICByZXR1cm4gbV92aWRlb0xheWVyLmdldCgpICYmIG1fdmlkZW9MYXllci0+bGF5ZXJUcmVlSG9z
dCgpOworICAgIHJldHVybiBtX3ZpZGVvTGF5ZXIgJiYgbV92aWRlb0xheWVyLT5sYXllclRyZWVI
b3N0KCk7CiB9CiAKIFZpZGVvRnJhbWVDaHJvbWl1bSogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
OjpnZXRDdXJyZW50RnJhbWUoKQpAQCAtNTg1LDcgKzU4NSw3IEBAIFZpZGVvRnJhbWVDaHJvbWl1
bSogV2ViTWVkaWFQbGF5ZXJDbGllbnQKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpw
dXRDdXJyZW50RnJhbWUoVmlkZW9GcmFtZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogewogICAgIGlm
ICh2aWRlb0ZyYW1lICYmIHZpZGVvRnJhbWUgPT0gbV9jdXJyZW50VmlkZW9GcmFtZSkgewotICAg
ICAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkgeworICAgICAgICBpZiAobV93ZWJNZWRp
YVBsYXllcikgewogICAgICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+cHV0Q3VycmVudEZyYW1l
KAogICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVDaHJvbWl1bUltcGw6OnRvV2ViVmlkZW9GcmFt
ZSh2aWRlb0ZyYW1lKSk7CiAgICAgICAgIH0KQEAgLTY0Miw3ICs2NDIsNyBAQCBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIFdlYk1lZGlhUGxheWVyCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6c3RhcnREZWxheWVkTG9hZCgpCiB7CiAgICAgQVNTRVJUKG1fZGVsYXlpbmdMb2FkKTsK
LSAgICBBU1NFUlQoIW1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpOworICAgIEFTU0VSVCghbV93ZWJN
ZWRpYVBsYXllcik7CiAKICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTg4
MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RG93
bmxvYWRUb0ZpbGUoYm8KIFdlYlVSTFJlcXVlc3Q6OkV4dHJhRGF0YSogV2ViVVJMUmVxdWVzdDo6
ZXh0cmFEYXRhKCkgY29uc3QKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VSZXF1ZXN0OjpFeHRyYURh
dGE+IGRhdGEgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5leHRyYURhdGEoKTsKLSAg
ICBpZiAoIWRhdGEuZ2V0KCkpCisgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RXh0cmFEYXRhQ29udGFpbmVyKj4oZGF0YS5nZXQoKSktPmV4
dHJhRGF0YSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSwxNyArNDAxLDE3IEBAIFdlYlZp
ZXdJbXBsOjp+V2ViVmlld0ltcGwoKQogCiBSZW5kZXJUaGVtZSogV2ViVmlld0ltcGw6OnRoZW1l
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlLmdldCgpID8gbV9wYWdlLT50aGVtZSgpIDog
UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpOworICAgIHJldHVybiBtX3BhZ2UgPyBt
X3BhZ2UtPnRoZW1lKCkgOiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCk7CiB9CiAK
IFdlYkZyYW1lSW1wbCogV2ViVmlld0ltcGw6Om1haW5GcmFtZUltcGwoKQogewotICAgIHJldHVy
biBtX3BhZ2UuZ2V0KCkgPyBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShtX3BhZ2UtPm1haW5GcmFt
ZSgpKSA6IDA7CisgICAgcmV0dXJuIG1fcGFnZSA/IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKG1f
cGFnZS0+bWFpbkZyYW1lKCkpIDogMDsKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6dGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9wYWdlLmdldCgpKTsK
KyAgICBBU1NFUlQobV9wYWdlKTsKICAgICByZXR1cm4gbV9wYWdlLT50YWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoKTsKIH0KIApAQCAtOTIxLDcgKzkyMSw3IEBAIGJvb2wgV2ViVmlld0ltcGw6
Om1hcEtleUNvZGVGb3JTY3JvbGwoaW4KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVNlbGVjdFBv
cHVwKCkKIHsKLSAgICBpZiAobV9zZWxlY3RQb3B1cC5nZXQoKSkKKyAgICBpZiAobV9zZWxlY3RQ
b3B1cCkKICAgICAgICAgbV9zZWxlY3RQb3B1cC0+aGlkZVBvcHVwKCk7CiB9CiAKQEAgLTk1Miw3
ICs5NTIsNyBAQCB2b2lkICBXZWJWaWV3SW1wbDo6cG9wdXBPcGVuZWQoV2ViQ29yZTo6CiB2b2lk
ICBXZWJWaWV3SW1wbDo6cG9wdXBDbG9zZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVw
Q29udGFpbmVyKQogewogICAgIGlmIChwb3B1cENvbnRhaW5lci0+cG9wdXBUeXBlKCkgPT0gV2Vi
Q29yZTo6UG9wdXBDb250YWluZXI6OlNlbGVjdCkgewotICAgICAgICBBU1NFUlQobV9zZWxlY3RQ
b3B1cC5nZXQoKSk7CisgICAgICAgIEFTU0VSVChtX3NlbGVjdFBvcHVwKTsKICAgICAgICAgbV9z
ZWxlY3RQb3B1cCA9IDA7CiAgICAgfQogfQpAQCAtOTY3LDcgKzk2Nyw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmhpZGVBdXRvZmlsbFBvcHVwKCkKIAogRnJhbWUqIFdlYlZpZXdJbXBsOjpmb2N1c2Vk
V2ViQ29yZUZyYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlLmdldCgpID8gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkgOiAwOworICAgIHJldHVy
biBtX3BhZ2UgPyBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KSA6IDA7CiB9CiAKIFdlYlZpZXdJbXBsKiBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UoUGFnZSogcGFn
ZSkKQEAgLTk4NSw3ICs5ODUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjbG9zZSgpCiB7CiAgICAg
UmVmUHRyPFdlYkZyYW1lSW1wbD4gbWFpbkZyYW1lSW1wbDsKIAotICAgIGlmIChtX3BhZ2UuZ2V0
KCkpIHsKKyAgICBpZiAobV9wYWdlKSB7CiAgICAgICAgIC8vIEluaXRpYXRlIHNodXRkb3duIGZv
ciB0aGUgZW50aXJlIGZyYW1lc2V0LiAgVGhpcyB3aWxsIGNhdXNlIGEgbG90IG9mCiAgICAgICAg
IC8vIG5vdGlmaWNhdGlvbnMgdG8gYmUgc2VudC4KICAgICAgICAgaWYgKG1fcGFnZS0+bWFpbkZy
YW1lKCkpIHsKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjbG9zZSgpCiAg
ICAgfQogCiAgICAgLy8gU2hvdWxkIGhhcHBlbiBhZnRlciBtX3BhZ2UuY2xlYXIoKS4KLSAgICBp
ZiAobV9kZXZUb29sc0FnZW50LmdldCgpKQorICAgIGlmIChtX2RldlRvb2xzQWdlbnQpCiAgICAg
ICAgIG1fZGV2VG9vbHNBZ2VudC5jbGVhcigpOwogCiAgICAgLy8gUmVzZXQgdGhlIGRlbGVnYXRl
IHRvIHByZXZlbnQgbm90aWZpY2F0aW9ucyBiZWluZyBzZW50IGFzIHdlJ3JlIGJlaW5nCkBAIC0x
MTE4LDcgKzExMTgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZh
CiAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUocmVjdC5zaXplKCkpKTsKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhlbEFycmF5KEJ5dGVB
cnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KSk7Ci0gICAgaWYg
KGltYWdlQnVmZmVyLmdldCgpICYmIHBpeGVsQXJyYXkuZ2V0KCkpIHsKKyAgICBpZiAoaW1hZ2VC
dWZmZXIgJiYgcGl4ZWxBcnJheSkgewogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHBpeGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CiAgICAgICAgIGlt
YWdlQnVmZmVyLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCksIHJl
Y3Quc2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgSW50UG9pbnQoKSk7
CiAgICAgICAgIGdjLnNhdmUoKTsKQEAgLTEyMDksNyArMTIwOSw3IEBAIGJvb2wgV2ViVmlld0lt
cGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QKIAogICAgIG1fY3VycmVudElucHV0RXZlbnQgPSAm
aW5wdXRFdmVudDsKIAotICAgIGlmIChtX21vdXNlQ2FwdHVyZU5vZGUuZ2V0KCkgJiYgV2ViSW5w
dXRFdmVudDo6aXNNb3VzZUV2ZW50VHlwZShpbnB1dEV2ZW50LnR5cGUpKSB7CisgICAgaWYgKG1f
bW91c2VDYXB0dXJlTm9kZSAmJiBXZWJJbnB1dEV2ZW50Ojppc01vdXNlRXZlbnRUeXBlKGlucHV0
RXZlbnQudHlwZSkpIHsKICAgICAgICAgLy8gU2F2ZSBtX21vdXNlQ2FwdHVyZU5vZGUgc2luY2Ug
bW91c2VDYXB0dXJlTG9zdCgpIHdpbGwgY2xlYXIgaXQuCiAgICAgICAgIFJlZlB0cjxOb2RlPiBu
b2RlID0gbV9tb3VzZUNhcHR1cmVOb2RlOwogCkBAIC0xMzQ0LDcgKzEzNDQsNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkKICAgICAgICAgaGlkZVNlbGVjdFBvcHVw
KCk7CiAKICAgICAgICAgLy8gQ2xlYXIgZm9jdXMgb24gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZy
YW1lIGlmIGFueS4KLSAgICAgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgICAgIGlmICghbV9w
YWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7CkBAIC0xMzUyLDcgKzEzNTIsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpz
ZXRGb2N1cyhib29sIGVuYWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBSZWZQ
dHI8RnJhbWU+IGZvY3VzZWRGcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRGcmFtZSgpOwotICAgICAgICBpZiAoZm9jdXNlZEZyYW1lLmdldCgpKSB7CisgICAgICAgIGlm
IChmb2N1c2VkRnJhbWUpIHsKICAgICAgICAgICAgIC8vIEZpbmlzaCBhbiBvbmdvaW5nIGNvbXBv
c2l0aW9uIHRvIGRlbGV0ZSB0aGUgY29tcG9zaXRpb24gbm9kZS4KICAgICAgICAgICAgIEVkaXRv
ciogZWRpdG9yID0gZm9jdXNlZEZyYW1lLT5lZGl0b3IoKTsKICAgICAgICAgICAgIGlmIChlZGl0
b3IgJiYgZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAgYm9v
bCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRpb25SYW5nZShzaXplXwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdl
KCk7Ci0gICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZy
b21SYW5nZShmb2N1c2VkLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1l
bnRFbGVtZW50KCksIHJhbmdlLmdldCgpLCAqbG9jYXRpb24sICpsZW5ndGgpKQpAQCAtMTU2OCw3
ICsxNTY4LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9u
LT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVGV4dEl0ZXJhdG9y
OjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShzZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVs
ZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5nZXQoKSwgKmxvY2F0aW9uLCAqbGVuZ3Ro
KSkKQEAgLTE2MjQsMTMgKzE2MjQsMTMgQEAgV2ViU2V0dGluZ3MqIFdlYlZpZXdJbXBsOjpzZXR0
aW5ncygpCiB7CiAgICAgaWYgKCFtX3dlYlNldHRpbmdzKQogICAgICAgICBtX3dlYlNldHRpbmdz
ID0gYWRvcHRQdHIobmV3IFdlYlNldHRpbmdzSW1wbChtX3BhZ2UtPnNldHRpbmdzKCkpKTsKLSAg
ICBBU1NFUlQobV93ZWJTZXR0aW5ncy5nZXQoKSk7CisgICAgQVNTRVJUKG1fd2ViU2V0dGluZ3Mp
OwogICAgIHJldHVybiBtX3dlYlNldHRpbmdzLmdldCgpOwogfQogCiBXZWJTdHJpbmcgV2ViVmll
d0ltcGw6OnBhZ2VFbmNvZGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisg
ICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKIAogICAgIC8vIEZJ
WE1FOiBJcyB0aGlzIGNoZWNrIG5lZWRlZD8KQEAgLTE2NDIsNyArMTY0Miw3IEBAIFdlYlN0cmlu
ZyBXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKCkgY28KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0
UGFnZUVuY29kaW5nKGNvbnN0IFdlYlN0cmluZyYgZW5jb2RpbmdOYW1lKQogewotICAgIGlmICgh
bV9wYWdlLmdldCgpKQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBPbmx5IGNoYW5nZSBvdmVycmlkZSBlbmNvZGluZywgZG9uJ3QgY2hhbmdlIGRlZmF1bHQgZW5j
b2RpbmcuCkBAIC0xNzA3LDcgKzE3MDcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1c2Vk
RnJhbWUoV2ViRnJhCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldEluaXRpYWxGb2N1cyhib29sIHJl
dmVyc2UpCiB7Ci0gICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBrZXlib2FyZCBldmVu
dCwgd2UnbGwgY3JlYXRlIG9uZS4KQEAgLTE3MzIsMTEgKzE3MzIsMTEgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgcgogdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJGb2N1
c2VkTm9kZSgpCiB7CiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lLmdldCgpKQorICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50LmdldCgpKQorICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxOb2RlPiBvbGRGb2N1c2VkTm9kZSA9IGRvY3VtZW50LT5m
b2N1c2VkTm9kZSgpOwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y2xl
YXJGb2N1c2VkTm9kZSgpCiAgICAgLy8gQ2xlYXIgdGhlIGZvY3VzZWQgbm9kZS4KICAgICBkb2N1
bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7CiAKLSAgICBpZiAoIW9sZEZvY3VzZWROb2RlLmdldCgp
KQorICAgIGlmICghb2xkRm9jdXNlZE5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IGEgdGV4dCBmaWVsZCBoYXMgZm9jdXMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzZWxlY3Rp
b24gY29udHJvbGxlcgpAQCAtMTkzMyw3ICsxOTMzLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cGVy
Zm9ybU1lZGlhUGxheWVyQWN0aQogCiB2b2lkIFdlYlZpZXdJbXBsOjpjb3B5SW1hZ2VBdChjb25z
dCBXZWJQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgaWYgKCFt
X3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0
VGVzdFJlc3VsdEZvcldpbmRvd1Bvcyhwb2ludCk7CkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBXZWJE
cmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0CiAgICAgY29uc3QgV2ViUG9pbnQm
IHNjcmVlblBvaW50LAogICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dl
ZCkKIHsKLSAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKyAgICBBU1NFUlQo
IW1fY3VycmVudERyYWdEYXRhKTsKIAogICAgIG1fY3VycmVudERyYWdEYXRhID0gd2ViRHJhZ0Rh
dGE7CiAgICAgbV9vcGVyYXRpb25zQWxsb3dlZCA9IG9wZXJhdGlvbnNBbGxvd2VkOwpAQCAtMjAx
MCw3ICsyMDEwLDcgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldAog
CiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKIHsKLSAgICBBU1NFUlQo
bV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOworICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YSk7
CiAKICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0
KCksCkBAIC0yMDI5LDcgKzIwMjksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJh
Z0xlYXZlKCkKIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKGNvbnN0IFdlYlBvaW50
JiBjbGllbnRQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0
KCkpOworICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YSk7CiAKICAgICAvLyBJZiB0aGlzIHdl
YnZpZXcgdHJhbnNpdGlvbnMgZnJvbSB0aGUgImRyb3AgYWNjZXB0aW5nIiBzdGF0ZSB0byB0aGUg
Im5vdAogICAgIC8vIGFjY2VwdGluZyIgc3RhdGUsIHRoZW4gb3VyIElQQyBtZXNzYWdlIHJlcGx5
IGluZGljYXRpbmcgdGhhdCBtYXkgYmUgaW4tCkBAIC0yMDU5LDcgKzIwNTksNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXCiAKIFdlYkRyYWdPcGVyYXRpb24gV2Vi
Vmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIoY29uc3QgV2ViUG9pbnQmIGNsaWVu
dFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsIERyYWdBY3Rpb24gZHJhZ0FjdGlv
bikKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOworICAgIEFTU0VSVCht
X2N1cnJlbnREcmFnRGF0YSk7CiAKICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKICAgICAgICAgbV9j
dXJyZW50RHJhZ0RhdGEuZ2V0KCksCkBAIC0yMDk2LDcgKzIwOTYsNyBAQCB1bnNpZ25lZCBsb25n
IFdlYlZpZXdJbXBsOjpjcmVhdGVVbmlxdWVJCiAKIHZvaWQgV2ViVmlld0ltcGw6Omluc3BlY3RF
bGVtZW50QXQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewotICAgIGlmICghbV9wYWdlLmdldCgp
KQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocG9pbnQueCA9
PSAtMSB8fCBwb2ludC55ID09IC0xKQpAQCAtMjE3Nyw4ICsyMTc3LDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6YXBwbHlBdXRvZmlsbFN1Z2dlc3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZvY3VzZWROb2RlLmdldCgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW0gPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9jdXNlZE5vZGUu
Z2V0KCkpOwogCiAgICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhlIEF1dG9maWxsIHBvcHVwIGlzIHNo
b3duIHdlJ2xsIGNyZWF0ZSB0aGUgY2xpZW50IGFuZAogICAgIC8vIHRoZSBwb3B1cC4KQEAgLTIx
ODgsNyArMjE4Nyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0aW8K
ICAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoCiAgICAgICAgIGlucHV0RWxl
bSwgbmFtZXMsIGxhYmVscywgaWNvbnMsIHVuaXF1ZUlEcywgc2VwYXJhdG9ySW5kZXgpOwogCi0g
ICAgaWYgKCFtX2F1dG9maWxsUG9wdXAuZ2V0KCkpIHsKKyAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1
cCkgewogICAgICAgICBtX2F1dG9maWxsUG9wdXAgPSBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKG1f
YXV0b2ZpbGxQb3B1cENsaWVudC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3VnZ2VzdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZmlsbFBvcHVwU2V0
dGluZ3MpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFz
ZS5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdl
YldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVGFzayhTY3JpCiAgICAgaWYgKCF0aGlzUHRyLT5jbGll
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkg
d2ViQ2hhbm5lbHMoY2hhbm5lbHMuZ2V0KCkgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7CisgICAg
V2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVs
cy0+c2l6ZSgpIDogMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5z
aXplKCk7ICsraSkgewogICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5j
aGFubmVsKCktPndlYkNoYW5uZWxSZWxlYXNlKCk7CiAgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5z
ZXRDbGllbnQoMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5ODgz
NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBXb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bTo6fldvcmtlckFzCiAKIGJvb2wgV29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkKIHsKLSAgICBpZiAoIW1fYnJp
ZGdlRm9yQ3VycmVudE9wZXJhdGlvbi5nZXQoKSkKKyAgICBpZiAoIW1fYnJpZGdlRm9yQ3VycmVu
dE9wZXJhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IG1fYnJpZGdlRm9yQ3VycmVudE9wZXJh
dGlvbi5yZWxlYXNlKCk7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBXb3JrZXJBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bTo6Y3JlYQogCiBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U+IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiB7Ci0gICAgQVNTRVJUKCFtX3N5bmNocm9ub3VzIHx8ICFtX2JyaWRnZUZv
ckN1cnJlbnRPcGVyYXRpb24uZ2V0KCkpOworICAgIEFTU0VSVCghbV9zeW5jaHJvbm91cyB8fCAh
bV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKIAogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVy
YXRpb24gPSBmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3VycmVudE9w
ZXJhdGlvbi5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+
cnVuTG9vcCgpLmNyZWF0ZVVuaXF1ZUlkKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113017</attachid>
            <date>2011-10-31 00:06:31 -0700</date>
            <delta_ts>2011-10-31 00:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71205-20111031000630.patch</filename>
            <type>text/plain</type>
            <size>43933</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQx
IEBACisyMDExLTEwLTMwICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBUaGUgQ2hyb21pdW0gcG9ydCBjYWxscyBPd25QdHI6OmdldCBhbmQgUmVm
UHRyOjpnZXQgd2F5IG1vcmUgb2Z0ZW4gdGhhbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IHN0eWxlIGlzIHRvIHVzZSB0aGUgaW1w
bGljaXQgQm9vbGVhbiBjb252ZXJzaW9ucyByYXRoZXIgdGhhbgorICAgICAgICBjYWxsaW5nIGdl
dCgpIG9uIHRoZXNlIHBvaW50ZXIgdHlwZXMuICBUaGlzIHBhdGNoIGNsZWFucyB1cCBtb3N0IChh
bGw/KQorICAgICAgICBvZiB0aGVzZSBzdHlsZSBpc3N1ZXMgaW4gdGhlIENocm9taXVtIHBvcnQg
aW4gdGhlIGhvcGVzIHRoYXQgdGhleSdsbCBiZQorICAgICAgICBjb3B5L3Bhc3RlZCBsZXNzIGlu
IHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBzcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5h
bC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbDo6dG9X
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgICogc3JjL0F1ZGlvRGVzdGluYXRpb25D
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06
OkF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uQ2hyb21pdW06OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bTo6c3RvcCk6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2V0TWFpbkRvY3Vt
ZW50RXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvbW1p
dHRlZExvYWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlz
aGVkTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cmVk
aXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBzcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVuU3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZENsb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRGYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6CisgICAgICAg
ICogc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeUV4cHJlc3Np
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNUZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc01hcmt1cCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6Z2V0UHJpbnRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OnByaW50RW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01h
dGNoZXMpOgorICAgICAgICAqIHNyYy9XZWJJREJLZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJLZXk6OnR5cGUpOgorICAgICAgICAqIHNyYy9XZWJJREJLZXlSYW5nZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQktleVJhbmdlOjpsb3dlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQktleVJhbmdlOjp1cHBlcik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQktleVJhbmdlOjps
b3dlck9wZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJLZXlSYW5nZTo6dXBwZXJPcGVuKToK
KyAgICAgICAgKiBzcmMvV2ViSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
OjpXZWJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6On5XZWJNZWRpYVBsYXllckNsaWVudEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnJlYWR5U3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZXBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpsb2FkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmNhbmNlbExv
YWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBhdXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzb3VyY2VBcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNvdXJjZUVuZE9mU3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpuYXR1cmFsU2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aGFzVmlkZW8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc0F1ZGlvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3VycmVudFRpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWspOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWtpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldEVuZFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBhdXNlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1NhdmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFZvbHVtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bmV0d29ya1N0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptYXhUaW1lU2Vla2FibGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmJ1ZmZlcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkYXRhUmF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlc0tub3duKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp0b3RhbEJ5dGVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpieXRlc0xvYWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OnNldFByZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjptZWRpYVRpbWVGb3JUaW1lVmFsdWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmRlY29kZWRGcmFtZUNvdW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkcm9wcGVkRnJhbWVDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6YXVkaW9EZWNvZGVkQnl0
ZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp2aWRl
b0RlY29kZWRCeXRlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OmFjY2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnB1dEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3RhcnREZWxheWVkTG9hZCk6CisgICAgICAgICog
c3JjL1dlYlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpl
eHRyYURhdGEpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp0aGVtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpt
YWluRnJhbWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlU2Vs
ZWN0UG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cG9wdXBDbG9zZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Zm9jdXNlZFdlYkNvcmVGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNldEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldHRpbmdzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnBhZ2VFbmNvZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzZXRQYWdlRW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0SW5pdGlhbEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyRm9j
dXNlZE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29weUltYWdlQXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aW5zcGVjdEVsZW1lbnRBdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjphcHBseUF1dG9maWxsU3VnZ2VzdGlvbnMpOgorICAgICAgICAqIHNyYy9XZWJXb3Jr
ZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OndhaXRGb3JP
cGVyYXRpb25Ub0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtOjpjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKToKKwog
MjAxMS0xMC0yOSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50
ZXJuYWwuaAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
cHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFdlYktpdDo6V2ViQXBwbGljYXRpb25DYWNoZUhv
c3QqIHRvV2ViQXBwbGljYXRpb25DYWNoZUhvc3QoQXBwbGljYXRpb25DYWNoZUhvc3QqIGlubmVy
SG9zdCkKICAgICB7Ci0gICAgICAgIGlmIChpbm5lckhvc3QgJiYgaW5uZXJIb3N0LT5tX2ludGVy
bmFsLmdldCgpKQorICAgICAgICBpZiAoaW5uZXJIb3N0ICYmIGlubmVySG9zdC0+bV9pbnRlcm5h
bCkKICAgICAgICAgICAgIHJldHVybiBpbm5lckhvc3QtPm1faW50ZXJuYWwtPm1fb3V0ZXJIb3N0
LmdldCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXVkaW9EZXN0aW5h
dGlvbkNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBBdWRpb0Rl
c3RpbmF0aW9uQ2hyb21pdW06OkF1ZGlvRGVzdGluYXRpCiAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgbV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVh
dGVBdWRpb0RldmljZShtX2NhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVyT2ZDaGFubmVscywgc2Ft
cGxlUmF0ZSwgdGhpcykpOwotICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNlLmdldCgpKTsKKyAgICBB
U1NFUlQobV9hdWRpb0RldmljZSk7CiB9CiAKIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bTo6fkF1
ZGlvRGVzdGluYXRpb25DaHJvbWl1bSgpCkBAIC04Nyw3ICs4Nyw3IEBAIEF1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bTo6fkF1ZGlvRGVzdGluYXQKIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21p
dW06OnN0YXJ0KCkKIHsKLSAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2UuZ2V0
KCkpIHsKKyAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2UpIHsKICAgICAgICAg
bV9hdWRpb0RldmljZS0+c3RhcnQoKTsKICAgICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogICAg
IH0KQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OnN0YXJ0
KCkKIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OnN0b3AoKQogewotICAgIGlmICht
X2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlLmdldCgpKSB7CisgICAgaWYgKG1faXNQbGF5aW5n
ICYmIG1fYXVkaW9EZXZpY2UpIHsKICAgICAgICAgbV9hdWRpb0RldmljZS0+c3RvcCgpOwogICAg
ICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24g
OTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6cmV2ZXJ0VG9Qcm92CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIGlmIChtX3BsdWdpbldpZGdldC5nZXQoKSkgeworICAgIGlmIChtX3BsdWdpbldp
ZGdldCkgewogICAgICAgICBpZiAobV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4pIHsKICAg
ICAgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRGYWlsTG9hZGluZyhlcnJvcik7CiAgICAgICAg
ICAgICBtX3NlbnRJbml0aWFsUmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwpAQCAtMTEwNyw3ICsx
MTA3LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZENoYW5nZVRpdAogLy8gQ2Fs
bGVkIHdoZW5ldmVyIGRhdGEgaXMgcmVjZWl2ZWQuCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQogewotICAgIGlmICghbV9wbHVnaW5XaWRnZXQuZ2V0KCkpIHsKKyAgICBp
ZiAoIW1fcGx1Z2luV2lkZ2V0KSB7CiAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkg
ewogICAgICAgICAgICAgYm9vbCBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlOwogICAgICAgICAgICAg
bV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEb2N1bWVudERhdGEobV93ZWJGcmFtZSwg
ZGF0YSwgbGVuZ3RoLCBwcmV2ZW50RGVmYXVsdCk7CkBAIC0xMTIzLDcgKzExMjMsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29tbWl0dGVkTG9hCiAKICAgICAvLyBUaGUgcGx1Z2lu
IHdpZGdldCBjb3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbiB0aGUgbV93ZWJGcmFtZS0+RGlkUmVj
ZWl2ZURhdGEKICAgICAvLyBmdW5jdGlvbi4KLSAgICBpZiAobV9wbHVnaW5XaWRnZXQuZ2V0KCkp
IHsKKyAgICBpZiAobV9wbHVnaW5XaWRnZXQpIHsKICAgICAgICAgaWYgKCFtX3NlbnRJbml0aWFs
UmVzcG9uc2VUb1BsdWdpbikgewogICAgICAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9Q
bHVnaW4gPSB0cnVlOwogICAgICAgICAgICAgbV9wbHVnaW5XaWRnZXQtPmRpZFJlY2VpdmVSZXNw
b25zZSgKQEAgLTExMzIsMTQgKzExMzIsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmNvbW1pdHRlZExvYQogCiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgYWJvdmUg
Y2FsbCByZW1vdmVkIHRoZSBwb2ludGVyIHRvIHRoZSBwbHVnaW4sIHNvCiAgICAgICAgIC8vIGNo
ZWNrIGJlZm9yZSBjYWxsaW5nIGl0LgotICAgICAgICBpZiAobV9wbHVnaW5XaWRnZXQuZ2V0KCkp
CisgICAgICAgIGlmIChtX3BsdWdpbldpZGdldCkKICAgICAgICAgICAgIG1fcGx1Z2luV2lkZ2V0
LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOwogICAgIH0KIH0KIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZGwpCiB7Ci0g
ICAgaWYgKG1fcGx1Z2luV2lkZ2V0LmdldCgpKSB7CisgICAgaWYgKG1fcGx1Z2luV2lkZ2V0KSB7
CiAgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIG1f
cGx1Z2luV2lkZ2V0ID0gMDsKICAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKQEAgLTE1MDgsNyArMTUwOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBs
OjpyZWRpcmVjdERhdGEKIHsKICAgICBpZiAocGx1Z2luV2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5l
cigpKQogICAgICAgICBtX3BsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFdlYlBsdWdpbkNvbnRh
aW5lckltcGwqPihwbHVnaW5XaWRnZXQpOwotICAgIEFTU0VSVChtX3BsdWdpbldpZGdldC5nZXQo
KSk7CisgICAgQVNTRVJUKG1fcGx1Z2luV2lkZ2V0KTsKIH0KIAogUGFzc1JlZlB0cjxXaWRnZXQ+
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCgKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODIsNyArMTgyLDcgQEAgdm9pZCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lcwog
ICAgIFdlYlN0cmluZyBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+bWVzc2FnZSgpLT50b1dpcmVT
dHJpbmcoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNo
YW5uZWxzID0gbWVzc2FnZS0+Y2hhbm5lbHMoKTsKICAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxB
cnJheSogd2ViQ2hhbm5lbHMgPSAwOwotICAgIGlmIChjaGFubmVscy5nZXQoKSAmJiBjaGFubmVs
cy0+c2l6ZSgpKSB7CisgICAgaWYgKGNoYW5uZWxzICYmIGNoYW5uZWxzLT5zaXplKCkpIHsKICAg
ICAgICAgd2ViQ2hhbm5lbHMgPSBuZXcgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkoY2hhbm5l
bHMtPnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhbm5lbHMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbCogcGxhdGZvcm1DaGFubmVsID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlz
aW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6c3RhcnQoKQogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVTdGFydGVkOwog
CiAgICAgbV9sb2FkZXIgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRl
VVJMTG9hZGVyKCkpOwotICAgIEFTU0VSVChtX2xvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKG1f
bG9hZGVyKTsKIAogICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZFJlcXVlc3QobV9y
ZXF1ZXN0KTsKICAgICB3cmFwcGVkUmVxdWVzdC5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGFs
bG93U3RvcmVkQ3JlZGVudGlhbHMoKSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CiAgICAgT3duUHRyPFdl
YlVSTExvYWRlcj4gbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNy
ZWF0ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKKyAgICBBU1NFUlQo
bG9hZGVyKTsKIAogICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3Qp
OwogICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRp
YWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiA5ODgzNSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpjb25uZWN0CiB7CiAgICAgbV9zb2NrZXQgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKCkpOwogICAgIExPRyhOZXR3b3Jr
LCAiY29ubmVjdCIpOwotICAgIEFTU0VSVChtX3NvY2tldC5nZXQoKSk7CisgICAgQVNTRVJUKG1f
c29ja2V0KTsKICAgICBtX3NvY2tldC0+Y29ubmVjdCh1cmwsIHRoaXMpOwogfQogCiBpbnQgU29j
a2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikK
IHsKICAgICBMT0coTmV0d29yaywgInNlbmQgbGVuPSVkIiwgbGVuKTsKLSAgICBBU1NFUlQobV9z
b2NrZXQuZ2V0KCkpOworICAgIEFTU0VSVChtX3NvY2tldCk7CiAgICAgaWYgKG1fcGVuZGluZ0Ft
b3VudFNlbnQgKyBsZW4gPj0gbV9tYXhQZW5kaW5nU2VuZEFsbG93ZWQpCiAgICAgICAgIGxlbiA9
IG1fbWF4UGVuZGluZ1NlbmRBbGxvd2VkIC0gbV9wZW5kaW5nQW1vdW50U2VudCAtIDE7CiAKQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVu
CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkT3BlbiAl
ZCIsCiAgICAgICAgIG1heFBlbmRpbmdTZW5kQWxsb3dlZCk7CiAgICAgQVNTRVJUKG1heFBlbmRp
bmdTZW5kQWxsb3dlZCA+IDApOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldC5nZXQoKSkg
eworICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NFUlQoc29ja2V0
SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9tYXhQZW5kaW5nU2VuZEFsbG93
ZWQgPSBtYXhQZW5kaW5nU2VuZEFsbG93ZWQ7CiAgICAgICAgIG1faGFuZGxlLT5tX3N0YXRlID0g
U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6T3BlbjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRTZW5kCiB7CiAgICAgTE9HKE5ldHdvcmssICJT
b2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkU2VuZERhdGEgJWQiLCBhbW91bnRTZW50KTsK
ICAgICBBU1NFUlQoYW1vdW50U2VudCA+IDApOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tl
dC5nZXQoKSkgeworICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NF
UlQoc29ja2V0SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9wZW5kaW5nQW1v
dW50U2VudCAtPSBhbW91bnRTZW50OwogICAgICAgICBBU1NFUlQobV9wZW5kaW5nQW1vdW50U2Vu
dCA+PSAwKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVy
bmFsOjpkaWRTZW5kCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZl
RGF0YShXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSwgY29uc3QgV2ViRGF0YSYg
ZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgImRpZFJlY2VpdmVEYXRhIik7Ci0gICAgaWYgKG1f
aGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7CisgICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0
KSB7CiAgICAgICAgIEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwogICAg
ICAgICBpZiAobV9oYW5kbGUtPm1fY2xpZW50KQogICAgICAgICAgICAgbV9oYW5kbGUtPm1fY2xp
ZW50LT5kaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YShtX2hhbmRsZSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpkaWRSZWNlCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRDbG9z
ZShXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSkKIHsKICAgICBMT0coTmV0d29y
aywgImRpZENsb3NlIik7Ci0gICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7Cisg
ICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0KSB7CiAgICAgICAgIEFTU0VSVChzb2NrZXRIYW5k
bGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwogICAgICAgICBtX3NvY2tldC5jbGVhcigpOwogICAgICAg
ICBTb2NrZXRTdHJlYW1IYW5kbGUqIGggPSBtX2hhbmRsZTsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRDbG9zCiB2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZUludGVybmFsOjpkaWRGYWlsKFdlYlNvY2tldFN0cmVhbUhhbmRsZSogc29ja2V0SGFu
ZGxlLCBjb25zdCBXZWJTb2NrZXRTdHJlYW1FcnJvciYgZXJyKQogewogICAgIExPRyhOZXR3b3Jr
LCAiZGlkRmFpbCIpOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldC5nZXQoKSkgeworICAg
IGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NFUlQoc29ja2V0SGFuZGxl
ID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9zb2NrZXQuY2xlYXIoKTsKICAgICAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoID0gbV9oYW5kbGU7CkBAIC0yMDQsMTQgKzIwNCwxNCBAQCBT
b2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoCiAKIGludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBidWYsIGludCBsZW4pCiB7Ci0gICAg
aWYgKCFtX2ludGVybmFsLmdldCgpKQorICAgIGlmICghbV9pbnRlcm5hbCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPnNlbmQoYnVmLCBsZW4pOwogfQogCiB2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiB7Ci0gICAgaWYgKG1faW50ZXJu
YWwuZ2V0KCkpCisgICAgaWYgKG1faW50ZXJuYWwpCiAgICAgICAgIG1faW50ZXJuYWwtPmNsb3Nl
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MzIsNyArNTMyLDcgQEAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJBY2Nlc3NpYmls
aXR5TwogICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBtX3ByaXZhdGUtPmRvY3VtZW50RnJh
bWVWaWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBoaXQgPSBtX3ByaXZhdGUtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnRlbnRz
UG9pbnQpOwogCi0gICAgaWYgKGhpdC5nZXQoKSkKKyAgICBpZiAoaGl0KQogICAgICAgICByZXR1
cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdChoaXQpOwogCiAgICAgaWYgKG1fcHJpdmF0ZS0+Ym91
bmRpbmdCb3hSZWN0KCkuY29udGFpbnMoY29udGVudHNQb2ludCkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQ0LDcgKzc0NCw3IEBAIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5
RXhwcmUKICAgICAgICAgWFBhdGhSZXN1bHQ6Ok9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLAog
ICAgICAgICAwLCAvLyBYUGF0aFJlc3VsdCBvYmplY3QKICAgICAgICAgZWMpOwotICAgIGlmICgh
eHBhdGhSZXN1bHQuZ2V0KCkpCisgICAgaWYgKCF4cGF0aFJlc3VsdCkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBOb2RlKiBub2RlID0geHBhdGhSZXN1bHQtPml0ZXJhdGVOZXh0KGVjKTsKQEAg
LTkzNyw3ICs5MzcsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZFJlcXVlc3QoY29uc3QgV2Vi
CiB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhpc3RvcnlJdGVtKGNvbnN0IFdlYkhpc3RvcnlJdGVt
JiBpdGVtKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaGlzdG9yeUl0ZW0gPSBQYXNzUmVm
UHRyPEhpc3RvcnlJdGVtPihpdGVtKTsKLSAgICBBU1NFUlQoaGlzdG9yeUl0ZW0uZ2V0KCkpOwor
ICAgIEFTU0VSVChoaXN0b3J5SXRlbSk7CiAKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cHJlcGFy
ZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCk7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50
SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7CkBAIC0x
MTgyLDcgKzExODIsNyBAQCBzaXplX3QgV2ViRnJhbWVJbXBsOjpjaGFyYWN0ZXJJbmRleEZvclBv
CiAgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
d2ViUG9pbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUoKS0+ZXZlbnRIYW5k
bGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CiAgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lKCktPnJhbmdlRm9yUG9pbnQocmVzdWx0LnBvaW50KCkpOwotICAg
IGlmICghcmFuZ2UuZ2V0KCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwogCiAgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CkBAIC0xMzA4LDcgKzEzMDgsNyBA
QCBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc1RleHQoCiAgICAgICAgIHJldHVy
biBwbHVnaW5Db250YWluZXItPnBsdWdpbigpLT5zZWxlY3Rpb25Bc1RleHQoKTsKIAogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gcmFuZ2UtPnRleHQoKTsKQEAg
LTEzMjYsNyArMTMyNiw3IEBAIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6OnNlbGVjdGlvbkFzTWFy
a3UKICAgICAgICAgcmV0dXJuIHBsdWdpbkNvbnRhaW5lci0+cGx1Z2luKCktPnNlbGVjdGlvbkFz
TWFya3VwKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiAKICAgICByZXR1cm4gY3JlYXRl
TWFya3VwKHJhbmdlLmdldCgpLCAwKTsKQEAgLTE0MjIsNyArMTQyMiw3IEBAIGludCBXZWJGcmFt
ZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2ViU2kKIGZsb2F0IFdlYkZyYW1lSW1wbDo6Z2V0UHJp
bnRQYWdlU2hyaW5rKGludCBwYWdlKQogewogICAgIC8vIEVuc3VyZSBjb3JyZWN0IHN0YXRlLgot
ICAgIGlmICghbV9wcmludENvbnRleHQuZ2V0KCkgfHwgcGFnZSA8IDApIHsKKyAgICBpZiAoIW1f
cHJpbnRDb250ZXh0IHx8IHBhZ2UgPCAwKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNDMzLDcgKzE0MzMsNyBAQCBmbG9hdCBX
ZWJGcmFtZUltcGw6OmdldFByaW50UGFnZVNocmluayhpCiBmbG9hdCBXZWJGcmFtZUltcGw6OnBy
aW50UGFnZShpbnQgcGFnZSwgV2ViQ2FudmFzKiBjYW52YXMpCiB7CiAgICAgLy8gRW5zdXJlIGNv
cnJlY3Qgc3RhdGUuCi0gICAgaWYgKCFtX3ByaW50Q29udGV4dC5nZXQoKSB8fCBwYWdlIDwgMCB8
fCAhZnJhbWUoKSB8fCAhZnJhbWUoKS0+ZG9jdW1lbnQoKSkgeworICAgIGlmICghbV9wcmludENv
bnRleHQgfHwgcGFnZSA8IDAgfHwgIWZyYW1lKCkgfHwgIWZyYW1lKCktPmRvY3VtZW50KCkpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
QEAgLTE0NDksOCArMTQ0OSw4IEBAIGZsb2F0IFdlYkZyYW1lSW1wbDo6cHJpbnRQYWdlKGludCBw
YWdlLCAKIAogdm9pZCBXZWJGcmFtZUltcGw6OnByaW50RW5kKCkKIHsKLSAgICBBU1NFUlQobV9w
cmludENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3ByaW50Q29udGV4dC5nZXQoKSkKKyAgICBB
U1NFUlQobV9wcmludENvbnRleHQpOworICAgIGlmIChtX3ByaW50Q29udGV4dCkKICAgICAgICAg
bV9wcmludENvbnRleHQtPmVuZCgpOwogICAgIG1fcHJpbnRDb250ZXh0LmNsZWFyKCk7CiB9CkBA
IC0xNjQzLDcgKzE2NDMsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVz
KGluCiAgICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2UtPmVuZE9mZnNldCgp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDAsIGVjMiA9IDA7Ci0gICAgaWYgKG1fcmVzdW1l
U2NvcGluZ0Zyb21SYW5nZS5nZXQoKSkgeworICAgIGlmIChtX3Jlc3VtZVNjb3BpbmdGcm9tUmFu
Z2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHNjb3Bpbmcgb3Bl
cmF0aW9uIHRoYXQgdGltZWQgb3V0IGFuZCBkaWRuJ3QKICAgICAgICAgLy8gY29tcGxldGUgbGFz
dCB0aW1lIGFyb3VuZCwgc28gd2Ugc2hvdWxkIHN0YXJ0IGZyb20gd2hlcmUgd2UgbGVmdCBvZmYu
CiAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChtX3Jlc3VtZVNjb3BpbmdGcm9tUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCksCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bWFnZUNHLmNwcAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE0ICsxMDgsMTQgQEAgV2Vi
SW1hZ2U6OldlYkltYWdlKGNvbnN0IFBhc3NSZWZQdHI8SW1hZwogICAgIDogbV9pbWFnZVJlZigw
KQogewogICAgIE5hdGl2ZUltYWdlUHRyIHA7Ci0gICAgaWYgKGltYWdlLmdldCgpICYmIChwID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKQorICAgIGlmIChpbWFnZSAmJiAo
cCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKICAgICAgICAgYXNzaWdu
KHApOwogfQogCiBXZWJJbWFnZSYgV2ViSW1hZ2U6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRy
PEltYWdlPiYgaW1hZ2UpCiB7CiAgICAgTmF0aXZlSW1hZ2VQdHIgcDsKLSAgICBpZiAoaW1hZ2Uu
Z2V0KCkgJiYgKHAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCisgICAg
aWYgKGltYWdlICYmIChwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKQog
ICAgICAgICBhc3NpZ24ocCk7CiAgICAgZWxzZQogICAgICAgICByZXNldCgpOwpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVu
dEltcGwuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsx
MDQsNyBAQCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6On5XZWJNZWRpYVBsYXllCiB7CiAgICAg
Ly8gVmlkZW9MYXllckNocm9taXVtIG1heSBvdXRsaXZlIHRoaXMgb2JqZWN0IHNvIGNsZWFyIHRo
ZSBiYWNrIHBvaW50ZXIuCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
IChtX3ZpZGVvTGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fdmlkZW9MYXllcikKICAgICAgICAgbV92
aWRlb0xheWVyLT5yZWxlYXNlUHJvdmlkZXIoKTsKICNlbmRpZgogfQpAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXQKICAgICBBU1NFUlQo
bV9tZWRpYVBsYXllcik7CiAgICAgbV9tZWRpYVBsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKGhhc1ZpZGVvKCkgJiYg
c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpICYmICFtX3ZpZGVvTGF5ZXIuZ2V0KCkpCisg
ICAgaWYgKGhhc1ZpZGVvKCkgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpICYmICFt
X3ZpZGVvTGF5ZXIpCiAgICAgICAgIG1fdmlkZW9MYXllciA9IFZpZGVvTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDAsIHRoaXMpOwogI2VuZGlmCiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnJlcGFpbnQoKQogewogICAgIEFTU0VSVChtX21lZGlhUGxh
eWVyKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fdmlkZW9M
YXllci5nZXQoKSAmJiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpCisgICAgaWYgKG1f
dmlkZW9MYXllciAmJiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpCiAgICAgICAgIG1f
dmlkZW9MYXllci0+c2V0TmVlZHNEaXNwbGF5KEludFJlY3QoMCwgMCwgbV92aWRlb0xheWVyLT5i
b3VuZHMoKS53aWR0aCgpLCBtX3ZpZGVvTGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKSk7CiAjZW5k
aWYKICAgICBtX21lZGlhUGxheWVyLT5yZXBhaW50KCk7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9p
ZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmxvYWRJbnRlcgogewogICAgIEZyYW1lKiBmcmFt
ZSA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX21lZGlhUGxheWVyLT5tZWRpYVBs
YXllckNsaWVudCgpKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBtX3dlYk1lZGlhUGxheWVy
ID0gY3JlYXRlV2ViTWVkaWFQbGF5ZXIodGhpcywgZnJhbWUpOwotICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyLmdldCgpKSB7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpIHsKICNpZiBFTkFCTEUo
V0VCX0FVRElPKQogICAgICAgICAvLyBNYWtlIHN1cmUgaWYgd2UgY3JlYXRlL3JlLWNyZWF0ZSB0
aGUgV2ViTWVkaWFQbGF5ZXIgdGhhdCB3ZSB1cGRhdGUgb3VyIHdyYXBwZXIuCiAgICAgICAgIG1f
YXVkaW9Tb3VyY2VQcm92aWRlci53cmFwKG1fd2ViTWVkaWFQbGF5ZXItPmF1ZGlvU291cmNlUHJv
dmlkZXIoKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudElt
cGw6OmxvYWRJbnRlcgogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y2FuY2VsTG9h
ZCgpCiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVk
aWFQbGF5ZXIpCiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPmNhbmNlbExvYWQoKTsKIH0KIApA
QCAtMjY1LDI3ICsyNjUsMjcgQEAgUGxhdGZvcm1NZWRpYSBXZWJNZWRpYVBsYXllckNsaWVudElt
cGw6OgogCiB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cGxheSgpCiB7Ci0gICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAg
ICAgIG1fd2ViTWVkaWFQbGF5ZXItPnBsYXkoKTsKIH0KIAogdm9pZCBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OnBhdXNlKCkKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAg
ICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+cGF1c2Uo
KTsKIH0KIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiBib29sIFdlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6c291cmNlQXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93
ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFw
cGVuZChkYXRhLCBsZW5ndGgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OnNvdXJjZUVuZE9mU3RyZWFtKFdlYkNvcmU6Ok1lZGlhUGxheWVy
OjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIu
Z2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIG1fd2ViTWVkaWFQbGF5
ZXItPnNvdXJjZUVuZE9mU3RyZWFtKHN0YXRpY19jYXN0PFdlYk1lZGlhUGxheWVyOjpFbmRPZlN0
cmVhbVN0YXR1cz4oc3RhdHVzKSk7CiB9CiAjZW5kaWYKQEAgLTI5OCwxMjEgKzI5OCwxMjEgQEAg
dm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnByZXBhcmVUbwogCiBJbnRTaXplIFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6bmF0dXJhbFNpemUoKSBjb25zdAogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBy
ZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+bmF0dXJhbFNpemUoKTsKICAgICByZXR1cm4gSW50U2l6
ZSgpOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aGFzVmlkZW8oKSBjb25z
dAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+aGFzVmlkZW8oKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpoYXNB
dWRpbygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5oYXNB
dWRpbygpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIGlmIChtX3dlYk1lZGlhUGxh
eWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBtX3dlYk1lZGlh
UGxheWVyLT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCiBmbG9hdCBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5n
ZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVk
aWFQbGF5ZXItPmR1cmF0aW9uKCk7CiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKIGZsb2F0IFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBy
ZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+Y3VycmVudFRpbWUoKTsKICAgICByZXR1cm4gMC4wZjsK
IH0KIAogdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWsoZmxvYXQgdGltZSkKIHsK
LSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXll
cikKICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+c2Vlayh0aW1lKTsKIH0KIAogYm9vbCBXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnNlZWtpbmcoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1l
ZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1
cm4gbV93ZWJNZWRpYVBsYXllci0+c2Vla2luZygpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKIHsK
LSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXll
cikKICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+c2V0RW5kVGltZSh0aW1lKTsKIH0KIAogdm9p
ZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKLSAgICBp
ZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAg
ICAgICAgbV93ZWJNZWRpYVBsYXllci0+c2V0UmF0ZShyYXRlKTsKIH0KIAogYm9vbCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OnBhdXNlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQ
bGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBt
X3dlYk1lZGlhUGxheWVyLT5wYXVzZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAogewot
ICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVy
KQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c3VwcG9ydHNGdWxsc2NyZWVuKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
c3VwcG9ydHNTYXZlKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkK
KyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5
ZXItPnN1cHBvcnRzU2F2ZSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7Ci0gICAgaWYgKG1f
d2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAg
IG1fd2ViTWVkaWFQbGF5ZXItPnNldFZvbHVtZSh2b2x1bWUpOwogfQogCiBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bmV0d29ya1N0YXRlKCkgY29u
c3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRp
YVBsYXllcikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGU+KG1fd2ViTWVkaWFQbGF5ZXItPm5ldHdvcmtTdGF0ZSgpKTsKICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OkVtcHR5OwogfQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OnJlYWR5U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU+KG1fd2ViTWVkaWFQbGF5ZXItPnJl
YWR5U3RhdGUoKSk7CiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKIH0KIAog
ZmxvYXQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAog
ewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxh
eWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+bWF4VGltZVNlZWthYmxlKCk7
CiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpidWZmZXJlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQ
bGF5ZXIuZ2V0KCkpIHsKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikgewogICAgICAgICBjb25z
dCBXZWJUaW1lUmFuZ2VzJiB3ZWJSYW5nZXMgPSBtX3dlYk1lZGlhUGxheWVyLT5idWZmZXJlZCgp
OwogCiAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSB0aW1lIHJhbmdlcyBpbiBhIG1lbWJlciB2
YXJpYWJsZSBhbmQgdXBkYXRlIGl0IHdoZW4gbmVlZGVkLgpAQCAtNDI2LDM1ICs0MjYsMzUgQEAg
UGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBXZWJNZWRpYVBsYXllckNsaQogCiBpbnQgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpkYXRhUmF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQ
bGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBt
X3dlYk1lZGlhUGxheWVyLT5kYXRhUmF0ZSgpOwogICAgIHJldHVybiAwOwogfQogCiBib29sIFdl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKLSAgICBp
ZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAg
ICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnRvdGFsQnl0ZXNLbm93bigpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogdW5zaWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp0b3Rh
bEJ5dGVzKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBp
ZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX3dlYk1lZGlhUGxheWVyLT50b3RhbEJ5dGVzKCkpOwogICAgIHJldHVybiAwOwogfQogCiB1
bnNpZ25lZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsK
LSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXll
cikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3dlYk1lZGlhUGxheWVy
LT5ieXRlc0xvYWRlZCgpKTsKICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV93
ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAg
bV93ZWJNZWRpYVBsYXllci0+c2V0U2l6ZShXZWJTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkpOwogfQogCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnBhaW50Q3VycgogICAgIC8vIE5vcm1hbGx5IEdyYXBoaWNzQ29udGV4dCBvcGVyYXRp
b25zIGRvIG5vdGhpbmcgd2hlbiBwYWludGluZyBpcyBkaXNhYmxlZC4KICAgICAvLyBTaW5jZSB3
ZSdyZSBhY2Nlc3NpbmcgcGxhdGZvcm1Db250ZXh0KCkgZGlyZWN0bHkgd2UgaGF2ZSB0byBtYW51
YWxseQogICAgIC8vIGNoZWNrLgotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpICYmICFj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllciAm
JiAhY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKSB7CiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICBXZWJDYW52YXMqIGNhbnZhcyA9IHBsYXRm
b3JtQ29udGV4dC0+Y2FudmFzKCk7CkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OnNldFByZWxvYQogewogICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7CiAK
LSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXll
cikKICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+c2V0UHJlbG9hZChzdGF0aWNfY2FzdDxXZWJN
ZWRpYVBsYXllcjo6UHJlbG9hZD4ocHJlbG9hZCkpOwogCiAgICAgaWYgKG1fZGVsYXlpbmdMb2Fk
ICYmIG1fcHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkKQEAgLTUwNSwxNCArNTA1LDE0IEBA
IHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRQcmVsb2EKIAogYm9vbCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKLSAg
ICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikK
ICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2lu
KCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om1vdmllTG9hZFR5cGUoKSBjb25zdAogewotICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGU+KAogICAg
ICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+bW92aWVMb2FkVHlwZSgpKTsKICAgICByZXR1cm4g
TWVkaWFQbGF5ZXI6OlVua25vd247CkBAIC01MjAsMzUgKzUyMCwzNSBAQCBNZWRpYVBsYXllcjo6
TW92aWVMb2FkVHlwZSBXZWJNZWRpYVBsYXllCiAKIGZsb2F0IFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6bWVkaWFUaW1lRm9yVGltZVZhbHVlKGZsb2F0IHRpbWVWYWx1ZSkgY29uc3QKIHsKLSAg
ICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikK
ICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPm1lZGlhVGltZUZvclRpbWVWYWx1ZSh0
aW1lVmFsdWUpOwogICAgIHJldHVybiB0aW1lVmFsdWU7CiB9CiAKIHVuc2lnbmVkIFdlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAogewotICAgIGlmICht
X3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAg
ICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZGVjb2RlZEZyYW1lQ291bnQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAogdW5zaWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkcm9wcGVkRnJh
bWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5k
cm9wcGVkRnJhbWVDb3VudCgpOwogICAgIHJldHVybiAwOwogfQogCiB1bnNpZ25lZCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAg
ICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5hdWRpb0RlY29kZWRCeXRlQ291bnQoKTsK
ICAgICByZXR1cm4gMDsKIH0KIAogdW5zaWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp2
aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVy
LmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJN
ZWRpYVBsYXllci0+dmlkZW9EZWNvZGVkQnl0ZUNvdW50KCk7CiAgICAgcmV0dXJuIDA7CiB9CkBA
IC01NjgsNyArNTY4LDcgQEAgYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN1cHBvcnRz
QQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdJ
blVzZSgpCiB7Ci0gICAgcmV0dXJuIG1fdmlkZW9MYXllci5nZXQoKSAmJiBtX3ZpZGVvTGF5ZXIt
PmxheWVyVHJlZUhvc3QoKTsKKyAgICByZXR1cm4gbV92aWRlb0xheWVyICYmIG1fdmlkZW9MYXll
ci0+bGF5ZXJUcmVlSG9zdCgpOwogfQogCiBWaWRlb0ZyYW1lQ2hyb21pdW0qIFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6Z2V0Q3VycmVudEZyYW1lKCkKQEAgLTU4NSw3ICs1ODUsNyBAQCBWaWRl
b0ZyYW1lQ2hyb21pdW0qIFdlYk1lZGlhUGxheWVyQ2xpZW50CiB2b2lkIFdlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6cHV0Q3VycmVudEZyYW1lKFZpZGVvRnJhbWVDaHJvbWl1bSogdmlkZW9GcmFt
ZSkKIHsKICAgICBpZiAodmlkZW9GcmFtZSAmJiB2aWRlb0ZyYW1lID09IG1fY3VycmVudFZpZGVv
RnJhbWUpIHsKLSAgICAgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpIHsKKyAgICAgICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIpIHsKICAgICAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnB1
dEN1cnJlbnRGcmFtZSgKICAgICAgICAgICAgICAgICBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjp0
b1dlYlZpZGVvRnJhbWUodmlkZW9GcmFtZSkpOwogICAgICAgICB9CkBAIC02NDIsNyArNjQyLDcg
QEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBXZWJNZWRpYVBsYXllcgogdm9pZCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OnN0YXJ0RGVsYXllZExvYWQoKQogewogICAgIEFTU0VSVChtX2Rl
bGF5aW5nTG9hZCk7Ci0gICAgQVNTRVJUKCFtX3dlYk1lZGlhUGxheWVyLmdldCgpKTsKKyAgICBB
U1NFUlQoIW1fd2ViTWVkaWFQbGF5ZXIpOwogCiAgICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsK
IApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJ
KHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVx
dWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIFdlYlVSTFJl
cXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKGJvCiBXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGEqIFdl
YlVSTFJlcXVlc3Q6OmV4dHJhRGF0YSgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPFJlc291cmNlUmVx
dWVzdDo6RXh0cmFEYXRhPiBkYXRhID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+ZXh0
cmFEYXRhKCk7Ci0gICAgaWYgKCFkYXRhLmdldCgpKQorICAgIGlmICghZGF0YSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV4dHJhRGF0YUNvbnRhaW5lcio+KGRh
dGEuZ2V0KCkpLT5leHRyYURhdGEoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsMTcgKzQw
MSwxNyBAQCBXZWJWaWV3SW1wbDo6fldlYlZpZXdJbXBsKCkKIAogUmVuZGVyVGhlbWUqIFdlYlZp
ZXdJbXBsOjp0aGVtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS5nZXQoKSA/IG1fcGFn
ZS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKTsKKyAgICByZXR1
cm4gbV9wYWdlID8gbV9wYWdlLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LmdldCgpOwogfQogCiBXZWJGcmFtZUltcGwqIFdlYlZpZXdJbXBsOjptYWluRnJhbWVJbXBsKCkK
IHsKLSAgICByZXR1cm4gbV9wYWdlLmdldCgpID8gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUobV9w
YWdlLT5tYWluRnJhbWUoKSkgOiAwOworICAgIHJldHVybiBtX3BhZ2UgPyBXZWJGcmFtZUltcGw6
OmZyb21GcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKSA6IDA7CiB9CiAKIGJvb2wgV2ViVmlld0lt
cGw6OnRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1f
cGFnZS5nZXQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CiAgICAgcmV0dXJuIG1fcGFnZS0+dGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCk7CiB9CiAKQEAgLTkyMSw3ICs5MjEsNyBAQCBib29s
IFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGluCiAKIHZvaWQgV2ViVmlld0ltcGw6
OmhpZGVTZWxlY3RQb3B1cCgpCiB7Ci0gICAgaWYgKG1fc2VsZWN0UG9wdXAuZ2V0KCkpCisgICAg
aWYgKG1fc2VsZWN0UG9wdXApCiAgICAgICAgIG1fc2VsZWN0UG9wdXAtPmhpZGVQb3B1cCgpOwog
fQogCkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCAgV2ViVmlld0ltcGw6OnBvcHVwT3BlbmVkKFdl
YkNvcmU6Ogogdm9pZCAgV2ViVmlld0ltcGw6OnBvcHVwQ2xvc2VkKFdlYkNvcmU6OlBvcHVwQ29u
dGFpbmVyKiBwb3B1cENvbnRhaW5lcikKIHsKICAgICBpZiAocG9wdXBDb250YWluZXItPnBvcHVw
VHlwZSgpID09IFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpTZWxlY3QpIHsKLSAgICAgICAgQVNT
RVJUKG1fc2VsZWN0UG9wdXAuZ2V0KCkpOworICAgICAgICBBU1NFUlQobV9zZWxlY3RQb3B1cCk7
CiAgICAgICAgIG1fc2VsZWN0UG9wdXAgPSAwOwogICAgIH0KIH0KQEAgLTk2Nyw3ICs5NjcsNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpoaWRlQXV0b2ZpbGxQb3B1cCgpCiAKIEZyYW1lKiBXZWJWaWV3
SW1wbDo6Zm9jdXNlZFdlYkNvcmVGcmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS5n
ZXQoKSA/IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpIDog
MDsKKyAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCkgOiAwOwogfQogCiBXZWJWaWV3SW1wbCogV2ViVmlld0ltcGw6OmZyb21Q
YWdlKFBhZ2UqIHBhZ2UpCkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y2xv
c2UoKQogewogICAgIFJlZlB0cjxXZWJGcmFtZUltcGw+IG1haW5GcmFtZUltcGw7CiAKLSAgICBp
ZiAobV9wYWdlLmdldCgpKSB7CisgICAgaWYgKG1fcGFnZSkgewogICAgICAgICAvLyBJbml0aWF0
ZSBzaHV0ZG93biBmb3IgdGhlIGVudGlyZSBmcmFtZXNldC4gIFRoaXMgd2lsbCBjYXVzZSBhIGxv
dCBvZgogICAgICAgICAvLyBub3RpZmljYXRpb25zIHRvIGJlIHNlbnQuCiAgICAgICAgIGlmICht
X3BhZ2UtPm1haW5GcmFtZSgpKSB7CkBAIC05OTYsNyArOTk2LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6Y2xvc2UoKQogICAgIH0KIAogICAgIC8vIFNob3VsZCBoYXBwZW4gYWZ0ZXIgbV9wYWdlLmNs
ZWFyKCkuCi0gICAgaWYgKG1fZGV2VG9vbHNBZ2VudC5nZXQoKSkKKyAgICBpZiAobV9kZXZUb29s
c0FnZW50KQogICAgICAgICBtX2RldlRvb2xzQWdlbnQuY2xlYXIoKTsKIAogICAgIC8vIFJlc2V0
IHRoZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IG5vdGlmaWNhdGlvbnMgYmVpbmcgc2VudCBhcyB3ZSdy
ZSBiZWluZwpAQCAtMTExOCw3ICsxMTE4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9QaXhlbFJl
YWRiYWNrVG9DYW52YQogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gcGl4
ZWxBcnJheShCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICog
NCkpOwotICAgIGlmIChpbWFnZUJ1ZmZlci5nZXQoKSAmJiBwaXhlbEFycmF5LmdldCgpKSB7Cisg
ICAgaWYgKGltYWdlQnVmZmVyICYmIHBpeGVsQXJyYXkpIHsKICAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJlY3Qp
OwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShwaXhlbEFy
cmF5LmdldCgpLCByZWN0LnNpemUoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSks
IEludFBvaW50KCkpOwogICAgICAgICBnYy5zYXZlKCk7CkBAIC0xMjA5LDcgKzEyMDksNyBAQCBi
b29sIFdlYlZpZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0CiAKICAgICBtX2N1cnJlbnRJ
bnB1dEV2ZW50ID0gJmlucHV0RXZlbnQ7CiAKLSAgICBpZiAobV9tb3VzZUNhcHR1cmVOb2RlLmdl
dCgpICYmIFdlYklucHV0RXZlbnQ6OmlzTW91c2VFdmVudFR5cGUoaW5wdXRFdmVudC50eXBlKSkg
eworICAgIGlmIChtX21vdXNlQ2FwdHVyZU5vZGUgJiYgV2ViSW5wdXRFdmVudDo6aXNNb3VzZUV2
ZW50VHlwZShpbnB1dEV2ZW50LnR5cGUpKSB7CiAgICAgICAgIC8vIFNhdmUgbV9tb3VzZUNhcHR1
cmVOb2RlIHNpbmNlIG1vdXNlQ2FwdHVyZUxvc3QoKSB3aWxsIGNsZWFyIGl0LgogICAgICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZSA9IG1fbW91c2VDYXB0dXJlTm9kZTsKIApAQCAtMTM0NCw3ICsxMzQ0
LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAgICAgIGhp
ZGVTZWxlY3RQb3B1cCgpOwogCiAgICAgICAgIC8vIENsZWFyIGZvY3VzIG9uIHRoZSBjdXJyZW50
bHkgZm9jdXNlZCBmcmFtZSBpZiBhbnkuCi0gICAgICAgIGlmICghbV9wYWdlLmdldCgpKQorICAg
ICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBGcmFtZSog
ZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOwpAQCAtMTM1Miw3ICsxMzUyLDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgUmVmUHRyPEZyYW1lPiBmb2N1c2VkRnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWRGcmFtZS5nZXQoKSkg
eworICAgICAgICBpZiAoZm9jdXNlZEZyYW1lKSB7CiAgICAgICAgICAgICAvLyBGaW5pc2ggYW4g
b25nb2luZyBjb21wb3NpdGlvbiB0byBkZWxldGUgdGhlIGNvbXBvc2l0aW9uIG5vZGUuCiAgICAg
ICAgICAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWRGcmFtZS0+ZWRpdG9yKCk7CiAgICAgICAg
ICAgICBpZiAoZWRpdG9yICYmIGVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKQEAgLTE0NjIsNyAr
MTQ2Miw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV8KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29t
cG9zaXRpb25SYW5nZSgpOwotICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2UoZm9jdXNlZC0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5nZXQoKSwgKmxvY2F0aW9uLCAqbGVuZ3Ro
KSkKQEAgLTE1NjgsNyArMTU2OCw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rp
b25SYW5nZSgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIGlmICghcmFuZ2Uu
Z2V0KCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uoc2VsZWN0aW9uLT5y
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksICpsb2Nh
dGlvbiwgKmxlbmd0aCkpCkBAIC0xNjI0LDEzICsxNjI0LDEzIEBAIFdlYlNldHRpbmdzKiBXZWJW
aWV3SW1wbDo6c2V0dGluZ3MoKQogewogICAgIGlmICghbV93ZWJTZXR0aW5ncykKICAgICAgICAg
bV93ZWJTZXR0aW5ncyA9IGFkb3B0UHRyKG5ldyBXZWJTZXR0aW5nc0ltcGwobV9wYWdlLT5zZXR0
aW5ncygpKSk7Ci0gICAgQVNTRVJUKG1fd2ViU2V0dGluZ3MuZ2V0KCkpOworICAgIEFTU0VSVCht
X3dlYlNldHRpbmdzKTsKICAgICByZXR1cm4gbV93ZWJTZXR0aW5ncy5nZXQoKTsKIH0KIAogV2Vi
U3RyaW5nIFdlYlZpZXdJbXBsOjpwYWdlRW5jb2RpbmcoKSBjb25zdAogewotICAgIGlmICghbV9w
YWdlLmdldCgpKQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7
CiAKICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWVkZWQ/CkBAIC0xNjQyLDcgKzE2NDIs
NyBAQCBXZWJTdHJpbmcgV2ViVmlld0ltcGw6OnBhZ2VFbmNvZGluZygpIGNvCiAKIHZvaWQgV2Vi
Vmlld0ltcGw6OnNldFBhZ2VFbmNvZGluZyhjb25zdCBXZWJTdHJpbmcmIGVuY29kaW5nTmFtZSkK
IHsKLSAgICBpZiAoIW1fcGFnZS5nZXQoKSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gT25seSBjaGFuZ2Ugb3ZlcnJpZGUgZW5jb2RpbmcsIGRvbid0IGNoYW5n
ZSBkZWZhdWx0IGVuY29kaW5nLgpAQCAtMTcwNyw3ICsxNzA3LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0Rm9jdXNlZEZyYW1lKFdlYkZyYQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJbml0aWFs
Rm9jdXMoYm9vbCByZXZlcnNlKQogewotICAgIGlmICghbV9wYWdlLmdldCgpKQorICAgIGlmICgh
bV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEg
a2V5Ym9hcmQgZXZlbnQsIHdlJ2xsIGNyZWF0ZSBvbmUuCkBAIC0xNzMyLDExICsxNzMyLDExIEBA
IHZvaWQgV2ViVmlld0ltcGw6OnNldEluaXRpYWxGb2N1cyhib29sIHIKIHZvaWQgV2ViVmlld0lt
cGw6OmNsZWFyRm9jdXNlZE5vZGUoKQogewogICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBmb2N1
c2VkV2ViQ29yZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS5nZXQoKSkKKyAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5nZXQoKSkKKyAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8Tm9kZT4gb2xkRm9jdXNlZE5vZGUg
PSBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OmNsZWFyRm9jdXNlZE5vZGUoKQogICAgIC8vIENsZWFyIHRoZSBmb2N1c2VkIG5v
ZGUuCiAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDApOwogCi0gICAgaWYgKCFvbGRGb2N1
c2VkTm9kZS5nZXQoKSkKKyAgICBpZiAoIW9sZEZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBJZiBhIHRleHQgZmllbGQgaGFzIGZvY3VzLCB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGUgc2VsZWN0aW9uIGNvbnRyb2xsZXIKQEAgLTE5MzMsNyArMTkzMyw3IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnBlcmZvcm1NZWRpYVBsYXllckFjdGkKIAogdm9pZCBXZWJWaWV3SW1wbDo6Y29w
eUltYWdlQXQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewotICAgIGlmICghbV9wYWdlLmdldCgp
KQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRGb3JXaW5kb3dQb3MocG9pbnQpOwpAQCAtMTk5MCw3ICsx
OTkwLDcgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldAogICAgIGNv
bnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3Bl
cmF0aW9uc0FsbG93ZWQpCiB7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7
CisgICAgQVNTRVJUKCFtX2N1cnJlbnREcmFnRGF0YSk7CiAKICAgICBtX2N1cnJlbnREcmFnRGF0
YSA9IHdlYkRyYWdEYXRhOwogICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxs
b3dlZDsKQEAgLTIwMTAsNyArMjAxMCw3IEBAIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6
OmRyYWdUYXJnZXQKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdMZWF2ZSgpCiB7
Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKyAgICBBU1NFUlQobV9jdXJy
ZW50RHJhZ0RhdGEpOwogCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCiAgICAgICAgIG1fY3VycmVu
dERyYWdEYXRhLmdldCgpLApAQCAtMjAyOSw3ICsyMDI5LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
ZHJhZ1RhcmdldERyYWdMZWF2ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChj
b25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dERyYWdEYXRhLmdldCgpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEpOwogCiAgICAg
Ly8gSWYgdGhpcyB3ZWJ2aWV3IHRyYW5zaXRpb25zIGZyb20gdGhlICJkcm9wIGFjY2VwdGluZyIg
c3RhdGUgdG8gdGhlICJub3QKICAgICAvLyBhY2NlcHRpbmciIHN0YXRlLCB0aGVuIG91ciBJUEMg
bWVzc2FnZSByZXBseSBpbmRpY2F0aW5nIHRoYXQgbWF5IGJlIGluLQpAQCAtMjA1OSw3ICsyMDU5
LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29uc3QgVwogCiBXZWJEcmFn
T3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LCBEcmFnQWN0
aW9uIGRyYWdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdldCgpKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEpOwogCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
CiAgICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLApAQCAtMjA5Niw3ICsyMDk2LDcgQEAg
dW5zaWduZWQgbG9uZyBXZWJWaWV3SW1wbDo6Y3JlYXRlVW5pcXVlSQogCiB2b2lkIFdlYlZpZXdJ
bXBsOjppbnNwZWN0RWxlbWVudEF0KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAo
IW1fcGFnZS5nZXQoKSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHBvaW50LnggPT0gLTEgfHwgcG9pbnQueSA9PSAtMSkKQEAgLTIxNzcsOCArMjE3Nyw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0aW8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbSA9Ci0gICAgICAgIHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb2N1c2VkTm9kZS5nZXQoKSk7CisgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGZvY3VzZWROb2RlLmdldCgpKTsKIAogICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRoZSBBdXRvZmls
bCBwb3B1cCBpcyBzaG93biB3ZSdsbCBjcmVhdGUgdGhlIGNsaWVudCBhbmQKICAgICAvLyB0aGUg
cG9wdXAuCkBAIC0yMTg4LDcgKzIxODcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9m
aWxsU3VnZ2VzdGlvCiAgICAgbV9hdXRvZmlsbFBvcHVwQ2xpZW50LT5pbml0aWFsaXplKAogICAg
ICAgICBpbnB1dEVsZW0sIG5hbWVzLCBsYWJlbHMsIGljb25zLCB1bmlxdWVJRHMsIHNlcGFyYXRv
ckluZGV4KTsKIAotICAgIGlmICghbV9hdXRvZmlsbFBvcHVwLmdldCgpKSB7CisgICAgaWYgKCFt
X2F1dG9maWxsUG9wdXApIHsKICAgICAgICAgbV9hdXRvZmlsbFBvcHVwID0gUG9wdXBDb250YWlu
ZXI6OmNyZWF0ZShtX2F1dG9maWxsUG9wdXBDbGllbnQuZ2V0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9wdXBDb250YWluZXI6OlN1Z2dlc3Rp
b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
b2ZpbGxQb3B1cFNldHRpbmdzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckJhc2UuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0TWVzc2FnZVRhc2soU2NyaQogICAgIGlmICgh
dGhpc1B0ci0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYk1lc3NhZ2VQb3J0
Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxzKGNoYW5uZWxzLmdldCgpID8gY2hhbm5lbHMtPnNpemUo
KSA6IDApOworICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxzKGNoYW5u
ZWxzID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgd2ViQ2hhbm5lbHNbaV0gPSAoKmNo
YW5uZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwogICAgICAgICB3ZWJD
aGFubmVsc1tpXS0+c2V0Q2xpZW50KDApOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAko
cmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06On5Xb3JrZXJBcwogCiBib29sIFdvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtOjp3YWl0Rm9yT3BlcmF0aW9uVG9Db21wbGV0ZSgpCiB7Ci0g
ICAgaWYgKCFtX2JyaWRnZUZvckN1cnJlbnRPcGVyYXRpb24uZ2V0KCkpCisgICAgaWYgKCFtX2Jy
aWRnZUZvckN1cnJlbnRPcGVyYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJl
ZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBtX2JyaWRnZUZv
ckN1cnJlbnRPcGVyYXRpb24ucmVsZWFzZSgpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWEKIAogUGFzc1JlZlB0cjxXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3Jl
YXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEFTU0VSVCghbV9zeW5jaHJvbm91cyB8
fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uLmdldCgpKTsKKyAgICBBU1NFUlQoIW1fc3lu
Y2hyb25vdXMgfHwgIW1fYnJpZGdlRm9yQ3VycmVudE9wZXJhdGlvbik7CiAKICAgICBtX21vZGVG
b3JDdXJyZW50T3BlcmF0aW9uID0gZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlOwogICAgIG1fbW9k
ZUZvckN1cnJlbnRPcGVyYXRpb24uYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPnJ1bkxvb3AoKS5jcmVhdGVVbmlxdWVJZCgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113018</attachid>
            <date>2011-10-31 00:16:27 -0700</date>
            <delta_ts>2011-10-31 00:48:38 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71205-20111031001626.patch</filename>
            <type>text/plain</type>
            <size>43935</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQx
IEBACisyMDExLTEwLTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBUaGUgQ2hyb21pdW0gcG9ydCBjYWxscyBPd25QdHI6OmdldCBhbmQgUmVm
UHRyOjpnZXQgd2F5IG1vcmUgb2Z0ZW4gdGhhbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Unlvc3VrZSBOaXdhLgorCisgICAgICAgIFdlYktpdCBzdHlsZSBpcyB0byB1c2UgdGhlIGltcGxp
Y2l0IEJvb2xlYW4gY29udmVyc2lvbnMgcmF0aGVyIHRoYW4KKyAgICAgICAgY2FsbGluZyBnZXQo
KSBvbiB0aGVzZSBwb2ludGVyIHR5cGVzLiAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgbW9zdCAoYWxs
PykKKyAgICAgICAgb2YgdGhlc2Ugc3R5bGUgaXNzdWVzIGluIHRoZSBDaHJvbWl1bSBwb3J0IGlu
IHRoZSBob3BlcyB0aGF0IHRoZXknbGwgYmUKKyAgICAgICAgY29weS9wYXN0ZWQgbGVzcyBpbiB0
aGUgZnV0dXJlLgorCisgICAgICAgICogc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWw6OnRvV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3QpOgorICAgICAgICAqIHNyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpB
dWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5h
dGlvbkNocm9taXVtOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9u
Q2hyb21pdW06OnN0b3ApOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnNldE1haW5Eb2N1bWVu
dEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb21taXR0
ZWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpmaW5pc2hl
ZExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnJlZGly
ZWN0RGF0YVRvUGx1Z2luKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnBv
c3RNZXNzYWdlVG9SZW1vdGUpOgorICAgICAgICAqIHNyYy9SZXNvdXJjZUhhbmRsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpzdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6Cisg
ICAgICAgICogc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkT3BlblN0cmVhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRDbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkRmFpbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOgorICAgICAgICAq
IHNyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6aGl0VGVzdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpsb2FkSGlzdG9yeUl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdGlvbkFzVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNNYXJrdXApOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmdldFByaW50UGFnZVNocmluayk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpw
cmludEVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRj
aGVzKToKKyAgICAgICAgKiBzcmMvV2ViSURCS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
SURCS2V5Ojp0eXBlKToKKyAgICAgICAgKiBzcmMvV2ViSURCS2V5UmFuZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJLZXlSYW5nZTo6bG93ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJLZXlSYW5nZTo6dXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJLZXlSYW5nZTo6bG93
ZXJPcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCS2V5UmFuZ2U6OnVwcGVyT3Blbik6Cisg
ICAgICAgICogc3JjL1dlYkltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6
V2ViSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKiBzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp+V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVwYWludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bG9hZEludGVybmFs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpjYW5jZWxMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwbGF5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwYXVzZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c291cmNlQXBwZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzb3VyY2VFbmRPZlN0cmVhbSk6
CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bmF0dXJhbFNpemUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc1ZpZGVvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpoYXNBdWRpbyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0VmlzaWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZHVyYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmN1cnJlbnRUaW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZWVrKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZWVraW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRFbmRUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwYXVzZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN1cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNTYXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om5ldHdvcmtTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVhZHlTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bWF4VGltZVNlZWthYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpidWZmZXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZGF0YVJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnRvdGFsQnl0ZXNLbm93bik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Ynl0ZXNMb2FkZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFNpemUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBhaW50Q3VycmVudEZyYW1l
SW5Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpz
ZXRQcmVsb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpo
YXNTaW5nbGVTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6bW92aWVMb2FkVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6bWVkaWFUaW1lRm9yVGltZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpkZWNvZGVkRnJhbWVDb3VudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZHJvcHBlZEZyYW1lQ291bnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmF1ZGlvRGVjb2RlZEJ5dGVD
b3VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dmlkZW9E
ZWNvZGVkQnl0ZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjphY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjpwdXRDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN0YXJ0RGVsYXllZExvYWQpOgorICAgICAgICAqIHNy
Yy9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6ZXh0
cmFEYXRhKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6dGhlbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFp
bkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp0YWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZVNlbGVj
dFBvcHVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBvcHVwQ2xvc2VkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZvY3VzZWRXZWJDb3JlRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpwYWdlRW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6c2V0UGFnZUVuY29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNl
dEluaXRpYWxGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGVhckZvY3Vz
ZWROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvcHlJbWFnZUF0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdMZWF2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Omluc3BlY3RFbGVtZW50QXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6YXBwbHlBdXRvZmlsbFN1Z2dlc3Rpb25zKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2Vy
QmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVGFz
ayk6CisgICAgICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjp3YWl0Rm9yT3Bl
cmF0aW9uVG9Db21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bTo6Y3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSk6CisKIDIw
MTEtMTAtMjkgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW1wbGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVy
bmFsLmgJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXBw
bGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
KiB0b1dlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBpbm5lckhv
c3QpCiAgICAgewotICAgICAgICBpZiAoaW5uZXJIb3N0ICYmIGlubmVySG9zdC0+bV9pbnRlcm5h
bC5nZXQoKSkKKyAgICAgICAgaWYgKGlubmVySG9zdCAmJiBpbm5lckhvc3QtPm1faW50ZXJuYWwp
CiAgICAgICAgICAgICByZXR1cm4gaW5uZXJIb3N0LT5tX2ludGVybmFsLT5tX291dGVySG9zdC5n
ZXQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgQXVkaW9EZXN0
aW5hdGlvbkNocm9taXVtOjpBdWRpb0Rlc3RpbmF0aQogICAgICAgcmV0dXJuOwogICAgIAogICAg
IG1fYXVkaW9EZXZpY2UgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRl
QXVkaW9EZXZpY2UobV9jYWxsYmFja0J1ZmZlclNpemUsIG51bWJlck9mQ2hhbm5lbHMsIHNhbXBs
ZVJhdGUsIHRoaXMpKTsKLSAgICBBU1NFUlQobV9hdWRpb0RldmljZS5nZXQoKSk7CisgICAgQVNT
RVJUKG1fYXVkaW9EZXZpY2UpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06On5BdWRp
b0Rlc3RpbmF0aW9uQ2hyb21pdW0oKQpAQCAtODcsNyArODcsNyBAQCBBdWRpb0Rlc3RpbmF0aW9u
Q2hyb21pdW06On5BdWRpb0Rlc3RpbmF0CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVt
OjpzdGFydCgpCiB7Ci0gICAgaWYgKCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlLmdldCgp
KSB7CisgICAgaWYgKCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlKSB7CiAgICAgICAgIG1f
YXVkaW9EZXZpY2UtPnN0YXJ0KCk7CiAgICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKICAgICB9
CkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpzdGFydCgp
CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpzdG9wKCkKIHsKLSAgICBpZiAobV9p
c1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZS5nZXQoKSkgeworICAgIGlmIChtX2lzUGxheWluZyAm
JiBtX2F1ZGlvRGV2aWNlKSB7CiAgICAgICAgIG1fYXVkaW9EZXZpY2UtPnN0b3AoKTsKICAgICAg
ICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDk4
ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEltcGw6OnJldmVydFRvUHJvdgogdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnNl
dE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
IHsKLSAgICBpZiAobV9wbHVnaW5XaWRnZXQuZ2V0KCkpIHsKKyAgICBpZiAobV9wbHVnaW5XaWRn
ZXQpIHsKICAgICAgICAgaWYgKG1fc2VudEluaXRpYWxSZXNwb25zZVRvUGx1Z2luKSB7CiAgICAg
ICAgICAgICBtX3BsdWdpbldpZGdldC0+ZGlkRmFpbExvYWRpbmcoZXJyb3IpOwogICAgICAgICAg
ICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKQEAgLTExMDcsNyArMTEw
Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaWRDaGFuZ2VUaXQKIC8vIENhbGxl
ZCB3aGVuZXZlciBkYXRhIGlzIHJlY2VpdmVkLgogdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luV2lkZ2V0LmdldCgpKSB7CisgICAgaWYg
KCFtX3BsdWdpbldpZGdldCkgewogICAgICAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpIHsK
ICAgICAgICAgICAgIGJvb2wgcHJldmVudERlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIG1f
d2ViRnJhbWUtPmNsaWVudCgpLT5kaWRSZWNlaXZlRG9jdW1lbnREYXRhKG1fd2ViRnJhbWUsIGRh
dGEsIGxlbmd0aCwgcHJldmVudERlZmF1bHQpOwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmNvbW1pdHRlZExvYQogCiAgICAgLy8gVGhlIHBsdWdpbiB3
aWRnZXQgY291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdGhlIG1fd2ViRnJhbWUtPkRpZFJlY2Vp
dmVEYXRhCiAgICAgLy8gZnVuY3Rpb24uCi0gICAgaWYgKG1fcGx1Z2luV2lkZ2V0LmdldCgpKSB7
CisgICAgaWYgKG1fcGx1Z2luV2lkZ2V0KSB7CiAgICAgICAgIGlmICghbV9zZW50SW5pdGlhbFJl
c3BvbnNlVG9QbHVnaW4pIHsKICAgICAgICAgICAgIG1fc2VudEluaXRpYWxSZXNwb25zZVRvUGx1
Z2luID0gdHJ1ZTsKICAgICAgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRSZWNlaXZlUmVzcG9u
c2UoCkBAIC0xMTMyLDE0ICsxMTMyLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpj
b21taXR0ZWRMb2EKIAogICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFib3ZlIGNh
bGwgcmVtb3ZlZCB0aGUgcG9pbnRlciB0byB0aGUgcGx1Z2luLCBzbwogICAgICAgICAvLyBjaGVj
ayBiZWZvcmUgY2FsbGluZyBpdC4KLSAgICAgICAgaWYgKG1fcGx1Z2luV2lkZ2V0LmdldCgpKQor
ICAgICAgICBpZiAobV9wbHVnaW5XaWRnZXQpCiAgICAgICAgICAgICBtX3BsdWdpbldpZGdldC0+
ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKICAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRsKQogewotICAg
IGlmIChtX3BsdWdpbldpZGdldC5nZXQoKSkgeworICAgIGlmIChtX3BsdWdpbldpZGdldCkgewog
ICAgICAgICBtX3BsdWdpbldpZGdldC0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICBtX3Bs
dWdpbldpZGdldCA9IDA7CiAgICAgICAgIG1fc2VudEluaXRpYWxSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
cmVkaXJlY3REYXRhCiB7CiAgICAgaWYgKHBsdWdpbldpZGdldC0+aXNQbHVnaW5Db250YWluZXIo
KSkKICAgICAgICAgbV9wbHVnaW5XaWRnZXQgPSBzdGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWlu
ZXJJbXBsKj4ocGx1Z2luV2lkZ2V0KTsKLSAgICBBU1NFUlQobV9wbHVnaW5XaWRnZXQuZ2V0KCkp
OworICAgIEFTU0VSVChtX3BsdWdpbldpZGdldCk7CiB9CiAKIFBhc3NSZWZQdHI8V2lkZ2V0PiBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWwuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDcgKzE4Miw3IEBAIHZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXMKICAg
ICBXZWJTdHJpbmcgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPm1lc3NhZ2UoKS0+dG9XaXJlU3Ry
aW5nKCk7CiAgICAgT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscyA9IG1lc3NhZ2UtPmNoYW5uZWxzKCk7CiAgICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJy
YXkqIHdlYkNoYW5uZWxzID0gMDsKLSAgICBpZiAoY2hhbm5lbHMuZ2V0KCkgJiYgY2hhbm5lbHMt
PnNpemUoKSkgeworICAgIGlmIChjaGFubmVscyAmJiBjaGFubmVscy0+c2l6ZSgpKSB7CiAgICAg
ICAgIHdlYkNoYW5uZWxzID0gbmV3IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KGNoYW5uZWxz
LT5zaXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5uZWxzLT5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwqIHBsYXRmb3JtQ2hhbm5lbCA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lv
biA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OnN0YXJ0KCkKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlU3RhcnRlZDsKIAog
ICAgIG1fbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZVVS
TExvYWRlcigpKTsKLSAgICBBU1NFUlQobV9sb2FkZXIuZ2V0KCkpOworICAgIEFTU0VSVChtX2xv
YWRlcik7CiAKICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWRSZXF1ZXN0KG1fcmVx
dWVzdCk7CiAgICAgd3JhcHBlZFJlcXVlc3Quc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhhbGxv
d1N0b3JlZENyZWRlbnRpYWxzKCkpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIE93blB0cjxXZWJV
UkxMb2FkZXI+IGxvYWRlciA9IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVh
dGVVUkxMb2FkZXIoKSk7Ci0gICAgQVNTRVJUKGxvYWRlci5nZXQoKSk7CisgICAgQVNTRVJUKGxv
YWRlcik7CiAKICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihyZXF1ZXN0KTsK
ICAgICByZXF1ZXN0SW4uc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFs
cyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAkocmV2aXNpb24gOTg4MzUpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSwxNCArOTEsMTQgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRl
cm5hbDo6Y29ubmVjdAogewogICAgIG1fc29ja2V0ID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpKTsKICAgICBMT0coTmV0d29yaywg
ImNvbm5lY3QiKTsKLSAgICBBU1NFUlQobV9zb2NrZXQuZ2V0KCkpOworICAgIEFTU0VSVChtX3Nv
Y2tldCk7CiAgICAgbV9zb2NrZXQtPmNvbm5lY3QodXJsLCB0aGlzKTsKIH0KIAogaW50IFNvY2tl
dFN0cmVhbUhhbmRsZUludGVybmFsOjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7
CiAgICAgTE9HKE5ldHdvcmssICJzZW5kIGxlbj0lZCIsIGxlbik7Ci0gICAgQVNTRVJUKG1fc29j
a2V0LmdldCgpKTsKKyAgICBBU1NFUlQobV9zb2NrZXQpOwogICAgIGlmIChtX3BlbmRpbmdBbW91
bnRTZW50ICsgbGVuID49IG1fbWF4UGVuZGluZ1NlbmRBbGxvd2VkKQogICAgICAgICBsZW4gPSBt
X21heFBlbmRpbmdTZW5kQWxsb3dlZCAtIG1fcGVuZGluZ0Ftb3VudFNlbnQgLSAxOwogCkBAIC0x
MjUsNyArMTI1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkT3Blbgog
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZE9wZW4gJWQi
LAogICAgICAgICBtYXhQZW5kaW5nU2VuZEFsbG93ZWQpOwogICAgIEFTU0VSVChtYXhQZW5kaW5n
U2VuZEFsbG93ZWQgPiAwKTsKLSAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQuZ2V0KCkpIHsK
KyAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQpIHsKICAgICAgICAgQVNTRVJUKHNvY2tldEhh
bmRsZSA9PSBtX3NvY2tldC5nZXQoKSk7CiAgICAgICAgIG1fbWF4UGVuZGluZ1NlbmRBbGxvd2Vk
ID0gbWF4UGVuZGluZ1NlbmRBbGxvd2VkOwogICAgICAgICBtX2hhbmRsZS0+bV9zdGF0ZSA9IFNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6Ok9wZW47CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkU2VuZAogewogICAgIExPRyhOZXR3b3JrLCAiU29j
a2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZFNlbmREYXRhICVkIiwgYW1vdW50U2VudCk7CiAg
ICAgQVNTRVJUKGFtb3VudFNlbnQgPiAwKTsKLSAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQu
Z2V0KCkpIHsKKyAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQpIHsKICAgICAgICAgQVNTRVJU
KHNvY2tldEhhbmRsZSA9PSBtX3NvY2tldC5nZXQoKSk7CiAgICAgICAgIG1fcGVuZGluZ0Ftb3Vu
dFNlbnQgLT0gYW1vdW50U2VudDsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0Ftb3VudFNlbnQg
Pj0gMCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5h
bDo6ZGlkU2VuZAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZURh
dGEoV2ViU29ja2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUsIGNvbnN0IFdlYkRhdGEmIGRh
dGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJkaWRSZWNlaXZlRGF0YSIpOwotICAgIGlmIChtX2hh
bmRsZSAmJiBtX3NvY2tldC5nZXQoKSkgeworICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkg
ewogICAgICAgICBBU1NFUlQoc29ja2V0SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKICAgICAg
ICAgaWYgKG1faGFuZGxlLT5tX2NsaWVudCkKICAgICAgICAgICAgIG1faGFuZGxlLT5tX2NsaWVu
dC0+ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEobV9oYW5kbGUsIGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRl
cm5hbDo6ZGlkUmVjZQogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkQ2xvc2Uo
V2ViU29ja2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUpCiB7CiAgICAgTE9HKE5ldHdvcmss
ICJkaWRDbG9zZSIpOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldC5nZXQoKSkgeworICAg
IGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewogICAgICAgICBBU1NFUlQoc29ja2V0SGFuZGxl
ID09IG1fc29ja2V0LmdldCgpKTsKICAgICAgICAgbV9zb2NrZXQuY2xlYXIoKTsKICAgICAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoID0gbV9oYW5kbGU7CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkQ2xvcwogdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbnRlcm5hbDo6ZGlkRmFpbChXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRs
ZSwgY29uc3QgV2ViU29ja2V0U3RyZWFtRXJyb3ImIGVycikKIHsKICAgICBMT0coTmV0d29yaywg
ImRpZEZhaWwiKTsKLSAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQuZ2V0KCkpIHsKKyAgICBp
ZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQpIHsKICAgICAgICAgQVNTRVJUKHNvY2tldEhhbmRsZSA9
PSBtX3NvY2tldC5nZXQoKSk7CiAgICAgICAgIG1fc29ja2V0LmNsZWFyKCk7CiAgICAgICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogaCA9IG1faGFuZGxlOwpAQCAtMjA0LDE0ICsyMDQsMTQgQEAgU29j
a2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKAogCiBpbnQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogYnVmLCBpbnQgbGVuKQogewotICAgIGlm
ICghbV9pbnRlcm5hbC5nZXQoKSkKKyAgICBpZiAoIW1faW50ZXJuYWwpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBtX2ludGVybmFsLT5zZW5kKGJ1ZiwgbGVuKTsKIH0KIAogdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQogewotICAgIGlmIChtX2ludGVybmFs
LmdldCgpKQorICAgIGlmIChtX2ludGVybmFsKQogICAgICAgICBtX2ludGVybmFsLT5jbG9zZSgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMyLDcgKzUzMiw3IEBAIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgV2ViQWNjZXNzaWJpbGl0
eU8KICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50ID0gbV9wcml2YXRlLT5kb2N1bWVudEZyYW1l
VmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gaGl0ID0gbV9wcml2YXRlLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChjb250ZW50c1Bv
aW50KTsKIAotICAgIGlmIChoaXQuZ2V0KCkpCisgICAgaWYgKGhpdCkKICAgICAgICAgcmV0dXJu
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoaGl0KTsKIAogICAgIGlmIChtX3ByaXZhdGUtPmJvdW5k
aW5nQm94UmVjdCgpLmNvbnRhaW5zKGNvbnRlbnRzUG9pbnQpKQpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc0NCw3ICs3NDQsNyBAQCBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeUV4
cHJlCiAgICAgICAgIFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSwKICAg
ICAgICAgMCwgLy8gWFBhdGhSZXN1bHQgb2JqZWN0CiAgICAgICAgIGVjKTsKLSAgICBpZiAoIXhw
YXRoUmVzdWx0LmdldCgpKQorICAgIGlmICgheHBhdGhSZXN1bHQpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgTm9kZSogbm9kZSA9IHhwYXRoUmVzdWx0LT5pdGVyYXRlTmV4dChlYyk7CkBAIC05
MzcsNyArOTM3LDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRSZXF1ZXN0KGNvbnN0IFdlYgog
dm9pZCBXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYg
aXRlbSkKIHsKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGhpc3RvcnlJdGVtID0gUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4oaXRlbSk7Ci0gICAgQVNTRVJUKGhpc3RvcnlJdGVtLmdldCgpKTsKKyAg
ICBBU1NFUlQoaGlzdG9yeUl0ZW0pOwogCiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnByZXBhcmVG
b3JIaXN0b3J5TmF2aWdhdGlvbigpOwogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY3VycmVudEl0
ZW0gPSBtX2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOwpAQCAtMTE4
Miw3ICsxMTgyLDcgQEAgc2l6ZV90IFdlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQbwog
ICAgIEludFBvaW50IHBvaW50ID0gZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHdl
YlBvaW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBmcmFtZSgpLT5yYW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgpKTsKLSAgICBp
ZiAoIXJhbmdlLmdldCgpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKIAogICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAg
V2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNUZXh0KAogICAgICAgICByZXR1cm4g
cGx1Z2luQ29udGFpbmVyLT5wbHVnaW4oKS0+c2VsZWN0aW9uQXNUZXh0KCk7CiAKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHJhbmdlLT50ZXh0KCk7CkBAIC0x
MzI2LDcgKzEzMjYsNyBAQCBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc01hcmt1
CiAgICAgICAgIHJldHVybiBwbHVnaW5Db250YWluZXItPnBsdWdpbigpLT5zZWxlY3Rpb25Bc01h
cmt1cCgpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigp
LT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogCiAgICAgcmV0dXJuIGNyZWF0ZU1h
cmt1cChyYW5nZS5nZXQoKSwgMCk7CkBAIC0xNDIyLDcgKzE0MjIsNyBAQCBpbnQgV2ViRnJhbWVJ
bXBsOjpwcmludEJlZ2luKGNvbnN0IFdlYlNpCiBmbG9hdCBXZWJGcmFtZUltcGw6OmdldFByaW50
UGFnZVNocmluayhpbnQgcGFnZSkKIHsKICAgICAvLyBFbnN1cmUgY29ycmVjdCBzdGF0ZS4KLSAg
ICBpZiAoIW1fcHJpbnRDb250ZXh0LmdldCgpIHx8IHBhZ2UgPCAwKSB7CisgICAgaWYgKCFtX3By
aW50Q29udGV4dCB8fCBwYWdlIDwgMCkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTQzMyw3ICsxNDMzLDcgQEAgZmxvYXQgV2Vi
RnJhbWVJbXBsOjpnZXRQcmludFBhZ2VTaHJpbmsoaQogZmxvYXQgV2ViRnJhbWVJbXBsOjpwcmlu
dFBhZ2UoaW50IHBhZ2UsIFdlYkNhbnZhcyogY2FudmFzKQogewogICAgIC8vIEVuc3VyZSBjb3Jy
ZWN0IHN0YXRlLgotICAgIGlmICghbV9wcmludENvbnRleHQuZ2V0KCkgfHwgcGFnZSA8IDAgfHwg
IWZyYW1lKCkgfHwgIWZyYW1lKCktPmRvY3VtZW50KCkpIHsKKyAgICBpZiAoIW1fcHJpbnRDb250
ZXh0IHx8IHBhZ2UgPCAwIHx8ICFmcmFtZSgpIHx8ICFmcmFtZSgpLT5kb2N1bWVudCgpKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBA
IC0xNDQ5LDggKzE0NDksOCBAQCBmbG9hdCBXZWJGcmFtZUltcGw6OnByaW50UGFnZShpbnQgcGFn
ZSwgCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpwcmludEVuZCgpCiB7Ci0gICAgQVNTRVJUKG1fcHJp
bnRDb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV9wcmludENvbnRleHQuZ2V0KCkpCisgICAgQVNT
RVJUKG1fcHJpbnRDb250ZXh0KTsKKyAgICBpZiAobV9wcmludENvbnRleHQpCiAgICAgICAgIG1f
cHJpbnRDb250ZXh0LT5lbmQoKTsKICAgICBtX3ByaW50Q29udGV4dC5jbGVhcigpOwogfQpAQCAt
MTY0Myw3ICsxNjQzLDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlcyhp
bgogICAgIGludCBvcmlnaW5hbEVuZE9mZnNldCA9IHNlYXJjaFJhbmdlLT5lbmRPZmZzZXQoKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwLCBlYzIgPSAwOwotICAgIGlmIChtX3Jlc3VtZVNj
b3BpbmdGcm9tUmFuZ2UuZ2V0KCkpIHsKKyAgICBpZiAobV9yZXN1bWVTY29waW5nRnJvbVJhbmdl
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgYSBzY29waW5nIG9wZXJh
dGlvbiB0aGF0IHRpbWVkIG91dCBhbmQgZGlkbid0CiAgICAgICAgIC8vIGNvbXBsZXRlIGxhc3Qg
dGltZSBhcm91bmQsIHNvIHdlIHNob3VsZCBzdGFydCBmcm9tIHdoZXJlIHdlIGxlZnQgb2ZmLgog
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQobV9yZXN1bWVTY29waW5nRnJvbVJhbmdlLT5z
dGFydENvbnRhaW5lcigpLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1h
Z2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1h
Z2VDRy5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxNCArMTA4LDE0IEBAIFdlYklt
YWdlOjpXZWJJbWFnZShjb25zdCBQYXNzUmVmUHRyPEltYWcKICAgICA6IG1faW1hZ2VSZWYoMCkK
IHsKICAgICBOYXRpdmVJbWFnZVB0ciBwOwotICAgIGlmIChpbWFnZS5nZXQoKSAmJiAocCA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKKyAgICBpZiAoaW1hZ2UgJiYgKHAg
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCiAgICAgICAgIGFzc2lnbihw
KTsKIH0KIAogV2ViSW1hZ2UmIFdlYkltYWdlOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxJ
bWFnZT4mIGltYWdlKQogewogICAgIE5hdGl2ZUltYWdlUHRyIHA7Ci0gICAgaWYgKGltYWdlLmdl
dCgpICYmIChwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKQorICAgIGlm
IChpbWFnZSAmJiAocCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKICAg
ICAgICAgYXNzaWduKHApOwogICAgIGVsc2UKICAgICAgICAgcmVzZXQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmNwcAkocmV2aXNpb24gOTg4MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0
LDcgQEAgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp+V2ViTWVkaWFQbGF5ZQogewogICAgIC8v
IFZpZGVvTGF5ZXJDaHJvbWl1bSBtYXkgb3V0bGl2ZSB0aGlzIG9iamVjdCBzbyBjbGVhciB0aGUg
YmFjayBwb2ludGVyLgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAo
bV92aWRlb0xheWVyLmdldCgpKQorICAgIGlmIChtX3ZpZGVvTGF5ZXIpCiAgICAgICAgIG1fdmlk
ZW9MYXllci0+cmVsZWFzZVByb3ZpZGVyKCk7CiAjZW5kaWYKIH0KQEAgLTEyMCw3ICsxMjAsNyBA
QCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVhZHlTdGF0CiAgICAgQVNTRVJUKG1f
bWVkaWFQbGF5ZXIpOwogICAgIG1fbWVkaWFQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChoYXNWaWRlbygpICYmIHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiAhbV92aWRlb0xheWVyLmdldCgpKQorICAg
IGlmIChoYXNWaWRlbygpICYmIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiAhbV92
aWRlb0xheWVyKQogICAgICAgICBtX3ZpZGVvTGF5ZXIgPSBWaWRlb0xheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwLCB0aGlzKTsKICNlbmRpZgogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjpyZXBhaW50KCkKIHsKICAgICBBU1NFUlQobV9tZWRpYVBsYXll
cik7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3ZpZGVvTGF5
ZXIuZ2V0KCkgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKQorICAgIGlmIChtX3Zp
ZGVvTGF5ZXIgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKQogICAgICAgICBtX3Zp
ZGVvTGF5ZXItPnNldE5lZWRzRGlzcGxheShJbnRSZWN0KDAsIDAsIG1fdmlkZW9MYXllci0+Ym91
bmRzKCkud2lkdGgoKSwgbV92aWRlb0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSkpOwogI2VuZGlm
CiAgICAgbV9tZWRpYVBsYXllci0+cmVwYWludCgpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpsb2FkSW50ZXIKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV9tZWRpYVBsYXllci0+bWVkaWFQbGF5
ZXJDbGllbnQoKSktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgbV93ZWJNZWRpYVBsYXllciA9
IGNyZWF0ZVdlYk1lZGlhUGxheWVyKHRoaXMsIGZyYW1lKTsKLSAgICBpZiAobV93ZWJNZWRpYVBs
YXllci5nZXQoKSkgeworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKSB7CiAjaWYgRU5BQkxFKFdF
Ql9BVURJTykKICAgICAgICAgLy8gTWFrZSBzdXJlIGlmIHdlIGNyZWF0ZS9yZS1jcmVhdGUgdGhl
IFdlYk1lZGlhUGxheWVyIHRoYXQgd2UgdXBkYXRlIG91ciB3cmFwcGVyLgogICAgICAgICBtX2F1
ZGlvU291cmNlUHJvdmlkZXIud3JhcChtX3dlYk1lZGlhUGxheWVyLT5hdWRpb1NvdXJjZVByb3Zp
ZGVyKCkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
Ojpsb2FkSW50ZXIKIAogdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmNhbmNlbExvYWQo
KQogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlh
UGxheWVyKQogICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5jYW5jZWxMb2FkKCk7CiB9CiAKQEAg
LTI2NSwyNyArMjY1LDI3IEBAIFBsYXRmb3JtTWVkaWEgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
OjoKIAogdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnBsYXkoKQogewotICAgIGlmICht
X3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAg
ICBtX3dlYk1lZGlhUGxheWVyLT5wbGF5KCk7CiB9CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpwYXVzZSgpCiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnBhdXNlKCk7
CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnNvdXJjZUFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2Vi
TWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VBcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpzb3VyY2VFbmRPZlN0cmVhbShXZWJDb3JlOjpNZWRpYVBsYXllcjo6
RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdl
dCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBtX3dlYk1lZGlhUGxheWVy
LT5zb3VyY2VFbmRPZlN0cmVhbShzdGF0aWNfY2FzdDxXZWJNZWRpYVBsYXllcjo6RW5kT2ZTdHJl
YW1TdGF0dXM+KHN0YXR1cykpOwogfQogI2VuZGlmCkBAIC0yOTgsMTIxICsyOTgsMTIxIEBAIHZv
aWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwcmVwYXJlVG8KIAogSW50U2l6ZSBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJN
ZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0
dXJuIG1fd2ViTWVkaWFQbGF5ZXItPm5hdHVyYWxTaXplKCk7CiAgICAgcmV0dXJuIEludFNpemUo
KTsKIH0KIAogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc1ZpZGVvKCkgY29uc3QK
IHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBs
YXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmhhc1ZpZGVvKCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aGFzQXVk
aW8oKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmICht
X3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+aGFzQXVk
aW8oKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXll
ci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgbV93ZWJNZWRpYVBs
YXllci0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKIH0KIAogZmxvYXQgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpkdXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0
KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlh
UGxheWVyLT5kdXJhdGlvbigpOwogICAgIHJldHVybiAwLjBmOwogfQogCiBmbG9hdCBXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJN
ZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0
dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmN1cnJlbnRUaW1lKCk7CiAgICAgcmV0dXJuIDAuMGY7CiB9
CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZWVrKGZsb2F0IHRpbWUpCiB7Ci0g
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIp
CiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNlZWsodGltZSk7CiB9CiAKIGJvb2wgV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjpzZWVraW5nKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRp
YVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJu
IG1fd2ViTWVkaWFQbGF5ZXItPnNlZWtpbmcoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZv
aWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7Ci0g
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIp
CiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldEVuZFRpbWUodGltZSk7CiB9CiAKIHZvaWQg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7Ci0gICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAg
ICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldFJhdGUocmF0ZSk7CiB9CiAKIGJvb2wgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpwYXVzZWQoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxh
eWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93
ZWJNZWRpYVBsYXllci0+cGF1c2VkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFdl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QKIHsKLSAg
ICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikK
ICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnN1cHBvcnRzRnVsbHNjcmVlbigpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN1
cHBvcnRzU2F2ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisg
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVy
LT5zdXBwb3J0c1NhdmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewotICAgIGlmIChtX3dl
Yk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICBt
X3dlYk1lZGlhUGxheWVyLT5zZXRWb2x1bWUodm9sdW1lKTsKIH0KIAogTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQ
bGF5ZXIpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlPihtX3dlYk1lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGUoKSk7CiAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpFbXB0eTsKIH0KIAogTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBs
YXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlPihtX3dlYk1lZGlhUGxheWVyLT5yZWFk
eVN0YXRlKCkpOwogICAgIHJldHVybiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CiB9CiAKIGZs
b2F0IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKIHsK
LSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXll
cikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPm1heFRpbWVTZWVrYWJsZSgpOwog
ICAgIHJldHVybiAwLjBmOwogfQogCiBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6YnVmZmVyZWQoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxh
eWVyLmdldCgpKSB7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpIHsKICAgICAgICAgY29uc3Qg
V2ViVGltZVJhbmdlcyYgd2ViUmFuZ2VzID0gbV93ZWJNZWRpYVBsYXllci0+YnVmZmVyZWQoKTsK
IAogICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgdGltZSByYW5nZXMgaW4gYSBtZW1iZXIgdmFy
aWFibGUgYW5kIHVwZGF0ZSBpdCB3aGVuIG5lZWRlZC4KQEAgLTQyNiwzNSArNDI2LDM1IEBAIFBh
c3NSZWZQdHI8VGltZVJhbmdlcz4gV2ViTWVkaWFQbGF5ZXJDbGkKIAogaW50IFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6ZGF0YVJhdGUoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxh
eWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93
ZWJNZWRpYVBsYXllci0+ZGF0YVJhdGUoKTsKICAgICByZXR1cm4gMDsKIH0KIAogYm9vbCBXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT50b3RhbEJ5dGVzS25vd24oKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIHVuc2lnbmVkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxC
eXRlcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV93ZWJNZWRpYVBsYXllci0+dG90YWxCeXRlcygpKTsKICAgICByZXR1cm4gMDsKIH0KIAogdW5z
aWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpieXRlc0xvYWRlZCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIp
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93ZWJNZWRpYVBsYXllci0+
Ynl0ZXNMb2FkZWQoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKG1fd2Vi
TWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAgICAgICAgIG1f
d2ViTWVkaWFQbGF5ZXItPnNldFNpemUoV2ViU2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpKTsKIH0KIApAQCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpwYWludEN1cnIKICAgICAvLyBOb3JtYWxseSBHcmFwaGljc0NvbnRleHQgb3BlcmF0aW9u
cyBkbyBub3RoaW5nIHdoZW4gcGFpbnRpbmcgaXMgZGlzYWJsZWQuCiAgICAgLy8gU2luY2Ugd2Un
cmUgYWNjZXNzaW5nIHBsYXRmb3JtQ29udGV4dCgpIGRpcmVjdGx5IHdlIGhhdmUgdG8gbWFudWFs
bHkKICAgICAvLyBjaGVjay4KLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSAmJiAhY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIgJiYg
IWNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkgewogI2lmIFdFQktJVF9VU0lOR19TS0lBCiAg
ICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9y
bUNvbnRleHQtPmNhbnZhcygpOwpAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjpzZXRQcmVsb2EKIHsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwogCi0g
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIp
CiAgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldFByZWxvYWQoc3RhdGljX2Nhc3Q8V2ViTWVk
aWFQbGF5ZXI6OlByZWxvYWQ+KHByZWxvYWQpKTsKIAogICAgIGlmIChtX2RlbGF5aW5nTG9hZCAm
JiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCkBAIC01MDUsMTQgKzUwNSwxNCBAQCB2
b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0UHJlbG9hCiAKIGJvb2wgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAg
ICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKIHsKLSAgICBpZiAo
bV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlPigKICAgICAg
ICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPm1vdmllTG9hZFR5cGUoKSk7CiAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpVbmtub3duOwpAQCAtNTIwLDM1ICs1MjAsMzUgQEAgTWVkaWFQbGF5ZXI6Ok1v
dmllTG9hZFR5cGUgV2ViTWVkaWFQbGF5ZQogCiBmbG9hdCBXZWJNZWRpYVBsYXllckNsaWVudElt
cGw6Om1lZGlhVGltZUZvclRpbWVWYWx1ZShmbG9hdCB0aW1lVmFsdWUpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpCiAg
ICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5tZWRpYVRpbWVGb3JUaW1lVmFsdWUodGlt
ZVZhbHVlKTsKICAgICByZXR1cm4gdGltZVZhbHVlOwogfQogCiB1bnNpZ25lZCBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKIHsKLSAgICBpZiAobV93
ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAg
cmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPmRlY29kZWRGcmFtZUNvdW50KCk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKIHVuc2lnbmVkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZHJvcHBlZEZyYW1l
Q291bnQoKSBjb25zdAogewotICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyKQogICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHJv
cHBlZEZyYW1lQ291bnQoKTsKICAgICByZXR1cm4gMDsKIH0KIAogdW5zaWduZWQgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAogewotICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKQogICAg
ICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+YXVkaW9EZWNvZGVkQnl0ZUNvdW50KCk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKIHVuc2lnbmVkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dmlk
ZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKIHsKLSAgICBpZiAobV93ZWJNZWRpYVBsYXllci5n
ZXQoKSkKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG1fd2ViTWVk
aWFQbGF5ZXItPnZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpOwogICAgIHJldHVybiAwOwogfQpAQCAt
NTY4LDcgKzU2OCw3IEBAIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c0EK
IAogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmFjY2VsZXJhdGVkUmVuZGVyaW5nSW5V
c2UoKQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXIuZ2V0KCkgJiYgbV92aWRlb0xheWVyLT5s
YXllclRyZWVIb3N0KCk7CisgICAgcmV0dXJuIG1fdmlkZW9MYXllciAmJiBtX3ZpZGVvTGF5ZXIt
PmxheWVyVHJlZUhvc3QoKTsKIH0KIAogVmlkZW9GcmFtZUNocm9taXVtKiBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSgpCkBAIC01ODUsNyArNTg1LDcgQEAgVmlkZW9G
cmFtZUNocm9taXVtKiBXZWJNZWRpYVBsYXllckNsaWVudAogdm9pZCBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OnB1dEN1cnJlbnRGcmFtZShWaWRlb0ZyYW1lQ2hyb21pdW0qIHZpZGVvRnJhbWUp
CiB7CiAgICAgaWYgKHZpZGVvRnJhbWUgJiYgdmlkZW9GcmFtZSA9PSBtX2N1cnJlbnRWaWRlb0Zy
YW1lKSB7Ci0gICAgICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKSB7CisgICAgICAgIGlm
IChtX3dlYk1lZGlhUGxheWVyKSB7CiAgICAgICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5wdXRD
dXJyZW50RnJhbWUoCiAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6dG9X
ZWJWaWRlb0ZyYW1lKHZpZGVvRnJhbWUpKTsKICAgICAgICAgfQpAQCAtNjQyLDcgKzY0Miw3IEBA
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgV2ViTWVkaWFQbGF5ZXIKIHZvaWQgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpzdGFydERlbGF5ZWRMb2FkKCkKIHsKICAgICBBU1NFUlQobV9kZWxh
eWluZ0xvYWQpOwotICAgIEFTU0VSVCghbV93ZWJNZWRpYVBsYXllci5nZXQoKSk7CisgICAgQVNT
RVJUKCFtX3dlYk1lZGlhUGxheWVyKTsKIAogICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCShy
ZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgdm9pZCBXZWJVUkxSZXF1
ZXN0OjpzZXREb3dubG9hZFRvRmlsZShibwogV2ViVVJMUmVxdWVzdDo6RXh0cmFEYXRhKiBXZWJV
UkxSZXF1ZXN0OjpleHRyYURhdGEoKSBjb25zdAogewogICAgIFJlZlB0cjxSZXNvdXJjZVJlcXVl
c3Q6OkV4dHJhRGF0YT4gZGF0YSA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmV4dHJh
RGF0YSgpOwotICAgIGlmICghZGF0YS5nZXQoKSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFeHRyYURhdGFDb250YWluZXIqPihkYXRh
LmdldCgpKS0+ZXh0cmFEYXRhKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDE3ICs0MDEs
MTcgQEAgV2ViVmlld0ltcGw6On5XZWJWaWV3SW1wbCgpCiAKIFJlbmRlclRoZW1lKiBXZWJWaWV3
SW1wbDo6dGhlbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhZ2UuZ2V0KCkgPyBtX3BhZ2Ut
PnRoZW1lKCkgOiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCk7CisgICAgcmV0dXJu
IG1fcGFnZSA/IG1fcGFnZS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5n
ZXQoKTsKIH0KIAogV2ViRnJhbWVJbXBsKiBXZWJWaWV3SW1wbDo6bWFpbkZyYW1lSW1wbCgpCiB7
Ci0gICAgcmV0dXJuIG1fcGFnZS5nZXQoKSA/IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKG1fcGFn
ZS0+bWFpbkZyYW1lKCkpIDogMDsKKyAgICByZXR1cm4gbV9wYWdlID8gV2ViRnJhbWVJbXBsOjpm
cm9tRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSkgOiAwOwogfQogCiBib29sIFdlYlZpZXdJbXBs
Ojp0YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoKSBjb25zdAogewotICAgIEFTU0VSVChtX3Bh
Z2UuZ2V0KCkpOworICAgIEFTU0VSVChtX3BhZ2UpOwogICAgIHJldHVybiBtX3BhZ2UtPnRhYktl
eUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpOwogfQogCkBAIC05MjEsNyArOTIxLDcgQEAgYm9vbCBX
ZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChpbgogCiB2b2lkIFdlYlZpZXdJbXBsOjpo
aWRlU2VsZWN0UG9wdXAoKQogewotICAgIGlmIChtX3NlbGVjdFBvcHVwLmdldCgpKQorICAgIGlm
IChtX3NlbGVjdFBvcHVwKQogICAgICAgICBtX3NlbGVjdFBvcHVwLT5oaWRlUG9wdXAoKTsKIH0K
IApAQCAtOTUyLDcgKzk1Miw3IEBAIHZvaWQgIFdlYlZpZXdJbXBsOjpwb3B1cE9wZW5lZChXZWJD
b3JlOjoKIHZvaWQgIFdlYlZpZXdJbXBsOjpwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRh
aW5lciogcG9wdXBDb250YWluZXIpCiB7CiAgICAgaWYgKHBvcHVwQ29udGFpbmVyLT5wb3B1cFR5
cGUoKSA9PSBXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6U2VsZWN0KSB7Ci0gICAgICAgIEFTU0VS
VChtX3NlbGVjdFBvcHVwLmdldCgpKTsKKyAgICAgICAgQVNTRVJUKG1fc2VsZWN0UG9wdXApOwog
ICAgICAgICBtX3NlbGVjdFBvcHVwID0gMDsKICAgICB9CiB9CkBAIC05NjcsNyArOTY3LDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6aGlkZUF1dG9maWxsUG9wdXAoKQogCiBGcmFtZSogV2ViVmlld0lt
cGw6OmZvY3VzZWRXZWJDb3JlRnJhbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhZ2UuZ2V0
KCkgPyBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSA6IDA7
CisgICAgcmV0dXJuIG1fcGFnZSA/IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpIDogMDsKIH0KIAogV2ViVmlld0ltcGwqIFdlYlZpZXdJbXBsOjpmcm9tUGFn
ZShQYWdlKiBwYWdlKQpAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNsb3Nl
KCkKIHsKICAgICBSZWZQdHI8V2ViRnJhbWVJbXBsPiBtYWluRnJhbWVJbXBsOwogCi0gICAgaWYg
KG1fcGFnZS5nZXQoKSkgeworICAgIGlmIChtX3BhZ2UpIHsKICAgICAgICAgLy8gSW5pdGlhdGUg
c2h1dGRvd24gZm9yIHRoZSBlbnRpcmUgZnJhbWVzZXQuICBUaGlzIHdpbGwgY2F1c2UgYSBsb3Qg
b2YKICAgICAgICAgLy8gbm90aWZpY2F0aW9ucyB0byBiZSBzZW50LgogICAgICAgICBpZiAobV9w
YWdlLT5tYWluRnJhbWUoKSkgewpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OmNsb3NlKCkKICAgICB9CiAKICAgICAvLyBTaG91bGQgaGFwcGVuIGFmdGVyIG1fcGFnZS5jbGVh
cigpLgotICAgIGlmIChtX2RldlRvb2xzQWdlbnQuZ2V0KCkpCisgICAgaWYgKG1fZGV2VG9vbHNB
Z2VudCkKICAgICAgICAgbV9kZXZUb29sc0FnZW50LmNsZWFyKCk7CiAKICAgICAvLyBSZXNldCB0
aGUgZGVsZWdhdGUgdG8gcHJldmVudCBub3RpZmljYXRpb25zIGJlaW5nIHNlbnQgYXMgd2UncmUg
YmVpbmcKQEAgLTExMTgsNyArMTExOCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFk
YmFja1RvQ2FudmEKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVs
QXJyYXkoQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQp
KTsKLSAgICBpZiAoaW1hZ2VCdWZmZXIuZ2V0KCkgJiYgcGl4ZWxBcnJheS5nZXQoKSkgeworICAg
IGlmIChpbWFnZUJ1ZmZlciAmJiBwaXhlbEFycmF5KSB7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsK
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJh
eS5nZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJ
bnRQb2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgpOwpAQCAtMTIwOSw3ICsxMjA5LDcgQEAgYm9v
bCBXZWJWaWV3SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdAogCiAgICAgbV9jdXJyZW50SW5w
dXRFdmVudCA9ICZpbnB1dEV2ZW50OwogCi0gICAgaWYgKG1fbW91c2VDYXB0dXJlTm9kZS5nZXQo
KSAmJiBXZWJJbnB1dEV2ZW50Ojppc01vdXNlRXZlbnRUeXBlKGlucHV0RXZlbnQudHlwZSkpIHsK
KyAgICBpZiAobV9tb3VzZUNhcHR1cmVOb2RlICYmIFdlYklucHV0RXZlbnQ6OmlzTW91c2VFdmVu
dFR5cGUoaW5wdXRFdmVudC50eXBlKSkgewogICAgICAgICAvLyBTYXZlIG1fbW91c2VDYXB0dXJl
Tm9kZSBzaW5jZSBtb3VzZUNhcHR1cmVMb3N0KCkgd2lsbCBjbGVhciBpdC4KICAgICAgICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBtX21vdXNlQ2FwdHVyZU5vZGU7CiAKQEAgLTEzNDQsNyArMTM0NCw3
IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgICAgICBoaWRl
U2VsZWN0UG9wdXAoKTsKIAogICAgICAgICAvLyBDbGVhciBmb2N1cyBvbiB0aGUgY3VycmVudGx5
IGZvY3VzZWQgZnJhbWUgaWYgYW55LgotICAgICAgICBpZiAoIW1fcGFnZS5nZXQoKSkKKyAgICAg
ICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKQEAgLTEzNTIsNyArMTM1Miw3IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIFJlZlB0cjxGcmFtZT4gZm9jdXNlZEZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgICAgIGlmIChmb2N1c2VkRnJhbWUuZ2V0KCkpIHsK
KyAgICAgICAgaWYgKGZvY3VzZWRGcmFtZSkgewogICAgICAgICAgICAgLy8gRmluaXNoIGFuIG9u
Z29pbmcgY29tcG9zaXRpb24gdG8gZGVsZXRlIHRoZSBjb21wb3NpdGlvbiBub2RlLgogICAgICAg
ICAgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkRnJhbWUtPmVkaXRvcigpOwogICAgICAgICAg
ICAgaWYgKGVkaXRvciAmJiBlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCkBAIC0xNDYyLDcgKzE0
NjIsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdlKHNpemVfCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBv
c2l0aW9uUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKGZvY3VzZWQtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVt
ZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksICpsb2NhdGlvbiwgKmxlbmd0aCkp
CkBAIC0xNTY4LDcgKzE1NjgsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9u
UmFuZ2UoCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3Rpb24tPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlLmdl
dCgpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNlbGVjdGlvbi0+cm9v
dEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCksIHJhbmdlLmdldCgpLCAqbG9jYXRp
b24sICpsZW5ndGgpKQpAQCAtMTYyNCwxMyArMTYyNCwxMyBAQCBXZWJTZXR0aW5ncyogV2ViVmll
d0ltcGw6OnNldHRpbmdzKCkKIHsKICAgICBpZiAoIW1fd2ViU2V0dGluZ3MpCiAgICAgICAgIG1f
d2ViU2V0dGluZ3MgPSBhZG9wdFB0cihuZXcgV2ViU2V0dGluZ3NJbXBsKG1fcGFnZS0+c2V0dGlu
Z3MoKSkpOwotICAgIEFTU0VSVChtX3dlYlNldHRpbmdzLmdldCgpKTsKKyAgICBBU1NFUlQobV93
ZWJTZXR0aW5ncyk7CiAgICAgcmV0dXJuIG1fd2ViU2V0dGluZ3MuZ2V0KCk7CiB9CiAKIFdlYlN0
cmluZyBXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFn
ZS5nZXQoKSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwog
CiAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVlZGVkPwpAQCAtMTY0Miw3ICsxNjQyLDcg
QEAgV2ViU3RyaW5nIFdlYlZpZXdJbXBsOjpwYWdlRW5jb2RpbmcoKSBjbwogCiB2b2lkIFdlYlZp
ZXdJbXBsOjpzZXRQYWdlRW5jb2RpbmcoY29uc3QgV2ViU3RyaW5nJiBlbmNvZGluZ05hbWUpCiB7
Ci0gICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE9ubHkgY2hhbmdlIG92ZXJyaWRlIGVuY29kaW5nLCBkb24ndCBjaGFuZ2Ug
ZGVmYXVsdCBlbmNvZGluZy4KQEAgLTE3MDcsNyArMTcwNyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldEZvY3VzZWRGcmFtZShXZWJGcmEKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0SW5pdGlhbEZv
Y3VzKGJvb2wgcmV2ZXJzZSkKIHsKLSAgICBpZiAoIW1fcGFnZS5nZXQoKSkKKyAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGtl
eWJvYXJkIGV2ZW50LCB3ZSdsbCBjcmVhdGUgb25lLgpAQCAtMTczMiwxMSArMTczMiwxMSBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRJbml0aWFsRm9jdXMoYm9vbCByCiB2b2lkIFdlYlZpZXdJbXBs
OjpjbGVhckZvY3VzZWROb2RlKCkKIHsKICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZm9jdXNl
ZFdlYkNvcmVGcmFtZSgpOwotICAgIGlmICghZnJhbWUuZ2V0KCkpCisgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQuZ2V0KCkpCisgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPE5vZGU+IG9sZEZvY3VzZWROb2RlID0g
ZG9jdW1lbnQtPmZvY3VzZWROb2RlKCk7CkBAIC0xNzQ0LDcgKzE3NDQsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpjbGVhckZvY3VzZWROb2RlKCkKICAgICAvLyBDbGVhciB0aGUgZm9jdXNlZCBub2Rl
LgogICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKIAotICAgIGlmICghb2xkRm9jdXNl
ZE5vZGUuZ2V0KCkpCisgICAgaWYgKCFvbGRGb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gSWYgYSB0ZXh0IGZpZWxkIGhhcyBmb2N1cywgd2UgbmVlZCB0byBtYWtlIHN1cmUg
dGhlIHNlbGVjdGlvbiBjb250cm9sbGVyCkBAIC0xOTMzLDcgKzE5MzMsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpwZXJmb3JtTWVkaWFQbGF5ZXJBY3RpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmNvcHlJ
bWFnZUF0KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoIW1fcGFnZS5nZXQoKSkK
KyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBoaXRUZXN0UmVzdWx0Rm9yV2luZG93UG9zKHBvaW50KTsKQEAgLTE5OTAsNyArMTk5
MCw3IEBAIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXQKICAgICBjb25z
dCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJh
dGlvbnNBbGxvd2VkKQogewotICAgIEFTU0VSVCghbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwor
ICAgIEFTU0VSVCghbV9jdXJyZW50RHJhZ0RhdGEpOwogCiAgICAgbV9jdXJyZW50RHJhZ0RhdGEg
PSB3ZWJEcmFnRGF0YTsKICAgICBtX29wZXJhdGlvbnNBbGxvd2VkID0gb3BlcmF0aW9uc0FsbG93
ZWQ7CkBAIC0yMDEwLDcgKzIwMTAsNyBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpk
cmFnVGFyZ2V0CiAKIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUoKQogewot
ICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7CisgICAgQVNTRVJUKG1fY3VycmVu
dERyYWdEYXRhKTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKAogICAgICAgICBtX2N1cnJlbnRE
cmFnRGF0YS5nZXQoKSwKQEAgLTIwMjksNyArMjAyOSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcmFnTGVhdmUoKQogdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29u
c3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50KQogewotICAgIEFTU0VSVChtX2N1cnJlbnRE
cmFnRGF0YS5nZXQoKSk7CisgICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhKTsKIAogICAgIC8v
IElmIHRoaXMgd2VidmlldyB0cmFuc2l0aW9ucyBmcm9tIHRoZSAiZHJvcCBhY2NlcHRpbmciIHN0
YXRlIHRvIHRoZSAibm90CiAgICAgLy8gYWNjZXB0aW5nIiBzdGF0ZSwgdGhlbiBvdXIgSVBDIG1l
c3NhZ2UgcmVwbHkgaW5kaWNhdGluZyB0aGF0IG1heSBiZSBpbi0KQEAgLTIwNTksNyArMjA1OSw3
IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKGNvbnN0IFcKIAogV2ViRHJhZ09w
ZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcihjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwgRHJhZ0FjdGlv
biBkcmFnQWN0aW9uKQogewotICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7Cisg
ICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhKTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKAog
ICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKQEAgLTIwOTYsNyArMjA5Niw3IEBAIHVu
c2lnbmVkIGxvbmcgV2ViVmlld0ltcGw6OmNyZWF0ZVVuaXF1ZUkKIAogdm9pZCBXZWJWaWV3SW1w
bDo6aW5zcGVjdEVsZW1lbnRBdChjb25zdCBXZWJQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFt
X3BhZ2UuZ2V0KCkpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChwb2ludC54ID09IC0xIHx8IHBvaW50LnkgPT0gLTEpCkBAIC0yMTc3LDggKzIxNzcsOCBAQCB2
b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9maWxsU3VnZ2VzdGlvCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW0gPQotICAgICAgICBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9jdXNlZE5vZGUuZ2V0KCkpOworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbSA9IGZvY3VzZWROb2RlLT50b0lucHV0RWxlbWVudCgpOwor
ICAgIEFTU0VSVChpbnB1dEVsZW0pOwogCiAgICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhlIEF1dG9m
aWxsIHBvcHVwIGlzIHNob3duIHdlJ2xsIGNyZWF0ZSB0aGUgY2xpZW50IGFuZAogICAgIC8vIHRo
ZSBwb3B1cC4KQEAgLTIxODgsNyArMjE4OCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0
b2ZpbGxTdWdnZXN0aW8KICAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoCiAg
ICAgICAgIGlucHV0RWxlbSwgbmFtZXMsIGxhYmVscywgaWNvbnMsIHVuaXF1ZUlEcywgc2VwYXJh
dG9ySW5kZXgpOwogCi0gICAgaWYgKCFtX2F1dG9maWxsUG9wdXAuZ2V0KCkpIHsKKyAgICBpZiAo
IW1fYXV0b2ZpbGxQb3B1cCkgewogICAgICAgICBtX2F1dG9maWxsUG9wdXAgPSBQb3B1cENvbnRh
aW5lcjo6Y3JlYXRlKG1fYXV0b2ZpbGxQb3B1cENsaWVudC5nZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3VnZ2Vz
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvZmlsbFBvcHVwU2V0dGluZ3MpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViV29ya2VyQmFzZS5jcHAJKHJldmlzaW9uIDk4ODM1KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsx
NzMsNyBAQCB2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVGFzayhTY3JpCiAgICAgaWYg
KCF0aGlzUHRyLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMuZ2V0KCkgPyBjaGFubmVscy0+c2l6
ZSgpIDogMCk7CisgICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hh
bm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewogICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgq
Y2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNoYW5uZWxSZWxlYXNlKCk7CiAgICAgICAgIHdl
YkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5ODgzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBA
QCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6fldvcmtlckFzCiAKIGJvb2wgV29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkKIHsK
LSAgICBpZiAoIW1fYnJpZGdlRm9yQ3VycmVudE9wZXJhdGlvbi5nZXQoKSkKKyAgICBpZiAoIW1f
YnJpZGdlRm9yQ3VycmVudE9wZXJhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IG1fYnJpZGdl
Rm9yQ3VycmVudE9wZXJhdGlvbi5yZWxlYXNlKCk7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYQogCiBQYXNzUmVmUHRyPFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpj
cmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgQVNTRVJUKCFtX3N5bmNocm9ub3Vz
IHx8ICFtX2JyaWRnZUZvckN1cnJlbnRPcGVyYXRpb24uZ2V0KCkpOworICAgIEFTU0VSVCghbV9z
eW5jaHJvbm91cyB8fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKIAogICAgIG1fbW9k
ZUZvckN1cnJlbnRPcGVyYXRpb24gPSBmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGU7CiAgICAgbV9t
b2RlRm9yQ3VycmVudE9wZXJhdGlvbi5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV93b3JrZXJDb250
ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVuaXF1ZUlkKCkpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>