<?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>98244</bug_id>
          
          <creation_ts>2012-10-03 02:25:10 -0700</creation_ts>
          <short_desc>[Refactoring] Scoped Style related code should have its own class.</short_desc>
          <delta_ts>2012-10-09 01:00:57 -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>CSS</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>
          <dependson>98469</dependson>
          <blocked>95664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>733480</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-03 02:25:10 -0700</bug_when>
    <thetext>This is preparation for Bug 95664. 
By extracting scoped stylesheet feature to separate code path,
we could see how it affects the performance for both scoped and non-scoped style cases.
It would clarify the impact of making scoping machinery available for Shadow DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733489</commentid>
    <comment_count>1</comment_count>
      <attachid>166834</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-03 02:35:36 -0700</bug_when>
    <thetext>Created attachment 166834
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733538</commentid>
    <comment_count>2</comment_count>
      <attachid>166848</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-03 03:45:37 -0700</bug_when>
    <thetext>Created attachment 166848
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733545</commentid>
    <comment_count>3</comment_count>
      <attachid>166848</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-03 03:57:51 -0700</bug_when>
    <thetext>Comment on attachment 166848
WIP

Attachment 166848 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14105021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733546</commentid>
    <comment_count>4</comment_count>
      <attachid>166848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-03 04:00:29 -0700</bug_when>
    <thetext>Comment on attachment 166848
WIP

Attachment 166848 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14134539</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733551</commentid>
    <comment_count>5</comment_count>
      <attachid>166848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-03 04:12:57 -0700</bug_when>
    <thetext>Comment on attachment 166848
WIP

Attachment 166848 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14118842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733553</commentid>
    <comment_count>6</comment_count>
      <attachid>166848</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-03 04:15:53 -0700</bug_when>
    <thetext>Comment on attachment 166848
WIP

Attachment 166848 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14124800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733554</commentid>
    <comment_count>7</comment_count>
      <attachid>166848</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-03 04:17:04 -0700</bug_when>
    <thetext>Comment on attachment 166848
WIP

Attachment 166848 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14152061</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733779</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-03 09:28:41 -0700</bug_when>
    <thetext>This is interesting. Are you planning to break this up into several patches to land?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734521</commentid>
    <comment_count>9</comment_count>
      <attachid>167057</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 02:10:23 -0700</bug_when>
    <thetext>Created attachment 167057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734525</commentid>
    <comment_count>10</comment_count>
      <attachid>167057</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 02:15:44 -0700</bug_when>
    <thetext>Comment on attachment 167057
Patch

Attachment 167057 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14134916</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734527</commentid>
    <comment_count>11</comment_count>
      <attachid>167057</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-04 02:22:20 -0700</bug_when>
    <thetext>Comment on attachment 167057
Patch

Attachment 167057 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14173086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734529</commentid>
    <comment_count>12</comment_count>
      <attachid>167057</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-04 02:23:52 -0700</bug_when>
    <thetext>Comment on attachment 167057
Patch

Attachment 167057 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14137917</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734537</commentid>
    <comment_count>13</comment_count>
      <attachid>167057</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 02:41:15 -0700</bug_when>
    <thetext>Comment on attachment 167057
Patch

Attachment 167057 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14136935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734808</commentid>
    <comment_count>14</comment_count>
      <attachid>167057</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-04 10:35:51 -0700</bug_when>
    <thetext>Comment on attachment 167057
Patch

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

I really like splitting out scope-related things into its own class, and anything else that makes StyleResolver a smaller seems like a win.


Having said that, the patch is too large and needs to be split up to allow for meaningful review. Maybe we could start with moving RuleData/RuleSet into their own files?

Also, is there a performance impact?

&gt; Source/WebCore/css/StyleResolver.cpp:401
&gt; +bool StyleResolver::usesSiblingRules() const
&gt; +{
&gt; +    return !m_features-&gt;siblingRules.isEmpty();
&gt; +}
&gt; +
&gt; +bool StyleResolver::usesFirstLineRules() const
&gt; +{
&gt; +    return m_features-&gt;usesFirstLineRules;
&gt; +}
&gt; +
&gt; +bool StyleResolver::usesBeforeAfterRules() const
&gt; +{
&gt; +    return m_features-&gt;usesBeforeAfterRules;
&gt; +}

Probably should go at the bottom of StyleResolver.h with inline prefix? Or has this convention changed?

&gt; Source/WebCore/css/StyleResolverRules.h:26
&gt; +#ifndef StyleResolverRules_h

Can we name it to match at least one class name in the header? This way, it will be easier to find by file name. How about RuleSet, since it&apos;s the majority of the code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735173</commentid>
    <comment_count>15</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 17:34:18 -0700</bug_when>
    <thetext>Dimitri, thanks for your feedback.
I&apos;ll create sub-bug to split existing class out from StyleResolver.cpp/h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735176</commentid>
    <comment_count>16</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 17:36:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 167057 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167057&amp;action=review
&gt; 
&gt; I really like splitting out scope-related things into its own class, and anything else that makes StyleResolver a smaller seems like a win.
&gt; 
&gt; 
&gt; Having said that, the patch is too large and needs to be split up to allow for meaningful review. Maybe we could start with moving RuleData/RuleSet into their own files?
&gt; 
&gt; Also, is there a performance impact?
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:401
&gt; &gt; +bool StyleResolver::usesSiblingRules() const
&gt; &gt; +{
&gt; &gt; +    return !m_features-&gt;siblingRules.isEmpty();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool StyleResolver::usesFirstLineRules() const
&gt; &gt; +{
&gt; &gt; +    return m_features-&gt;usesFirstLineRules;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool StyleResolver::usesBeforeAfterRules() const
&gt; &gt; +{
&gt; &gt; +    return m_features-&gt;usesBeforeAfterRules;
&gt; &gt; +}
&gt; 
&gt; Probably should go at the bottom of StyleResolver.h with inline prefix? Or has this convention changed?
&gt; 
It looks I went too far here. Will keep existing code and just fucus renaming for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735528</commentid>
    <comment_count>17</comment_count>
      <attachid>167292</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-05 02:49:52 -0700</bug_when>
    <thetext>Created attachment 167292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735529</commentid>
    <comment_count>18</comment_count>
      <attachid>167292</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 02:55:55 -0700</bug_when>
    <thetext>Comment on attachment 167292
Patch

Attachment 167292 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14171669</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735534</commentid>
    <comment_count>19</comment_count>
      <attachid>167292</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-05 03:09:08 -0700</bug_when>
    <thetext>Comment on attachment 167292
Patch

Attachment 167292 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14169685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735539</commentid>
    <comment_count>20</comment_count>
      <attachid>167296</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-05 03:21:56 -0700</bug_when>
    <thetext>Created attachment 167296
I&apos;m back</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735545</commentid>
    <comment_count>21</comment_count>
      <attachid>167296</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 03:31:11 -0700</bug_when>
    <thetext>Comment on attachment 167296
I&apos;m back

Attachment 167296 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14168685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735550</commentid>
    <comment_count>22</comment_count>
      <attachid>167296</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-05 03:51:03 -0700</bug_when>
    <thetext>Comment on attachment 167296
I&apos;m back

Attachment 167296 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14175469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735566</commentid>
    <comment_count>23</comment_count>
      <attachid>167296</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-05 04:23:54 -0700</bug_when>
    <thetext>Comment on attachment 167296
I&apos;m back

Attachment 167296 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14180417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735584</commentid>
    <comment_count>24</comment_count>
      <attachid>167296</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 05:19:17 -0700</bug_when>
    <thetext>Comment on attachment 167296
I&apos;m back

Attachment 167296 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14173537</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735678</commentid>
    <comment_count>25</comment_count>
      <attachid>167296</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-05 09:09:49 -0700</bug_when>
    <thetext>Comment on attachment 167296
I&apos;m back

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

This is great. Please make the bubbles happy before landing.

&gt; Source/WebCore/css/StyleResolver.h:489
&gt; +    OwnPtr&lt;StyleScopeResolver&gt; m_scoper;

Who u callin scoper? http://www.urbandictionary.com/define.php?term=Scoper

Maybe m_scopeResolver would be better :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737288</commentid>
    <comment_count>26</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-08 18:06:42 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 167296 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167296&amp;action=review
&gt; 
&gt; This is great. Please make the bubbles happy before landing.
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.h:489
&gt; &gt; +    OwnPtr&lt;StyleScopeResolver&gt; m_scoper;
&gt; 
&gt; Who u callin scoper? http://www.urbandictionary.com/define.php?term=Scoper
&gt; 
&gt; Maybe m_scopeResolver would be better :)
Right. I was grabbed by the short-name-tempation...

Thanks for your review Dimitri, I&apos;ll fix it and the build breaks then land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737320</commentid>
    <comment_count>27</comment_count>
      <attachid>167667</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-08 18:41:00 -0700</bug_when>
    <thetext>Created attachment 167667
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737323</commentid>
    <comment_count>28</comment_count>
      <attachid>167667</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-08 18:42:45 -0700</bug_when>
    <thetext>Comment on attachment 167667
Patch for landing

cq- for now to see EWS result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737363</commentid>
    <comment_count>29</comment_count>
      <attachid>167667</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 20:01:09 -0700</bug_when>
    <thetext>Comment on attachment 167667
Patch for landing

Rejecting attachment 167667 from commit-queue.

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

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 154708 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
51&gt;At revision 154708.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/14221508</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737380</commentid>
    <comment_count>30</comment_count>
      <attachid>167680</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-08 20:54:27 -0700</bug_when>
    <thetext>Created attachment 167680
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737500</commentid>
    <comment_count>31</comment_count>
      <attachid>167680</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 01:00:50 -0700</bug_when>
    <thetext>Comment on attachment 167680
Patch for landing

Clearing flags on attachment: 167680

Committed r130732: &lt;http://trac.webkit.org/changeset/130732&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737501</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 01:00:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166834</attachid>
            <date>2012-10-03 02:35:36 -0700</date>
            <delta_ts>2012-10-03 03:45:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-98244-20121003183448.patch</filename>
            <type>text/plain</type>
            <size>83447</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYTEyNzE2MmIw
ODg4ZGY4ZDRkZmEzODgwYTM3NDIxNWU2YjFlMTFlMC4uNDg3MTFmYmJkNTcwNDA3NzU4MGZiZTZm
MjQ5MjA5MWNjNzhiMGFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjYyNiwxMCArMjYyNiwxNSBA
QAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgnLAogICAgICAgICAgICAgJ2Nz
cy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5j
cHAnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCcsCiAgICAgICAgICAg
ICAnY3NzL1N0eWxlUmVzb2x2ZXIuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZl
ci5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCcsCisgICAgICAg
ICAgICAnY3NzL1N0eWxlUmVzb2x2ZXJSdWxlcy5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVS
dWxlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZS5oJywKKyAgICAgICAgICAgICdj
c3MvU3R5bGVSdWxlRmVhdHVyZS5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlSW1wb3J0
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZUltcG9ydC5oJywKICAgICAgICAgICAg
ICdjc3MvU3R5bGVTaGVldC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmlu
ZGV4IGNjM2Y1ZjNkZjJmYTNjMTI0ODJhMWI4MjhmY2NjYjMyNzk5ODJkMGMuLjY4NjU0ZjRlZGIy
ZDkyN2JlNDgyNGYxZDUxZjlhZTIxZTZjMDUwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKQEAgLTExMSw4ICsxMTEsMTEgQEAKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdl
LmgiCiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUGVu
ZGluZ0ltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlclJ1bGVzLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlRmVhdHVyZS5oIgogI2luY2x1ZGUgIlN0
eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgpAQCAtMjA1LDExNCArMjA4LDYgQEAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwocHJvcCwgUHJvcCkgXAogaWYgKHByaW1pdGl2ZVZhbHVlKSBcCiAgICAgbV9zdHls
ZS0+c2V0IyNQcm9wKCpwcmltaXRpdmVWYWx1ZSk7CiAKLWNsYXNzIFJ1bGVEYXRhIHsKLXB1Ymxp
YzoKLSAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNp
Z25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSk7Ci0KLSAgICB1bnNpZ25lZCBw
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICBTdHlsZVJ1bGUqIHJ1
bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KLSAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3J1bGUtPnNlbGVjdG9yTGlzdCgpLnNlbGVjdG9yQXQobV9zZWxl
Y3RvckluZGV4KTsgfQotICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdG9ySW5kZXg7IH0KLQotICAgIGJvb2wgaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3I7IH0KLSAgICBib29s
IGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNdWx0aXBhcnRTZWxl
Y3RvcjsgfQotICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9u
UnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdI
VE1MQmFzZWRPblJ1bGVIYXNoOyB9Ci0gICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcjsgfQotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zcGVj
aWZpY2l0eTsgfQotICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2xpbmtNYXRjaFR5cGU7IH0KLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KLSAgICBib29sIGlz
SW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQotCi0gICAg
Ly8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3Rz
IG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7Ci0gICAg
Y29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXM7IH0KLQotICAg
IHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFN0eWxlUnVsZSogbV9ydWxlOwotICAgIHVuc2lnbmVkIG1fc2VsZWN0b3JJbmRl
eCA6IDEyOwotICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5IGFyYml0cmFyaWx5
LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4KLSAgICAvLyBTb21lIHNp
bXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxhcmdlIHNpdGVzLgot
ICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyMDsKLSAgICB1bnNpZ25lZCBtX3NwZWNpZmljaXR5
IDogMjQ7Ci0gICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOwotICAg
IHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1faGFz
UmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAxOwotICAgIHVu
c2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKLSAgICB1bnNp
Z25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hN
YXNrCi0gICAgdW5zaWduZWQgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMTsKLSAgICB1
bnNpZ25lZCBtX2lzSW5SZWdpb25SdWxlIDogMTsKLSAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5z
dGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCi0gICAgdW5zaWdu
ZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1JZGVudGlmaWVy
Q291bnRdOwotfTsKLSAgICAKLXN0cnVjdCBTYW1lU2l6ZUFzUnVsZURhdGEgewotICAgIHZvaWQq
IGE7Ci0gICAgdW5zaWduZWQgYjsKLSAgICB1bnNpZ25lZCBjOwotICAgIHVuc2lnbmVkIGRbNF07
Ci19OwotCi1DT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1lU2l6
ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9zbWFsbCk7Ci0KLWNsYXNzIFJ1bGVT
ZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVTZXQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0KLQotICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0b21SdWxl
TWFwOwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBDb250
YWluZXJOb2RlKiA9IDApOwotCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1
bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBm
YWxzZSk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7Ci0gICAgdm9pZCBh
ZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1
bGVEYXRhJik7Ci0gICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAg
IHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVk
ID0gZmFsc2U7IH0KLQotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lk
UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBjbGFzc1J1bGVz
KEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChr
ZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVsZXMoQXRvbWljU3RyaW5n
SW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKEF0b21pY1N0cmlu
Z0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMuZ2V0
KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5rUHNldWRvQ2xhc3NSdWxl
cygpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4g
Jm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
dW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQotICAg
IGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVJ1bGVzOyB9Ci0KLSAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLQotcHVibGljOgotICAgIFJ1bGVTZXQoKTsKLQotICAgIEF0b21SdWxl
TWFwIG1faWRSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7Ci0gICAgQXRvbVJ1
bGVNYXAgbV90YWdSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNzUnVsZXM7Ci0gICAg
VmVjdG9yPFJ1bGVEYXRhPiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKLSAgICBWZWN0b3I8UnVs
ZURhdGE+IG1fdW5pdmVyc2FsUnVsZXM7Ci0gICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtX3Bh
Z2VSdWxlczsKLSAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKLSAgICBib29sIG1fYXV0b1Nocmlu
a1RvRml0RW5hYmxlZDsKLSAgICBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyBtX2ZlYXR1cmVzOwot
Ci0gICAgc3RydWN0IFJ1bGVTZXRTZWxlY3RvclBhaXIgewotICAgICAgICBSdWxlU2V0U2VsZWN0
b3JQYWlyKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUGFzc093blB0cjxSdWxlU2V0PiBydWxlU2V0
KSA6IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChydWxlU2V0KSB7IH0KLSAgICAgICAgUnVs
ZVNldFNlbGVjdG9yUGFpcihjb25zdCBSdWxlU2V0U2VsZWN0b3JQYWlyJiBycykgOiBzZWxlY3Rv
cihycy5zZWxlY3RvciksIHJ1bGVTZXQoY29uc3RfY2FzdDxSdWxlU2V0U2VsZWN0b3JQYWlyKj4o
JnJzKS0+cnVsZVNldC5yZWxlYXNlKCkpIHsgfQotICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotICAgICAgICBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3I7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0OwotICAgIH07Ci0KLSAgICBW
ZWN0b3I8UnVsZVNldFNlbGVjdG9yUGFpcj4gbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0czsK
LX07Ci0KIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVm
YXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwpAQCAt
MzY5LDcgKzI2NCw4IEBAIHN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xh
cmF0aW9uKCkKIH0KIAogU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgIDogbV9oYXNVQUFwcGVh
cmFuY2UoZmFsc2UpCisgICAgOiBtX2ZlYXR1cmVzKGFkb3B0UHRyKG5ldyBTdHlsZVJ1bGVGZWF0
dXJlU2V0KCkpKQorICAgICwgbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCiAgICAgLCBtX2JhY2tn
cm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpCiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9jaGVja2VyKGRvY3VtZW50
LCAhZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKQpAQCAtMzkzLDEwICsyODksNiBAQCBTdHlsZVJl
c29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgbV9oYXNQZW5k
aW5nU2hhZGVycyhmYWxzZSkKICNlbmRpZgotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAg
LCBtX3Njb3BlU3RhY2tQYXJlbnQoMCkKLSAgICAsIG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0lu
ZGV4KDApCi0jZW5kaWYKICAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiBy
b290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtNDgxLDcgKzM3Myw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNo
ZWV0cyhjb25zdCBWZWN0b3I8UmVmCiAgICAgfQogfQogCi1zdGF0aWMgUGFzc093blB0cjxSdWxl
U2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmU+
JiBydWxlcykKK3N0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZl
Y3RvcjxTdHlsZVJ1bGVGZWF0dXJlPiYgcnVsZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBydWxl
cy5zaXplKCk7CiAgICAgaWYgKCFzaXplKQpAQCAtNDkzLDU3ICszODUsNDAgQEAgc3RhdGljIFBh
c3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFN0eWxlUmVzb2x2ZXI6
OlJ1bGVGZWF0dXJlPiYKICAgICByZXR1cm4gcnVsZVNldC5yZWxlYXNlKCk7CiB9CiAKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6dXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X2ZlYXR1cmVzLT5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOworfQorCitib29sIFN0eWxlUmVzb2x2
ZXI6OnVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmVhdHVyZXMt
PnVzZXNGaXJzdExpbmVSdWxlczsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VzQmVmb3Jl
QWZ0ZXJSdWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmVhdHVyZXMtPnVzZXNCZWZvcmVB
ZnRlclJ1bGVzOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiB7
Ci0gICAgbV9mZWF0dXJlcy5jbGVhcigpOworICAgIG1fZmVhdHVyZXMtPmNsZWFyKCk7CiAgICAg
Ly8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZp
cnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHls
ZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWpl
Y3QKICAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCi0gICAgbV9mZWF0dXJlcy5hZGQoZGVmYXVs
dFN0eWxlLT5mZWF0dXJlcygpKTsKLSAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5m
ZWF0dXJlcygpKTsKKyAgICBtX2ZlYXR1cmVzLT5hZGQoZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygp
KTsKKyAgICBtX2ZlYXR1cmVzLT5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JT
dHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZl
YXR1cmVzKCkpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNv
bHZlci0+Y29sbGVjdEZlYXR1cmVzVG8oKm1fZmVhdHVyZXMpOwogI2VuZGlmCiAgICAgaWYgKG1f
dXNlclN0eWxlKQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMo
KSk7CisgICAgICAgIG1fZmVhdHVyZXMtPmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CiAK
LSAgICBtX3NpYmxpbmdSdWxlU2V0ID0gbWFrZVJ1bGVTZXQobV9mZWF0dXJlcy5zaWJsaW5nUnVs
ZXMpOwotICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0ID0gbWFrZVJ1bGVTZXQobV9mZWF0
dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICBtX3NpYmxpbmdSdWxlU2V0ID0gbWFr
ZVJ1bGVTZXQobV9mZWF0dXJlcy0+c2libGluZ1J1bGVzKTsKKyAgICBtX3VuY29tbW9uQXR0cmli
dXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMtPnVuY29tbW9uQXR0cmlidXRlUnVs
ZXMpOwogfQogCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLWNvbnN0IENvbnRhaW5lck5vZGUq
IFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0
KQotewotICAgIEFTU0VSVChzaGVldCk7Ci0KLSAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6c3R5
bGVTY29wZWRFbmFibGVkKGRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5v
ZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBpZiAoIW93bmVyTm9kZSB8
fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnN0eWxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIVE1MU3R5bGVF
bGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3du
ZXJOb2RlKTsKLSAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCi0gICAgICAgIHJldHVy
biBzdHlsZUVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk/IHN0eWxlRWxlbWVudC0+c2hhZG93Um9v
dCgpIDogMDsKLQotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHN0eWxlRWxlbWVudC0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiAocGFyZW50LT5pc0VsZW1lbnROb2RlKCkgfHwgcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkg
PyBwYXJlbnQgOiAwOwotfQotCi1pbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6cnVsZVNl
dEZvclNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAotewotICAgIGlmICgh
c2NvcGUtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHls
ZXMuZmluZChzY29wZSk7Ci0gICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVu
ZCgpID8gaXQtPnNlY29uZC5nZXQoKSA6IDA7IAotfQotI2VuZGlmCi0KIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cmVzZXRBdXRob3JTdHlsZSgpCiB7CiAgICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOwpAQCAtNTY1LDEyICs0NDAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBl
bmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0
ID0gY3NzU2hlZXQtPmNvbnRlbnRzKCk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAg
ICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1pbmVTY29wZShjc3NTaGVldCk7
Ci0gICAgICAgIGlmIChzY29wZSkgewotICAgICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0
cik7Ci0gICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgIGlmIChjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSA9IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY3NzU2hlZXQpKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgICAgICAgICBtX3Njb3Bl
UmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOworICAgICAgICAg
ICAgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNTg1LDYyICs0NTgsNiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBW
ZWN0b3I8UmVmUAogICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIH0KIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2Rl
KiBwYXJlbnQpCi17Ci0gICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3Qg
YmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgotICAgIEFTU0VS
VCghbV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKLQotICAgIG1fc2NvcGVTdGFjay5z
aHJpbmsoMCk7Ci0gICAgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXggPSAwOwotICAgIGZvciAo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBwYXJlbnQ7IHNjb3BlOyBzY29wZSA9IHNjb3Bl
LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVT
ZXRGb3JTY29wZShzY29wZSk7Ci0gICAgICAgIGlmIChydWxlU2V0KQotICAgICAgICAgICAgbV9z
Y29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91bmRz
SW5kZXgsIHJ1bGVTZXQpKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAh
dG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAgICAgICAgICAgIC0t
YXV0aG9yU3R5bGVCb3VuZHNJbmRleDsKLSAgICB9Ci0gICAgbV9zY29wZVN0YWNrLnJldmVyc2Uo
KTsKLSAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBwYXJlbnQ7Ci0gICAgbV9zY29wZVN0YWNrUGFy
ZW50Qm91bmRzSW5kZXggPSAwOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZShj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJl
bnQpCi17Ci0gICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRoIHRoZSBzY29waW5nIGVs
ZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBp
ZiAobV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9z
Y29wZVN0YWNrUGFyZW50KTsKLSAgICAgICAgQVNTRVJUKG1fc2NvcGVTdGFjay5pc0VtcHR5KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEluIHNvbWUgd2Fja3kgY2FzZXMgZHVy
aW5nIHN0eWxlIHJlc29sdmUgd2UgbWF5IGdldCBpbnZva2VkIGZvciByYW5kb20gZWxlbWVudHMu
Ci0gICAgLy8gUmVjcmVhdGUgdGhlIHdob2xlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpbiBzdWNo
IGNhc2VzLgotICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lzdGVudChzY29wZVBhcmVudCkpIHsK
LSAgICAgICAgc2V0dXBTY29wZVN0YWNrKHNjb3BlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5h
cHBseUF1dGhvclN0eWxlcygpKQotICAgICAgICArK21fc2NvcGVTdGFja1BhcmVudEJvdW5kc0lu
ZGV4OwotICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFj
ay4KLSAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKLSAgICBp
ZiAocnVsZVNldCkKLSAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUo
c2NvcGUsIG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4LCBydWxlU2V0KSk7Ci0gICAgbV9z
Y29wZVN0YWNrUGFyZW50ID0gc2NvcGU7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wU2Nv
cGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgLy8gT25seSBib3RoZXIgdG8g
dXBkYXRlIHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KLSAg
ICBpZiAoc2NvcGVTdGFja0lzQ29uc2lzdGVudChzY29wZSkpIHsKLSAgICAgICAgaWYgKCFtX3Nj
b3BlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NvcGVTdGFjay5sYXN0KCkubV9zY29wZSA9PSBzY29w
ZSkKLSAgICAgICAgICAgIG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGlmIChz
Y29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9y
U3R5bGVzKCkpCi0gICAgICAgICAgICAtLW1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4Owot
ICAgICAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwot
ICAgIH0KLX0KLSNlbmRpZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50
KEVsZW1lbnQqIHBhcmVudCkKIHsKICAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CkBAIC02NTUsNyArNDcyLDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCiAg
ICAgICAgIG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CiAKICAgICAvLyBOb3RlOiBXZSBt
dXN0bid0IHNraXAgU2hhZG93Um9vdCBub2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgotICAgIHB1
c2hTY29wZShwYXJlbnQsIHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKTsKKyAgICBpZiAobV9z
Y29wZVJlc29sdmVyKQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPnB1c2gocGFyZW50LCBwYXJl
bnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFy
ZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCkBAIC02NjQsMTkgKzQ4MiwyMiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgIC8vIFBh
dXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCiAgICAgaWYgKG1fY2hlY2tl
ci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQogICAgICAgICBtX2NoZWNrZXIucG9w
UGFyZW50KCk7Ci0gICAgcG9wU2NvcGUocGFyZW50KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVy
KQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPnBvcChwYXJlbnQpOwogfQogCiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QpCiB7CiAgICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcHVzaFNjb3BlKHNo
YWRvd1Jvb3QsIHNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikK
KyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNoKHNoYWRvd1Jvb3QsIHNoYWRvd1Jvb3QtPmhv
c3QoKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdChjb25z
dCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0
KCkpOwotICAgIHBvcFNjb3BlKHNoYWRvd1Jvb3QpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIp
CisgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+cG9wKHNoYWRvd1Jvb3QpOwogfQogCiAvLyBUaGlz
IGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHls
ZXMKQEAgLTcxMiw0MSArNTMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoKQogICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3Zl
KHRvUmVtb3ZlW2ldKTsKIH0KIAotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkK
LSAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIHVzZXNCZWZvcmVBZnRlclJ1
bGVzKGZhbHNlKQotewotfQotCi1TdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkK
LXsKLX0KLSAgICAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmFkZChjb25zdCBTdHls
ZVJlc29sdmVyOjpGZWF0dXJlcyYgb3RoZXIpCi17Ci0gICAgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0luUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsK
LSAgICBlbmQgPSBvdGhlci5hdHRyc0luUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhdHRyc0luUnVsZXMuYWRkKCppdCk7Ci0gICAg
c2libGluZ1J1bGVzLmFwcGVuZChvdGhlci5zaWJsaW5nUnVsZXMpOwotICAgIHVuY29tbW9uQXR0
cmlidXRlUnVsZXMuYXBwZW5kKG90aGVyLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotICAgIHVz
ZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNGaXJzdExpbmVSdWxlcyB8fCBvdGhlci51c2VzRmlyc3RM
aW5lUnVsZXM7Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB1c2VzQmVmb3JlQWZ0ZXJSdWxl
cyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
OjpGZWF0dXJlczo6Y2xlYXIoKQotewotICAgIGlkc0luUnVsZXMuY2xlYXIoKTsKLSAgICBhdHRy
c0luUnVsZXMuY2xlYXIoKTsKLSAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKLSAgICB1bmNvbW1v
bkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7Ci0gICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gZmFsc2U7
Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjpGZWF0dXJlczo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mbykgY29uc3QKK3ZvaWQgU3R5bGVSdWxlRmVhdHVyZVNldDo6cmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBN
ZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5
VHlwZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1iZXIoaWRzSW5SdWxlcyk7CkBAIC05NTksMjYg
Kzc0NiwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMu
aXNFbXB0eSgpKQorICAgIGlmICghbV9zY29wZVJlc29sdmVyIHx8ICFtX3Njb3BlUmVzb2x2ZXIt
Pmhhc1Njb3BlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXRjaCBzY29wZWQgYXV0
aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxk
IGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lz
dGVudChtX2VsZW1lbnQpKQotICAgICAgICBzZXR1cFNjb3BlU3RhY2sobV9lbGVtZW50KTsKLSAg
ICBpZiAobV9zY29wZVN0YWNrLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+
ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+YXBwbHlB
dXRob3JTdHlsZXMoKTsKICAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwotICAgIHVuc2ln
bmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVTdGFjay5zaXplKCk7CisgICAgdW5zaWduZWQgc2NvcGVT
aXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU2NvcGVTdGFja0ZyYW1l
JiBmcmFtZSA9IG1fc2NvcGVTdGFja1tpXTsKKyAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29s
dmVyOjpTY29wZVN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1l
QXQoaSk7CiAgICAgICAgIGRvY3VtZW50U2NvcGUgPSBkb2N1bWVudFNjb3BlICYmICFmcmFtZS5t
X3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICBpZiAoZG9jdW1lbnRTY29wZSkgewog
ICAgICAgICAgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS5tX2F1dGhvclN0
eWxlQm91bmRzSW5kZXggIT0gbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXgpCisgICAgICAg
ICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+ZnJhbWVNYXRjaGVzU3R5bGVCb3VuZHMoZnJhbWUp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgICAgIApAQCAt
MTA4MywxMSArODY2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBTdHls
ZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRj
aFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICAg
ICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIG9wdGlvbnMuc2NvcGUpKSB7Ci0jZWxzZQot
ICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSkpIHsKLSNlbmRpZgogICAgICAgICAg
ICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcnVsZSBpcyBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50
IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAgICAgICAgICAgLy8gYSkgaXQncyBh
IFVBIHJ1bGUKICAgICAgICAgICAgIC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3Ig
cnVsZXMKQEAgLTEwOTUsOSArODc0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKICAgICAg
ICAgICAgIC8vIGQpIHRoZSBydWxlIGNvbnRhaW5zIHNoYWRvdy1JRCBwc2V1ZG8gZWxlbWVudHMK
ICAgICAgICAgICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVz
KCkKICAgICAgICAgICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1dGhvclN0eWxlcygpCi0j
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICAgICAgICAgICAgICAmJiAoIW9wdGlvbnMuc2Nv
cGUgfHwgb3B0aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKQotI2VuZGlmCiAg
ICAgICAgICAgICAgICAgJiYgIW1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSB7CiAKICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUs
IGZhbHNlKTsKQEAgLTEyNjEsNyArMTAzOCw3IEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0
ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAg
ICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwKS0+
YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlm
Ci0gICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHAt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLT5pZHNJblJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBwLT5yZW5kZXJTdHlsZSgpOwpAQCAtMTQzNCw3ICsxMjExLDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKICAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIp
ICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVz
Lmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkpKQorICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMtPmlkc0luUnVsZXMu
Y29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpAQCAtMTU0Myw3ICsx
MzIwLDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
ICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5n
IGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRF
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKG1fc3R5bGVk
RWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLT5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5
bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjQ3MiwzMzkgKzIyNDksNiBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0Q29udGVu
dHMqIHN0eWxlcwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rv
ck5hbWVzcGFjZSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKLSAgICBpZiAoc2Vs
ZWN0b3JOYW1lc3BhY2UgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JOYW1lc3BhY2UgIT0geGh0bWxO
YW1lc3BhY2VVUkkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Ok5vbmUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChzZWxlY3Rvci0+dGFnKCkgIT0gc3RhckF0b20pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0
b3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpD
bGFzczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAg
Q1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7
Ci0gICAgaWYgKCFzZWxlY3Rvckxpc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2Vs
ZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkg
ewotICAgICAgICBpZiAoc3ViU2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0
ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudC4KLSAgICByZXR1
cm4gYXR0cmlidXRlID09IHR5cGVBdHRyIHx8IGF0dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIC8vIEFsbG93IGNlcnRh
aW4gY29tbW9uIGF0dHJpYnV0ZXMgKHVzZWQgaW4gdGhlIGRlZmF1bHQgc3R5bGUpIGluIHRoZSBz
ZWxlY3RvcnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICAgICBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSAmJiAhaXNDb21tb25BdHRyaWJ1dGVTZWxlY3Rv
ckF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2Vs
ZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChz
ZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKLSAgICAg
ICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9
IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJp
YnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNl
bGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1S
dWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKLSAgICA6IG1fcnVs
ZShydWxlKQotICAgICwgbV9zZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgpCi0gICAgLCBtX3Bv
c2l0aW9uKHBvc2l0aW9uKQotICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3RvcigpLT5zcGVjaWZp
Y2l0eSgpKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxl
Y3RvcigpKSkKLSAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3RvcigpLT50YWdI
aXN0b3J5KCkpCi0gICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3Io
KSkpCi0gICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpj
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCi0gICAgLCBtX2xp
bmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVj
dG9yKCkpKQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkKLXsKLSAg
ICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3NpdGlvbik7Ci0gICAgQVNTRVJUKG1fc2VsZWN0b3JJ
bmRleCA9PSBzZWxlY3RvckluZGV4KTsKLSAgICBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVu
dGlmaWVySGFzaGVzKHNlbGVjdG9yKCksIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhh
c2hlcywgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7Ci19Ci0KLXZvaWQgUnVsZURhdGE6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17
Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDU1MpOwotfQotCi1SdWxlU2V0OjpSdWxlU2V0KCkKLSAgICA6IG1fcnVs
ZUNvdW50KDApCi0gICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKLXsKLX0KLQot
c3RhdGljIHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAoTWVtb3J5Q2xhc3NJbmZvKiBpbmZvLCBjb25z
dCBSdWxlU2V0OjpBdG9tUnVsZU1hcCYgYXRvbWljUnVsZU1hcCkKLXsKLSAgICBpbmZvLT5hZGRN
ZW1iZXIoYXRvbWljUnVsZU1hcCk7Ci0gICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9IGF0b21pY1J1bGVN
YXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZm8tPmFkZE1lbWJlcigqaXQtPnNlY29uZCk7Ci19
Ci0KLXZvaWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlP
YmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgcmVwb3J0QXRv
bVJ1bGVNYXAoJmluZm8sIG1faWRSdWxlcyk7Ci0gICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8s
IG1fY2xhc3NSdWxlcyk7Ci0gICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1fdGFnUnVsZXMp
OwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5rUHNldWRvQ2xhc3NSdWxlcyk7Ci0gICAgaW5m
by5hZGRNZW1iZXIobV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVy
KG1fdW5pdmVyc2FsUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGFnZVJ1bGVzKTsKLSAg
ICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzKTsKLX0KLQotdm9p
ZCBSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1lbW9yeUNsYXNzSW5m
byBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsK
LSAgICBpbmZvLmFkZE1lbWJlcihydWxlU2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNv
bGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVy
ZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICBmZWF0dXJlcy5pZHNJblJ1bGVzLmFk
ZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1
dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKHNlbGVjdG9y
LT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIHN3aXRjaCAoc2VsZWN0b3It
PnBzZXVkb1R5cGUoKSkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToK
LSAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3JlOgotICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0FmdGVyOgotICAgICAgICBmZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxl
cyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKFN0eWxl
UmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQot
ewotICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKLSAgICBmb3IgKENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBzZWxlY3Rv
ciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJv
bVNlbGVjdG9yKGZlYXR1cmVzLCBzZWxlY3Rvcik7Ci0gICAgICAgIAotICAgICAgICBpZiAoQ1NT
U2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsK
LSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0
LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5l
eHQoc3ViU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNpYmxpbmdTZWxl
Y3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+
aXNTaWJsaW5nU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQotICAgICAgICBmZWF0
dXJlcy5zaWJsaW5nUnVsZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVE
YXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpLCBydWxlRGF0YS5oYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKCkpKTsKLSAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVs
ZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVs
ZURhdGEuc2VsZWN0b3JJbmRleCgpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkpKTsKLX0KLSAgICAKLXZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQotewot
ICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0
YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKLSAg
ICBpZiAoIXJ1bGVzKQotICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURh
dGE+KTsKLSAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9pZCBSdWxlU2V0Ojph
ZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGluUmVnaW9uUnVsZSkKLXsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3Rvcklu
ZGV4LCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKLSAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVs
ZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwotCi0gICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gcnVsZURhdGEuc2VsZWN0b3IoKTsKLQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgewotICAgICAg
ICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2NsYXNzUnVsZXMsIHJ1
bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2VsZWN0b3ItPmlzVW5r
bm93blBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURhdGEpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNl
dWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpIHsKLSAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+
cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0g
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAgICBtX2xpbmtQc2V1ZG9DbGFzc1J1
bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgbV9mb2N1c1BzZXVkb0NsYXNz
UnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBz
ZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRv
bSkgewotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywg
cnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fdW5pdmVyc2FsUnVsZXMu
YXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1
bGVQYWdlKiBydWxlKQotewotICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKLX0KLQotdm9p
ZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotewotICAgIE93blB0cjxSdWxlU2V0PiByZWdp
b25SdWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgLy8gVGhlIHJlZ2lvbiBydWxlIHNl
dCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9uIGluc2lkZSB0aGUgcGFyZW50
IHJ1bGUgc2V0LgotICAgIC8vIE90aGVyd2lzZSwgdGhlIHJ1bGVzIGluc2lkZSByZWdpb24gYmxv
Y2sgbWlnaHQgYmUgaW5jb3JyZWN0bHkgcG9zaXRpb25lZCBiZWZvcmUgb3RoZXIgc2ltaWxhciBy
dWxlcyBmcm9tCi0gICAgLy8gdGhlIHN0eWxlc2hlZXQgdGhhdCBjb250YWlucyB0aGUgcmVnaW9u
IGJsb2NrLgotICAgIHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50ID0gbV9ydWxlQ291bnQ7Ci0K
LSAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0Ci0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9uUnVs
ZS0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxl
ID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5p
c1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0
YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotICAgIC8vIFVwZGF0ZSB0aGUgImdsb2Jh
bCIgcnVsZSBjb3VudCBzbyB0aGF0IHByb3BlciBvcmRlciBpcyBtYWludGFpbmVkCi0gICAgbV9y
dWxlQ291bnQgPSByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudDsKLQotICAgIG1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVnaW9uUnVsZS0+
c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkpKTsKLX0KLQot
dm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29s
dmVyLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKLXsKLSAgICBBU1NFUlQoc2hlZXQpOwot
ICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRS
dWxlcyA9IHNoZWV0LT5pbXBvcnRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGlt
cG9ydFJ1bGUgPSBpbXBvcnRSdWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGltcG9ydFJ1bGUt
PnN0eWxlU2hlZXQoKSAmJiAoIWltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5l
dmFsKGltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKQotICAgICAgICAgICAg
YWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29s
dmVyLCBzY29wZSk7Ci0gICAgfQotICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9
IHJlc29sdmVyICYmIHJlc29sdmVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHNoZWV0LT5iYXNlVVJMKCkpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJh
c2UqIHJ1bGUgPSBydWxlc1tpXS5nZXQoKTsKLQotICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1w
b3J0UnVsZSgpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAg
ICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1
bGUoKSkKLSAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2Uq
PihydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKLSAgICAg
ICAgICAgIFN0eWxlUnVsZU1lZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVN
ZWRpYSo+KHJ1bGUpOwotCi0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmll
cygpIHx8IG1lZGl1bS5ldmFsKG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgQG1l
ZGlhIHJ1bGUuCi0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiA+JiBjaGlsZFJ1bGVzID0gbWVkaWFSdWxlLT5jaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsK
LSAgICAgICAgICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxl
c1tqXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1
bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZVBhZ2UqPihjaGlsZFJ1bGUpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRS
dWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVz
IG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZh
Y2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihjaGlsZFJ1bGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFj
ZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5p
bnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNl
dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRvbid0
IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVu
dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5h
ZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxkUnVs
ZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAvLyBmb3IgcnVs
ZXMKLSAgICAgICAgICAgIH0gLy8gaWYgcnVsZXMKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5p
c0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhpcyBm
b250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdl
IGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0g
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxlKTsKLSAgICAgICAgICAgIHJlc29s
dmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAg
ICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiByZXNvbHZlcikgewot
ICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUg
cnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAg
IGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc29s
dmVyLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1
bGUpKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgZWxzZSBp
ZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNj
b3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0
YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0Zp
dEVuYWJsZWQpCi0gICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRk
U3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlKQotewot
ICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZv
dW5kOyBzZWxlY3RvckluZGV4ID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxl
Y3RvckFmdGVyKHNlbGVjdG9ySW5kZXgpKQotICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9y
SW5kZXgsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBpc0luUmVnaW9uUnVsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKLXsKLSAgICBSdWxlU2V0OjpBdG9t
UnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwotICAgIGZvciAoUnVsZVNldDo6QXRv
bVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpzaHJp
bmtUb0ZpdCgpCi17Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7Ci0gICAg
c2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fY2xhc3NSdWxlcyk7Ci0gICAgc2hyaW5rTWFwVmVjdG9y
c1RvRml0KG1fdGFnUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3NoYWRvd1Bz
ZXVkb0VsZW1lbnRSdWxlcyk7Ci0gICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0Zp
dCgpOwotICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7Ci0gICAgbV91
bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0
KCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIHRoaXMgaXMgbW9z
dGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJl
bmRlcnN0eWxlLi4uCiAKQEAgLTM1MDEsNyArMjk0NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0
b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhl
IGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAgICAgICBt
X2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLT5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxO
YW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+
aXNDb3VudGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRlclZhbHVl
ID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAg
RUxpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IE5vbmVMaXN0U3R5bGU7CkBAIC00ODM5LDcg
KzQyODMsNyBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVgogCiBib29sIFN0eWxlUmVzb2x2ZXI6
Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cm5hbWUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmNvbnRhaW5zKGF0dHJu
YW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1fZmVhdHVyZXMtPmF0dHJzSW5SdWxlcy5jb250YWlu
cyhhdHRybmFtZS5pbXBsKCkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29s
IHJlc3VsdCkKQEAgLTU3NjcsNiArNTIxMSw3IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5
T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworCiAgICAgaW5mby5h
ZGRNZW1iZXIobV9zdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZSk7CiAg
ICAgaW5mby5hZGRNZW1iZXIobV91c2VyU3R5bGUpOwpAQCAtNTc4NSwxMCArNTIzMCw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShT
VkcpCiAgICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRzKTsKICNlbmRpZgot
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaW5mby5hZGRNZW1iZXIobV9zY29wZWRBdXRo
b3JTdHlsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVTdGFjayk7Ci0jZW5kaWYKKyAg
ICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwogCiAgICAgLy8gRklYTUU6IG1vdmUg
dGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CiAgICAg
aW5mby5hZGRNZW1iZXIoZGVmYXVsdFN0eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CmluZGV4IGYzMmM3MTNiODFiMDhlMDA4ODI3NTlhOTcyMWNjMjYwNzdhMWIyMGEuLmNkMmVhZTcx
ZWRmM2UxZGFiMDcyYTNhNDA2Y2RlNGJlNjlmOWEwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApAQCAtNzMsMTEgKzczLDEzIEBAIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBTZXR0aW5n
czsKIGNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwogY2xhc3MgU3R5bGVCdWlsZGVyOworY2xhc3Mg
U3R5bGVTY29wZVJlc29sdmVyOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlS2V5ZnJh
bWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBj
bGFzcyBTdHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVGZWF0dXJlU2V0OwogY2xhc3MgU3R5bGVS
dWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lv
bjsKQEAgLTE3OCwxNCArMTgwLDYgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtl
eWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwogCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAg
ICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGVQYXJlbnQpOwotICAgIHZvaWQgcG9wU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUpOwotI2Vsc2UKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJO
b2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotICAgIHZvaWQgcG9wU2NvcGUoY29uc3Qg
Q29udGFpbmVyTm9kZSopIHsgfQotI2VuZGlmCi0KIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRo
b2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdp
dmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgogICAgIGVudW0gQ1NTUnVsZUZpbHRl
ciB7CkBAIC0yNDIsOSArMjM2LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja1JlZ2lvblN0
eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogCi0gICAgYm9vbCB1c2VzU2libGluZ1J1bGVz
KCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQot
ICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51
c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQorICAgIGJvb2wg
dXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0OworICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkg
Y29uc3Q7CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0OwogCiAgICAgc3Rh
dGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVu
ZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJh
dGlvbnMmIG91dE9wZXJhdGlvbnMpOwogICAgIApAQCAtMjc0LDMxICsyNjgsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAKLSAgICBzdHJ1Y3QgUnVsZUZl
YXR1cmUgewotICAgICAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAgICAgICAg
IDogcnVsZShydWxlKQotICAgICAgICAgICAgLCBzZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgp
Ci0gICAgICAgICAgICAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbikgCi0gICAgICAgIHsgCi0gICAgICAgIH0KLSAgICAgICAgU3R5bGVSdWxlKiBy
dWxlOwotICAgICAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4OwotICAgICAgICBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW47Ci0gICAgfTsKLSAgICBzdHJ1Y3QgRmVhdHVyZXMgewotICAg
ICAgICBGZWF0dXJlcygpOwotICAgICAgICB+RmVhdHVyZXMoKTsKLSAgICAgICAgdm9pZCBhZGQo
Y29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmKTsKLSAgICAgICAgdm9pZCBjbGVhcigpOwot
ICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsK
LSAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gaWRzSW5SdWxlczsKLSAgICAgICAg
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOwotICAgICAgICBWZWN0b3I8
UnVsZUZlYXR1cmU+IHNpYmxpbmdSdWxlczsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiB1
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOwotICAgICAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlczsK
LSAgICAgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKLSAgICB9OwotCiBwcml2YXRlOgog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0
IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2Vk
LiAtZHdoCiAgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUq
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwpAQCAtMzk1LDcgKzM2NCw3IEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAgT3duUHRyPFJ1bGVTZXQ+
IG1fdXNlclN0eWxlOwogCi0gICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICBPd25QdHI8U3R5
bGVSdWxlRmVhdHVyZVNldD4gbV9mZWF0dXJlczsKICAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJs
aW5nUnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQ7CiAKQEAgLTUwOCw2ICs0NzcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEhhc2hNYXA8U3R5
bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwOwogICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyU2V0OworICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNv
bHZlcjsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBib29sIG1faGFzUGVuZGluZ1No
YWRlcnM7CkBAIC01MTcsMzQgKzQ4Nyw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxGaWx0ZXJP
cGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRpbmdT
VkdEb2N1bWVudHM7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgY29u
c3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCopOwot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNl
dD4gPiBTY29wZWRSdWxlU2V0TWFwOwotCi0gICAgUnVsZVNldCogcnVsZVNldEZvclNjb3BlKGNv
bnN0IENvbnRhaW5lck5vZGUqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0dXBTY29wZVN0YWNrKGNv
bnN0IENvbnRhaW5lck5vZGUqKTsKLSAgICBib29sIHNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50
ID09IG1fc2NvcGVTdGFja1BhcmVudDsgfQotCi0gICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3Bl
ZEF1dGhvclN0eWxlczsKLSAgICAKLSAgICBzdHJ1Y3QgU2NvcGVTdGFja0ZyYW1lIHsKLSAgICAg
ICAgU2NvcGVTdGFja0ZyYW1lKCkgOiBtX3Njb3BlKDApLCBtX2F1dGhvclN0eWxlQm91bmRzSW5k
ZXgoMCksIG1fcnVsZVNldCgwKSB7IH0KLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlLCBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgUnVsZVNldCog
cnVsZVNldCkgOiBtX3Njb3BlKHNjb3BlKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KGF1dGhv
clN0eWxlQm91bmRzSW5kZXgpLCBtX3J1bGVTZXQocnVsZVNldCkgeyB9Ci0gICAgICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIG1fc2NvcGU7Ci0gICAgICAgIGludCBtX2F1dGhvclN0eWxlQm91bmRz
SW5kZXg7Ci0gICAgICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKLSAgICB9OwotICAgIC8vIFZlY3Rv
ciAodXNlZCBhcyBzdGFjaykgdGhhdCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChp
LmUuLCBlbGVtZW50cyB3aXRoIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQpCi0gICAgLy8gZW5jb3Vu
dGVyZWQgZHVyaW5nIHRyZWUgaXRlcmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgotICAgIFZl
Y3RvcjxTY29wZVN0YWNrRnJhbWU+IG1fc2NvcGVTdGFjazsKLSAgICAvLyBFbGVtZW50IGxhc3Qg
c2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRTdGFj
ay4KLSAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVu
dFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1f
cGFyZW50U3RhY2suCi0gICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZVN0YWNrUGFyZW50
OwotICAgIGludCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSNlbmRpZgotCiAgICAg
Q1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXJSdWxlcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Nzk0NDM3MzBjMGI4ZGEzNWRiMDE1NmEyZTZiNzFlYmE0MGNkMjcwMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3BwCkBAIC0wLDAgKzEs
MzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXJSdWxlcy5o
IgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgorI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5
bGVSdWxlSW1wb3J0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKKyNp
bmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL01l
bW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgUHJpdmF0
ZTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBSdWxlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFz
c0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNT
Uyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydEF0b21SdWxlTWFwKE1lbW9yeUNsYXNzSW5mbyog
aW5mbywgY29uc3QgUnVsZVNldDo6QXRvbVJ1bGVNYXAmIGF0b21pY1J1bGVNYXApCit7CisgICAg
aW5mby0+YWRkTWVtYmVyKGF0b21pY1J1bGVNYXApOworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBh
dG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT5z
ZWNvbmQpOworfQorCit2b2lkIFJ1bGVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAg
IHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2lkUnVsZXMpOworICAgIHJlcG9ydEF0b21SdWxl
TWFwKCZpbmZvLCBtX2NsYXNzUnVsZXMpOworICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBt
X3RhZ1J1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9zaGFkb3dQc2V1ZG9F
bGVtZW50UnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fbGlua1BzZXVkb0NsYXNzUnVsZXMp
OworICAgIGluZm8uYWRkTWVtYmVyKG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKKyAgICBpbmZv
LmFkZE1lbWJlcihtX3VuaXZlcnNhbFJ1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VS
dWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cyk7
Cit9CisKK3ZvaWQgUnVsZVNldDo6UnVsZVNldFNlbGVjdG9yUGFpcjo6cmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1v
cnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlw
ZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIocnVsZVNldCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSdWxlRmVhdHVyZVNldCYg
ZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQorICAgICAgICBmZWF0dXJlcy5pZHNJblJ1
bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworICAgIGlmIChzZWxlY3Rvci0+aXNB
dHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICBmZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKHNl
bGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIHN3aXRjaCAoc2Vs
ZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0
TGluZToKKyAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3JlOgorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgorICAgICAgICBmZWF0dXJlcy51c2VzQmVmb3JlQWZ0
ZXJSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRh
KFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEp
Cit7CisgICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOworICAgIGZvciAoQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsgc2VsZWN0b3I7IHNlbGVj
dG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBjb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChD
U1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkg
eworICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxp
c3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2libGluZ1Nl
bGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAgICAgICAg
ICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgY29sbGVj
dEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzdWJTZWxlY3Rvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9y
LT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3Ig
PSB0cnVlOworICAgIH0KKyAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpCisgICAgICAgIGZl
YXR1cmVzLnNpYmxpbmdSdWxlcy5hcHBlbmQoU3R5bGVSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxl
KCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbigpKSk7CisgICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvcigpKQorICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVu
ZChTdHlsZVJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRl
eCgpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsKK30KKyAgICAKK3Zv
aWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVN
YXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGlmICgha2V5KQorICAg
ICAgICByZXR1cm47CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAu
YWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAoIXJ1bGVzKQorICAg
ICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsKKyAgICBydWxlcy0+
YXBwZW5kKHJ1bGVEYXRhKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSog
cnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK3sK
KyAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsr
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5S
ZWdpb25SdWxlKTsKKyAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywg
cnVsZURhdGEpOworCisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0
b3IoKTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsK
KyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVz
LCBydWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2NsYXNzUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQo
KSkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURhdGEpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihz
ZWxlY3RvcikpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Fu
eUxpbms6CisgICAgICAgICAgICBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0
YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZvY3VzOgorICAgICAgICAgICAgbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVE
YXRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9j
YWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRU
b1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZURhdGEpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsK
K30KKwordm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiBydWxlKQorewor
ICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSZWdp
b25SdWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKQoreworICAgIE93blB0cjxSdWxlU2V0PiByZWdpb25SdWxlU2V0ID0gUnVsZVNl
dDo6Y3JlYXRlKCk7CisgICAgLy8gVGhlIHJlZ2lvbiBydWxlIHNldCBzaG91bGQgdGFrZSBpbnRv
IGFjY291bnQgdGhlIHBvc2l0aW9uIGluc2lkZSB0aGUgcGFyZW50IHJ1bGUgc2V0LgorICAgIC8v
IE90aGVyd2lzZSwgdGhlIHJ1bGVzIGluc2lkZSByZWdpb24gYmxvY2sgbWlnaHQgYmUgaW5jb3Jy
ZWN0bHkgcG9zaXRpb25lZCBiZWZvcmUgb3RoZXIgc2ltaWxhciBydWxlcyBmcm9tCisgICAgLy8g
dGhlIHN0eWxlc2hlZXQgdGhhdCBjb250YWlucyB0aGUgcmVnaW9uIGJsb2NrLgorICAgIHJlZ2lv
blJ1bGVTZXQtPm1fcnVsZUNvdW50ID0gbV9ydWxlQ291bnQ7CisKKyAgICAvLyBDb2xsZWN0IHRo
ZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5n
ZXQoKTsKKyAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAg
ICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwg
dHJ1ZSk7CisgICAgfQorICAgIC8vIFVwZGF0ZSB0aGUgImdsb2JhbCIgcnVsZSBjb3VudCBzbyB0
aGF0IHByb3BlciBvcmRlciBpcyBtYWludGFpbmVkCisgICAgbV9ydWxlQ291bnQgPSByZWdpb25S
dWxlU2V0LT5tX3J1bGVDb3VudDsKKworICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMu
YXBwZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmly
c3QoKSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkpKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworICAgIAorICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcyA9IHNoZWV0LT5pbXBv
cnRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBpbXBvcnRS
dWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAo
IWltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKGltcG9ydFJ1bGUtPm1l
ZGlhUXVlcmllcygpLCByZXNvbHZlcikpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQo
aW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29sdmVyLCBzY29wZSk7CisgICAg
fQorICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHJlc29sdmVyICYmIHJlc29s
dmVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNl
VVJMKCkpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxl
cyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1
bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tp
XS5nZXQoKTsKKworICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKKyAgICAg
ICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFz
Y29wZSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAg
IGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CisgICAgICAg
IGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIFN0eWxlUnVsZU1l
ZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOworCisg
ICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFs
KG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgQG1lZGlhIHJ1bGUuCisgICAgICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVz
ID0gbWVkaWFSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAg
ICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1
bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihjaGlsZFJ1bGUp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0ZvbnRGYWNlUnVs
ZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBm
b250IGZhY2UgdG8gb3VyIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJV
RyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBz
aGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlRm9udEZhY2UqPihjaGlsZFJ1bGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkUnVs
ZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVs
ZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKHN0
YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxkUnVsZSkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvLyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0g
Ly8gaWYgcnVsZXMKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYm
IHJlc29sdmVyKSB7CisgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNl
dC4KKyAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1m
YWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAg
ICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBj
b25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlRm9udEZhY2UqPihydWxlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3Io
KS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICByZXNvbHZlci0+
aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChy
dWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgLy8gRklY
TUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0
eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0
eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpKTsKKyAgICAgICAgfQor
I2lmIEVOQUJMRShDU1NfUkVHSU9OUykKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25S
dWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBX
ZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMg
Zm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgfQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAg
IHNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVs
ZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlKQoreworICAgIGZvciAoc2l6ZV90IHNl
bGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4
ID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9y
SW5kZXgpKQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6
QXRvbVJ1bGVNYXAmIG1hcCkKK3sKKyAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbWFwLmVuZCgpOworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+
c2hyaW5rVG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCit7CisgICAg
c2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1Rv
Rml0KG1fY2xhc3NSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fdGFnUnVsZXMp
OworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7
CisgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7CisgICAgbV91bml2ZXJzYWxSdWxlcy5zaHJp
bmtUb0ZpdCgpOworICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWVkNDQ5NWE3ZGY3
YWNjZWRiZDljY2Q5YmFlZWExN2NjYjhiNDNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXJSdWxlcy5oCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
dHlsZVJlc29sdmVyUnVsZXNfaAorI2RlZmluZSBTdHlsZVJlc29sdmVyUnVsZXNfaAorCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVk
ZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlRmVhdHVyZS5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU1NlbGVjdG9yOworY2xhc3MgU3R5bGVSZXNvbHZlcjsKK2NsYXNzIFN0eWxl
UnVsZTsKK2NsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CisKK2NsYXNzIFJ1bGVEYXRhIHsKK3B1
YmxpYzoKKyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1
bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNh
blVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSk7CisKKyAgICB1bnNpZ25l
ZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBTdHlsZVJ1bGUq
IHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KKyAgICBDU1NTZWxlY3Rvciogc2VsZWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX3J1bGUtPnNlbGVjdG9yTGlzdCgpLnNlbGVjdG9yQXQobV9z
ZWxlY3RvckluZGV4KTsgfQorICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdG9ySW5kZXg7IH0KKworICAgIGJvb2wgaGFzRmFzdENoZWNrYWJsZVNlbGVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3I7IH0KKyAgICBi
b29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNdWx0aXBhcnRT
ZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNl
ZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9CisgICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvcjsgfQorICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9z
cGVjaWZpY2l0eTsgfQorICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX2xpbmtNYXRjaFR5cGU7IH0KKyAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KKyAgICBib29s
IGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQorCisg
ICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBs
b3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4K
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7Cisg
ICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSBj
b25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXM7IH0KKwor
ICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCitw
cml2YXRlOgorICAgIFN0eWxlUnVsZSogbV9ydWxlOworICAgIHVuc2lnbmVkIG1fc2VsZWN0b3JJ
bmRleCA6IDEyOworICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5IGFyYml0cmFy
aWx5LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4KKyAgICAvLyBTb21l
IHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxhcmdlIHNpdGVz
LgorICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyMDsKKyAgICB1bnNpZ25lZCBtX3NwZWNpZmlj
aXR5IDogMjQ7CisgICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOwor
ICAgIHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1f
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAxOworICAg
IHVuc2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKKyAgICB1
bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0
Y2hNYXNrCisgICAgdW5zaWduZWQgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMTsKKyAg
ICB1bnNpZ25lZCBtX2lzSW5SZWdpb25SdWxlIDogMTsKKyAgICAvLyBVc2UgcGxhaW4gYXJyYXkg
aW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCisgICAgdW5z
aWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1JZGVudGlm
aWVyQ291bnRdOworfTsKKyAgICAKK3N0cnVjdCBTYW1lU2l6ZUFzUnVsZURhdGEgeworICAgIHZv
aWQqIGE7CisgICAgdW5zaWduZWQgYjsKKyAgICB1bnNpZ25lZCBjOworICAgIHVuc2lnbmVkIGRb
NF07Cit9OworCitDT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1l
U2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CisKK2NsYXNzIFJ1
bGVTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVTZXQpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0KKworICAgIHR5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0b21S
dWxlTWFwOworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMq
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiA9IDApOworCisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkUnVsZShTdHls
ZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7CisgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7CisgICAgdm9p
ZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0
IFJ1bGVEYXRhJik7CisgICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwor
ICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFi
bGVkID0gZmFsc2U7IH0KKworICAgIGNvbnN0IFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorCisgICAgY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faWRS
dWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGNsYXNzUnVsZXMo
QXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtl
eSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB0YWdSdWxlcyhBdG9taWNTdHJpbmdJ
bXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoQXRvbWljU3RyaW5n
SW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5nZXQo
a2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGxpbmtQc2V1ZG9DbGFzc1J1bGVz
KCkgY29uc3QgeyByZXR1cm4gJm1fbGlua1BzZXVkb0NsYXNzUnVsZXM7IH0KKyAgICBjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiBmb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAm
bV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB1
bml2ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9CisgICAg
Y29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4g
bV9wYWdlUnVsZXM7IH0KKworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OworCitwdWJsaWM6CisgICAgUnVsZVNldCgpOworCisgICAgQXRvbVJ1bGVN
YXAgbV9pZFJ1bGVzOworICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsKKyAgICBBdG9tUnVs
ZU1hcCBtX3RhZ1J1bGVzOworICAgIEF0b21SdWxlTWFwIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9saW5rUHNldWRvQ2xhc3NSdWxlczsKKyAgICBW
ZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOworICAgIFZlY3RvcjxSdWxl
RGF0YT4gbV91bml2ZXJzYWxSdWxlczsKKyAgICBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1fcGFn
ZVJ1bGVzOworICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OworICAgIGJvb2wgbV9hdXRvU2hyaW5r
VG9GaXRFbmFibGVkOworICAgIFN0eWxlUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKKworICAg
IHN0cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKKyAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFp
cihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNldD4gcnVsZVNldCkgOiBz
ZWxlY3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkgeyB9CisgICAgICAgIFJ1bGVTZXRT
ZWxlY3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMu
c2VsZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycykt
PnJ1bGVTZXQucmVsZWFzZSgpKSB7IH0KKyAgICAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
OworICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsKKyAgICB9OworCisgICAgVmVjdG9y
PFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7Cit9Owor
CituYW1lc3BhY2UgUHJpdmF0ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2lu
bGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JO
YW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7CisgICAgaWYgKHNlbGVj
dG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1sTmFt
ZXNwYWNlVVJJKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpOb25lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
c2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9y
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xh
c3M7Cit9CisKK2lubGluZSBib29sIHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgQ1NTU2VsZWN0
b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7CisgICAgaWYg
KCFzZWxlY3Rvckxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKENTU1NlbGVj
dG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1
YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAgICAg
ICBpZiAoc3ViU2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIGlz
Q29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlKQoreworICAgIC8vIFRoZXNlIGFyZSBleHBsaWNpdGx5IHRlc3RlZCBmb3IgZXF1YWxp
dHkgaW4gY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50LgorICAgIHJldHVybiBhdHRyaWJ1dGUgPT0g
dHlwZUF0dHIgfHwgYXR0cmlidXRlID09IHJlYWRvbmx5QXR0cjsKK30KKworaW5saW5lIGJvb2wg
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKK3sKKyAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKSkgeworICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1
c2VkIGluIHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhl
IGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVj
dG9yKCkgJiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0
dHJpYnV0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0
b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0g
Q1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
KSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCitpbmxpbmUgUnVsZURhdGE6OlJ1
bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQg
cG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCisgICAgOiBtX3J1bGUocnVsZSkKKyAg
ICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQorICAgICwgbV9wb3NpdGlvbihwb3Np
dGlvbikKKyAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSkKKyAg
ICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVja1NlbGVjdG9yICYm
IFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCisg
ICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+dGFnSGlzdG9yeSgpKQor
ICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChQ
cml2YXRlOjppc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKCkp
KQorICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6UHJp
dmF0ZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAg
ICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlw
ZShzZWxlY3RvcigpKSkKKyAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUp
Cit7CisgICAgQVNTRVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOworICAgIEFTU0VSVChtX3Nl
bGVjdG9ySW5kZXggPT0gc2VsZWN0b3JJbmRleCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpjb2xs
ZWN0SWRlbnRpZmllckhhc2hlcyhzZWxlY3RvcigpLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50
aWZpZXJIYXNoZXMsIG1heGltdW1JZGVudGlmaWVyQ291bnQpOworfQorCitpbmxpbmUgUnVsZVNl
dDo6UnVsZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgwKQorICAgICwgbV9hdXRvU2hyaW5rVG9G
aXRFbmFibGVkKHRydWUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
Ly9TdHlsZVJlc29sdmVyUnVsZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZUZlYXR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDRhNjllYzZhNGFkNjE3YTgyYzhiMzZjMWNjYjgzOTM5NTRmY2Q3NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgKQEAg
LTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFN0eWxlUnVsZUZlYXR1cmVfaAorI2RlZmluZSBTdHlsZVJ1
bGVGZWF0dXJlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTdHlsZVJ1bGU7CisKK3N0cnVjdCBTdHlsZVJ1bGVGZWF0dXJlIHsK
KyAgICBTdHlsZVJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICAgICA6IHJ1bGUocnVs
ZSkKKyAgICAgICAgLCBzZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgpCisgICAgICAgICwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKSAKKyAgICB7
IAorICAgIH0KKworICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICB1bnNpZ25lZCBzZWxlY3Rvcklu
ZGV4OworICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKK307CisKK3N0cnVjdCBT
dHlsZVJ1bGVGZWF0dXJlU2V0IHsKKyAgICBTdHlsZVJ1bGVGZWF0dXJlU2V0KCk7CisgICAgflN0
eWxlUnVsZUZlYXR1cmVTZXQoKTsKKyAgICB2b2lkIGFkZChjb25zdCBTdHlsZVJ1bGVGZWF0dXJl
U2V0Jik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyopIGNvbnN0OworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlk
c0luUnVsZXM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOwor
ICAgIFZlY3RvcjxTdHlsZVJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVsZXM7CisgICAgVmVjdG9yPFN0
eWxlUnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7CisgICAgYm9vbCB1c2VzRmly
c3RMaW5lUnVsZXM7CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKK307CisKK2lubGlu
ZSBTdHlsZVJ1bGVGZWF0dXJlU2V0OjpTdHlsZVJ1bGVGZWF0dXJlU2V0KCkKKyAgICA6IHVzZXNG
aXJzdExpbmVSdWxlcyhmYWxzZSkKKyAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQor
eworfQorCitpbmxpbmUgU3R5bGVSdWxlRmVhdHVyZVNldDo6flN0eWxlUnVsZUZlYXR1cmVTZXQo
KQoreworfQorICAgIAoraW5saW5lIHZvaWQgU3R5bGVSdWxlRmVhdHVyZVNldDo6YWRkKGNvbnN0
IFN0eWxlUnVsZUZlYXR1cmVTZXQmIG90aGVyKQoreworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7
CisgICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOworICAg
IHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKKyAgICB1bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICB1
c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0
TGluZVJ1bGVzOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVs
ZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7Cit9CisKK2lubGluZSB2b2lkIFN0eWxl
UnVsZUZlYXR1cmVTZXQ6OmNsZWFyKCkKK3sKKyAgICBpZHNJblJ1bGVzLmNsZWFyKCk7CisgICAg
YXR0cnNJblJ1bGVzLmNsZWFyKCk7CisgICAgc2libGluZ1J1bGVzLmNsZWFyKCk7CisgICAgdW5j
b21tb25BdHRyaWJ1dGVSdWxlcy5jbGVhcigpOworICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IGZh
bHNlOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmLy9TdHlsZVJ1bGVGZWF0dXJlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzljNTI3NzViMjI0NTU4MDc5
MTI0MjBhZDgxZjRkNmU4NjQzMWVlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCisKKyNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNvbnRl
eHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlclJ1bGVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5
SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVT
Y29wZVJlc29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIoKQorICAgIDogbV9zdGFja1BhcmVudCgw
KQorICAgICwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4KDApCit7Cit9CisKK1N0eWxlU2NvcGVS
ZXNvbHZlcjo6flN0eWxlU2NvcGVSZXNvbHZlcigpCit7Cit9CisKK2NvbnN0IENvbnRhaW5lck5v
ZGUqIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hl
ZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNo
ZWV0LT5vd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChkb2N1bWVu
dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPm93
bmVyTm9kZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1l
bnQoKSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVF
bGVtZW50LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+aXNJblNoYWRv
d1RyZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFkb3dSb290KCkgOiAwOworCisgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJl
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5v
ZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGlu
ZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUpIGNvbnN0Cit7CisgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQg
IT0gbV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisKK1J1
bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcihjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVz
dWx0ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVs
ZVNldDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdl
dCgpOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTdGFjayhjb25zdCBDb250
YWluZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBz
aG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgor
ICAgIEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKKworICAgIG1fc3RhY2suc2hy
aW5rKDApOworICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKKyAgICBmb3IgKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+
cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0
Rm9yKHNjb3BlKTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICBtX3N0YWNrLmFw
cGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIHJ1bGVT
ZXQpKTsKKyAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290
KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgICAgIC0tYXV0aG9yU3R5bGVC
b3VuZHNJbmRleDsKKyAgICB9CisKKyAgICBtX3N0YWNrLnJldmVyc2UoKTsKKyAgICBtX3N0YWNr
UGFyZW50ID0gcGFyZW50OworICAgIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA9IDA7Cit9CisK
K3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKK3sKKyAgICAvLyBTaG9ydGN1dDog
RG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5bGUgc2Nv
cGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlmIChtX2F1dGhvclN0eWxlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YWNrUGFyZW50KTsKKyAgICAgICAgQVNTRVJUKG1f
c3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluIHNv
bWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUgd2UgbWF5IGdldCBpbnZva2VkIGZv
ciByYW5kb20gZWxlbWVudHMuCisgICAgLy8gUmVjcmVhdGUgdGhlIHdob2xlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBpbiBzdWNoIGNhc2VzLgorICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQoc2Nv
cGVQYXJlbnQpKSB7CisgICAgICAgIHNldHVwU3RhY2soc2NvcGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290
KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgKyttX3N0YWNrUGFyZW50Qm91
bmRzSW5kZXg7CisgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhl
IHN0YWNrLgorICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKKyAgICBp
ZiAocnVsZVNldCkKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHNjb3Bl
LCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKKyAgICBtX3N0YWNrUGFyZW50
ID0gc2NvcGU7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwb3AoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpCit7CisgICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRoZSBzY29w
aW5nIGVsZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KKyAgICBpZiAoc3RhY2tJc0Nv
bnNpc3RlbnQoc2NvcGUpKSB7CisgICAgICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkgJiYgbV9z
dGFjay5sYXN0KCkubV9zY29wZSA9PSBzY29wZSkKKyAgICAgICAgICAgIG1fc3RhY2sucmVtb3Zl
TGFzdCgpOworICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jv
b3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgLS1tX3N0YWNrUGFy
ZW50Qm91bmRzSW5kZXg7CisgICAgICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JI
b3N0Tm9kZSgpOworICAgIH0KK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlc1RvKFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQoreworICAgIGZvciAoU2Nv
cGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAh
PSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT5z
ZWNvbmQtPmZlYXR1cmVzKCkpOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sK
KyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3Jl
TWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZXMpOwor
ICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNUWUxF
X1NDT1BFRCkKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVS
ZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM2N2Q4YTVhZDcwZDA2MTAwMTQyYjJlZDBiY2EzOTc0NDAyOTE0ZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTAs
MCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU3R5bGVTY29wZVJlc29sdmVyX2gKKyNkZWZpbmUgU3R5bGVTY29w
ZVJlc29sdmVyX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBSdWxlU2V0
OworY2xhc3MgU3R5bGVSdWxlRmVhdHVyZVNldDsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
CisKK2NsYXNzIFN0eWxlU2NvcGVSZXNvbHZlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNo
TWFwPGNvbnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0
TWFwOworCisgICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7CisgICAgICAgIFNjb3BlU3RhY2tG
cmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KDApLCBtX3J1bGVT
ZXQoMCkgeyB9CisgICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSwgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1bGVTZXQpCisgICAg
ICAgICAgICA6IG1fc2NvcGUoc2NvcGUpLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoYXV0aG9y
U3R5bGVCb3VuZHNJbmRleCksIG1fcnVsZVNldChydWxlU2V0KQorICAgICAgICB7IH0KKworICAg
ICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlOworICAgICAgICBpbnQgbV9hdXRob3JT
dHlsZUJvdW5kc0luZGV4OworICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7CisgICAgfTsKKwor
ICAgIFN0eWxlU2NvcGVSZXNvbHZlcigpOworICAgIH5TdHlsZVNjb3BlUmVzb2x2ZXIoKTsKKwor
ICAgIHN0YXRpYyBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZUZvcihjb25zdCBDU1NTdHlsZVNo
ZWV0Kik7CisKKyAgICB2b2lkIHB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KTsKKyAgICB2b2lkIHBvcChjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBoYXNTY29wZWQoKSBjb25zdCB7IHJldHVybiAhbV9h
dXRob3JTdHlsZXMuaXNFbXB0eSgpOyB9CisgICAgUnVsZVNldCogcnVsZVNldEZvcihjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkgY29uc3Q7CisgICAgUnVsZVNldCogZW5zdXJlUnVsZVNldEZv
cihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBlbnN1cmVTdGFja0NvbnNp
c3RlbmN5KENvbnRhaW5lck5vZGUqKTsKKyAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQorICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgc3Rh
Y2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N0YWNrLmF0KGluZGV4
KTsgfQorICAgIGJvb2wgZnJhbWVNYXRjaGVzU3R5bGVCb3VuZHMoY29uc3QgU2NvcGVTdGFja0Zy
YW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4
ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQorICAgIHZvaWQgY29sbGVjdEZlYXR1cmVz
VG8oU3R5bGVSdWxlRmVhdHVyZVNldCYpOworCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXR1cFN0YWNr
KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKKyAgICBib29sIHN0YWNrSXNDb25zaXN0ZW50KGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9
PSBtX3N0YWNrUGFyZW50OyB9CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXV0aG9yU3R5bGVz
OworCisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNj
b3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGls
ZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJl
c29sdXRpb24uCisgICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICAvLyBF
bGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGlu
Z0VsZW1lbnRTdGFjay4KKyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9z
Y29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3Rv
ckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFj
a1BhcmVudDsKKyAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworfTsKKworaW5saW5l
IGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKK3sKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRy
YXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBp
bmNvbnNpc3RlbnQpLgorICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAg
ICAgc2V0dXBTdGFjayhwYXJlbnQpOworICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7Cit9
CisKKyNlbHNlCitzdHJ1Y3QgU3R5bGVTY29wZVJlc29sdmVyIHsKKyAgICB2b2lkIHB1c2goY29u
c3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENvbnRhaW5lck5vZGUqKSB7ICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZvaWQgcG9wKGNvbnN0IENvbnRhaW5lck5vZGUqKSB7ICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorfTsKKworI2VuZGlmIC8vIEVOQUJMRShTVFlMRV9TQ09QRUQpCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmLy9TdHlsZVNjb3BlUmVzb2x2ZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166848</attachid>
            <date>2012-10-03 03:45:37 -0700</date>
            <delta_ts>2012-10-04 02:10:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-98244-20121003194449.patch</filename>
            <type>text/plain</type>
            <size>86352</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGRhMTRj
MDllNmE1Mzc2OTBmZGIzZGU4Zjk5MjFlYzVkM2VlMjFmMjcuLmI3ODlkMzc5Yzg0NGI4MDA2ZGQ5
MmYzNDkxMTdmYmExOGY5MTY0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDcyLDggKzEw
NzIsMTAgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNw
cAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcAogICAgIGNzcy9TdHlsZVJlc29s
dmVyLmNwcAorICAgIGNzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3BwCiAgICAgY3NzL1N0eWxlUnVs
ZS5jcHAKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAorICAgIGNzcy9TdHlsZVNjb3BlUmVz
b2x2ZXIuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXQuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAKICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCBlZmQ4NWI0MTVkYmIwNDMyY2YzZTE4MGNkNTRjYWFmMmVkYTFjZDQzLi45
OTUwNWQ3NWExMWNjNGM0MWZjMjQxMGU0YzA5NmQxODFjMTJlZTg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KQEAgLTI2MjgsMTAgKzI2MjgsMTUgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
dWxlLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlSW1wb3J0LmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKaW5kZXggYTRkODc1NDdhNGE5ZDBhNTA5ZTEzZjk0ZmIwZGU1M2IyZDhkZjE0
OC4uNDFkMWJlZGU0NDUzZDhlZjEwMzNhZmJhMmE1OTA4YzEwNzUyYzdhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC0zMjAsOCArMzIwLDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9TdHlsZVByb3BlcnR5
U2V0LmNwcCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIFwKICAgICBjc3Mv
U3R5bGVSZXNvbHZlci5jcHAgXAorICAgIGNzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3BwIFwKICAg
ICBjc3MvU3R5bGVSdWxlLmNwcCBcCiAgICAgY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAgXAorICAg
IGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldC5jcHAgXAog
ICAgIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldExpc3Qu
Y3BwIFwKQEAgLTE0ODUsOCArMTQ4NywxMSBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvU3R5bGVQ
cm9wZXJ0eVNldC5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIFwKICAgICBj
c3MvU3R5bGVSZXNvbHZlci5oIFwKKyAgICBjc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmggXAogICAg
IGNzcy9TdHlsZVJ1bGUuaCBcCisgICAgY3NzL1N0eWxlUnVsZUZlYXR1cmUuaCBcCiAgICAgY3Nz
L1N0eWxlUnVsZUltcG9ydC5oIFwKKyAgICBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmggXAogICAg
IGNzcy9TdHlsZVNoZWV0LmggXAogICAgIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuaCBcCiAgICAg
Y3NzL1N0eWxlU2hlZXRMaXN0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGExMjcxNjJiMDg4OGRm
OGQ0ZGZhMzg4MGEzNzQyMTVlNmIxZTExZTAuLjQ4NzExZmJiZDU3MDQwNzc1ODBmYmU2ZjI0OTIw
OTFjYzc4YjBhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI2MjYsMTAgKzI2MjYsMTUgQEAKICAg
ICAgICAgICAgICdjc3MvU3R5bGVQcm9wZXJ0eVNldC5oJywKICAgICAgICAgICAgICdjc3MvU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5
U2hvcnRoYW5kLmgnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwJywK
KyAgICAgICAgICAgICdjc3MvU3R5bGVTY29wZVJlc29sdmVyLmgnLAogICAgICAgICAgICAgJ2Nz
cy9TdHlsZVJlc29sdmVyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZXIuaCcs
CisgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZXJSdWxlcy5jcHAnLAorICAgICAgICAgICAg
J2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZS5j
cHAnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGUuaCcsCisgICAgICAgICAgICAnY3NzL1N0
eWxlUnVsZUZlYXR1cmUuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAn
LAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGVJbXBvcnQuaCcsCiAgICAgICAgICAgICAnY3Nz
L1N0eWxlU2hlZXQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJ
bk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDE5M2I3
YWZjNDhhZTAxODM1ZjQ5NWIwYWMzMGUwNWRlYWU0YzY3M2EuLmM2NTk4MGQwN2Y0NWE3MjJlMTA2
OWRkZWNjM2ViYzU2NjdiMDMwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NB
bGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAt
NzAsMyArNzAsNSBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuY3BwIgogI2luY2x1ZGUg
IlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuY3Bw
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXJSdWxlcy5jcHAiCisjaW5jbHVkZSAiU3R5bGVTY29w
ZVJlc29sdmVyLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBjYzNm
NWYzZGYyZmEzYzEyNDgyYTFiODI4ZmNjY2IzMjc5OTgyZDBjLi42ODY1NGY0ZWRiMmQ5MjdiZTQ4
MjRmMWQ1MWY5YWUyMWU2YzA1MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0xMTEsOCArMTExLDExIEBACiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFn
ZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXJSdWxlcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUZlYXR1cmUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJ
bXBvcnQuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHls
ZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKQEAgLTIwNSwxMTQgKzIwOCw2IEBAIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KHByb3AsIFByb3ApIFwKIGlmIChwcmltaXRpdmVWYWx1ZSkgXAogICAgIG1fc3R5bGUtPnNldCMj
UHJvcCgqcHJpbWl0aXZlVmFsdWUpOwogCi1jbGFzcyBSdWxlRGF0YSB7Ci1wdWJsaWM6Ci0gICAg
UnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9z
aXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgU3R5bGVSdWxlKiBydWxlKCkgY29u
c3QgeyByZXR1cm4gbV9ydWxlOyB9Ci0gICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9ydWxlLT5zZWxlY3Rvckxpc3QoKS5zZWxlY3RvckF0KG1fc2VsZWN0b3JJbmRl
eCk7IH0KLSAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3RvckluZGV4OyB9Ci0KLSAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9Ci0gICAgYm9vbCBoYXNNdWx0
aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0K
LSAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2Vk
T25SdWxlSGFzaDsgfQotICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0K
LSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7
IH0KLSAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0
Y2hUeXBlOyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9Ci0gICAgYm9vbCBpc0luUmVnaW9u
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KLQotICAgIC8vIFRyeSB0
byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxl
RGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwotICAgIGNvbnN0IHVu
c2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1
cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9Ci0KLSAgICB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBTdHlsZVJ1bGUqIG1fcnVsZTsKLSAgICB1bnNpZ25lZCBtX3NlbGVjdG9ySW5kZXggOiAxMjsK
LSAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2UgY2Fu
IHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCi0gICAgLy8gU29tZSBzaW1wbGUgdGVz
dGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4KLSAgICB1bnNp
Z25lZCBtX3Bvc2l0aW9uIDogMjA7Ci0gICAgdW5zaWduZWQgbV9zcGVjaWZpY2l0eSA6IDI0Owot
ICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25l
ZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9z
dFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKLSAgICB1bnNpZ25lZCBt
X2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9s
aW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzawotICAg
IHVuc2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7Ci0gICAgdW5zaWduZWQg
bV9pc0luUmVnaW9uUnVsZSA6IDE7Ci0gICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2Yg
YSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFkLgotICAgIHVuc2lnbmVkIG1fZGVz
Y2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsK
LX07Ci0gICAgCi1zdHJ1Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKLSAgICB2b2lkKiBhOwotICAg
IHVuc2lnbmVkIGI7Ci0gICAgdW5zaWduZWQgYzsKLSAgICB1bnNpZ25lZCBkWzRdOwotfTsKLQot
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVE
YXRhKSwgUnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwpOwotCi1jbGFzcyBSdWxlU2V0IHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWlj
U3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKLQot
ICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVk
aWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9k
ZSogPSAwKTsKLQotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBp
c0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwot
ICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwotICAgIHZvaWQgYWRkVG9SdWxl
U2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYp
OwotICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4pOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICB2b2lkIGRp
c2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNl
OyB9Ci0KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBp
ZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdl
dChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogY2xhc3NSdWxlcyhBdG9taWNT
dHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQot
ICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBr
ZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmdldChrZXkpOyB9
Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlua1BzZXVkb0NsYXNzUnVsZXMoKSBjb25z
dCB7IHJldHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxS
dWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2ZvY3Vz
UHNldWRvQ2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHVuaXZlcnNh
bFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2FsUnVsZXM7IH0KLSAgICBjb25zdCBW
ZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VS
dWxlczsgfQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikg
Y29uc3Q7Ci0KLXB1YmxpYzoKLSAgICBSdWxlU2V0KCk7Ci0KLSAgICBBdG9tUnVsZU1hcCBtX2lk
UnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwotICAgIEF0b21SdWxlTWFwIG1f
dGFnUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXM7Ci0g
ICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOwotICAgIFZlY3RvcjxS
dWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBt
X3VuaXZlcnNhbFJ1bGVzOwotICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7
Ci0gICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7Ci0gICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVu
YWJsZWQ7Ci0gICAgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMgbV9mZWF0dXJlczsKLQotICAgIHN0
cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKLSAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihD
U1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNldD4gcnVsZVNldCkgOiBzZWxl
Y3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkgeyB9Ci0gICAgICAgIFJ1bGVTZXRTZWxl
Y3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2Vs
ZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1
bGVTZXQucmVsZWFzZSgpKSB7IH0KLSAgICAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KLSAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwot
ICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsKLSAgICB9OwotCi0gICAgVmVjdG9yPFJ1
bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7Ci19OwotCiBz
dGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWly
a3NTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAgLTM2OSw3ICsy
NjQsOCBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
CiB9CiAKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZh
bHNlKQorICAgIDogbV9mZWF0dXJlcyhhZG9wdFB0cihuZXcgU3R5bGVSdWxlRmVhdHVyZVNldCgp
KSkKKyAgICAsIG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQogICAgICwgbV9iYWNrZ3JvdW5kRGF0
YShCYWNrZ3JvdW5kRmlsbExheWVyKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRk
aXRpb25zU2luY2VMYXN0U3dlZXAoMCkKICAgICAsIG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3Vt
ZW50LT5pblF1aXJrc01vZGUoKSkKQEAgLTM5MywxMCArMjg5LDYgQEAgU3R5bGVSZXNvbHZlcjo6
U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRl
cnMoZmFsc2UpCiAjZW5kaWYKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9zY29w
ZVN0YWNrUGFyZW50KDApCi0gICAgLCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleCgwKQot
I2VuZGlmCiAgICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTQ4MSw3ICszNzMsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29u
c3QgVmVjdG9yPFJlZgogICAgIH0KIH0KIAotc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFr
ZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlPiYgcnVsZXMp
CitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5
bGVSdWxlRmVhdHVyZT4mIHJ1bGVzKQogewogICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgp
OwogICAgIGlmICghc2l6ZSkKQEAgLTQ5Myw1NyArMzg1LDQwIEBAIHN0YXRpYyBQYXNzT3duUHRy
PFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxlRmVh
dHVyZT4mCiAgICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOwogfQogCitib29sIFN0eWxlUmVz
b2x2ZXI6OnVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9mZWF0dXJl
cy0+c2libGluZ1J1bGVzLmlzRW1wdHkoKTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjp1c2Vz
Rmlyc3RMaW5lUnVsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZlYXR1cmVzLT51c2VzRmly
c3RMaW5lUnVsZXM7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6dXNlc0JlZm9yZUFmdGVyUnVs
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZlYXR1cmVzLT51c2VzQmVmb3JlQWZ0ZXJSdWxl
czsKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogewotICAgIG1f
ZmVhdHVyZXMuY2xlYXIoKTsKKyAgICBtX2ZlYXR1cmVzLT5jbGVhcigpOwogICAgIC8vIENvbGxl
Y3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGls
ZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMu
IFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CiAgICAg
Ly8gc2hhcmluZyBjYW5kaWRhdGVzLgotICAgIG1fZmVhdHVyZXMuYWRkKGRlZmF1bHRTdHlsZS0+
ZmVhdHVyZXMoKSk7Ci0gICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMo
KSk7CisgICAgbV9mZWF0dXJlcy0+YWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7CisgICAg
bV9mZWF0dXJlcy0+YWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCi0gICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1f
c2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVu
ZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygp
KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmNv
bGxlY3RGZWF0dXJlc1RvKCptX2ZlYXR1cmVzKTsKICNlbmRpZgogICAgIGlmIChtX3VzZXJTdHls
ZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworICAg
ICAgICBtX2ZlYXR1cmVzLT5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwogCi0gICAgbV9z
aWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKLSAg
ICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5j
b21tb25BdHRyaWJ1dGVSdWxlcyk7CisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0
KG1fZmVhdHVyZXMtPnNpYmxpbmdSdWxlcyk7CisgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLT51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKIH0K
IAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJl
c29sdmVyOjpkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKLXsKLSAg
ICBBU1NFUlQoc2hlZXQpOwotCi0gICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVk
RW5hYmxlZChkb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25l
ck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVy
Tm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdHlsZVRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCog
c3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7
Ci0gICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gc3R5bGVF
bGVtZW50LT5pc0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7
Ci0KLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUo
KTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKHBh
cmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50
IDogMDsKLX0KLQotaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29w
ZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKLXsKLSAgICBpZiAoIXNjb3BlLT5o
YXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBTY29wZWRS
dWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQo
c2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0
LT5zZWNvbmQuZ2V0KCkgOiAwOyAKLX0KLSNlbmRpZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJl
c2V0QXV0aG9yU3R5bGUoKQogewogICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUo
KTsKQEAgLTU2NSwxMiArNDQwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1No
ZWV0LT5jb250ZW50cygpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQpOwotICAgICAg
ICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBh
ZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21l
ZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgeworICAgICAgICAg
ICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9zY29wZVJlc29sdmVy
ID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZlcigpKTsKKyAgICAgICAgICAgIG1fc2Nv
cGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAjZW5kaWYKQEAgLTU4NSw2MiArNDU4LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlAKICAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CiB9CiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotdm9pZCBT
dHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50
KQotewotICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQg
aWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBBU1NFUlQoIW1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDAp
OwotICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKLSAgICBmb3IgKGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50
T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2Nv
cGUoc2NvcGUpOwotICAgICAgICBpZiAocnVsZVNldCkKLSAgICAgICAgICAgIG1fc2NvcGVTdGFj
ay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBy
dWxlU2V0KSk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93
Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICAgICAtLWF1dGhvclN0
eWxlQm91bmRzSW5kZXg7Ci0gICAgfQotICAgIG1fc2NvcGVTdGFjay5yZXZlcnNlKCk7Ci0gICAg
bV9zY29wZVN0YWNrUGFyZW50ID0gcGFyZW50OwotICAgIG1fc2NvcGVTdGFja1BhcmVudEJvdW5k
c0luZGV4ID0gMDsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoU2NvcGUoY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQotewot
ICAgIC8vIFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0
YWNrIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgaWYgKG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fc2NvcGVTdGFj
a1BhcmVudCk7Ci0gICAgICAgIEFTU0VSVChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHls
ZSByZXNvbHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgotICAgIC8v
IFJlY3JlYXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4K
LSAgICBpZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7Ci0gICAgICAg
IHNldHVwU2NvcGVTdGFjayhzY29wZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRo
b3JTdHlsZXMoKSkKLSAgICAgICAgKyttX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAg
ICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0aGUgc3RhY2suCi0gICAg
UnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShzY29wZSk7Ci0gICAgaWYgKHJ1bGVT
ZXQpCi0gICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBt
X3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgIG1fc2NvcGVTdGFj
a1BhcmVudCA9IHNjb3BlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFNjb3BlKGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlKQotewotICAgIC8vIE9ubHkgYm90aGVyIHRvIHVwZGF0ZSB0
aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3RlbnQuCi0gICAgaWYgKHNj
b3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7Ci0gICAgICAgIGlmICghbV9zY29wZVN0YWNr
LmlzRW1wdHkoKSAmJiBtX3Njb3BlU3RhY2subGFzdCgpLm1fc2NvcGUgPT0gc2NvcGUpCi0gICAg
ICAgICAgICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoc2NvcGUtPmlz
U2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygp
KQotICAgICAgICAgICAgLS1tX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAgICAgICAg
bV9zY29wZVN0YWNrUGFyZW50ID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICB9Ci19
Ci0jZW5kaWYKLQogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50
KiBwYXJlbnQpCiB7CiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50c1BhcmVudCA9IHBh
cmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpOwpAQCAtNjU1LDcgKzQ3Miw4IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgICAgICBt
X2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOwogCiAgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBz
a2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KLSAgICBwdXNoU2NvcGUo
cGFyZW50LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNv
bHZlcikKKyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNoKHBhcmVudCwgcGFyZW50LT5wYXJl
bnRPckhvc3ROb2RlKCkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1l
bnQoRWxlbWVudCogcGFyZW50KQpAQCAtNjY0LDE5ICs0ODIsMjIgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICAvLyBQYXVzZSBtYWlu
dGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgogICAgIGlmIChtX2NoZWNrZXIucGFyZW50
U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKICAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgp
OwotICAgIHBvcFNjb3BlKHBhcmVudCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKKyAgICAg
ICAgbV9zY29wZVJlc29sdmVyLT5wb3AocGFyZW50KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjpwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewog
ICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIHB1c2hTY29wZShzaGFkb3dSb290
LCBzaGFkb3dSb290LT5ob3N0KCkpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAg
IG1fc2NvcGVSZXNvbHZlci0+cHVzaChzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkpOwog
fQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93
Um9vdCogc2hhZG93Um9vdCkKIHsKICAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAg
ICBwb3BTY29wZShzaGFkb3dSb290KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAg
ICBtX3Njb3BlUmVzb2x2ZXItPnBvcChzaGFkb3dSb290KTsKIH0KIAogLy8gVGhpcyBpcyBhIHNp
bXBsaWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC03
MTIsNDEgKzUzMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGll
c0NhY2hlKCkKICAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZSh0b1JlbW92
ZVtpXSk7CiB9CiAKLVN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpGZWF0dXJlcygpCi0gICAgOiB1
c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxz
ZSkKLXsKLX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6On5GZWF0dXJlcygpCi17Ci19Ci0g
ICAgCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3QgU3R5bGVSZXNvbHZl
cjo6RmVhdHVyZXMmIG90aGVyKQotewotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+Ojpp
dGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7Ci0gICAgZW5k
ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOwotICAgIHNpYmxpbmdS
dWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKLSAgICB1c2VzRmlyc3RM
aW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVz
OwotICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgb3Ro
ZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVy
ZXM6OmNsZWFyKCkKLXsKLSAgICBpZHNJblJ1bGVzLmNsZWFyKCk7Ci0gICAgYXR0cnNJblJ1bGVz
LmNsZWFyKCk7Ci0gICAgc2libGluZ1J1bGVzLmNsZWFyKCk7Ci0gICAgdW5jb21tb25BdHRyaWJ1
dGVSdWxlcy5jbGVhcigpOwotICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IGZhbHNlOwotICAgIHVz
ZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVh
dHVyZXM6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0Cit2b2lkIFN0eWxlUnVsZUZlYXR1cmVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
U1MpOwogICAgIGluZm8uYWRkTWVtYmVyKGlkc0luUnVsZXMpOwpAQCAtOTU5LDI2ICs3NDYsMjIg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHko
KSkKKyAgICBpZiAoIW1fc2NvcGVSZXNvbHZlciB8fCAhbV9zY29wZVJlc29sdmVyLT5oYXNTY29w
ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxl
cyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBp
dCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQobV9l
bGVtZW50KSkKLSAgICAgICAgc2V0dXBTY29wZVN0YWNrKG1fZWxlbWVudCk7Ci0gICAgaWYgKG1f
c2NvcGVTdGFjay5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0
YWNrQ29uc2lzdGVuY3kobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBh
cHBseUF1dGhvclN0eWxlcyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5
bGVzKCk7CiAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKLSAgICB1bnNpZ25lZCBzY29w
ZVNpemUgPSBtX3Njb3BlU3RhY2suc2l6ZSgpOworICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1f
c2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUg
PSBtX3Njb3BlU3RhY2tbaV07CisgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U2Nv
cGVTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwog
ICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUubV9zY29wZS0+
aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsKICAgICAgICAg
ICAgIGlmICghYXBwbHlBdXRob3JTdHlsZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUubV9hdXRob3JTdHlsZUJvdW5k
c0luZGV4ICE9IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KQorICAgICAgICAgICAgaWYg
KCFtX3Njb3BlUmVzb2x2ZXItPmZyYW1lTWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAgICAKQEAgLTEwODMsMTEg
Kzg2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAgICAgU3R5bGVSdWxlKiBy
dWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRv
Y3VtZW50KCksIHJ1bGUpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgICAgIGlmIChj
aGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgewotI2Vsc2UKLSAgICAgICAg
aWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0jZW5kaWYKICAgICAgICAgICAgIC8vIENo
ZWNrIHdoZXRoZXIgdGhlIHJ1bGUgaXMgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVlIHNj
b3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAgICAgICAgIC8vIGEpIGl0J3MgYSBVQSBydWxl
CiAgICAgICAgICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCkBA
IC0xMDk1LDkgKzg3NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAgICAgICAgICAgICAv
LyBkKSB0aGUgcnVsZSBjb250YWlucyBzaGFkb3ctSUQgcHNldWRvIGVsZW1lbnRzCiAgICAgICAg
ICAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAgICAg
ICAgICAgICAgICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQotI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCiAgICAgICAgICAgICAgICAgJiYgKCFvcHRpb25zLnNjb3BlIHx8IG9w
dGlvbnMuc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkKLSNlbmRpZgogICAgICAgICAg
ICAgICAgICYmICFtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgewogCiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7
CkBAIC0xMjYxLDcgKzEwMzgsNyBAQCBOb2RlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5M
aXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bgogICAgIGlmIChw
LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVk
U01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIGlm
IChwLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJl
cy0+aWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+
cmVuZGVyU3R5bGUoKTsKQEAgLTE0MzQsNyArMTIxMSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAg
ICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyKSAhPSBtX2Vs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1
bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAg
ICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLT5pZHNJblJ1bGVzLmNvbnRhaW5z
KGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKQEAgLTE1NDMsNyArMTMyMCw3IEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAg
IHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5
IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
Pmhhc0lEKCkgJiYgbV9mZWF0dXJlcy0+aWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI0NzIsMzM5ICsyMjQ5LDYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpk
ZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldENvbnRlbnRzKiBzdHls
ZXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGlubGluZSBi
b29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JOYW1lc3Bh
Y2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7Ci0gICAgaWYgKHNlbGVjdG9yTmFt
ZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1sTmFtZXNwYWNl
VVJJKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpOb25lKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc2VsZWN0
b3ItPnRhZygpICE9IHN0YXJBdG9tKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNl
bGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIENTU1NlbGVj
dG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOwotICAgIGlm
ICghc2VsZWN0b3JMaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxl
Y3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBz
dWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAg
ICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZv
ciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQuCi0gICAgcmV0dXJuIGF0dHJp
YnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0gcmVhZG9ubHlBdHRyOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0g
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1v
biBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3Jz
IHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAgICAgaWYgKHNlbGVjdG9yLT5p
c0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1
dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNl
bGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3It
PnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBz
ZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rv
ci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxl
Y3RvcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxp
c3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUnVsZURhdGE6
OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWdu
ZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCi0gICAgOiBtX3J1bGUocnVsZSkK
LSAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQotICAgICwgbV9wb3NpdGlvbihw
b3NpdGlvbikKLSAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSkK
LSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
ICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkp
Ci0gICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+dGFnSGlzdG9yeSgp
KQotICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKCkpKQotICAg
ICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6Y29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQotICAgICwgbV9saW5rTWF0Y2hU
eXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3RvcigpKSkK
LSAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKQotICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUpCi17Ci0gICAgQVNTRVJU
KG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwotICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXggPT0g
c2VsZWN0b3JJbmRleCk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRlbnRpZmllckhh
c2hlcyhzZWxlY3RvcigpLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMsIG1h
eGltdW1JZGVudGlmaWVyQ291bnQpOwotfQotCi12b2lkIFJ1bGVEYXRhOjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1l
bW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q1NTKTsKLX0KLQotUnVsZVNldDo6UnVsZVNldCgpCi0gICAgOiBtX3J1bGVDb3VudCgw
KQotICAgICwgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCi17Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlcG9ydEF0b21SdWxlTWFwKE1lbW9yeUNsYXNzSW5mbyogaW5mbywgY29uc3QgUnVsZVNl
dDo6QXRvbVJ1bGVNYXAmIGF0b21pY1J1bGVNYXApCi17Ci0gICAgaW5mby0+YWRkTWVtYmVyKGF0
b21pY1J1bGVNYXApOwotICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgp
OyArK2l0KQotICAgICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT5zZWNvbmQpOwotfQotCi12b2lk
IFJ1bGVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5m
bywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIHJlcG9ydEF0b21SdWxlTWFw
KCZpbmZvLCBtX2lkUnVsZXMpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2NsYXNz
UnVsZXMpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX3RhZ1J1bGVzKTsKLSAgICBy
ZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwotICAg
IGluZm8uYWRkTWVtYmVyKG1fbGlua1BzZXVkb0NsYXNzUnVsZXMpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3VuaXZl
cnNhbFJ1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VSdWxlcyk7Ci0gICAgaW5mby5h
ZGRNZW1iZXIobV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cyk7Ci19Ci0KLXZvaWQgUnVsZVNl
dDo6UnVsZVNldFNlbGVjdG9yUGFpcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5m
byogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyht
ZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5m
by5hZGRNZW1iZXIocnVsZVNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVh
dHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0
b3IoKSkKLSAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmli
dXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9U
eXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAg
IGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BZnRlcjoKLSAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJlc29sdmVy
OjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBi
b29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciog
c2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxl
Y3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihmZWF0dXJlcywgc2VsZWN0b3IpOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1NlbGVjdG9y
TGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAg
ICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3Qo
KTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNl
bGVjdG9yKSkgewotICAgICAgICAgICAgICAgIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYg
c2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5k
U2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGlu
Z1NlbGVjdG9yKCkpCi0gICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0g
ICAgfQotICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikKLSAgICAgICAgZmVhdHVyZXMuc2li
bGluZ1J1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxl
KCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbigpKSk7Ci0gICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVu
ZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNl
bGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Ci19
Ci0gICAgCi12b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXks
IEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBpZiAo
IWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1
bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKCFy
dWxlcykKLSAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0g
ICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZShT
dHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lv
blJ1bGUpCi17Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9y
dWxlQ291bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGluUmVnaW9uUnVsZSk7Ci0gICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1f
ZmVhdHVyZXMsIHJ1bGVEYXRhKTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVE
YXRhLnNlbGVjdG9yKCk7Ci0KLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OklkKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCks
IG1faWRSdWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKLSAgICAgICAgYWRkVG9S
dWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1
ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmlt
cGwoKSwgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNz
U2VsZWN0b3Ioc2VsZWN0b3IpKSB7Ci0gICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5
cGUoKSkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9BbnlMaW5rOgotICAgICAgICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBl
bmQocnVsZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFw
cGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3It
PnRhZygpLmxvY2FsTmFtZSgpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKLSAg
ICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRh
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChy
dWxlRGF0YSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSog
cnVsZSkKLXsKLSAgICBtX3BhZ2VSdWxlcy5hcHBlbmQocnVsZSk7Ci19Ci0KLXZvaWQgUnVsZVNl
dDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbikKLXsKLSAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNl
dCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxk
IHRha2UgaW50byBhY2NvdW50IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNl
dC4KLSAgICAvLyBPdGhlcndpc2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0
IGJlIGluY29ycmVjdGx5IHBvc2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJv
bQotICAgIC8vIHRoZSBzdHlsZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4K
LSAgICByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OwotCi0gICAgLy8g
Q29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAotICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxk
UnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxk
UnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1
bGUoKSkKLSAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIHRydWUsIHRydWUpOwotICAgIH0KLSAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUg
Y291bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAotICAgIG1fcnVsZUNvdW50
ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQ7Ci0KLSAgICBtX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9y
TGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQucmVsZWFzZSgpKSk7Ci19Ci0KLXZvaWQgUnVs
ZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgQVNTRVJUKHNoZWV0KTsKLSAgICAKLSAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBz
aGVldC0+aW1wb3J0UnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0
UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxl
ID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNo
ZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBv
cnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKLSAgICAgICAgICAgIGFkZFJ1bGVz
RnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2Nv
cGUpOwotICAgIH0KLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZl
ciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChz
aGVldC0+YmFzZVVSTCgpKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gPiYgcnVsZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBydWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxl
ID0gcnVsZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUo
KSk7Ci0gICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5
bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCAhc2NvcGUpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCi0g
ICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkp
OwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7Ci0gICAgICAgICAgICBT
dHlsZVJ1bGVNZWRpYSogbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihy
dWxlKTsKLQotICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBt
ZWRpdW0uZXZhbChtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJhdmVyc2UgY2hpbGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxl
LgotICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYg
Y2hpbGRSdWxlcyA9IG1lZGlhUnVsZS0+Y2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
Kj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4o
Y2hpbGRSdWxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNG
b250RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNjb3BlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9
IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZv
bnRGYWNlUnVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0
ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaGlsZFJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtl
eWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJh
bWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCi0gICAg
ICAgICAgICB9IC8vIGlmIHJ1bGVzCi0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFj
ZVJ1bGUoKSAmJiByZXNvbHZlcikgewotICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNl
IHRvIG91ciBzZXQuCi0gICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBh
ZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgotICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19j
YXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+Zm9u
dFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAg
cmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FIChCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9m
IHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2Nv
cGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXNvbHZlci0+YWRk
S2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7Ci0g
ICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgICAgIGVsc2UgaWYgKHJ1bGUt
PmlzUmVnaW9uUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSAoQlVH
IDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5
bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVk
KQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVs
ZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBj
YW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2Vs
ZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRl
cihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJl
Z2lvblJ1bGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0
KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCi17Ci0gICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKLSAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPnNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQo
KQotewotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOwotICAgIHNocmlua01h
cFZlY3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdCht
X3RhZ1J1bGVzKTsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMpOwotICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fdW5pdmVyc2Fs
UnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jp
bmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHls
ZS4uLgogCkBAIC0zNTAxLDcgKzI5NDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFs
dWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1
dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKLSAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJl
cy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9mZWF0dXJlcy0+YXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRl
cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRl
bnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5
bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwpAQCAtNDgzOSw3ICs0MjgzLDcg
QEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKIAogYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxl
Y3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcgJmF0dHJuYW1lKSBjb25zdAogewot
ICAgIHJldHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5jb250YWlucyhhdHRybmFtZS5pbXBs
KCkpOworICAgIHJldHVybiBtX2ZlYXR1cmVzLT5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5h
bWUuaW1wbCgpKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQp
CkBAIC01NzY3LDYgKzUyMTEsNyBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHls
ZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdElu
Zm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKwogICAgIGluZm8uYWRkTWVtYmVy
KG1fc3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fdXNlclN0eWxlKTsKQEAgLTU3ODUsMTAgKzUyMzAsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogICAg
IGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7CiAjZW5kaWYKLSNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQotICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVkQXV0aG9yU3R5bGVz
KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlU3RhY2spOwotI2VuZGlmCisgICAgaW5mby5h
ZGRNZW1iZXIobV9zY29wZVJlc29sdmVyKTsKIAogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8g
YSBwbGFjZSB3aGVyZSBpdCB3b3VsZCBiZSBjYWxsZWQgb25seSBvbmNlPwogICAgIGluZm8uYWRk
TWVtYmVyKGRlZmF1bHRTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBm
MzJjNzEzYjgxYjA4ZTAwODgyNzU5YTk3MjFjYzI2MDc3YTFiMjBhLi5jZDJlYWU3MWVkZjNlMWRh
YjA3MmEzYTQwNmNkZTRiZTY5ZjlhMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTczLDExICs3MywxMyBAQCBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CiBjbGFz
cyBTdGF0aWNDU1NSdWxlTGlzdDsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKK2NsYXNzIFN0eWxlU2Nv
cGVSZXNvbHZlcjsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xh
c3MgU3R5bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgU3R5
bGVSdWxlOworY2xhc3MgU3R5bGVSdWxlRmVhdHVyZVNldDsKIGNsYXNzIFN0eWxlUnVsZUtleWZy
YW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247CkBAIC0x
NzgsMTQgKzE4MCw2IEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSos
IEtleWZyYW1lVmFsdWUmKTsKIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgdm9pZCBw
dXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlUGFyZW50KTsKLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKTsKLSNlbHNlCi0gICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSosIGNv
bnN0IENvbnRhaW5lck5vZGUqKSB7IH0KLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5l
ck5vZGUqKSB7IH0KLSNlbmRpZgotCiBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxs
IGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVt
ZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KICAgICBlbnVtIENTU1J1bGVGaWx0ZXIgewpAQCAt
MjQyLDkgKzIzNiw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2hlY2tSZWdpb25TdHlsZShFbGVt
ZW50KiByZWdpb25FbGVtZW50KTsKIAotICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0
IHsgcmV0dXJuICFtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCk7IH0KLSAgICBib29s
IHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0
TGluZVJ1bGVzOyB9Ci0gICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNTaWJs
aW5nUnVsZXMoKSBjb25zdDsKKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0Owor
ICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29s
IGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxl
KiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
dXRPcGVyYXRpb25zKTsKICAgICAKQEAgLTI3NCwzMSArMjY4LDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogCi0gICAgc3RydWN0IFJ1bGVGZWF0dXJlIHsK
LSAgICAgICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3Rvcklu
ZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgICAgICAgICA6IHJ1bGUo
cnVsZSkKLSAgICAgICAgICAgICwgc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQotICAgICAg
ICAgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4pIAotICAgICAgICB7IAotICAgICAgICB9Ci0gICAgICAgIFN0eWxlUnVsZSogcnVsZTsKLSAg
ICAgICAgdW5zaWduZWQgc2VsZWN0b3JJbmRleDsKLSAgICAgICAgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luOwotICAgIH07Ci0gICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgRmVh
dHVyZXMoKTsKLSAgICAgICAgfkZlYXR1cmVzKCk7Ci0gICAgICAgIHZvaWQgYWRkKGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJik7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0gICAgICAg
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAgICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0
dXJlPiBzaWJsaW5nUnVsZXM7Ci0gICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25B
dHRyaWJ1dGVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAg
IGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgfTsKLQogcHJpdmF0ZToKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3Rz
IHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAog
ICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKTsKQEAgLTM5NSw3ICszNjQsNyBAQCBwcml2YXRlOgogICAgIE93
blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJT
dHlsZTsKIAotICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgT3duUHRyPFN0eWxlUnVsZUZl
YXR1cmVTZXQ+IG1fZmVhdHVyZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVT
ZXQ7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OwogCkBA
IC01MDgsNiArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBIYXNoTWFwPFN0eWxlUnVsZSos
IFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKICAg
ICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVldENTU09NV3JhcHBl
clNldDsKKyAgICBPd25QdHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwpA
QCAtNTE3LDM0ICs0ODcsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9u
KiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1l
bnRzOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKLQotICAgIHR5
cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4gU2Nv
cGVkUnVsZVNldE1hcDsKLQotICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250
YWluZXJOb2RlKikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldHVwU2NvcGVTdGFjayhjb25zdCBDb250
YWluZXJOb2RlKik7Ci0gICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRh
aW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9PSBtX3Nj
b3BlU3RhY2tQYXJlbnQ7IH0KLQotICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRBdXRob3JT
dHlsZXM7Ci0gICAgCi0gICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7Ci0gICAgICAgIFNjb3Bl
U3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KDApLCBt
X3J1bGVTZXQoMCkgeyB9Ci0gICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSwgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1bGVTZXQp
IDogbV9zY29wZShzY29wZSksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleChhdXRob3JTdHlsZUJv
dW5kc0luZGV4KSwgbV9ydWxlU2V0KHJ1bGVTZXQpIHsgfQotICAgICAgICBjb25zdCBDb250YWlu
ZXJOb2RlKiBtX3Njb3BlOwotICAgICAgICBpbnQgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4Owot
ICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7Ci0gICAgfTsKLSAgICAvLyBWZWN0b3IgKHVzZWQg
YXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxl
bWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQotICAgIC8vIGVuY291bnRlcmVkIGR1
cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KLSAgICBWZWN0b3I8U2Nv
cGVTdGFja0ZyYW1lPiBtX3Njb3BlU3RhY2s7Ci0gICAgLy8gRWxlbWVudCBsYXN0IHNlZW4gYXMg
cGFyZW50IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3RhY2suCi0gICAg
Ly8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBp
cyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0
YWNrLgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsKLSAgICBp
bnQgbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0jZW5kaWYKLQogICAgIENTU1RvU3R5
bGVNYXAgbV9zdHlsZU1hcDsKIAogICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMjVmMTdi
MWVkNmI0NDAwNTM1NTcwMzczNWM2ZjU5ZGViZDA3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcApAQCAtMCwwICsxLDMwMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyUnVsZXMuaCIKKworI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNp
bmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKKyNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5j
bHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlv
bkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFByaXZhdGU7CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK3ZvaWQgUnVsZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworfQor
CitzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm8qIGluZm8sIGNv
bnN0IFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBhdG9taWNSdWxlTWFwKQoreworICAgIGluZm8tPmFk
ZE1lbWJlcihhdG9taWNSdWxlTWFwKTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGF0b21pY1J1bGVNYXAuYmVnaW4oKTsgaXQgIT0gYXRvbWljUnVs
ZU1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgaW5mby0+YWRkTWVtYmVyKCppdC0+c2Vjb25kKTsK
K30KKwordm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICByZXBvcnRB
dG9tUnVsZU1hcCgmaW5mbywgbV9pZFJ1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5m
bywgbV9jbGFzc1J1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV90YWdSdWxl
cyk7CisgICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzKTsKKyAgICBp
bmZvLmFkZE1lbWJlcihtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcyk7CisgICAgaW5mby5hZGRNZW1i
ZXIobV91bml2ZXJzYWxSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9wYWdlUnVsZXMpOwor
ICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMpOworfQorCit2
b2lkIFJ1bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJ
bmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1Mp
OworICAgIGluZm8uYWRkTWVtYmVyKHJ1bGVTZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg
Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVz
LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpJZCkKKyAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQo
c2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRl
U2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+
YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6Cisg
ICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJ1
bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAg
IGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKKyAgICBmb3IgKENTU1NlbGVjdG9y
KiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVj
dG9yKGZlYXR1cmVzLCBzZWxlY3Rvcik7CisgICAgICAgIAorICAgICAgICBpZiAoQ1NTU2VsZWN0
b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKKyAgICAg
ICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
U2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAm
JiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgZm91
bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbGxlY3RGZWF0dXJl
c0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJs
aW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQorICAgICAgICBmZWF0dXJlcy5z
aWJsaW5nUnVsZXMuYXBwZW5kKFN0eWxlUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxl
RGF0YS5zZWxlY3RvckluZGV4KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4o
KSkpOworICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
KSkKKyAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVS
dWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVs
ZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Cit9CisgICAgCit2b2lkIFJ1bGVT
ZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAs
IGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0
dXJuOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXks
IG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKCFydWxlcykKKyAgICAgICAgcnVs
ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7CisgICAgcnVsZXMtPmFwcGVuZChy
dWxlRGF0YSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVu
c2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9v
bCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCit7CisgICAgUnVs
ZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVs
ZSk7CisgICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRh
KTsKKworICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7CisK
KyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7CisgICAgICAg
IGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywgcnVsZURh
dGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKKyAg
ICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9zaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3Ip
KSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9WaXNpdGVkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgor
ICAgICAgICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoK
KyAgICAgICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgp
OworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0
KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7Cit9CisKK3Zv
aWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKK3sKKyAgICBtX3Bh
Z2VSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShT
dHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bikKK3sKKyAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0
ZSgpOworICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2NvdW50
IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KKyAgICAvLyBPdGhlcndp
c2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5IHBv
c2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQorICAgIC8vIHRoZSBzdHls
ZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAgICByZWdpb25SdWxlU2V0
LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9u
IHJ1bGVzIGludG8gYSBydWxlIHNldAorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBT
dHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7Cisg
ICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAg
IHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdp
b25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOwor
ICAgIH0KKyAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhhdCBwcm9w
ZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAorICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVsZVNldC0+
bV9ydWxlQ291bnQ7CisKKyAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChS
dWxlU2V0U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJl
Z2lvblJ1bGVTZXQucmVsZWFzZSgpKSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0u
Z2V0KCk7CisgICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRS
dWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJp
ZXMoKSwgcmVzb2x2ZXIpKSkKKyAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1
bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOworICAgIH0KKyAgICBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsK
KworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzaGVl
dC0+Y2hpbGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7
CisKKyAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7CisgICAgICAgIGlmIChy
dWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0
PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOwor
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAgICBhZGRQYWdl
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOworICAgICAgICBlbHNlIGlm
IChydWxlLT5pc01lZGlhUnVsZSgpKSB7CisgICAgICAgICAgICBTdHlsZVJ1bGVNZWRpYSogbWVk
aWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxlKTsKKworICAgICAgICAg
ICAgaWYgKCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChtZWRpYVJ1
bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKSB7CisgICAgICAgICAgICAgICAgLy8gVHJh
dmVyc2UgY2hpbGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgorICAgICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IG1lZGlh
UnVsZS0+Y2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0eWxl
UnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBy
ZXNvbHZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNl
IHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEp
OiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZv
ciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxl
UnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29s
dmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzS2V5
ZnJhbWVzUnVsZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
ZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNj
b3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCisgICAgICAgICAgICB9IC8vIGlmIHJ1
bGVzCisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZl
cikgeworICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAg
ICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxl
cyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYg
KHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRG
YWNlKj4ocnVsZSk7CisgICAgICAgICAgICByZXNvbHZlci0+Zm9udFNlbGVjdG9yKCktPmFkZEZv
bnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRh
dGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNL
ZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcg
NzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVl
dHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0
aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7CisgICAgICAgIH0KKyNpZiBFTkFC
TEUoQ1NTX1JFR0lPTlMpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYm
IHJlc29sdmVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3Qg
YWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUg
bW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24q
PihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAgICAgIH0KKyNlbmRpZgor
ICAgIH0KKyAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQorICAgICAgICBzaHJpbmtU
b0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUs
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKK3sKKyAgICBmb3IgKHNpemVfdCBzZWxlY3Rvcklu
ZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUt
PnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkK
KyAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxl
TWFwJiBtYXApCit7CisgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1h
cC5lbmQoKTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1Rv
Rml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQoreworICAgIHNocmlua01h
cFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2Ns
YXNzUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3RhZ1J1bGVzKTsKKyAgICBz
aHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOworICAgIG1f
bGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2ZvY3VzUHNldWRvQ2xh
c3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fdW5pdmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQo
KTsKKyAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlclJ1bGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThiOGQxYzkxMTcwMzYxMzBkNjdi
Y2Q0NmI2YTU1MTZmZWZlZmJlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyUnVsZXMuaApAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVSZXNv
bHZlclJ1bGVzX2gKKyNkZWZpbmUgU3R5bGVSZXNvbHZlclJ1bGVzX2gKKworI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUZlYXR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDU1NTZWxlY3RvcjsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJ1bGU7Citj
bGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworCitjbGFzcyBSdWxlRGF0YSB7CitwdWJsaWM6Cisg
ICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQg
cG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOworCisgICAgdW5zaWduZWQgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgU3R5bGVSdWxlKiBydWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9ydWxlLT5zZWxlY3Rvckxpc3QoKS5zZWxlY3RvckF0KG1fc2VsZWN0b3JJ
bmRleCk7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3RvckluZGV4OyB9CisKKyAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNN
dWx0aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7
IH0KKyAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaDsgfQorICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7
IH0KKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNp
dHk7IH0KKyAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5r
TWF0Y2hUeXBlOyB9CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CisgICAgYm9vbCBpc0luUmVn
aW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKworICAgIC8vIFRy
eSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBS
dWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OworICAgIGNvbnN0
IHVuc2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CisKKyAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBTdHlsZVJ1bGUqIG1fcnVsZTsKKyAgICB1bnNpZ25lZCBtX3NlbGVjdG9ySW5kZXggOiAx
MjsKKyAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2Ug
Y2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCisgICAgLy8gU29tZSBzaW1wbGUg
dGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4KKyAgICB1
bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjA7CisgICAgdW5zaWduZWQgbV9zcGVjaWZpY2l0eSA6IDI0
OworICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKKyAgICB1bnNp
Z25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0
bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKKyAgICB1bnNpZ25l
ZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQg
bV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzawor
ICAgIHVuc2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0luUmVnaW9uUnVsZSA6IDE7CisgICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQg
b2YgYSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFkLgorICAgIHVuc2lnbmVkIG1f
ZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50
XTsKK307CisgICAgCitzdHJ1Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKKyAgICB2b2lkKiBhOwor
ICAgIHVuc2lnbmVkIGI7CisgICAgdW5zaWduZWQgYzsKKyAgICB1bnNpZ25lZCBkWzRdOworfTsK
KworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1
bGVEYXRhKSwgUnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwpOworCitjbGFzcyBSdWxlU2V0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsK
KworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVy
Tm9kZSogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwg
dW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBi
b29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2Up
OworICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOworICAgIHZvaWQgYWRkVG9S
dWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0
YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2b2lk
IGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZh
bHNlOyB9CisKKyAgICBjb25zdCBTdHlsZVJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKworICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlk
UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0
KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0
cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9Cisg
ICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5
KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMuZ2V0KGtleSk7IH0K
KyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5rUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0
IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2Fs
UnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1
bGVzOyB9CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBj
b25zdDsKKworcHVibGljOgorICAgIFJ1bGVTZXQoKTsKKworICAgIEF0b21SdWxlTWFwIG1faWRS
dWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV90
YWdSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlczsKKyAg
ICBWZWN0b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNzUnVsZXM7CisgICAgVmVjdG9yPFJ1
bGVEYXRhPiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1f
dW5pdmVyc2FsUnVsZXM7CisgICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtX3BhZ2VSdWxlczsK
KyAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKKyAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZDsKKyAgICBTdHlsZVJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3Qg
UnVsZVNldFNlbGVjdG9yUGFpciB7CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBQYXNzT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Io
c2VsZWN0b3IpLCBydWxlU2V0KHJ1bGVTZXQpIHsgfQorICAgICAgICBSdWxlU2V0U2VsZWN0b3JQ
YWlyKGNvbnN0IFJ1bGVTZXRTZWxlY3RvclBhaXImIHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9y
KSwgcnVsZVNldChjb25zdF9jYXN0PFJ1bGVTZXRTZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0
LnJlbGVhc2UoKSkgeyB9CisgICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyopIGNvbnN0OworCisgICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKKyAgICAg
ICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CisgICAgfTsKKworICAgIFZlY3RvcjxSdWxlU2V0
U2VsZWN0b3JQYWlyPiBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzOworfTsKKworbmFtZXNw
YWNlIFByaXZhdGUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitpbmxpbmUgYm9v
bCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTmFtZXNwYWNl
ID0gc2VsZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVSSSgpOworICAgIGlmIChzZWxlY3Rvck5hbWVz
cGFjZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3Rvck5hbWVzcGFjZSAhPSB4aHRtbE5hbWVzcGFjZVVS
SSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHNlbGVjdG9y
LT50YWcoKSAhPSBzdGFyQXRvbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChTZWxl
Y3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOworfQor
CitpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIENTU1NlbGVjdG9yTGlzdCog
c2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOworICAgIGlmICghc2VsZWN0
b3JMaXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc3Vi
U2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKHN1
YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBpc0NvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
K3sKKyAgICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIGNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudC4KKyAgICByZXR1cm4gYXR0cmlidXRlID09IHR5cGVBdHRy
IHx8IGF0dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Cit9CisKK2lubGluZSBib29sIGNvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7
CisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkp
IHsKKyAgICAgICAgLy8gQWxsb3cgY2VydGFpbiBjb21tb24gYXR0cmlidXRlcyAodXNlZCBpbiB0
aGUgZGVmYXVsdCBzdHlsZSkgaW4gdGhlIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50
IGVsZW1lbnQuCisgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYm
ICFpc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUo
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVj
dG9yOjpTdWJTZWxlY3RvcikgeworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFn
SGlzdG9yeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAg
ICAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworaW5saW5lIFJ1bGVEYXRhOjpSdWxlRGF0YShT
dHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9u
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQorICAgIDogbV9ydWxlKHJ1bGUpCisgICAgLCBtX3Nl
bGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisg
ICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkpCisgICAgLCBtX2hh
c0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3Rv
ckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwgbV9o
YXNNdWx0aXBhcnRTZWxlY3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKKyAgICAsIG1f
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goUHJpdmF0ZTo6
aXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKKyAgICAs
IG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OlByaXZhdGU6OmNv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcigpKSkKKyAgICAsIG1fbGlu
a01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0
b3IoKSkpCisgICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQoreworICAg
IEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKKyAgICBBU1NFUlQobV9zZWxlY3Rvcklu
ZGV4ID09IHNlbGVjdG9ySW5kZXgpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50
aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFz
aGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKK30KKworaW5saW5lIFJ1bGVTZXQ6OlJ1bGVT
ZXQoKQorICAgIDogbV9ydWxlQ291bnQoMCkKKyAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCh0cnVlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHls
ZVJlc29sdmVyUnVsZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZUZlYXR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTI0OWVmOTY1MjRkYzlkNDE4YjkxYjA5NmZkYWI5M2U0NzVmMTk4YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgKQEAgLTAsMCAr
MSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFN0eWxlUnVsZUZlYXR1cmVfaAorI2RlZmluZSBTdHlsZVJ1bGVGZWF0
dXJlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTdHlsZVJ1bGU7CisKK3N0cnVjdCBTdHlsZVJ1bGVGZWF0dXJlIHsKKyAgICBT
dHlsZVJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICAgICA6IHJ1bGUocnVsZSkKKyAg
ICAgICAgLCBzZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgpCisgICAgICAgICwgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKSAKKyAgICB7IAorICAg
IH0KKworICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4Owor
ICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKK307CisKK3N0cnVjdCBTdHlsZVJ1
bGVGZWF0dXJlU2V0IHsKKyAgICBTdHlsZVJ1bGVGZWF0dXJlU2V0KCk7CisgICAgflN0eWxlUnVs
ZUZlYXR1cmVTZXQoKTsKKyAgICB2b2lkIGFkZChjb25zdCBTdHlsZVJ1bGVGZWF0dXJlU2V0Jik7
CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyopIGNvbnN0OworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVs
ZXM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOworICAgIFZl
Y3RvcjxTdHlsZVJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVsZXM7CisgICAgVmVjdG9yPFN0eWxlUnVs
ZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7CisgICAgYm9vbCB1c2VzRmlyc3RMaW5l
UnVsZXM7CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKK307CisKK2lubGluZSBTdHls
ZVJ1bGVGZWF0dXJlU2V0OjpTdHlsZVJ1bGVGZWF0dXJlU2V0KCkKKyAgICA6IHVzZXNGaXJzdExp
bmVSdWxlcyhmYWxzZSkKKyAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQoreworfQor
CitpbmxpbmUgU3R5bGVSdWxlRmVhdHVyZVNldDo6flN0eWxlUnVsZUZlYXR1cmVTZXQoKQorewor
fQorICAgIAoraW5saW5lIHZvaWQgU3R5bGVSdWxlRmVhdHVyZVNldDo6YWRkKGNvbnN0IFN0eWxl
UnVsZUZlYXR1cmVTZXQmIG90aGVyKQoreworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7CisgICAg
ZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOworICAgIHNpYmxp
bmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICB1c2VzRmly
c3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1
bGVzOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwg
b3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7Cit9CisKK2lubGluZSB2b2lkIFN0eWxlUnVsZUZl
YXR1cmVTZXQ6OmNsZWFyKCkKK3sKKyAgICBpZHNJblJ1bGVzLmNsZWFyKCk7CisgICAgYXR0cnNJ
blJ1bGVzLmNsZWFyKCk7CisgICAgc2libGluZ1J1bGVzLmNsZWFyKCk7CisgICAgdW5jb21tb25B
dHRyaWJ1dGVSdWxlcy5jbGVhcigpOworICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IGZhbHNlOwor
ICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFN0eWxlUnVsZUZlYXR1cmVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWM1Mjc3NWIyMjQ1NTgwNzkxMjQy
MGFkODFmNGQ2ZTg2NDMxZWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCisKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ29udGV4dEZl
YXR1cmVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
UnVsZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHlsZVNjb3Bl
UmVzb2x2ZXI6OlN0eWxlU2NvcGVSZXNvbHZlcigpCisgICAgOiBtX3N0YWNrUGFyZW50KDApCisg
ICAgLCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgoMCkKK3sKK30KKworU3R5bGVTY29wZVJlc29s
dmVyOjp+U3R5bGVTY29wZVJlc29sdmVyKCkKK3sKK30KKworY29uc3QgQ29udGFpbmVyTm9kZSog
U3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkK
K3sKKyAgICBBU1NFUlQoc2hlZXQpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2hlZXQt
Pm93bmVyRG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6c3R5bGVTY29wZWRFbmFibGVkKGRvY3VtZW50KSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJO
b2RlKCk7CisgICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKCFzdHlsZUVsZW1l
bnQtPnNjb3BlZCgpKQorICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5pc0luU2hhZG93VHJl
ZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7CisKKyAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgp
IHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsKK30KKworaW5saW5lIFJ1
bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6cnVsZVNldEZvcihjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSkgY29uc3QKK3sKKyAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGls
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOworICAgIHJldHVybiBpdCAhPSBt
X2F1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKK30KKworUnVsZVNl
dCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKQoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX2F1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7
Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpzZXR1cFN0YWNrKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKK3sKKyAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3Vs
ZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCisgICAg
QVNTRVJUKCFtX2F1dGhvclN0eWxlcy5pc0VtcHR5KCkpOworCisgICAgbV9zdGFjay5zaHJpbmso
MCk7CisgICAgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXggPSAwOworICAgIGZvciAoY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUgPSBwYXJlbnQ7IHNjb3BlOyBzY29wZSA9IHNjb3BlLT5wYXJl
bnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Io
c2NvcGUpOworICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgIG1fc3RhY2suYXBwZW5k
KFNjb3BlU3RhY2tGcmFtZShzY29wZSwgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgcnVsZVNldCkp
OworICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2Nv
cGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgLS1hdXRob3JTdHlsZUJvdW5k
c0luZGV4OworICAgIH0KKworICAgIG1fc3RhY2sucmV2ZXJzZSgpOworICAgIG1fc3RhY2tQYXJl
bnQgPSBwYXJlbnQ7CisgICAgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ID0gMDsKK30KKwordm9p
ZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQoreworICAgIC8vIFNob3J0Y3V0OiBEb24n
dCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIDxzdHlsZSBzY29wZWQ+
IGlzbid0IHVzZWQgYW55d2hlcmUuCisgICAgaWYgKG1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBBU1NFUlQoIW1fc3RhY2tQYXJlbnQpOworICAgICAgICBBU1NFUlQobV9zdGFj
ay5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW4gc29tZSB3
YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHJh
bmRvbSBlbGVtZW50cy4KKyAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBlbGVtZW50
IHN0YWNrIGluIHN1Y2ggY2FzZXMuCisgICAgaWYgKCFzdGFja0lzQ29uc2lzdGVudChzY29wZVBh
cmVudCkpIHsKKyAgICAgICAgc2V0dXBTdGFjayhzY29wZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2Nv
cGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICArK21fc3RhY2tQYXJlbnRCb3VuZHNJ
bmRleDsKKyAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0aGUgc3Rh
Y2suCisgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOworICAgIGlmIChy
dWxlU2V0KQorICAgICAgICBtX3N0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIG1f
c3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOworICAgIG1fc3RhY2tQYXJlbnQgPSBz
Y29wZTsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3Bpbmcg
ZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgorICAgIGlmIChzdGFja0lzQ29uc2lz
dGVudChzY29wZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHkoKSAmJiBtX3N0YWNr
Lmxhc3QoKS5tX3Njb3BlID09IHNjb3BlKQorICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChz
Y29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICAgICAtLW1fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleDsKKyAgICAgICAgbV9zdGFja1BhcmVudCA9IHNjb3BlLT5wYXJlbnRPckhvc3RO
b2RlKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1
cmVzVG8oU3R5bGVSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMpCit7CisgICAgZm9yIChTY29wZWRS
dWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1f
YXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnNlY29u
ZC0+ZmVhdHVyZXMoKSk7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAg
IE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1v
cnlUeXBlczo6Q1NTKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlcyk7CisgICAg
aW5mby5hZGRNZW1iZXIobV9zdGFjayk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29s
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGE1ODg2Y2Y5NTQwYTJiNzdlM2ZhNjQxYzk0YjVkYWQwNWFmNTI5MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAtMCwwICsx
LDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTdHlsZVNjb3BlUmVzb2x2ZXJfaAorI2RlZmluZSBTdHlsZVNjb3BlUmVz
b2x2ZXJfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDb250YWluZXJOb2RlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIFJ1bGVTZXQ7Citj
bGFzcyBTdHlsZVJ1bGVGZWF0dXJlU2V0OworCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKwor
Y2xhc3MgU3R5bGVTY29wZVJlc29sdmVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7
CisKKyAgICBzdHJ1Y3QgU2NvcGVTdGFja0ZyYW1lIHsKKyAgICAgICAgU2NvcGVTdGFja0ZyYW1l
KCkgOiBtX3Njb3BlKDApLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoMCksIG1fcnVsZVNldCgw
KSB7IH0KKyAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
LCBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgUnVsZVNldCogcnVsZVNldCkKKyAgICAgICAg
ICAgIDogbV9zY29wZShzY29wZSksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleChhdXRob3JTdHls
ZUJvdW5kc0luZGV4KSwgbV9ydWxlU2V0KHJ1bGVTZXQpCisgICAgICAgIHsgfQorCisgICAgICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGU7CisgICAgICAgIGludCBtX2F1dGhvclN0eWxl
Qm91bmRzSW5kZXg7CisgICAgICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKKyAgICB9OworCisgICAg
U3R5bGVTY29wZVJlc29sdmVyKCk7CisgICAgflN0eWxlU2NvcGVSZXNvbHZlcigpOworCisgICAg
c3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlRm9yKGNvbnN0IENTU1N0eWxlU2hlZXQq
KTsKKworICAgIHZvaWQgcHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpOworICAgIHZvaWQgcG9wKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKTsKKyAgICBib29sIGhhc1Njb3BlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2F1dGhv
clN0eWxlcy5pc0VtcHR5KCk7IH0KKyAgICBSdWxlU2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKSBjb25zdDsKKyAgICBSdWxlU2V0KiBlbnN1cmVSdWxlU2V0Rm9yKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKKyAgICBib29sIGVuc3VyZVN0YWNrQ29uc2lzdGVu
Y3koQ29udGFpbmVyTm9kZSopOworICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhY2suc2l6ZSgpOyB9CisgICAgY29uc3QgU2NvcGVTdGFja0ZyYW1lJiBzdGFja0Zy
YW1lQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suYXQoaW5kZXgpOyB9
CisgICAgYm9vbCBmcmFtZU1hdGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTY29wZVN0YWNrRnJhbWUm
IGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhvclN0eWxlQm91bmRzSW5kZXggPT0g
bV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhT
dHlsZVJ1bGVGZWF0dXJlU2V0Jik7CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldHVwU3RhY2soY29u
c3QgQ29udGFpbmVyTm9kZSopOworICAgIGJvb2wgc3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29u
dGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1f
c3RhY2tQYXJlbnQ7IH0KKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdXRob3JTdHlsZXM7CisK
KyAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGlu
ZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQor
ICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1
dGlvbi4KKyAgICBWZWN0b3I8U2NvcGVTdGFja0ZyYW1lPiBtX3N0YWNrOworICAgIC8vIEVsZW1l
bnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxl
bWVudFN0YWNrLgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3Bp
bmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hl
Y2tlcjo6bV9wYXJlbnRTdGFjay4KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3N0YWNrUGFy
ZW50OworICAgIGludCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7Cit9OworCitpbmxpbmUgYm9v
bCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFpbmVyTm9k
ZSogcGFyZW50KQoreworICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVy
c2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29u
c2lzdGVudCkuCisgICAgaWYgKCFzdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQorICAgICAgICBz
ZXR1cFN0YWNrKHBhcmVudCk7CisgICAgcmV0dXJuICFtX3N0YWNrLmlzRW1wdHkoKTsKK30KKwor
I2Vsc2UKK3N0cnVjdCBTdHlsZVNjb3BlUmVzb2x2ZXIgeworICAgIHZvaWQgcHVzaChjb25zdCBD
b250YWluZXJOb2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdm9pZCBwb3AoY29uc3QgQ29udGFpbmVyTm9kZSopIHsgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFNUWUxFX1NDT1BFRCkKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3R5bGVTY29wZVJlc29sdmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167057</attachid>
            <date>2012-10-04 02:10:23 -0700</date>
            <delta_ts>2012-10-05 02:49:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98244-20121004180933.patch</filename>
            <type>text/plain</type>
            <size>100011</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5ODlmMTA5NjBiYzM1
OWQyMDZlMjcwMjJkMWVlZjE2ODRiODgyMC4uMGRiYzdhNWIyYjZjYzJjMGE4MmI0NmQ3YjJiOGU4
OTU1OWU0OTJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0xMC0wNCAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBTY29wZWQgU3R5bGUgcmVsYXRlZCBjb2RlIHNob3VsZCBoYXZlIGl0cyBvd24gY2xhc3MuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI0NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gVGhlIGhpZ2hs
aWdodCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbnRyb2R1Y2UgU3R5bGVTY29wZVJlc29sdmVyLAor
ICAgICAgICAgIHdoaWNoIGlzIGV4dHJhY3RlZCBmcm9tIFN0eWxlUmVzb2x2ZXIgdG8gaGFuZGxl
IHNjb3BlIG1hbmFnZW1lbnQuCisgICAgICAgICAgQ29taW5nIFNoYWRvdyBET00gcmVsYXRlZCBj
aGFuZ2VzIGxpa2UgQGhvc3QgcnVsZXMgd2lsbCBmaXQgaW4gdGhpcyBjbGFzcy4KKyAgICAgICAg
LSBUbyBsZXQgdGhlIGNsYXNzIHRvIGhhdmUgaXRzIG93biBmaWxlLCB0aGlzIGNoYW5nZSBhbHNv
IG1vdmVzCisgICAgICAgICAgUnVsZURhdGEgYW5kIFJ1bGVTZXQgb3V0IGZyb20gU3R5bGVSZXNv
bHZlci5jcHAgdG8gU3R5bGVSZXNvbHZlclJ1bGVzLmgvY3BwCisgICAgICAgICAgVGhlIGZpbGUg
aXMgbmFtZWQgU3R5bGVSZXNvbHZlclJ1bGVzLmggaW5zdGVhZCBvZiBSdWxlRGF0YS5oIHRvIGVt
cGhhc2l6ZSB0aGF0CisgICAgICAgICAgaXQgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9m
IFN0eWxlUmVzb2x2ZXIgYW5kIHNob3VsZG4ndCBiZSB1c2VkIGluIGJyb2FkZXIgc2NvcGUuCisg
ICAgICAgIC0gRm9yIHRoZSBzYW1lIHJlYXNvbiwgU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUg
aXMgcmVuYW1lZCBhbmQKKyAgICAgICAgICBtb3ZlZCBvdXQgdG8gaXRzIG93biBmaWxlIFN0eWxl
UnVsZUZlYXR1cmUuaAorCisgICAgICAgIENoYW5nZSBvbiBSdWxlRGF0YSwgUnVsZVNldCBhbmQg
UnVsZUZlYXR1cnMgYXJlIGp1c3QgbW92ZSBhbmQgcmVuYW1lcy4KKyAgICAgICAgRXh0cmFjdGlu
ZyBTdHlsZVNjb3BlUmVzb2x2ZXIgaXMgYSBiaXQgbGVzcyB0cml2aWFsLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0FsbEluT25lLmNwcDoKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZVJ1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc1NpYmxp
bmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzRmlyc3RMaW5l
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0JlZm9yZUFmdGVy
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hl
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudFNoYWRvd1Jvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVGZWF0dXJlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXJSdWxlcy5jcHA6IEFkZGVkLiBFeHRyYWN0ZWQg
ZnJvbSBTdHlsZVJlc29sdmVyLmNwcAorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVw
b3J0QXRvbVJ1bGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6UnVsZVNldFNlbGVjdG9yUGFpcjo6
cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJv
bVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojph
ZGRQYWdlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSZWdpb25SdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpzaHJp
bmtNYXBWZWN0b3JzVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6c2hyaW5rVG9G
aXQpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyUnVsZXMuaDogQWRkZWQuIEV4dHJhY3Rl
ZCBmcm9tIFN0eWxlUmVzb2x2ZXIuY3BwCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJ1
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpwb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSdWxlRGF0YTo6cnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6
c2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnNlbGVjdG9ySW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6Omhhc0Zhc3RDaGVja2FibGVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzTXVsdGlwYXJ0U2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZURhdGE6Omhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFz
ZWRPblJ1bGVIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpjb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnNwZWNp
ZmljaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpsaW5rTWF0Y2hUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjppc0luUmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRGF0YTo6ZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcyk6CisgICAg
ICAgIChTYW1lU2l6ZUFzUnVsZURhdGEpOgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlU2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6ZGlz
YWJsZUF1dG9TaHJpbmtUb0ZpdCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpmZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjppZFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6dGFn
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6c2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmxpbmtQc2V1ZG9DbGFzc1J1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZvY3VzUHNldWRvQ2xhc3NSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSdWxlU2V0Ojp1bml2ZXJzYWxSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0OjpwYWdlUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6UnVsZVNl
dFNlbGVjdG9yUGFpcjo6UnVsZVNldFNlbGVjdG9yUGFpcik6CisgICAgICAgIChSdWxlU2V0U2Vs
ZWN0b3JQYWlyKToKKyAgICAgICAgKFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0
ZTo6aXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpQcml2YXRlOjpzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZTo6aXNDb21tb25BdHRyaWJ1dGVTZWxlY3Rv
ckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlOjpjb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXQpOgorICAgICAgICAqIGNzcy9T
dHlsZVJ1bGVGZWF0dXJlLmg6IEFkZGVkLiBFeHRyYWN0ZWQgZnJvbSBTdHlsZVJlc29sdmVyLmgK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVSdWxlRmVhdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJ1bGVGZWF0dXJlOjpTdHlsZVJ1bGVGZWF0dXJlKToKKyAgICAgICAg
KFN0eWxlUnVsZUZlYXR1cmVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlRmVhdHVy
ZVNldDo6U3R5bGVSdWxlRmVhdHVyZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVG
ZWF0dXJlU2V0Ojp+U3R5bGVSdWxlRmVhdHVyZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVGZWF0dXJlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlRmVhdHVy
ZVNldDo6Y2xlYXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjp+U3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2Nv
cGVSZXNvbHZlcjo6c2NvcGVGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpydWxlU2V0Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6
ZW5zdXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6
OnNldHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpwdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAg
ICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2NvcGVSZXNvbHZlcjo6U2NvcGVTdGFja0ZyYW1lOjpTY29wZVN0YWNrRnJhbWUpOgorICAgICAg
ICAoU2NvcGVTdGFja0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZl
cjo6aGFzU2NvcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3Rh
Y2tTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tGcmFt
ZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZnJhbWVNYXRjaGVz
U3R5bGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdGFj
a0lzQ29uc2lzdGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVu
c3VyZVN0YWNrQ29uc2lzdGVuY3kpOgorCiAyMDEyLTEwLTA0ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBEYXRlVGltZVllYXJGaWVsZEVsZW1lbnQgc2hvdWxk
IHJlc3BlY3QgbWluL21heCB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHBhZ2UgYXV0aG9ycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCAyNTQ5NGMwYjhiNDE2NTQ3NTRlOGViNmZiOWE0N2RjODUyM2QwODU1
Li5kOTZlNTMyNjhiYmRiZDE5MTQ2ZTVjZTEyZjRkNzVmNzA4ODk1YWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTA3NCw4ICsxMDc0LDEwIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBj
c3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5j
cHAKICAgICBjc3MvU3R5bGVSZXNvbHZlci5jcHAKKyAgICBjc3MvU3R5bGVSZXNvbHZlclJ1bGVz
LmNwcAogICAgIGNzcy9TdHlsZVJ1bGUuY3BwCiAgICAgY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAK
KyAgICBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcAog
ICAgIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzQ2MWRiYmVmNTk5NTBjODk3MDAz
M2U3MmQ3ODU2MDY0YzhmMmJkYi4uODYyZTYwNGRlNzEzZmZhMzEyYTllYmNlZTNkNjAzZGJkMjg2
NGM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjI0LDEwICsyNjI0LDE1
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dHlTaG9ydGhhbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXJSdWxlcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
dWxlRmVhdHVyZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0Q29udGVudHMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGE0ZDg3NTQ3YTRhOWQwYTUw
OWUxM2Y5NGZiMGRlNTNiMmQ4ZGYxNDguLjQxZDFiZWRlNDQ1M2Q4ZWYxMDMzYWZiYTJhNTkwOGMx
MDc1MmM3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzIwLDggKzMyMCwxMCBAQCBTT1VSQ0VTICs9IFwK
ICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAgXAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2hv
cnRoYW5kLmNwcCBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKKyAgICBjc3MvU3R5bGVS
ZXNvbHZlclJ1bGVzLmNwcCBcCiAgICAgY3NzL1N0eWxlUnVsZS5jcHAgXAogICAgIGNzcy9TdHls
ZVJ1bGVJbXBvcnQuY3BwIFwKKyAgICBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBcCiAgICAg
Y3NzL1N0eWxlU2hlZXQuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBcCiAg
ICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBcCkBAIC0xNDg1LDggKzE0ODcsMTEgQEAgSEVBREVS
UyArPSBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVy
dHlTaG9ydGhhbmQuaCBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCisgICAgY3NzL1N0eWxl
UmVzb2x2ZXJSdWxlcy5oIFwKICAgICBjc3MvU3R5bGVSdWxlLmggXAorICAgIGNzcy9TdHlsZVJ1
bGVGZWF0dXJlLmggXAogICAgIGNzcy9TdHlsZVJ1bGVJbXBvcnQuaCBcCisgICAgY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oIFwKICAgICBjc3MvU3R5bGVTaGVldC5oIFwKICAgICBjc3MvU3R5bGVT
aGVldENvbnRlbnRzLmggXAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA3YzExZTc2NzdhNzVmNDAxZTI0NTQyYWU0MjYwNjZlZjJlODhhZDVmLi5iNmMyZjkw
ZDM1YmFlNDhmOGM5ZjVhOTM5NDFjZGQzNzg5ZDA5MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
NjI0LDEwICsyNjI0LDE1IEBACiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuaCcs
CiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwJywKICAgICAgICAg
ICAgICdjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5
bGVTY29wZVJlc29sdmVyLmNwcCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlci5jcHAnLAogICAgICAgICAgICAg
J2Nzcy9TdHlsZVJlc29sdmVyLmgnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyUnVs
ZXMuY3BwJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmgnLAogICAgICAg
ICAgICAgJ2Nzcy9TdHlsZVJ1bGUuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlLmgn
LAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgnLAogICAgICAgICAgICAgJ2Nz
cy9TdHlsZVJ1bGVJbXBvcnQuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlSW1wb3J0
LmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjg5ZjNhZDk5ZjY0
MjZmOGFiM2I3MWY3MjdkZjgwNGRkNWZjMjk0OC4uNDRmNWI4ODBkNjY2MzMzYTRmNDg2ZTE5ZDIx
Y2RmMTU4NGU2NTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMzgzMyw2ICszODMzLDExIEBACiAJCUE3NDBCNUE1MTRDOTM1
QUIwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjRFQTc5MTRDOTM0ODQwMEM4RjVCRiAvKiBKU0lu
dGVybmFsU2V0dGluZ3MuaCAqLzsgfTsKIAkJQTc0MEI1QTcxNEM5MzVBRjAwQTc3RkE0IC8qIEpT
SW50ZXJuYWxTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0I0RUE3ODE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdz
LmNwcCAqLzsgfTsKIAkJQTc0QkI3NkIxM0JEQTg2MzAwRkY3QkYwIC8qIEV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc0QkI3NkExM0JEQTg2MzAwRkY3QkYwIC8qIEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3NUJC
RDg1MTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVJlc29sdmVyUnVsZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1QkJEODAxNjFENkQxQjAwNDky
NzA4IC8qIFN0eWxlUmVzb2x2ZXJSdWxlcy5jcHAgKi87IH07CisJCUE3NUJCRDg2MTYxRDZEMUIw
MDQ5MjcwOCAvKiBTdHlsZVJlc29sdmVyUnVsZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUJCRDgxMTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVJl
c29sdmVyUnVsZXMuaCAqLzsgfTsKKwkJQTc1QkJEODcxNjFENkQxQjAwNDkyNzA4IC8qIFN0eWxl
UnVsZUZlYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NUJCRDgyMTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVJ1bGVGZWF0dXJlLmggKi87IH07
CisJCUE3NUJCRDg4MTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1QkJEODMxNjFE
NkQxQjAwNDkyNzA4IC8qIFN0eWxlU2NvcGVSZXNvbHZlci5jcHAgKi87IH07CisJCUE3NUJCRDg5
MTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUJCRDg0MTYxRDZEMUIwMDQ5MjcwOCAv
KiBTdHlsZVNjb3BlUmVzb2x2ZXIuaCAqLzsgfTsKIAkJQTc1RTQ5NzYxMDc1MkFDQjAwQzlCODk2
IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc1RTQ5NzQxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3NUU0OTc3MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTQ5
NzUxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgKi87IH07CiAJ
CUE3NUU4Qjg4MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAv
KiBGRUJsZW5kLmNwcCAqLzsgfTsKQEAgLTExMDYwLDYgKzExMDY1LDExIEBACiAJCUE3M0Y5NUZD
MTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSb3VuZGVkUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb3VuZGVkUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNzRCQjc2QTEzQkRBODYzMDBGRjdCRjAgLyogRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkNv
ZGVQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzVCQkQ4MDE2
MUQ2RDFCMDA0OTI3MDggLyogU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXJSdWxlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE3NUJCRDgxMTYxRDZEMUIwMDQ5MjcwOCAvKiBTdHlsZVJlc29s
dmVyUnVsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZl
clJ1bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NUJCRDgyMTYxRDZEMUIw
MDQ5MjcwOCAvKiBTdHlsZVJ1bGVGZWF0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0eWxlUnVsZUZlYXR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTc1QkJEODMxNjFENkQxQjAwNDkyNzA4IC8qIFN0eWxlU2NvcGVSZXNvbHZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3BlUmVzb2x2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzVCQkQ4NDE2MUQ2RDFCMDA0OTI3MDggLyog
U3R5bGVTY29wZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlU2NvcGVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzVFNDk3
NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZFQmxlbmQuY3BwOyBwYXRoID0gZmlsdGVycy9GRUJsZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMjI1LDkgKzIxMjM1LDE0IEBACiAJ
CQkJRTEzOTg2NjExNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovLAogCQkJ
CUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8sCiAJCQkJRTRC
QkVENEExNEZDREJBMTAwM0YwQjk4IC8qIFN0eWxlUnVsZS5jcHAgKi8sCisJCQkJQTc1QkJEODIx
NjFENkQxQjAwNDkyNzA4IC8qIFN0eWxlUnVsZUZlYXR1cmUuaCAqLywKKwkJCQlBNzVCQkQ4MDE2
MUQ2RDFCMDA0OTI3MDggLyogU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCAqLywKKwkJCQlBNzVCQkQ4
MTE2MUQ2RDFCMDA0OTI3MDggLyogU3R5bGVSZXNvbHZlclJ1bGVzLmggKi8sCiAJCQkJRTRCQkVE
NEIxNEZDREJBMTAwM0YwQjk4IC8qIFN0eWxlUnVsZS5oICovLAogCQkJCUU0OTQ2RUFDMTU2RTY0
REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3BwICovLAogCQkJCUU0OTQ2RUFEMTU2RTY0
REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLywKKwkJCQlBNzVCQkQ4MzE2MUQ2RDFC
MDA0OTI3MDggLyogU3R5bGVTY29wZVJlc29sdmVyLmNwcCAqLywKKwkJCQlBNzVCQkQ4NDE2MUQ2
RDFCMDA0OTI3MDggLyogU3R5bGVTY29wZVJlc29sdmVyLmggKi8sCiAJCQkJQThFQTgwMDUwQTE5
NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuY3BwICovLAogCQkJCUE4RUE4MDA0MEExOTUxNkUw
MEE4RUY1RiAvKiBTdHlsZVNoZWV0LmggKi8sCiAJCQkJODUwNjU2REMwQUFCNDREOTAwMkQxNUMw
IC8qIFN0eWxlU2hlZXQuaWRsICovLApAQCAtMjQ5ODAsOCArMjQ5OTUsMTEgQEAKIAkJCQlCQzIy
NzJCRDBFODJFQUFFMDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMyMjcyODcwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVmbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEzOTg2NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxl
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3NUJCRDg2MTYxRDZEMUIwMDQ5MjcwOCAv
KiBTdHlsZVJlc29sdmVyUnVsZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3NUJCRDg3MTYxRDZE
MUIwMDQ5MjcwOCAvKiBTdHlsZVJ1bGVGZWF0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJC
RUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBNzVCQkQ4OTE2MUQ2RDFCMDA0OTI3MDggLyogU3R5bGVTY29wZVJlc29sdmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTM4QTlFNTE0NzQ0MzQ2MDBCMEVEMTIgLyogU3R5bGVTaGFk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE4MDBDMEExOTUxNkUwMEE4RUY1RiAvKiBTdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEY5RUVGMzE1NkRBMDA3MDBEMjNFN0UgLyog
U3R5bGVTaGVldENvbnRlbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MTg0LDggKzI4MjAyLDEw
IEBACiAJCQkJQkMyMjcyRTMwRTgyRUU5QjAwRTdGOTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMjcyQkMwRTgyRUFBRTAwRTdGOTc1IC8qIFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzOTg2NjMx
NTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTc1QkJEODUxNjFENkQxQjAwNDkyNzA4IC8qIFN0eWxlUmVzb2x2ZXJSdWxlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNEJCRUQ0QzE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0OTQ2RUFFMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJ
bXBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTc1QkJEODgxNjFENkQxQjAwNDkyNzA4IC8q
IFN0eWxlU2NvcGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBODAwRDBBMTk1
MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEY5RUVG
MjE1NkQ5RkZBMDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4RUE4MDBCMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDE5M2I3YWZjNDhh
ZTAxODM1ZjQ5NWIwYWMzMGUwNWRlYWU0YzY3M2EuLmM2NTk4MGQwN2Y0NWE3MjJlMTA2OWRkZWNj
M2ViYzU2NjdiMDMwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNzAsMyAr
NzAsNSBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxl
UHJvcGVydHlTaG9ydGhhbmQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuY3BwIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXJSdWxlcy5jcHAiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29s
dmVyLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBjYzNmNWYzZGYy
ZmEzYzEyNDgyYTFiODI4ZmNjY2IzMjc5OTgyZDBjLi42ODY1NGY0ZWRiMmQ5MjdiZTQ4MjRmMWQ1
MWY5YWUyMWU2YzA1MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0x
MTEsOCArMTExLDExIEBACiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXJSdWxlcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgor
I2luY2x1ZGUgIlN0eWxlUnVsZUZlYXR1cmUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQu
aCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0
Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQu
aCIKQEAgLTIwNSwxMTQgKzIwOCw2IEBAIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3As
IFByb3ApIFwKIGlmIChwcmltaXRpdmVWYWx1ZSkgXAogICAgIG1fc3R5bGUtPnNldCMjUHJvcCgq
cHJpbWl0aXZlVmFsdWUpOwogCi1jbGFzcyBSdWxlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgUnVsZURh
dGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24s
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydWxlOyB9Ci0gICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9ydWxlLT5zZWxlY3Rvckxpc3QoKS5zZWxlY3RvckF0KG1fc2VsZWN0b3JJbmRleCk7IH0K
LSAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvcklu
ZGV4OyB9Ci0KLSAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9Ci0gICAgYm9vbCBoYXNNdWx0aXBhcnRT
ZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KLSAgICBi
b29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxl
SGFzaDsgfQotICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KLSAgICB1
bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0KLSAg
ICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hUeXBl
OyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9Ci0gICAgYm9vbCBpc0luUmVnaW9uUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KLQotICAgIC8vIFRyeSB0byBiYWxh
bmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBv
YmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwotICAgIGNvbnN0IHVuc2lnbmVk
KiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9Ci0KLSAgICB2b2lkIHJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHls
ZVJ1bGUqIG1fcnVsZTsKLSAgICB1bnNpZ25lZCBtX3NlbGVjdG9ySW5kZXggOiAxMjsKLSAgICAv
LyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHByb2Jh
Ymx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCi0gICAgLy8gU29tZSBzaW1wbGUgdGVzdGluZyBz
aG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4KLSAgICB1bnNpZ25lZCBt
X3Bvc2l0aW9uIDogMjA7Ci0gICAgdW5zaWduZWQgbV9zcGVjaWZpY2l0eSA6IDI0OwotICAgIHVu
c2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hh
c011bHRpcGFydFNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9saW5rTWF0
Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzawotICAgIHVuc2ln
bmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0lu
UmVnaW9uUnVsZSA6IDE7Ci0gICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0
b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFkLgotICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFu
dFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKLX07Ci0g
ICAgCi1zdHJ1Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKLSAgICB2b2lkKiBhOwotICAgIHVuc2ln
bmVkIGI7Ci0gICAgdW5zaWduZWQgYzsKLSAgICB1bnNpZ25lZCBkWzRdOwotfTsKLQotQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwg
UnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwpOwotCi1jbGFzcyBSdWxlU2V0IHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFJ1bGVTZXQpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKLQotICAgIHZv
aWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAw
KTsKLQotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVn
aW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQg
c2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZv
aWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwotICAg
IHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICB2b2lkIGRpc2FibGVB
dXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9Ci0K
LSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVz
KEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkp
OyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJ
bXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29u
c3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmdldChrZXkpOyB9Ci0gICAg
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlua1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJl
dHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNldWRv
Q2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2FsUnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8
U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSdWxlczsg
fQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7
Ci0KLXB1YmxpYzoKLSAgICBSdWxlU2V0KCk7Ci0KLSAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7
Ci0gICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwotICAgIEF0b21SdWxlTWFwIG1fdGFnUnVs
ZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXM7Ci0gICAgVmVj
dG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0
YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZl
cnNhbFJ1bGVzOwotICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7Ci0gICAg
dW5zaWduZWQgbV9ydWxlQ291bnQ7Ci0gICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7
Ci0gICAgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMgbV9mZWF0dXJlczsKLQotICAgIHN0cnVjdCBS
dWxlU2V0U2VsZWN0b3JQYWlyIHsKLSAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihDU1NTZWxl
Y3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNldD4gcnVsZVNldCkgOiBzZWxlY3Rvcihz
ZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkgeyB9Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBh
aXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3Ip
LCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQu
cmVsZWFzZSgpKSB7IH0KLSAgICAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKikgY29uc3Q7Ci0KLSAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwotICAgICAg
ICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsKLSAgICB9OwotCi0gICAgVmVjdG9yPFJ1bGVTZXRT
ZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7Ci19OwotCiBzdGF0aWMg
UnVsZVNldCogZGVmYXVsdFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHls
ZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAgLTM2OSw3ICsyNjQsOCBA
QCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpCiB9CiAK
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQor
ICAgIDogbV9mZWF0dXJlcyhhZG9wdFB0cihuZXcgU3R5bGVSdWxlRmVhdHVyZVNldCgpKSkKKyAg
ICAsIG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQogICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNr
Z3JvdW5kRmlsbExheWVyKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25z
U2luY2VMYXN0U3dlZXAoMCkKICAgICAsIG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3VtZW50LT5p
blF1aXJrc01vZGUoKSkKQEAgLTM5MywxMCArMjg5LDYgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFs
c2UpCiAjZW5kaWYKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9zY29wZVN0YWNr
UGFyZW50KDApCi0gICAgLCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleCgwKQotI2VuZGlm
CiAgICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTQ4MSw3ICszNzMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVj
dG9yPFJlZgogICAgIH0KIH0KIAotc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVT
ZXQoY29uc3QgVmVjdG9yPFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlPiYgcnVsZXMpCitzdGF0
aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5bGVSdWxl
RmVhdHVyZT4mIHJ1bGVzKQogewogICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOwogICAg
IGlmICghc2l6ZSkKQEAgLTQ5Myw1NyArMzg1LDQwIEBAIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVT
ZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZT4m
CiAgICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOwogfQogCitib29sIFN0eWxlUmVzb2x2ZXI6
OnVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9mZWF0dXJlcy0+c2li
bGluZ1J1bGVzLmlzRW1wdHkoKTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VzRmlyc3RM
aW5lUnVsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZlYXR1cmVzLT51c2VzRmlyc3RMaW5l
UnVsZXM7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6dXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2ZlYXR1cmVzLT51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKK30K
Kwogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogewotICAgIG1fZmVhdHVy
ZXMuY2xlYXIoKTsKKyAgICBtX2ZlYXR1cmVzLT5jbGVhcigpOwogICAgIC8vIENvbGxlY3QgYWxs
IGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQg
c2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxl
IHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CiAgICAgLy8gc2hh
cmluZyBjYW5kaWRhdGVzLgotICAgIG1fZmVhdHVyZXMuYWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVy
ZXMoKSk7Ci0gICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7Cisg
ICAgbV9mZWF0dXJlcy0+YWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7CisgICAgbV9mZWF0
dXJlcy0+YWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwogI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCi0gICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyAr
K2l0KQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyAg
ICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmNvbGxlY3RG
ZWF0dXJlc1RvKCptX2ZlYXR1cmVzKTsKICNlbmRpZgogICAgIGlmIChtX3VzZXJTdHlsZSkKLSAg
ICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworICAgICAgICBt
X2ZlYXR1cmVzLT5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwogCi0gICAgbV9zaWJsaW5n
UnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKLSAgICBtX3Vu
Y29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25B
dHRyaWJ1dGVSdWxlcyk7CisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVh
dHVyZXMtPnNpYmxpbmdSdWxlcyk7CisgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBt
YWtlUnVsZVNldChtX2ZlYXR1cmVzLT51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKIH0KIAotI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVy
OjpkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKLXsKLSAgICBBU1NF
UlQoc2hlZXQpOwotCi0gICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxl
ZChkb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUg
PSBzaGVldC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+
aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHls
ZVRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Ci0gICAg
aWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50
LT5pc0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7Ci0KLSAg
ICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKHBhcmVudC0+
aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsK
LX0KLQotaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKLXsKLSAgICBpZiAoIXNjb3BlLT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBTY29wZWRSdWxlU2V0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUp
OwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNv
bmQuZ2V0KCkgOiAwOyAKLX0KLSNlbmRpZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0
aG9yU3R5bGUoKQogewogICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKQEAg
LTU2NSwxMiArNDQwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVz
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5j
b250ZW50cygpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQpOwotICAgICAgICBpZiAo
c2NvcGUpIHsKLSAgICAgICAgICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOwotICAgICAgICAg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwg
dGhpcywgc2NvcGUpOworICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBT
dHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgeworICAgICAgICAgICAgaWYg
KCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9zY29wZVJlc29sdmVyID0gYWRv
cHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZlcigpKTsKKyAgICAgICAgICAgIG1fc2NvcGVSZXNv
bHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKQEAgLTU4NSw2MiArNDU4LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CiB9CiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotdm9pZCBTdHlsZVJl
c29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQotewot
ICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0
eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBBU1NFUlQoIW1fc2NvcGVkQXV0
aG9yU3R5bGVzLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDApOwotICAg
IGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKLSAgICBmb3IgKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50T3JIb3N0
Tm9kZSgpKSB7Ci0gICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUoc2Nv
cGUpOwotICAgICAgICBpZiAocnVsZVNldCkKLSAgICAgICAgICAgIG1fc2NvcGVTdGFjay5hcHBl
bmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBydWxlU2V0
KSk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChz
Y29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICAgICAtLWF1dGhvclN0eWxlQm91
bmRzSW5kZXg7Ci0gICAgfQotICAgIG1fc2NvcGVTdGFjay5yZXZlcnNlKCk7Ci0gICAgbV9zY29w
ZVN0YWNrUGFyZW50ID0gcGFyZW50OwotICAgIG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4
ID0gMDsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQotewotICAgIC8v
IFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlm
IDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgaWYgKG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fc2NvcGVTdGFja1BhcmVu
dCk7Ci0gICAgICAgIEFTU0VSVChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgotICAgIC8vIFJlY3Jl
YXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KLSAgICBp
ZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7Ci0gICAgICAgIHNldHVw
U2NvcGVTdGFjayhzY29wZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNjb3Bl
LT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHls
ZXMoKSkKLSAgICAgICAgKyttX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAgICAvLyBP
dGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0aGUgc3RhY2suCi0gICAgUnVsZVNl
dCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShzY29wZSk7Ci0gICAgaWYgKHJ1bGVTZXQpCi0g
ICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBtX3Njb3Bl
U3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgIG1fc2NvcGVTdGFja1BhcmVu
dCA9IHNjb3BlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFNjb3BlKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKQotewotICAgIC8vIE9ubHkgYm90aGVyIHRvIHVwZGF0ZSB0aGUgc2Nv
cGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3RlbnQuCi0gICAgaWYgKHNjb3BlU3Rh
Y2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7Ci0gICAgICAgIGlmICghbV9zY29wZVN0YWNrLmlzRW1w
dHkoKSAmJiBtX3Njb3BlU3RhY2subGFzdCgpLm1fc2NvcGUgPT0gc2NvcGUpCi0gICAgICAgICAg
ICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93
Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAg
ICAgICAgICAgLS1tX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAgICAgICAgbV9zY29w
ZVN0YWNrUGFyZW50ID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICB9Ci19Ci0jZW5k
aWYKLQogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJl
bnQpCiB7CiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50c1BhcmVudCA9IHBhcmVudC0+
cGFyZW50T3JIb3N0RWxlbWVudCgpOwpAQCAtNjU1LDcgKzQ3Miw4IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgICAgICBtX2NoZWNr
ZXIucHVzaFBhcmVudChwYXJlbnQpOwogCiAgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNo
YWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KLSAgICBwdXNoU2NvcGUocGFyZW50
LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikK
KyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNoKHBhcmVudCwgcGFyZW50LT5wYXJlbnRPckhv
c3ROb2RlKCkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxl
bWVudCogcGFyZW50KQpAQCAtNjY0LDE5ICs0ODIsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpw
b3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICAvLyBQYXVzZSBtYWludGFpbmlu
ZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgogICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQocGFyZW50KSkKICAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOwotICAg
IHBvcFNjb3BlKHBhcmVudCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgbV9z
Y29wZVJlc29sdmVyLT5wb3AocGFyZW50KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNo
UGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFT
U0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFk
b3dSb290LT5ob3N0KCkpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2Nv
cGVSZXNvbHZlci0+cHVzaChzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkpOwogfQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCog
c2hhZG93Um9vdCkKIHsKICAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAgICBwb3BT
Y29wZShzaGFkb3dSb290KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAgICBtX3Nj
b3BlUmVzb2x2ZXItPnBvcChzaGFkb3dSb290KTsKIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZp
ZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC03MTIsNDEg
KzUzMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hl
KCkKICAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZSh0b1JlbW92ZVtpXSk7
CiB9CiAKLVN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpGZWF0dXJlcygpCi0gICAgOiB1c2VzRmly
c3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxzZSkKLXsK
LX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6On5GZWF0dXJlcygpCi17Ci19Ci0gICAgCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVh
dHVyZXMmIG90aGVyKQotewotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRv
ciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7Ci0gICAgZW5kID0gb3Ro
ZXIuYXR0cnNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOwotICAgIHNpYmxpbmdSdWxlcy5h
cHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFw
cGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKLSAgICB1c2VzRmlyc3RMaW5lUnVs
ZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVzOwotICAg
IHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNl
c0JlZm9yZUFmdGVyUnVsZXM7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmNs
ZWFyKCkKLXsKLSAgICBpZHNJblJ1bGVzLmNsZWFyKCk7Ci0gICAgYXR0cnNJblJ1bGVzLmNsZWFy
KCk7Ci0gICAgc2libGluZ1J1bGVzLmNsZWFyKCk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxl
cy5jbGVhcigpOwotICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IGZhbHNlOwotICAgIHVzZXNCZWZv
cmVBZnRlclJ1bGVzID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6
OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNv
bnN0Cit2b2lkIFN0eWxlUnVsZUZlYXR1cmVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwog
ICAgIGluZm8uYWRkTWVtYmVyKGlkc0luUnVsZXMpOwpAQCAtOTU5LDI2ICs3NDYsMjIgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCi0gICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkKKyAg
ICBpZiAoIW1fc2NvcGVSZXNvbHZlciB8fCAhbV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0
cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3Qg
aW5jb25zaXN0ZW50KS4KLSAgICBpZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQobV9lbGVtZW50
KSkKLSAgICAgICAgc2V0dXBTY29wZVN0YWNrKG1fZWxlbWVudCk7Ci0gICAgaWYgKG1fc2NvcGVT
dGFjay5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29u
c2lzdGVuY3kobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBhcHBseUF1
dGhvclN0eWxlcyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7
CiAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKLSAgICB1bnNpZ25lZCBzY29wZVNpemUg
PSBtX3Njb3BlU3RhY2suc2l6ZSgpOworICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVS
ZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3Bl
U2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Nj
b3BlU3RhY2tbaV07CisgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U2NvcGVTdGFj
a0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwogICAgICAg
ICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUubV9zY29wZS0+aXNJblNo
YWRvd1RyZWUoKTsKICAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsKICAgICAgICAgICAgIGlm
ICghYXBwbHlBdXRob3JTdHlsZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4
ICE9IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KQorICAgICAgICAgICAgaWYgKCFtX3Nj
b3BlUmVzb2x2ZXItPmZyYW1lTWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAgICAKQEAgLTEwODMsMTEgKzg2Niw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0g
cnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50
KCksIHJ1bGUpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgICAgIGlmIChjaGVja1Nl
bGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgewotI2Vsc2UKLSAgICAgICAgaWYgKGNo
ZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0jZW5kaWYKICAgICAgICAgICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIHJ1bGUgaXMgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVlIHNjb3BlLiBD
cml0ZXJpYSBmb3IgdGhpczoKICAgICAgICAgICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAg
ICAgICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCkBAIC0xMDk1
LDkgKzg3NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAgICAgICAgICAgICAvLyBkKSB0
aGUgcnVsZSBjb250YWlucyBzaGFkb3ctSUQgcHNldWRvIGVsZW1lbnRzCiAgICAgICAgICAgICBp
ZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAgICAgICAgICAg
ICAgICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQotI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCiAgICAgICAgICAgICAgICAgJiYgKCFvcHRpb25zLnNjb3BlIHx8IG9wdGlvbnMu
c2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkKLSNlbmRpZgogICAgICAgICAgICAgICAg
ICYmICFtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgewogCiAgICAgICAgICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CkBAIC0x
MjYxLDcgKzEwMzgsNyBAQCBOb2RlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVs
ZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bgogICAgIGlmIChwLT5pc1NW
R0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIGlmIChwLT5o
YXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy0+aWRz
SW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVy
U3R5bGUoKTsKQEAgLTE0MzQsNyArMTIxMSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyKSAhPSBtX2VsZW1lbnQt
PmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNv
bnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAo
ZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLT5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKQEAgLTE1NDMsNyArMTMyMCw3IEBAIFJlbmRl
clN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVy
biAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cg
dXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc0lEKCkg
JiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+aWRGb3JT
dHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc0lE
KCkgJiYgbV9mZWF0dXJlcy0+aWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTI0NzIsMzM5ICsyMjQ5LDYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpkZXRlcm1p
bmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZXMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGlubGluZSBib29sIGlz
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBz
ZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7Ci0gICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNl
ICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpOb25lKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc2VsZWN0b3ItPnRh
ZygpICE9IHN0YXJBdG9tKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNlbGVjdG9y
Q2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIENTU1NlbGVjdG9yTGlz
dCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOwotICAgIGlmICghc2Vs
ZWN0b3JMaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciog
c3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgaWYg
KHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGUpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVh
bGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQuCi0gICAgcmV0dXJuIGF0dHJpYnV0ZSA9
PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0gcmVhZG9ubHlBdHRyOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0
b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRy
aWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQg
bWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJp
YnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9y
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0
aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBzZWxlY3Rv
ciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFn
SGlzdG9yeSgpKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3Rvcigp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUnVsZURhdGE6OlJ1bGVE
YXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9z
aXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCi0gICAgOiBtX3J1bGUocnVsZSkKLSAgICAs
IG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQotICAgICwgbV9wb3NpdGlvbihwb3NpdGlv
bikKLSAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSkKLSAgICAs
IG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVja1NlbGVjdG9yICYmIFNl
bGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCi0gICAg
LCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+dGFnSGlzdG9yeSgpKQotICAg
ICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1Nl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKCkpKQotICAgICwgbV9j
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6Y29udGFpbnNVbmNvbW1v
bkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQotICAgICwgbV9saW5rTWF0Y2hUeXBlKFNl
bGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3RvcigpKSkKLSAgICAs
IG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQot
ICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUpCi17Ci0gICAgQVNTRVJUKG1fcG9z
aXRpb24gPT0gcG9zaXRpb24pOwotICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXggPT0gc2VsZWN0
b3JJbmRleCk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhz
ZWxlY3RvcigpLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMsIG1heGltdW1J
ZGVudGlmaWVyQ291bnQpOwotfQotCi12b2lkIFJ1bGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKLX0KLQotUnVsZVNldDo6UnVsZVNldCgpCi0gICAgOiBtX3J1bGVDb3VudCgwKQotICAg
ICwgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
cG9ydEF0b21SdWxlTWFwKE1lbW9yeUNsYXNzSW5mbyogaW5mbywgY29uc3QgUnVsZVNldDo6QXRv
bVJ1bGVNYXAmIGF0b21pY1J1bGVNYXApCi17Ci0gICAgaW5mby0+YWRkTWVtYmVyKGF0b21pY1J1
bGVNYXApOwotICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT5zZWNvbmQpOwotfQotCi12b2lkIFJ1bGVT
ZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhp
cywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZv
LCBtX2lkUnVsZXMpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2NsYXNzUnVsZXMp
OwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX3RhZ1J1bGVzKTsKLSAgICByZXBvcnRB
dG9tUnVsZU1hcCgmaW5mbywgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwotICAgIGluZm8u
YWRkTWVtYmVyKG1fbGlua1BzZXVkb0NsYXNzUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1f
Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3VuaXZlcnNhbFJ1
bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VSdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1i
ZXIobV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cyk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6UnVs
ZVNldFNlbGVjdG9yUGFpcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlP
YmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5mby5hZGRN
ZW1iZXIocnVsZVNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpJZCkKLSAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpKTsKLSAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkK
LSAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCku
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkp
IHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAgIGZlYXR1
cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9B
ZnRlcjoKLSAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJlc29sdmVyOjpGZWF0
dXJlcyYgZmVhdHVyZXMsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBib29sIGZv
dW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0
b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+
dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0
dXJlcywgc2VsZWN0b3IpOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCog
c2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAgICAgICBm
b3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vi
U2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9y
KSkgewotICAgICAgICAgICAgICAgIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0
b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGlu
Z1NlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2Vs
ZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVj
dG9yKCkpCi0gICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAgfQot
ICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikKLSAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1
bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1
bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpKSk7Ci0gICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cigpKQotICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChTdHls
ZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9y
SW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Ci19Ci0gICAg
Ci12b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21S
dWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBpZiAoIWtleSkK
LSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0g
bWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKCFydWxlcykK
LSAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVs
ZXMtPmFwcGVuZChydWxlRGF0YSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1
bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUp
Ci17Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291
bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3Is
IGluUmVnaW9uUnVsZSk7Ci0gICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVy
ZXMsIHJ1bGVEYXRhKTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNl
bGVjdG9yKCk7Ci0KLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Oklk
KSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRS
dWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0
KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVt
ZW50KCkpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwg
bV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0
b3Ioc2VsZWN0b3IpKSB7Ci0gICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkg
ewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BbnlMaW5rOgotICAgICAgICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVs
ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9Gb2N1czoKLSAgICAgICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChy
dWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygp
LmxvY2FsTmFtZSgpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKLSAgICAgICAg
YWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0
YSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkK
LXsKLSAgICBtX3BhZ2VSdWxlcy5hcHBlbmQocnVsZSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRk
UmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbikKLXsKLSAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1
bGVTZXQ6OmNyZWF0ZSgpOwotICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2Ug
aW50byBhY2NvdW50IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KLSAg
ICAvLyBPdGhlcndpc2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGlu
Y29ycmVjdGx5IHBvc2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQotICAg
IC8vIHRoZSBzdHlsZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KLSAgICBy
ZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OwotCi0gICAgLy8gQ29sbGVj
dCB0aGUgcmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkK
LSAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRy
dWUsIHRydWUpOwotICAgIH0KLSAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQg
c28gdGhhdCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAotICAgIG1fcnVsZUNvdW50ID0gcmVn
aW9uUnVsZVNldC0+bV9ydWxlQ291bnQ7Ci0KLSAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVT
ZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgp
LmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQucmVsZWFzZSgpKSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgQVNTRVJUKHNoZWV0KTsKLSAgICAKLSAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+
aW1wb3J0UnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1w
b3J0UnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkg
JiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxl
LT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNo
ZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwot
ICAgIH0KLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiBy
ZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+
YmFzZVVSTCgpKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYg
cnVsZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBydWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVs
ZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7Ci0g
ICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCAhc2NvcGUpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAgICAg
ICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwotICAg
ICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7Ci0gICAgICAgICAgICBTdHlsZVJ1
bGVNZWRpYSogbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxlKTsK
LQotICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0u
ZXZhbChtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVHJhdmVyc2UgY2hpbGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgotICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRS
dWxlcyA9IG1lZGlhUnVsZS0+Y2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hp
bGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRS
dWxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250RmFj
ZVJ1bGUoKSAmJiByZXNvbHZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRo
aXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5
bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNj
b3BlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRp
Y19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNl
UnVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGls
ZFJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1l
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHls
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCi0gICAgICAgICAg
ICB9IC8vIGlmIHJ1bGVzCi0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUo
KSAmJiByZXNvbHZlcikgewotICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91
ciBzZXQuCi0gICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZv
bnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAg
ICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0
eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAgcmVzb2x2
ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FIChCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJh
bWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7Ci0gICAgICAg
IH0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVn
aW9uUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcy
KTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgIH0KLSAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAg
ICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHls
ZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKLXsKLSAgICBmb3IgKHNpemVf
dCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJ
bmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxl
Y3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1
bGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVT
ZXQ6OkF0b21SdWxlTWFwJiBtYXApCi17Ci0gICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKLSAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPnNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQotewot
ICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOwotICAgIHNocmlua01hcFZlY3Rv
cnNUb0ZpdChtX2NsYXNzUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3RhZ1J1
bGVzKTsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXMpOwotICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2Zv
Y3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fdW5pdmVyc2FsUnVsZXMu
c2hyaW5rVG9GaXQoKTsKLSAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1
ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgog
CkBAIC0zNTAxLDcgKzI5NDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFs
dWUgYWZmZWN0cyB0aGUgc3R5bGUKLSAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRy
c0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mZWF0dXJlcy0+YXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7
CiAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1
ZS0+Z2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBl
IGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwpAQCAtNDgzOSw3ICs0MjgzLDcgQEAgQ29s
b3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWUqIHZhbHVlLCBib29sIGZvclYKIAogYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZv
ckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcgJmF0dHJuYW1lKSBjb25zdAogewotICAgIHJl
dHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5jb250YWlucyhhdHRybmFtZS5pbXBsKCkpOwor
ICAgIHJldHVybiBtX2ZlYXR1cmVzLT5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1w
bCgpKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCkBAIC01
NzY3LDYgKzUyMTEsNyBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29s
dmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRo
aXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5
bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fdXNlclN0eWxlKTsKQEAgLTU3ODUsMTAgKzUyMzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogICAgIGluZm8u
YWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQotICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVkQXV0aG9yU3R5bGVzKTsKLSAg
ICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlU3RhY2spOwotI2VuZGlmCisgICAgaW5mby5hZGRNZW1i
ZXIobV9zY29wZVJlc29sdmVyKTsKIAogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gYSBwbGFj
ZSB3aGVyZSBpdCB3b3VsZCBiZSBjYWxsZWQgb25seSBvbmNlPwogICAgIGluZm8uYWRkTWVtYmVy
KGRlZmF1bHRTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBmMzJjNzEz
YjgxYjA4ZTAwODgyNzU5YTk3MjFjYzI2MDc3YTFiMjBhLi5jZDJlYWU3MWVkZjNlMWRhYjA3MmEz
YTQwNmNkZTRiZTY5ZjlhMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTcz
LDExICs3MywxMyBAQCBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdGF0
aWNDU1NSdWxlTGlzdDsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKK2NsYXNzIFN0eWxlU2NvcGVSZXNv
bHZlcjsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgU3R5
bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgU3R5bGVSdWxl
OworY2xhc3MgU3R5bGVSdWxlRmVhdHVyZVNldDsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsK
IGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247CkBAIC0xNzgsMTQg
KzE4MCw2IEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
cktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZy
YW1lVmFsdWUmKTsKIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgdm9pZCBwdXNoU2Nv
cGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
UGFyZW50KTsKLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsK
LSNlbHNlCi0gICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENv
bnRhaW5lck5vZGUqKSB7IH0KLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUq
KSB7IH0KLSNlbmRpZgotCiBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUg
YmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChv
ciBhIHBzZXVkby1lbGVtZW50KS4KICAgICBlbnVtIENTU1J1bGVGaWx0ZXIgewpAQCAtMjQyLDkg
KzIzNiw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiBy
ZWdpb25FbGVtZW50KTsKIAotICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0
dXJuICFtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIHVzZXNG
aXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1
bGVzOyB9Ci0gICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNTaWJsaW5nUnVs
ZXMoKSBjb25zdDsKKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0OworICAgIGJv
b2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIGNyZWF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0
eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVy
YXRpb25zKTsKICAgICAKQEAgLTI3NCwzMSArMjY4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBs
b2FkUGVuZGluZ1Jlc291cmNlcygpOwogCi0gICAgc3RydWN0IFJ1bGVGZWF0dXJlIHsKLSAgICAg
ICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgICAgICAgICA6IHJ1bGUocnVsZSkK
LSAgICAgICAgICAgICwgc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQotICAgICAgICAgICAg
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAot
ICAgICAgICB7IAotICAgICAgICB9Ci0gICAgICAgIFN0eWxlUnVsZSogcnVsZTsKLSAgICAgICAg
dW5zaWduZWQgc2VsZWN0b3JJbmRleDsKLSAgICAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luOwotICAgIH07Ci0gICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgRmVhdHVyZXMo
KTsKLSAgICAgICAgfkZlYXR1cmVzKCk7Ci0gICAgICAgIHZvaWQgYWRkKGNvbnN0IFN0eWxlUmVz
b2x2ZXI6OkZlYXR1cmVzJik7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0gICAgICAgIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiBz
aWJsaW5nUnVsZXM7Ci0gICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25BdHRyaWJ1
dGVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAgIGJvb2wg
dXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgfTsKLQogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAogICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKQEAgLTM5NSw3ICszNjQsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxS
dWxlU2V0PiBtX2F1dGhvclN0eWxlOwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsK
IAotICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgT3duUHRyPFN0eWxlUnVsZUZlYXR1cmVT
ZXQ+IG1fZmVhdHVyZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CiAg
ICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OwogCkBAIC01MDgs
NiArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0
cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKICAgICBIYXNo
U2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldDsK
KyAgICBPd25QdHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwpAQCAtNTE3
LDM0ICs0ODcsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVm
UHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGNvbnN0IENvbnRhaW5lck5v
ZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4gU2NvcGVkUnVs
ZVNldE1hcDsKLQotICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJO
b2RlKikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJO
b2RlKik7Ci0gICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5v
ZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9PSBtX3Njb3BlU3Rh
Y2tQYXJlbnQ7IH0KLQotICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRBdXRob3JTdHlsZXM7
Ci0gICAgCi0gICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7Ci0gICAgICAgIFNjb3BlU3RhY2tG
cmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KDApLCBtX3J1bGVT
ZXQoMCkgeyB9Ci0gICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSwgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1bGVTZXQpIDogbV9z
Y29wZShzY29wZSksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleChhdXRob3JTdHlsZUJvdW5kc0lu
ZGV4KSwgbV9ydWxlU2V0KHJ1bGVTZXQpIHsgfQotICAgICAgICBjb25zdCBDb250YWluZXJOb2Rl
KiBtX3Njb3BlOwotICAgICAgICBpbnQgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4OwotICAgICAg
ICBSdWxlU2V0KiBtX3J1bGVTZXQ7Ci0gICAgfTsKLSAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3Rh
Y2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMg
d2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQotICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0
cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KLSAgICBWZWN0b3I8U2NvcGVTdGFj
a0ZyYW1lPiBtX3Njb3BlU3RhY2s7Ci0gICAgLy8gRWxlbWVudCBsYXN0IHNlZW4gYXMgcGFyZW50
IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3RhY2suCi0gICAgLy8gVGhp
cyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25z
aXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgot
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsKLSAgICBpbnQgbV9z
Y29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0jZW5kaWYKLQogICAgIENTU1RvU3R5bGVNYXAg
bV9zdHlsZU1hcDsKIAogICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyUnVsZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMjVmMTdiMWVkNmI0
NDAwNTM1NTcwMzczNWM2ZjU5ZGViZDA3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyUnVsZXMuaCIKKworI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRl
ICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNp
bmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMu
aCIKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50
YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFByaXZhdGU7CisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK3ZvaWQgUnVsZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVt
b3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworfQorCitzdGF0
aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm8qIGluZm8sIGNvbnN0IFJ1
bGVTZXQ6OkF0b21SdWxlTWFwJiBhdG9taWNSdWxlTWFwKQoreworICAgIGluZm8tPmFkZE1lbWJl
cihhdG9taWNSdWxlTWFwKTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGF0b21pY1J1bGVNYXAuYmVnaW4oKTsgaXQgIT0gYXRvbWljUnVsZU1hcC5l
bmQoKTsgKytpdCkKKyAgICAgICAgaW5mby0+YWRkTWVtYmVyKCppdC0+c2Vjb25kKTsKK30KKwor
dm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVj
dEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICByZXBvcnRBdG9tUnVs
ZU1hcCgmaW5mbywgbV9pZFJ1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9j
bGFzc1J1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV90YWdSdWxlcyk7Cisg
ICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsK
KyAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzKTsKKyAgICBpbmZvLmFk
ZE1lbWJlcihtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV91
bml2ZXJzYWxSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9wYWdlUnVsZXMpOworICAgIGlu
Zm8uYWRkTWVtYmVyKG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMpOworfQorCit2b2lkIFJ1
bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAg
IGluZm8uYWRkTWVtYmVyKHJ1bGVTZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVj
dEZlYXR1cmVzRnJvbVNlbGVjdG9yKFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCkKKyAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0
b3IoKSkKKyAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmli
dXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9U
eXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6CisgICAgICAg
IGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJ1bGVGZWF0
dXJlU2V0JiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGJvb2wg
Zm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9y
LT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZl
YXR1cmVzLCBzZWxlY3Rvcik7CisgICAgICAgIAorICAgICAgICBpZiAoQ1NTU2VsZWN0b3JMaXN0
KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKKyAgICAgICAgICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBz
dWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0
b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxl
Y3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTaWJs
aW5nU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21T
ZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2Vs
ZWN0b3IoKSkKKyAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQorICAgICAgICBmZWF0dXJlcy5zaWJsaW5n
UnVsZXMuYXBwZW5kKFN0eWxlUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5z
ZWxlY3RvckluZGV4KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOwor
ICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAg
ICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVSdWxlRmVh
dHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEu
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Cit9CisgICAgCit2b2lkIFJ1bGVTZXQ6OmFk
ZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxw
dHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKCFydWxlcykKKyAgICAgICAgcnVsZXMgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7CisgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0
YSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCit7CisgICAgUnVsZURhdGEg
cnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVsZSk7Cisg
ICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKKwor
ICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7CisKKyAgICBp
ZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7CisgICAgICAgIGFkZFRv
UnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywgcnVsZURhdGEpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAg
YWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoU2Vs
ZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKSB7Cisg
ICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9W
aXNpdGVkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgorICAgICAg
ICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAgICAg
ICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgpOworICAg
IGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2Fs
TmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7Cit9CisKK3ZvaWQgUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKK3sKKyAgICBtX3BhZ2VSdWxl
cy5hcHBlbmQocnVsZSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1
bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKK3sK
KyAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwor
ICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBw
b3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KKyAgICAvLyBPdGhlcndpc2UsIHRo
ZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5IHBvc2l0aW9u
ZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQorICAgIC8vIHRoZSBzdHlsZXNoZWV0
IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAgICByZWdpb25SdWxlU2V0LT5tX3J1
bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVz
IGludG8gYSBydWxlIHNldAorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1
bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJlZ2lv
blJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHls
aW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOworICAgIH0K
KyAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhhdCBwcm9wZXIgb3Jk
ZXIgaXMgbWFpbnRhaW5lZAorICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxl
Q291bnQ7CisKKyAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0
U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1
bGVTZXQucmVsZWFzZSgpKSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVk
aXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUp
Cit7CisgICAgQVNTRVJUKHNoZWV0KTsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7
CisgICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5t
ZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwg
cmVzb2x2ZXIpKSkKKyAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0
eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOworICAgIH0KKyAgICBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzaGVldC0+Y2hp
bGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7CisKKyAg
ICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7CisgICAgICAgIGlmIChydWxlLT5p
c1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxl
UnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAg
ICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAgICBhZGRQYWdlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOworICAgICAgICBlbHNlIGlmIChydWxl
LT5pc01lZGlhUnVsZSgpKSB7CisgICAgICAgICAgICBTdHlsZVJ1bGVNZWRpYSogbWVkaWFSdWxl
ID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxlKTsKKworICAgICAgICAgICAgaWYg
KCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChtZWRpYVJ1bGUtPm1l
ZGlhUXVlcmllcygpLCByZXNvbHZlcikpKSB7CisgICAgICAgICAgICAgICAgLy8gVHJhdmVyc2Ug
Y2hpbGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgorICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IG1lZGlhUnVsZS0+
Y2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBj
aGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJh
c2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdl
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91
ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBk
b24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUg
bW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZv
bnRGYWNlKj4oY2hpbGRSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5m
b250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzS2V5ZnJhbWVz
UnVsZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhp
cyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBz
dHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCisgICAgICAgICAgICB9IC8vIGlmIHJ1bGVzCisg
ICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgewor
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAg
ICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBz
Y29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3Bl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4o
cnVsZSk7CisgICAgICAgICAgICByZXNvbHZlci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNl
UnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRj
aGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFt
ZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NjIp
OiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9y
IHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NT
X1JFR0lPTlMpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHJlc29s
dmVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAt
d2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxl
KSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
KyAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQorICAgICAgICBzaHJpbmtUb0ZpdCgp
OworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rvciwg
Ym9vbCBpc0luUmVnaW9uUnVsZSkKK3sKKyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0g
MDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVj
dG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKKyAgICAg
ICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBt
YXApCit7CisgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQo
KTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7
Cit9CisKK3ZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQoreworICAgIHNocmlua01hcFZlY3Rv
cnNUb0ZpdChtX2lkUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2NsYXNzUnVs
ZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3RhZ1J1bGVzKTsKKyAgICBzaHJpbmtN
YXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOworICAgIG1fbGlua1Bz
ZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxl
cy5zaHJpbmtUb0ZpdCgpOworICAgIG1fdW5pdmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAg
ICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlclJ1bGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlclJ1bGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThiOGQxYzkxMTcwMzYxMzBkNjdiY2Q0NmI2
YTU1MTZmZWZlZmJlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyUnVsZXMuaApAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVSZXNvbHZlclJ1
bGVzX2gKKyNkZWZpbmUgU3R5bGVSZXNvbHZlclJ1bGVzX2gKKworI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5o
IgorI2luY2x1ZGUgIlN0eWxlUnVsZUZlYXR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NT
ZWxlY3RvcjsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJ1bGU7CitjbGFzcyBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yOworCitjbGFzcyBSdWxlRGF0YSB7CitwdWJsaWM6CisgICAgUnVs
ZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRp
b24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOworCisgICAgdW5zaWduZWQgcG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9ydWxlOyB9CisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydWxlLT5zZWxlY3Rvckxpc3QoKS5zZWxlY3RvckF0KG1fc2VsZWN0b3JJbmRleCk7
IH0KKyAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rv
ckluZGV4OyB9CisKKyAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNNdWx0aXBh
cnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KKyAg
ICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25S
dWxlSGFzaDsgfQorICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKyAg
ICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0K
KyAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hU
eXBlOyB9CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CisgICAgYm9vbCBpc0luUmVnaW9uUnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKworICAgIC8vIFRyeSB0byBi
YWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0
YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OworICAgIGNvbnN0IHVuc2ln
bmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4g
bV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CisKKyAgICB2b2lkIHJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBT
dHlsZVJ1bGUqIG1fcnVsZTsKKyAgICB1bnNpZ25lZCBtX3NlbGVjdG9ySW5kZXggOiAxMjsKKyAg
ICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHBy
b2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCisgICAgLy8gU29tZSBzaW1wbGUgdGVzdGlu
ZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4KKyAgICB1bnNpZ25l
ZCBtX3Bvc2l0aW9uIDogMjA7CisgICAgdW5zaWduZWQgbV9zcGVjaWZpY2l0eSA6IDI0OworICAg
IHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBt
X2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKKyAgICB1bnNpZ25lZCBtX2Nv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9saW5r
TWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzaworICAgIHVu
c2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7CisgICAgdW5zaWduZWQgbV9p
c0luUmVnaW9uUnVsZSA6IDE7CisgICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBW
ZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFkLgorICAgIHVuc2lnbmVkIG1fZGVzY2Vu
ZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKK307
CisgICAgCitzdHJ1Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKKyAgICB2b2lkKiBhOworICAgIHVu
c2lnbmVkIGI7CisgICAgdW5zaWduZWQgYzsKKyAgICB1bnNpZ25lZCBkWzRdOworfTsKKworQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRh
KSwgUnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwpOworCitjbGFzcyBSdWxlU2V0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKKworICAg
IHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSog
PSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0lu
UmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNh
blVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAg
IHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOworICAgIHZvaWQgYWRkVG9SdWxlU2V0
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwor
ICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2b2lkIGRpc2Fi
bGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9
CisKKyAgICBjb25zdCBTdHlsZVJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXM7IH0KKworICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMo
QXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7
IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0lt
cGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9CisgICAgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25z
dCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29u
c3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMuZ2V0KGtleSk7IH0KKyAgICBj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5rUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0
dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9D
bGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMo
KSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQorICAgIGNvbnN0IFZlY3RvcjxT
dHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9
CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsK
KworcHVibGljOgorICAgIFJ1bGVTZXQoKTsKKworICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsK
KyAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxl
czsKKyAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlczsKKyAgICBWZWN0
b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNzUnVsZXM7CisgICAgVmVjdG9yPFJ1bGVEYXRh
PiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1fdW5pdmVy
c2FsUnVsZXM7CisgICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtX3BhZ2VSdWxlczsKKyAgICB1
bnNpZ25lZCBtX3J1bGVDb3VudDsKKyAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsK
KyAgICBTdHlsZVJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUnVsZVNl
dFNlbGVjdG9yUGFpciB7CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yLCBQYXNzT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Ioc2VsZWN0
b3IpLCBydWxlU2V0KHJ1bGVTZXQpIHsgfQorICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKGNv
bnN0IFJ1bGVTZXRTZWxlY3RvclBhaXImIHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9yKSwgcnVs
ZVNldChjb25zdF9jYXN0PFJ1bGVTZXRTZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0LnJlbGVh
c2UoKSkgeyB9CisgICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5m
byopIGNvbnN0OworCisgICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKKyAgICAgICAgT3du
UHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CisgICAgfTsKKworICAgIFZlY3RvcjxSdWxlU2V0U2VsZWN0
b3JQYWlyPiBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzOworfTsKKworbmFtZXNwYWNlIFBy
aXZhdGUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitpbmxpbmUgYm9vbCBpc1Nl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTmFtZXNwYWNlID0gc2Vs
ZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVSSSgpOworICAgIGlmIChzZWxlY3Rvck5hbWVzcGFjZSAh
PSBzdGFyQXRvbSAmJiBzZWxlY3Rvck5hbWVzcGFjZSAhPSB4aHRtbE5hbWVzcGFjZVVSSSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHNlbGVjdG9yLT50YWco
KSAhPSBzdGFyQXRvbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChTZWxlY3RvckNo
ZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOworfQorCitpbmxp
bmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0
b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOworICAgIGlmICghc2VsZWN0b3JMaXN0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0
b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENT
U1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKHN1YlNlbGVj
dG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBpc0NvbW1vbkF0dHJpYnV0
ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKK3sKKyAg
ICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIGNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudC4KKyAgICByZXR1cm4gYXR0cmlidXRlID09IHR5cGVBdHRyIHx8IGF0
dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Cit9CisKK2lubGluZSBib29sIGNvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAg
Zm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAg
ICAgICAgLy8gQWxsb3cgY2VydGFpbiBjb21tb24gYXR0cmlidXRlcyAodXNlZCBpbiB0aGUgZGVm
YXVsdCBzdHlsZSkgaW4gdGhlIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IGVsZW1l
bnQuCisgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmICFpc0Nv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3RvcikgeworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9y
eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKDsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBp
ZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30KKworaW5saW5lIFJ1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1
bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3Is
IGJvb2wgaW5SZWdpb25SdWxlKQorICAgIDogbV9ydWxlKHJ1bGUpCisgICAgLCBtX3NlbGVjdG9y
SW5kZXgoc2VsZWN0b3JJbmRleCkKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBt
X3NwZWNpZmljaXR5KHNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkpCisgICAgLCBtX2hhc0Zhc3RD
aGVja2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNr
ZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwgbV9oYXNNdWx0
aXBhcnRTZWxlY3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKKyAgICAsIG1faGFzUmln
aHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goUHJpdmF0ZTo6aXNTZWxl
Y3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKKyAgICAsIG1fY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OlByaXZhdGU6OmNvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcigpKSkKKyAgICAsIG1fbGlua01hdGNo
VHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IoKSkp
CisgICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQoreworICAgIEFTU0VS
VChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKKyAgICBBU1NFUlQobV9zZWxlY3RvckluZGV4ID09
IHNlbGVjdG9ySW5kZXgpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJI
YXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBt
YXhpbXVtSWRlbnRpZmllckNvdW50KTsKK30KKworaW5saW5lIFJ1bGVTZXQ6OlJ1bGVTZXQoKQor
ICAgIDogbV9ydWxlQ291bnQoMCkKKyAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCh0cnVl
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHlsZVJlc29s
dmVyUnVsZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUZlYXR1
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjAwYTZiZTc5YzBjZjkwYjc2YmU1ZGUwZmI1MzBmMGU3ZWQ0MjBiOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVGZWF0dXJlLmgKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFN0eWxlUnVsZUZlYXR1cmVfaAorI2RlZmluZSBTdHlsZVJ1bGVGZWF0dXJlX2gK
KworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTdHlsZVJ1bGU7CisKK2NsYXNzIFN0eWxlUnVsZUZlYXR1cmUgeworcHVibGljOgorICAg
IFN0eWxlUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCisgICAgICAgIDogcnVsZShydWxlKQor
ICAgICAgICAsIHNlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkKKyAgICAgICAgLCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAorICAgIHsgCisg
ICAgfQorCisgICAgU3R5bGVSdWxlKiBydWxlOworICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXg7
CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOworfTsKKworY2xhc3MgU3R5bGVS
dWxlRmVhdHVyZVNldCB7CitwdWJsaWM6CisgICAgU3R5bGVSdWxlRmVhdHVyZVNldCgpOworICAg
IH5TdHlsZVJ1bGVGZWF0dXJlU2V0KCk7CisgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSdWxlRmVh
dHVyZVNldCYpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiBpZHNJblJ1bGVzOworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxl
czsKKyAgICBWZWN0b3I8U3R5bGVSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOworICAgIFZlY3Rv
cjxTdHlsZVJ1bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOworICAgIGJvb2wgdXNl
c0ZpcnN0TGluZVJ1bGVzOworICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Cit9OworCitp
bmxpbmUgU3R5bGVSdWxlRmVhdHVyZVNldDo6U3R5bGVSdWxlRmVhdHVyZVNldCgpCisgICAgOiB1
c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCisgICAgLCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxz
ZSkKK3sKK30KKworaW5saW5lIFN0eWxlUnVsZUZlYXR1cmVTZXQ6On5TdHlsZVJ1bGVGZWF0dXJl
U2V0KCkKK3sKK30KKyAgICAKK2lubGluZSB2b2lkIFN0eWxlUnVsZUZlYXR1cmVTZXQ6OmFkZChj
b25zdCBTdHlsZVJ1bGVGZWF0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gb3RoZXIuaWRzSW5SdWxlcy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9IG90aGVyLmlkc0lu
UnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZHNJblJ1bGVzLmFkZCgq
aXQpOworICAgIGVuZCA9IG90aGVyLmF0dHJzSW5SdWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9IG90aGVyLmF0dHJzSW5SdWxlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGF0dHJzSW5SdWxlcy5hZGQoKml0KTsK
KyAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNpYmxpbmdSdWxlcyk7CisgICAgdW5jb21t
b25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Cisg
ICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IG90aGVyLnVzZXNG
aXJzdExpbmVSdWxlczsKKyAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHVzZXNCZWZvcmVBZnRl
clJ1bGVzIHx8IG90aGVyLnVzZXNCZWZvcmVBZnRlclJ1bGVzOworfQorCitpbmxpbmUgdm9pZCBT
dHlsZVJ1bGVGZWF0dXJlU2V0OjpjbGVhcigpCit7CisgICAgaWRzSW5SdWxlcy5jbGVhcigpOwor
ICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOworICAgIHNpYmxpbmdSdWxlcy5jbGVhcigpOworICAg
IHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIoKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMg
PSBmYWxzZTsKKyAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGZhbHNlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHlsZVJ1bGVGZWF0dXJlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmUxOTM1ODRjZjgy
YjYyNjAzZDc2YmQzNTA2MmI3ODdkZGRkZWE1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCisKKyNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUg
IkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlclJ1bGVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
TWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U3R5bGVTY29wZVJlc29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIoKQorICAgIDogbV9zdGFja1Bh
cmVudCgwKQorICAgICwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4KDApCit7Cit9CisKK1N0eWxl
U2NvcGVSZXNvbHZlcjo6flN0eWxlU2NvcGVSZXNvbHZlcigpCit7Cit9CisKK2NvbnN0IENvbnRh
aW5lck5vZGUqIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY29uc3QgQ1NTU3R5bGVTaGVl
dCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHNoZWV0LT5vd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChk
b2N1bWVudCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogb3duZXJOb2RlID0gc2hl
ZXQtPm93bmVyTm9kZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRN
TEVsZW1lbnQoKSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICgh
c3R5bGVFbGVtZW50LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+aXNJ
blNoYWRvd1RyZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFkb3dSb290KCkgOiAwOworCisgICAgQ29u
dGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYg
KCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxl
bWVudE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisK
K2lubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJ1bGVTZXRGb3IoY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0Cit7CisgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1
cm4gaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9
CisKK1J1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcihjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKKyAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmdldCgpOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTdGFjayhjb25z
dCBDb250YWluZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBz
dGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdo
ZXJlLgorICAgIEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKKworICAgIG1fc3Rh
Y2suc2hyaW5rKDApOworICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKKyAgICBm
b3IgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBz
Y29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBy
dWxlU2V0Rm9yKHNjb3BlKTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICBtX3N0
YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91bmRzSW5kZXgs
IHJ1bGVTZXQpKTsKKyAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFk
b3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgICAgIC0tYXV0aG9y
U3R5bGVCb3VuZHNJbmRleDsKKyAgICB9CisKKyAgICBtX3N0YWNrLnJldmVyc2UoKTsKKyAgICBt
X3N0YWNrUGFyZW50ID0gcGFyZW50OworICAgIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA9IDA7
Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKK3sKKyAgICAvLyBTaG9y
dGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5
bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlmIChtX2F1dGhvclN0eWxlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YWNrUGFyZW50KTsKKyAgICAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUgd2UgbWF5IGdldCBpbnZv
a2VkIGZvciByYW5kb20gZWxlbWVudHMuCisgICAgLy8gUmVjcmVhdGUgdGhlIHdob2xlIHNjb3Bp
bmcgZWxlbWVudCBzdGFjayBpbiBzdWNoIGNhc2VzLgorICAgIGlmICghc3RhY2tJc0NvbnNpc3Rl
bnQoc2NvcGVQYXJlbnQpKSB7CisgICAgICAgIHNldHVwU3RhY2soc2NvcGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFk
b3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgKyttX3N0YWNrUGFy
ZW50Qm91bmRzSW5kZXg7CisgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9u
dG8gdGhlIHN0YWNrLgorICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsK
KyAgICBpZiAocnVsZVNldCkKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1l
KHNjb3BlLCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKKyAgICBtX3N0YWNr
UGFyZW50ID0gc2NvcGU7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwb3AoY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRo
ZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KKyAgICBpZiAoc3Rh
Y2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7CisgICAgICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkg
JiYgbV9zdGFjay5sYXN0KCkubV9zY29wZSA9PSBzY29wZSkKKyAgICAgICAgICAgIG1fc3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1No
YWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgLS1tX3N0
YWNrUGFyZW50Qm91bmRzSW5kZXg7CisgICAgICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZS0+cGFy
ZW50T3JIb3N0Tm9kZSgpOworICAgIH0KK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNv
bGxlY3RGZWF0dXJlc1RvKFN0eWxlUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQoreworICAgIGZv
ciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdpbigp
OyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgZmVhdHVyZXMuYWRk
KGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBX
ZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHls
ZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY2NDcxNTYwMDVjNmRhZTlkNzk5ZDAwYjZiYTIyMGJhNTVhNjc1MzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVTY29wZVJlc29sdmVyX2gKKyNkZWZpbmUgU3R5
bGVTY29wZVJlc29sdmVyX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBS
dWxlU2V0OworY2xhc3MgU3R5bGVSdWxlRmVhdHVyZVNldDsKKworI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCisKK2NsYXNzIFN0eWxlU2NvcGVSZXNvbHZlciB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRS
dWxlU2V0TWFwOworCisgICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7CisgICAgICAgIFNjb3Bl
U3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KDApLCBt
X3J1bGVTZXQoMCkgeyB9CisgICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSwgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1bGVTZXQp
CisgICAgICAgICAgICA6IG1fc2NvcGUoc2NvcGUpLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgo
YXV0aG9yU3R5bGVCb3VuZHNJbmRleCksIG1fcnVsZVNldChydWxlU2V0KQorICAgICAgICB7IH0K
KworICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlOworICAgICAgICBpbnQgbV9h
dXRob3JTdHlsZUJvdW5kc0luZGV4OworICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7CisgICAg
fTsKKworICAgIFN0eWxlU2NvcGVSZXNvbHZlcigpOworICAgIH5TdHlsZVNjb3BlUmVzb2x2ZXIo
KTsKKworICAgIHN0YXRpYyBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZUZvcihjb25zdCBDU1NT
dHlsZVNoZWV0Kik7CisKKyAgICB2b2lkIHB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KTsKKyAgICB2b2lkIHBvcChjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBoYXNTY29wZWQoKSBjb25zdCB7IHJldHVy
biAhbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpOyB9CisgICAgUnVsZVNldCogcnVsZVNldEZvcihj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3Q7CisgICAgUnVsZVNldCogZW5zdXJlUnVs
ZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBlbnN1cmVTdGFj
a0NvbnNpc3RlbmN5KENvbnRhaW5lck5vZGUqKTsKKyAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBj
b25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQorICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFt
ZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N0YWNrLmF0
KGluZGV4KTsgfQorICAgIGJvb2wgZnJhbWVNYXRjaGVzU3R5bGVCb3VuZHMoY29uc3QgU2NvcGVT
dGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5k
c0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQorICAgIHZvaWQgY29sbGVjdEZl
YXR1cmVzVG8oU3R5bGVSdWxlRmVhdHVyZVNldCYpOworCisgICAgdm9pZCByZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXR1
cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKKyAgICBib29sIHN0YWNrSXNDb25zaXN0ZW50
KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBh
cmVudCA9PSBtX3N0YWNrUGFyZW50OyB9CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXV0aG9y
U3R5bGVzOworCisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNr
IG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVk
PiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0
eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4gbV9zdGFjazsKKyAg
ICAvLyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1f
c2NvcGluZ0VsZW1lbnRTdGFjay4KKyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRo
ZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBT
ZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
bV9zdGFja1BhcmVudDsKKyAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworfTsKKwor
aW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENv
bnRhaW5lck5vZGUqIHBhcmVudCkKK3sKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVz
IGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0
IGdvdCBpbmNvbnNpc3RlbnQpLgorICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkK
KyAgICAgICAgc2V0dXBTdGFjayhwYXJlbnQpOworICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5
KCk7Cit9CisKKyNlbHNlCitjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXIgeworcHVibGljOgorICAg
IHZvaWQgcHVzaChjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIE5P
X1JFVFVSTiB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCBwb3AoY29uc3QgQ29u
dGFpbmVyTm9kZSopIE5PX1JFVFVSTiB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCisj
ZW5kaWYgLy8gRU5BQkxFKFNUWUxFX1NDT1BFRCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU3R5bGVTY29wZVJlc29sdmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167292</attachid>
            <date>2012-10-05 02:49:52 -0700</date>
            <delta_ts>2012-10-05 03:21:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98244-20121005184900.patch</filename>
            <type>text/plain</type>
            <size>27335</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDJkMmM5
M2U4MTM1Yjc3ZDVkMGQ0ZmM2YTk3ZGMzMDFiNTVkMWEyOTkuLmY2YmRmNzM0ODY2MmNjYWE5ZjAx
N2Q4NjQ5MTUyNjc2OGU4OTY1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYgKzEw
ODEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCiAg
ICAgY3NzL1N0eWxlUnVsZS5jcHAKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAorICAgIGNz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXQuY3BwCiAgICAgY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5jcHAKICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiODhmOWRjOTZhODAyZjlhNDNlMGQ3YzZjMTMw
MGMyNmM4MTVhZGNhLi5iMjZhMTliZjFlYTQ0ZjRhYzZmYTBjYTFhY2FkMWU3ODc1MjZjOTJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2MzQsNiArMjYzNCw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZUltcG9ydC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IDA3OGI2OWFhMjczNDQ2MDAwNDRiOTAyY2NhNTVkMzFmN2VlZjEy
NTUuLmNiZTk5NzI5NTMwYzY1ZWMxOTAxNDIyNTgwOWE0MzRkZWUzMmUxODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMzI0LDYgKzMyNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9TdHlsZVJlc29sdmVy
LmNwcCBcCiAgICAgY3NzL1N0eWxlUnVsZS5jcHAgXAogICAgIGNzcy9TdHlsZVJ1bGVJbXBvcnQu
Y3BwIFwKKyAgICBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBcCiAgICAgY3NzL1N0eWxlU2hl
ZXQuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBcCiAgICAgY3NzL1N0eWxl
U2hlZXRMaXN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDEyMWI3ZDEwYjA4YmI4NjQwZWQ5
MjI2OGEwYzQzNGNjZjEyNGViMy4uYmE5ZjQ3ZjNjNWQwNzc4YTM1ZWFmOTg5YzBkZDg3ZGU2ZTNi
MDU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjYzNiw2ICsyNjM2LDggQEAKICAgICAgICAgICAg
ICdjc3MvU3R5bGVSdWxlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3Bw
JywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlSW1wb3J0LmgnLAorICAgICAgICAgICAgJ2Nz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVTY29wZVJl
c29sdmVyLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0LmNwcCcsCiAgICAgICAgICAg
ICAnY3NzL1N0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKaW5kZXggMDFkZGIyZDcxNjE5OGQx
MzQ2Y2ZmNTIyODI5NGEwZmMxMDk0ODkyMy4uODRmOWZlN2Y0M2M4OWU1YmRkMWUwYTFiZWI4MGU0
NjhjOGNhN2MzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCkBAIC03MiwzICs3Miw0
IEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5jcHAiCisjaW5jbHVk
ZSAiU3R5bGVTY29wZVJlc29sdmVyLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAppbmRleCBlNGJhMGE4ZmVlMTIyNjQxYzZkOGM3MGMxZDAwNTBlNzc0NTVhZTQwLi5iZmE0OTVk
YWZiNmZjYzhkN2Q0Mjk1Mzk2ZDZmMWU3MTMxNDVhY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAKICNpbmNsdWRlICJTdHlsZVBlbmRpbmdJ
bWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9y
dC5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hl
ZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgpAQCAtMjg3LDEwICsyODgsNiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERv
Y3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQogICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKICNlbmRp
ZgotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgLCBtX3Njb3BlU3RhY2tQYXJlbnQoMCkK
LSAgICAsIG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KDApCi0jZW5kaWYKICAgICAsIG1f
c3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOwpAQCAtMzk1LDEwICszOTIsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RGZWF0dXJlcygpCiAgICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgogICAgIG1fZmVhdHVyZXMu
YWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7CiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRo
b3JTdHlsZS0+ZmVhdHVyZXMoKSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBmb3Ig
KFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVn
aW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1f
ZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOwotI2VuZGlmCisgICAgaWYgKG1f
c2NvcGVyKQorICAgICAgICBtX3Njb3Blci0+Y29sbGVjdEZlYXR1cmVzVG8obV9mZWF0dXJlcyk7
CiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHls
ZS0+ZmVhdHVyZXMoKSk7CiAKQEAgLTQwNiwzOCArNDAxLDYgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0ID0gbWFr
ZVJ1bGVTZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKIH0KIAotI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVyOjpk
ZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKLXsKLSAgICBBU1NFUlQo
c2hlZXQpOwotCi0gICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChk
b2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUgPSBz
aGVldC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNI
VE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRh
ZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Ci0gICAgaWYg
KCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5p
c0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7Ci0KLSAgICBD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKHBhcmVudC0+aXNF
bGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsKLX0K
LQotaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKLXsKLSAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRI
VE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBTY29wZWRSdWxlU2V0TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwot
ICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQu
Z2V0KCkgOiAwOyAKLX0KLSNlbmRpZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0aG9y
U3R5bGUoKQogewogICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKQEAgLTQ1
OCwxNiArNDIxLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGlmIChjc3NT
aGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1fbWVkaXVtLT5ldmFsKGNzc1NoZWV0LT5tZWRpYVF1
ZXJpZXMoKSwgdGhpcykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3R5bGVTaGVl
dENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwotI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCi0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5l
U2NvcGUoY3NzU2hlZXQpOwotICAgICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgIFNjb3Bl
ZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5h
ZGQoc2NvcGUsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICBpZiAo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9y
KGNzc1NoZWV0KSkgeworICAgICAgICAgICAgaWYgKCFtX3Njb3BlcikKKyAgICAgICAgICAgICAg
ICBtX3Njb3BlciA9IGFkb3B0UHRyKG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAg
ICAgICBtX3Njb3Blci0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0
KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIGlmICghbV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVldCk7CkBAIC00NzksNjIgKzQz
OCw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWdu
ZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCi0jaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNr
KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKLXsKLSAgICAvLyBUaGUgc2NvcGluZyBlbGVt
ZW50IHN0YWNrIHNob3VsZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQg
YW55d2hlcmUuCi0gICAgQVNTRVJUKCFtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpOwot
Ci0gICAgbV9zY29wZVN0YWNrLnNocmluaygwKTsKLSAgICBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJ
bmRleCA9IDA7Ci0gICAgZm9yIChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IHBhcmVudDsg
c2NvcGU7IHNjb3BlID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAgICBSdWxl
U2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKLSAgICAgICAgaWYgKHJ1bGVT
ZXQpCi0gICAgICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShzY29w
ZSwgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgICAgICBpZiAoc2NvcGUt
PmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxl
cygpKQotICAgICAgICAgICAgLS1hdXRob3JTdHlsZUJvdW5kc0luZGV4OwotICAgIH0KLSAgICBt
X3Njb3BlU3RhY2sucmV2ZXJzZSgpOwotICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHBhcmVudDsK
LSAgICBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleCA9IDA7Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6cHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZVBhcmVudCkKLXsKLSAgICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVy
IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1
c2VkIGFueXdoZXJlLgotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQVNTRVJUKCFtX3Njb3BlU3RhY2tQYXJlbnQpOwotICAgICAgICBBU1NFUlQobV9z
Y29wZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4g
c29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQg
Zm9yIHJhbmRvbSBlbGVtZW50cy4KLSAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBl
bGVtZW50IHN0YWNrIGluIHN1Y2ggY2FzZXMuCi0gICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0
ZW50KHNjb3BlUGFyZW50KSkgewotICAgICAgICBzZXR1cFNjb3BlU3RhY2soc2NvcGUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRv
U2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICsrbV9zY29w
ZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUg
cGFyZW50IG9udG8gdGhlIHN0YWNrLgotICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9y
U2NvcGUoc2NvcGUpOwotICAgIGlmIChydWxlU2V0KQotICAgICAgICBtX3Njb3BlU3RhY2suYXBw
ZW5kKFNjb3BlU3RhY2tGcmFtZShzY29wZSwgbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXgs
IHJ1bGVTZXQpKTsKLSAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZTsKLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjpwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKLXsKLSAg
ICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBp
dCBpcyBjb25zaXN0ZW50LgotICAgIGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkg
ewotICAgICAgICBpZiAoIW1fc2NvcGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY29wZVN0YWNrLmxh
c3QoKS5tX3Njb3BlID09IHNjb3BlKQotICAgICAgICAgICAgbV9zY29wZVN0YWNrLnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290
KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAgICAgICAgICAgIC0tbV9zY29wZVN0YWNr
UGFyZW50Qm91bmRzSW5kZXg7Ci0gICAgICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNjb3BlLT5w
YXJlbnRPckhvc3ROb2RlKCk7Ci0gICAgfQotfQotI2VuZGlmCi0KIHZvaWQgU3R5bGVSZXNvbHZl
cjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogewogICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIHBhcmVudHNQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKTsK
QEAgLTU0OSw3ICs0NTIsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50
KEVsZW1lbnQqIHBhcmVudCkKICAgICAgICAgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsK
IAogICAgIC8vIE5vdGU6IFdlIG11c3RuJ3Qgc2tpcCBTaGFkb3dSb290IG5vZGVzIGZvciB0aGUg
c2NvcGUgc3RhY2suCi0gICAgcHVzaFNjb3BlKHBhcmVudCwgcGFyZW50LT5wYXJlbnRPckhvc3RO
b2RlKCkpOworICAgIGlmIChtX3Njb3BlcikKKyAgICAgICAgbV9zY29wZXItPnB1c2gocGFyZW50
LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCkBAIC01NTgsMTkgKzQ2MiwyMiBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAg
IC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCiAgICAgaWYgKG1f
Y2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQogICAgICAgICBtX2NoZWNr
ZXIucG9wUGFyZW50KCk7Ci0gICAgcG9wU2NvcGUocGFyZW50KTsKKyAgICBpZiAobV9zY29wZXIp
CisgICAgICAgIG1fc2NvcGVyLT5wb3AocGFyZW50KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjpwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewog
ICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIHB1c2hTY29wZShzaGFkb3dSb290
LCBzaGFkb3dSb290LT5ob3N0KCkpOworICAgIGlmIChtX3Njb3BlcikKKyAgICAgICAgbV9zY29w
ZXItPnB1c2goc2hhZG93Um9vdCwgc2hhZG93Um9vdC0+aG9zdCgpKTsKIH0KIAogdm9pZCBTdHls
ZVJlc29sdmVyOjpwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QpCiB7CiAgICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcG9wU2NvcGUoc2hh
ZG93Um9vdCk7CisgICAgaWYgKG1fc2NvcGVyKQorICAgICAgICBtX3Njb3Blci0+cG9wKHNoYWRv
d1Jvb3QpOwogfQogCiAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0
aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKQEAgLTgxMCwyNiArNzE3LDI0IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQp
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKCFt
X3Njb3BlciB8fCAhbV9zY29wZXItPmhhc1Njb3BlZFN0eWxlcygpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNj
b3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgot
ICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lzdGVudChtX2VsZW1lbnQpKQotICAgICAgICBzZXR1
cFNjb3BlU3RhY2sobV9lbGVtZW50KTsKLSAgICBpZiAobV9zY29wZVN0YWNrLmlzRW1wdHkoKSkK
KyAgICBpZiAoIW1fc2NvcGVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQt
PnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgIGJvb2wgZG9jdW1lbnRTY29w
ZSA9IHRydWU7Ci0gICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVN0YWNrLnNpemUoKTsK
KyAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3Blci0+c3RhY2tTaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNj
b3BlU3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlU3RhY2tbaV07CisgICAgICAgIGNvbnN0IFN0
eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Blci0+c3RhY2tGcmFt
ZUF0KGkpOwogICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUu
bV9zY29wZS0+aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsK
ICAgICAgICAgICAgIGlmICghYXBwbHlBdXRob3JTdHlsZXMpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUubV9hdXRob3JT
dHlsZUJvdW5kc0luZGV4ICE9IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KQorICAgICAg
ICAgICAgaWYgKCFtX3Njb3Blci0+bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAgICAKQEAgLTkzNCwxMSArODM5
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUg
PSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1l
bnQoKSwgcnVsZSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICAgICAgaWYgKGNoZWNr
U2VsZWN0b3IocnVsZURhdGEsIG9wdGlvbnMuc2NvcGUpKSB7Ci0jZWxzZQotICAgICAgICBpZiAo
Y2hlY2tTZWxlY3RvcihydWxlRGF0YSkpIHsKLSNlbmRpZgogICAgICAgICAgICAgLy8gQ2hlY2sg
d2hldGhlciB0aGUgcnVsZSBpcyBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUu
IENyaXRlcmlhIGZvciB0aGlzOgogICAgICAgICAgICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKICAg
ICAgICAgICAgIC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKQEAgLTk0
Niw5ICs4NDcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaQogICAgICAgICAgICAgLy8gZCkg
dGhlIHJ1bGUgY29udGFpbnMgc2hhZG93LUlEIHBzZXVkbyBlbGVtZW50cwogICAgICAgICAgICAg
aWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAg
ICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKLSNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQogICAgICAgICAgICAgICAgICYmICghb3B0aW9ucy5zY29wZSB8fCBvcHRpb25z
LnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0cmVlU2NvcGUpCi0jZW5kaWYKICAgICAgICAgICAgICAg
ICAmJiAhbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpIHsKIAogICAgICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwpAQCAt
NTMwMywxMCArNTIwMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZH
RG9jdW1lbnRzKTsKICNlbmRpZgotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaW5mby5h
ZGRNZW1iZXIobV9zY29wZWRBdXRob3JTdHlsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2Nv
cGVTdGFjayk7Ci0jZW5kaWYKKyAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3Blcik7CiAKICAgICAv
LyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9u
bHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0U3R5bGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggYWZiN2E0ODU2MmFkNzhmZDI5YzAyNGEzNjdiNGUyODZmZmVi
MzE2Ni4uNDNlM2YwOTMyZWU5NWRmNTk5ZjU3YTRhMWJkZTIyYmViYzM1YWFmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC03NCw2ICs3NCw3IEBAIGNsYXNzIFJ1bGVTZXQ7CiBj
bGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwogY2xhc3MgU3R5bGVCdWls
ZGVyOworY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNz
IFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKQEAgLTE3OSwxNCArMTgw
LDYgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVW
YWx1ZSYpOwogCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHB1c2hTY29wZShj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJl
bnQpOwotICAgIHZvaWQgcG9wU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwotI2Vs
c2UKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgQ29udGFp
bmVyTm9kZSopIHsgfQotICAgIHZvaWQgcG9wU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSopIHsg
fQotI2VuZGlmCi0KIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNr
IHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEg
cHNldWRvLWVsZW1lbnQpLgogICAgIGVudW0gQ1NTUnVsZUZpbHRlciB7CkBAIC00OTMsMzQgKzQ4
Niw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2Vi
S2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7CiAjZW5kaWYK
IAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0
ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCopOwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PGNvbnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFw
OwotCi0gICAgUnVsZVNldCogcnVsZVNldEZvclNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsK
LSAgICBib29sIHNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFy
ZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1fc2NvcGVTdGFja1BhcmVu
dDsgfQotCi0gICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZEF1dGhvclN0eWxlczsKLSAgICAK
LSAgICBzdHJ1Y3QgU2NvcGVTdGFja0ZyYW1lIHsKLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKCkg
OiBtX3Njb3BlKDApLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoMCksIG1fcnVsZVNldCgwKSB7
IH0KLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBp
bnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgUnVsZVNldCogcnVsZVNldCkgOiBtX3Njb3BlKHNj
b3BlKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KGF1dGhvclN0eWxlQm91bmRzSW5kZXgpLCBt
X3J1bGVTZXQocnVsZVNldCkgeyB9Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2Nv
cGU7Ci0gICAgICAgIGludCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXg7Ci0gICAgICAgIFJ1bGVT
ZXQqIG1fcnVsZVNldDsKLSAgICB9OwotICAgIC8vIFZlY3RvciAodXNlZCBhcyBzdGFjaykgdGhh
dCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50cyB3aXRoIGEg
PHN0eWxlIHNjb3BlZD4gY2hpbGQpCi0gICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIHRyZWUgaXRl
cmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgotICAgIFZlY3RvcjxTY29wZVN0YWNrRnJhbWU+
IG1fc2NvcGVTdGFjazsKLSAgICAvLyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVu
dCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRTdGFjay4KLSAgICAvLyBUaGlzIGlzIHVz
ZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQs
IHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCi0gICAgY29u
c3QgQ29udGFpbmVyTm9kZSogbV9zY29wZVN0YWNrUGFyZW50OwotICAgIGludCBtX3Njb3BlU3Rh
Y2tQYXJlbnRCb3VuZHNJbmRleDsKLSNlbmRpZgotCisgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNv
bHZlcj4gbV9zY29wZXI7CiAgICAgQ1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogCiAgICAgZnJp
ZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWViMDEzN2ViZWZmMzc5ZDA4ZTYzMWNmZGMzYmM1NjVlZDhl
YzdlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVz
b2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3R5bGVTY29wZVJlc29sdmVyLmgiCisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorCisjaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJSdWxlRmVhdHVyZS5oIgorI2luY2x1ZGUgIlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJTaGFk
b3dSb290LmgiCisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVTY29w
ZVJlc29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIoKQorICAgIDogbV9zdGFja1BhcmVudCgwKQor
ICAgICwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4KDApCit7Cit9CisKK1N0eWxlU2NvcGVSZXNv
bHZlcjo6flN0eWxlU2NvcGVSZXNvbHZlcigpCit7Cit9CisKK2NvbnN0IENvbnRhaW5lck5vZGUq
IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQp
Cit7CisgICAgQVNTRVJUKHNoZWV0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNoZWV0
LT5vd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChkb2N1bWVudCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPm93bmVy
Tm9kZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQo
KSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVt
ZW50LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+aXNJblNoYWRvd1Ry
ZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFkb3dSb290KCkgOiAwOworCisgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5vZGUo
KSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGluZSBS
dWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpIGNvbnN0Cit7CisgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0g
bV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisKK1J1bGVT
ZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcihjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSkKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNl
dDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgp
OworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTdGFjayhjb25zdCBDb250YWlu
ZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91
bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAg
IEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKKworICAgIG1fc3RhY2suc2hyaW5r
KDApOworICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKKyAgICBmb3IgKGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9y
KHNjb3BlKTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICBtX3N0YWNrLmFwcGVu
ZChTdGFja0ZyYW1lKHNjb3BlLCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBydWxlU2V0KSk7Cisg
ICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSkt
PmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICAgICAtLWF1dGhvclN0eWxlQm91bmRzSW5k
ZXg7CisgICAgfQorCisgICAgbV9zdGFjay5yZXZlcnNlKCk7CisgICAgbV9zdGFja1BhcmVudCA9
IHBhcmVudDsKKyAgICBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXggPSAwOworfQorCit2b2lkIFN0
eWxlU2NvcGVSZXNvbHZlcjo6cHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpCit7CisgICAgLy8gU2hvcnRjdXQ6IERvbid0IGJv
dGhlciB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNu
J3QgdXNlZCBhbnl3aGVyZS4KKyAgICBpZiAobV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEFTU0VSVCghbV9zdGFja1BhcmVudCk7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmlz
RW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbiBzb21lIHdhY2t5
IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9t
IGVsZW1lbnRzLgorICAgIC8vIFJlY3JlYXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3Rh
Y2sgaW4gc3VjaCBjYXNlcy4KKyAgICBpZiAoIXN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50
KSkgeworICAgICAgICBzZXR1cFN0YWNrKHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSkt
PmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICsrbV9zdGFja1BhcmVudEJvdW5kc0luZGV4
OworICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4K
KyAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29wZSk7CisgICAgaWYgKHJ1bGVT
ZXQpCisgICAgICAgIG1fc3RhY2suYXBwZW5kKFN0YWNrRnJhbWUoc2NvcGUsIG1fc3RhY2tQYXJl
bnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOworICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZTsKK30K
Kwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBz
dGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgorICAgIGlmIChzdGFja0lzQ29uc2lzdGVudChzY29w
ZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHkoKSAmJiBtX3N0YWNrLmxhc3QoKS5t
X3Njb3BlID09IHNjb3BlKQorICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
ICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFw
cGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICAgICAtLW1fc3RhY2tQYXJlbnRCb3VuZHNJbmRl
eDsKKyAgICAgICAgbV9zdGFja1BhcmVudCA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCk7Cisg
ICAgfQorfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVs
ZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5l
bmQoKTsgKytpdCkKKyAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkp
OworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0lu
Zm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7
CisgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZXMpOworICAgIGluZm8uYWRkTWVtYmVy
KG1fc3RhY2spOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZTIwOGMxNTBi
MTY4YWE5YTEzNGZmY2IwN2Q1YjZjMTU5ZTM4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U3R5bGVTY29wZVJlc29sdmVyX2gKKyNkZWZpbmUgU3R5bGVTY29wZVJlc29sdmVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9k
ZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgUnVsZUZlYXR1
cmVTZXQ7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorCitjbGFzcyBTdHlsZVNjb3BlUmVz
b2x2ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2Rl
KiwgT3duUHRyPFJ1bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIHN0cnVjdCBTdGFj
a0ZyYW1lIHsKKyAgICAgICAgU3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHls
ZUJvdW5kc0luZGV4KDApLCBtX3J1bGVTZXQoMCkgeyB9CisgICAgICAgIFN0YWNrRnJhbWUoY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBSdWxl
U2V0KiBydWxlU2V0KQorICAgICAgICAgICAgOiBtX3Njb3BlKHNjb3BlKSwgbV9hdXRob3JTdHls
ZUJvdW5kc0luZGV4KGF1dGhvclN0eWxlQm91bmRzSW5kZXgpLCBtX3J1bGVTZXQocnVsZVNldCkK
KyAgICAgICAgeyB9CisKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAg
ICAgICAgaW50IG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleDsKKyAgICAgICAgUnVsZVNldCogbV9y
dWxlU2V0OworICAgIH07CisKKyAgICBTdHlsZVNjb3BlUmVzb2x2ZXIoKTsKKyAgICB+U3R5bGVT
Y29wZVJlc29sdmVyKCk7CisKKyAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVG
b3IoY29uc3QgQ1NTU3R5bGVTaGVldCopOworCisgICAgdm9pZCBwdXNoKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCk7CisgICAgdm9p
ZCBwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgaGFzU2NvcGVkU3R5
bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKTsgfQorICAgIFJ1
bGVTZXQqIGVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAg
IGJvb2wgZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShDb250YWluZXJOb2RlKik7CisgICAgdW5zaWdu
ZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KKyAgICBjb25z
dCBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhY2suYXQoaW5kZXgpOyB9CisgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29uc3Qg
U3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVCb3Vu
ZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KKyAgICB2b2lkIGNvbGxlY3RG
ZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBSdWxlU2V0KiBydWxl
U2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdDsKKyAgICB2b2lkIHNldHVw
U3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOworICAgIGJvb2wgc3RhY2tJc0NvbnNpc3RlbnQo
Y29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFy
ZW50ID09IG1fc3RhY2tQYXJlbnQ7IH0KKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdXRob3JT
dHlsZXM7CisKKyAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sg
b2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+
IGNoaWxkKQorICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5
bGUgcmVzb2x1dGlvbi4KKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICAvLyBF
bGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGlu
Z0VsZW1lbnRTdGFjay4KKyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9z
Y29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3Rv
ckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFj
a1BhcmVudDsKKyAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworfTsKKworaW5saW5l
IGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKK3sKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRy
YXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBp
bmNvbnNpc3RlbnQpLgorICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAg
ICAgc2V0dXBTdGFjayhwYXJlbnQpOworICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7Cit9
CisKKyNlbHNlCisKK2NsYXNzIFN0eWxlU2NvcGVSZXNvbHZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlRm9yKGNvbnN0IENTU1N0eWxlU2hlZXQqKSB7
IHJldHVyIDA7IH0KKyAgICB2b2lkIHB1c2goY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENv
bnRhaW5lck5vZGUqKSBOT19SRVRVUk4geyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZv
aWQgcG9wKGNvbnN0IENvbnRhaW5lck5vZGUqKSBOT19SRVRVUk4geyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmKSBOT19S
RVRVUk4geyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZVJ1bGVT
ZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIHsgcmV0dXJuIDA7IH0KK307CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NPUEVEKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTdHlsZVNjb3BlUmVzb2x2ZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167296</attachid>
            <date>2012-10-05 03:21:56 -0700</date>
            <delta_ts>2012-10-08 18:40:52 -0700</delta_ts>
            <desc>I&apos;m back</desc>
            <filename>bug-98244-20121005192104.patch</filename>
            <type>text/plain</type>
            <size>34947</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDRiNzQ1Y2JmOTMyZTA4
ODg3MTY1MmIwODY1YTZhMjYwOTFhOWU2Yy4uOWM5NjczNzI1NjYxZmMyNTE1YzdhYWIzY2Y2YmI3
N2I4NGYwM2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEwLTA1ICBIYWpp
bWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbUmVmYWN0b3Jpbmdd
IFNjb3BlZCBTdHlsZSByZWxhdGVkIGNvZGUgc2hvdWxkIGhhdmUgaXRzIG93biBjbGFzcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MjQ0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
ZXh0cmFjdHMgU3R5bGVTY29wZVJlc29sdmVyIGZyb20gU3R5bGVSZXNvbHZlciB0byBjbGFyaWZ5
CisgICAgICAgIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgc3R5bGUgc2NvcGUgaGFuZGxpbmcu
IE5vdyB3ZSBjYW4gZWFzaWx5IHNlZQorICAgICAgICB3aGVyZSB0aGUgc3R5bGUgc2NvcGluZyBu
ZWVkcyB0byBiZSBpbnZvbGVkLgorCisgICAgICAgIENvbWluZyBTaGFkb3cgRE9NIHJlbGF0ZWQg
Y2hhbmdlIGxpa2UgQGhvc3QgcnVsZXMgd2lsbCBmaXQgd2l0aGluIHRoaXMgY2xhc3MuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZl
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudFNoYWRvd1Jv
b3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9v
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1v
cnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVy
OjpTdHlsZVNjb3BlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjp+U3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVS
ZXNvbHZlcjo6c2NvcGVGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVy
OjpydWxlU2V0Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5z
dXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNl
dHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAg
ICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2Nv
cGVSZXNvbHZlcjo6U3RhY2tGcmFtZTo6U3RhY2tGcmFtZSk6CisgICAgICAgIChTdGFja0ZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6aGFzU2NvcGVkU3R5bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tGcmFtZUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hlc1N0eWxlQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tJc0NvbnNpc3RlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3Rl
bmN5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVSdWxlU2V0Rm9yKToK
KwogMjAxMi0xMC0wNSAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAg
ICBJbmNvbXBsZXRlIHJlcGFpbnQgb2YgYm94ZXMgd2l0aCBpbnNldCBib3gtc2hhZG93IGFuZCBw
YWRkaW5nIHdoZW4gcmVzaXplZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZDJjOTNlODEzNWI3
N2Q1ZDBkNGZjNmE5N2RjMzAxYjU1ZDFhMjk5Li5mNmJkZjczNDg2NjJjY2FhOWYwMTdkODY0OTE1
MjY3NjhlODk2NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA4MSw2ICsxMDgxLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TdHlsZVJlc29sdmVyLmNwcAogICAgIGNzcy9T
dHlsZVJ1bGUuY3BwCiAgICAgY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAKKyAgICBjc3MvU3R5bGVT
Y29wZVJlc29sdmVyLmNwcAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcAogICAgIGNzcy9TdHlsZVNo
ZWV0Q29udGVudHMuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggYjg4ZjlkYzk2YTgwMmY5YTQzZTBkN2M2YzEzMDBjMjZjODE1
YWRjYS4uYjI2YTE5YmYxZWE0NGY0YWM2ZmEwY2ExYWNhZDFlNzg3NTI2YzkyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjM0LDYgKzI2MzQsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBcCiAJU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGVJbXBvcnQuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQppbmRleCAwNzhiNjlhYTI3MzQ0NjAwMDQ0YjkwMmNjYTU1ZDMxZjdlZWYxMjU1Li5jYmU5
OTcyOTUzMGM2NWVjMTkwMTQyMjU4MDlhNDM0ZGVlMzJlMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMy
NCw2ICszMjQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvU3R5bGVSZXNvbHZlci5jcHAgXAog
ICAgIGNzcy9TdHlsZVJ1bGUuY3BwIFwKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBcCisg
ICAgY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcCBc
CiAgICAgY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0TGlz
dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQxMjFiN2QxMGIwOGJiODY0MGVkOTIyNjhhMGM0
MzRjY2YxMjRlYjMuLmJhOWY0N2YzYzVkMDc3OGEzNWVhZjk4OWMwZGQ4N2RlNmUzYjA1N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTI2MzYsNiArMjYzNiw4IEBACiAgICAgICAgICAgICAnY3NzL1N0
eWxlUnVsZS5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCcsCiAgICAg
ICAgICAgICAnY3NzL1N0eWxlUnVsZUltcG9ydC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVT
Y29wZVJlc29sdmVyLmNwcCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5o
JywKICAgICAgICAgICAgICdjc3MvU3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9T
dHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjYjdiZDY1MTBlOGM2MjMzODM2MWY1MTk1NzdkZTQxNDI5MjBhNGVkLi5mM2U4M2Q5NzMy
MWRiOGI3ZDI3MjUwYzI2MWRjYjA2YzkwNTMzNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zODcyLDYgKzM4NzIsOCBAQAog
CQlBN0IwNzBEMjEzMEE0MDlDMDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCMDcwRDAxMzBB
NDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJQTdCMDcw
RDMxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0IwNzBEMTEzMEE0MDlDMDBBMzc2
M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuaCAqLzsgfTsKIAkJQTdCNkU2OUYwQjI5MUE5NjAw
RDA1MjlGIC8qIERyYWdEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0I2RTY5RDBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBN0I3NjFBMDE2MUVF
NTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Qjc2MTlFMTYxRUU1MjYwMDIwODNEMyAvKiBT
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwICovOyB9OworCQlBN0I3NjFBMTE2MUVFNTI2MDAyMDgzRDMg
LyogU3R5bGVTY29wZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0I3NjE5RjE2MUVFNTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29s
dmVyLmggKi87IH07CiAJCUE3QkJFMjY2MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCQkUyNjQxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5jcHAgKi87IH07
CiAJCUE3QkJFMjY3MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkJFMjY1MTFBRkIz
RjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuaCAqLzsgfTsKIAkJQTdCRjdFREYxNEM5
MTc1QTAwMTQ0ODlEIC8qIEludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCRjdFREMxNEM5MTc1QTAwMTQ0ODlEIC8qIElu
dGVybmFsU2V0dGluZ3MuY3BwICovOyB9OwpAQCAtMTExMTAsNiArMTExMTIsOCBAQAogCQlBN0I0
RUE3ODE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5ncy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjRFQTc5MTRDOTM0ODQwMEM4RjVCRiAvKiBKU0lu
dGVybmFsU2V0dGluZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRl
cm5hbFNldHRpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjZFNjlEMEIy
OTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEcmFnRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0I3NjE5RTE2
MUVFNTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlU2NvcGVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE3Qjc2MTlGMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3Bl
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTY29wZVJl
c29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjc3NDk2MTRDRjYzNTMw
MDQwNDRCQiAvKiBIVE1MQ29udGVudEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxDb250ZW50RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QkJFMjY0MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MTWV0ZXJFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCQkUyNjUxMUFGQjNGMjAwMDVFQTAzIC8qIEpT
SFRNTE1ldGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hU
TUxNZXRlckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMjQ2LDYg
KzIxMjUwLDggQEAKIAkJCQlFNEJCRUQ0QjE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmgg
Ki8sCiAJCQkJRTQ5NDZFQUMxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5jcHAg
Ki8sCiAJCQkJRTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICov
LAorCQkJCUE3Qjc2MTlFMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuY3Bw
ICovLAorCQkJCUE3Qjc2MTlGMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIu
aCAqLywKIAkJCQlBOEVBODAwNTBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgKi8s
CiAJCQkJQThFQTgwMDQwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCAqLywKIAkJCQk4
NTA2NTZEQzBBQUI0NEQ5MDAyRDE1QzAgLyogU3R5bGVTaGVldC5pZGwgKi8sCkBAIC0yNTAwMiw2
ICsyNTAwOCw3IEBACiAJCQkJRTEzOTg2NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QkJFRDREMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHls
ZVJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OTQ2RUFGMTU2RTY0REQwMEQzMjk3RiAvKiBT
dHlsZVJ1bGVJbXBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3Qjc2MUExMTYxRUU1MjYwMDIw
ODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzhBOUU1
MTQ3NDQzNDYwMEIwRUQxMiAvKiBTdHlsZVNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTgwMEMwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjgyMDksNiArMjgyMTYsNyBAQAogCQkJCUUxMzk4NjYzMTU0Nzg0NzQwMDFF
M0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0QkJFRDRDMTRG
Q0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ5NDZF
QUUxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBN0I3NjFBMDE2MUVFNTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4RUE4MDBEMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0RjlFRUYyMTU2RDlGRkEwMEQyM0U3RSAvKiBTdHls
ZVNoZWV0Q29udGVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTgwMEIwQTE5NTE2RTAw
QThFRjVGIC8qIFN0eWxlU2hlZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NBbGxJbk9uZS5jcHAKaW5kZXggMDFkZGIyZDcxNjE5OGQxMzQ2Y2ZmNTIyODI5NGEwZmMxMDk0
ODkyMy4uODRmOWZlN2Y0M2M4OWU1YmRkMWUwYTFiZWI4MGU0NjhjOGNhN2MzMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCkBAIC03MiwzICs3Miw0IEBACiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNldC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCiAj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5jcHAiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVy
LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBlNGJhMGE4ZmVlMTIy
NjQxYzZkOGM3MGMxZDAwNTBlNzc0NTVhZTQwLi5iZmE0OTVkYWZiNmZjYzhkN2Q0Mjk1Mzk2ZDZm
MWU3MTMxNDVhY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xMTQs
NiArMTE0LDcgQEAKICNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxl
U2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1
ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMjg3LDEwICsyODgs
NiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAg
ICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKICNlbmRpZgotI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCi0gICAgLCBtX3Njb3BlU3RhY2tQYXJlbnQoMCkKLSAgICAsIG1fc2NvcGVTdGFja1Bh
cmVudEJvdW5kc0luZGV4KDApCi0jZW5kaWYKICAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAg
ICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtMzk1LDEw
ICszOTIsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgLy8g
c2hhcmluZyBjYW5kaWRhdGVzLgogICAgIG1fZmVhdHVyZXMuYWRkKGRlZmF1bHRTdHlsZS0+ZmVh
dHVyZXMoKSk7CiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7
Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRB
dXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNv
bmQtPmZlYXR1cmVzKCkpOwotI2VuZGlmCisgICAgaWYgKG1fc2NvcGVyKQorICAgICAgICBtX3Nj
b3Blci0+Y29sbGVjdEZlYXR1cmVzVG8obV9mZWF0dXJlcyk7CiAgICAgaWYgKG1fdXNlclN0eWxl
KQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CiAKQEAg
LTQwNiwzOCArNDAxLDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQog
ICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0ID0gbWFrZVJ1bGVTZXQobV9mZWF0dXJlcy51
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKIH0KIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi1j
b25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZShjb25zdCBD
U1NTdHlsZVNoZWV0KiBzaGVldCkKLXsKLSAgICBBU1NFUlQoc2hlZXQpOwotCi0gICAgaWYgKCFD
b250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChkb2N1bWVudCgpKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCk7Ci0g
ICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25l
ck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Ci0gICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3Bl
ZCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpPyBzdHls
ZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7Ci0KLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVu
dC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsKLX0KLQotaW5saW5lIFJ1bGVTZXQqIFN0
eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkg
Y29uc3QKLXsKLSAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Nj
b3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKLX0KLSNlbmRp
ZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0aG9yU3R5bGUoKQogewogICAgIG1fYXV0
aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKQEAgLTQ1OCwxNiArNDIxLDEyIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcs
IGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkg
JiYgIW1fbWVkaXVtLT5ldmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgdGhpcykpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNz
c1NoZWV0LT5jb250ZW50cygpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQpOwotICAg
ICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3Vs
dCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICpt
X21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgeworICAgICAg
ICAgICAgaWYgKCFtX3Njb3BlcikKKyAgICAgICAgICAgICAgICBtX3Njb3BlciA9IGFkb3B0UHRy
KG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAgICAgICBtX3Njb3Blci0+ZW5zdXJl
UnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRo
aXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0jZW5kaWYKICAg
ICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwg
dGhpcyk7CiAgICAgICAgIGlmICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBjc3NTaGVldCk7CkBAIC00NzksNjIgKzQzOCw2IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZl
Y3RvcjxSZWZQCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQo
KS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUq
IHBhcmVudCkKLXsKLSAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4ndCBi
ZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgQVNTRVJU
KCFtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpOwotCi0gICAgbV9zY29wZVN0YWNrLnNo
cmluaygwKTsKLSAgICBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9IDA7Ci0gICAgZm9yIChj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IHBhcmVudDsgc2NvcGU7IHNjb3BlID0gc2NvcGUt
PnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNl
dEZvclNjb3BlKHNjb3BlKTsKLSAgICAgICAgaWYgKHJ1bGVTZXQpCi0gICAgICAgICAgICBtX3Nj
b3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShzY29wZSwgYXV0aG9yU3R5bGVCb3VuZHNJ
bmRleCwgcnVsZVNldCkpOwotICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0
b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAgICAgICAgICAgLS1h
dXRob3JTdHlsZUJvdW5kc0luZGV4OwotICAgIH0KLSAgICBtX3Njb3BlU3RhY2sucmV2ZXJzZSgp
OwotICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHBhcmVudDsKLSAgICBtX3Njb3BlU3RhY2tQYXJl
bnRCb3VuZHNJbmRleCA9IDA7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVu
dCkKLXsKLSAgICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgotICAgIGlm
IChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX3Nj
b3BlU3RhY2tQYXJlbnQpOwotICAgICAgICBBU1NFUlQobV9zY29wZVN0YWNrLmlzRW1wdHkoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gc29tZSB3YWNreSBjYXNlcyBkdXJp
bmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHJhbmRvbSBlbGVtZW50cy4K
LSAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGluIHN1Y2gg
Y2FzZXMuCi0gICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50KSkgewot
ICAgICAgICBzZXR1cFNjb3BlU3RhY2soc2NvcGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFw
cGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICsrbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5k
ZXg7Ci0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhlIHN0YWNr
LgotICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUoc2NvcGUpOwotICAgIGlm
IChydWxlU2V0KQotICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShz
Y29wZSwgbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKLSAgICBtX3Nj
b3BlU3RhY2tQYXJlbnQgPSBzY29wZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BTY29w
ZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciB0byB1
cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgotICAg
IGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgewotICAgICAgICBpZiAoIW1fc2Nv
cGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY29wZVN0YWNrLmxhc3QoKS5tX3Njb3BlID09IHNjb3Bl
KQotICAgICAgICAgICAgbV9zY29wZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKHNj
b3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JT
dHlsZXMoKSkKLSAgICAgICAgICAgIC0tbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0g
ICAgICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCk7Ci0g
ICAgfQotfQotI2VuZGlmCi0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQo
RWxlbWVudCogcGFyZW50KQogewogICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudHNQYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKTsKQEAgLTU0OSw3ICs0NTIsOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKICAg
ICAgICAgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsKIAogICAgIC8vIE5vdGU6IFdlIG11
c3RuJ3Qgc2tpcCBTaGFkb3dSb290IG5vZGVzIGZvciB0aGUgc2NvcGUgc3RhY2suCi0gICAgcHVz
aFNjb3BlKHBhcmVudCwgcGFyZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpOworICAgIGlmIChtX3Nj
b3BlcikKKyAgICAgICAgbV9zY29wZXItPnB1c2gocGFyZW50LCBwYXJlbnQtPnBhcmVudE9ySG9z
dE5vZGUoKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVt
ZW50KiBwYXJlbnQpCkBAIC01NTgsMTkgKzQ2MiwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnBv
cFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgIC8vIFBhdXNlIG1haW50YWluaW5n
IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCiAgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lz
Q29uc2lzdGVudChwYXJlbnQpKQogICAgICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7Ci0gICAg
cG9wU2NvcGUocGFyZW50KTsKKyAgICBpZiAobV9zY29wZXIpCisgICAgICAgIG1fc2NvcGVyLT5w
b3AocGFyZW50KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50U2hhZG93Um9v
dChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzaGFkb3dSb290
LT5ob3N0KCkpOwotICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkp
OworICAgIGlmIChtX3Njb3BlcikKKyAgICAgICAgbV9zY29wZXItPnB1c2goc2hhZG93Um9vdCwg
c2hhZG93Um9vdC0+aG9zdCgpKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRT
aGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKHNo
YWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcG9wU2NvcGUoc2hhZG93Um9vdCk7CisgICAgaWYgKG1f
c2NvcGVyKQorICAgICAgICBtX3Njb3Blci0+cG9wKHNoYWRvd1Jvb3QpOwogfQogCiAvLyBUaGlz
IGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHls
ZXMKQEAgLTgxMCwyNiArNzE3LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Njb3BlciB8fCAhbV9zY29wZXIt
Pmhhc1Njb3BlZFN0eWxlcygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29w
ZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChy
ZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmICghc2NvcGVTdGFja0lz
Q29uc2lzdGVudChtX2VsZW1lbnQpKQotICAgICAgICBzZXR1cFNjb3BlU3RhY2sobV9lbGVtZW50
KTsKLSAgICBpZiAobV9zY29wZVN0YWNrLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fc2NvcGVyLT5l
bnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1
dGhvclN0eWxlcygpOwogICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7Ci0gICAgdW5zaWdu
ZWQgc2NvcGVTaXplID0gbV9zY29wZVN0YWNrLnNpemUoKTsKKyAgICB1bnNpZ25lZCBzY29wZVNp
emUgPSBtX3Njb3Blci0+c3RhY2tTaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUg
PSBtX3Njb3BlU3RhY2tbaV07CisgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3Rh
Y2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Blci0+c3RhY2tGcmFtZUF0KGkpOwogICAgICAgICBkb2N1
bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUubV9zY29wZS0+aXNJblNoYWRvd1Ry
ZWUoKTsKICAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsKICAgICAgICAgICAgIGlmICghYXBw
bHlBdXRob3JTdHlsZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ICE9IG1f
c2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KQorICAgICAgICAgICAgaWYgKCFtX3Njb3Blci0+
bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogICAgICAgICAgICAKQEAgLTkzNCwxMSArODM5LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMsIGkKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSk7Ci0jaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIG9w
dGlvbnMuc2NvcGUpKSB7Ci0jZWxzZQotICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0
YSkpIHsKLSNlbmRpZgogICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcnVsZSBpcyBh
cHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgog
ICAgICAgICAgICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKICAgICAgICAgICAgIC8vIGIpIHRoZSB0
cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKQEAgLTk0Niw5ICs4NDcsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiBydWxlcywgaQogICAgICAgICAgICAgLy8gZCkgdGhlIHJ1bGUgY29udGFpbnMgc2hh
ZG93LUlEIHBzZXVkbyBlbGVtZW50cwogICAgICAgICAgICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNT
Y29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAgICAgICAgICYmICF0cmVlU2NvcGUt
PmFwcGx5QXV0aG9yU3R5bGVzKCkKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgICAgICAg
ICAgICAgICYmICghb3B0aW9ucy5zY29wZSB8fCBvcHRpb25zLnNjb3BlLT50cmVlU2NvcGUoKSAh
PSB0cmVlU2NvcGUpCi0jZW5kaWYKICAgICAgICAgICAgICAgICAmJiAhbV9oYXNVbmtub3duUHNl
dWRvRWxlbWVudHMpIHsKIAogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwpAQCAtNTMwMywxMCArNTIwMiw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShT
VkcpCiAgICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRzKTsKICNlbmRpZgot
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaW5mby5hZGRNZW1iZXIobV9zY29wZWRBdXRo
b3JTdHlsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVTdGFjayk7Ci0jZW5kaWYKKyAg
ICBpbmZvLmFkZE1lbWJlcihtX3Njb3Blcik7CiAKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRv
IGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFk
ZE1lbWJlcihkZWZhdWx0U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXgg
YWZiN2E0ODU2MmFkNzhmZDI5YzAyNGEzNjdiNGUyODZmZmViMzE2Ni4uNDNlM2YwOTMyZWU5NWRm
NTk5ZjU3YTRhMWJkZTIyYmViYzM1YWFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CkBAIC03NCw2ICs3NCw3IEBAIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNz
IFN0YXRpY0NTU1J1bGVMaXN0OwogY2xhc3MgU3R5bGVCdWlsZGVyOworY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFz
cyBTdHlsZVBlbmRpbmdJbWFnZTsKQEAgLTE3OSwxNCArMTgwLDYgQEAgcHJpdmF0ZToKIAogICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwogCi0jaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpOwotICAgIHZvaWQgcG9wU2Nv
cGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwotI2Vsc2UKLSAgICB2b2lkIHB1c2hTY29w
ZShjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotICAgIHZv
aWQgcG9wU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotI2VuZGlmCi0KIHB1YmxpYzoK
ICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhh
dCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgogICAg
IGVudW0gQ1NTUnVsZUZpbHRlciB7CkBAIC00OTMsMzQgKzQ4Niw3IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1
ZT4gPiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCi0gICAgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NT
U3R5bGVTaGVldCopOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5lck5vZGUq
LCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOwotCi0gICAgUnVsZVNldCogcnVs
ZVNldEZvclNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0
dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKLSAgICBib29sIHNjb3BlU3RhY2tJ
c0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBw
YXJlbnQgJiYgcGFyZW50ID09IG1fc2NvcGVTdGFja1BhcmVudDsgfQotCi0gICAgU2NvcGVkUnVs
ZVNldE1hcCBtX3Njb3BlZEF1dGhvclN0eWxlczsKLSAgICAKLSAgICBzdHJ1Y3QgU2NvcGVTdGFj
a0ZyYW1lIHsKLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKCkgOiBtX3Njb3BlKDApLCBtX2F1dGhv
clN0eWxlQm91bmRzSW5kZXgoMCksIG1fcnVsZVNldCgwKSB7IH0KLSAgICAgICAgU2NvcGVTdGFj
a0ZyYW1lKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJ
bmRleCwgUnVsZVNldCogcnVsZVNldCkgOiBtX3Njb3BlKHNjb3BlKSwgbV9hdXRob3JTdHlsZUJv
dW5kc0luZGV4KGF1dGhvclN0eWxlQm91bmRzSW5kZXgpLCBtX3J1bGVTZXQocnVsZVNldCkgeyB9
Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGU7Ci0gICAgICAgIGludCBtX2F1
dGhvclN0eWxlQm91bmRzSW5kZXg7Ci0gICAgICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKLSAgICB9
OwotICAgIC8vIFZlY3RvciAodXNlZCBhcyBzdGFjaykgdGhhdCBrZWVwcyB0cmFjayBvZiBzY29w
aW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50cyB3aXRoIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQp
Ci0gICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIHRyZWUgaXRlcmF0aW9uIGZvciBzdHlsZSByZXNv
bHV0aW9uLgotICAgIFZlY3RvcjxTY29wZVN0YWNrRnJhbWU+IG1fc2NvcGVTdGFjazsKLSAgICAv
LyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2Nv
cGluZ0VsZW1lbnRTdGFjay4KLSAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIg
bV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxl
Y3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCi0gICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9z
Y29wZVN0YWNrUGFyZW50OwotICAgIGludCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsK
LSNlbmRpZgotCisgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZXI7CiAgICAg
Q1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWViMDEzN2ViZWZmMzc5ZDA4ZTYzMWNmZGMzYmM1NjVlZDhlYzdlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEs
MTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgi
CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgorI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgor
I2luY2x1ZGUgIlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAi
V2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlv
bkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVTY29wZVJlc29sdmVyOjpTdHlsZVNjb3Bl
UmVzb2x2ZXIoKQorICAgIDogbV9zdGFja1BhcmVudCgwKQorICAgICwgbV9zdGFja1BhcmVudEJv
dW5kc0luZGV4KDApCit7Cit9CisKK1N0eWxlU2NvcGVSZXNvbHZlcjo6flN0eWxlU2NvcGVSZXNv
bHZlcigpCit7Cit9CisKK2NvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlU2NvcGVSZXNvbHZlcjo6
c2NvcGVGb3IoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0
KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNoZWV0LT5vd25lckRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFDb250ZXh0RmVh
dHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChkb2N1bWVudCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpOworICAgIGlmICghb3du
ZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJOb2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhU
TUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1l
bnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKT8gc3R5bGVFbGVtZW50LT5z
aGFkb3dSb290KCkgOiAwOworCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVt
ZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93
Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVz
b2x2ZXI6OnJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0Cit7Cisg
ICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0
eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCkg
PyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisKK1J1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZl
cjo6ZW5zdXJlUnVsZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBT
Y29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdXRob3JTdHlsZXMuYWRk
KHNjb3BlLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworfQorCit2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6c2V0dXBTdGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpCit7Cisg
ICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5
bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIEFTU0VSVCghbV9hdXRob3JTdHls
ZXMuaXNFbXB0eSgpKTsKKworICAgIG1fc3RhY2suc2hyaW5rKDApOworICAgIGludCBhdXRob3JT
dHlsZUJvdW5kc0luZGV4ID0gMDsKKyAgICBmb3IgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
ID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Cisg
ICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKKyAgICAgICAgaWYg
KHJ1bGVTZXQpCisgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZChTdGFja0ZyYW1lKHNjb3BlLCBh
dXRob3JTdHlsZUJvdW5kc0luZGV4LCBydWxlU2V0KSk7CisgICAgICAgIGlmIChzY29wZS0+aXNT
aGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkp
CisgICAgICAgICAgICAtLWF1dGhvclN0eWxlQm91bmRzSW5kZXg7CisgICAgfQorCisgICAgbV9z
dGFjay5yZXZlcnNlKCk7CisgICAgbV9zdGFja1BhcmVudCA9IHBhcmVudDsKKyAgICBtX3N0YWNr
UGFyZW50Qm91bmRzSW5kZXggPSAwOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cHVz
aChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQ
YXJlbnQpCit7CisgICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRoIHRoZSBzY29waW5n
IGVsZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KKyAg
ICBpZiAobV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9zdGFj
a1BhcmVudCk7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSBy
ZXNvbHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgorICAgIC8vIFJl
Y3JlYXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KKyAg
ICBpZiAoIXN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50KSkgeworICAgICAgICBzZXR1cFN0
YWNrKHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzY29wZS0+aXNT
aGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkp
CisgICAgICAgICsrbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworICAgIC8vIE90aGVyd2lzZSBq
dXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KKyAgICBSdWxlU2V0KiBydWxlU2V0
ID0gcnVsZVNldEZvcihzY29wZSk7CisgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgIG1fc3RhY2su
YXBwZW5kKFN0YWNrRnJhbWUoc2NvcGUsIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNl
dCkpOworICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZTsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVz
b2x2ZXI6OnBvcChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICAvLyBPbmx5IGJv
dGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0
ZW50LgorICAgIGlmIChzdGFja0lzQ29uc2lzdGVudChzY29wZSkpIHsKKyAgICAgICAgaWYgKCFt
X3N0YWNrLmlzRW1wdHkoKSAmJiBtX3N0YWNrLmxhc3QoKS5tX3Njb3BlID09IHNjb3BlKQorICAg
ICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFk
b3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCisg
ICAgICAgICAgICAtLW1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKKyAgICAgICAgbV9zdGFja1Bh
cmVudCA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxl
U2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVz
KQoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0
eWxlcy5iZWdpbigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAg
ZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworfQorCit2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIo
bV9hdXRob3JTdHlsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MjFkMThjMGY1Zjk3OTgzOTg2NGJjYmI2MTVlOTRh
ZjgyNzc3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29w
ZVJlc29sdmVyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVTY29wZVJlc29sdmVyX2gK
KyNkZWZpbmUgU3R5bGVTY29wZVJlc29sdmVyX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIENTU1N0eWxlU2hl
ZXQ7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgUnVsZUZlYXR1cmVTZXQ7CisKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorCitjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXIgeworcHVibGljOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4g
U2NvcGVkUnVsZVNldE1hcDsKKworICAgIHN0cnVjdCBTdGFja0ZyYW1lIHsKKyAgICAgICAgU3Rh
Y2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KDApLCBtX3J1
bGVTZXQoMCkgeyB9CisgICAgICAgIFN0YWNrRnJhbWUoY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUsIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBSdWxlU2V0KiBydWxlU2V0KQorICAgICAg
ICAgICAgOiBtX3Njb3BlKHNjb3BlKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4KGF1dGhvclN0
eWxlQm91bmRzSW5kZXgpLCBtX3J1bGVTZXQocnVsZVNldCkKKyAgICAgICAgeyB9CisKKyAgICAg
ICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAgICAgICAgaW50IG1fYXV0aG9yU3R5
bGVCb3VuZHNJbmRleDsKKyAgICAgICAgUnVsZVNldCogbV9ydWxlU2V0OworICAgIH07CisKKyAg
ICBTdHlsZVNjb3BlUmVzb2x2ZXIoKTsKKyAgICB+U3R5bGVTY29wZVJlc29sdmVyKCk7CisKKyAg
ICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVGb3IoY29uc3QgQ1NTU3R5bGVTaGVl
dCopOworCisgICAgdm9pZCBwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZVBhcmVudCk7CisgICAgdm9pZCBwb3AoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUpOworICAgIGJvb2wgaGFzU2NvcGVkU3R5bGVzKCkgY29uc3QgeyByZXR1cm4g
IW1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKTsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZVJ1bGVTZXRG
b3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgZW5zdXJlU3RhY2tDb25z
aXN0ZW5jeShDb250YWluZXJOb2RlKik7CisgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KKyAgICBjb25zdCBTdGFja0ZyYW1lJiBzdGFja0Zy
YW1lQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suYXQoaW5kZXgpOyB9
CisgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29uc3QgU3RhY2tGcmFtZSYgZnJhbWUpIGNv
bnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9PSBtX3N0YWNrUGFy
ZW50Qm91bmRzSW5kZXg7IH0KKyAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJl
U2V0Jik7CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBSdWxlU2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKSBjb25zdDsKKyAgICB2b2lkIHNldHVwU3RhY2soY29uc3QgQ29udGFpbmVy
Tm9kZSopOworICAgIGJvb2wgc3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSog
cGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1fc3RhY2tQYXJlbnQ7
IH0KKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdXRob3JTdHlsZXM7CisKKyAgICAvLyBWZWN0
b3IgKHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAo
aS5lLiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQorICAgIC8vIGVuY291
bnRlcmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KKyAgICBW
ZWN0b3I8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICAvLyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBw
YXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRTdGFjay4KKyAgICAv
LyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlz
IGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3Rh
Y2suCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsKKyAgICBpbnQgbV9z
dGFja1BhcmVudEJvdW5kc0luZGV4OworfTsKKworaW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29s
dmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVudCkKK3sKKyAg
ICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBl
bGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgorICAgIGlm
ICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgc2V0dXBTdGFjayhwYXJlbnQp
OworICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7Cit9CisKKyNlbHNlCisKK2NsYXNzIFN0
eWxlU2NvcGVSZXNvbHZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlRm9yKGNvbnN0IENTU1N0eWxlU2hlZXQqKSB7IHJldHVybiAwOyB9CisgICAgdm9p
ZCBwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqLCBjb25zdCBDb250YWluZXJOb2RlKikgTk9fUkVU
VVJOIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2b2lkIHBvcChjb25zdCBDb250YWlu
ZXJOb2RlKikgTk9fUkVUVVJOIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2b2lkIGNv
bGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0JikgTk9fUkVUVVJOIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5l
ck5vZGUqKSB7IHJldHVybiAwOyB9Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFNUWUxFX1NDT1BF
RCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3R5bGVTY29wZVJlc29s
dmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167667</attachid>
            <date>2012-10-08 18:41:00 -0700</date>
            <delta_ts>2012-10-08 20:54:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-98244-20121009104002.patch</filename>
            <type>text/plain</type>
            <size>35003</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjODg2OTkyMTc2YWMx
NzUzYTQ1ODM2OGE4OGM2M2JhZDFkNjhiOC4uOThjZjAwNzdhNTVlODIxMWUyY2IwY2VhMmQwMTc1
YjYyY2NiYzlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEwLTA4ICBIYWpp
bWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbUmVmYWN0b3Jpbmdd
IFNjb3BlZCBTdHlsZSByZWxhdGVkIGNvZGUgc2hvdWxkIGhhdmUgaXRzIG93biBjbGFzcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MjQ0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGV4dHJhY3RzIFN0eWxlU2NvcGVSZXNvbHZlciBmcm9tIFN0eWxlUmVzb2x2ZXIgdG8gY2xhcmlm
eQorICAgICAgICB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHN0eWxlIHNjb3BlIGhhbmRsaW5n
LiBOb3cgd2UgY2FuIGVhc2lseSBzZWUKKyAgICAgICAgd2hlcmUgdGhlIHN0eWxlIHNjb3Bpbmcg
bmVlZHMgdG8gYmUgaW52b2xlZC4KKworICAgICAgICBDb21pbmcgU2hhZG93IERPTSByZWxhdGVk
IGNoYW5nZSBsaWtlIEBob3N0IHJ1bGVzIHdpbGwgZml0IHdpdGhpbiB0aGlzIGNsYXNzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JT
dHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dS
b290KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jv
b3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVt
b3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChTdHls
ZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZl
cjo6U3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6flN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3Bl
UmVzb2x2ZXI6OnNjb3BlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZl
cjo6cnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVu
c3VyZVJ1bGVTZXRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpz
ZXR1cFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cHVzaCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlc1RvKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAg
ICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWU6OlN0YWNrRnJhbWUpOgorICAgICAgICAoU3RhY2tGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6Omhhc1Njb3BlZFN0eWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0YWNrU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0YWNrRnJhbWVBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoZXNTdHlsZUJvdW5kcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0YWNrSXNDb25zaXN0ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlU3RhY2tDb25zaXN0
ZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcik6
CisKIDIwMTItMTAtMDggIEphZWh1biBMaW0gIDxsamFlaHVuLmxpbUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbQ0FJUk9dIEFkanVzdCB0aGUgc291cmNlIHJlY3Qgc2l6ZSB3aGVuIElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORyBpcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE1
ZDE4ZjdlZTM1Mjg2ZTQ1MDUxMmE4ZDZjYjI2ZmM4M2E0MzJhOWYuLjg2NjQ0YjE4YmY1Njg0NTU2
MDVkMmEzMGMyZDIwNzg2OWY5NjI5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYg
KzEwODEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CiAgICAgY3NzL1N0eWxlUnVsZS5jcHAKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAorICAg
IGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCiAgICAgY3NzL1N0eWxlU2hlZXQuY3BwCiAgICAg
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwYjU0MGJiNDEzNzA1ODA0NTQxODQ3MDY2
ZTc5NWE1OTI5ZjM3NGY0Li5hODJiM2MyMzdlMjA3ZjZmNDZmOTJmOTBlYjNmNTc2NmY3ZmJkNGE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2MzQsNiArMjYzNCw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZUltcG9ydC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJl
c29sdmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDFmYzFhZmE4OWVjNTlhMjU0OTk1M2NiYTZlYmQzNDRkMDFm
Njg1MGEuLmM2NDAyZmExZjYyNTIwZmRjYTBjMDhkNTJlN2U1OTA0MTMyZGNiZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMzI0LDYgKzMyNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9TdHlsZVJlc29s
dmVyLmNwcCBcCiAgICAgY3NzL1N0eWxlUnVsZS5jcHAgXAogICAgIGNzcy9TdHlsZVJ1bGVJbXBv
cnQuY3BwIFwKKyAgICBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBcCiAgICAgY3NzL1N0eWxl
U2hlZXQuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBcCiAgICAgY3NzL1N0
eWxlU2hlZXRMaXN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjI1YWQyMjgxZmM4ZGYzZThj
ZjczY2EzMTBjODMzYTJkZWNmMTFlNS4uNDkwZDIxNGEwNTg1NTg0MzE2MWU3OWU0NjQ0ODNhMjAz
MjEyNzlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjYzNiw2ICsyNjM2LDggQEAKICAgICAgICAg
ICAgICdjc3MvU3R5bGVSdWxlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGVJbXBvcnQu
Y3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlSW1wb3J0LmgnLAorICAgICAgICAgICAg
J2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVTY29w
ZVJlc29sdmVyLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0LmNwcCcsCiAgICAgICAg
ICAgICAnY3NzL1N0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGY1MDJmYTY1OTdlNTM1MzJlMmQ4M2YxNzI5MmVjZTM4MzI0ZDhjMWIu
LjEwZWQ1OWY5ZmEzNzY3ODg0Nzg3OGRjNjJiNDMwNjgzNTQ4NTA4NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM4NzYsNiAr
Mzg3Niw4IEBACiAJCUE3QjA3MEQyMTMwQTQwOUMwMEEzNzYzQyAvKiBGcmFtZUFjdGlvblNjaGVk
dWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0IwNzBEMDEzMEE0MDlDMDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwICovOyB9
OwogCQlBN0IwNzBEMzEzMEE0MDlDMDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjA3MEQxMTMw
QTQwOUMwMEEzNzYzQyAvKiBGcmFtZUFjdGlvblNjaGVkdWxlci5oICovOyB9OwogCQlBN0I2RTY5
RjBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjZFNjlEMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3
Qjc2MUEwMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNzYxOUUxNjFFRTUyNjAw
MjA4M0QzIC8qIFN0eWxlU2NvcGVSZXNvbHZlci5jcHAgKi87IH07CisJCUE3Qjc2MUExMTYxRUU1
MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Qjc2MTlGMTYxRUU1MjYwMDIwODNEMyAvKiBTdHls
ZVNjb3BlUmVzb2x2ZXIuaCAqLzsgfTsKIAkJQTdCQkUyNjYxMUFGQjNGMjAwMDVFQTAzIC8qIEpT
SFRNTE1ldGVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0JCRTI2NDExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50
LmNwcCAqLzsgfTsKIAkJQTdCQkUyNjcxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdC
QkUyNjUxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5oICovOyB9OwogCQlB
N0JGN0VERjE0QzkxNzVBMDAxNDQ4OUQgLyogSW50ZXJuYWxTZXR0aW5ncy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JGN0VEQzE0QzkxNzVBMDAx
NDQ4OUQgLyogSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi87IH07CkBAIC0xMTExOCw2ICsxMTEyMCw4
IEBACiAJCUE3QjRFQTc4MTRDOTM0ODQwMEM4RjVCRiAvKiBKU0ludGVybmFsU2V0dGluZ3MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnRlcm5hbFNldHRpbmdz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNEVBNzkxNEM5MzQ4NDAwQzhG
NUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVybmFsU2V0dGluZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERyYWdEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE3Qjc2MTlFMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVzb2x2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVTY29wZVJlc29sdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdCNzYxOUYxNjFFRTUyNjAwMjA4M0QzIC8q
IFN0eWxlU2NvcGVSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZVNjb3BlUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNzc0
OTYxNENGNjM1MzAwNDA0NEJCIC8qIEhUTUxDb250ZW50RWxlbWVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSFRNTENvbnRlbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdCQkUyNjQxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxNZXRlckVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0JCRTI2NTExQUZCM0YyMDAw
NUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSFRNTE1ldGVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjEyNTQsNiArMjEyNTgsOCBAQAogCQkJCUU0QkJFRDRCMTRGQ0RCQTEwMDNGMEI5OCAvKiBT
dHlsZVJ1bGUuaCAqLywKIAkJCQlFNDk0NkVBQzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxl
SW1wb3J0LmNwcCAqLywKIAkJCQlFNDk0NkVBRDE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxl
SW1wb3J0LmggKi8sCisJCQkJQTdCNzYxOUUxNjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2NvcGVS
ZXNvbHZlci5jcHAgKi8sCisJCQkJQTdCNzYxOUYxNjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2Nv
cGVSZXNvbHZlci5oICovLAogCQkJCUE4RUE4MDA1MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNo
ZWV0LmNwcCAqLywKIAkJCQlBOEVBODAwNDBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5o
ICovLAogCQkJCTg1MDY1NkRDMEFBQjQ0RDkwMDJEMTVDMCAvKiBTdHlsZVNoZWV0LmlkbCAqLywK
QEAgLTI1MDE0LDYgKzI1MDIwLDcgQEAKIAkJCQlFMTM5ODY2NDE1NDc4NDc0MDAxRTNGNjUgLyog
U3R5bGVSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRCQkVENEQxNEZDREJBMTAwM0Yw
Qjk4IC8qIFN0eWxlUnVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAw
RDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdCNzYxQTEx
NjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2NvcGVSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEzOEE5RTUxNDc0NDM0NjAwQjBFRDEyIC8qIFN0eWxlU2hhZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEVBODAwQzBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTRGOUVFRjMxNTZEQTAwNzAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODIyMyw2ICsyODIzMCw3IEBACiAJCQkJRTEzOTg2NjMx
NTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTRCQkVENEMxNEZDREJBMTAwM0YwQjk4IC8qIFN0eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDk0NkVBRTE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUE3Qjc2MUEwMTYxRUU1MjYwMDIwODNEMyAvKiBTdHlsZVNjb3BlUmVz
b2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTgwMEQwQTE5NTE2RTAwQThFRjVGIC8q
IFN0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRGOUVFRjIxNTZEOUZGQTAwRDIz
RTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBODAw
QjBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAppbmRleCAwMWRkYjJkNzE2MTk4ZDEzNDZjZmY1MjI4
Mjk0YTBmYzEwOTQ4OTIzLi44NGY5ZmU3ZjQzYzg5ZTViZGQxZTBhMWJlYjgwZTQ2OGM4Y2E3YzMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKQEAgLTcyLDMgKzcyLDQgQEAKICNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRo
YW5kLmNwcCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmNwcCIKKyNpbmNsdWRlICJTdHlsZVNj
b3BlUmVzb2x2ZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM2
YzhiNmI1ZjdhNjMzNDY4ZjlhM2Y1ZjE4MzA2NGIyMjE4NGNhYzQuLmFiMGVjNDFhMWNjMzFlMjgy
NDQ5YmFmYzk1ODgyNTM2OTgxODZjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCiAj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCisjaW5j
bHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRz
LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0y
ODcsMTAgKzI4OCw2IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCiAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQogI2VuZGlmCi0jaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKLSAgICAsIG1fc2NvcGVTdGFja1BhcmVudCgwKQotICAgICwgbV9z
Y29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXgoMCkKLSNlbmRpZgogICAgICwgbV9zdHlsZU1hcCh0
aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7
CkBAIC0zOTUsMTAgKzM5Miw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVz
KCkKICAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCiAgICAgbV9mZWF0dXJlcy5hZGQoZGVmYXVs
dFN0eWxlLT5mZWF0dXJlcygpKTsKICAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5m
ZWF0dXJlcygpKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGZvciAoU2NvcGVkUnVs
ZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAh
PSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9mZWF0dXJlcy5h
ZGQoaXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKLSNlbmRpZgorICAgIGlmIChtX3Njb3BlUmVzb2x2
ZXIpCisgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+Y29sbGVjdEZlYXR1cmVzVG8obV9mZWF0dXJl
cyk7CiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJT
dHlsZS0+ZmVhdHVyZXMoKSk7CiAKQEAgLTQwNiwzOCArNDAxLDYgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0ID0g
bWFrZVJ1bGVTZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKIH0KIAotI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVy
OjpkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKLXsKLSAgICBBU1NF
UlQoc2hlZXQpOwotCi0gICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxl
ZChkb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUg
PSBzaGVldC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+
aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHls
ZVRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Ci0gICAg
aWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50
LT5pc0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3QoKSA6IDA7Ci0KLSAg
ICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKHBhcmVudC0+
aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsK
LX0KLQotaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKLXsKLSAgICBpZiAoIXNjb3BlLT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBTY29wZWRSdWxlU2V0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUp
OwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT52YWx1
ZS5nZXQoKSA6IDA7IAotfQotI2VuZGlmCi0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzZXRBdXRo
b3JTdHlsZSgpCiB7CiAgICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwpAQCAt
NDU4LDE2ICs0MjEsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNo
ZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAgICAgICAgaWYgKGNz
c1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbV9tZWRpdW0tPmV2YWwoY3NzU2hlZXQtPm1lZGlh
UXVlcmllcygpLCB0aGlzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTdHlsZVNo
ZWV0Q29udGVudHMqIHNoZWV0ID0gY3NzU2hlZXQtPmNvbnRlbnRzKCk7Ci0jaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1p
bmVTY29wZShjc3NTaGVldCk7Ci0gICAgICAgIGlmIChzY29wZSkgewotICAgICAgICAgICAgU2Nv
cGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVz
LmFkZChzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICBpZiAo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9y
KGNzc1NoZWV0KSkgeworICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAg
ICAgICAgICAgbV9zY29wZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZl
cigpKTsKKyAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29w
ZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0jZW5kaWYKKwogICAgICAgICBtX2F1dGhv
clN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAg
ICAgaWYgKCFtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGNz
c1NoZWV0KTsKQEAgLTQ3OSw2MiArNDM5LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CiB9CiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotdm9pZCBTdHlsZVJl
c29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQotewot
ICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0
eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBBU1NFUlQoIW1fc2NvcGVkQXV0
aG9yU3R5bGVzLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDApOwotICAg
IGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsKLSAgICBmb3IgKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50T3JIb3N0
Tm9kZSgpKSB7Ci0gICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUoc2Nv
cGUpOwotICAgICAgICBpZiAocnVsZVNldCkKLSAgICAgICAgICAgIG1fc2NvcGVTdGFjay5hcHBl
bmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBydWxlU2V0
KSk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChz
Y29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICAgICAtLWF1dGhvclN0eWxlQm91
bmRzSW5kZXg7Ci0gICAgfQotICAgIG1fc2NvcGVTdGFjay5yZXZlcnNlKCk7Ci0gICAgbV9zY29w
ZVN0YWNrUGFyZW50ID0gcGFyZW50OwotICAgIG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4
ID0gMDsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQotewotICAgIC8v
IFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlm
IDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgaWYgKG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fc2NvcGVTdGFja1BhcmVu
dCk7Ci0gICAgICAgIEFTU0VSVChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgotICAgIC8vIFJlY3Jl
YXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KLSAgICBp
ZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7Ci0gICAgICAgIHNldHVw
U2NvcGVTdGFjayhzY29wZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNjb3Bl
LT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHls
ZXMoKSkKLSAgICAgICAgKyttX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAgICAvLyBP
dGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0aGUgc3RhY2suCi0gICAgUnVsZVNl
dCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShzY29wZSk7Ci0gICAgaWYgKHJ1bGVTZXQpCi0g
ICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHNjb3BlLCBtX3Njb3Bl
U3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgIG1fc2NvcGVTdGFja1BhcmVu
dCA9IHNjb3BlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFNjb3BlKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKQotewotICAgIC8vIE9ubHkgYm90aGVyIHRvIHVwZGF0ZSB0aGUgc2Nv
cGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3RlbnQuCi0gICAgaWYgKHNjb3BlU3Rh
Y2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7Ci0gICAgICAgIGlmICghbV9zY29wZVN0YWNrLmlzRW1w
dHkoKSAmJiBtX3Njb3BlU3RhY2subGFzdCgpLm1fc2NvcGUgPT0gc2NvcGUpCi0gICAgICAgICAg
ICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93
Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAg
ICAgICAgICAgLS1tX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKLSAgICAgICAgbV9zY29w
ZVN0YWNrUGFyZW50ID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICB9Ci19Ci0jZW5k
aWYKLQogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJl
bnQpCiB7CiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50c1BhcmVudCA9IHBhcmVudC0+
cGFyZW50T3JIb3N0RWxlbWVudCgpOwpAQCAtNTQ5LDcgKzQ1Myw4IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgICAgICBtX2NoZWNr
ZXIucHVzaFBhcmVudChwYXJlbnQpOwogCiAgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNo
YWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KLSAgICBwdXNoU2NvcGUocGFyZW50
LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikK
KyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNoKHBhcmVudCwgcGFyZW50LT5wYXJlbnRPckhv
c3ROb2RlKCkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxl
bWVudCogcGFyZW50KQpAQCAtNTU4LDE5ICs0NjMsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpw
b3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICAvLyBQYXVzZSBtYWludGFpbmlu
ZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgogICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQocGFyZW50KSkKICAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOwotICAg
IHBvcFNjb3BlKHBhcmVudCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgbV9z
Y29wZVJlc29sdmVyLT5wb3AocGFyZW50KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNo
UGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFT
U0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFk
b3dSb290LT5ob3N0KCkpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2Nv
cGVSZXNvbHZlci0+cHVzaChzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkpOwogfQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCog
c2hhZG93Um9vdCkKIHsKICAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAgICBwb3BT
Y29wZShzaGFkb3dSb290KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAgICBtX3Nj
b3BlUmVzb2x2ZXItPnBvcChzaGFkb3dSb290KTsKIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZp
ZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC04MTAsMjYg
KzcxOCwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMu
aXNFbXB0eSgpKQorICAgIGlmICghbV9zY29wZVJlc29sdmVyIHx8ICFtX3Njb3BlUmVzb2x2ZXIt
Pmhhc1Njb3BlZFN0eWxlcygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29w
ZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChy
ZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmICghc2NvcGVTdGFja0lz
Q29uc2lzdGVudChtX2VsZW1lbnQpKQotICAgICAgICBzZXR1cFNjb3BlU3RhY2sobV9lbGVtZW50
KTsKLSAgICBpZiAobV9zY29wZVN0YWNrLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fc2NvcGVSZXNv
bHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+
YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwotICAg
IHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVTdGFjay5zaXplKCk7CisgICAgdW5zaWduZWQg
c2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU2NvcGVTdGFj
a0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVTdGFja1tpXTsKKyAgICAgICAgY29uc3QgU3R5bGVTY29w
ZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFt
ZUF0KGkpOwogICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUu
bV9zY29wZS0+aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsK
ICAgICAgICAgICAgIGlmICghYXBwbHlBdXRob3JTdHlsZXMpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUubV9hdXRob3JT
dHlsZUJvdW5kc0luZGV4ICE9IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4KQorICAgICAg
ICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFtZSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgICAgCkBAIC05MzQs
MTEgKzg0MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAgICAgU3R5bGVSdWxl
KiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxl
KGRvY3VtZW50KCksIHJ1bGUpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgICAgIGlm
IChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgewotI2Vsc2UKLSAgICAg
ICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0jZW5kaWYKICAgICAgICAgICAgIC8v
IENoZWNrIHdoZXRoZXIgdGhlIHJ1bGUgaXMgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVl
IHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAgICAgICAgIC8vIGEpIGl0J3MgYSBVQSBy
dWxlCiAgICAgICAgICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVz
CkBAIC05NDYsOSArODQ4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKICAgICAgICAgICAg
IC8vIGQpIHRoZSBydWxlIGNvbnRhaW5zIHNoYWRvdy1JRCBwc2V1ZG8gZWxlbWVudHMKICAgICAg
ICAgICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKICAg
ICAgICAgICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1dGhvclN0eWxlcygpCi0jaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKICAgICAgICAgICAgICAgICAmJiAoIW9wdGlvbnMuc2NvcGUgfHwg
b3B0aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKQotI2VuZGlmCiAgICAgICAg
ICAgICAgICAgJiYgIW1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSB7CiAKICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNl
KTsKQEAgLTUzMDMsMTAgKzUyMDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogICAgIGluZm8uYWRkTWVtYmVyKG1fcGVu
ZGluZ1NWR0RvY3VtZW50cyk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAg
IGluZm8uYWRkTWVtYmVyKG1fc2NvcGVkQXV0aG9yU3R5bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJl
cihtX3Njb3BlU3RhY2spOwotI2VuZGlmCisgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29s
dmVyKTsKIAogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gYSBwbGFjZSB3aGVyZSBpdCB3b3Vs
ZCBiZSBjYWxsZWQgb25seSBvbmNlPwogICAgIGluZm8uYWRkTWVtYmVyKGRlZmF1bHRTdHlsZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBhZmI3YTQ4NTYyYWQ3OGZkMjljMDI0
YTM2N2I0ZTI4NmZmZWIzMTY2Li42YjEzNjIzYzY1M2NkYmMxYjU5YzdhZTI3N2QzODRlODIxYmIy
MzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTc0LDYgKzc0LDcgQEAgY2xh
c3MgUnVsZVNldDsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CiBj
bGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXI7CiBjbGFzcyBTdHls
ZUltYWdlOwogY2xhc3MgU3R5bGVLZXlmcmFtZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwpA
QCAtMTc5LDE0ICsxODAsNiBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJh
bWUqLCBLZXlmcmFtZVZhbHVlJik7CiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIHZv
aWQgcHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZVBhcmVudCk7Ci0gICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSk7Ci0jZWxzZQotICAgIHZvaWQgcHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUq
LCBjb25zdCBDb250YWluZXJOb2RlKikgeyB9Ci0gICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250
YWluZXJOb2RlKikgeyB9Ci0jZW5kaWYKLQogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
d2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4g
ZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCiAgICAgZW51bSBDU1NSdWxlRmlsdGVyIHsK
QEAgLTQ5MywzNCArNDg2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEZpbHRlck9wZXJhdGlv
biosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IG1fcGVuZGluZ1NWR0RvY3Vt
ZW50czsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBjb25zdCBDb250
YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0Kik7Ci0KLSAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNj
b3BlZFJ1bGVTZXRNYXA7Ci0KLSAgICBSdWxlU2V0KiBydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29u
dGFpbmVyTm9kZSopIGNvbnN0OwotCi0gICAgdm9pZCBzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29u
dGFpbmVyTm9kZSopOwotICAgIGJvb2wgc2NvcGVTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250
YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9z
Y29wZVN0YWNrUGFyZW50OyB9Ci0KLSAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9y
U3R5bGVzOwotICAgIAotICAgIHN0cnVjdCBTY29wZVN0YWNrRnJhbWUgewotICAgICAgICBTY29w
ZVN0YWNrRnJhbWUoKSA6IG1fc2NvcGUoMCksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCgwKSwg
bV9ydWxlU2V0KDApIHsgfQotICAgICAgICBTY29wZVN0YWNrRnJhbWUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4LCBSdWxlU2V0KiBydWxlU2V0
KSA6IG1fc2NvcGUoc2NvcGUpLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoYXV0aG9yU3R5bGVC
b3VuZHNJbmRleCksIG1fcnVsZVNldChydWxlU2V0KSB7IH0KLSAgICAgICAgY29uc3QgQ29udGFp
bmVyTm9kZSogbV9zY29wZTsKLSAgICAgICAgaW50IG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleDsK
LSAgICAgICAgUnVsZVNldCogbV9ydWxlU2V0OwotICAgIH07Ci0gICAgLy8gVmVjdG9yICh1c2Vk
IGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVs
ZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKLSAgICAvLyBlbmNvdW50ZXJlZCBk
dXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCi0gICAgVmVjdG9yPFNj
b3BlU3RhY2tGcmFtZT4gbV9zY29wZVN0YWNrOwotICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFz
IHBhcmVudCBlbGVtZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgotICAg
IC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sg
aXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRT
dGFjay4KLSAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7Ci0gICAg
aW50IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4OwotI2VuZGlmCi0KKyAgICBPd25QdHI8
U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7CiAgICAgQ1NTVG9TdHlsZU1hcCBt
X3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjIyNjljYjMyODczNTc5
ZGZhOWY5ZTkyMjhkZDkxODQzZWYxZDMxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCisKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNv
bnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxT
dHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgorI2luY2x1ZGUgIlJ1bGVT
ZXQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUlu
c3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU3R5bGVTY29wZVJlc29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIoKQorICAg
IDogbV9zdGFja1BhcmVudCgwKQorICAgICwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4KDApCit7
Cit9CisKK1N0eWxlU2NvcGVSZXNvbHZlcjo6flN0eWxlU2NvcGVSZXNvbHZlcigpCit7Cit9CisK
K2NvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY29uc3Qg
Q1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHNoZWV0LT5vd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFDb250ZXh0RmVhdHVyZXM6OnN0eWxlU2Nv
cGVkRW5hYmxlZChkb2N1bWVudCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogb3du
ZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25l
ck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQq
IHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUp
OworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxl
RWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFkb3dSb290KCkgOiAw
OworCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChw
YXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVu
dCA6IDA7Cit9CisKK2lubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJ1bGVTZXRG
b3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0Cit7CisgICAgaWYgKCFzY29wZS0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU2NvcGVk
UnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3Bl
KTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0
KCkgOiAwOyAKK30KKworUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVSdWxlU2V0
Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6
OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIp
OworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBT
dGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gVGhlIHNjb3Bpbmcg
ZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1
c2VkIGFueXdoZXJlLgorICAgIEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKKwor
ICAgIG1fc3RhY2suc2hyaW5rKDApOworICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0g
MDsKKyAgICBmb3IgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50OyBzY29wZTsg
c2NvcGUgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1
bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAg
ICAgICBtX3N0YWNrLmFwcGVuZChTdGFja0ZyYW1lKHNjb3BlLCBhdXRob3JTdHlsZUJvdW5kc0lu
ZGV4LCBydWxlU2V0KSk7CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRv
U2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICAgICAtLWF1
dGhvclN0eWxlQm91bmRzSW5kZXg7CisgICAgfQorCisgICAgbV9zdGFjay5yZXZlcnNlKCk7Cisg
ICAgbV9zdGFja1BhcmVudCA9IHBhcmVudDsKKyAgICBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgg
PSAwOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cHVzaChjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpCit7CisgICAgLy8g
U2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYg
PHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KKyAgICBpZiAobV9hdXRob3JTdHls
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9zdGFja1BhcmVudCk7CisgICAgICAg
IEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlIHdlIG1heSBnZXQg
aW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgorICAgIC8vIFJlY3JlYXRlIHRoZSB3aG9sZSBz
Y29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KKyAgICBpZiAoIXN0YWNrSXNDb25z
aXN0ZW50KHNjb3BlUGFyZW50KSkgeworICAgICAgICBzZXR1cFN0YWNrKHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRv
U2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICsrbV9zdGFj
a1BhcmVudEJvdW5kc0luZGV4OworICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVu
dCBvbnRvIHRoZSBzdGFjay4KKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29w
ZSk7CisgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgIG1fc3RhY2suYXBwZW5kKFN0YWNrRnJhbWUo
c2NvcGUsIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCwgcnVsZVNldCkpOworICAgIG1fc3RhY2tQ
YXJlbnQgPSBzY29wZTsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhl
IHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgorICAgIGlmIChzdGFj
a0lzQ29uc2lzdGVudChzY29wZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHkoKSAm
JiBtX3N0YWNrLmxhc3QoKS5tX3Njb3BlID09IHNjb3BlKQorICAgICAgICAgICAgbV9zdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hh
ZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgICAgICAgICAtLW1fc3Rh
Y2tQYXJlbnRCb3VuZHNJbmRleDsKKyAgICAgICAgbV9zdGFja1BhcmVudCA9IHNjb3BlLT5wYXJl
bnRPckhvc3ROb2RlKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29s
bGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQoreworICAgIGZvciAoU2Nv
cGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAh
PSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT52
YWx1ZS0+ZmVhdHVyZXMoKSk7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAorewor
ICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVN
ZW1vcnlUeXBlczo6Q1NTKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlcyk7Cisg
ICAgaW5mby5hZGRNZW1iZXIobV9zdGFjayk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJl
c29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODdlMjA0NzRmOTQyOWI4NmYwYjg0NWUyZjI1ODExOTJjMTVmM2QxNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAtMCww
ICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTdHlsZVNjb3BlUmVzb2x2ZXJfaAorI2RlZmluZSBTdHlsZVNjb3Bl
UmVzb2x2ZXJfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDb250YWluZXJOb2RlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIFJ1bGVTZXQ7
CitjbGFzcyBSdWxlRmVhdHVyZVNldDsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisKK2Ns
YXNzIFN0eWxlU2NvcGVSZXNvbHZlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOwor
CisgICAgc3RydWN0IFN0YWNrRnJhbWUgeworICAgICAgICBTdGFja0ZyYW1lKCkgOiBtX3Njb3Bl
KDApLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoMCksIG1fcnVsZVNldCgwKSB7IH0KKyAgICAg
ICAgU3RhY2tGcmFtZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgaW50IGF1dGhvclN0eWxl
Qm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1bGVTZXQpCisgICAgICAgICAgICA6IG1fc2NvcGUoc2Nv
cGUpLCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXgoYXV0aG9yU3R5bGVCb3VuZHNJbmRleCksIG1f
cnVsZVNldChydWxlU2V0KQorICAgICAgICB7IH0KKworICAgICAgICBjb25zdCBDb250YWluZXJO
b2RlKiBtX3Njb3BlOworICAgICAgICBpbnQgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4OworICAg
ICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7CisgICAgfTsKKworICAgIFN0eWxlU2NvcGVSZXNvbHZl
cigpOworICAgIH5TdHlsZVNjb3BlUmVzb2x2ZXIoKTsKKworICAgIHN0YXRpYyBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZUZvcihjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisKKyAgICB2b2lkIHB1
c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
UGFyZW50KTsKKyAgICB2b2lkIHBvcChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAg
Ym9vbCBoYXNTY29wZWRTdHlsZXMoKSBjb25zdCB7IHJldHVybiAhbV9hdXRob3JTdHlsZXMuaXNF
bXB0eSgpOyB9CisgICAgUnVsZVNldCogZW5zdXJlUnVsZVNldEZvcihjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSk7CisgICAgYm9vbCBlbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5lck5v
ZGUqKTsKKyAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNp
emUoKTsgfQorICAgIGNvbnN0IFN0YWNrRnJhbWUmIHN0YWNrRnJhbWVBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5hdChpbmRleCk7IH0KKyAgICBib29sIG1hdGNoZXNT
dHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUu
bV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQor
ICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmKTsKKworICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0
OworICAgIHZvaWQgc2V0dXBTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CisgICAgYm9vbCBz
dGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0
dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9zdGFja1BhcmVudDsgfQorCisgICAgU2NvcGVkUnVs
ZVNldE1hcCBtX2F1dGhvclN0eWxlczsKKworICAgIC8vIFZlY3RvciAodXNlZCBhcyBzdGFjaykg
dGhhdCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50cyB3aXRo
IGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQpCisgICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIHRyZWUg
aXRlcmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgorICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBt
X3N0YWNrOworICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50IHdoZW4g
dXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBk
ZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJh
dGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KKyAgICBjb25zdCBDb250
YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OworICAgIGludCBtX3N0YWNrUGFyZW50Qm91bmRzSW5k
ZXg7Cit9OworCitpbmxpbmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29u
c2lzdGVuY3koQ29udGFpbmVyTm9kZSogcGFyZW50KQoreworICAgIC8vIE1hdGNoIHNjb3BlZCBh
dXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVp
bGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCisgICAgaWYgKCFzdGFja0lzQ29uc2lzdGVu
dChwYXJlbnQpKQorICAgICAgICBzZXR1cFN0YWNrKHBhcmVudCk7CisgICAgcmV0dXJuICFtX3N0
YWNrLmlzRW1wdHkoKTsKK30KKworI2Vsc2UKKworY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVGb3IoY29uc3Qg
Q1NTU3R5bGVTaGVldCopIHsgcmV0dXJuIDA7IH0KKyAgICB2b2lkIHB1c2goY29uc3QgQ29udGFp
bmVyTm9kZSosIGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0KKyAgICB2b2lkIHBvcChjb25zdCBD
b250YWluZXJOb2RlKikgeyB9CisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVy
ZVNldCYpIHsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVy
Tm9kZSopIHsgcmV0dXJuIDA7IH0KK307CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NPUEVE
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHlsZVNjb3BlUmVzb2x2
ZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167680</attachid>
            <date>2012-10-08 20:54:27 -0700</date>
            <delta_ts>2012-10-09 01:00:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-98244-20121009125329.patch</filename>
            <type>text/plain</type>
            <size>35008</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjODg2OTkyMTc2YWMx
NzUzYTQ1ODM2OGE4OGM2M2JhZDFkNjhiOC4uMWEwZDY1YWI3YmIxNjI1ZGRkZTMxZDEyZGM3N2Nk
MmMwMDU2ZWZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEwLTA4ICBIYWpp
bWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbUmVmYWN0b3Jpbmdd
IFNjb3BlZCBTdHlsZSByZWxhdGVkIGNvZGUgc2hvdWxkIGhhdmUgaXRzIG93biBjbGFzcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MjQ0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGV4dHJhY3RzIFN0eWxlU2NvcGVSZXNvbHZlciBmcm9tIFN0eWxlUmVzb2x2ZXIgdG8gY2xhcmlm
eQorICAgICAgICB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHN0eWxlIHNjb3BlIGhhbmRsaW5n
LiBOb3cgd2UgY2FuIGVhc2lseSBzZWUKKyAgICAgICAgd2hlcmUgdGhlIHN0eWxlIHNjb3Bpbmcg
bmVlZHMgdG8gYmUgaW52b2xlZC4KKworICAgICAgICBDb21pbmcgU2hhZG93IERPTSByZWxhdGVk
IGNoYW5nZSBsaWtlIEBob3N0IHJ1bGVzIHdpbGwgZml0IHdpdGhpbiB0aGlzIGNsYXNzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAg
ICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29s
bGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1
dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hQ
YXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVu
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudFNo
YWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hh
ZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBv
cnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAg
KFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjp+U3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjpydWxlU2V0Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZl
cjo6ZW5zdXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2
ZXI6OnNldHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpw
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6Cisg
ICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZTo6U3RhY2tGcmFtZSk6CisgICAgICAgIChTdGFj
a0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6aGFzU2NvcGVk
U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tGcmFtZUF0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hlc1N0eWxlQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3RhY2tJc0NvbnNpc3Rl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVG
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVSdWxlU2V0
Rm9yKToKKwogMjAxMi0xMC0wOCAgSmFlaHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtDQUlST10gQWRqdXN0IHRoZSBzb3VyY2UgcmVjdCBzaXplIHdoZW4gSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HIGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMTVkMThmN2VlMzUyODZlNDUwNTEyYThkNmNiMjZmYzgzYTQzMmE5Zi4uODY2NDRiMThiZjU2
ODQ1NTYwNWQyYTMwYzJkMjA3ODY5Zjk2Mjk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEw
ODEsNiArMTA4MSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvU3R5bGVSZXNvbHZl
ci5jcHAKICAgICBjc3MvU3R5bGVSdWxlLmNwcAogICAgIGNzcy9TdHlsZVJ1bGVJbXBvcnQuY3Bw
CisgICAgY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKICAgICBjc3MvU3R5bGVTaGVldC5jcHAK
ICAgICBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDBiNTQwYmI0MTM3MDU4MDQ1NDE4
NDcwNjZlNzk1YTU5MjlmMzc0ZjQuLmE4MmIzYzIzN2UyMDdmNmY0NmY5MmY5MGViM2Y1NzY2Zjdm
YmQ0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjYzNCw2ICsyNjM0LDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNj
b3BlUmVzb2x2ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMWZjMWFmYTg5ZWM1OWEyNTQ5OTUzY2JhNmViZDM0
NGQwMWY2ODUwYS4uYzY0MDJmYTFmNjI1MjBmZGNhMGMwOGQ1MmU3ZTU5MDQxMzJkY2JkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCkBAIC0zMjQsNiArMzI0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwIFwKICAgICBjc3MvU3R5bGVSdWxlLmNwcCBcCiAgICAgY3NzL1N0eWxlUnVs
ZUltcG9ydC5jcHAgXAorICAgIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3Mv
U3R5bGVTaGVldC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIFwKICAgICBj
c3MvU3R5bGVTaGVldExpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyMjVhZDIyODFmYzhk
ZjNlOGNmNzNjYTMxMGM4MzNhMmRlY2YxMWU1Li40OTBkMjE0YTA1ODU1ODQzMTYxZTc5ZTQ2NDQ4
M2EyMDMyMTI3OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNjM2LDYgKzI2MzYsOCBAQAogICAg
ICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGUuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZUlt
cG9ydC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGVJbXBvcnQuaCcsCisgICAgICAg
ICAgICAnY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9TdHls
ZVNjb3BlUmVzb2x2ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlU2hlZXQuY3BwJywKICAg
ICAgICAgICAgICdjc3MvU3R5bGVTaGVldC5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZjUwMmZhNjU5N2U1MzUzMmUyZDgzZjE3MjkyZWNlMzgzMjRk
OGMxYi4uMTBlZDU5ZjlmYTM3Njc4ODQ3ODc4ZGM2MmI0MzA2ODM1NDg1MDg2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzg3
Niw2ICszODc2LDggQEAKIAkJQTdCMDcwRDIxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9u
U2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QjA3MEQwMTMwQTQwOUMwMEEzNzYzQyAvKiBGcmFtZUFjdGlvblNjaGVkdWxlci5jcHAg
Ki87IH07CiAJCUE3QjA3MEQzMTMwQTQwOUMwMEEzNzYzQyAvKiBGcmFtZUFjdGlvblNjaGVkdWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCMDcw
RDExMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggKi87IH07CiAJCUE3
QjZFNjlGMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERy
YWdEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQTdCNzYxQTAxNjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2NvcGVSZXNvbHZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I3NjE5RTE2MUVF
NTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmNwcCAqLzsgfTsKKwkJQTdCNzYxQTEx
NjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2NvcGVSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNzYxOUYxNjFFRTUyNjAwMjA4M0QzIC8q
IFN0eWxlU2NvcGVSZXNvbHZlci5oICovOyB9OwogCQlBN0JCRTI2NjExQUZCM0YyMDAwNUVBMDMg
LyogSlNIVE1MTWV0ZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QkJFMjY0MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVs
ZW1lbnQuY3BwICovOyB9OwogCQlBN0JCRTI2NzExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0
ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0JCRTI2NTExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmggKi87IH07
CiAJCUE3QkY3RURGMTRDOTE3NUEwMDE0NDg5RCAvKiBJbnRlcm5hbFNldHRpbmdzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkY3RURDMTRDOTE3
NUEwMDE0NDg5RCAvKiBJbnRlcm5hbFNldHRpbmdzLmNwcCAqLzsgfTsKQEAgLTExMTE4LDYgKzEx
MTIwLDggQEAKIAkJQTdCNEVBNzgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5n
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFsU2V0
dGluZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0RUE3OTE0QzkzNDg0
MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0I2RTY5RDBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTdCNzYxOUUxNjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2NvcGVSZXNvbHZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3BlUmVzb2x2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0I3NjE5RjE2MUVFNTI2MDAyMDgz
RDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0eWxlU2NvcGVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0I3NzQ5NjE0Q0Y2MzUzMDA0MDQ0QkIgLyogSFRNTENvbnRlbnRFbGVtZW50LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBIVE1MQ29udGVudEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0JCRTI2NDExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE1ldGVy
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QkJFMjY1MTFBRkIz
RjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MTWV0ZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTI1NCw2ICsyMTI1OCw4IEBACiAJCQkJRTRCQkVENEIxNEZDREJBMTAwM0YwQjk4
IC8qIFN0eWxlUnVsZS5oICovLAogCQkJCUU0OTQ2RUFDMTU2RTY0REQwMEQzMjk3RiAvKiBTdHls
ZVJ1bGVJbXBvcnQuY3BwICovLAogCQkJCUU0OTQ2RUFEMTU2RTY0REQwMEQzMjk3RiAvKiBTdHls
ZVJ1bGVJbXBvcnQuaCAqLywKKwkJCQlBN0I3NjE5RTE2MUVFNTI2MDAyMDgzRDMgLyogU3R5bGVT
Y29wZVJlc29sdmVyLmNwcCAqLywKKwkJCQlBN0I3NjE5RjE2MUVFNTI2MDAyMDgzRDMgLyogU3R5
bGVTY29wZVJlc29sdmVyLmggKi8sCiAJCQkJQThFQTgwMDUwQTE5NTE2RTAwQThFRjVGIC8qIFN0
eWxlU2hlZXQuY3BwICovLAogCQkJCUE4RUE4MDA0MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNo
ZWV0LmggKi8sCiAJCQkJODUwNjU2REMwQUFCNDREOTAwMkQxNUMwIC8qIFN0eWxlU2hlZXQuaWRs
ICovLApAQCAtMjUwMTQsNiArMjUwMjAsNyBAQAogCQkJCUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2
NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJCRUQ0RDE0RkNEQkEx
MDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDk0NkVBRjE1NkU2
NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0I3
NjFBMTE2MUVFNTI2MDAyMDgzRDMgLyogU3R5bGVTY29wZVJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTM4QTlFNTE0NzQ0MzQ2MDBCMEVEMTIgLyogU3R5bGVTaGFkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RUE4MDBDMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNEY5RUVGMzE1NkRBMDA3MDBEMjNFN0UgLyogU3R5bGVTaGVldENv
bnRlbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MjIzLDYgKzI4MjMwLDcgQEAKIAkJCQlFMTM5
ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNEJCRUQ0QzE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0OTQ2RUFFMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTdCNzYxQTAxNjFFRTUyNjAwMjA4M0QzIC8qIFN0eWxlU2Nv
cGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBODAwRDBBMTk1MTZFMDBBOEVG
NUYgLyogU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEY5RUVGMjE1NkQ5RkZB
MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
RUE4MDBCMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDAxZGRiMmQ3MTYxOThkMTM0NmNm
ZjUyMjgyOTRhMGZjMTA5NDg5MjMuLjg0ZjlmZTdmNDNjODllNWJkZDFlMGExYmViODBlNDY4Yzhj
YTdjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNzIsMyArNzIsNCBAQAog
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuY3BwIgorI2luY2x1ZGUgIlN0
eWxlU2NvcGVSZXNvbHZlci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5k
ZXggMzZjOGI2YjVmN2E2MzM0NjhmOWEzZjVmMTgzMDY0YjIyMTg0Y2FjNC4uYWIwZWM0MWExY2Mz
MWUyODI0NDliYWZjOTU4ODI1MzY5ODE4NmM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcApAQCAtMTE0LDYgKzExNCw3IEBACiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2Uu
aCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIK
KyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIK
QEAgLTI4NywxMCArMjg4LDYgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCiAjZW5kaWYKLSNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9zY29wZVN0YWNrUGFyZW50KDApCi0gICAg
LCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleCgwKQotI2VuZGlmCiAgICAgLCBtX3N0eWxl
TWFwKHRoaXMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKTsKQEAgLTM5NSwxMCArMzkyLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVh
dHVyZXMoKQogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KICAgICBtX2ZlYXR1cmVzLmFkZChk
ZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOwogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5
bGUtPmZlYXR1cmVzKCkpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgZm9yIChTY29w
ZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7
IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1
cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwotI2VuZGlmCisgICAgaWYgKG1fc2NvcGVS
ZXNvbHZlcikKKyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5jb2xsZWN0RmVhdHVyZXNUbyhtX2Zl
YXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1fZmVhdHVyZXMuYWRkKG1f
dXNlclN0eWxlLT5mZWF0dXJlcygpKTsKIApAQCAtNDA2LDM4ICs0MDEsNiBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwogfQog
Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLWNvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlUmVz
b2x2ZXI6OmRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KQotewotICAg
IEFTU0VSVChzaGVldCk7Ci0KLSAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6c3R5bGVTY29wZWRF
bmFibGVkKGRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5vZGUqIG93bmVy
Tm9kZSA9IHNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJO
b2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnN0eWxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIVE1MU3R5bGVFbGVtZW50KiBz
dHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsK
LSAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCi0gICAgICAgIHJldHVybiBzdHlsZUVs
ZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk/IHN0eWxlRWxlbWVudC0+c2hhZG93Um9vdCgpIDogMDsK
LQotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHN0eWxlRWxlbWVudC0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiAocGFy
ZW50LT5pc0VsZW1lbnROb2RlKCkgfHwgcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkgPyBwYXJlbnQg
OiAwOwotfQotCi1pbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6cnVsZVNldEZvclNjb3Bl
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAotewotICAgIGlmICghc2NvcGUtPmhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFNjb3BlZFJ1
bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuZmluZChz
Y29wZSk7Ci0gICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQt
PnZhbHVlLmdldCgpIDogMDsgCi19Ci0jZW5kaWYKLQogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNl
dEF1dGhvclN0eWxlKCkKIHsKICAgICBtX2F1dGhvclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7
CkBAIC00NTgsMTYgKzQyMSwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUAogICAgICAgICBp
ZiAoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChjc3NTaGVldC0+
bWVkaWFRdWVyaWVzKCksIHRoaXMpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFN0
eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsKLSNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IGRl
dGVybWluZVNjb3BlKGNzc1NoZWV0KTsKLSAgICAgICAgaWYgKHNjb3BlKSB7Ci0gICAgICAgICAg
ICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JT
dHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVs
ZVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5h
ZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAg
IGlmIChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2Nv
cGVGb3IoY3NzU2hlZXQpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKKyAg
ICAgICAgICAgICAgICBtX3Njb3BlUmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJl
c29sdmVyKCkpOworICAgICAgICAgICAgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVSdWxlU2V0Rm9y
KHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSNlbmRpZgorCiAgICAgICAgIG1f
YXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwog
ICAgICAgICBpZiAoIW1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1h
cCwgY3NzU2hlZXQpOwpAQCAtNDc5LDYyICs0MzksNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVm
UAogICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRl
KGZvbnRTZWxlY3RvcigpKTsKIH0KIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQp
Ci17Ci0gICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBp
ZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgotICAgIEFTU0VSVCghbV9zY29w
ZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKLQotICAgIG1fc2NvcGVTdGFjay5zaHJpbmsoMCk7
Ci0gICAgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXggPSAwOwotICAgIGZvciAoY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUgPSBwYXJlbnQ7IHNjb3BlOyBzY29wZSA9IHNjb3BlLT5wYXJlbnRP
ckhvc3ROb2RlKCkpIHsKLSAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29w
ZShzY29wZSk7Ci0gICAgICAgIGlmIChydWxlU2V0KQotICAgICAgICAgICAgbV9zY29wZVN0YWNr
LmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIHJ1
bGVTZXQpKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dS
b290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAgICAgICAgICAgIC0tYXV0aG9yU3R5
bGVCb3VuZHNJbmRleDsKLSAgICB9Ci0gICAgbV9zY29wZVN0YWNrLnJldmVyc2UoKTsKLSAgICBt
X3Njb3BlU3RhY2tQYXJlbnQgPSBwYXJlbnQ7Ci0gICAgbV9zY29wZVN0YWNrUGFyZW50Qm91bmRz
SW5kZXggPSAwOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZShjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpCi17Ci0g
ICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQgc3Rh
Y2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBpZiAobV9zY29w
ZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zY29wZVN0YWNr
UGFyZW50KTsKLSAgICAgICAgQVNTRVJUKG1fc2NvcGVTdGFjay5pc0VtcHR5KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIEluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxl
IHJlc29sdmUgd2UgbWF5IGdldCBpbnZva2VkIGZvciByYW5kb20gZWxlbWVudHMuCi0gICAgLy8g
UmVjcmVhdGUgdGhlIHdob2xlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpbiBzdWNoIGNhc2VzLgot
ICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lzdGVudChzY29wZVBhcmVudCkpIHsKLSAgICAgICAg
c2V0dXBTY29wZVN0YWNrKHNjb3BlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
c2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhv
clN0eWxlcygpKQotICAgICAgICArK21fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4OwotICAg
IC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KLSAgICBS
dWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKLSAgICBpZiAocnVsZVNl
dCkKLSAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIG1f
c2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4LCBydWxlU2V0KSk7Ci0gICAgbV9zY29wZVN0YWNr
UGFyZW50ID0gc2NvcGU7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wU2NvcGUoY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRo
ZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KLSAgICBpZiAoc2Nv
cGVTdGFja0lzQ29uc2lzdGVudChzY29wZSkpIHsKLSAgICAgICAgaWYgKCFtX3Njb3BlU3RhY2su
aXNFbXB0eSgpICYmIG1fc2NvcGVTdGFjay5sYXN0KCkubV9zY29wZSA9PSBzY29wZSkKLSAgICAg
ICAgICAgIG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNT
aGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkp
Ci0gICAgICAgICAgICAtLW1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4OwotICAgICAgICBt
X3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgIH0KLX0K
LSNlbmRpZgotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQq
IHBhcmVudCkKIHsKICAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CkBAIC01NDksNyArNDUzLDggQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCiAgICAgICAgIG1f
Y2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CiAKICAgICAvLyBOb3RlOiBXZSBtdXN0bid0IHNr
aXAgU2hhZG93Um9vdCBub2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgotICAgIHB1c2hTY29wZShw
YXJlbnQsIHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKTsKKyAgICBpZiAobV9zY29wZVJlc29s
dmVyKQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPnB1c2gocGFyZW50LCBwYXJlbnQtPnBhcmVu
dE9ySG9zdE5vZGUoKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVu
dChFbGVtZW50KiBwYXJlbnQpCkBAIC01NTgsMTkgKzQ2MywyMiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgIC8vIFBhdXNlIG1haW50
YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCiAgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRT
dGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQogICAgICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7
Ci0gICAgcG9wU2NvcGUocGFyZW50KTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAg
ICBtX3Njb3BlUmVzb2x2ZXItPnBvcChwYXJlbnQpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6
OnB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCiB7CiAg
ICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcHVzaFNjb3BlKHNoYWRvd1Jvb3Qs
IHNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAg
bV9zY29wZVJlc29sdmVyLT5wdXNoKHNoYWRvd1Jvb3QsIHNoYWRvd1Jvb3QtPmhvc3QoKSk7CiB9
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dS
b290KiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAg
IHBvcFNjb3BlKHNoYWRvd1Jvb3QpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAg
IG1fc2NvcGVSZXNvbHZlci0+cG9wKHNoYWRvd1Jvb3QpOwogfQogCiAvLyBUaGlzIGlzIGEgc2lt
cGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKQEAgLTgx
MCwyNiArNzE4LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0
eWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIgfHwgIW1fc2NvcGVSZXNv
bHZlci0+aGFzU2NvcGVkU3R5bGVzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNo
IHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3Rh
Y2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKCFzY29wZVN0
YWNrSXNDb25zaXN0ZW50KG1fZWxlbWVudCkpCi0gICAgICAgIHNldHVwU2NvcGVTdGFjayhtX2Vs
ZW1lbnQpOwotICAgIGlmIChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKQorICAgIGlmICghbV9zY29w
ZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29w
ZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7
Ci0gICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVN0YWNrLnNpemUoKTsKKyAgICB1bnNp
Z25lZCBzY29wZVNpemUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICBjb25zdCBTY29w
ZVN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVN0YWNrW2ldOworICAgICAgICBjb25zdCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFj
a0ZyYW1lQXQoaSk7CiAgICAgICAgIGRvY3VtZW50U2NvcGUgPSBkb2N1bWVudFNjb3BlICYmICFm
cmFtZS5tX3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICBpZiAoZG9jdW1lbnRTY29w
ZSkgewogICAgICAgICAgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS5tX2F1
dGhvclN0eWxlQm91bmRzSW5kZXggIT0gbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXgpCisg
ICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1l
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAgICAKQEAg
LTkzNCwxMSArODQwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBTdHls
ZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRj
aFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICAg
ICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIG9wdGlvbnMuc2NvcGUpKSB7Ci0jZWxzZQot
ICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSkpIHsKLSNlbmRpZgogICAgICAgICAg
ICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcnVsZSBpcyBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50
IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAgICAgICAgICAgLy8gYSkgaXQncyBh
IFVBIHJ1bGUKICAgICAgICAgICAgIC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3Ig
cnVsZXMKQEAgLTk0Niw5ICs4NDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaQogICAgICAg
ICAgICAgLy8gZCkgdGhlIHJ1bGUgY29udGFpbnMgc2hhZG93LUlEIHBzZXVkbyBlbGVtZW50cwog
ICAgICAgICAgICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMo
KQogICAgICAgICAgICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKLSNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgICAgICAgICAgICAgICYmICghb3B0aW9ucy5zY29w
ZSB8fCBvcHRpb25zLnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0cmVlU2NvcGUpCi0jZW5kaWYKICAg
ICAgICAgICAgICAgICAmJiAhbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpIHsKIAogICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwg
ZmFsc2UpOwpAQCAtNTMwMywxMCArNTIwMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgaW5mby5hZGRNZW1iZXIo
bV9wZW5kaW5nU1ZHRG9jdW1lbnRzKTsKICNlbmRpZgotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zY29wZWRBdXRob3JTdHlsZXMpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fc2NvcGVTdGFjayk7Ci0jZW5kaWYKKyAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3Bl
UmVzb2x2ZXIpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0
IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CiAgICAgaW5mby5hZGRNZW1iZXIoZGVmYXVsdFN0
eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IGFmYjdhNDg1NjJhZDc4ZmQy
OWMwMjRhMzY3YjRlMjg2ZmZlYjMxNjYuLjZiMTM2MjNjNjUzY2RiYzFiNTljN2FlMjc3ZDM4NGU4
MjFiYjIzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNzQsNiArNzQsNyBA
QCBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdGF0aWNDU1NSdWxlTGlz
dDsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKK2NsYXNzIFN0eWxlU2NvcGVSZXNvbHZlcjsKIGNsYXNz
IFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1h
Z2U7CkBAIC0xNzksMTQgKzE4MCw2IEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVL
ZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0g
ICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlUGFyZW50KTsKLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKTsKLSNlbHNlCi0gICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSosIGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0KLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0
IENvbnRhaW5lck5vZGUqKSB7IH0KLSNlbmRpZgotCiBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0
aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBn
aXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KICAgICBlbnVtIENTU1J1bGVGaWx0
ZXIgewpAQCAtNDkzLDM0ICs0ODYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RmlsdGVyT3Bl
cmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZH
RG9jdW1lbnRzOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKLQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+
ID4gU2NvcGVkUnVsZVNldE1hcDsKLQotICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3JTY29wZShjb25z
dCBDb250YWluZXJOb2RlKikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldHVwU2NvcGVTdGFjayhjb25z
dCBDb250YWluZXJOb2RlKik7Ci0gICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50KGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9
PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KLQotICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRB
dXRob3JTdHlsZXM7Ci0gICAgCi0gICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7Ci0gICAgICAg
IFNjb3BlU3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9hdXRob3JTdHlsZUJvdW5kc0luZGV4
KDApLCBtX3J1bGVTZXQoMCkgeyB9Ci0gICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSwgaW50IGF1dGhvclN0eWxlQm91bmRzSW5kZXgsIFJ1bGVTZXQqIHJ1
bGVTZXQpIDogbV9zY29wZShzY29wZSksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleChhdXRob3JT
dHlsZUJvdW5kc0luZGV4KSwgbV9ydWxlU2V0KHJ1bGVTZXQpIHsgfQotICAgICAgICBjb25zdCBD
b250YWluZXJOb2RlKiBtX3Njb3BlOwotICAgICAgICBpbnQgbV9hdXRob3JTdHlsZUJvdW5kc0lu
ZGV4OwotICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7Ci0gICAgfTsKLSAgICAvLyBWZWN0b3Ig
KHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5l
LiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQotICAgIC8vIGVuY291bnRl
cmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KLSAgICBWZWN0
b3I8U2NvcGVTdGFja0ZyYW1lPiBtX3Njb3BlU3RhY2s7Ci0gICAgLy8gRWxlbWVudCBsYXN0IHNl
ZW4gYXMgcGFyZW50IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3RhY2su
Ci0gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRT
dGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3Bh
cmVudFN0YWNrLgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsK
LSAgICBpbnQgbV9zY29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0jZW5kaWYKLQorICAgIE93
blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNvbHZlcjsKICAgICBDU1NUb1N0eWxl
TWFwIG1fc3R5bGVNYXA7CiAKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjI2OWNiMzI4
NzM1NzlkZmE5ZjllOTIyOGRkOTE4NDNlZjFkMzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKKworI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVk
ZSAiQ29udGV4dEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCisjaW5jbHVkZSAi
UnVsZVNldC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlv
bkhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0eWxlU2NvcGVSZXNvbHZlcigp
CisgICAgOiBtX3N0YWNrUGFyZW50KDApCisgICAgLCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgo
MCkKK3sKK30KKworU3R5bGVTY29wZVJlc29sdmVyOjp+U3R5bGVTY29wZVJlc29sdmVyKCkKK3sK
K30KKworY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihj
b25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6c3R5
bGVTY29wZWRFbmFibGVkKGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2Rl
KiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCk7CisgICAgaWYgKCFvd25lck5vZGUgfHwg
IW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzdHlsZVRhZykpCisgICAgICAgIHJldHVybiAwOworCisgICAgSFRNTFN0eWxlRWxl
bWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVy
Tm9kZSk7CisgICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQorICAgICAgICByZXR1cm4g
c3R5bGVFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1lbnQtPnNoYWRvd1Jvb3Qo
KSA6IDA7CisKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVu
dE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8g
cGFyZW50IDogMDsKK30KKworaW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6cnVs
ZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKK3sKKyAgICBpZiAoIXNj
b3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBT
Y29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmZpbmQo
c2NvcGUpOworICAgIHJldHVybiBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT52YWx1
ZS5nZXQoKSA6IDA7IAorfQorCitSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVJ1
bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgU2NvcGVkUnVsZVNl
dE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVs
bHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpz
ZXR1cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKK3sKKyAgICAvLyBUaGUgc2Nv
cGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlz
bid0IHVzZWQgYW55d2hlcmUuCisgICAgQVNTRVJUKCFtX2F1dGhvclN0eWxlcy5pc0VtcHR5KCkp
OworCisgICAgbV9zdGFjay5zaHJpbmsoMCk7CisgICAgaW50IGF1dGhvclN0eWxlQm91bmRzSW5k
ZXggPSAwOworICAgIGZvciAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBwYXJlbnQ7IHNj
b3BlOyBzY29wZSA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgUnVsZVNl
dCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOworICAgICAgICBpZiAocnVsZVNldCkKKyAg
ICAgICAgICAgIG1fc3RhY2suYXBwZW5kKFN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91
bmRzSW5kZXgsIHJ1bGVTZXQpKTsKKyAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAm
JiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgICAg
IC0tYXV0aG9yU3R5bGVCb3VuZHNJbmRleDsKKyAgICB9CisKKyAgICBtX3N0YWNrLnJldmVyc2Uo
KTsKKyAgICBtX3N0YWNrUGFyZW50ID0gcGFyZW50OworICAgIG1fc3RhY2tQYXJlbnRCb3VuZHNJ
bmRleCA9IDA7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKK3sKKyAg
ICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFj
ayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlmIChtX2F1dGhv
clN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YWNrUGFyZW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUgd2UgbWF5
IGdldCBpbnZva2VkIGZvciByYW5kb20gZWxlbWVudHMuCisgICAgLy8gUmVjcmVhdGUgdGhlIHdo
b2xlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpbiBzdWNoIGNhc2VzLgorICAgIGlmICghc3RhY2tJ
c0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7CisgICAgICAgIHNldHVwU3RhY2soc2NvcGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAm
JiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgKytt
X3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUg
cGFyZW50IG9udG8gdGhlIHN0YWNrLgorICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9y
KHNjb3BlKTsKKyAgICBpZiAocnVsZVNldCkKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoU3RhY2tG
cmFtZShzY29wZSwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4LCBydWxlU2V0KSk7CisgICAgbV9z
dGFja1BhcmVudCA9IHNjb3BlOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cG9wKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIC8vIE9ubHkgYm90aGVyIHRvIHVwZGF0
ZSB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3RlbnQuCisgICAgaWYg
KHN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgeworICAgICAgICBpZiAoIW1fc3RhY2suaXNFbXB0
eSgpICYmIG1fc3RhY2subGFzdCgpLm1fc2NvcGUgPT0gc2NvcGUpCisgICAgICAgICAgICBtX3N0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAh
dG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAgICAgICAgIC0t
bV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworICAgICAgICBtX3N0YWNrUGFyZW50ID0gc2NvcGUt
PnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVy
Ojpjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMpCit7CisgICAgZm9y
IChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmJlZ2luKCk7
IGl0ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBmZWF0dXJlcy5hZGQo
aXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0
Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGVz
KTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3N0YWNrKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNj
b3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44N2UyMDQ3NGY5NDI5Yjg2ZjBiODQ1ZTJmMjU4MTE5MmMxNWYzZDE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBA
IC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFN0eWxlU2NvcGVSZXNvbHZlcl9oCisjZGVmaW5lIFN0eWxl
U2NvcGVSZXNvbHZlcl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgUnVs
ZVNldDsKK2NsYXNzIFJ1bGVGZWF0dXJlU2V0OworCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
KworY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRN
YXA7CisKKyAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7CisgICAgICAgIFN0YWNrRnJhbWUoKSA6IG1f
c2NvcGUoMCksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCgwKSwgbV9ydWxlU2V0KDApIHsgfQor
ICAgICAgICBTdGFja0ZyYW1lKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQgYXV0aG9y
U3R5bGVCb3VuZHNJbmRleCwgUnVsZVNldCogcnVsZVNldCkKKyAgICAgICAgICAgIDogbV9zY29w
ZShzY29wZSksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleChhdXRob3JTdHlsZUJvdW5kc0luZGV4
KSwgbV9ydWxlU2V0KHJ1bGVTZXQpCisgICAgICAgIHsgfQorCisgICAgICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIG1fc2NvcGU7CisgICAgICAgIGludCBtX2F1dGhvclN0eWxlQm91bmRzSW5kZXg7
CisgICAgICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKKyAgICB9OworCisgICAgU3R5bGVTY29wZVJl
c29sdmVyKCk7CisgICAgflN0eWxlU2NvcGVSZXNvbHZlcigpOworCisgICAgc3RhdGljIGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlRm9yKGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKworICAgIHZv
aWQgcHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGVQYXJlbnQpOworICAgIHZvaWQgcG9wKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsK
KyAgICBib29sIGhhc1Njb3BlZFN0eWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX2F1dGhvclN0eWxl
cy5pc0VtcHR5KCk7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKTsKKyAgICBib29sIGVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFp
bmVyTm9kZSopOworICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2suc2l6ZSgpOyB9CisgICAgY29uc3QgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N0YWNrLmF0KGluZGV4KTsgfQorICAgIGJvb2wgbWF0
Y2hlc1N0eWxlQm91bmRzKGNvbnN0IFN0YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVybiBm
cmFtZS5tX2F1dGhvclN0eWxlQm91bmRzSW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4
OyB9CisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYpOworCisgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgUnVsZVNldCogcnVsZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkg
Y29uc3Q7CisgICAgdm9pZCBzZXR1cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKKyAgICBi
b29sIHN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3Qg
eyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9PSBtX3N0YWNrUGFyZW50OyB9CisKKyAgICBTY29w
ZWRSdWxlU2V0TWFwIG1fYXV0aG9yU3R5bGVzOworCisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0
YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRz
IHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcg
dHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFN0YWNrRnJh
bWU+IG1fc3RhY2s7CisgICAgLy8gRWxlbWVudCBsYXN0IHNlZW4gYXMgcGFyZW50IGVsZW1lbnQg
d2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3RhY2suCisgICAgLy8gVGhpcyBpcyB1c2Vk
IHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25zaXN0ZW50LCBz
ZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgorICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIG1fc3RhY2tQYXJlbnQ7CisgICAgaW50IG1fc3RhY2tQYXJlbnRCb3Vu
ZHNJbmRleDsKK307CisKK2lubGluZSBib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlU3Rh
Y2tDb25zaXN0ZW5jeShDb250YWluZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gTWF0Y2ggc2Nv
cGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAo
cmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KKyAgICBpZiAoIXN0YWNrSXNDb25z
aXN0ZW50KHBhcmVudCkpCisgICAgICAgIHNldHVwU3RhY2socGFyZW50KTsKKyAgICByZXR1cm4g
IW1fc3RhY2suaXNFbXB0eSgpOworfQorCisjZWxzZQorCitjbGFzcyBTdHlsZVNjb3BlUmVzb2x2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZUZvcihj
b25zdCBDU1NTdHlsZVNoZWV0KikgeyByZXR1cm4gMDsgfQorICAgIHZvaWQgcHVzaChjb25zdCBD
b250YWluZXJOb2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQorICAgIHZvaWQgcG9wKGNv
bnN0IENvbnRhaW5lck5vZGUqKSB7IH0KKyAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVG
ZWF0dXJlU2V0JikgeyB9CisgICAgUnVsZVNldCogZW5zdXJlUnVsZVNldEZvcihjb25zdCBDb250
YWluZXJOb2RlKikgeyByZXR1cm4gMDsgfQorfTsKKworI2VuZGlmIC8vIEVOQUJMRShTVFlMRV9T
Q09QRUQpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0eWxlU2NvcGVS
ZXNvbHZlcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>