<?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>107535</bug_id>
          
          <creation_ts>2013-01-22 02:35:42 -0800</creation_ts>
          <short_desc>Change the Supplementable class to not use AtomicString</short_desc>
          <delta_ts>2013-01-27 22:49:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>107475</blocked>
    
    <blocked>108049</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>japhet</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>812837</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 02:35:42 -0800</bug_when>
    <thetext>The Supplementable class is used to associate auxiliary data structures with a ScriptExecutionContext or Page.  In the current implementation, Supplementable uses an AtomicString as the key for a map.  For example, an AtomicString based on a literal C string &quot;DatabaseContext&quot; is used as the key for a DatabaseContext object associated with a given ScriptExecutionContext.

However, in the web database refactoring work, we find that a WorkerContext (which inherits from ScriptExecutionContext) can be referenced by the main thread (as opposed to the owner worker thread) in DatabaseTracker::interruptAllDatabasesForContext() for shutdown / clean up purposes.  Technically, the DatabaseTracker deals with back-end database activity as opposed to the front-end script activity.  Hence, it should not be referencing the ScriptExecutionContext.  Instead, it should be using a DatabaseBackendContext which is associated with the DatabaseContext supplement to the ScriptExecutionContext.  This is not currently the case, but will be so one the database code gets refactored for webkit 2.

Because the Supplementable code uses AtomicStrings (which is thread specific), it is not thread-safe (nor correct) for DatabaseTracker::interruptAllDatabasesForContext() to look up the relevant DatabaseContext in the ScriptExecutionsContext&apos;s supplements.  Doing so can result in a crash and potential corrupted data.

The fix is to introduce a LiteralCString type that we&apos;ll use to replace the use of AtomicString in Supplementable.  LiteralCString is basically a wrapper around the const char* C string which is used to specify the supplement key and is not thread specific.

In addition, a mutex is added to Supplementable methods to synchronize access to the SupplementMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812925</commentid>
    <comment_count>1</comment_count>
      <attachid>183965</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 04:34:59 -0800</bug_when>
    <thetext>Created attachment 183965
Preliminary patch to test the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812934</commentid>
    <comment_count>2</comment_count>
      <attachid>183966</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 04:41:24 -0800</bug_when>
    <thetext>Created attachment 183966
svn up&apos;ed prelim patch for bot testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812936</commentid>
    <comment_count>3</comment_count>
      <attachid>183966</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 04:49:10 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16041576</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812937</commentid>
    <comment_count>4</comment_count>
      <attachid>183966</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 04:49:23 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16031574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812946</commentid>
    <comment_count>5</comment_count>
      <attachid>183966</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 05:12:04 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16044519</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812949</commentid>
    <comment_count>6</comment_count>
      <attachid>183966</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-22 05:22:03 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16037557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812984</commentid>
    <comment_count>7</comment_count>
      <attachid>183966</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-22 06:00:46 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16011843</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812999</commentid>
    <comment_count>8</comment_count>
      <attachid>183966</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 06:25:37 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16011858</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813001</commentid>
    <comment_count>9</comment_count>
      <attachid>183966</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-01-22 06:27:37 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

Attachment 183966 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16042566</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813126</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 10:09:51 -0800</bug_when>
    <thetext>I don&apos;t think we should make Supplemental thread-safe.  Instead, multithreaded code needs to use a different mechanism.

Please do not add a mutex to Supplemental.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813248</commentid>
    <comment_count>11</comment_count>
      <attachid>183966</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-22 11:17:45 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

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

&gt; Source/WTF/wtf/text/LiteralCString.h:78
&gt; +LiteralCString::LiteralCString(WTF::HashTableDeletedValueType)
&gt; +    : m_string(0), m_length(0), m_hash(0)
&gt; +{
&gt; +}

Your empty value and deleted value are identical. That&apos;s not valid. After some deletes, it will cause lookup to fail even if the item is in the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813249</commentid>
    <comment_count>12</comment_count>
      <attachid>183966</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-22 11:19:01 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

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

&gt; Source/WTF/wtf/text/LiteralCString.h:94
&gt; +    if (m_hash &amp;&amp; m_hash == other.m_hash)
&gt; +        return true;

Hashes are not guaranteed unique. It&apos;s OK to say that, if hashes don&apos;t match, strings don&apos;t match, but it&apos;s not OK to say that, if hashes do match, string do match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813297</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 12:08:43 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 183966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183966&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:94
&gt; &gt; +    if (m_hash &amp;&amp; m_hash == other.m_hash)
&gt; &gt; +        return true;
&gt; 
&gt; Hashes are not guaranteed unique. It&apos;s OK to say that, if hashes don&apos;t match, strings don&apos;t match, but it&apos;s not OK to say that, if hashes do match, string do match.

Thanks for catching that.  Will fix.  Will also fix the empty vs deleted values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813300</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 12:11:06 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I don&apos;t think we should make Supplemental thread-safe.  Instead, multithreaded code needs to use a different mechanism.
&gt; 
&gt; Please do not add a mutex to Supplemental.

Adam, while I&apos;m inclined to agree, but just to make sure I understand the whole picture, would you mind articulating your rationale as to why Supplementable should not be synchronized?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813303</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 12:14:55 -0800</bug_when>
    <thetext>&gt; Adam, while I&apos;m inclined to agree, but just to make sure I understand the whole picture, would you mind articulating your rationale as to why Supplementable should not be synchronized?

WebCore is largely single-threaded.  The threading model used in the database code is fragile and is not a good model for future threaded code.  We shouldn&apos;t complicate core mechanisms like Supplementable to support database&apos;s poor threading model.  Instead, we should improve database&apos;s threading model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813411</commentid>
    <comment_count>16</comment_count>
      <attachid>183966</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-22 14:22:17 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

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

&gt; Source/WTF/wtf/text/LiteralCString.h:2
&gt; + * Copyright (C) 2012 Apple Inc. All rights reserved.

2013

&gt; Source/WTF/wtf/text/LiteralCString.h:36
&gt; +class LiteralCString {

Why do we have both this class and the ASCIILiteral class? The names of the classes do not make it clear how they differ. Please talk to Ben Poulain about this work.

&gt; Source/WTF/wtf/text/LiteralCString.h:51
&gt; +    inline LiteralCString();
&gt; +    explicit inline LiteralCString(const char*);
&gt; +    inline LiteralCString(const LiteralCString&amp; other);
&gt; +    inline LiteralCString(WTF::HashTableDeletedValueType);
&gt; +
&gt; +    bool isHashTableDeletedValue() const { return !m_string; }
&gt; +
&gt; +    unsigned length() const { return m_length; }
&gt; +    unsigned hash() const { return m_hash; }
&gt; +
&gt; +    inline bool operator==(const LiteralCString&amp; other) const;
&gt; +
&gt; +private:
&gt; +    inline void computeHash();

I believe that all these uses of “inline” are ineffective. The inline keyword needs to be below, on the function definitions, not up here in the function declarations.

&gt; Source/WTF/wtf/text/LiteralCString.h:73
&gt; +LiteralCString::LiteralCString(const LiteralCString&amp; other)
&gt; +    : m_string(other.m_string), m_length(other.m_length), m_hash(other.m_hash)
&gt; +{
&gt; +}

This is unneeded. The compiler will correctly generate this if you simply don’t declare it explicitly.

&gt; Source/WTF/wtf/text/LiteralCString.h:83
&gt; +    m_hash = StringHasher::computeHashAndMaskTop8Bits(reinterpret_cast&lt;const LChar*&gt;(m_string), m_length);

Why mask top 8 bits?

&gt; Source/WTF/wtf/text/LiteralCStringHash.h:2
&gt; + * Copyright (C) 2012 Apple Inc. All rights reserved.

2013

&gt; Source/WTF/wtf/text/LiteralCStringHash.h:45
&gt; +    static const bool safeToCompareToEmptyOrDeleted = false;

If the current implementation, it is safe to compare with empty or deleted. I think this should be true, depending on what you change to resolve the issue with operator== and the empty vs. deleted values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813412</commentid>
    <comment_count>17</comment_count>
      <attachid>183966</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-22 14:23:42 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

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

I couldn’t find a change log.

&gt; Source/WebCore/platform/Supplementable.h:64
&gt; +        MutexLocker locker(m_supplementsLock);

Where is the comment that explains why we need to add locking? What does this have to do with AtomicString vs. LiteralCString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813430</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 14:43:27 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 183966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183966&amp;action=review
&gt; 
&gt; I couldn’t find a change log.

That&apos;s because this patch wasn&apos;t ready for review yet.  I merely uploaded it as a work in progress to test on the EWS bots and make sure that I&apos;m not breaking all the other builds.
 
&gt; &gt; Source/WebCore/platform/Supplementable.h:64
&gt; &gt; +        MutexLocker locker(m_supplementsLock);
&gt; 
&gt; Where is the comment that explains why we need to add locking? What does this have to do with AtomicString vs. LiteralCString?

I haven&apos;t added the comment regarding the locking yet, and the locking does not have anything to do with AtomicString vs LiteralCString.  It does have to do with Supplementable, and was motivated by the database code&apos;s use of the DatabaseContext supplement in forthcoming database refactoring.

Regardless, I plan to remove the locking changes from this patch, and will address the locking needs in a different bug later.  I&apos;ll comment on it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813489</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 15:42:22 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 183966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183966&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:2
&gt; &gt; + * Copyright (C) 2012 Apple Inc. All rights reserved.
&gt; 
&gt; 2013

Thanks.

&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:36
&gt; &gt; +class LiteralCString {
&gt; 
&gt; Why do we have both this class and the ASCIILiteral class? The names of the classes do not make it clear how they differ. Please talk to Ben Poulain about this work.

I&apos;ve talk with Ben briefly and will need to talk some more.  It looks like ASCIILiteral (in a near future form) may have everything I need.

&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:51
&gt; &gt; +    inline LiteralCString();
&gt; &gt; +    explicit inline LiteralCString(const char*);
&gt; &gt; +    inline LiteralCString(const LiteralCString&amp; other);
&gt; &gt; +    inline LiteralCString(WTF::HashTableDeletedValueType);
&gt; &gt; +
&gt; &gt; +    bool isHashTableDeletedValue() const { return !m_string; }
&gt; &gt; +
&gt; &gt; +    unsigned length() const { return m_length; }
&gt; &gt; +    unsigned hash() const { return m_hash; }
&gt; &gt; +
&gt; &gt; +    inline bool operator==(const LiteralCString&amp; other) const;
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    inline void computeHash();
&gt; 
&gt; I believe that all these uses of “inline” are ineffective. The inline keyword needs to be below, on the function definitions, not up here in the function declarations.

It&apos;s effective.  The C++ spec (C++ Standard - ANSI ISO IEC 14882 2003) Section 9.3.3 states &quot;An inline member function (whether static or nonstatic) may also be defined outside of its class definition provided either its declaration in the class definition or its definition outside of the class definition declares the function as inline.&quot;


&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:73
&gt; &gt; +LiteralCString::LiteralCString(const LiteralCString&amp; other)
&gt; &gt; +    : m_string(other.m_string), m_length(other.m_length), m_hash(other.m_hash)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; This is unneeded. The compiler will correctly generate this if you simply don’t declare it explicitly.

OK.
 
&gt; &gt; Source/WTF/wtf/text/LiteralCString.h:83
&gt; &gt; +    m_hash = StringHasher::computeHashAndMaskTop8Bits(reinterpret_cast&lt;const LChar*&gt;(m_string), m_length);
&gt; 
&gt; Why mask top 8 bits?

No reason.  I learned about StringHasher::computeHashAndMaskTop8Bits() by studying StringImpl.h, but should have found and used StringHasher::computeHash() instead.  I apologize for being sloppy.

&gt; &gt; Source/WTF/wtf/text/LiteralCStringHash.h:45
&gt; &gt; +    static const bool safeToCompareToEmptyOrDeleted = false;
&gt; 
&gt; If the current implementation, it is safe to compare with empty or deleted. I think this should be true, depending on what you change to resolve the issue with operator== and the empty vs. deleted values.

Fixed, but may be moot pending ASCIILiteral discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813519</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-22 16:11:42 -0800</bug_when>
    <thetext>&gt; WebCore is largely single-threaded.  The threading model used in the database code is fragile and is not a good model for future threaded code.  We shouldn&apos;t complicate core mechanisms like Supplementable to support database&apos;s poor threading model.  Instead, we should improve database&apos;s threading model.

To be clear, the reason Supplementable needs multi-threaded support is workers, which are multi-threaded. Workers access ScriptExecutable from multiple threads, and access to a supplemental property of a Worker causes data races. This data race was introduced by the change that made ScriptExecutionContext inherit from Supplementable (&lt;http://trac.webkit.org/changeset/109319&gt;). Now, any access to a ScriptExecutionContext&apos;s supplemental properties, and any new access that anyone adds in the future, risks data races.

(Side note: It looks like none of the WebKit threading experts were CC&apos;d on that change, which is a shame.)

If we want to limit the threading idiom in WebKit, let&apos;s create a specific ThreadSafeSupplementable subclass, specifically for ScriptExecutionContext to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813523</commentid>
    <comment_count>21</comment_count>
      <attachid>183966</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-22 16:14:48 -0800</bug_when>
    <thetext>Comment on attachment 183966
svn up&apos;ed prelim patch for bot testing.

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

Maybe we can take the opportunity to rethink Supplement to be more efficient?

Since all the supplement names are literals: you can just enforce that rule (by using a template specialization to get the supplement name of a class for example), then make the hash out of the char* pointer instead of the string.

&gt; Source/WTF/WTF.xcodeproj/project.pbxproj:1266
&gt;  				A8A47487151A825B004123FF /* WTFThreadData.h in Headers */,
&gt; +				FEA0878616AE448100BDD4EA /* LiteralCString.h in Headers */,
&gt; +				FEA0878716AE448100BDD4EA /* LiteralCStringHash.h in Headers */,

The build section should be sorted alphabetically.

&gt; Source/WTF/wtf/text/LiteralCString.h:96
&gt; +    return !strcmp(m_string, other.m_string);

StringImpl has optimized version of equal() when you know the size of a string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813531</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 16:24:42 -0800</bug_when>
    <thetext>&gt; Workers access ScriptExecutable from multiple threads

^^^ Perhaps we should rethink that design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813719</commentid>
    <comment_count>23</comment_count>
      <attachid>184116</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 20:12:15 -0800</bug_when>
    <thetext>Created attachment 184116
The patch with fixes.

In the final implementation, here&apos;s what we ended up doing:
1. For Supplementable, replaced the use of AtomicString keys with const char* keys.
2. Made sure all Supplement implementations implements a supplementName() static method that returns a const char* string for its name.
- This is needed because the SupplementMap will do pointer comparisons on the keys.  Hence, we need to use the same const char* string when identifying the same Supplement, not just any 2 strings with the same characters.

The locking changes have been removed.  The LiteralCString class has been removed as well since we decided to go with using a const char* directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813739</commentid>
    <comment_count>24</comment_count>
      <attachid>184116</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 20:43:47 -0800</bug_when>
    <thetext>Comment on attachment 184116
The patch with fixes.

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

This looks great!  If it was marked for review, I would have given it an r=me.  (I might have put more information in the ChangeLog, but that&apos;s just a nit.)

&gt; Source/WebCore/Modules/quota/DOMWindowQuota.cpp:51
&gt;  // static

I think the consensus was to skip these &quot;static&quot; comments because they aren&apos;t enforced by the compiler.

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:52
&gt; +DatabaseContext* DatabaseContext::existingDatabaseContextFrom(ScriptExecutionContext* context)

Ah, if this works for you, that&apos;s much better than locking.  Do you want to ASSERT that this function returns non-zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813744</commentid>
    <comment_count>25</comment_count>
      <attachid>184116</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 20:48:21 -0800</bug_when>
    <thetext>Comment on attachment 184116
The patch with fixes.

Attachment 184116 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16043910</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813748</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 20:52:39 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 184116 [details])
&gt; Attachment 184116 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/16043910

And this is why I didn&apos;t r? and waited for the bots to show some love first.  New patch coming up soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813759</commentid>
    <comment_count>27</comment_count>
      <attachid>184127</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 21:05:23 -0800</bug_when>
    <thetext>Created attachment 184127
The patch + one more fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813770</commentid>
    <comment_count>28</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 21:15:13 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 184116 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184116&amp;action=review
&gt; 
&gt; This looks great!  If it was marked for review, I would have given it an r=me.  (I might have put more information in the ChangeLog, but that&apos;s just a nit.)

I said a little more in the ChangeLog comments, but didn&apos;t mention anything about synchronization issues because this patch only improves the situation i.e. avoids one cross thread issue from the use of AtomicStrings, but does not fix another issue.

I&apos;ll wait for the bots to go green first before I r? the patch, because there&apos;s a chance that I may miss one or more AtomicString to const char* conversions (or they may be added after I made my changes) in code that is only built in ports that I don&apos;t build.  I might have to upload another patch if that occurs again and will need another r+ thereafter.  Thanks.

&gt; &gt; Source/WebCore/Modules/quota/DOMWindowQuota.cpp:51
&gt; &gt;  // static
&gt; 
&gt; I think the consensus was to skip these &quot;static&quot; comments because they aren&apos;t enforced by the compiler.

Removed.

&gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:52
&gt; &gt; +DatabaseContext* DatabaseContext::existingDatabaseContextFrom(ScriptExecutionContext* context)
&gt; 
&gt; Ah, if this works for you, that&apos;s much better than locking.  Do you want to ASSERT that this function returns non-zero?

This does not resolve the potential cross-thread SupplementMap corruption issue.  I have another idea for solving that which I will apply in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813809</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-22 21:59:10 -0800</bug_when>
    <thetext>FYI, you can run
update-webkit --chromium
build-webkit --chromium
to build Chromium Mac port on your machine.

Also see http://trac.webkit.org/wiki/Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813841</commentid>
    <comment_count>30</comment_count>
      <attachid>184127</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 22:30:19 -0800</bug_when>
    <thetext>Comment on attachment 184127
The patch + one more fix.

Bots are green.  Ready for a review, please.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813862</commentid>
    <comment_count>31</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-22 22:52:27 -0800</bug_when>
    <thetext>Landed in r140509: &lt;http://trac.webkit.org/changeset/140509&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183965</attachid>
            <date>2013-01-22 04:34:59 -0800</date>
            <delta_ts>2013-01-22 04:37:38 -0800</delta_ts>
            <desc>Preliminary patch to test the bots.</desc>
            <filename>bug-107535-prelim.patch</filename>
            <type>text/plain</type>
            <size>47896</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTQwNDA1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBACiAJCUYzNTI1RTQ2MTYxOUE0RUUwMDI3OEJD
MSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzUyNUU0NTE2MTlBNEVFMDAyNzhCQzEgLyogTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oICovOyB9OwogCQlGM0ZCQzcxRTE2MUFGN0JGMDBC
QjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFEMTYxQUY3QkYwMEJC
NEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oICovOyB9OwogCQlG
M0ZCQzcyMDE2MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFG
MTYxQUY3Q0QwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25TZXF1ZW5jZS5oICovOyB9
OworCQlGRUEwODc4NjE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4Nzg0MTZBRTQ0ODEw
MEJERDRFQSAvKiBMaXRlcmFsQ1N0cmluZy5oICovOyB9OworCQlGRUEwODc4NzE2QUU0NDgxMDBC
REQ0RUEgLyogTGl0ZXJhbENTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODc4NTE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENT
dHJpbmdIYXNoLmggKi87IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0
YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
REFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNE
M0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTYxOSw2
ICs2MjEsOCBAQAogCQlGMzUyNUU0NTE2MTlBNEVFMDAyNzhCQzEgLyogTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJ
bnN0cnVtZW50YXRpb25IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYz
RkJDNzFEMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRl
ZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJbnN0cnVtZW50
YXRpb25IYXNoQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZC
QzcxRjE2MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2Vx
dWVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVBMDg3ODQxNkFFNDQ4MTAw
QkRENEVBIC8qIExpdGVyYWxDU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExpdGVyYWxDU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQTA4
Nzg1MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRlcmFsQ1N0cmluZ0hhc2guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGl0ZXJhbENTdHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyog
U3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1N0YXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCkBAIC05MzQsNiArOTM4LDggQEAKIAkJCQlBOEE0NzMyMTE1MUE4MjVCMDA0MTIz
RkYgLyogQ1N0cmluZy5jcHAgKi8sCiAJCQkJQThBNDczMjIxNTFBODI1QjAwNDEyM0ZGIC8qIENT
dHJpbmcuaCAqLywKIAkJCQkyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3Ry
aW5nQ29udmVyc2lvbi5oICovLAorCQkJCUZFQTA4Nzg0MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRl
cmFsQ1N0cmluZy5oICovLAorCQkJCUZFQTA4Nzg1MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRlcmFs
Q1N0cmluZ0hhc2guaCAqLywKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
QnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxk
ZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVy
LmggKi8sCkBAIC0xMjU2LDYgKzEyNjIsOCBAQAogCQkJCTk3NENGQzhFMTZBNEYzMjcwMDZENTQw
NCAvKiBXZWFrUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVBMDg3ODYxNkFF
NDQ4MTAwQkRENEVBIC8qIExpdGVyYWxDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEw
ODc4NzE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgV1RGX0xpdGVyYWxDU3RyaW5nX2gKKyNkZWZpbmUgV1RGX0xpdGVyYWxDU3Ry
aW5nX2gKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdHJ1Y3QgTGl0ZXJhbENTdHJpbmdI
YXNoOworCitjbGFzcyBMaXRlcmFsQ1N0cmluZyB7CitwdWJsaWM6CisgICAgaW5saW5lIExpdGVy
YWxDU3RyaW5nKCk7CisgICAgZXhwbGljaXQgaW5saW5lIExpdGVyYWxDU3RyaW5nKGNvbnN0IGNo
YXIqKTsKKyAgICBpbmxpbmUgTGl0ZXJhbENTdHJpbmcoY29uc3QgTGl0ZXJhbENTdHJpbmcmIG90
aGVyKTsKKyAgICBpbmxpbmUgTGl0ZXJhbENTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKTsKKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiAhbV9zdHJpbmc7IH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsg
fQorCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaXRlcmFsQ1N0cmluZyYgb3Ro
ZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIGlubGluZSB2b2lkIGNvbXB1dGVIYXNoKCk7CisK
KyAgICBjb25zdCBjaGFyKiBtX3N0cmluZzsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1
bnNpZ25lZCBtX2hhc2g7Cit9OworCisKK0xpdGVyYWxDU3RyaW5nOjpMaXRlcmFsQ1N0cmluZygp
CisgICAgOiBtX3N0cmluZygwKSwgbV9sZW5ndGgoMCksIG1faGFzaCgwKQoreworfQorCitMaXRl
cmFsQ1N0cmluZzo6TGl0ZXJhbENTdHJpbmcoY29uc3QgY2hhciogcykKKyAgICA6IG1fc3RyaW5n
KHMpLCBtX2xlbmd0aChzdHJsZW4ocykpLCBtX2hhc2goMCkgCit7CisgICAgY29tcHV0ZUhhc2go
KTsKK30KKworTGl0ZXJhbENTdHJpbmc6OkxpdGVyYWxDU3RyaW5nKGNvbnN0IExpdGVyYWxDU3Ry
aW5nJiBvdGhlcikKKyAgICA6IG1fc3RyaW5nKG90aGVyLm1fc3RyaW5nKSwgbV9sZW5ndGgob3Ro
ZXIubV9sZW5ndGgpLCBtX2hhc2gob3RoZXIubV9oYXNoKQoreworfQorCitMaXRlcmFsQ1N0cmlu
Zzo6TGl0ZXJhbENTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIDog
bV9zdHJpbmcoMCksIG1fbGVuZ3RoKDApLCBtX2hhc2goMCkKK3sKK30KKwordm9pZCBMaXRlcmFs
Q1N0cmluZzo6Y29tcHV0ZUhhc2goKQoreworICAgIEFTU0VSVCghbV9oYXNoKTsKKyAgICBtX2hh
c2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihtX3N0cmluZyksIG1fbGVuZ3RoKTsKKyAgICBBU1NFUlQobV9o
YXNoKTsgLy8gVGhlIGhhc2ggc2hvdWxkIG5ldmVyIGJlIDAuCit9CisKK2Jvb2wgTGl0ZXJhbENT
dHJpbmc6Om9wZXJhdG9yPT0oY29uc3QgTGl0ZXJhbENTdHJpbmcmIG90aGVyKSBjb25zdAorewor
ICAgIGlmIChtX3N0cmluZyA9PSBvdGhlci5tX3N0cmluZykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKCFtX3N0cmluZyB8fCAhb3RoZXIubV9zdHJpbmcpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9oYXNoICYmIG1faGFzaCA9PSBvdGhlci5tX2hhc2gpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vIEl0J3MgYSBtYXRjaCBpZiBzdHJjbXAoKSByZXR1cm5zIDAu
CisgICAgcmV0dXJuICFzdHJjbXAobV9zdHJpbmcsIG90aGVyLm1fc3RyaW5nKTsKK30KKworCisv
LyBMaXRlcmFsQ1N0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgTGl0ZXJhbENTdHJp
bmcKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPExpdGVyYWxDU3RyaW5nPiB7CisgICAgdHlwZWRlZiBMaXRlcmFs
Q1N0cmluZ0hhc2ggSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkxpdGVyYWxDU3RyaW5nOworCisjZW5kaWYgLy8gV1RGX0xpdGVyYWxDU3RyaW5nX2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmdIYXNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9MaXRlcmFsQ1N0cmluZ0hhc2guaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmdIYXNoLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfTGl0ZXJhbENTdHJpbmdIYXNoX2gKKyNkZWZpbmUgV1RGX0xpdGVy
YWxDU3RyaW5nSGFzaF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdHJ1Y3Qg
TGl0ZXJhbENTdHJpbmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMaXRl
cmFsQ1N0cmluZyYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTGl0ZXJhbENTdHJpbmcmIGEsIGNvbnN0
IExpdGVyYWxDU3RyaW5nJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworfTsKKworLy8gTGl0ZXJhbENTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2gg
Zm9yIExpdGVyYWxDU3RyaW5nCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdURjo6TGl0
ZXJhbENTdHJpbmc+IDogR2VuZXJpY0hhc2hUcmFpdHM8V1RGOjpMaXRlcmFsQ1N0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXVEY6OkxpdGVyYWxDU3RyaW5nJiBzbG90KSB7
IG5ldyAoTm90TnVsbCwgJnNsb3QpIFdURjo6TGl0ZXJhbENTdHJpbmcoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdURjo6TGl0
ZXJhbENTdHJpbmcmIHNsb3QpIHsgcmV0dXJuIHNsb3QuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TGl0ZXJhbENTdHJp
bmc7CisKKyNlbmRpZiAvLyBXVEZfTGl0ZXJhbENTdHJpbmdIYXNoX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksOSBAQCB2b2lkIEJh
dHRlcnlDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5CiAgICAgICAgICgqaXQpLT5kaWRDaGFu
Z2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBCYXR0ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJp
bmcmIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRyb2xsZXIiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJCYXR0ZXJ5Q29udHJvbGxlciIpKTsKICAgICByZXR1
cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0
ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEJhdHRlcnlDbGllbnQqIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYgc3Vw
cGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgQmF0dGVyeUNvbnRyb2xsZXIqIGZyb20oUGFnZSog
cGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmF0dGVyeUNvbnRyb2xsZXIqPihTdXBwbGVtZW50
PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgIHN0YXRpYyBib29s
IGlzQWN0aXZlKFBhZ2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L05hdmlnYXRvckJhdHRlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEJhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5
Ojp3ZWJraXQKIAogTmF2aWdhdG9yQmF0dGVyeSogTmF2aWdhdG9yQmF0dGVyeTo6ZnJvbShOYXZp
Z2F0b3IqIG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgbmFtZSwgKCJOYXZpZ2F0b3JCYXR0ZXJ5IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUs
ICgiTmF2aWdhdG9yQmF0dGVyeSIpKTsKICAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBwbGVtZW50
ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6
ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAg
c3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9t
aXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDA0MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVk
RmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQCBET01GaWxl
U3lzdGVtKiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtCiB9CiAKIC8vIHN0YXRpYwotY29uc3Qg
QXRvbWljU3RyaW5nJiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFtZSgp
Citjb25zdCBMaXRlcmFsQ1N0cmluZyYgRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbTo6c3VwcGxl
bWVudE5hbWUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3Rl
bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkRyYWdnZWRJc29sYXRlZEZpbGVTeXN0
ZW0iKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdn
ZWRJc29sYXRlZEZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1E
YXRhT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MaXRlcmFsQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGZpbGVzeXN0ZW1JZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZXN5c3RlbUlkOyB9CiAgICAgRE9NRmlsZVN5c3RlbSogZ2V0
RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRl
cmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRHJhZ2dlZElzb2xhdGVk
RmlsZVN5c3RlbSogZnJvbShDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0qPihTdXBwbGVtZW50PENocm9t
aXVtRGF0YU9iamVjdD46OmZyb20oZGF0YU9iamVjdCwgc3VwcGxlbWVudE5hbWUoKSkpOyB9CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9y
R2FtZXBhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L05hdmlnYXRvckdhbWVwYWQuY3BwCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgTmF2aWdhdG9yR2FtZXBhZDo6fk5hdmlnYXRvckdhbWVwYWQoKQogCiBO
YXZpZ2F0b3JHYW1lcGFkKiBOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKE5hdmlnYXRvciogbmF2aWdh
dG9yKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5h
dmlnYXRvckdhbWVwYWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JH
YW1lcGFkIikpOwogICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxOYXZpZ2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRv
ciwgbmFtZSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0g
bmV3IE5hdmlnYXRvckdhbWVwYWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5IEBA
IEdlb2xvY2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGwKICAgICByZXR1cm4gbV9j
bGllbnQtPmxhc3RQb3NpdGlvbigpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEdlb2xvY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkdlb2xvY2F0aW9uQ29udHJvbGxlciIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkdlb2xvY2F0aW9uQ29udHJvbGxlciIpKTsKICAg
ICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAx
NDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAog
ICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0g
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIEdl
b2xvY2F0aW9uQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxHZW9sb2NhdGlvbkNvbnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1
cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5j
cHAJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIE5hdmlnYXRvckdlb2xvY2F0aW9uOjp+TmF2aWdhdG9yR2VvbG9jYXQKIAogTmF2aWdhdG9y
R2VvbG9jYXRpb24qIE5hdmlnYXRvckdlb2xvY2F0aW9uOjpmcm9tKE5hdmlnYXRvciogbmF2aWdh
dG9yKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5h
dmlnYXRvckdlb2xvY2F0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiTmF2aWdh
dG9yR2VvbG9jYXRpb24iKSk7CiAgICAgTmF2aWdhdG9yR2VvbG9jYXRpb24qIHN1cHBsZW1lbnQg
PSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3JHZW9sb2NhdGlvbio+KFN1cHBsZW1lbnQ8TmF2aWdhdG9y
Pjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAg
ICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JHZW9sb2NhdGlvbihuYXZpZ2F0b3ItPmZyYW1l
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZTo6fkRPTVdpbmRvd0luZGUKIAogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2U6OmZyb20oRE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlIikpOwogICAgIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8RE9NV2luZG93
Pjo6ZnJvbSh3aW5kb3csIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAg
c3VwcGxlbWVudCA9IG5ldyBET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uod2luZG93KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2U6On5Q
YWdlR3JvdXBJbmRlCiAKIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSogUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlOjpmcm9tKFBhZ2VHcm91cCYgZ3JvdXApCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlIikpOwog
ICAgIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PFBh
Z2VHcm91cEluZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8UGFnZUdyb3VwPjo6ZnJvbSgmZ3Jv
dXAsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9
IG5ldyBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRl
eGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCBXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlOjp+V29y
a2VyQ29uCiAKIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UqIFdvcmtlckNvbnRleHRJbmRl
eGVkRGF0YWJhc2U6OmZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBBdG9taWNTdHJpbmcgbmFtZSA9ICJXb3JrZGVyQ29udGV4dEluZGV4ZWREYXRhYmFzZSI7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJXb3JrZXJDb250
ZXh0SW5kZXhlZERhdGFiYXNlIikpOwogICAgIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2Uq
IHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlKj4o
U3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCBuYW1lKSk7
CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgV29ya2Vy
Q29udGV4dEluZGV4ZWREYXRhYmFzZShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5jcHAJKHJldmlzaW9uIDE0
MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBET01XaW5kb3dJbnRlbnRzOjp+
RE9NV2luZG93SW50ZW50cygpCiBET01XaW5kb3dJbnRlbnRzKiBET01XaW5kb3dJbnRlbnRzOjpm
cm9tKERPTVdpbmRvdyogd2luZG93KQogewogICAgIEFTU0VSVCh3aW5kb3cpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRvd0ludGVudHMiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJET01XaW5kb3dJbnRlbnRzIikpOwogICAgIERP
TVdpbmRvd0ludGVudHMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dJbnRlbnRz
Kj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgbmFtZSkpOwogICAgIGlmICgh
c3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERPTVdpbmRvd0ludGVudHMo
d2luZG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1l
ZGlhQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVXNlck1lZGlhQ29udHJvbGxlcjo6c3VwcGxlbWVudE5h
bWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIFVzZXJNZWRpYUNvbnRyb2xsZXI6OnN1cHBsZW1l
bnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJVc2VyTWVkaWFDb250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiVXNl
ck1lZGlhQ29udHJvbGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlh
UmVxdWVzdCopOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8VXNlck1lZGlhQ29udHJvbGxlcj4g
Y3JlYXRlKFVzZXJNZWRpYUNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBw
bGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBVc2VyTWVkaWFDb250cm9sbGVyKiBmcm9tKFBhZ2Uq
IHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJNZWRpYUNvbnRyb2xsZXIqPihTdXBwbGVt
ZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZp
Z2F0b3JDb250ZW50VXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAJKHJldmlz
aW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0
aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw5ICsy
MDEsOSBAQCB2b2lkIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6dW5yZWdpc3RlclByCiB9CiAjZW5k
aWYKIAotY29uc3QgQXRvbWljU3RyaW5nJiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnN1cHBsZW1l
bnROYW1lKCkKK2NvbnN0IExpdGVyYWxDU3RyaW5nJiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnN1
cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
bmFtZSwgKCJOYXZpZ2F0b3JDb250ZW50VXRpbHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFt
ZSwgKCJOYXZpZ2F0b3JDb250ZW50VXRpbHMiKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRv
ckNvbnRlbnRVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2
aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5oCShyZXZpc2lvbiAxNDA0
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZp
Z2F0b3JDb250ZW50VXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjbGFz
cyBOYXZpZ2F0b3JDb250ZW50VXRpbHMgOiBwdWJsaWMgUmVmCiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+TmF2aWdhdG9yQ29udGVudFV0aWxzKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYg
c3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgTmF2aWdhdG9yQ29udGVudFV0aWxzKiBmcm9t
KFBhZ2UqKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKE5hdmln
YXRvciosIGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB0aXRsZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29y
a0luZm9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVj
dGlvbjo6fk5hdmlnYXQKIAogTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uKiBOYXZpZ2F0
b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb246OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCiB7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2aWdhdG9yTmV0
d29ya0luZm9Db25uZWN0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiTmF2aWdh
dG9yTmV0d29ya0luZm9Db25uZWN0aW9uIikpOwogICAgIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29u
bmVjdGlvbiogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvck5ldHdvcmtJbmZvQ29u
bmVjdGlvbio+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsK
ICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0
b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8v
TmV0d29ya0luZm9Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOSArNzksOSBA
QCB2b2lkIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6ZGlkQ2hhbmdlTmV0CiAgICAgICAgICAoKml0
KS0+ZGlkQ2hhbmdlTmV0d29ya0luZm9ybWF0aW9uKGV2ZW50LCBuZXR3b3JrSW5mb3JtYXRpb24p
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6c3VwcGxl
bWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6
c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIk5ldHdvcmtJbmZvQ29udHJvbGxlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBu
YW1lLCAoIk5ldHdvcmtJbmZvQ29udHJvbGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZv
L05ldHdvcmtJbmZvQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzT3duUHRy
PE5ldHdvcmtJbmZvQ29udHJvbGxlcj4gY3JlYXRlKFBhZ2UqLCBOZXR3b3JrSW5mb0NsaWVudCop
OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAg
ICBzdGF0aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3Rh
dGljIE5ldHdvcmtJbmZvQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxOZXR3b3JrSW5mb0NvbnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBh
Z2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgCiAgICAgdm9pZCBhZGRMaXN0ZW5lcihOZXR3
b3JrSW5mb0Nvbm5lY3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZp
Y2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5jcHAJ
KHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9u
cy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBET01XaW5kb3dOb3RpZmljYXRpb25zOjp+RE9NV2luZG93Tm90aWZpCiAKIERPTVdpbmRv
d05vdGlmaWNhdGlvbnMqIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6OmZyb20oRE9NV2luZG93KiB3
aW5kb3cpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN1cHBsZW1l
bnROYW1lLCAoIkRPTVdpbmRvd05vdGlmaWNhdGlvbnMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywg
c3VwcGxlbWVudE5hbWUsICgiRE9NV2luZG93Tm90aWZpY2F0aW9ucyIpKTsKICAgICBET01XaW5k
b3dOb3RpZmljYXRpb25zKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8RE9NV2luZG93Tm90aWZp
Y2F0aW9ucyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1lbnRO
YW1lKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcg
RE9NV2luZG93Tm90aWZpY2F0aW9ucyh3aW5kb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
b3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw5ICs1Niw5IEBAIE5vdGlmaWNhdGlvbkNsaWVudCogTm90aWZpY2F0aW9uQ29udHJvbGwK
ICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBOb3RpZmljYXRpb25Db250
cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYgTm90aWZpY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5vdGlmaWNhdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChM
aXRlcmFsQ1N0cmluZywgbmFtZSwgKCJOb3RpZmljYXRpb25Db250cm9sbGVyIikpOwogICAgIHJl
dHVybiBuYW1lOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9u
IDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIH5Ob3RpZmljYXRpb25Db250cm9sbGVyKCk7CiAKICAgICBzdGF0aWMgUGFzc093blB0
cjxOb3RpZmljYXRpb25Db250cm9sbGVyPiBjcmVhdGUoTm90aWZpY2F0aW9uQ2xpZW50Kik7Ci0g
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIE5v
dGlmaWNhdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Tm90aWZpY2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwg
c3VwcGxlbWVudE5hbWUoKSkpOyB9CiAgICAgc3RhdGljIE5vdGlmaWNhdGlvbkNsaWVudCogY2xp
ZW50RnJvbShQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0
aW9ucy9Xb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25z
LmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmlj
YXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9uczo6fldvcmtlckNvbnRlCiAK
IFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKiBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9uczo6
ZnJvbShXb3JrZXJDb250ZXh0KiBjb250ZXh0KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBzdXBwbGVtZW50TmFtZSwgKCJXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9u
cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBzdXBwbGVtZW50TmFtZSwgKCJXb3JrZXJDb250ZXh0
Tm90aWZpY2F0aW9ucyIpKTsKICAgICBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucyogc3VwcGxl
bWVudCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKj4oU3VwcGxlbWVu
dDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCBzdXBwbGVtZW50TmFtZSkp
OwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtl
ckNvbnRleHROb3RpZmljYXRpb25zKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5jcHAJKHJldmlzaW9uIDE0MDQwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIERPTVdpbmRvd1F1b3RhOjp+RE9NV2luZG93UXVvdGEo
KQogLy8gc3RhdGljCiBET01XaW5kb3dRdW90YSogRE9NV2luZG93UXVvdGE6OmZyb20oRE9NV2lu
ZG93KiB3aW5kb3cpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5h
bWUsICgiRE9NV2luZG93UXVvdGEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJET01X
aW5kb3dRdW90YSIpKTsKICAgICBET01XaW5kb3dRdW90YSogc3VwcGxlbWVudCA9IHN0YXRpY19j
YXN0PERPTVdpbmRvd1F1b3RhKj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywg
bmFtZSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3
IERPTVdpbmRvd1F1b3RhKHdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAJKHJldmlz
aW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1Nw
ZWVjaFN5bnRoZXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgRE9NV2lu
ZG93U3BlZWNoU3ludGhlc2lzOjp+RE9NV2luZG93U3BlZQogLy8gc3RhdGljCiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMqIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6ZnJvbShET01XaW5kb3cq
IHdpbmRvdykKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJET01XaW5kb3dTcGVlY2hTeW50aGVzaXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsU3RyaW5nLCBuYW1lLCAo
IkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyIpKTsKICAgICBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dTcGVlY2hTeW50aGVzaXMqPihT
dXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7CiAgICAgaWYgKCFzdXBw
bGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzKHdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0
MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIFNwZWVjaFJl
Y29nbml0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIlNwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmgJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlv
bikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9CiAKICAgICBzdGF0aWMgUGFzc093
blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1l
KCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwog
ICAgIHN0YXRpYyBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyKj4oU3VwcGxl
bWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmNw
cAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24v
VmlicmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDkgKzEyNiw5IEBAIHZvaWQgVmli
cmF0aW9uOjp0aW1lclN0b3BGaXJlZChUaW1lcjxWaWIKICAgICB9CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgVmlicmF0aW9uOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmlu
ZyYgVmlicmF0aW9uOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIG5hbWUsICgiVmlicmF0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcs
IG5hbWUsICgiVmlicmF0aW9uIikpOwogICAgIHJldHVybiBuYW1lOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAkocmV2aXNpb24gMTQw
NDA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGltZXJTdGFy
dEZpcmVkKFRpbWVyPFZpYnJhdGlvbj4qKTsKICAgICB2b2lkIHRpbWVyU3RvcEZpcmVkKFRpbWVy
PFZpYnJhdGlvbj4qKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1l
bnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBwbGVtZW50TmFt
ZSgpOwogICAgIHN0YXRpYyBWaWJyYXRpb24qIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmlicmF0aW9uKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVt
ZW50TmFtZSgpKSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgTGl0ZXJhbENT
dHJpbmcmIHN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVy
YWxDU3RyaW5nLCBuYW1lLCAoIkRhdGFiYXNlQ29udGV4dCIpKTsKKyAgICByZXR1cm4gbmFtZTsK
K30KKwogc3RhdGljIERhdGFiYXNlQ29udGV4dCogZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9t
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERhdGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46
OmZyb20oY29udGV4dCwgIkRhdGFiYXNlQ29udGV4dCIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6
ZnJvbShjb250ZXh0LCBzdXBwbGVtZW50TmFtZSgpKSk7CiB9CiAKIERhdGFiYXNlQ29udGV4dDo6
RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCkBAIC02OCw3
ICs3NCw3IEBAIERhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0Ojpmcm9tKFMKICAgICBE
YXRhYmFzZUNvbnRleHQqIHN1cHBsZW1lbnQgPSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20o
Y29udGV4dCk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBu
ZXcgRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBwcm92aWRlVG8oY29udGV4dCwg
IkRhdGFiYXNlQ29udGV4dCIsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICAgICAgcHJvdmlk
ZVRvKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAg
ICAgICAgQVNTRVJUKHN1cHBsZW1lbnQgPT0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNv
bnRleHQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExMDcwLDcgKzExMDcwLDcgQEAKIAkJOTdCMzhFMjMxNTFD
NDI2NDAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRE9NV2luZG93Tm90aWZpY2F0aW9ucy5jcHA7IHBhdGgg
PSBNb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QjM4RTI0MTUxQzQyNjQwMDQ2MjJFOSAvKiBET01X
aW5kb3dOb3RpZmljYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERP
TVdpbmRvd05vdGlmaWNhdGlvbnMuaDsgcGF0aCA9IE1vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01X
aW5kb3dOb3RpZmljYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QjM4
RTI1MTUxQzQyNjQwMDQ2MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBET01XaW5kb3dOb3RpZmljYXRpb25zLmlkbDsgcGF0aCA9IE1vZHVs
ZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJOTdCOEZGQ0YxNkFFN0Y5MjAwMzgzODhEIC8qIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4v
Li4vc3ZuL3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCOEZGQ0Yx
NkFFN0Y5MjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lcy5oOyBwYXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlENjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJh
Y3REYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBYnN0
cmFjdERhdGFiYXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUQ3MTUwNUYwNzYw
MDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFic3RyYWN0RGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlEODE1
MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmNw
cAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRleHRGZWF0dXJl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgQ29udGV4dEZlYXR1cmVzQ2xp
ZW50KiBDb250ZXh0RmVhdHVyZXNDbAogICAgIHJldHVybiAmZW1wdHk7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgQ29udGV4dEZlYXR1cmVzOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRl
cmFsQ1N0cmluZyYgQ29udGV4dEZlYXR1cmVzOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQ29udGV4dEZlYXR1cmVzIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiQ29udGV4dEZlYXR1cmVzIikpOwogICAgIHJl
dHVybiBuYW1lOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRleHRGZWF0dXJlcy5oCShy
ZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBGZWF0dXJl
VHlwZVNpemUgLy8gU2hvdWxkIGJlIHRoZSBsYXN0IGVudHJ5LgogICAgIH07CiAKLSAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25z
dCBMaXRlcmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgQ29udGV4dEZl
YXR1cmVzKiBkZWZhdWx0U3dpdGNoKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGV4dEZl
YXR1cmVzPiBjcmVhdGUoQ29udGV4dEZlYXR1cmVzQ2xpZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0MDQw
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsOSArNjYsOSBAQCBQYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rp
b25Db250cm9sbGVyCiAgICAgcmV0dXJuIERldmljZU1vdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmRldmljZW1vdGlvbkV2ZW50LCBkZXZpY2VNb3Rpb25DbGllbnQoKS0+bGFzdE1vdGlv
bigpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpz
dXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYgRGV2aWNlTW90aW9uQ29udHJv
bGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCBuYW1lLCAoIkRldmljZU1vdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0
cmluZywgbmFtZSwgKCJEZXZpY2VNb3Rpb25Db250cm9sbGVyIikpOwogICAgIHJldHVybiBuYW1l
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVy
LmgJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25D
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgT1ZFUlJJREU7CiAKLSAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFs
Q1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJv
bGxlciogZnJvbShQYWdlKik7CiAgICAgc3RhdGljIGJvb2wgaXNBY3RpdmVBdChQYWdlKik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBA
QCBQYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyCiAgICAgcmV0dXJuIERl
dmljZU9yaWVudGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRp
b25FdmVudCwgZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKS0+bGFzdE9yaWVudGF0aW9uKCkpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6c3Vw
cGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIERldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBuYW1lLCAoIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExp
dGVyYWxDU3RyaW5nLCBuYW1lLCAoIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciIpKTsKICAg
ICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVu
dGF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZp
Y2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIE9W
RVJSSURFOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUo
KTsKKyAgICBzdGF0aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAg
ICAgc3RhdGljIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CiAgICAg
c3RhdGljIGJvb2wgaXNBY3RpdmVBdChQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9QcmVyZW5kZXJlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTQwNDA1KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTYgKzM0LDE1IEBACiAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVu
dGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShMSU5LX1BSRVJFTkRFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBzdGF0aWMKLWNv
bnN0IEF0b21pY1N0cmluZyYgUHJlcmVuZGVyZXJDbGllbnQ6OnN1cHBsZW1lbnROYW1lKCkKK2Nv
bnN0IExpdGVyYWxDU3RyaW5nJiBQcmVyZW5kZXJlckNsaWVudDo6c3VwcGxlbWVudE5hbWUoKQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIlByZXJlbmRl
cmVyQ2xpZW50IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiUHJlcmVuZGVyZXJDbGll
bnQiKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9QcmVyZW5kZXJlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9QcmVyZW5kZXJlckNsaWVudC5oCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUHJlcmVuZGVyZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEFkZFByZXJlbmRlcihQcmVyZW5k
ZXJIYW5kbGUqKSA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVt
ZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYgc3VwcGxlbWVudE5h
bWUoKTsKICAgICBzdGF0aWMgUHJlcmVuZGVyZXJDbGllbnQqIGZyb20oUGFnZSopOwogCiBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAuY3Bw
CShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd1BhZ2VQ
b3B1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgRE9NV2luZG93UGFnZVBv
cHVwOjp+RE9NV2luZG93UGFnZVBvcHVwKAogICAgIG1fY29udHJvbGxlci0+Y2xlYXJQYWdlUG9w
dXBDbGllbnQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBET01XaW5kb3dQYWdlUG9wdXA6
OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IExpdGVyYWxDU3RyaW5nJiBET01XaW5kb3dQYWdlUG9w
dXA6OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgbmFtZSwgKCJET01XaW5kb3dQYWdlUG9wdXAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywg
bmFtZSwgKCJET01XaW5kb3dQYWdlUG9wdXAiKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UGFnZVBvcHVwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAuaAkocmV2aXNpb24gMTQw
NDA1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgRE9NV2luZG93UGFnZVBvcHVwKFBhZ2VQb3B1cENsaWVudCopOwotICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVy
YWxDU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwogCiAgICAgUmVmUHRyPFBhZ2VQb3B1cENvbnRy
b2xsZXI+IG1fY29udHJvbGxlcjsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9S
ZWZDb3VudGVkU3VwcGxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgJKHJldmlzaW9uIDE0MDQwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDEyICs1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUaGlzVHlwZT4gbV93cmFw
cGVkOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9pZCBwcm92aWRlVG8oU3VwcGxlbWVudGFibGU8
VD4qIGhvc3QsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBQYXNzUmVmUHRyPFRoaXNUeXBlPiBz
dXBwbGVtZW50KQorICAgIHN0YXRpYyB2b2lkIHByb3ZpZGVUbyhTdXBwbGVtZW50YWJsZTxUPiog
aG9zdCwgY29uc3QgTGl0ZXJhbENTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxUaGlzVHlwZT4gc3Vw
cGxlbWVudCkKICAgICB7CiAgICAgICAgIGhvc3QtPnByb3ZpZGVTdXBwbGVtZW50KGtleSwgYWRv
cHRQdHIobmV3IFdyYXBwZXIoc3VwcGxlbWVudCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgVGhp
c1R5cGUqIGZyb20oU3VwcGxlbWVudGFibGU8VD4qIGhvc3QsIGNvbnN0IEF0b21pY1N0cmluZyYg
a2V5KQorICAgIHN0YXRpYyBUaGlzVHlwZSogZnJvbShTdXBwbGVtZW50YWJsZTxUPiogaG9zdCwg
Y29uc3QgTGl0ZXJhbENTdHJpbmcmIGtleSkKICAgICB7CiAgICAgICAgIFN1cHBsZW1lbnQ8VD4q
IGZvdW5kID0gaG9zdC0+cmVxdWlyZVN1cHBsZW1lbnQoa2V5KTsKICAgICAgICAgaWYgKCFmb3Vu
ZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAkocmV2aXNp
b24gMTQwNDA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOSBAQAogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvTGl0ZXJhbENTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MaXRlcmFsQ1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00NCwxMiArNDUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc1JlZkNvdW50ZWRXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgog
Ci0gICAgc3RhdGljIHZvaWQgcHJvdmlkZVRvKFN1cHBsZW1lbnRhYmxlPFQ+KiBob3N0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+ID4gc3VwcGxlbWVu
dCkKKyAgICBzdGF0aWMgdm9pZCBwcm92aWRlVG8oU3VwcGxlbWVudGFibGU8VD4qIGhvc3QsIGNv
bnN0IExpdGVyYWxDU3RyaW5nJiBrZXksIFBhc3NPd25QdHI8U3VwcGxlbWVudDxUPiA+IHN1cHBs
ZW1lbnQpCiAgICAgewogICAgICAgICBob3N0LT5wcm92aWRlU3VwcGxlbWVudChrZXksIHN1cHBs
ZW1lbnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdXBwbGVtZW50PFQ+KiBmcm9tKFN1cHBsZW1l
bnRhYmxlPFQ+KiBob3N0LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSkKKyAgICBzdGF0aWMgU3Vw
cGxlbWVudDxUPiogZnJvbShTdXBwbGVtZW50YWJsZTxUPiogaG9zdCwgY29uc3QgTGl0ZXJhbENT
dHJpbmcmIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBob3N0ID8gaG9zdC0+cmVxdWlyZVN1
cHBsZW1lbnQoa2V5KSA6IDA7CiAgICAgfQpAQCAtNTgsMjUgKzU5LDI5IEBAIHB1YmxpYzoKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBTdXBwbGVtZW50YWJsZSB7CiBwdWJsaWM6Ci0gICAg
dm9pZCBwcm92aWRlU3VwcGxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgUGFzc093blB0
cjxTdXBwbGVtZW50PFQ+ID4gc3VwcGxlbWVudCkKKyAgICB2b2lkIHByb3ZpZGVTdXBwbGVtZW50
KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXksIFBhc3NPd25QdHI8U3VwcGxlbWVudDxUPiA+IHN1
cHBsZW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fc3VwcGxlbWVudHMuZ2V0KGtleS5p
bXBsKCkpKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3VwcGxlbWVudHNMb2NrKTsK
KyAgICAgICAgQVNTRVJUKCFtX3N1cHBsZW1lbnRzLmdldChrZXkpKTsKICAgICAgICAgbV9zdXBw
bGVtZW50cy5zZXQoa2V5LCBzdXBwbGVtZW50KTsKICAgICB9CiAKLSAgICB2b2lkIHJlbW92ZVN1
cHBsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBrZXkpCisgICAgdm9pZCByZW1vdmVTdXBwbGVt
ZW50KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXkpCiAgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9zdXBwbGVtZW50c0xvY2spOwogICAgICAgICBtX3N1cHBsZW1lbnRzLnJlbW92
ZShrZXkpOwogICAgIH0KIAotICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNv
bnN0IEF0b21pY1N0cmluZyYga2V5KQorICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVt
ZW50KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXkpCiAgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9zdXBwbGVtZW50c0xvY2spOwogICAgICAgICByZXR1cm4gbV9zdXBwbGVtZW50
cy5nZXQoa2V5KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgT3duUHRyPFN1cHBsZW1lbnQ8VD4gPiA+IFN1cHBsZW1lbnRNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPExpdGVyYWxDU3RyaW5nLCBPd25QdHI8U3VwcGxlbWVudDxUPiA+ID4gU3Vw
cGxlbWVudE1hcDsKICAgICBTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CisgICAgTXV0ZXgg
bV9zdXBwbGVtZW50c0xvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAJKHJldmlzaW9uIDE0
MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgogCiBJbnRlcm5hbFNldHRp
bmdzKiBJbnRlcm5hbFNldHRpbmdzOjpmcm9tKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiSW50ZXJuYWxTZXR0aW5ncyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkludGVybmFsU2V0dGluZ3MiKSk7CiAgICAgaWYgKCFT
dXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIG5hbWUpKQogICAgICAgICBTdXBwbGVtZW50PFBh
Z2U+Ojpwcm92aWRlVG8ocGFnZSwgbmFtZSwgYWRvcHRQdHIobmV3IEludGVybmFsU2V0dGluZ3NX
cmFwcGVyKHBhZ2UpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludGVybmFsU2V0dGluZ3NX
cmFwcGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBuYW1lKSktPmludGVybmFsU2V0
dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRGZWF0dXJl
c0NsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0NvbnRleHRGZWF0dXJlc0NsaWVudEltcGwuY3BwCShyZXZpc2lvbiAxNDA0MDUpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0RmVhdHVyZXNDbGllbnRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9kZWZh
dWx0VmFsdWU7IC8vIE5lZWRzIHRvIGJlIHRyYWtlZCBhcyBhIHBhcnQgb2YgdGhlIHNpZ25hdHVy
ZSBzaW5jZSBpdCBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseS4KICAgICB9OwogCi0gICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29u
c3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIENvbnRleHRG
ZWF0dXJlc0NhY2hlKiBmcm9tKERvY3VtZW50Kik7CiAKICAgICBFbnRyeSYgZW50cnlGb3IoQ29u
dGV4dEZlYXR1cmVzOjpGZWF0dXJlVHlwZSB0eXBlKQpAQCAtOTQsOSArOTQsOSBAQCBwcml2YXRl
OgogICAgIEVudHJ5IG1fZW50cmllc1tDb250ZXh0RmVhdHVyZXM6OkZlYXR1cmVUeXBlU2l6ZV07
CiB9OwogCi1jb25zdCBBdG9taWNTdHJpbmcmIENvbnRleHRGZWF0dXJlc0NhY2hlOjpzdXBwbGVt
ZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYgQ29udGV4dEZlYXR1cmVzQ2FjaGU6OnN1
cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
bmFtZSwgKCJDb250ZXh0RmVhdHVyZXNDYWNoZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkNvbnRleHRGZWF0dXJlc0NhY2hlIikpOwogICAgIHJl
dHVybiBuYW1lOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183966</attachid>
            <date>2013-01-22 04:41:24 -0800</date>
            <delta_ts>2013-01-22 16:14:47 -0800</delta_ts>
            <desc>svn up&apos;ed prelim patch for bot testing.</desc>
            <filename>bug-107535-prelim.patch</filename>
            <type>text/plain</type>
            <size>45526</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTQwNDEyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBACiAJCUYzNTI1RTQ2MTYxOUE0RUUwMDI3OEJD
MSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzUyNUU0NTE2MTlBNEVFMDAyNzhCQzEgLyogTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oICovOyB9OwogCQlGM0ZCQzcxRTE2MUFGN0JGMDBC
QjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFEMTYxQUY3QkYwMEJC
NEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oICovOyB9OwogCQlG
M0ZCQzcyMDE2MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFG
MTYxQUY3Q0QwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25TZXF1ZW5jZS5oICovOyB9
OworCQlGRUEwODc4NjE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4Nzg0MTZBRTQ0ODEw
MEJERDRFQSAvKiBMaXRlcmFsQ1N0cmluZy5oICovOyB9OworCQlGRUEwODc4NzE2QUU0NDgxMDBC
REQ0RUEgLyogTGl0ZXJhbENTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODc4NTE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENT
dHJpbmdIYXNoLmggKi87IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0
YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
REFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNE
M0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTYxOSw2
ICs2MjEsOCBAQAogCQlGMzUyNUU0NTE2MTlBNEVFMDAyNzhCQzEgLyogTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJ
bnN0cnVtZW50YXRpb25IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYz
RkJDNzFEMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRl
ZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJbnN0cnVtZW50
YXRpb25IYXNoQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZC
QzcxRjE2MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2Vx
dWVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVBMDg3ODQxNkFFNDQ4MTAw
QkRENEVBIC8qIExpdGVyYWxDU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExpdGVyYWxDU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQTA4
Nzg1MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRlcmFsQ1N0cmluZ0hhc2guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGl0ZXJhbENTdHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyog
U3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1N0YXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCkBAIC05MzQsNiArOTM4LDggQEAKIAkJCQlBOEE0NzMyMTE1MUE4MjVCMDA0MTIz
RkYgLyogQ1N0cmluZy5jcHAgKi8sCiAJCQkJQThBNDczMjIxNTFBODI1QjAwNDEyM0ZGIC8qIENT
dHJpbmcuaCAqLywKIAkJCQkyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3Ry
aW5nQ29udmVyc2lvbi5oICovLAorCQkJCUZFQTA4Nzg0MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRl
cmFsQ1N0cmluZy5oICovLAorCQkJCUZFQTA4Nzg1MTZBRTQ0ODEwMEJERDRFQSAvKiBMaXRlcmFs
Q1N0cmluZ0hhc2guaCAqLywKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
QnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxk
ZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVy
LmggKi8sCkBAIC0xMjU2LDYgKzEyNjIsOCBAQAogCQkJCTk3NENGQzhFMTZBNEYzMjcwMDZENTQw
NCAvKiBXZWFrUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVBMDg3ODYxNkFF
NDQ4MTAwQkRENEVBIC8qIExpdGVyYWxDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEw
ODc4NzE2QUU0NDgxMDBCREQ0RUEgLyogTGl0ZXJhbENTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgV1RGX0xpdGVyYWxDU3RyaW5nX2gKKyNkZWZpbmUgV1RGX0xpdGVyYWxDU3Ry
aW5nX2gKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdHJ1Y3QgTGl0ZXJhbENTdHJpbmdI
YXNoOworCitjbGFzcyBMaXRlcmFsQ1N0cmluZyB7CitwdWJsaWM6CisgICAgaW5saW5lIExpdGVy
YWxDU3RyaW5nKCk7CisgICAgZXhwbGljaXQgaW5saW5lIExpdGVyYWxDU3RyaW5nKGNvbnN0IGNo
YXIqKTsKKyAgICBpbmxpbmUgTGl0ZXJhbENTdHJpbmcoY29uc3QgTGl0ZXJhbENTdHJpbmcmIG90
aGVyKTsKKyAgICBpbmxpbmUgTGl0ZXJhbENTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKTsKKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiAhbV9zdHJpbmc7IH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsg
fQorCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaXRlcmFsQ1N0cmluZyYgb3Ro
ZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIGlubGluZSB2b2lkIGNvbXB1dGVIYXNoKCk7CisK
KyAgICBjb25zdCBjaGFyKiBtX3N0cmluZzsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1
bnNpZ25lZCBtX2hhc2g7Cit9OworCisKK0xpdGVyYWxDU3RyaW5nOjpMaXRlcmFsQ1N0cmluZygp
CisgICAgOiBtX3N0cmluZygwKSwgbV9sZW5ndGgoMCksIG1faGFzaCgwKQoreworfQorCitMaXRl
cmFsQ1N0cmluZzo6TGl0ZXJhbENTdHJpbmcoY29uc3QgY2hhciogcykKKyAgICA6IG1fc3RyaW5n
KHMpLCBtX2xlbmd0aChzdHJsZW4ocykpLCBtX2hhc2goMCkgCit7CisgICAgY29tcHV0ZUhhc2go
KTsKK30KKworTGl0ZXJhbENTdHJpbmc6OkxpdGVyYWxDU3RyaW5nKGNvbnN0IExpdGVyYWxDU3Ry
aW5nJiBvdGhlcikKKyAgICA6IG1fc3RyaW5nKG90aGVyLm1fc3RyaW5nKSwgbV9sZW5ndGgob3Ro
ZXIubV9sZW5ndGgpLCBtX2hhc2gob3RoZXIubV9oYXNoKQoreworfQorCitMaXRlcmFsQ1N0cmlu
Zzo6TGl0ZXJhbENTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIDog
bV9zdHJpbmcoMCksIG1fbGVuZ3RoKDApLCBtX2hhc2goMCkKK3sKK30KKwordm9pZCBMaXRlcmFs
Q1N0cmluZzo6Y29tcHV0ZUhhc2goKQoreworICAgIEFTU0VSVCghbV9oYXNoKTsKKyAgICBtX2hh
c2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihtX3N0cmluZyksIG1fbGVuZ3RoKTsKKyAgICBBU1NFUlQobV9o
YXNoKTsgLy8gVGhlIGhhc2ggc2hvdWxkIG5ldmVyIGJlIDAuCit9CisKK2Jvb2wgTGl0ZXJhbENT
dHJpbmc6Om9wZXJhdG9yPT0oY29uc3QgTGl0ZXJhbENTdHJpbmcmIG90aGVyKSBjb25zdAorewor
ICAgIGlmIChtX3N0cmluZyA9PSBvdGhlci5tX3N0cmluZykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKCFtX3N0cmluZyB8fCAhb3RoZXIubV9zdHJpbmcpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9oYXNoICYmIG1faGFzaCA9PSBvdGhlci5tX2hhc2gpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vIEl0J3MgYSBtYXRjaCBpZiBzdHJjbXAoKSByZXR1cm5zIDAu
CisgICAgcmV0dXJuICFzdHJjbXAobV9zdHJpbmcsIG90aGVyLm1fc3RyaW5nKTsKK30KKworCisv
LyBMaXRlcmFsQ1N0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgTGl0ZXJhbENTdHJp
bmcKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPExpdGVyYWxDU3RyaW5nPiB7CisgICAgdHlwZWRlZiBMaXRlcmFs
Q1N0cmluZ0hhc2ggSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkxpdGVyYWxDU3RyaW5nOworCisjZW5kaWYgLy8gV1RGX0xpdGVyYWxDU3RyaW5nX2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmdIYXNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9MaXRlcmFsQ1N0cmluZ0hhc2guaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvTGl0ZXJhbENTdHJpbmdIYXNoLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfTGl0ZXJhbENTdHJpbmdIYXNoX2gKKyNkZWZpbmUgV1RGX0xpdGVy
YWxDU3RyaW5nSGFzaF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0xpdGVyYWxDU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdHJ1Y3Qg
TGl0ZXJhbENTdHJpbmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMaXRl
cmFsQ1N0cmluZyYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTGl0ZXJhbENTdHJpbmcmIGEsIGNvbnN0
IExpdGVyYWxDU3RyaW5nJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworfTsKKworLy8gTGl0ZXJhbENTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2gg
Zm9yIExpdGVyYWxDU3RyaW5nCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdURjo6TGl0
ZXJhbENTdHJpbmc+IDogR2VuZXJpY0hhc2hUcmFpdHM8V1RGOjpMaXRlcmFsQ1N0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXVEY6OkxpdGVyYWxDU3RyaW5nJiBzbG90KSB7
IG5ldyAoTm90TnVsbCwgJnNsb3QpIFdURjo6TGl0ZXJhbENTdHJpbmcoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdURjo6TGl0
ZXJhbENTdHJpbmcmIHNsb3QpIHsgcmV0dXJuIHNsb3QuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TGl0ZXJhbENTdHJp
bmc7CisKKyNlbmRpZiAvLyBXVEZfTGl0ZXJhbENTdHJpbmdIYXNoX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksOSBAQCB2b2lkIEJh
dHRlcnlDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5CiAgICAgICAgICgqaXQpLT5kaWRDaGFu
Z2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBCYXR0ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJp
bmcmIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRyb2xsZXIiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJCYXR0ZXJ5Q29udHJvbGxlciIpKTsKICAgICByZXR1
cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0
ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEJhdHRlcnlDbGllbnQqIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYgc3Vw
cGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgQmF0dGVyeUNvbnRyb2xsZXIqIGZyb20oUGFnZSog
cGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmF0dGVyeUNvbnRyb2xsZXIqPihTdXBwbGVtZW50
PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgIHN0YXRpYyBib29s
IGlzQWN0aXZlKFBhZ2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L05hdmlnYXRvckJhdHRlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEJhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5
Ojp3ZWJraXQKIAogTmF2aWdhdG9yQmF0dGVyeSogTmF2aWdhdG9yQmF0dGVyeTo6ZnJvbShOYXZp
Z2F0b3IqIG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgbmFtZSwgKCJOYXZpZ2F0b3JCYXR0ZXJ5IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUs
ICgiTmF2aWdhdG9yQmF0dGVyeSIpKTsKICAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBwbGVtZW50
ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6
ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAg
c3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9t
aXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDA0MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVk
RmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQCBET01GaWxl
U3lzdGVtKiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtCiB9CiAKIC8vIHN0YXRpYwotY29uc3Qg
QXRvbWljU3RyaW5nJiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFtZSgp
Citjb25zdCBMaXRlcmFsQ1N0cmluZyYgRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbTo6c3VwcGxl
bWVudE5hbWUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3Rl
bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkRyYWdnZWRJc29sYXRlZEZpbGVTeXN0
ZW0iKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdn
ZWRJc29sYXRlZEZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1E
YXRhT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MaXRlcmFsQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGZpbGVzeXN0ZW1JZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZXN5c3RlbUlkOyB9CiAgICAgRE9NRmlsZVN5c3RlbSogZ2V0
RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRl
cmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRHJhZ2dlZElzb2xhdGVk
RmlsZVN5c3RlbSogZnJvbShDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0qPihTdXBwbGVtZW50PENocm9t
aXVtRGF0YU9iamVjdD46OmZyb20oZGF0YU9iamVjdCwgc3VwcGxlbWVudE5hbWUoKSkpOyB9CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9y
R2FtZXBhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L05hdmlnYXRvckdhbWVwYWQuY3BwCShyZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgTmF2aWdhdG9yR2FtZXBhZDo6fk5hdmlnYXRvckdhbWVwYWQoKQogCiBO
YXZpZ2F0b3JHYW1lcGFkKiBOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKE5hdmlnYXRvciogbmF2aWdh
dG9yKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5h
dmlnYXRvckdhbWVwYWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JH
YW1lcGFkIikpOwogICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxOYXZpZ2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRv
ciwgbmFtZSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0g
bmV3IE5hdmlnYXRvckdhbWVwYWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5IEBA
IEdlb2xvY2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGwKICAgICByZXR1cm4gbV9j
bGllbnQtPmxhc3RQb3NpdGlvbigpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEdlb2xvY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkdlb2xvY2F0aW9uQ29udHJvbGxlciIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkdlb2xvY2F0aW9uQ29udHJvbGxlciIpKTsKICAg
ICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAx
NDA0MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAog
ICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0g
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIEdl
b2xvY2F0aW9uQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxHZW9sb2NhdGlvbkNvbnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1
cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5j
cHAJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIE5hdmlnYXRvckdlb2xvY2F0aW9uOjp+TmF2aWdhdG9yR2VvbG9jYXQKIAogTmF2aWdhdG9y
R2VvbG9jYXRpb24qIE5hdmlnYXRvckdlb2xvY2F0aW9uOjpmcm9tKE5hdmlnYXRvciogbmF2aWdh
dG9yKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5h
dmlnYXRvckdlb2xvY2F0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiTmF2aWdh
dG9yR2VvbG9jYXRpb24iKSk7CiAgICAgTmF2aWdhdG9yR2VvbG9jYXRpb24qIHN1cHBsZW1lbnQg
PSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3JHZW9sb2NhdGlvbio+KFN1cHBsZW1lbnQ8TmF2aWdhdG9y
Pjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAg
ICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JHZW9sb2NhdGlvbihuYXZpZ2F0b3ItPmZyYW1l
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZTo6fkRPTVdpbmRvd0luZGUKIAogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2U6OmZyb20oRE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlIikpOwogICAgIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8RE9NV2luZG93
Pjo6ZnJvbSh3aW5kb3csIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAg
c3VwcGxlbWVudCA9IG5ldyBET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uod2luZG93KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2U6On5Q
YWdlR3JvdXBJbmRlCiAKIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSogUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlOjpmcm9tKFBhZ2VHcm91cCYgZ3JvdXApCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlIikpOwog
ICAgIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PFBh
Z2VHcm91cEluZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8UGFnZUdyb3VwPjo6ZnJvbSgmZ3Jv
dXAsIG5hbWUpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9
IG5ldyBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRl
eGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCBXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlOjp+V29y
a2VyQ29uCiAKIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UqIFdvcmtlckNvbnRleHRJbmRl
eGVkRGF0YWJhc2U6OmZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBBdG9taWNTdHJpbmcgbmFtZSA9ICJXb3JrZGVyQ29udGV4dEluZGV4ZWREYXRhYmFzZSI7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJXb3JrZXJDb250
ZXh0SW5kZXhlZERhdGFiYXNlIikpOwogICAgIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2Uq
IHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlKj4o
U3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCBuYW1lKSk7
CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgV29ya2Vy
Q29udGV4dEluZGV4ZWREYXRhYmFzZShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5jcHAJKHJldmlzaW9uIDE0
MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBET01XaW5kb3dJbnRlbnRzOjp+
RE9NV2luZG93SW50ZW50cygpCiBET01XaW5kb3dJbnRlbnRzKiBET01XaW5kb3dJbnRlbnRzOjpm
cm9tKERPTVdpbmRvdyogd2luZG93KQogewogICAgIEFTU0VSVCh3aW5kb3cpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRvd0ludGVudHMiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJET01XaW5kb3dJbnRlbnRzIikpOwogICAgIERP
TVdpbmRvd0ludGVudHMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dJbnRlbnRz
Kj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgbmFtZSkpOwogICAgIGlmICgh
c3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERPTVdpbmRvd0ludGVudHMo
d2luZG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1l
ZGlhQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVXNlck1lZGlhQ29udHJvbGxlcjo6c3VwcGxlbWVudE5h
bWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIFVzZXJNZWRpYUNvbnRyb2xsZXI6OnN1cHBsZW1l
bnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJVc2VyTWVkaWFDb250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiVXNl
ck1lZGlhQ29udHJvbGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlh
UmVxdWVzdCopOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8VXNlck1lZGlhQ29udHJvbGxlcj4g
Y3JlYXRlKFVzZXJNZWRpYUNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBw
bGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBVc2VyTWVkaWFDb250cm9sbGVyKiBmcm9tKFBhZ2Uq
IHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJNZWRpYUNvbnRyb2xsZXIqPihTdXBwbGVt
ZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZp
Z2F0b3JDb250ZW50VXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAJKHJldmlz
aW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0
aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw5ICsy
MDEsOSBAQCB2b2lkIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6dW5yZWdpc3RlclByCiB9CiAjZW5k
aWYKIAotY29uc3QgQXRvbWljU3RyaW5nJiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnN1cHBsZW1l
bnROYW1lKCkKK2NvbnN0IExpdGVyYWxDU3RyaW5nJiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnN1
cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
bmFtZSwgKCJOYXZpZ2F0b3JDb250ZW50VXRpbHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFt
ZSwgKCJOYXZpZ2F0b3JDb250ZW50VXRpbHMiKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRv
ckNvbnRlbnRVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2
aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5oCShyZXZpc2lvbiAxNDA0
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZp
Z2F0b3JDb250ZW50VXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjbGFz
cyBOYXZpZ2F0b3JDb250ZW50VXRpbHMgOiBwdWJsaWMgUmVmCiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+TmF2aWdhdG9yQ29udGVudFV0aWxzKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYg
c3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgTmF2aWdhdG9yQ29udGVudFV0aWxzKiBmcm9t
KFBhZ2UqKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKE5hdmln
YXRvciosIGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB0aXRsZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29y
a0luZm9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVj
dGlvbjo6fk5hdmlnYXQKIAogTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uKiBOYXZpZ2F0
b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb246OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCiB7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2aWdhdG9yTmV0
d29ya0luZm9Db25uZWN0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiTmF2aWdh
dG9yTmV0d29ya0luZm9Db25uZWN0aW9uIikpOwogICAgIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29u
bmVjdGlvbiogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvck5ldHdvcmtJbmZvQ29u
bmVjdGlvbio+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsK
ICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0
b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8v
TmV0d29ya0luZm9Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOSArNzksOSBA
QCB2b2lkIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6ZGlkQ2hhbmdlTmV0CiAgICAgICAgICAoKml0
KS0+ZGlkQ2hhbmdlTmV0d29ya0luZm9ybWF0aW9uKGV2ZW50LCBuZXR3b3JrSW5mb3JtYXRpb24p
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6c3VwcGxl
bWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6
c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIk5ldHdvcmtJbmZvQ29udHJvbGxlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBu
YW1lLCAoIk5ldHdvcmtJbmZvQ29udHJvbGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZv
L05ldHdvcmtJbmZvQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzT3duUHRy
PE5ldHdvcmtJbmZvQ29udHJvbGxlcj4gY3JlYXRlKFBhZ2UqLCBOZXR3b3JrSW5mb0NsaWVudCop
OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAg
ICBzdGF0aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3Rh
dGljIE5ldHdvcmtJbmZvQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxOZXR3b3JrSW5mb0NvbnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBh
Z2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgCiAgICAgdm9pZCBhZGRMaXN0ZW5lcihOZXR3
b3JrSW5mb0Nvbm5lY3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZp
Y2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5jcHAJ
KHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9u
cy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBET01XaW5kb3dOb3RpZmljYXRpb25zOjp+RE9NV2luZG93Tm90aWZpCiAKIERPTVdpbmRv
d05vdGlmaWNhdGlvbnMqIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6OmZyb20oRE9NV2luZG93KiB3
aW5kb3cpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN1cHBsZW1l
bnROYW1lLCAoIkRPTVdpbmRvd05vdGlmaWNhdGlvbnMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywg
c3VwcGxlbWVudE5hbWUsICgiRE9NV2luZG93Tm90aWZpY2F0aW9ucyIpKTsKICAgICBET01XaW5k
b3dOb3RpZmljYXRpb25zKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8RE9NV2luZG93Tm90aWZp
Y2F0aW9ucyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1lbnRO
YW1lKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcg
RE9NV2luZG93Tm90aWZpY2F0aW9ucyh3aW5kb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
b3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw5ICs1Niw5IEBAIE5vdGlmaWNhdGlvbkNsaWVudCogTm90aWZpY2F0aW9uQ29udHJvbGwK
ICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBOb3RpZmljYXRpb25Db250
cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYgTm90aWZpY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5vdGlmaWNhdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChM
aXRlcmFsQ1N0cmluZywgbmFtZSwgKCJOb3RpZmljYXRpb25Db250cm9sbGVyIikpOwogICAgIHJl
dHVybiBuYW1lOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9u
IDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIH5Ob3RpZmljYXRpb25Db250cm9sbGVyKCk7CiAKICAgICBzdGF0aWMgUGFzc093blB0
cjxOb3RpZmljYXRpb25Db250cm9sbGVyPiBjcmVhdGUoTm90aWZpY2F0aW9uQ2xpZW50Kik7Ci0g
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIE5v
dGlmaWNhdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Tm90aWZpY2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwg
c3VwcGxlbWVudE5hbWUoKSkpOyB9CiAgICAgc3RhdGljIE5vdGlmaWNhdGlvbkNsaWVudCogY2xp
ZW50RnJvbShQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0
aW9ucy9Xb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25z
LmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmlj
YXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9uczo6fldvcmtlckNvbnRlCiAK
IFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKiBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9uczo6
ZnJvbShXb3JrZXJDb250ZXh0KiBjb250ZXh0KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBzdXBwbGVtZW50TmFtZSwgKCJXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9u
cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBzdXBwbGVtZW50TmFtZSwgKCJXb3JrZXJDb250ZXh0
Tm90aWZpY2F0aW9ucyIpKTsKICAgICBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucyogc3VwcGxl
bWVudCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKj4oU3VwcGxlbWVu
dDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCBzdXBwbGVtZW50TmFtZSkp
OwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtl
ckNvbnRleHROb3RpZmljYXRpb25zKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5jcHAJKHJldmlzaW9uIDE0MDQxMikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIERPTVdpbmRvd1F1b3RhOjp+RE9NV2luZG93UXVvdGEo
KQogLy8gc3RhdGljCiBET01XaW5kb3dRdW90YSogRE9NV2luZG93UXVvdGE6OmZyb20oRE9NV2lu
ZG93KiB3aW5kb3cpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5h
bWUsICgiRE9NV2luZG93UXVvdGEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJET01X
aW5kb3dRdW90YSIpKTsKICAgICBET01XaW5kb3dRdW90YSogc3VwcGxlbWVudCA9IHN0YXRpY19j
YXN0PERPTVdpbmRvd1F1b3RhKj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywg
bmFtZSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3
IERPTVdpbmRvd1F1b3RhKHdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAJKHJldmlz
aW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1Nw
ZWVjaFN5bnRoZXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgRE9NV2lu
ZG93U3BlZWNoU3ludGhlc2lzOjp+RE9NV2luZG93U3BlZQogLy8gc3RhdGljCiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMqIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6ZnJvbShET01XaW5kb3cq
IHdpbmRvdykKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJET01XaW5kb3dTcGVlY2hTeW50aGVzaXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMaXRlcmFsU3RyaW5nLCBuYW1lLCAo
IkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyIpKTsKICAgICBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dTcGVlY2hTeW50aGVzaXMqPihT
dXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7CiAgICAgaWYgKCFzdXBw
bGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzKHdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0
MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJpbmcmIFNwZWVjaFJl
Y29nbml0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIlNwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmgJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlv
bikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9CiAKICAgICBzdGF0aWMgUGFzc093
blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1l
KCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwog
ICAgIHN0YXRpYyBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyKj4oU3VwcGxl
bWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmNw
cAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24v
VmlicmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDkgKzEyNiw5IEBAIHZvaWQgVmli
cmF0aW9uOjp0aW1lclN0b3BGaXJlZChUaW1lcjxWaWIKICAgICB9CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgVmlicmF0aW9uOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmlu
ZyYgVmlicmF0aW9uOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIG5hbWUsICgiVmlicmF0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcs
IG5hbWUsICgiVmlicmF0aW9uIikpOwogICAgIHJldHVybiBuYW1lOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAkocmV2aXNpb24gMTQw
NDEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGltZXJTdGFy
dEZpcmVkKFRpbWVyPFZpYnJhdGlvbj4qKTsKICAgICB2b2lkIHRpbWVyU3RvcEZpcmVkKFRpbWVy
PFZpYnJhdGlvbj4qKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1l
bnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBwbGVtZW50TmFt
ZSgpOwogICAgIHN0YXRpYyBWaWJyYXRpb24qIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmlicmF0aW9uKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVt
ZW50TmFtZSgpKSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgTGl0ZXJhbENT
dHJpbmcmIHN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVy
YWxDU3RyaW5nLCBuYW1lLCAoIkRhdGFiYXNlQ29udGV4dCIpKTsKKyAgICByZXR1cm4gbmFtZTsK
K30KKwogc3RhdGljIERhdGFiYXNlQ29udGV4dCogZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9t
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERhdGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46
OmZyb20oY29udGV4dCwgIkRhdGFiYXNlQ29udGV4dCIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6
ZnJvbShjb250ZXh0LCBzdXBwbGVtZW50TmFtZSgpKSk7CiB9CiAKIERhdGFiYXNlQ29udGV4dDo6
RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCkBAIC02OCw3
ICs3NCw3IEBAIERhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0Ojpmcm9tKFMKICAgICBE
YXRhYmFzZUNvbnRleHQqIHN1cHBsZW1lbnQgPSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20o
Y29udGV4dCk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBu
ZXcgRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBwcm92aWRlVG8oY29udGV4dCwg
IkRhdGFiYXNlQ29udGV4dCIsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICAgICAgcHJvdmlk
ZVRvKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAg
ICAgICAgQVNTRVJUKHN1cHBsZW1lbnQgPT0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNv
bnRleHQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGV4dEZlYXR1cmVzLmNwcAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRleHRGZWF0dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5
LDkgQEAgQ29udGV4dEZlYXR1cmVzQ2xpZW50KiBDb250ZXh0RmVhdHVyZXNDbAogICAgIHJldHVy
biAmZW1wdHk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ29udGV4dEZlYXR1cmVzOjpzdXBw
bGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYgQ29udGV4dEZlYXR1cmVzOjpzdXBw
bGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5h
bWUsICgiQ29udGV4dEZlYXR1cmVzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcsIG5hbWUsICgiQ29u
dGV4dEZlYXR1cmVzIikpOwogICAgIHJldHVybiBuYW1lOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRleHRGZWF0dXJlcy5oCShyZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGV4dEZlYXR1cmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgICAgICBGZWF0dXJlVHlwZVNpemUgLy8gU2hvdWxkIGJlIHRoZSBsYXN0IGVu
dHJ5LgogICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50
TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUo
KTsKICAgICBzdGF0aWMgQ29udGV4dEZlYXR1cmVzKiBkZWZhdWx0U3dpdGNoKCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29udGV4dEZlYXR1cmVzPiBjcmVhdGUoQ29udGV4dEZlYXR1cmVzQ2xp
ZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VN
b3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsOSBAQCBQYXNz
UmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rpb25Db250cm9sbGVyCiAgICAgcmV0dXJuIERldmljZU1v
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW1vdGlvbkV2ZW50LCBkZXZpY2VN
b3Rpb25DbGllbnQoKS0+bGFzdE1vdGlvbigpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBE
ZXZpY2VNb3Rpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0
cmluZyYgRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRldmljZU1vdGlvbkNvbnRy
b2xsZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJEZXZpY2VNb3Rpb25Db250cm9s
bGVyIikpOwogICAgIHJldHVybiBuYW1lOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RGV2aWNlTW90aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgT1ZFUlJJ
REU7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwor
ICAgIHN0YXRpYyBjb25zdCBMaXRlcmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBz
dGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CiAgICAgc3RhdGljIGJv
b2wgaXNBY3RpdmVBdChQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDA0MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBQYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRh
dGlvbkNvbnRyCiAgICAgcmV0dXJuIERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCwgZGV2aWNlT3JpZW50YXRpb25DbGllbnQo
KS0+bGFzdE9yaWVudGF0aW9uKCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgTGl0ZXJhbENTdHJp
bmcmIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRldmljZU9yaWVudGF0
aW9uQ29udHJvbGxlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkRldmljZU9yaWVu
dGF0aW9uQ29udHJvbGxlciIpKTsKICAgICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RXZlbnQ+IGdldExhc3RFdmVudCgpIE9WRVJSSURFOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgTGl0ZXJhbENTdHJp
bmcmIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIERldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlciogZnJvbShQYWdlKik7CiAgICAgc3RhdGljIGJvb2wgaXNBY3RpdmVBdChQYWdlKik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmNwcAkocmV2
aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTYgKzM0LDE1IEBACiAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAvLyBzdGF0aWMKLWNvbnN0IEF0b21pY1N0cmluZyYgUHJlcmVuZGVyZXJDbGll
bnQ6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IExpdGVyYWxDU3RyaW5nJiBQcmVyZW5kZXJlckNs
aWVudDo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCBuYW1lLCAoIlByZXJlbmRlcmVyQ2xpZW50IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGl0ZXJhbENTdHJpbmcs
IG5hbWUsICgiUHJlcmVuZGVyZXJDbGllbnQiKSk7CiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlckNsaWVudC5oCShyZXZpc2lvbiAx
NDA0MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJlcmVuZGVyZXJDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbEFkZFByZXJlbmRlcihQcmVyZW5kZXJIYW5kbGUqKSA9IDA7CiAKLSAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBMaXRl
cmFsQ1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgUHJlcmVuZGVyZXJDbGll
bnQqIGZyb20oUGFnZSopOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvd1BhZ2VQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3dQYWdlUG9wdXAuY3BwCShyZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkg
KzQ4LDkgQEAgRE9NV2luZG93UGFnZVBvcHVwOjp+RE9NV2luZG93UGFnZVBvcHVwKAogICAgIG1f
Y29udHJvbGxlci0+Y2xlYXJQYWdlUG9wdXBDbGllbnQoKTsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBET01XaW5kb3dQYWdlUG9wdXA6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IExpdGVyYWxD
U3RyaW5nJiBET01XaW5kb3dQYWdlUG9wdXA6OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJET01XaW5kb3dQYWdlUG9wdXAi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChMaXRlcmFsQ1N0cmluZywgbmFtZSwgKCJET01XaW5kb3dQYWdlUG9wdXAiKSk7CiAg
ICAgcmV0dXJuIG5hbWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
UGFnZVBvcHVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQ
YWdlUG9wdXAuaAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3dQYWdlUG9wdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRE9NV2luZG93UGFnZVBvcHVwKFBhZ2VQb3B1cENs
aWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwogCiAg
ICAgUmVmUHRyPFBhZ2VQb3B1cENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWZDb3VudGVkU3VwcGxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgJKHJldmlz
aW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEyICs1MywxMiBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZlB0cjxUaGlzVHlwZT4gbV93cmFwcGVkOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9pZCBw
cm92aWRlVG8oU3VwcGxlbWVudGFibGU8VD4qIGhvc3QsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5
LCBQYXNzUmVmUHRyPFRoaXNUeXBlPiBzdXBwbGVtZW50KQorICAgIHN0YXRpYyB2b2lkIHByb3Zp
ZGVUbyhTdXBwbGVtZW50YWJsZTxUPiogaG9zdCwgY29uc3QgTGl0ZXJhbENTdHJpbmcmIGtleSwg
UGFzc1JlZlB0cjxUaGlzVHlwZT4gc3VwcGxlbWVudCkKICAgICB7CiAgICAgICAgIGhvc3QtPnBy
b3ZpZGVTdXBwbGVtZW50KGtleSwgYWRvcHRQdHIobmV3IFdyYXBwZXIoc3VwcGxlbWVudCkpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgVGhpc1R5cGUqIGZyb20oU3VwcGxlbWVudGFibGU8VD4qIGhv
c3QsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQorICAgIHN0YXRpYyBUaGlzVHlwZSogZnJvbShT
dXBwbGVtZW50YWJsZTxUPiogaG9zdCwgY29uc3QgTGl0ZXJhbENTdHJpbmcmIGtleSkKICAgICB7
CiAgICAgICAgIFN1cHBsZW1lbnQ8VD4qIGZvdW5kID0gaG9zdC0+cmVxdWlyZVN1cHBsZW1lbnQo
a2V5KTsKICAgICAgICAgaWYgKCFmb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1N1cHBsZW1lbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U3VwcGxlbWVudGFibGUuaAkocmV2aXNpb24gMTQwNDEyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3VwcGxlbWVudGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOSBAQAog
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvTGl0ZXJhbENTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MaXRlcmFsQ1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCwxMiArNDUsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlZkNvdW50ZWRXcmFwcGVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgc3RhdGljIHZvaWQgcHJvdmlkZVRvKFN1cHBs
ZW1lbnRhYmxlPFQ+KiBob3N0LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgUGFzc093blB0cjxT
dXBwbGVtZW50PFQ+ID4gc3VwcGxlbWVudCkKKyAgICBzdGF0aWMgdm9pZCBwcm92aWRlVG8oU3Vw
cGxlbWVudGFibGU8VD4qIGhvc3QsIGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXksIFBhc3NPd25Q
dHI8U3VwcGxlbWVudDxUPiA+IHN1cHBsZW1lbnQpCiAgICAgewogICAgICAgICBob3N0LT5wcm92
aWRlU3VwcGxlbWVudChrZXksIHN1cHBsZW1lbnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdXBw
bGVtZW50PFQ+KiBmcm9tKFN1cHBsZW1lbnRhYmxlPFQ+KiBob3N0LCBjb25zdCBBdG9taWNTdHJp
bmcmIGtleSkKKyAgICBzdGF0aWMgU3VwcGxlbWVudDxUPiogZnJvbShTdXBwbGVtZW50YWJsZTxU
PiogaG9zdCwgY29uc3QgTGl0ZXJhbENTdHJpbmcmIGtleSkKICAgICB7CiAgICAgICAgIHJldHVy
biBob3N0ID8gaG9zdC0+cmVxdWlyZVN1cHBsZW1lbnQoa2V5KSA6IDA7CiAgICAgfQpAQCAtNTgs
MjUgKzU5LDI5IEBAIHB1YmxpYzoKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBTdXBwbGVt
ZW50YWJsZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBwcm92aWRlU3VwcGxlbWVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+ID4gc3VwcGxlbWVudCkKKyAg
ICB2b2lkIHByb3ZpZGVTdXBwbGVtZW50KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXksIFBhc3NP
d25QdHI8U3VwcGxlbWVudDxUPiA+IHN1cHBsZW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQo
IW1fc3VwcGxlbWVudHMuZ2V0KGtleS5pbXBsKCkpKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fc3VwcGxlbWVudHNMb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX3N1cHBsZW1lbnRzLmdl
dChrZXkpKTsKICAgICAgICAgbV9zdXBwbGVtZW50cy5zZXQoa2V5LCBzdXBwbGVtZW50KTsKICAg
ICB9CiAKLSAgICB2b2lkIHJlbW92ZVN1cHBsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBrZXkp
CisgICAgdm9pZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXkpCiAg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdXBwbGVtZW50c0xvY2spOwogICAg
ICAgICBtX3N1cHBsZW1lbnRzLnJlbW92ZShrZXkpOwogICAgIH0KIAotICAgIFN1cHBsZW1lbnQ8
VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQorICAgIFN1cHBs
ZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNvbnN0IExpdGVyYWxDU3RyaW5nJiBrZXkpCiAg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdXBwbGVtZW50c0xvY2spOwogICAg
ICAgICByZXR1cm4gbV9zdXBwbGVtZW50cy5nZXQoa2V5KTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgT3duUHRyPFN1cHBsZW1lbnQ8VD4gPiA+
IFN1cHBsZW1lbnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPExpdGVyYWxDU3RyaW5nLCBPd25Q
dHI8U3VwcGxlbWVudDxUPiA+ID4gU3VwcGxlbWVudE1hcDsKICAgICBTdXBwbGVtZW50TWFwIG1f
c3VwcGxlbWVudHM7CisgICAgTXV0ZXggbV9zdXBwbGVtZW50c0xvY2s7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5jcHAJKHJldmlzaW9uIDE0MDQxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBw
cml2YXRlOgogCiBJbnRlcm5hbFNldHRpbmdzKiBJbnRlcm5hbFNldHRpbmdzOjpmcm9tKFBhZ2Uq
IHBhZ2UpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgi
SW50ZXJuYWxTZXR0aW5ncyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkludGVybmFs
U2V0dGluZ3MiKSk7CiAgICAgaWYgKCFTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIG5hbWUp
KQogICAgICAgICBTdXBwbGVtZW50PFBhZ2U+Ojpwcm92aWRlVG8ocGFnZSwgbmFtZSwgYWRvcHRQ
dHIobmV3IEludGVybmFsU2V0dGluZ3NXcmFwcGVyKHBhZ2UpKSk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEludGVybmFsU2V0dGluZ3NXcmFwcGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShw
YWdlLCBuYW1lKSktPmludGVybmFsU2V0dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0NvbnRleHRGZWF0dXJlc0NsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRGZWF0dXJlc0NsaWVudEltcGwuY3BwCShy
ZXZpc2lvbiAxNDA0MTIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0RmVh
dHVyZXNDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGJvb2wgbV9kZWZhdWx0VmFsdWU7IC8vIE5lZWRzIHRvIGJlIHRyYWtlZCBh
cyBhIHBhcnQgb2YgdGhlIHNpZ25hdHVyZSBzaW5jZSBpdCBjYW4gYmUgY2hhbmdlZCBkeW5hbWlj
YWxseS4KICAgICB9OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVu
dE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgTGl0ZXJhbENTdHJpbmcmIHN1cHBsZW1lbnROYW1l
KCk7CiAgICAgc3RhdGljIENvbnRleHRGZWF0dXJlc0NhY2hlKiBmcm9tKERvY3VtZW50Kik7CiAK
ICAgICBFbnRyeSYgZW50cnlGb3IoQ29udGV4dEZlYXR1cmVzOjpGZWF0dXJlVHlwZSB0eXBlKQpA
QCAtOTQsOSArOTQsOSBAQCBwcml2YXRlOgogICAgIEVudHJ5IG1fZW50cmllc1tDb250ZXh0RmVh
dHVyZXM6OkZlYXR1cmVUeXBlU2l6ZV07CiB9OwogCi1jb25zdCBBdG9taWNTdHJpbmcmIENvbnRl
eHRGZWF0dXJlc0NhY2hlOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBMaXRlcmFsQ1N0cmluZyYg
Q29udGV4dEZlYXR1cmVzQ2FjaGU6OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJDb250ZXh0RmVhdHVyZXNDYWNoZSIpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExpdGVyYWxDU3RyaW5nLCBuYW1lLCAoIkNvbnRleHRG
ZWF0dXJlc0NhY2hlIikpOwogICAgIHJldHVybiBuYW1lOwogfQogCg==
</data>
<flag name="review"
          id="202620"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="202544"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184116</attachid>
            <date>2013-01-22 20:12:15 -0800</date>
            <delta_ts>2013-01-22 21:05:23 -0800</delta_ts>
            <desc>The patch with fixes.</desc>
            <filename>bug-107535.patch</filename>
            <type>text/plain</type>
            <size>56079</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBAQAorMjAxMy0wMS0yMiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHRoZSBTdXBwbGVtZW50
YWJsZSBjbGFzcyB0byBub3QgdXNlIEF0b21pY1N0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzUzNS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBN
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2Jh
dHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKEJhdHRlcnlDb250cm9sbGVyKToK
KyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5OjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6OmZyb20pOgorICAg
ICAgICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5Lmg6CisgICAgICAgIChOYXZp
Z2F0b3JCYXR0ZXJ5KToKKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJh
Z2dlZElzb2xhdGVkRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnZ2VkSXNv
bGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICogTW9kdWxlcy9maWxl
c3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKERy
YWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9OYXZp
Z2F0b3JHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OnN1
cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2
aWdhdG9yR2FtZXBhZDo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRv
ckdhbWVwYWQuaDoKKyAgICAgICAgKE5hdmlnYXRvckdhbWVwYWQpOgorICAgICAgICAqIE1vZHVs
ZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAqIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgIChHZW9s
b2NhdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdh
dG9yR2VvbG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2VvbG9jYXRp
b246OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yR2VvbG9jYXRpb246OmZyb20pOgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9j
YXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaDoKKyAgICAgICAgKE5hdmlnYXRvckdlb2xvY2F0
aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjpzdXBw
bGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZTo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmg6CisgICAgICAgIChET01XaW5kb3dJbmRleGVkRGF0
YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRh
YmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2U6OnN1
cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaDoKKyAgICAgICAgKFBhZ2VHcm91cEluZGV4ZWRE
YXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4
ZWREYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0SW5kZXhlZERh
dGFiYXNlOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2U6OmZyb20pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaDoKKyAgICAgICAg
KFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50
cy9ET01XaW5kb3dJbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd0ludGVu
dHM6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93SW50ZW50czo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0RP
TVdpbmRvd0ludGVudHMuaDoKKyAgICAgICAgKERPTVdpbmRvd0ludGVudHMpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyTWVkaWFDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmg6CisgICAgICAgIChVc2Vy
TWVkaWFDb250cm9sbGVyKToKKyAgICAgICAgKiBNb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGls
cy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9y
Q29udGVudFV0aWxzOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICogTW9kdWxlcy9uYXZpZ2F0
b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmg6CisgICAgICAgIChOYXZpZ2F0
b3JDb250ZW50VXRpbHMpOgorICAgICAgICAqIE1vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9y
TmV0d29ya0luZm9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvck5l
dHdvcmtJbmZvQ29ubmVjdGlvbjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb246OmZyb20p
OgorICAgICAgICAqIE1vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29ya0luZm9Db25u
ZWN0aW9uLmg6CisgICAgICAgIChOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24pOgorICAg
ICAgICAqIE1vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtJbmZvQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgor
ICAgICAgICAqIE1vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmg6Cisg
ICAgICAgIChOZXR3b3JrSW5mb0NvbnRyb2xsZXIpOgorICAgICAgICAqIE1vZHVsZXMvbm90aWZp
Y2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdpbmRvd05vdGlmaWNhdGlvbnM6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Tm90aWZpY2F0aW9uczo6ZnJvbSk6CisgICAg
ICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL0RPTVdpbmRvd05vdGlmaWNhdGlvbnMuaDoKKyAg
ICAgICAgKERPTVdpbmRvd05vdGlmaWNhdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvbm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvbkNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVz
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoTm90aWZp
Y2F0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtl
ckNvbnRleHROb3RpZmljYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRl
eHROb3RpZmljYXRpb25zOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHROb3RpZmljYXRpb25zOjpmcm9tKToKKyAgICAg
ICAgKiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMuaDoK
KyAgICAgICAgKFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKToKKyAgICAgICAgKiBNb2R1bGVz
L3F1b3RhL0RPTVdpbmRvd1F1b3RhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd1F1
b3RhOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVdpbmRvd1F1b3RhOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL3F1b3RhL0RPTVdp
bmRvd1F1b3RhLmg6CisgICAgICAgIChET01XaW5kb3dRdW90YSk6CisgICAgICAgICogTW9kdWxl
cy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dTcGVlY2hTeW50aGVzaXM6OmZyb20p
OgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oOgor
ICAgICAgICAoRE9NV2luZG93U3BlZWNoU3ludGhlc2lzKToKKyAgICAgICAgKiBNb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICog
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmg6CisgICAgICAgIChT
cGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIE1vZHVsZXMvdmlicmF0aW9u
L1ZpYnJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWJyYXRpb246OnN1cHBsZW1lbnRO
YW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaDoKKyAgICAgICAg
KFZpYnJhdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0OjpzdXBwbGVtZW50TmFt
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4
dDo6ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQ29udGV4dDo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNvbnRleHQuaDoKKyAgICAgICAgKERhdGFiYXNlQ29udGV4dCk6CisgICAgICAgICogZG9tL0Nv
bnRleHRGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0RmVhdHVyZXM6OnN1
cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBkb20vQ29udGV4dEZlYXR1cmVzLmg6CisgICAgICAg
ICogZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGV2
aWNlTW90aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAqIGRvbS9EZXZp
Y2VNb3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChEZXZpY2VNb3Rpb25Db250cm9sbGVyKToK
KyAgICAgICAgKiBkb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgor
ICAgICAgICAqIGRvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKERl
dmljZU9yaWVudGF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogbG9hZGVyL1ByZXJlbmRlcmVy
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByZXJlbmRlcmVyQ2xpZW50OjpzdXBwbGVt
ZW50TmFtZSk6CisgICAgICAgICogbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50Lmg6CisgICAgICAg
IChQcmVyZW5kZXJlckNsaWVudCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93UGFnZVBvcHVwOjpzdXBwbGVtZW50TmFt
ZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAuaDoKKyAgICAgICAgKERPTVdp
bmRvd1BhZ2VQb3B1cCk6CisgICAgICAgICogcGxhdGZvcm0vUmVmQ291bnRlZFN1cHBsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRTdXBwbGVtZW50Ojpwcm92aWRlVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZFN1cHBsZW1lbnQ6OmZyb20pOgorICAgICAgICAq
IHBsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdXBwbGVtZW50
Ojpwcm92aWRlVG8pOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVudDo6ZnJvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdXBwbGVtZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3VwcGxlbWVudGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3VwcGxlbWVudGFibGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKFN1
cHBsZW1lbnRhYmxlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6c3VwcGxlbWVudE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjpmcm9t
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKEludGVy
bmFsU2V0dGluZ3MpOgorCiAyMDEzLTAxLTIyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgVXNlIGEgcGxhdGZvcm0gc3RyYXRlZ3kgZm9yIGxvY2FsIHN0
b3JhZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksMTAgKzg5LDkgQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeQog
ICAgICAgICAoKml0KS0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1l
KCkKK2NvbnN0IGNoYXIqIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRy
b2xsZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJu
IG5hbWU7CisgICAgcmV0dXJuICJCYXR0ZXJ5Q29udHJvbGxlciI7CiB9CiAKIGJvb2wgQmF0dGVy
eUNvbnRyb2xsZXI6OmlzQWN0aXZlKFBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgQmF0dGVy
eUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIEJhdHRlcnlDb250cm9sbGVyKiBm
cm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJhdHRlcnlDb250cm9sbGVyKj4o
U3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KICAgICBz
dGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAJKHJldmlzaW9uIDE0MDQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTMgKzQ4LDE3IEBAIEJhdHRlcnlNYW5hZ2VyKiBOYXZp
Z2F0b3JCYXR0ZXJ5Ojp3ZWJraXQKICAgICByZXR1cm4gbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0
ZXJ5TWFuYWdlci5nZXQoKTsKIH0KIAorY29uc3QgY2hhciogTmF2aWdhdG9yQmF0dGVyeTo6c3Vw
cGxlbWVudE5hbWUoKQoreworICAgIHJldHVybiAiTmF2aWdhdG9yQmF0dGVyeSI7Cit9CisKIE5h
dmlnYXRvckJhdHRlcnkqIE5hdmlnYXRvckJhdHRlcnk6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0
b3IpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2
aWdhdG9yQmF0dGVyeSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAg
ICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0
dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKKyAg
ICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0
dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIHN1cHBsZW1lbnRO
YW1lKCkpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5l
dyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7Ci0gICAgICAgIHByb3ZpZGVUbyhuYXZpZ2F0b3IsIG5hbWUs
IGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgc3Vw
cGxlbWVudE5hbWUoKSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwogICAgIH0KICAgICByZXR1cm4g
c3VwcGxlbWVudDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0
ZXJ5L05hdmlnYXRvckJhdHRlcnkuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQCBwdWJsaWM6CiAKICBwcml2YXRlOgogICAgIE5hdmlnYXRvckJhdHRlcnko
KTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFJlZlB0
cjxCYXR0ZXJ5TWFuYWdlcj4gbV9iYXR0ZXJ5TWFuYWdlcjsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3Rl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2No
cm9taXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDA0OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xh
dGVkRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDExICs1NiwxMCBAQCBET01G
aWxlU3lzdGVtKiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtCiB9CiAKIC8vIHN0YXRpYwotY29u
c3QgQXRvbWljU3RyaW5nJiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFt
ZSgpCitjb25zdCBjaGFyKiBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFt
ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAg
IHJldHVybiAiRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbSI7CiB9CiAKIERyYWdnZWRJc29sYXRl
ZEZpbGVTeXN0ZW06OkRyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBmaWxl
c3lzdGVtSWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21p
dW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVt
LmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTU0LDcgKzUzLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgZmlsZXN5c3RlbUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxlc3lzdGVtSWQ7IH0KICAgICBET01GaWxlU3lzdGVtKiBnZXRE
T01GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAotICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0q
IGZyb20oQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtKj4oU3VwcGxlbWVudDxDaHJvbWl1bURhdGFPYmpl
Y3Q+Ojpmcm9tKGRhdGFPYmplY3QsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JH
YW1lcGFkLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMs
MTcgQEAgTmF2aWdhdG9yR2FtZXBhZDo6fk5hdmlnYXRvckdhbWVwYWQoKQogewogfQogCitjb25z
dCBjaGFyKiBOYXZpZ2F0b3JHYW1lcGFkOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJu
ICJOYXZpZ2F0b3JHYW1lcGFkIjsKK30KKwogTmF2aWdhdG9yR2FtZXBhZCogTmF2aWdhdG9yR2Ft
ZXBhZDo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JHYW1lcGFkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1l
bnQgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+
Ojpmcm9tKG5hdmlnYXRvciwgbmFtZSkpOworICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1l
bnQgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+
Ojpmcm9tKG5hdmlnYXRvciwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVu
dCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IE5hdmlnYXRvckdhbWVwYWQoKTsKLSAgICAg
ICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAg
ICAgICBwcm92aWRlVG8obmF2aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBw
bGVtZW50KSk7CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oCShyZXZp
c2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9y
R2FtZXBhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBOYXZpZ2F0b3JHYW1lcGFkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1
cHBsZW1lbnROYW1lKCk7CiAKICAgICBSZWZQdHI8R2FtZXBhZExpc3Q+IG1fZ2FtZXBhZHM7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTAgKzEzMiw5IEBAIEdlb2xvY2F0aW9uUG9zaXRpb24q
IEdlb2xvY2F0aW9uQ29udHJvbGwKICAgICByZXR1cm4gbV9jbGllbnQtPmxhc3RQb3NpdGlvbigp
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxl
bWVudE5hbWUoKQorY29uc3QgY2hhciogR2VvbG9jYXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50
TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgi
R2VvbG9jYXRpb25Db250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiR2VvbG9jYXRpb25Db250cm9sbGVy
IjsKIH0KIAogdm9pZCBwcm92aWRlR2VvbG9jYXRpb25UbyhQYWdlKiBwYWdlLCBHZW9sb2NhdGlv
bkNsaWVudCogY2xpZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAg
IEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgR2VvbG9jYXRpb25Db250
cm9sbGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9u
Q29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUo
KSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL05hdmlnYXRvckdlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24g
MTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JH
ZW9sb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0MiwxNyBAQCBOYXZpZ2F0
b3JHZW9sb2NhdGlvbjo6fk5hdmlnYXRvckdlb2xvY2F0CiB7CiB9CiAKK2NvbnN0IGNoYXIqIE5h
dmlnYXRvckdlb2xvY2F0aW9uOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJOYXZp
Z2F0b3JHZW9sb2NhdGlvbiI7Cit9CisKIE5hdmlnYXRvckdlb2xvY2F0aW9uKiBOYXZpZ2F0b3JH
ZW9sb2NhdGlvbjo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JHZW9sb2NhdGlvbiIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBOYXZpZ2F0b3JHZW9sb2Nh
dGlvbiogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvckdlb2xvY2F0aW9uKj4oU3Vw
cGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwgbmFtZSkpOworICAgIE5hdmlnYXRv
ckdlb2xvY2F0aW9uKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yR2VvbG9jYXRp
b24qPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20obmF2aWdhdG9yLCBzdXBwbGVtZW50TmFt
ZSgpKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcg
TmF2aWdhdG9yR2VvbG9jYXRpb24obmF2aWdhdG9yLT5mcmFtZSgpKTsKLSAgICAgICAgcHJvdmlk
ZVRvKG5hdmlnYXRvciwgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgICAgICBwcm92
aWRlVG8obmF2aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7
CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24u
aAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBOYXZpZ2F0b3JHZW9sb2NhdGlvbihGcmFtZSopOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCiAgICAgbXV0YWJsZSBS
ZWZQdHI8R2VvbG9jYXRpb24+IG1fZ2VvbG9jYXRpb247CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NywxMyArNDcsMTcgQEAgRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjp+RE9NV2luZG93SW5k
ZQogewogfQogCitjb25zdCBjaGFyKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OnN1cHBsZW1l
bnROYW1lKCkKK3sKKyAgICByZXR1cm4gIkRPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSI7Cit9CisK
IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjpmcm9t
KERPTVdpbmRvdyogd2luZG93KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBuYW1lLCAoIkRPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UqIHN1cHBs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dJbmRleGVkRGF0YWJhc2UqPihTdXBwbGVtZW50
PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7CisgICAgRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8RE9NV2luZG93SW5kZXhlZERhdGFiYXNl
Kj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSkp
OwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZSh3aW5kb3cpOwotICAgICAgICBwcm92aWRlVG8od2luZG93LCBu
YW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1
cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJu
IHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9E
T01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhl
ZERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UoRE9NV2luZG93Kik7CiAKICAgICBJ
REJGYWN0b3J5KiBpbmRleGVkREIoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVu
dE5hbWUoKTsKIAogICAgIERPTVdpbmRvdyogbV93aW5kb3c7CiAgICAgUmVmUHRyPElEQkZhY3Rv
cnk+IG1faWRiRmFjdG9yeTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L1BhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkocmV2aXNp
b24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3Vw
SW5kZXhlZERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE3IEBAIFBh
Z2VHcm91cEluZGV4ZWREYXRhYmFzZTo6flBhZ2VHcm91cEluZGUKIHsKIH0KIAorY29uc3QgY2hh
ciogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0
dXJuICJQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UiOworfQorCiBQYWdlR3JvdXBJbmRleGVkRGF0
YWJhc2UqIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZTo6ZnJvbShQYWdlR3JvdXAmIGdyb3VwKQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIlBhZ2VHcm91
cEluZGV4ZWREYXRhYmFzZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LSAgICBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxQ
YWdlR3JvdXBJbmRleGVkRGF0YWJhc2UqPihTdXBwbGVtZW50PFBhZ2VHcm91cD46OmZyb20oJmdy
b3VwLCBuYW1lKSk7CisgICAgUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlKiBzdXBwbGVtZW50ID0g
c3RhdGljX2Nhc3Q8UGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlKj4oU3VwcGxlbWVudDxQYWdlR3Jv
dXA+Ojpmcm9tKCZncm91cCwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVu
dCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSgp
OwotICAgICAgICBwcm92aWRlVG8oJmdyb3VwLCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7
CisgICAgICAgIHByb3ZpZGVUbygmZ3JvdXAsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1
cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFBhZ2VHcm91cEluZGV4
ZWREYXRhYmFzZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwog
CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3RvcnlCYWNrZW5k
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRl
eHRJbmRleGVkRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAx
NDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0
SW5kZXhlZERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDE3IEBAIFdv
cmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2U6On5Xb3JrZXJDb24KIHsKIH0KIAorY29uc3QgY2hh
ciogV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZTo6c3VwcGxlbWVudE5hbWUoKQoreworICAg
IHJldHVybiAiV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZSI7Cit9CisKIFdvcmtlckNvbnRl
eHRJbmRleGVkRGF0YWJhc2UqIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2U6OmZyb20oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBBdG9taWNTdHJpbmcgbmFtZSA9
ICJXb3JrZGVyQ29udGV4dEluZGV4ZWREYXRhYmFzZSI7Ci0gICAgV29ya2VyQ29udGV4dEluZGV4
ZWREYXRhYmFzZSogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHRJbmRleGVk
RGF0YWJhc2UqPihTdXBwbGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRl
eHQsIG5hbWUpKTsKKyAgICBXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlKiBzdXBwbGVtZW50
ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkp
OwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtl
ckNvbnRleHRJbmRleGVkRGF0YWJhc2UoY29udGV4dCk7Ci0gICAgICAgIHByb3ZpZGVUbyhjb250
ZXh0LCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyhjb250
ZXh0LCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CiAgICAgfQogICAg
IHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2Uu
aAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
V29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBJREJGYWN0b3J5KiBpbmRleGVkREIo
KTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U+IG1fZmFjdG9yeUJhY2tlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0RPTVdpbmRvd0ludGVudHMuY3BwCShyZXZpc2lvbiAxNDA0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxOCBAQCBET01XaW5kb3dJbnRlbnRzOjp+
RE9NV2luZG93SW50ZW50cygpCiB7CiB9CiAKK2NvbnN0IGNoYXIqIERPTVdpbmRvd0ludGVudHM6
OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIkRPTVdpbmRvd0ludGVudHMiOworfQor
CiBET01XaW5kb3dJbnRlbnRzKiBET01XaW5kb3dJbnRlbnRzOjpmcm9tKERPTVdpbmRvdyogd2lu
ZG93KQogewogICAgIEFTU0VSVCh3aW5kb3cpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRvd0ludGVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgRE9NV2luZG93SW50ZW50cyogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PERPTVdpbmRvd0ludGVudHMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20o
d2luZG93LCBuYW1lKSk7CisgICAgRE9NV2luZG93SW50ZW50cyogc3VwcGxlbWVudCA9IHN0YXRp
Y19jYXN0PERPTVdpbmRvd0ludGVudHMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2lu
ZG93LCBzdXBwbGVtZW50TmFtZSgpKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAg
IHN1cHBsZW1lbnQgPSBuZXcgRE9NV2luZG93SW50ZW50cyh3aW5kb3cpOwotICAgICAgICBwcm92
aWRlVG8od2luZG93LCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3Zp
ZGVUbyh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRzLmgJKHJldmlzaW9uIDE0MDQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBET01X
aW5kb3dJbnRlbnRzKERPTVdpbmRvdyopOwogCiAgICAgRGVsaXZlcmVkSW50ZW50KiB3ZWJraXRJ
bnRlbnQoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAg
IFJlZlB0cjxEZWxpdmVyZWRJbnRlbnQ+IG1faW50ZW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAg
KzI5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBBdG9taWNTdHJpbmcmIFVz
ZXJNZWRpYUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIFVzZXJNZWRp
YUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgbmFtZSwgKCJVc2VyTWVkaWFDb250cm9sbGVyIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAi
VXNlck1lZGlhQ29udHJvbGxlciI7CiB9CiAKIFVzZXJNZWRpYUNvbnRyb2xsZXI6OlVzZXJNZWRp
YUNvbnRyb2xsZXIoVXNlck1lZGlhQ2xpZW50KiBjbGllbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2FuY2VsVXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0
Kik7CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxVc2VyTWVkaWFDb250cm9sbGVyPiBjcmVhdGUo
VXNlck1lZGlhQ2xpZW50Kik7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxl
bWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAg
ICBzdGF0aWMgVXNlck1lZGlhQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxVc2VyTWVkaWFDb250cm9sbGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShw
YWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRl
bnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250
ZW50VXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTAgKzIwMSw5IEBAIHZvaWQgTmF2
aWdhdG9yQ29udGVudFV0aWxzOjp1bnJlZ2lzdGVyUHIKIH0KICNlbmRpZgogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6c3VwcGxlbWVudE5hbWUoKQorY29uc3Qg
Y2hhciogTmF2aWdhdG9yQ29udGVudFV0aWxzOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2aWdhdG9yQ29udGVudFV0
aWxzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBu
YW1lOworICAgIHJldHVybiAiTmF2aWdhdG9yQ29udGVudFV0aWxzIjsKIH0KIAogdm9pZCBwcm92
aWRlTmF2aWdhdG9yQ29udGVudFV0aWxzVG8oUGFnZSogcGFnZSwgTmF2aWdhdG9yQ29udGVudFV0
aWxzQ2xpZW50KiBjbGllbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRv
cmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50
VXRpbHMuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uYXZp
Z2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgTmF2aWdhdG9yQ29udGVudFV0aWxzIDogcHVibGljIFJl
ZgogcHVibGljOgogICAgIHZpcnR1YWwgfk5hdmlnYXRvckNvbnRlbnRVdGlscygpOwogCi0gICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgTmF2aWdhdG9yQ29udGVu
dFV0aWxzKiBmcm9tKFBhZ2UqKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xI
YW5kbGVyKE5hdmlnYXRvciosIGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2
aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5l
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMsMTcgQEAgTmF2aWdhdG9yTmV0
d29ya0luZm9Db25uZWN0aW9uOjp+TmF2aWdhdAogewogfQogCitjb25zdCBjaGFyKiBOYXZpZ2F0
b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb246OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4g
Ik5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbiI7Cit9CisKIE5hdmlnYXRvck5ldHdvcmtJ
bmZvQ29ubmVjdGlvbiogTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uOjpmcm9tKE5hdmln
YXRvciogbmF2aWdhdG9yKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIk5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbiIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rp
b24qIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rp
b24qPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20obmF2aWdhdG9yLCBuYW1lKSk7CisgICAg
TmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8
TmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpm
cm9tKG5hdmlnYXRvciwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkg
ewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlv
bigpOwotICAgICAgICBwcm92aWRlVG8obmF2aWdhdG9yLCBuYW1lLCBhZG9wdFB0cihzdXBwbGVt
ZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyhuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCksIGFk
b3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05hdmlnYXRvck5ldHdvcmtJ
bmZvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0
d29ya2luZm8vTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDE0MDQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29y
a0luZm9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbigpOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCiAgICAgUmVmUHRyPE5ldHdv
cmtJbmZvQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0
d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
MTAgKzc5LDkgQEAgdm9pZCBOZXR3b3JrSW5mb0NvbnRyb2xsZXI6OmRpZENoYW5nZU5ldAogICAg
ICAgICAgKCppdCktPmRpZENoYW5nZU5ldHdvcmtJbmZvcm1hdGlvbihldmVudCwgbmV0d29ya0lu
Zm9ybWF0aW9uKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBOZXR3b3JrSW5mb0NvbnRyb2xs
ZXI6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6
c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIk5ldHdvcmtJbmZvQ29udHJvbGxlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICByZXR1cm4gIk5ldHdvcmtJbmZv
Q29udHJvbGxlciI7CiB9CiAKIHZvaWQgcHJvdmlkZU5ldHdvcmtJbmZvVG8oUGFnZSogcGFnZSwg
TmV0d29ya0luZm9DbGllbnQqIGNsaWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bmV0d29ya2luZm8vTmV0d29ya0luZm9Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRyb2xsZXIuaAkocmV2
aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3
b3JrSW5mb0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxOZXR3b3JrSW5mb0NvbnRyb2xsZXI+IGNyZWF0
ZShQYWdlKiwgTmV0d29ya0luZm9DbGllbnQqKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7CiAgICAgc3RhdGljIE5ldHdvcmtJbmZvQ29udHJvbGxlciogZnJvbShQYWdlKiBw
YWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxOZXR3b3JrSW5mb0NvbnRyb2xsZXIqPihTdXBwbGVt
ZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgCiAgICAgdm9p
ZCBhZGRMaXN0ZW5lcihOZXR3b3JrSW5mb0Nvbm5lY3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93
Tm90aWZpY2F0aW9ucy5jcHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMTMgKzQ3LDE3IEBAIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6On5ET01XaW5k
b3dOb3RpZmkKIHsKIH0KIAorY29uc3QgY2hhciogRE9NV2luZG93Tm90aWZpY2F0aW9uczo6c3Vw
cGxlbWVudE5hbWUoKQoreworICAgIHJldHVybiAiRE9NV2luZG93Tm90aWZpY2F0aW9ucyI7Cit9
CisKIERPTVdpbmRvd05vdGlmaWNhdGlvbnMqIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6OmZyb20o
RE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIHN1cHBsZW1lbnROYW1lLCAoIkRPTVdpbmRvd05vdGlmaWNhdGlvbnMiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgRE9NV2luZG93Tm90aWZpY2F0aW9ucyog
c3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd05vdGlmaWNhdGlvbnMqPihTdXBwbGVt
ZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBzdXBwbGVtZW50TmFtZSkpOworICAgIERPTVdp
bmRvd05vdGlmaWNhdGlvbnMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dOb3Rp
ZmljYXRpb25zKj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgc3VwcGxlbWVu
dE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0g
bmV3IERPTVdpbmRvd05vdGlmaWNhdGlvbnMod2luZG93KTsKLSAgICAgICAgU3VwcGxlbWVudDxE
T01XaW5kb3c+Ojpwcm92aWRlVG8od2luZG93LCBzdXBwbGVtZW50TmFtZSwgYWRvcHRQdHIoc3Vw
cGxlbWVudCkpOworICAgICAgICBTdXBwbGVtZW50PERPTVdpbmRvdz46OnByb3ZpZGVUbyh3aW5k
b3csIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAg
cmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlm
aWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmgJKHJl
dmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9E
T01XaW5kb3dOb3RpZmljYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAg
cHJpdmF0ZToKICAgICBleHBsaWNpdCBET01XaW5kb3dOb3RpZmljYXRpb25zKERPTVdpbmRvdyop
OwogCiAgICAgTm90aWZpY2F0aW9uQ2VudGVyKiB3ZWJraXROb3RpZmljYXRpb25zKCk7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKICAgICBET01XaW5kb3cqIG1f
d2luZG93OwogICAgIFJlZlB0cjxOb3RpZmljYXRpb25DZW50ZXI+IG1fbm90aWZpY2F0aW9uQ2Vu
dGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDk5
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsOSBAQCBOb3RpZmljYXRp
b25DbGllbnQqIE5vdGlmaWNhdGlvbkNvbnRyb2xsCiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgTm90aWZpY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQor
Y29uc3QgY2hhciogTm90aWZpY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5vdGlmaWNhdGlv
bkNvbnRyb2xsZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
cmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJOb3RpZmljYXRpb25Db250cm9sbGVyIjsKIH0KIAog
dm9pZCBwcm92aWRlTm90aWZpY2F0aW9uKFBhZ2UqIHBhZ2UsIE5vdGlmaWNhdGlvbkNsaWVudCog
Y2xpZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlm
aWNhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0OTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+
Tm90aWZpY2F0aW9uQ29udHJvbGxlcigpOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Tm90aWZp
Y2F0aW9uQ29udHJvbGxlcj4gY3JlYXRlKE5vdGlmaWNhdGlvbkNsaWVudCopOwotICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIE5vdGlmaWNhdGlvbkNvbnRyb2xs
ZXIqIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm90aWZpY2F0aW9uQ29u
dHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUoKSkp
OyB9CiAgICAgc3RhdGljIE5vdGlmaWNhdGlvbkNsaWVudCogY2xpZW50RnJvbShQYWdlKik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Xb3JrZXJDb250ZXh0
Tm90aWZpY2F0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
b3RpZmljYXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmNwcAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNvbnRl
eHROb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDE3IEBAIFdv
cmtlckNvbnRleHROb3RpZmljYXRpb25zOjp+V29ya2VyQ29udGUKIHsKIH0KIAorY29uc3QgY2hh
ciogV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnM6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICBy
ZXR1cm4gIldvcmtlckNvbnRleHROb3RpZmljYXRpb25zIjsKK30KKwogV29ya2VyQ29udGV4dE5v
dGlmaWNhdGlvbnMqIFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zOjpmcm9tKFdvcmtlckNvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN1
cHBsZW1lbnROYW1lLCAoIldvcmtlckNvbnRleHROb3RpZmljYXRpb25zIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIFdvcmtlckNvbnRleHROb3RpZmljYXRpb25z
KiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMqPihT
dXBwbGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRleHQsIHN1cHBsZW1l
bnROYW1lKSk7CisgICAgV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMqIHN1cHBsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucyo+KFN1cHBsZW1lbnQ8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD46OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAg
IGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtlckNvbnRl
eHROb3RpZmljYXRpb25zKGNvbnRleHQpOwotICAgICAgICBTdXBwbGVtZW50PFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+Ojpwcm92aWRlVG8oY29udGV4dCwgc3VwcGxlbWVudE5hbWUsIGFkb3B0UHRy
KHN1cHBsZW1lbnQpKTsKKyAgICAgICAgU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
Pjo6cHJvdmlkZVRvKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1l
bnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvV29ya2Vy
Q29udGV4dE5vdGlmaWNhdGlvbnMuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3Jr
ZXJDb250ZXh0Tm90aWZpY2F0aW9ucyhXb3JrZXJDb250ZXh0Kik7CiAKICAgICBOb3RpZmljYXRp
b25DZW50ZXIqIHdlYmtpdE5vdGlmaWNhdGlvbnMoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFdvcmtlckNvbnRleHQqIG1fY29udGV4dDsKICAgICBS
ZWZQdHI8Tm90aWZpY2F0aW9uQ2VudGVyPiBtX25vdGlmaWNhdGlvbkNlbnRlcjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCShyZXZp
c2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL0RPTVdpbmRvd1F1
b3RhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDE4IEBAIERPTVdpbmRvd1F1b3Rh
Ojp+RE9NV2luZG93UXVvdGEoKQogfQogCiAvLyBzdGF0aWMKK2NvbnN0IGNoYXIqIERPTVdpbmRv
d1F1b3RhOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJET01XaW5kb3dRdW90YSI7
Cit9CisKKy8vIHN0YXRpYwogRE9NV2luZG93UXVvdGEqIERPTVdpbmRvd1F1b3RhOjpmcm9tKERP
TVdpbmRvdyogd2luZG93KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIkRPTVdpbmRvd1F1b3RhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOwotICAgIERPTVdpbmRvd1F1b3RhKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8RE9N
V2luZG93UXVvdGEqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7
CisgICAgRE9NV2luZG93UXVvdGEqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dR
dW90YSo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1lbnROYW1l
KCkpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBE
T01XaW5kb3dRdW90YSh3aW5kb3cpOwotICAgICAgICBwcm92aWRlVG8od2luZG93LCBuYW1lLCBh
ZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1l
bnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBs
ZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL0RPTVdpbmRvd1F1
b3RhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9xdW90YS9ET01XaW5k
b3dRdW90YS5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1
b3RhL0RPTVdpbmRvd1F1b3RhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERPTVdpbmRvd1F1b3RhKERPTVdpbmRvdyop
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOworCiAgICAgbXV0YWJs
ZSBSZWZQdHI8U3RvcmFnZUluZm8+IG1fc3RvcmFnZUluZm87CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5
bnRoZXNpcy5jcHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEzICs0OCwxOCBAQCBET01XaW5kb3dTcGVlY2hTeW50aGVzaXM6On5ET01XaW5kb3dTcGVlCiB9
CiAKIC8vIHN0YXRpYworY29uc3QgY2hhciogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzOjpzdXBw
bGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJET01XaW5kb3dTcGVlY2hTeW50aGVzaXMiOwor
fQorCisvLyBzdGF0aWMKIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyogRE9NV2luZG93U3BlZWNo
U3ludGhlc2lzOjpmcm9tKERPTVdpbmRvdyogd2luZG93KQogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBET01XaW5kb3dTcGVlY2hT
eW50aGVzaXMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7CisgICAgRE9N
V2luZG93U3BlZWNoU3ludGhlc2lzKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8RE9NV2luZG93
U3BlZWNoU3ludGhlc2lzKj4oU3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgdXBw
bGVtZW50TmFtZSgpKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1l
bnQgPSBuZXcgRE9NV2luZG93U3BlZWNoU3ludGhlc2lzKHdpbmRvdyk7Ci0gICAgICAgIHByb3Zp
ZGVUbyh3aW5kb3csIG5hbWUsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICAgICAgcHJvdmlk
ZVRvKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwogICAg
IH0KICAgICByZXR1cm4gc3VwcGxlbWVudDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCShyZXZp
c2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRl
OgogICAgIGV4cGxpY2l0IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyhET01XaW5kb3cqKTsKICAg
ICAKICAgICBTcGVlY2hTeW50aGVzaXMqIHNwZWVjaFN5bnRoZXNpcygpOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIAogICAgIFJlZlB0cjxTcGVlY2hTeW50
aGVzaXM+IG1fc3BlZWNoU3ludGhlc2lzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAg
KzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNw
ZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciog
U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiU3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJl
dHVybiBuYW1lOworICAgIHJldHVybiAiU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyIjsKIH0K
IAogU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xs
ZXIoU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIGNsaWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2du
aXRpb24pIHsgbV9jbGllbnQtPmFib3J0KHJlY29nbml0aW9uKTsgfQogCiAgICAgc3RhdGljIFBh
c3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyPiBjcmVhdGUoU3BlZWNoUmVjb2du
aXRpb25DbGllbnQqKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50
TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0
YXRpYyBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyKj4oU3VwcGxlbWVudDxQ
YWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmNwcAkocmV2
aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDEwICsxMjYsOSBAQCB2b2lkIFZpYnJhdGlv
bjo6dGltZXJTdG9wRmlyZWQoVGltZXI8VmliCiAgICAgfQogfQogCi1jb25zdCBBdG9taWNTdHJp
bmcmIFZpYnJhdGlvbjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogVmlicmF0aW9uOjpz
dXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG5hbWUsICgiVmlicmF0aW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiVmlicmF0aW9uIjsKIH0KIAogYm9vbCBW
aWJyYXRpb246OmlzQWN0aXZlKFBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmlicmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGltZXJTdGFydEZpcmVkKFRpbWVyPFZp
YnJhdGlvbj4qKTsKICAgICB2b2lkIHRpbWVyU3RvcEZpcmVkKFRpbWVyPFZpYnJhdGlvbj4qKTsK
IAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIFZpYnJhdGlv
biogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxWaWJyYXRpb24qPihTdXBw
bGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgIHN0YXRp
YyBib29sIGlzQWN0aXZlKFBhZ2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBEYXRhYmFzZUNvbnRleHQqIGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0
RnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorY29uc3QgY2hhciogRGF0YWJh
c2VDb250ZXh0OjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERh
dGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZyb20o
Y29udGV4dCwgIkRhdGFiYXNlQ29udGV4dCIpKTsKKyAgICByZXR1cm4gIkRhdGFiYXNlQ29udGV4
dCI7Cit9CisKK0RhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0OjpleGlzdGluZ0RhdGFi
YXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVj
dXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCBzdXBwbGVtZW50TmFtZSgpKSk7CiB9CiAKIERh
dGFiYXNlQ29udGV4dDo6RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCkBAIC02OCw3ICs3Myw3IEBAIERhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0
Ojpmcm9tKFMKICAgICBEYXRhYmFzZUNvbnRleHQqIHN1cHBsZW1lbnQgPSBleGlzdGluZ0RhdGFi
YXNlQ29udGV4dEZyb20oY29udGV4dCk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAg
IHN1cHBsZW1lbnQgPSBuZXcgRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBwcm92
aWRlVG8oY29udGV4dCwgIkRhdGFiYXNlQ29udGV4dCIsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsK
KyAgICAgICAgcHJvdmlkZVRvKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1
cHBsZW1lbnQpKTsKICAgICAgICAgQVNTRVJUKHN1cHBsZW1lbnQgPT0gZXhpc3RpbmdEYXRhYmFz
ZUNvbnRleHRGcm9tKGNvbnRleHQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VDb250ZXh0LmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERhdGFiYXNlQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7CisgICAgc3RhdGljIERhdGFiYXNlQ29udGV4dCogZXhpc3RpbmdEYXRhYmFzZUNv
bnRleHRGcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBSZWZQdHI8RGF0YWJhc2VU
aHJlYWQ+IG1fZGF0YWJhc2VUaHJlYWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4
dEZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZl
YXR1cmVzLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRl
eHRGZWF0dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSw5IEBAIENvbnRleHRG
ZWF0dXJlc0NsaWVudCogQ29udGV4dEZlYXR1cmVzQ2wKICAgICByZXR1cm4gJmVtcHR5OwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIENvbnRleHRGZWF0dXJlczo6c3VwcGxlbWVudE5hbWUoKQor
Y29uc3QgY2hhciogQ29udGV4dEZlYXR1cmVzOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQ29udGV4dEZlYXR1cmVzIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOwor
ICAgIHJldHVybiAiQ29udGV4dEZlYXR1cmVzIjsKIH0KIAogQ29udGV4dEZlYXR1cmVzKiBDb250
ZXh0RmVhdHVyZXM6OmRlZmF1bHRTd2l0Y2goKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRleHRGZWF0dXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250ZXh0
RmVhdHVyZXMuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRl
eHRGZWF0dXJlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgRmVhdHVyZVR5cGVTaXplIC8vIFNob3VsZCBiZSB0aGUgbGFzdCBlbnRyeS4KICAgICB9
OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgQ29udGV4
dEZlYXR1cmVzKiBkZWZhdWx0U3dpdGNoKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGV4
dEZlYXR1cmVzPiBjcmVhdGUoQ29udGV4dEZlYXR1cmVzQ2xpZW50Kik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0
MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDkgQEAgUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNl
TW90aW9uQ29udHJvbGxlcgogICAgIHJldHVybiBEZXZpY2VNb3Rpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCwgZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RN
b3Rpb24oKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRGV2aWNlTW90aW9uQ29udHJvbGxl
cjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6
c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoIkRldmljZU1vdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJEZXZpY2VNb3Rp
b25Db250cm9sbGVyIjsKIH0KIAogRGV2aWNlTW90aW9uQ29udHJvbGxlciogRGV2aWNlTW90aW9u
Q29udHJvbGxlcjo6ZnJvbShQYWdlKiBwYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rl
dmljZU1vdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RGV2aWNlTW90aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIE9WRVJSSURF
OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNl
TW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CiAgICAgc3RhdGljIGJvb2wgaXNBY3RpdmVB
dChQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjgsMTAgKzY4LDkgQEAgUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlT3JpZW50YXRpb25Db250cgog
ICAgIHJldHVybiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRl
dmljZW9yaWVudGF0aW9uRXZlbnQsIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmll
bnRhdGlvbigpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBEZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBuYW1lLCAoIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICBy
ZXR1cm4gIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciI7CiB9CiAKIERldmljZU9yaWVudGF0
aW9uQ29udHJvbGxlciogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpmcm9tKFBhZ2UqIHBh
Z2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlci5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgT1ZFUlJJREU7CiAKLSAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIqIGZyb20oUGFnZSopOwogICAgIHN0YXRpYyBib29sIGlzQWN0aXZlQXQoUGFn
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJlcmVuZGVyZXJDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlckNsaWVudC5j
cHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJl
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE3ICszNCwxNSBAQAogCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1jb25zdCBBdG9taWNTdHJpbmcmIFByZXJlbmRl
cmVyQ2xpZW50OjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBjaGFyKiBQcmVyZW5kZXJlckNsaWVu
dDo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBuYW1lLCAoIlByZXJlbmRlcmVyQ2xpZW50IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiUHJlcmVuZGVyZXJD
bGllbnQiOwogfQogCiAvLyBzdGF0aWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVy
ZW5kZXJlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVy
ZW5kZXJlckNsaWVudC5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUHJlcmVuZGVyZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEFkZFByZXJlbmRlcihQcmVyZW5kZXJIYW5k
bGUqKSA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFt
ZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRp
YyBQcmVyZW5kZXJlckNsaWVudCogZnJvbShQYWdlKik7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UGFnZVBvcHVwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5jcHAJKHJldmlzaW9uIDE0MDQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UGFnZVBvcHVwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDkgQEAgRE9NV2luZG93UGFnZVBvcHVwOjp+RE9NV2luZG93
UGFnZVBvcHVwKAogICAgIG1fY29udHJvbGxlci0+Y2xlYXJQYWdlUG9wdXBDbGllbnQoKTsKIH0K
IAotY29uc3QgQXRvbWljU3RyaW5nJiBET01XaW5kb3dQYWdlUG9wdXA6OnN1cHBsZW1lbnROYW1l
KCkKK2NvbnN0IGNoYXIqIERPTVdpbmRvd1BhZ2VQb3B1cDo6c3VwcGxlbWVudE5hbWUoKQogewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRvd1Bh
Z2VQb3B1cCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1
cm4gbmFtZTsKKyAgICByZXR1cm4gIkRPTVdpbmRvd1BhZ2VQb3B1cCI7CiB9CiAKIFBhZ2VQb3B1
cENvbnRyb2xsZXIqIERPTVdpbmRvd1BhZ2VQb3B1cDo6cGFnZVBvcHVwQ29udHJvbGxlcihET01X
aW5kb3cqIHdpbmRvdykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UGFnZVBv
cHVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQYWdlUG9w
dXAuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQ
YWdlUG9wdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgRE9NV2luZG93UGFnZVBvcHVwKFBhZ2VQb3B1cENsaWVudCop
OwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKICAgICBSZWZQdHI8UGFnZVBv
cHVwQ29udHJvbGxlcj4gbV9jb250cm9sbGVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUmVmQ291bnRlZFN1cHBsZW1lbnQuaAkocmV2aXNpb24gMTQwNDk5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVmQ291bnRlZFN1cHBsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFRoaXNUeXBl
PiBtX3dyYXBwZWQ7CiAgICAgfTsKIAotICAgIHN0YXRpYyB2b2lkIHByb3ZpZGVUbyhTdXBwbGVt
ZW50YWJsZTxUPiogaG9zdCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8VGhp
c1R5cGU+IHN1cHBsZW1lbnQpCisgICAgc3RhdGljIHZvaWQgcHJvdmlkZVRvKFN1cHBsZW1lbnRh
YmxlPFQ+KiBob3N0LCBjb25zdCBjaGFyKiBrZXksIFBhc3NSZWZQdHI8VGhpc1R5cGU+IHN1cHBs
ZW1lbnQpCiAgICAgewogICAgICAgICBob3N0LT5wcm92aWRlU3VwcGxlbWVudChrZXksIGFkb3B0
UHRyKG5ldyBXcmFwcGVyKHN1cHBsZW1lbnQpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFRoaXNU
eXBlKiBmcm9tKFN1cHBsZW1lbnRhYmxlPFQ+KiBob3N0LCBjb25zdCBBdG9taWNTdHJpbmcmIGtl
eSkKKyAgICBzdGF0aWMgVGhpc1R5cGUqIGZyb20oU3VwcGxlbWVudGFibGU8VD4qIGhvc3QsIGNv
bnN0IGNoYXIqIGtleSkKICAgICB7CiAgICAgICAgIFN1cHBsZW1lbnQ8VD4qIGZvdW5kID0gaG9z
dC0+cmVxdWlyZVN1cHBsZW1lbnQoa2V5KTsKICAgICAgICAgaWYgKCFmb3VuZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAkocmV2aXNpb24gMTQwNDk5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTIgKzI3LDM4IEBACiAjZGVmaW5lIFN1cHBsZW1lbnRhYmxlX2gKIAogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKy8vIFdoYXQgeW91IHNob3VsZCBrbm93IGFib3V0IHRoZSBTdXBwbGVtZW50IGtleXMKKy8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRoZSBT
dXBwbGVtZW50IGlzIGV4cGVjdGVkIHRvIHVzZSB0aGUgc2FtZSBjb25zdCBjaGFyKiBzdHJpbmcg
aW5zdGFuY2UKKy8vIGFzIGl0cyBrZXkuIFRoZSBTdXBwbGVtZW50YWJsZSdzIFN1cHBsZW1lbnRN
YXAgd2lsbCB1c2UgdGhlIGFkZHJlc3Mgb2YgdGhlCisvLyBzdHJpbmcgYXMgdGhlIGtleSBhbmQg
bm90IHRoZSBjaGFyYWN0ZXJzIHRoZW1zZWx2ZXMuIEhlbmNlLCAyIHN0cmluZ3Mgd2l0aAorLy8g
dGhlIHNhbWUgY2hhcmFjdGVycyB3aWxsIGJlIHRyZWF0ZWQgYXMgMiBkaWZmZXJlbnQga2V5cy4K
Ky8vCisvLyBJbiBwcmFjdGljZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBTdXBwbGVtZW50cyBp
bXBsZW1lbnRzIGEgc3RhdGljIG1ldGhvZAorLy8gZm9yIHJldHVybmluZyBpdHMga2V5IHRvIHVz
ZS4gRm9yIGV4YW1wbGU6CisvLworLy8gICAgIGNsYXNzIE15Q2xhc3MgOiBwdWJsaWMgU3VwcGxl
bWVudDxNeVN1cHBsZW1lbnRhYmxlPiB7CisvLyAgICAgICAgIC4uLgorLy8gICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKKy8vICAgICB9CisvLworLy8gICAgIGNv
bnN0IGNoYXIqIE15Q2xhc3M6OnN1cHBsZW1lbnROYW1lKCkKKy8vICAgICB7CisvLyAgICAgICAg
IHJldHVybiAiTXlDbGFzcyI7CisvLyAgICAgfQorLy8KKy8vIEFuIGV4YW1wbGUgb2YgdGhlIHVz
aW5nIHRoZSBrZXk6CisvLworLy8gICAgIE15Q2xhc3MqIE15Q2xhc3M6OmZyb20oTXlTdXBwbGVt
ZW50YWJsZSogaG9zdCkKKy8vICAgICB7CisvLyAgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PE15Q2xhc3MqPihTdXBwbGVtZW50PE15U3VwcGxlbWVudGFibGU+Ojpmcm9tKGhvc3QsIHN1
cHBsZW1lbnROYW1lKCkpKTsKKy8vICAgICB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFz
cyBTdXBwbGVtZW50YWJsZTsKIApAQCAtNDQsMTIgKzcwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNSZWZDb3VudGVkV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIHByb3ZpZGVUbyhTdXBwbGVtZW50YWJsZTxUPiogaG9z
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIFBhc3NPd25QdHI8U3VwcGxlbWVudDxUPiA+IHN1
cHBsZW1lbnQpCisgICAgc3RhdGljIHZvaWQgcHJvdmlkZVRvKFN1cHBsZW1lbnRhYmxlPFQ+KiBo
b3N0LCBjb25zdCBjaGFyKiBrZXksIFBhc3NPd25QdHI8U3VwcGxlbWVudDxUPiA+IHN1cHBsZW1l
bnQpCiAgICAgewogICAgICAgICBob3N0LT5wcm92aWRlU3VwcGxlbWVudChrZXksIHN1cHBsZW1l
bnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdXBwbGVtZW50PFQ+KiBmcm9tKFN1cHBsZW1lbnRh
YmxlPFQ+KiBob3N0LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSkKKyAgICBzdGF0aWMgU3VwcGxl
bWVudDxUPiogZnJvbShTdXBwbGVtZW50YWJsZTxUPiogaG9zdCwgY29uc3QgY2hhcioga2V5KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGhvc3QgPyBob3N0LT5yZXF1aXJlU3VwcGxlbWVudChrZXkp
IDogMDsKICAgICB9CkBAIC01OCwyNCArODQsMjQgQEAgcHVibGljOgogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGNsYXNzIFN1cHBsZW1lbnRhYmxlIHsKIHB1YmxpYzoKLSAgICB2b2lkIHByb3ZpZGVT
dXBwbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBQYXNzT3duUHRyPFN1cHBsZW1lbnQ8
VD4gPiBzdXBwbGVtZW50KQorICAgIHZvaWQgcHJvdmlkZVN1cHBsZW1lbnQoY29uc3QgY2hhciog
a2V5LCBQYXNzT3duUHRyPFN1cHBsZW1lbnQ8VD4gPiBzdXBwbGVtZW50KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFtX3N1cHBsZW1lbnRzLmdldChrZXkuaW1wbCgpKSk7CisgICAgICAgIEFTU0VS
VCghbV9zdXBwbGVtZW50cy5nZXQoa2V5KSk7CiAgICAgICAgIG1fc3VwcGxlbWVudHMuc2V0KGtl
eSwgc3VwcGxlbWVudCk7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0
IEF0b21pY1N0cmluZyYga2V5KQorICAgIHZvaWQgcmVtb3ZlU3VwcGxlbWVudChjb25zdCBjaGFy
KiBrZXkpCiAgICAgewogICAgICAgICBtX3N1cHBsZW1lbnRzLnJlbW92ZShrZXkpOwogICAgIH0K
IAotICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYga2V5KQorICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNvbnN0IGNoYXIq
IGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N1cHBsZW1lbnRzLmdldChrZXkpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8
U3VwcGxlbWVudDxUPiA+ID4gU3VwcGxlbWVudE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgY2hhciosIE93blB0cjxTdXBwbGVtZW50PFQ+ID4sIFB0ckhhc2g8Y29uc3QgY2hhcio+ID4g
U3VwcGxlbWVudE1hcDsKICAgICBTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAJKHJldmlz
aW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMiArMTQ1LDE2IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPEludGVybmFsU2V0dGluZ3M+IG1faW50ZXJuYWxTZXR0aW5nczsKIH07CiAKK2NvbnN0IGNo
YXIqIEludGVybmFsU2V0dGluZ3M6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIklu
dGVybmFsU2V0dGluZ3MiOworfQorCiBJbnRlcm5hbFNldHRpbmdzKiBJbnRlcm5hbFNldHRpbmdz
Ojpmcm9tKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIG5hbWUsICgiSW50ZXJuYWxTZXR0aW5ncyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLSAgICBpZiAoIVN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgbmFtZSkp
Ci0gICAgICAgIFN1cHBsZW1lbnQ8UGFnZT46OnByb3ZpZGVUbyhwYWdlLCBuYW1lLCBhZG9wdFB0
cihuZXcgSW50ZXJuYWxTZXR0aW5nc1dyYXBwZXIocGFnZSkpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW50ZXJuYWxTZXR0aW5nc1dyYXBwZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBh
Z2UsIG5hbWUpKS0+aW50ZXJuYWxTZXR0aW5ncygpOworICAgIGlmICghU3VwcGxlbWVudDxQYWdl
Pjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSkKKyAgICAgICAgU3VwcGxlbWVudDxQYWdl
Pjo6cHJvdmlkZVRvKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKG5ldyBJbnRlcm5h
bFNldHRpbmdzV3JhcHBlcihwYWdlKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRlcm5h
bFNldHRpbmdzV3JhcHBlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVu
dE5hbWUoKSkpLT5pbnRlcm5hbFNldHRpbmdzKCk7CiB9CiAKIEludGVybmFsU2V0dGluZ3M6On5J
bnRlcm5hbFNldHRpbmdzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIHByaXZh
dGU6CiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdDsKICAgICBQYWdlKiBwYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgQmFja3VwIG1fYmFja3VwOwpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTMtMDEtMjIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIENo
YW5nZSB0aGUgU3VwcGxlbWVudGFibGUgY2xhc3MgdG8gbm90IHVzZSBBdG9taWNTdHJpbmcuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc1MzUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvQ29u
dGV4dEZlYXR1cmVzQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChDb250ZXh0RmVhdHVyZXNDYWNo
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRGZWF0dXJlc0NhY2hlOjpzdXBwbGVtZW50TmFt
ZSk6CisKIDIwMTMtMDEtMjIgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9ncmFjaWFAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIGRpZENvbW1pdENvbXBvc2l0
b3JGcmFtZSBpbiBXZWJXaWRnZXRDbGllbnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Db250ZXh0RmVhdHVyZXNDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0RmVhdHVyZXNDbGllbnRJbXBsLmNwcAkocmV2aXNp
b24gMTQwNDk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dEZlYXR1cmVz
Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgog
ICAgICAgICBib29sIG1fZGVmYXVsdFZhbHVlOyAvLyBOZWVkcyB0byBiZSB0cmFrZWQgYXMgYSBw
YXJ0IG9mIHRoZSBzaWduYXR1cmUgc2luY2UgaXQgY2FuIGJlIGNoYW5nZWQgZHluYW1pY2FsbHku
CiAgICAgfTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1l
KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGlj
IENvbnRleHRGZWF0dXJlc0NhY2hlKiBmcm9tKERvY3VtZW50Kik7CiAKICAgICBFbnRyeSYgZW50
cnlGb3IoQ29udGV4dEZlYXR1cmVzOjpGZWF0dXJlVHlwZSB0eXBlKQpAQCAtOTQsMTAgKzk0LDkg
QEAgcHJpdmF0ZToKICAgICBFbnRyeSBtX2VudHJpZXNbQ29udGV4dEZlYXR1cmVzOjpGZWF0dXJl
VHlwZVNpemVdOwogfTsKIAotY29uc3QgQXRvbWljU3RyaW5nJiBDb250ZXh0RmVhdHVyZXNDYWNo
ZTo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogQ29udGV4dEZlYXR1cmVzQ2FjaGU6OnN1
cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
bmFtZSwgKCJDb250ZXh0RmVhdHVyZXNDYWNoZSIpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICBy
ZXR1cm4gIkNvbnRleHRGZWF0dXJlc0NhY2hlIjsKIH0KIAogQ29udGV4dEZlYXR1cmVzQ2FjaGUq
IENvbnRleHRGZWF0dXJlc0NhY2hlOjpmcm9tKERvY3VtZW50KiBkb2N1bWVudCkK
</data>
<flag name="commit-queue"
          id="202736"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184127</attachid>
            <date>2013-01-22 21:05:23 -0800</date>
            <delta_ts>2013-01-22 22:32:11 -0800</delta_ts>
            <desc>The patch + one more fix.</desc>
            <filename>bug-107535.patch</filename>
            <type>text/plain</type>
            <size>57843</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDUwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAxMy0wMS0yMiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHRoZSBTdXBwbGVtZW50
YWJsZSBjbGFzcyB0byBub3QgdXNlIEF0b21pY1N0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzUzNS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlZCB0aGUgdXNlIG9mIEF0b21pY1N0
cmluZyBrZXlzIHdpdGggbGl0ZXJhbCBjb25zdCBjaGFyKiBrZXlzLgorICAgICAgICBUaGlzIHNp
bXBsaWZpZXMgdGhlIFN1cHBsZW1lbnRNYXAgYW5kIG1ha2VzIGl0IHNsaWdodGx5IGxlYW5lciBh
bmQgZmFzdGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMv
YmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5
Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5Q29udHJvbGxlci5oOgorICAgICAgICAoQmF0dGVyeUNvbnRyb2xsZXIpOgorICAgICAg
ICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRvckJhdHRlcnk6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6ZnJvbSk6CisgICAgICAgICog
TW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaDoKKyAgICAgICAgKE5hdmlnYXRvckJh
dHRlcnkpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNv
bGF0ZWRGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdnZWRJc29sYXRlZEZp
bGVTeXN0ZW06OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0v
Y2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5oOgorICAgICAgICAoRHJhZ2dlZElz
b2xhdGVkRmlsZVN5c3RlbSk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVu
dE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JH
YW1lcGFkOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5oOgorICAgICAgICAoTmF2aWdhdG9yR2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICogTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKEdlb2xvY2F0aW9u
Q29udHJvbGxlcik6CisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9s
b2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHZW9sb2NhdGlvbjo6c3Vw
cGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZp
Z2F0b3JHZW9sb2NhdGlvbjo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9O
YXZpZ2F0b3JHZW9sb2NhdGlvbi5oOgorICAgICAgICAoTmF2aWdhdG9yR2VvbG9jYXRpb24pOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OnN1cHBsZW1lbnRO
YW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5k
b3dJbmRleGVkRGF0YWJhc2UuaDoKKyAgICAgICAgKERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZTo6c3VwcGxlbWVu
dE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2U6OmZyb20pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VH
cm91cEluZGV4ZWREYXRhYmFzZS5oOgorICAgICAgICAoUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2U6
OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZTo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5oOgorICAgICAgICAoV29ya2Vy
Q29udGV4dEluZGV4ZWREYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0RPTVdp
bmRvd0ludGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93SW50ZW50czo6c3Vw
cGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01X
aW5kb3dJbnRlbnRzOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvRE9NV2luZG93
SW50ZW50cy5oOgorICAgICAgICAoRE9NV2luZG93SW50ZW50cyk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJNZWRpYUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFVzZXJNZWRpYUNv
bnRyb2xsZXIpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmln
YXRvckNvbnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JDb250ZW50
VXRpbHM6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL25hdmlnYXRvcmNvbnRl
bnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuaDoKKyAgICAgICAgKE5hdmlnYXRvckNvbnRl
bnRVdGlscyk6CisgICAgICAgICogTW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3Jr
SW5mb0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yTmV0d29ya0lu
Zm9Db25uZWN0aW9uOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbjo6ZnJvbSk6CisgICAg
ICAgICogTW9kdWxlcy9uZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24u
aDoKKyAgICAgICAgKE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbik6CisgICAgICAgICog
TW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya0luZm9Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAg
ICogTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRyb2xsZXIuaDoKKyAgICAgICAg
KE5ldHdvcmtJbmZvQ29udHJvbGxlcik6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25z
L0RPTVdpbmRvd05vdGlmaWNhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
Tm90aWZpY2F0aW9uczo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3dOb3RpZmljYXRpb25zOjpmcm9tKToKKyAgICAgICAgKiBN
b2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5oOgorICAgICAgICAo
RE9NV2luZG93Tm90aWZpY2F0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAqIE1vZHVsZXMvbm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgIChOb3RpZmljYXRpb25D
b250cm9sbGVyKToKKyAgICAgICAgKiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvV29ya2VyQ29udGV4
dE5vdGlmaWNhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dE5vdGlm
aWNhdGlvbnM6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnM6OmZyb20pOgorICAgICAgICAqIE1v
ZHVsZXMvbm90aWZpY2F0aW9ucy9Xb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucy5oOgorICAgICAg
ICAoV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvcXVvdGEv
RE9NV2luZG93UXVvdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93UXVvdGE6OnN1
cHBsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93UXVvdGE6OmZyb20pOgorICAgICAgICAqIE1vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVv
dGEuaDoKKyAgICAgICAgKERPTVdpbmRvd1F1b3RhKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93U3BlZWNoU3ludGhlc2lzOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6ZnJvbSk6CisgICAg
ICAgICogTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmg6CisgICAgICAg
IChET01XaW5kb3dTcGVlY2hTeW50aGVzaXMpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvbkNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKToKKyAgICAgICAgKiBNb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFNwZWVjaFJl
Y29nbml0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogTW9kdWxlcy92aWJyYXRpb24vVmlicmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpYnJhdGlvbjo6c3VwcGxlbWVudE5hbWUpOgor
ICAgICAgICAqIE1vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5oOgorICAgICAgICAoVmlicmF0
aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OnN1cHBsZW1lbnROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0OjpleGlz
dGluZ0RhdGFiYXNlQ29udGV4dEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250
ZXh0Ojpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4
dC5oOgorICAgICAgICAoRGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKiBkb20vQ29udGV4dEZl
YXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRGZWF0dXJlczo6c3VwcGxlbWVu
dE5hbWUpOgorICAgICAgICAqIGRvbS9Db250ZXh0RmVhdHVyZXMuaDoKKyAgICAgICAgKiBkb20v
RGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VNb3Rp
b25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICogZG9tL0RldmljZU1vdGlv
bkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKERldmljZU1vdGlvbkNvbnRyb2xsZXIpOgorICAgICAg
ICAqIGRvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAg
ICogZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBsb2FkZXIvUHJlcmVuZGVyZXJDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJlcmVuZGVyZXJDbGllbnQ6OnN1cHBsZW1lbnROYW1l
KToKKyAgICAgICAgKiBsb2FkZXIvUHJlcmVuZGVyZXJDbGllbnQuaDoKKyAgICAgICAgKFByZXJl
bmRlcmVyQ2xpZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dQYWdlUG9wdXA6OnN1cHBsZW1lbnROYW1lKToKKyAg
ICAgICAgKiBwYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5oOgorICAgICAgICAoRE9NV2luZG93UGFn
ZVBvcHVwKToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaElucHV0OjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgICogcGFnZS9TcGVlY2hJ
bnB1dC5oOgorICAgICAgICAoU3BlZWNoSW5wdXQpOgorICAgICAgICAqIHBsYXRmb3JtL1JlZkNv
dW50ZWRTdXBwbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZWZDb3VudGVkU3VwcGxlbWVu
dDo6cHJvdmlkZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRTdXBwbGVtZW50Ojpm
cm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdXBwbGVtZW50Ojpwcm92aWRlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U3VwcGxlbWVudDo6ZnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpTdXBwbGVt
ZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVu
dGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVudGFi
bGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKFN1cHBsZW1lbnRhYmxlKToKKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxTZXR0aW5nczo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjpmcm9tKToKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKEludGVybmFsU2V0dGluZ3MpOgorCiAyMDEz
LTAxLTIyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
VXNlIGEgcGxhdGZvcm0gc3RyYXRlZ3kgZm9yIGxvY2FsIHN0b3JhZ2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTAgKzg5LDkgQEAgdm9pZCBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeQogICAgICAgICAoKml0KS0+ZGlkQ2hh
bmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgQmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIEJhdHRl
cnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRyb2xsZXIiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJC
YXR0ZXJ5Q29udHJvbGxlciI7CiB9CiAKIGJvb2wgQmF0dGVyeUNvbnRyb2xsZXI6OmlzQWN0aXZl
KFBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVy
eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgQmF0dGVyeUNsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1l
KCk7CiAgICAgc3RhdGljIEJhdHRlcnlDb250cm9sbGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PEJhdHRlcnlDb250cm9sbGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJv
bShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQ
YWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JC
YXR0ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
TmF2aWdhdG9yQmF0dGVyeS5jcHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTMgKzQ4LDE3IEBAIEJhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5Ojp3ZWJraXQK
ICAgICByZXR1cm4gbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKIH0K
IAorY29uc3QgY2hhciogTmF2aWdhdG9yQmF0dGVyeTo6c3VwcGxlbWVudE5hbWUoKQoreworICAg
IHJldHVybiAiTmF2aWdhdG9yQmF0dGVyeSI7Cit9CisKIE5hdmlnYXRvckJhdHRlcnkqIE5hdmln
YXRvckJhdHRlcnk6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2aWdhdG9yQmF0dGVyeSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBz
dXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2
aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKKyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBz
dXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2
aWdhdG9yPjo6ZnJvbShuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCkpKTsKICAgICBpZiAoIXN1
cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7
Ci0gICAgICAgIHByb3ZpZGVUbyhuYXZpZ2F0b3IsIG5hbWUsIGFkb3B0UHRyKHN1cHBsZW1lbnQp
KTsKKyAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgc3VwcGxlbWVudE5hbWUoKSwgYWRvcHRQ
dHIoc3VwcGxlbWVudCkpOwogICAgIH0KICAgICByZXR1cm4gc3VwcGxlbWVudDsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnku
aAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05h
dmlnYXRvckJhdHRlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6
CiAKICBwcml2YXRlOgogICAgIE5hdmlnYXRvckJhdHRlcnkoKTsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFJlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gbV9i
YXR0ZXJ5TWFuYWdlcjsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRl
ZEZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDExICs1NiwxMCBAQCBET01GaWxlU3lzdGVtKiBEcmFnZ2VkSXNv
bGF0ZWRGaWxlU3lzdGVtCiB9CiAKIC8vIHN0YXRpYwotY29uc3QgQXRvbWljU3RyaW5nJiBEcmFn
Z2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBjaGFyKiBEcmFn
Z2VkSXNvbGF0ZWRGaWxlU3lzdGVtOjpzdXBwbGVtZW50TmFtZSgpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFt
ZSwgKCJEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiRHJhZ2dlZElzb2xh
dGVkRmlsZVN5c3RlbSI7CiB9CiAKIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW06OkRyYWdnZWRJ
c29sYXRlZEZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBmaWxlc3lzdGVtSWQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmls
ZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDE0MDQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNv
bGF0ZWRGaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2lu
Y2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IFN0cmluZyYgZmlsZXN5c3RlbUlkKCkgY29uc3QgeyByZXR1cm4gbV9maWxl
c3lzdGVtSWQ7IH0KICAgICBET01GaWxlU3lzdGVtKiBnZXRET01GaWxlU3lzdGVtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBs
ZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAg
ICAgc3RhdGljIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0qIGZyb20oQ2hyb21pdW1EYXRhT2Jq
ZWN0KiBkYXRhT2JqZWN0KSB7IHJldHVybiBzdGF0aWNfY2FzdDxEcmFnZ2VkSXNvbGF0ZWRGaWxl
U3lzdGVtKj4oU3VwcGxlbWVudDxDaHJvbWl1bURhdGFPYmplY3Q+Ojpmcm9tKGRhdGFPYmplY3Qs
IHN1cHBsZW1lbnROYW1lKCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAkocmV2aXNpb24g
MTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVw
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMsMTcgQEAgTmF2aWdhdG9yR2FtZXBh
ZDo6fk5hdmlnYXRvckdhbWVwYWQoKQogewogfQogCitjb25zdCBjaGFyKiBOYXZpZ2F0b3JHYW1l
cGFkOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJOYXZpZ2F0b3JHYW1lcGFkIjsK
K30KKwogTmF2aWdhdG9yR2FtZXBhZCogTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShOYXZpZ2F0b3Iq
IG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFt
ZSwgKCJOYXZpZ2F0b3JHYW1lcGFkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwotICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxOYXZp
Z2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwgbmFt
ZSkpOworICAgIE5hdmlnYXRvckdhbWVwYWQqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxOYXZp
Z2F0b3JHYW1lcGFkKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwgc3Vw
cGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVt
ZW50ID0gbmV3IE5hdmlnYXRvckdhbWVwYWQoKTsKLSAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRv
ciwgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgICAgICBwcm92aWRlVG8obmF2aWdh
dG9yLCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CiAgICAgfQogICAg
IHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL05hdmlnYXRvckdhbWVwYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBOYXZpZ2F0b3JH
YW1lcGFkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKICAg
ICBSZWZQdHI8R2FtZXBhZExpc3Q+IG1fZ2FtZXBhZHM7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsMTAgKzEzMiw5IEBAIEdlb2xvY2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGwK
ICAgICByZXR1cm4gbV9jbGllbnQtPmxhc3RQb3NpdGlvbigpOwogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hh
ciogR2VvbG9jYXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiR2VvbG9jYXRpb25Db250cm9sbGVy
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1l
OworICAgIHJldHVybiAiR2VvbG9jYXRpb25Db250cm9sbGVyIjsKIH0KIAogdm9pZCBwcm92aWRl
R2VvbG9jYXRpb25UbyhQYWdlKiBwYWdlLCBHZW9sb2NhdGlvbkNsaWVudCogY2xpZW50KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBj
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVu
dE5hbWUoKTsKICAgICBzdGF0aWMgR2VvbG9jYXRpb25Db250cm9sbGVyKiBmcm9tKFBhZ2UqIHBh
Z2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1l
bnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUoKSkpOyB9CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L05hdmlnYXRvckdlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDEzICs0MiwxNyBAQCBOYXZpZ2F0b3JHZW9sb2NhdGlvbjo6fk5hdmln
YXRvckdlb2xvY2F0CiB7CiB9CiAKK2NvbnN0IGNoYXIqIE5hdmlnYXRvckdlb2xvY2F0aW9uOjpz
dXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJOYXZpZ2F0b3JHZW9sb2NhdGlvbiI7Cit9
CisKIE5hdmlnYXRvckdlb2xvY2F0aW9uKiBOYXZpZ2F0b3JHZW9sb2NhdGlvbjo6ZnJvbShOYXZp
Z2F0b3IqIG5hdmlnYXRvcikKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgbmFtZSwgKCJOYXZpZ2F0b3JHZW9sb2NhdGlvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKLSAgICBOYXZpZ2F0b3JHZW9sb2NhdGlvbiogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PE5hdmlnYXRvckdlb2xvY2F0aW9uKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpm
cm9tKG5hdmlnYXRvciwgbmFtZSkpOworICAgIE5hdmlnYXRvckdlb2xvY2F0aW9uKiBzdXBwbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yR2VvbG9jYXRpb24qPihTdXBwbGVtZW50PE5hdmln
YXRvcj46OmZyb20obmF2aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgpKSk7CiAgICAgaWYgKCFzdXBw
bGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgTmF2aWdhdG9yR2VvbG9jYXRpb24o
bmF2aWdhdG9yLT5mcmFtZSgpKTsKLSAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgbmFtZSwg
YWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgICAgICBwcm92aWRlVG8obmF2aWdhdG9yLCBzdXBw
bGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CiAgICAgfQogICAgIHJldHVybiBz
dXBwbGVtZW50OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9O
YXZpZ2F0b3JHZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaAkocmV2aXNpb24gMTQwNDk5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBOYXZpZ2F0b3JHZW9sb2NhdGlvbihGcmFtZSopOworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzdXBwbGVtZW50TmFtZSgpOwogCiAgICAgbXV0YWJsZSBSZWZQdHI8R2VvbG9jYXRpb24+IG1f
Z2VvbG9jYXRpb247CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCShyZXZpc2lv
biAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTcgQEAgRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlOjp+RE9NV2luZG93SW5kZQogewogfQogCitjb25zdCBjaGFy
KiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1
cm4gIkRPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSI7Cit9CisKIERPTVdpbmRvd0luZGV4ZWREYXRh
YmFzZSogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjpmcm9tKERPTVdpbmRvdyogd2luZG93KQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRPTVdpbmRv
d0luZGV4ZWREYXRhYmFzZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LSAgICBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxE
T01XaW5kb3dJbmRleGVkRGF0YWJhc2UqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2lu
ZG93LCBuYW1lKSk7CisgICAgRE9NV2luZG93SW5kZXhlZERhdGFiYXNlKiBzdXBwbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RE9NV2luZG93SW5kZXhlZERhdGFiYXNlKj4oU3VwcGxlbWVudDxET01XaW5k
b3c+Ojpmcm9tKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVu
dCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZSh3
aW5kb3cpOwotICAgICAgICBwcm92aWRlVG8od2luZG93LCBuYW1lLCBhZG9wdFB0cihzdXBwbGVt
ZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0
UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01X
aW5kb3dJbmRleGVkRGF0YWJhc2UuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UoRE9NV2luZG93Kik7CiAKICAgICBJREJGYWN0b3J5KiBpbmRleGVkREIo
KTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIERPTVdp
bmRvdyogbV93aW5kb3c7CiAgICAgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9yeTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
UGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE3IEBAIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZTo6flBhZ2VHcm91cEluZGUKIHsKIH0KIAorY29uc3QgY2hhciogUGFnZUdyb3VwSW5kZXhlZERh
dGFiYXNlOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJQYWdlR3JvdXBJbmRleGVk
RGF0YWJhc2UiOworfQorCiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UqIFBhZ2VHcm91cEluZGV4
ZWREYXRhYmFzZTo6ZnJvbShQYWdlR3JvdXAmIGdyb3VwKQogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIlBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBQYWdlR3JvdXBJbmRleGVk
RGF0YWJhc2UqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxQYWdlR3JvdXBJbmRleGVkRGF0YWJh
c2UqPihTdXBwbGVtZW50PFBhZ2VHcm91cD46OmZyb20oJmdyb3VwLCBuYW1lKSk7CisgICAgUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8UGFnZUdyb3Vw
SW5kZXhlZERhdGFiYXNlKj4oU3VwcGxlbWVudDxQYWdlR3JvdXA+Ojpmcm9tKCZncm91cCwgc3Vw
cGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVt
ZW50ID0gbmV3IFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSgpOwotICAgICAgICBwcm92aWRlVG8o
Jmdyb3VwLCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbygm
Z3JvdXAsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaAkocmV2
aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdy
b3VwSW5kZXhlZERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZSgpOworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCiAgICAgUmVmUHRyPElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3RvcnlCYWNrZW5kOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDE3IEBAIFdvcmtlckNvbnRleHRJbmRleGVkRGF0
YWJhc2U6On5Xb3JrZXJDb24KIHsKIH0KIAorY29uc3QgY2hhciogV29ya2VyQ29udGV4dEluZGV4
ZWREYXRhYmFzZTo6c3VwcGxlbWVudE5hbWUoKQoreworICAgIHJldHVybiAiV29ya2VyQ29udGV4
dEluZGV4ZWREYXRhYmFzZSI7Cit9CisKIFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UqIFdv
cmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2U6OmZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBBdG9taWNTdHJpbmcgbmFtZSA9ICJXb3JrZGVyQ29udGV4dEluZGV4
ZWREYXRhYmFzZSI7Ci0gICAgV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZSogc3VwcGxlbWVu
dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UqPihTdXBwbGVtZW50
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRleHQsIG5hbWUpKTsKKyAgICBXb3Jr
ZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8V29ya2Vy
Q29udGV4dEluZGV4ZWREYXRhYmFzZSo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD46OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVu
dCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJh
c2UoY29udGV4dCk7Ci0gICAgICAgIHByb3ZpZGVUbyhjb250ZXh0LCBuYW1lLCBhZG9wdFB0cihz
dXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyhjb250ZXh0LCBzdXBwbGVtZW50TmFtZSgp
LCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dElu
ZGV4ZWREYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaAkocmV2aXNpb24gMTQwNDk5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWRE
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CiAKICAgICBJREJGYWN0b3J5KiBpbmRleGVkREIoKTsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1f
Y29udGV4dDsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fZmFjdG9y
eUJhY2tlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93
SW50ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0RPTVdpbmRvd0ludGVudHMuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93SW50ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDE0ICs0MywxOCBAQCBET01XaW5kb3dJbnRlbnRzOjp+RE9NV2luZG93SW50ZW50cygpCiB7
CiB9CiAKK2NvbnN0IGNoYXIqIERPTVdpbmRvd0ludGVudHM6OnN1cHBsZW1lbnROYW1lKCkKK3sK
KyAgICByZXR1cm4gIkRPTVdpbmRvd0ludGVudHMiOworfQorCiBET01XaW5kb3dJbnRlbnRzKiBE
T01XaW5kb3dJbnRlbnRzOjpmcm9tKERPTVdpbmRvdyogd2luZG93KQogewogICAgIEFTU0VSVCh3
aW5kb3cpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkRP
TVdpbmRvd0ludGVudHMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0g
ICAgRE9NV2luZG93SW50ZW50cyogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd0lu
dGVudHMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBuYW1lKSk7CisgICAg
RE9NV2luZG93SW50ZW50cyogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd0ludGVu
dHMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20od2luZG93LCBzdXBwbGVtZW50TmFtZSgp
KSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRE9N
V2luZG93SW50ZW50cyh3aW5kb3cpOwotICAgICAgICBwcm92aWRlVG8od2luZG93LCBuYW1lLCBh
ZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1l
bnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBs
ZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvRE9NV2luZG93
SW50ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9E
T01XaW5kb3dJbnRlbnRzLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBET01XaW5kb3dJbnRlbnRzKERPTVdpbmRv
dyopOwogCiAgICAgRGVsaXZlcmVkSW50ZW50KiB3ZWJraXRJbnRlbnQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAogICAgIFJlZlB0cjxEZWxpdmVyZWRJbnRl
bnQ+IG1faW50ZW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vVXNlck1lZGlhQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jb25zdCBBdG9taWNTdHJpbmcmIFVzZXJNZWRpYUNvbnRyb2xsZXI6OnN1
cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIFVzZXJNZWRpYUNvbnRyb2xsZXI6OnN1cHBsZW1l
bnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJVc2VyTWVkaWFDb250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiVXNlck1lZGlhQ29udHJvbGxlciI7
CiB9CiAKIFVzZXJNZWRpYUNvbnRyb2xsZXI6OlVzZXJNZWRpYUNvbnRyb2xsZXIoVXNlck1lZGlh
Q2xpZW50KiBjbGllbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1VzZXJNZWRpYUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTQwNDk5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2Fu
Y2VsVXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0Kik7CiAKICAgICBzdGF0aWMgUGFz
c093blB0cjxVc2VyTWVkaWFDb250cm9sbGVyPiBjcmVhdGUoVXNlck1lZGlhQ2xpZW50Kik7Ci0g
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgVXNlck1lZGlhQ29u
dHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VyTWVkaWFD
b250cm9sbGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgp
KSk7IH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0
b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250
ZW50VXRpbHMuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDEsMTAgKzIwMSw5IEBAIHZvaWQgTmF2aWdhdG9yQ29udGVudFV0aWxzOjp1
bnJlZ2lzdGVyUHIKIH0KICNlbmRpZgogCi1jb25zdCBBdG9taWNTdHJpbmcmIE5hdmlnYXRvckNv
bnRlbnRVdGlsczo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogTmF2aWdhdG9yQ29udGVu
dFV0aWxzOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIG5hbWUsICgiTmF2aWdhdG9yQ29udGVudFV0aWxzIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiTmF2
aWdhdG9yQ29udGVudFV0aWxzIjsKIH0KIAogdm9pZCBwcm92aWRlTmF2aWdhdG9yQ29udGVudFV0
aWxzVG8oUGFnZSogcGFnZSwgTmF2aWdhdG9yQ29udGVudFV0aWxzQ2xpZW50KiBjbGllbnQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0
b3JDb250ZW50VXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25h
dmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuaAkocmV2aXNpb24gMTQw
NDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2
aWdhdG9yQ29udGVudFV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xh
c3MgTmF2aWdhdG9yQ29udGVudFV0aWxzIDogcHVibGljIFJlZgogcHVibGljOgogICAgIHZpcnR1
YWwgfk5hdmlnYXRvckNvbnRlbnRVdGlscygpOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVu
dE5hbWUoKTsKICAgICBzdGF0aWMgTmF2aWdhdG9yQ29udGVudFV0aWxzKiBmcm9tKFBhZ2UqKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKE5hdmlnYXRvciosIGNv
bnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3Jr
aW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29ya0luZm9Db25u
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
ZXR3b3JraW5mby9OYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxMyArNDMsMTcgQEAgTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uOjp+
TmF2aWdhdAogewogfQogCitjb25zdCBjaGFyKiBOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rp
b246OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIk5hdmlnYXRvck5ldHdvcmtJbmZv
Q29ubmVjdGlvbiI7Cit9CisKIE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbiogTmF2aWdh
dG9yTmV0d29ya0luZm9Db25uZWN0aW9uOjpmcm9tKE5hdmlnYXRvciogbmF2aWdhdG9yKQogewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5hdmlnYXRvck5l
dHdvcmtJbmZvQ29ubmVjdGlvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
KTsKLSAgICBOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24qIHN1cHBsZW1lbnQgPSBzdGF0
aWNfY2FzdDxOYXZpZ2F0b3JOZXR3b3JrSW5mb0Nvbm5lY3Rpb24qPihTdXBwbGVtZW50PE5hdmln
YXRvcj46OmZyb20obmF2aWdhdG9yLCBuYW1lKSk7CisgICAgTmF2aWdhdG9yTmV0d29ya0luZm9D
b25uZWN0aW9uKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yTmV0d29ya0luZm9D
b25uZWN0aW9uKj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwgc3VwcGxl
bWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50
ID0gbmV3IE5hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbigpOwotICAgICAgICBwcm92aWRl
VG8obmF2aWdhdG9yLCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIHByb3Zp
ZGVUbyhuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsK
ICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25ldHdvcmtpbmZvL05hdmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0
d29ya0luZm9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbmV0d29ya2luZm8vTmF2aWdhdG9yTmV0d29ya0luZm9Db25uZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIE5h
dmlnYXRvck5ldHdvcmtJbmZvQ29ubmVjdGlvbigpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwogCiAgICAgUmVmUHRyPE5ldHdvcmtJbmZvQ29ubmVjdGlvbj4gbV9j
b25uZWN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8v
TmV0d29ya0luZm9Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25ldHdvcmtpbmZvL05ldHdvcmtJbmZvQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0
MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0luZm9D
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDkgQEAgdm9pZCBOZXR3
b3JrSW5mb0NvbnRyb2xsZXI6OmRpZENoYW5nZU5ldAogICAgICAgICAgKCppdCktPmRpZENoYW5n
ZU5ldHdvcmtJbmZvcm1hdGlvbihldmVudCwgbmV0d29ya0luZm9ybWF0aW9uKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBOZXR3b3JrSW5mb0NvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkK
K2NvbnN0IGNoYXIqIE5ldHdvcmtJbmZvQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5ldHdvcmtJbmZv
Q29udHJvbGxlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBy
ZXR1cm4gbmFtZTsKKyAgICByZXR1cm4gIk5ldHdvcmtJbmZvQ29udHJvbGxlciI7CiB9CiAKIHZv
aWQgcHJvdmlkZU5ldHdvcmtJbmZvVG8oUGFnZSogcGFnZSwgTmV0d29ya0luZm9DbGllbnQqIGNs
aWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0lu
Zm9Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3
b3JraW5mby9OZXR3b3JrSW5mb0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0NvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFz
c093blB0cjxOZXR3b3JrSW5mb0NvbnRyb2xsZXI+IGNyZWF0ZShQYWdlKiwgTmV0d29ya0luZm9D
bGllbnQqKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1l
KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGlj
IE5ldHdvcmtJbmZvQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxOZXR3b3JrSW5mb0NvbnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2Us
IHN1cHBsZW1lbnROYW1lKCkpKTsgfQogICAgCiAgICAgdm9pZCBhZGRMaXN0ZW5lcihOZXR3b3Jr
SW5mb0Nvbm5lY3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0
aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9ucy5jcHAJKHJl
dmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9E
T01XaW5kb3dOb3RpZmljYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDE3
IEBAIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6On5ET01XaW5kb3dOb3RpZmkKIHsKIH0KIAorY29u
c3QgY2hhciogRE9NV2luZG93Tm90aWZpY2F0aW9uczo6c3VwcGxlbWVudE5hbWUoKQoreworICAg
IHJldHVybiAiRE9NV2luZG93Tm90aWZpY2F0aW9ucyI7Cit9CisKIERPTVdpbmRvd05vdGlmaWNh
dGlvbnMqIERPTVdpbmRvd05vdGlmaWNhdGlvbnM6OmZyb20oRE9NV2luZG93KiB3aW5kb3cpCiB7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN1cHBsZW1lbnROYW1lLCAo
IkRPTVdpbmRvd05vdGlmaWNhdGlvbnMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7Ci0gICAgRE9NV2luZG93Tm90aWZpY2F0aW9ucyogc3VwcGxlbWVudCA9IHN0YXRpY19j
YXN0PERPTVdpbmRvd05vdGlmaWNhdGlvbnMqPihTdXBwbGVtZW50PERPTVdpbmRvdz46OmZyb20o
d2luZG93LCBzdXBwbGVtZW50TmFtZSkpOworICAgIERPTVdpbmRvd05vdGlmaWNhdGlvbnMqIHN1
cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxET01XaW5kb3dOb3RpZmljYXRpb25zKj4oU3VwcGxlbWVu
dDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICgh
c3VwcGxlbWVudCkgewogICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERPTVdpbmRvd05vdGlmaWNh
dGlvbnMod2luZG93KTsKLSAgICAgICAgU3VwcGxlbWVudDxET01XaW5kb3c+Ojpwcm92aWRlVG8o
d2luZG93LCBzdXBwbGVtZW50TmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgICAgICBT
dXBwbGVtZW50PERPTVdpbmRvdz46OnByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCks
IGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90
aWZpY2F0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZp
Y2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNp
dCBET01XaW5kb3dOb3RpZmljYXRpb25zKERPTVdpbmRvdyopOwogCiAgICAgTm90aWZpY2F0aW9u
Q2VudGVyKiB3ZWJraXROb3RpZmljYXRpb25zKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1
cHBsZW1lbnROYW1lKCk7CiAKICAgICBET01XaW5kb3cqIG1fd2luZG93OwogICAgIFJlZlB0cjxO
b3RpZmljYXRpb25DZW50ZXI+IG1fbm90aWZpY2F0aW9uQ2VudGVyOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NiwxMCArNTYsOSBAQCBOb3RpZmljYXRpb25DbGllbnQqIE5vdGlmaWNhdGlv
bkNvbnRyb2xsCiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTm90aWZp
Y2F0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogTm90aWZpY2F0
aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5vdGlmaWNhdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0
dXJuICJOb3RpZmljYXRpb25Db250cm9sbGVyIjsKIH0KIAogdm9pZCBwcm92aWRlTm90aWZpY2F0
aW9uKFBhZ2UqIHBhZ2UsIE5vdGlmaWNhdGlvbkNsaWVudCogY2xpZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+Tm90aWZpY2F0aW9uQ29udHJvbGxl
cigpOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Tm90aWZpY2F0aW9uQ29udHJvbGxlcj4gY3Jl
YXRlKE5vdGlmaWNhdGlvbkNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1l
KCk7CiAgICAgc3RhdGljIE5vdGlmaWNhdGlvbkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm90aWZpY2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1lbnQ8
UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUoKSkpOyB9CiAgICAgc3RhdGljIE5vdGlm
aWNhdGlvbkNsaWVudCogY2xpZW50RnJvbShQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Xb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNv
bnRleHROb3RpZmljYXRpb25zLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDE3IEBAIFdvcmtlckNvbnRleHROb3RpZmljYXRp
b25zOjp+V29ya2VyQ29udGUKIHsKIH0KIAorY29uc3QgY2hhciogV29ya2VyQ29udGV4dE5vdGlm
aWNhdGlvbnM6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIldvcmtlckNvbnRleHRO
b3RpZmljYXRpb25zIjsKK30KKwogV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMqIFdvcmtlckNv
bnRleHROb3RpZmljYXRpb25zOjpmcm9tKFdvcmtlckNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN1cHBsZW1lbnROYW1lLCAoIldvcmtl
ckNvbnRleHROb3RpZmljYXRpb25zIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwotICAgIFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKiBzdXBwbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8V29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMqPihTdXBwbGVtZW50PFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKSk7CisgICAgV29ya2Vy
Q29udGV4dE5vdGlmaWNhdGlvbnMqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250
ZXh0Tm90aWZpY2F0aW9ucyo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZy
b20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwogICAgIGlmICghc3VwcGxlbWVudCkgewog
ICAgICAgICBzdXBwbGVtZW50ID0gbmV3IFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zKGNvbnRl
eHQpOwotICAgICAgICBTdXBwbGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+Ojpwcm92aWRl
VG8oY29udGV4dCwgc3VwcGxlbWVudE5hbWUsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICAg
ICAgU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6cHJvdmlkZVRvKGNvbnRleHQs
IHN1cHBsZW1lbnROYW1lKCksIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKICAgICB9CiAgICAgcmV0
dXJuIHN1cHBsZW1lbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNh
dGlvbnMvV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvV29ya2VyQ29udGV4dE5vdGlmaWNhdGlvbnMu
aAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL1dvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3JrZXJDb250ZXh0Tm90aWZpY2F0aW9u
cyhXb3JrZXJDb250ZXh0Kik7CiAKICAgICBOb3RpZmljYXRpb25DZW50ZXIqIHdlYmtpdE5vdGlm
aWNhdGlvbnMoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAog
ICAgIFdvcmtlckNvbnRleHQqIG1fY29udGV4dDsKICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uQ2Vu
dGVyPiBtX25vdGlmaWNhdGlvbkNlbnRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL0RPTVdpbmRvd1F1b3RhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTQgKzQ4LDE4IEBAIERPTVdpbmRvd1F1b3RhOjp+RE9NV2luZG93UXVvdGEoKQog
ewogfQogCitjb25zdCBjaGFyKiBET01XaW5kb3dRdW90YTo6c3VwcGxlbWVudE5hbWUoKQorewor
ICAgIHJldHVybiAiRE9NV2luZG93UXVvdGEiOworfQorCiAvLyBzdGF0aWMKIERPTVdpbmRvd1F1
b3RhKiBET01XaW5kb3dRdW90YTo6ZnJvbShET01XaW5kb3cqIHdpbmRvdykKIHsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJET01XaW5kb3dRdW90YSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBET01XaW5kb3dRdW90YSog
c3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd1F1b3RhKj4oU3VwcGxlbWVudDxET01X
aW5kb3c+Ojpmcm9tKHdpbmRvdywgbmFtZSkpOworICAgIERPTVdpbmRvd1F1b3RhKiBzdXBwbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8RE9NV2luZG93UXVvdGEqPihTdXBwbGVtZW50PERPTVdpbmRvdz46
OmZyb20od2luZG93LCBzdXBwbGVtZW50TmFtZSgpKSk7CiAgICAgaWYgKCFzdXBwbGVtZW50KSB7
CiAgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRE9NV2luZG93UXVvdGEod2luZG93KTsKLSAgICAg
ICAgcHJvdmlkZVRvKHdpbmRvdywgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgICAg
ICBwcm92aWRlVG8od2luZG93LCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50
KSk7CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcXVvdGEvRE9NV2luZG93UXVvdGEuaAkocmV2aXNpb24gMTQwNDk5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBET01XaW5kb3dRdW90YShET01XaW5kb3cqKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vw
cGxlbWVudE5hbWUoKTsKKwogICAgIG11dGFibGUgUmVmUHRyPFN0b3JhZ2VJbmZvPiBtX3N0b3Jh
Z2VJbmZvOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2lu
ZG93U3BlZWNoU3ludGhlc2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCShyZXZpc2lvbiAxNDA0OTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTggQEAgRE9NV2luZG93U3BlZWNo
U3ludGhlc2lzOjp+RE9NV2luZG93U3BlZQogewogfQogCitjb25zdCBjaGFyKiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXM6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIkRPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcyI7Cit9CisKIC8vIHN0YXRpYwogRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXM6OmZyb20oRE9NV2luZG93KiB3aW5kb3cpCiB7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRE9NV2luZG93
U3BlZWNoU3ludGhlc2lzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwot
ICAgIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5k
b3csIG5hbWUpKTsKKyAgICBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMqIHN1cHBsZW1lbnQgPSBz
dGF0aWNfY2FzdDxET01XaW5kb3dTcGVlY2hTeW50aGVzaXMqPihTdXBwbGVtZW50PERPTVdpbmRv
dz46OmZyb20od2luZG93LCB1cHBsZW1lbnROYW1lKCkpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQp
IHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMod2lu
ZG93KTsKLSAgICAgICAgcHJvdmlkZVRvKHdpbmRvdywgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVu
dCkpOworICAgICAgICBwcm92aWRlVG8od2luZG93LCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0
cihzdXBwbGVtZW50KSk7CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzKERPTVdpbmRvdyopOwogICAgIAogICAgIFNwZWVjaFN5bnRoZXNpcyogc3BlZWNoU3ludGhl
c2lzKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgCiAg
ICAgUmVmUHRyPFNwZWVjaFN5bnRoZXNpcz4gbV9zcGVlY2hTeW50aGVzaXM7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNv
bnN0IEF0b21pY1N0cmluZyYgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50
TmFtZSgpCitjb25zdCBjaGFyKiBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OnN1cHBsZW1l
bnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJTcGVlY2hSZWNvZ25p
dGlvbkNvbnRyb2xsZXIiOwogfQogCiBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OlNwZWVj
aFJlY29nbml0aW9uQ29udHJvbGxlcihTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogY2xpZW50KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0KFNwZWVj
aFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24p
OyB9CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+
IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCopOwotICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBs
ZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciogZnJv
bShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTcGVlY2hSZWNvZ25pdGlvbkNvbnRy
b2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsg
fQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy92aWJyYXRpb24vVmli
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlv
bi9WaWJyYXRpb24uY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTAgKzEy
Niw5IEBAIHZvaWQgVmlicmF0aW9uOjp0aW1lclN0b3BGaXJlZChUaW1lcjxWaWIKICAgICB9CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVmlicmF0aW9uOjpzdXBwbGVtZW50TmFtZSgpCitjb25z
dCBjaGFyKiBWaWJyYXRpb246OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJWaWJyYXRpb24iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJWaWJy
YXRpb24iOwogfQogCiBib29sIFZpYnJhdGlvbjo6aXNBY3RpdmUoUGFnZSogcGFnZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvdmlicmF0aW9uL1ZpYnJhdGlvbi5oCShyZXZpc2lv
biAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3ZpYnJhdGlvbi9WaWJyYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0aW1l
clN0YXJ0RmlyZWQoVGltZXI8VmlicmF0aW9uPiopOwogICAgIHZvaWQgdGltZXJTdG9wRmlyZWQo
VGltZXI8VmlicmF0aW9uPiopOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3Vw
cGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsK
ICAgICBzdGF0aWMgVmlicmF0aW9uKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFZpYnJhdGlvbio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5h
bWUoKSkpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNBY3RpdmUoUGFnZSopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRl
eHQuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIERhdGFiYXNlQ29udGV4dCogZXhp
c3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Citjb25zdCBjaGFyKiBEYXRhYmFzZUNvbnRleHQ6OnN1cHBsZW1lbnROYW1lKCkKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVj
dXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0IikpOworICAgIHJl
dHVybiAiRGF0YWJhc2VDb250ZXh0IjsKK30KKworRGF0YWJhc2VDb250ZXh0KiBEYXRhYmFzZUNv
bnRleHQ6OmV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhYmFzZUNvbnRleHQqPihT
dXBwbGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRleHQsIHN1cHBsZW1l
bnROYW1lKCkpKTsKIH0KIAogRGF0YWJhc2VDb250ZXh0OjpEYXRhYmFzZUNvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKQEAgLTY4LDcgKzczLDcgQEAgRGF0YWJhc2VDb250
ZXh0KiBEYXRhYmFzZUNvbnRleHQ6OmZyb20oUwogICAgIERhdGFiYXNlQ29udGV4dCogc3VwcGxl
bWVudCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KTsKICAgICBpZiAoIXN1
cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBEYXRhYmFzZUNvbnRleHQoY29u
dGV4dCk7Ci0gICAgICAgIHByb3ZpZGVUbyhjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0IiwgYWRv
cHRQdHIoc3VwcGxlbWVudCkpOworICAgICAgICBwcm92aWRlVG8oY29udGV4dCwgc3VwcGxlbWVu
dE5hbWUoKSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwogICAgICAgICBBU1NFUlQoc3VwcGxlbWVu
dCA9PSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oY29udGV4dCkpOwogICAgIH0KICAgICBy
ZXR1cm4gc3VwcGxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgRGF0YWJhc2VDb250ZXh0
KiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
ICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250ZXh0RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250ZXh0RmVhdHVyZXMuY3BwCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTAgKzM5LDkgQEAgQ29udGV4dEZlYXR1cmVzQ2xpZW50KiBDb250ZXh0RmVhdHVyZXNDbAogICAg
IHJldHVybiAmZW1wdHk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ29udGV4dEZlYXR1cmVz
OjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBjaGFyKiBDb250ZXh0RmVhdHVyZXM6OnN1cHBsZW1l
bnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwg
KCJDb250ZXh0RmVhdHVyZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJDb250ZXh0RmVhdHVyZXMiOwogfQogCiBD
b250ZXh0RmVhdHVyZXMqIENvbnRleHRGZWF0dXJlczo6ZGVmYXVsdFN3aXRjaCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRleHRGZWF0dXJlcy5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGV4dEZlYXR1cmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgcHVibGljOgogICAgICAgICBGZWF0dXJlVHlwZVNpemUgLy8gU2hvdWxkIGJlIHRo
ZSBsYXN0IGVudHJ5LgogICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBz
dXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgp
OwogICAgIHN0YXRpYyBDb250ZXh0RmVhdHVyZXMqIGRlZmF1bHRTd2l0Y2goKTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb250ZXh0RmVhdHVyZXM+IGNyZWF0ZShDb250ZXh0RmVhdHVyZXNDbGll
bnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1v
dGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsOSBAQCBQYXNz
UmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rpb25Db250cm9sbGVyCiAgICAgcmV0dXJuIERldmljZU1v
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW1vdGlvbkV2ZW50LCBkZXZpY2VN
b3Rpb25DbGllbnQoKS0+bGFzdE1vdGlvbigpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBE
ZXZpY2VNb3Rpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCitjb25zdCBjaGFyKiBEZXZp
Y2VNb3Rpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRGV2aWNlTW90aW9uQ29udHJvbGxlciIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAg
ICByZXR1cm4gIkRldmljZU1vdGlvbkNvbnRyb2xsZXIiOwogfQogCiBEZXZpY2VNb3Rpb25Db250
cm9sbGVyKiBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpmcm9tKFBhZ2UqIHBhZ2UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE0
MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBo
YXNMYXN0RGF0YSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0
TGFzdEV2ZW50KCkgT1ZFUlJJREU7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBz
dXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgp
OwogICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBmcm9tKFBhZ2UqKTsKICAgICBz
dGF0aWMgYm9vbCBpc0FjdGl2ZUF0KFBhZ2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0MDQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMCArNjgsOSBAQCBQYXNzUmVmUHRyPEV2ZW50PiBEZXZp
Y2VPcmllbnRhdGlvbkNvbnRyCiAgICAgcmV0dXJuIERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCwgZGV2aWNlT3JpZW50YXRp
b25DbGllbnQoKS0+bGFzdE9yaWVudGF0aW9uKCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hh
ciogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyIjsK
IH0KIAogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBEZXZpY2VPcmllbnRhdGlvbkNvbnRy
b2xsZXI6OmZyb20oUGFnZSogcGFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRh
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQo
KSBPVkVSUklERTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnRO
YW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3Rh
dGljIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CiAgICAgc3RhdGlj
IGJvb2wgaXNBY3RpdmVBdChQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Q
cmVyZW5kZXJlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1ByZXJlbmRlcmVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcg
KzM0LDE1IEBACiAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShMSU5L
X1BSRVJFTkRFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBzdGF0aWMKLWNvbnN0IEF0
b21pY1N0cmluZyYgUHJlcmVuZGVyZXJDbGllbnQ6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNo
YXIqIFByZXJlbmRlcmVyQ2xpZW50OjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiUHJlcmVuZGVyZXJDbGllbnQiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAg
cmV0dXJuICJQcmVyZW5kZXJlckNsaWVudCI7CiB9CiAKIC8vIHN0YXRpYwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByZXJlbmRlcmVyQ2xpZW50LmgJKHJldmlzaW9uIDE0MDQ5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlckNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQWRkUHJl
cmVuZGVyKFByZXJlbmRlckhhbmRsZSopID0gMDsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7CiAgICAgc3RhdGljIFByZXJlbmRlcmVyQ2xpZW50KiBmcm9tKFBhZ2UqKTsKIAog
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQYWdlUG9wdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UGFnZVBvcHVw
LmNwcAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQ
YWdlUG9wdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsOSBAQCBET01XaW5kb3dQ
YWdlUG9wdXA6On5ET01XaW5kb3dQYWdlUG9wdXAoCiAgICAgbV9jb250cm9sbGVyLT5jbGVhclBh
Z2VQb3B1cENsaWVudCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERPTVdpbmRvd1BhZ2VQ
b3B1cDo6c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogRE9NV2luZG93UGFnZVBvcHVwOjpz
dXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG5hbWUsICgiRE9NV2luZG93UGFnZVBvcHVwIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiAiRE9NV2luZG93UGFnZVBv
cHVwIjsKIH0KIAogUGFnZVBvcHVwQ29udHJvbGxlciogRE9NV2luZG93UGFnZVBvcHVwOjpwYWdl
UG9wdXBDb250cm9sbGVyKERPTVdpbmRvdyogd2luZG93KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3dQYWdlUG9wdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5oCShyZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvd1BhZ2VQb3B1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBET01XaW5kb3dQYWdlUG9w
dXAoUGFnZVBvcHVwQ2xpZW50Kik7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3Vw
cGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsK
IAogICAgIFJlZlB0cjxQYWdlUG9wdXBDb250cm9sbGVyPiBtX2NvbnRyb2xsZXI7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAJKHJldmlzaW9uIDE0MDQ5OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
MTAgKzExNyw5IEBAIHZvaWQgU3BlZWNoSW5wdXQ6OmNhbmNlbFJlY29nbml0aW9uKGludCAKICAg
ICBtX2NsaWVudC0+Y2FuY2VsUmVjb2duaXRpb24obGlzdGVuZXJJZCk7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgU3BlZWNoSW5wdXQ6OnN1cHBsZW1lbnROYW1lKCkKK2NvbnN0IGNoYXIqIFNw
ZWVjaElucHV0OjpzdXBwbGVtZW50TmFtZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIG5hbWUsICgiU3BlZWNoSW5wdXQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuICJTcGVlY2hJbnB1
dCI7CiB9CiAKIHZvaWQgcHJvdmlkZVNwZWVjaElucHV0VG8oUGFnZSogcGFnZSwgU3BlZWNoSW5w
dXRDbGllbnQqIGNsaWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmgJKHJldmlz
aW9uIDE0MDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3BlZWNoSW5w
dXQoKTsKIAogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNwZWVjaElucHV0PiBjcmVhdGUoU3BlZWNo
SW5wdXRDbGllbnQqKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50
TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0
YXRpYyBTcGVlY2hJbnB1dCogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxT
cGVlY2hJbnB1dCo+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUo
KSkpOyB9CiAKICAgICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQgZm9yIHRoZSBnaXZlbiBsaXN0
ZW5lciB0byBiZSB1c2VkIGZvciBzcGVlY2ggcmVxdWVzdHMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9SZWZDb3VudGVkU3VwcGxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgJKHJldmlzaW9uIDE0MDQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlZkNvdW50ZWRTdXBwbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDEyICs1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUaGlz
VHlwZT4gbV93cmFwcGVkOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9pZCBwcm92aWRlVG8oU3Vw
cGxlbWVudGFibGU8VD4qIGhvc3QsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBQYXNzUmVmUHRy
PFRoaXNUeXBlPiBzdXBwbGVtZW50KQorICAgIHN0YXRpYyB2b2lkIHByb3ZpZGVUbyhTdXBwbGVt
ZW50YWJsZTxUPiogaG9zdCwgY29uc3QgY2hhcioga2V5LCBQYXNzUmVmUHRyPFRoaXNUeXBlPiBz
dXBwbGVtZW50KQogICAgIHsKICAgICAgICAgaG9zdC0+cHJvdmlkZVN1cHBsZW1lbnQoa2V5LCBh
ZG9wdFB0cihuZXcgV3JhcHBlcihzdXBwbGVtZW50KSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBU
aGlzVHlwZSogZnJvbShTdXBwbGVtZW50YWJsZTxUPiogaG9zdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBrZXkpCisgICAgc3RhdGljIFRoaXNUeXBlKiBmcm9tKFN1cHBsZW1lbnRhYmxlPFQ+KiBob3N0
LCBjb25zdCBjaGFyKiBrZXkpCiAgICAgewogICAgICAgICBTdXBwbGVtZW50PFQ+KiBmb3VuZCA9
IGhvc3QtPnJlcXVpcmVTdXBwbGVtZW50KGtleSk7CiAgICAgICAgIGlmICghZm91bmQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgJKHJldmlzaW9uIDE0MDQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEyICsyNywzOCBAQAogI2RlZmluZSBTdXBwbGVtZW50YWJsZV9oCiAKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisvLyBXaGF0IHlvdSBzaG91bGQga25vdyBhYm91dCB0aGUgU3VwcGxlbWVudCBrZXlz
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBU
aGUgU3VwcGxlbWVudCBpcyBleHBlY3RlZCB0byB1c2UgdGhlIHNhbWUgY29uc3QgY2hhciogc3Ry
aW5nIGluc3RhbmNlCisvLyBhcyBpdHMga2V5LiBUaGUgU3VwcGxlbWVudGFibGUncyBTdXBwbGVt
ZW50TWFwIHdpbGwgdXNlIHRoZSBhZGRyZXNzIG9mIHRoZQorLy8gc3RyaW5nIGFzIHRoZSBrZXkg
YW5kIG5vdCB0aGUgY2hhcmFjdGVycyB0aGVtc2VsdmVzLiBIZW5jZSwgMiBzdHJpbmdzIHdpdGgK
Ky8vIHRoZSBzYW1lIGNoYXJhY3RlcnMgd2lsbCBiZSB0cmVhdGVkIGFzIDIgZGlmZmVyZW50IGtl
eXMuCisvLworLy8gSW4gcHJhY3RpY2UsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU3VwcGxlbWVu
dHMgaW1wbGVtZW50cyBhIHN0YXRpYyBtZXRob2QKKy8vIGZvciByZXR1cm5pbmcgaXRzIGtleSB0
byB1c2UuIEZvciBleGFtcGxlOgorLy8KKy8vICAgICBjbGFzcyBNeUNsYXNzIDogcHVibGljIFN1
cHBsZW1lbnQ8TXlTdXBwbGVtZW50YWJsZT4geworLy8gICAgICAgICAuLi4KKy8vICAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CisvLyAgICAgfQorLy8KKy8vICAg
ICBjb25zdCBjaGFyKiBNeUNsYXNzOjpzdXBwbGVtZW50TmFtZSgpCisvLyAgICAgeworLy8gICAg
ICAgICByZXR1cm4gIk15Q2xhc3MiOworLy8gICAgIH0KKy8vCisvLyBBbiBleGFtcGxlIG9mIHRo
ZSB1c2luZyB0aGUga2V5OgorLy8KKy8vICAgICBNeUNsYXNzKiBNeUNsYXNzOjpmcm9tKE15U3Vw
cGxlbWVudGFibGUqIGhvc3QpCisvLyAgICAgeworLy8gICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxNeUNsYXNzKj4oU3VwcGxlbWVudDxNeVN1cHBsZW1lbnRhYmxlPjo6ZnJvbShob3N0
LCBzdXBwbGVtZW50TmFtZSgpKSk7CisvLyAgICAgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
Y2xhc3MgU3VwcGxlbWVudGFibGU7CiAKQEAgLTQ0LDEyICs3MCwxMiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzUmVmQ291bnRlZFdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBwcm92aWRlVG8oU3VwcGxlbWVudGFibGU8VD4q
IGhvc3QsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBQYXNzT3duUHRyPFN1cHBsZW1lbnQ8VD4g
PiBzdXBwbGVtZW50KQorICAgIHN0YXRpYyB2b2lkIHByb3ZpZGVUbyhTdXBwbGVtZW50YWJsZTxU
PiogaG9zdCwgY29uc3QgY2hhcioga2V5LCBQYXNzT3duUHRyPFN1cHBsZW1lbnQ8VD4gPiBzdXBw
bGVtZW50KQogICAgIHsKICAgICAgICAgaG9zdC0+cHJvdmlkZVN1cHBsZW1lbnQoa2V5LCBzdXBw
bGVtZW50KTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3VwcGxlbWVudDxUPiogZnJvbShTdXBwbGVt
ZW50YWJsZTxUPiogaG9zdCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXkpCisgICAgc3RhdGljIFN1
cHBsZW1lbnQ8VD4qIGZyb20oU3VwcGxlbWVudGFibGU8VD4qIGhvc3QsIGNvbnN0IGNoYXIqIGtl
eSkKICAgICB7CiAgICAgICAgIHJldHVybiBob3N0ID8gaG9zdC0+cmVxdWlyZVN1cHBsZW1lbnQo
a2V5KSA6IDA7CiAgICAgfQpAQCAtNTgsMjQgKzg0LDI0IEBAIHB1YmxpYzoKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjbGFzcyBTdXBwbGVtZW50YWJsZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBwcm92
aWRlU3VwcGxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgUGFzc093blB0cjxTdXBwbGVt
ZW50PFQ+ID4gc3VwcGxlbWVudCkKKyAgICB2b2lkIHByb3ZpZGVTdXBwbGVtZW50KGNvbnN0IGNo
YXIqIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+ID4gc3VwcGxlbWVudCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCghbV9zdXBwbGVtZW50cy5nZXQoa2V5LmltcGwoKSkpOworICAgICAgICBB
U1NFUlQoIW1fc3VwcGxlbWVudHMuZ2V0KGtleSkpOwogICAgICAgICBtX3N1cHBsZW1lbnRzLnNl
dChrZXksIHN1cHBsZW1lbnQpOwogICAgIH0KIAotICAgIHZvaWQgcmVtb3ZlU3VwcGxlbWVudChj
b25zdCBBdG9taWNTdHJpbmcmIGtleSkKKyAgICB2b2lkIHJlbW92ZVN1cHBsZW1lbnQoY29uc3Qg
Y2hhcioga2V5KQogICAgIHsKICAgICAgICAgbV9zdXBwbGVtZW50cy5yZW1vdmUoa2V5KTsKICAg
ICB9CiAKLSAgICBTdXBwbGVtZW50PFQ+KiByZXF1aXJlU3VwcGxlbWVudChjb25zdCBBdG9taWNT
dHJpbmcmIGtleSkKKyAgICBTdXBwbGVtZW50PFQ+KiByZXF1aXJlU3VwcGxlbWVudChjb25zdCBj
aGFyKiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdXBwbGVtZW50cy5nZXQoa2V5KTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgT3du
UHRyPFN1cHBsZW1lbnQ8VD4gPiA+IFN1cHBsZW1lbnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFw
PGNvbnN0IGNoYXIqLCBPd25QdHI8U3VwcGxlbWVudDxUPiA+LCBQdHJIYXNoPGNvbnN0IGNoYXIq
PiA+IFN1cHBsZW1lbnRNYXA7CiAgICAgU3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCShy
ZXZpc2lvbiAxNDA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTIgKzE0NSwxNiBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxJbnRlcm5hbFNldHRpbmdzPiBtX2ludGVybmFsU2V0dGluZ3M7CiB9OwogCitjb25z
dCBjaGFyKiBJbnRlcm5hbFNldHRpbmdzOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJu
ICJJbnRlcm5hbFNldHRpbmdzIjsKK30KKwogSW50ZXJuYWxTZXR0aW5ncyogSW50ZXJuYWxTZXR0
aW5nczo6ZnJvbShQYWdlKiBwYWdlKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCBuYW1lLCAoIkludGVybmFsU2V0dGluZ3MiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0gICAgaWYgKCFTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIG5h
bWUpKQotICAgICAgICBTdXBwbGVtZW50PFBhZ2U+Ojpwcm92aWRlVG8ocGFnZSwgbmFtZSwgYWRv
cHRQdHIobmV3IEludGVybmFsU2V0dGluZ3NXcmFwcGVyKHBhZ2UpKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEludGVybmFsU2V0dGluZ3NXcmFwcGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJv
bShwYWdlLCBuYW1lKSktPmludGVybmFsU2V0dGluZ3MoKTsKKyAgICBpZiAoIVN1cHBsZW1lbnQ8
UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUoKSkpCisgICAgICAgIFN1cHBsZW1lbnQ8
UGFnZT46OnByb3ZpZGVUbyhwYWdlLCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihuZXcgSW50
ZXJuYWxTZXR0aW5nc1dyYXBwZXIocGFnZSkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50
ZXJuYWxTZXR0aW5nc1dyYXBwZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBs
ZW1lbnROYW1lKCkpKS0+aW50ZXJuYWxTZXR0aW5ncygpOwogfQogCiBJbnRlcm5hbFNldHRpbmdz
Ojp+SW50ZXJuYWxTZXR0aW5ncygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFsU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFsU2V0dGluZ3MuaAkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbFNldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCBw
cml2YXRlOgogCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3Q7CiAgICAgUGFnZSogcGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBw
bGVtZW50TmFtZSgpOwogCiAgICAgUGFnZSogbV9wYWdlOwogICAgIEJhY2t1cCBtX2JhY2t1cDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDA1MDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDEzLTAxLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBDaGFuZ2UgdGhlIFN1cHBsZW1lbnRhYmxlIGNsYXNzIHRvIG5vdCB1c2UgQXRvbWljU3RyaW5n
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NTM1
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxh
Y2VkIHRoZSB1c2Ugb2YgQXRvbWljU3RyaW5nIGtleXMgd2l0aCBsaXRlcmFsIGNvbnN0IGNoYXIq
IGtleXMuCisgICAgICAgIFRoaXMgc2ltcGxpZmllcyB0aGUgU3VwcGxlbWVudE1hcCBhbmQgbWFr
ZXMgaXQgc2xpZ2h0bHkgbGVhbmVyIGFuZCBmYXN0ZXIuCisKKyAgICAgICAgKiBzcmMvQ29udGV4
dEZlYXR1cmVzQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChDb250ZXh0RmVhdHVyZXNDYWNoZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRGZWF0dXJlc0NhY2hlOjpzdXBwbGVtZW50TmFtZSk6
CisKIDIwMTMtMDEtMjIgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9ncmFjaWFAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIGRpZENvbW1pdENvbXBvc2l0b3JG
cmFtZSBpbiBXZWJXaWRnZXRDbGllbnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Db250ZXh0RmVhdHVyZXNDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Db250ZXh0RmVhdHVyZXNDbGllbnRJbXBsLmNwcAkocmV2aXNpb24g
MTQwNDk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dEZlYXR1cmVzQ2xp
ZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAg
ICAgICBib29sIG1fZGVmYXVsdFZhbHVlOyAvLyBOZWVkcyB0byBiZSB0cmFrZWQgYXMgYSBwYXJ0
IG9mIHRoZSBzaWduYXR1cmUgc2luY2UgaXQgY2FuIGJlIGNoYW5nZWQgZHluYW1pY2FsbHkuCiAg
ICAgfTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIENv
bnRleHRGZWF0dXJlc0NhY2hlKiBmcm9tKERvY3VtZW50Kik7CiAKICAgICBFbnRyeSYgZW50cnlG
b3IoQ29udGV4dEZlYXR1cmVzOjpGZWF0dXJlVHlwZSB0eXBlKQpAQCAtOTQsMTAgKzk0LDkgQEAg
cHJpdmF0ZToKICAgICBFbnRyeSBtX2VudHJpZXNbQ29udGV4dEZlYXR1cmVzOjpGZWF0dXJlVHlw
ZVNpemVdOwogfTsKIAotY29uc3QgQXRvbWljU3RyaW5nJiBDb250ZXh0RmVhdHVyZXNDYWNoZTo6
c3VwcGxlbWVudE5hbWUoKQorY29uc3QgY2hhciogQ29udGV4dEZlYXR1cmVzQ2FjaGU6OnN1cHBs
ZW1lbnROYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFt
ZSwgKCJDb250ZXh0RmVhdHVyZXNDYWNoZSIpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICByZXR1
cm4gIkNvbnRleHRGZWF0dXJlc0NhY2hlIjsKIH0KIAogQ29udGV4dEZlYXR1cmVzQ2FjaGUqIENv
bnRleHRGZWF0dXJlc0NhY2hlOjpmcm9tKERvY3VtZW50KiBkb2N1bWVudCkK
</data>
<flag name="review"
          id="202767"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>