<?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>141269</bug_id>
          
          <creation_ts>2015-02-04 15:38:28 -0800</creation_ts>
          <short_desc>[WK2] Add logging to validate the network cache efficacy (Part 1)</short_desc>
          <delta_ts>2015-02-08 14:06:19 -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>Page Loading</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>141345</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066967</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 15:38:28 -0800</bug_when>
    <thetext>Add logging to measure the network cache efficacy.

This is part 1, containing the console logging code inside the NetworkCache.
The diagnostic logging wiring will be added in a follow-up patch.

Radar: &lt;rdar://problem/19632080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066970</commentid>
    <comment_count>1</comment_count>
      <attachid>246063</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 15:49:52 -0800</bug_when>
    <thetext>Created attachment 246063
WIP patch

Still needs another pass but uploading already in case Antti has some early feedback on the overall approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066971</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 15:52:25 -0800</bug_when>
    <thetext>Attachment 246063 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:144:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:256:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:142:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:470:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067026</commentid>
    <comment_count>3</comment_count>
      <attachid>246076</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 20:12:17 -0800</bug_when>
    <thetext>Created attachment 246076
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067027</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 20:13:44 -0800</bug_when>
    <thetext>Attachment 246076 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067042</commentid>
    <comment_count>5</comment_count>
      <attachid>246082</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 22:26:37 -0800</bug_when>
    <thetext>Created attachment 246082
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067043</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 22:28:06 -0800</bug_when>
    <thetext>Attachment 246082 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:109:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:165:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067044</commentid>
    <comment_count>7</comment_count>
      <attachid>246083</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 22:31:27 -0800</bug_when>
    <thetext>Created attachment 246083
WIP Patch

Ok, this latest patch takes into consideration Antti&apos;s feedback from IRC, except the setting to make this logging conditional at run time (I&apos;ll add that tomorrow and double check everything).
In the mean time, please let me know if you have other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067045</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 22:32:59 -0800</bug_when>
    <thetext>Attachment 246083 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:109:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:165:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067055</commentid>
    <comment_count>9</comment_count>
      <attachid>246090</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-04 22:51:46 -0800</bug_when>
    <thetext>Created attachment 246090
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067056</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 22:53:12 -0800</bug_when>
    <thetext>Attachment 246090 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:110:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:166:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067178</commentid>
    <comment_count>11</comment_count>
      <attachid>246123</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 12:57:38 -0800</bug_when>
    <thetext>Created attachment 246123
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067187</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 13:08:26 -0800</bug_when>
    <thetext>Attachment 246123 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:110:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067222</commentid>
    <comment_count>13</comment_count>
      <attachid>246131</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 14:46:36 -0800</bug_when>
    <thetext>Created attachment 246131
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067227</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 14:48:33 -0800</bug_when>
    <thetext>Attachment 246131 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:110:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorageCocoa.mm:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStatsStorage.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067257</commentid>
    <comment_count>15</comment_count>
      <attachid>246139</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 16:59:19 -0800</bug_when>
    <thetext>Created attachment 246139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067258</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 17:01:35 -0800</bug_when>
    <thetext>Attachment 246139 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067267</commentid>
    <comment_count>17</comment_count>
      <attachid>246141</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 17:16:44 -0800</bug_when>
    <thetext>Created attachment 246141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067268</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 17:19:57 -0800</bug_when>
    <thetext>Attachment 246141 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067359</commentid>
    <comment_count>19</comment_count>
      <attachid>246141</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-06 08:11:39 -0800</bug_when>
    <thetext>Comment on attachment 246141
Patch

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

r+ since there will be subsequent patches. I&apos;m still bit confused by some aspects here.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:58
&gt; +        m_statisticsStorage = NetworkCacheStatistics::open(cachePath);

m_statisticsStorage -&gt; m_statistics

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:231
&gt; +    WebCore::URL requestURL = originalRequest.url();
&gt; +    NetworkCacheKey storageKey = makeCacheKey(originalRequest);
&gt;      if (!canRetrieve(originalRequest)) {
&gt; +        if (isEfficacyLoggingEnabled()) {
&gt; +            m_statisticsStorage-&gt;wasPreviouslySeen(storageKey, [this, storageKey, requestURL](bool wasPreviouslySeen) {

You are capturing &apos;this&apos; just so you can call back to m_statisticsStorage, not a very nice pattern. 

Generally I would prefer encapsulating more of this to NetworkCacheStatistics:

if (m_statistics)
   m_statistics-&gt;recordNotUsingCacheForRequest(originalRequest);

and move the equivalent code there. I&apos;d like NetworkCache to be about HTTP semantics.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:234
&gt; +                if (wasPreviouslySeen) {
&gt; +                    LOG(NetworkCache, &quot;(NetworkProcess) %s was previously seen but wasn&apos;t cacheable&quot;, requestURL.string().ascii().data());
&gt; +                    // FIXME: Do diagnostic logging.

The log message here is not really correct. Cacheability is a property of the response, not request. Here we filter out some request that we know can&apos;t be handled by the cache.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:257
&gt; +            if (isEfficacyLoggingEnabled()) {
&gt; +                m_statisticsStorage-&gt;wasPreviouslySeen(storageKey, [this, storageKey, requestURL](bool wasPreviouslySeen) {
&gt; +                    if (wasPreviouslySeen) {
&gt; +                        LOG(NetworkCache, &quot;(NetworkProcess) %s was previously cached but is no longer in the cache&quot;, requestURL.string().ascii().data());
&gt; +                        // FIXME: Do diagnostic logging.
&gt; +                    } else
&gt; +                        m_statisticsStorage-&gt;markAsSeen(storageKey);
&gt; +                });
&gt; +            }

Similarly this would be 

if (m_statistics)
   m_statistics-&gt;recordRetrieveFailed(originalRequest);

I&apos;m confused what markAsSeen() indicates. It probably needs a more descriptive name. Is it &quot;did we ever try to request this resource&quot;? If so shouldn&apos;t you also set it when the retrieve succeeds?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.h:39
&gt; +    typedef std::function&lt;void (bool wasPreviouslySeen)&gt; CompletionHandler;

This could use a less generic name than &quot;CompletionHandler&quot;

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.h:43
&gt; +    void wasPreviouslySeen(const NetworkCacheKey&amp;, const CompletionHandler&amp;) const;

queryPreviouslySeen?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:104
&gt; +            // Create empty file in cache statistics folder.
&gt; +            String statisticsPartitionPath = partitionPath;
&gt; +            statisticsPartitionPath.replace(cachePath, cacheStatisticsPath);
&gt; +            createEmptyFile(WebCore::pathByAppendingComponent(statisticsPartitionPath, fileName));

This is a rather funky way of storing information. Something bit more traditional (like SQLite) might be appropriate for statistics collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067445</commentid>
    <comment_count>20</comment_count>
      <attachid>246184</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 15:57:47 -0800</bug_when>
    <thetext>Created attachment 246184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067446</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 15:58:48 -0800</bug_when>
    <thetext>Now using SQLite as backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067447</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 15:59:28 -0800</bug_when>
    <thetext>Attachment 246184 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067459</commentid>
    <comment_count>23</comment_count>
      <attachid>246189</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 16:41:51 -0800</bug_when>
    <thetext>Created attachment 246189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067463</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 16:47:27 -0800</bug_when>
    <thetext>Attachment 246189 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067487</commentid>
    <comment_count>25</comment_count>
      <attachid>246197</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 19:10:09 -0800</bug_when>
    <thetext>Created attachment 246197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067488</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 19:12:33 -0800</bug_when>
    <thetext>Attachment 246197 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067523</commentid>
    <comment_count>27</comment_count>
      <attachid>246197</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-07 06:04:34 -0800</bug_when>
    <thetext>Comment on attachment 246197
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:256
&gt;          auto decodedEntry = decodeStorageEntry(*entry, originalRequest);
&gt;          bool success = !!decodedEntry;
&gt; +        if (m_statistics) {
&gt; +            if (success)
&gt; +                m_statistics-&gt;recordUsingCachedEntry(storageKey, originalRequest);
&gt; +            else
&gt; +                m_statistics-&gt;recordNotUsingCachedEntry(storageKey, originalRequest);
&gt; +        }

This could perhaps be a single function with a success argument.

We should add the reason we failed to use the entry at some point.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.h:71
&gt; +    BloomFilter&lt;20&gt; m_everRequestedFilter;

Was there some indication that this large filter is actually needed? The simple queries done here might be pretty well-optimized in SQLite and lookups happen in a low-priority dispatch queue so shouldn&apos;t affect normal cache operation.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:306
&gt; +bool NetworkCacheStatistics::addHashToDatabase(NetworkCacheKey::HashType hash)
&gt; +{
&gt; +    ASSERT(!RunLoop::isMain());
&gt; +    ASSERT(WebCore::SQLiteDatabaseTracker::hasTransactionInProgress());
&gt; +    ASSERT(m_database.isOpen());
&gt; +
&gt; +    WebCore::SQLiteStatement statement(m_database, ASCIILiteral(&quot;INSERT INTO AlreadyRequested (hash) VALUES (?)&quot;));
&gt; +    if (statement.prepare() != WebCore::SQLResultOk)
&gt; +        return false;
&gt; +
&gt; +    statement.bindInt64(1, hash);

Note that bug 141356 makes NetworkCacheKey::HashType an MD5 digest so this needs some adjustment, perhaps switching to key.hashAsString().

Similarly key.hash() -&gt; key.shortHash() if you need 32bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067539</commentid>
    <comment_count>28</comment_count>
      <attachid>246197</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 11:02:37 -0800</bug_when>
    <thetext>Comment on attachment 246197
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.h:71
&gt;&gt; +    BloomFilter&lt;20&gt; m_everRequestedFilter;
&gt; 
&gt; Was there some indication that this large filter is actually needed? The simple queries done here might be pretty well-optimized in SQLite and lookups happen in a low-priority dispatch queue so shouldn&apos;t affect normal cache operation.

Without the bloom filter, we&apos;ll get ~2x the amount of disk I/O for each resource request. That said, this is a simple DB query on an indexed column, in a background thread. Since this is merely used for logging, we don&apos;t really need to worry about latency. I&apos;ll test locally without the bloom filter and see how it goes. Worse case scenario, we can always reintroduce the bloom filter if it causes regressions.

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:306
&gt;&gt; +    statement.bindInt64(1, hash);
&gt; 
&gt; Note that bug 141356 makes NetworkCacheKey::HashType an MD5 digest so this needs some adjustment, perhaps switching to key.hashAsString().
&gt; 
&gt; Similarly key.hash() -&gt; key.shortHash() if you need 32bits.

Ok, I&apos;ll adjust accordingly, assuming you land your change before me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067576</commentid>
    <comment_count>29</comment_count>
      <attachid>246220</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 15:32:19 -0800</bug_when>
    <thetext>Created attachment 246220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067577</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 15:33:45 -0800</bug_when>
    <thetext>Attachment 246220 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067578</commentid>
    <comment_count>31</comment_count>
      <attachid>246221</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 15:35:23 -0800</bug_when>
    <thetext>Created attachment 246221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067579</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 15:36:06 -0800</bug_when>
    <thetext>It&apos;d be great if you could have one last look Antti. I made the following changes:
- Removed the bloom filter for now
- Store new MD5 hashes as Strings in the database</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067580</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 15:36:32 -0800</bug_when>
    <thetext>Attachment 246221 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067588</commentid>
    <comment_count>34</comment_count>
      <attachid>246197</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 15:49:53 -0800</bug_when>
    <thetext>Comment on attachment 246197
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:256
&gt;&gt; +        }
&gt; 
&gt; This could perhaps be a single function with a success argument.
&gt; 
&gt; We should add the reason we failed to use the entry at some point.

Oh, and I made this change too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067707</commentid>
    <comment_count>35</comment_count>
      <attachid>246221</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-08 14:06:11 -0800</bug_when>
    <thetext>Comment on attachment 246221
Patch

Clearing flags on attachment: 246221

Committed r179804: &lt;http://trac.webkit.org/changeset/179804&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067708</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-08 14:06:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246063</attachid>
            <date>2015-02-04 15:49:52 -0800</date>
            <delta_ts>2015-02-04 20:12:17 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>141269_DiskCache_efficacy_logging_wip.patch</filename>
            <type>text/plain</type>
            <size>12685</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IDgxZjI0YTQuLmEzZjFiNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMjIwLDE0ICsyMjAs
MjUgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBzdGQKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJXUiLCBvcmlnaW5hbFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0
eSgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX0VGRklDQUNZX0xPR0dJTkcpCisgICAg
V2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSBvcmlnaW5hbFJlcXVlc3QudXJsKCk7CisjZW5kaWYK
KyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJl
cXVlc3QpOwogICAgIGlmICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0KSkgeworI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFX0VGRklDQUNZX0xPR0dJTkcpCisgICAgICAgIG1fc3RvcmFnZS0+
d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJldmlv
dXNseVNlZW4pIHsKKyAgICAgICAgICAgIGlmICh3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAg
ICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2
aW91c2x5IHNlZW4gYnV0IHdhc24ndCBjYWNoZWFibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3RpYyBs
b2dnaW5nLgorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyNlbmRpZgogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1
dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAKLSAgICBO
ZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3Qp
OwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCk7CiAK
ICAgICAvLyBDYXB0dXJlZCBkYXRhIGlzIGdvaW5nIHRvIGJlIHNodWZmbGVkIGFyb3VuZCB0aHJl
YWRzLiBBdm9pZCB1bnNhZmUgY29weWluZy4KQEAgLTIzOCwxNCArMjQ5LDMyIEBAIHZvaWQgTmV0
d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdp
bmFsUmVxdWVzdCwgc3RkCiAgICAgLy8gRklYTUU6IFdpdGggQysrMTQgdGhpcyBjb3VsZCB1c2Ug
dW5pcXVlX3B0ciBhbmQgaW5pdGlhbGl6ZWQgbGFtYmRhIGNhcHR1cmUKICAgICBhdXRvIGNhcHR1
cmUgPSBzdGQ6Om1ha2Vfc2hhcmVkPENhcHR1cmU+KENhcHR1cmUgeyBvcmlnaW5hbFJlcXVlc3Qs
IGNvbXBsZXRpb25IYW5kbGVyIH0pOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdl
S2V5LCBwcmlvcml0eSwgW3RoaXMsIGNhcHR1cmUsIHN0YXJ0VGltZV0oc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBlbnRyeSkgeworICAgIG1fc3RvcmFnZS0+cmV0
cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWUKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLCBzdG9yYWdlS2V5LCByZXF1ZXN0VVJMCisjZW5kaWYKKyAgICAgICAgXShzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAg
IGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1By
b2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVf
RUZGSUNBQ1lfTE9HR0lORykKKyAgICAgICAgICAgIG1fc3RvcmFnZS0+d2FzUHJldmlvdXNseVNl
ZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pIHsKKyAg
ICAgICAgICAgICAgICBpZiAod2FzUHJldmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgd2FzIHByZXZpb3VzbHkg
Y2FjaGVkIGJ1dCBpcyBubyBsb25nZXIgaW4gdGhlIGNhY2hlIiwgcmVxdWVzdFVSTC5zdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFn
bm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisjZW5k
aWYKICAgICAgICAgICAgIGNhcHR1cmUtPmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVu
dHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0
KTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBpbiB0
aGUgY2FjaGUgYnV0IGlzbid0IHVzYWJsZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KKyAg
ICAgICAgfQorI2VuZGlmCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBhdXRvIGVsYXBzZWRN
UyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXggMGUwZTM4Mi4uMTA1MmQ3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuaApAQCAtMTQwLDYgKzE0MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9yZShj
b25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBFbnRyeSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
Ym9vbCBzdWNjZXNzKT4pOwogICAgIHZvaWQgdXBkYXRlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYs
IGNvbnN0IEVudHJ5JiB1cGRhdGVFbnRyeSwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4pOwogCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICB2b2lkIHdhc1ByZXZpb3VzbHlTZWVuKGNvbnN0
IE5ldHdvcmtDYWNoZUtleSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNQcmV2aW91c2x5
U2Vlbik+KTsKKyNlbmRpZgorCiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShzaXplX3QpOwogICAg
IHZvaWQgY2xlYXIoKTsKIApAQCAtMTQ3LDEyICsxNTEsMTkgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIE5ldHdvcmtDYWNoZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKTsK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgIE5ldHdvcmtD
YWNoZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0
YXRzUGF0aCk7CisjZW5kaWYKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgc2hy
aW5rSWZOZWVkZWQoKTsKIAogICAgIHZvaWQgcmVtb3ZlRW50cnkoY29uc3QgTmV0d29ya0NhY2hl
S2V5Jik7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAg
IHZvaWQgbWFya0FzU2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmKTsKKyNlbmRpZgorCiAgICAg
c3RydWN0IFJldHJpZXZlT3BlcmF0aW9uIHsKICAgICAgICAgTmV0d29ya0NhY2hlS2V5IGtleTsK
ICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4gY29t
cGxldGlvbkhhbmRsZXI7CkBAIC0xNjEsMTAgKzE3MiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGlzcGF0Y2hQZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zKCk7CiAKICAgICBjb25zdCBTdHJpbmcg
bV9kaXJlY3RvcnlQYXRoOworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX0VGRklDQUNZX0xPR0dJ
TkcpCisgICAgU3RyaW5nIG1fc3RhdHNQYXRoOworI2VuZGlmCiAKICAgICBzaXplX3QgbV9tYXhp
bXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKIAogICAgIEJs
b29tRmlsdGVyPDIwPiBtX2NvbnRlbnRzRmlsdGVyOworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
X0VGRklDQUNZX0xPR0dJTkcpCisgICAgQmxvb21GaWx0ZXI8MjA+IG1fcHJldmlvdXNseVNlZW5G
aWx0ZXI7CisjZW5kaWYKICAgICBzdGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVFbnRy
eUNvdW50IHsgMCB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7
IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQppbmRleCBiMWZhMmRlLi41
MTBhNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw5IEBA
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN1
YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZSI7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfRUZG
SUNBQ1lfTE9HR0lORykKK3N0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0c1N1YmRp
cmVjdG9yeSA9ICJXZWJLaXRDYWNoZVN0YXRzIjsKKyNlbmRpZgogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rpb24+CiBzdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcm
IHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQpAQCAtMTExLDcg
KzExNCwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZT4gTmV0d29ya0Nh
Y2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIGNhYwogICAgIFN0cmluZyBuZXR3b3JrQ2Fj
aGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgbmV0
d29ya0NhY2hlU3ViZGlyZWN0b3J5KTsKICAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rv
cmllcyhuZXR3b3JrQ2FjaGVQYXRoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICBTdHJpbmcgbmV0d29ya0Nh
Y2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0
aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3RvcnkpOworICAgIGlmICghV2ViQ29yZTo6bWFr
ZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZT4o
bmV3IE5ldHdvcmtDYWNoZVN0b3JhZ2UobmV0d29ya0NhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3Rh
dHNQYXRoKSk7CisjZWxzZQogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hl
U3RvcmFnZT4obmV3IE5ldHdvcmtDYWNoZVN0b3JhZ2UobmV0d29ya0NhY2hlUGF0aCkpOworI2Vu
ZGlmCisKIH0KIAogTmV0d29ya0NhY2hlU3RvcmFnZTo6TmV0d29ya0NhY2hlU3RvcmFnZShjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCkBAIC0xMjQsMjQgKzEzNSw1OSBAQCBOZXR3b3JrQ2Fj
aGVTdG9yYWdlOjpOZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0
aCkKICAgICBpbml0aWFsaXplKCk7CiB9CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9FRkZJ
Q0FDWV9MT0dHSU5HKQorTmV0d29ya0NhY2hlU3RvcmFnZTo6TmV0d29ya0NhY2hlU3RvcmFnZShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IFN0cmluZyYgc3RhdHNQYXRoKQorICAg
IDogTmV0d29ya0NhY2hlU3RvcmFnZShzdGF0c1BhdGgpCit7CisgICAgIG1fc3RhdHNQYXRoID0g
c3RhdHNQYXRoOworfQorI2VuZGlmCisKIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6aW5pdGlh
bGl6ZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0cmluZ0Nh
cHR1cmUgY2FjaGVQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOwogICAgIGF1dG8mIGRpc2tD
b250ZW50c0ZpbHRlciA9IG1fY29udGVudHNGaWx0ZXI7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICBhdXRvJiBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIg
PSBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworI2VuZGlmCiAgICAgYXV0byYgZW50cnlDb3VudCA9
IG1fYXBwcm94aW1hdGVFbnRyeUNvdW50OwogCi0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3Jv
dW5kSU9RdWV1ZS5nZXQoKSwgW2NhY2hlUGF0aENhcHR1cmUsICZkaXNrQ29udGVudHNGaWx0ZXIs
ICZlbnRyeUNvdW50XSB7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW2NhY2hlUGF0aENhcHR1cmUsICZkaXNrQ29udGVudHNGaWx0ZXIKKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgICAgICAsICZkaXNrUHJldmlvdXNs
eVNlZW5GaWx0ZXIKKyNlbmRpZgorICAgICAgICAsICZlbnRyeUNvdW50XSB7CiAgICAgICAgIFN0
cmluZyBjYWNoZVBhdGggPSBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpOwotICAgICAgICB0cmF2
ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBbJmRpc2tDb250ZW50c0ZpbHRlciwgJmVudHJ5Q291
bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAgdHJh
dmVyc2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgWyZkaXNrQ29udGVudHNGaWx0ZXIKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgICAgICAgICAgLCAmZGlza1By
ZXZpb3VzbHlTZWVuRmlsdGVyCisjZW5kaWYKKyAgICAgICAgICAgICwgJmVudHJ5Q291bnRdKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYpIHsKICAgICAgICAgICAgIE5ldHdv
cmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKICAgICAgICAgICAgIGlmICghTmV0d29ya0NhY2hl
S2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIGRpc2tDb250ZW50c0ZpbHRlci5hZGQoaGFzaCk7CisjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICAgICAgICAgIGRpc2tQcmV2aW91
c2x5U2VlbkZpbHRlci5hZGQoaGFzaCk7IC8vIEZvciBib290c3RhcHBpbmcuCisjZW5kaWYKICAg
ICAgICAgICAgICsrZW50cnlDb3VudDsKICAgICAgICAgfSk7CiAgICAgfSk7CisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgIFN0cmluZ0NhcHR1cmUgY2Fj
aGVTdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2Jh
Y2tncm91bmRJT1F1ZXVlLmdldCgpLCBbY2FjaGVTdGF0c1BhdGhDYXB0dXJlLCAmZGlza1ByZXZp
b3VzbHlTZWVuRmlsdGVyXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0aCA9IGNhY2hl
U3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNh
Y2hlU3RhdHNQYXRoLCBbJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlcl0oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5OjpI
YXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmluZ1Rv
SGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgZGlza1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisjZW5kaWYKIH0KIAogc3RhdGljIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0
IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKQEAgLTQwNiw2
ICs0NTIsNDAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdSZXRy
aWV2ZU9wZXJhdGlvbnMoKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX0VG
RklDQUNZX0xPR0dJTkcpCisKK3ZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6bWFya0FzU2Vlbihj
b25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVy
LmFkZChrZXkuaGFzaCgpKTsKKworICAgIC8vIENyZWF0ZSBlbXB0eSBmaWxlIGluIGNhY2hlIHN0
YXRzIGZvbGRlci4KKyAgICBTdHJpbmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9zdGF0c1Bh
dGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlz
LCBrZXksIHN0YXRzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgaW50IGZkOworICAgICAgICBhdXRv
IGNoYW5uZWwgPSBvcGVuRmlsZUZvcktleShrZXksIEZpbGVPcGVuVHlwZTo6Q3JlYXRlLCBzdGF0
c1BhdGhDYXB0dXJlLnN0cmluZygpLCBmZCk7CisgICAgICAgIGRpc3BhdGNoX2lvX3dyaXRlKGNo
YW5uZWwuZ2V0KCksIDAsIGRpc3BhdGNoX2RhdGFfZW1wdHksIGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtdKGJvb2wsIGRpc3BhdGNoX2RhdGFfdCwgaW50KSB7IH0pOworICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6Ondhc1ByZXZpb3VzbHlTZWVuKGNvbnN0IE5ldHdv
cmtDYWNoZUtleSYga2V5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNl
ZW4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fcHJldmlvdXNseVNlZW5GaWx0
ZXIubWF5Q29udGFpbihrZXkuaGFzaCgpKSkgeworICAgICAgICBtYXJrQXNTZWVuKGtleSk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRzUGF0aCk7CisgICAg
ZGlzcGF0Y2hfYXN5bmMobV9pb1F1ZXVlLmdldCgpLCBbdGhpcywgc3RhdHNQYXRoQ2FwdHVyZSwg
a2V5LCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBib29sIHdhc1ByZXZpb3VzbHlTZWVu
ID0gV2ViQ29yZTo6ZmlsZUV4aXN0cyhmaWxlUGF0aEZvcktleShrZXksIHN0YXRzUGF0aENhcHR1
cmUuc3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKCF3YXNQcmV2aW91c2x5U2VlbikKKyAgICAgICAg
ICAgIG1hcmtBc1NlZW4oa2V5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzUHJldmlv
dXNseVNlZW4pOworICAgIH0pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEVf
RUZGSUNBQ1lfTE9HR0lORykKKwogdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZShj
b25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgdW5zaWduZWQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC01MjMsMTEgKzYwMywyMSBAQCB2b2lk
IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmNsZWFyKCkKIAogICAgIG1fd3JpdGVDYWNoZS5jbGVhcigp
OwogICAgIG1fY29udGVudHNGaWx0ZXIuY2xlYXIoKTsKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuY2xlYXIoKTsK
KyNlbmRpZgogICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0gMDsKIAogICAgIFN0cmluZ0Nh
cHR1cmUgZGlyZWN0b3J5UGF0aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQ
YXRoQ2FwdHVyZShtX3N0YXRzUGF0aCk7CisjZW5kaWYKIAotICAgIGRpc3BhdGNoX2FzeW5jKG1f
aW9RdWV1ZS5nZXQoKSwgW2RpcmVjdG9yeVBhdGhDYXB0dXJlXSB7CisgICAgZGlzcGF0Y2hfYXN5
bmMobV9pb1F1ZXVlLmdldCgpLCBbZGlyZWN0b3J5UGF0aENhcHR1cmUKKyNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRV9FRkZJQ0FDWV9MT0dHSU5HKQorICAgICAgICAsIHN0YXRzUGF0aENhcHR1cmUK
KyNlbmRpZgorICAgICAgICBdIHsKICAgICAgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBkaXJl
Y3RvcnlQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKICAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkoZGly
ZWN0b3J5UGF0aCwgRFRfRElSLCBbJmRpcmVjdG9yeVBhdGhdKGNvbnN0IFN0cmluZyYgc3ViZGly
TmFtZSkgewogICAgICAgICAgICAgU3RyaW5nIHN1YmRpclBhdGggPSBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aCwgc3ViZGlyTmFtZSk7CkBAIC01MzcsNiAr
NjI3LDE3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6Y2xlYXIoKQogICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBybWRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
c3ViZGlyUGF0aCkuZGF0YSgpKTsKICAgICAgICAgfSk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEVfRUZGSUNBQ1lfTE9HR0lORykKKyAgICAgICAgU3RyaW5nIHN0YXRzUGF0aCA9IHN0YXRzUGF0
aENhcHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN0YXRzUGF0aCwg
RFRfRElSLCBbJnN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAg
ICAgICBTdHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChzdGF0c1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAgdHJhdmVyc2VEaXJlY3Rvcnko
c3ViZGlyUGF0aCwgRFRfUkVHLCBbJnN1YmRpclBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoc3ViZGlyUGF0aCwgZmlsZU5hbWUpOworICAgICAgICAgICAgICAgIHVu
bGluayhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpLmRhdGEoKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJtZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihzdWJkaXJQYXRoKS5kYXRhKCkpOworICAgICAgICB9KTsKKyNlbmRpZgog
ICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaCBiL1NvdXJj
ZS9XZWJLaXQyL2NvbmZpZy5oCmluZGV4IDFmM2YwZWIuLjFiNjI3ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCkBAIC04
OCwzICs4OCwxMSBAQAogI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRSAwCiAjZW5kaWYKICNl
bmRpZgorCisjaWZuZGVmIEVOQUJMRV9ORVRXT1JLX0NBQ0hFX0VGRklDQUNZX0xPR0dJTkcKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FDSEVfRUZG
SUNBQ1lfTE9HR0lORyAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRV9FRkZJ
Q0FDWV9MT0dHSU5HIDAKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246076</attachid>
            <date>2015-02-04 20:12:17 -0800</date>
            <delta_ts>2015-02-04 22:26:37 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>25817</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IDgxZjI0YTQuLjcyYzc1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTUyLDYgKzUzLDggQEAgTmV0d29y
a0NhY2hlJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpCiBib29sIE5ldHdvcmtDYWNoZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKIHsKICAgICBtX3N0b3JhZ2UgPSBOZXR3
b3JrQ2FjaGVTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCk7CisgICAgLy8gRklYTUU6IE1ha2UgdGhp
cyBjb25kaXRpb25hbC4KKyAgICBtX3N0YXRzU3RvcmFnZSA9IE5ldHdvcmtDYWNoZVN0YXRzU3Rv
cmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3Jr
UHJvY2Vzcykgb3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7
CiAgICAgcmV0dXJuICEhbV9zdG9yYWdlOwpAQCAtMjIwLDE0ICsyMjMsMjMgQEAgdm9pZCBOZXR3
b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2lu
YWxSZXF1ZXN0LCBzdGQKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJXUiLCBvcmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCksIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpKTsKIAorICAgIFdl
YkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gb3JpZ2luYWxSZXF1ZXN0LnVybCgpOworICAgIE5ldHdv
cmtDYWNoZUtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAg
ICAgaWYgKCFjYW5SZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QpKSB7CisgICAgICAgIGlmIChtX3N0
YXRzU3RvcmFnZSkgeworICAgICAgICAgICAgbV9zdGF0c1N0b3JhZ2UtPndhc1ByZXZpb3VzbHlT
ZWVuKHN0b3JhZ2VLZXksIFtyZXF1ZXN0VVJMXShib29sIHdhc1ByZXZpb3VzbHlTZWVuKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5
IHNlZW4gYnV0IHdhc24ndCBjYWNoZWFibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9n
Z2luZy4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7
CiAKLSAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5h
bFJlcXVlc3QpOwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9y
aXR5KCk7CiAKICAgICAvLyBDYXB0dXJlZCBkYXRhIGlzIGdvaW5nIHRvIGJlIHNodWZmbGVkIGFy
b3VuZCB0aHJlYWRzLiBBdm9pZCB1bnNhZmUgY29weWluZy4KQEAgLTIzOCwxNCArMjUwLDI2IEBA
IHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAgICAgLy8gRklYTUU6IFdpdGggQysrMTQgdGhpcyBj
b3VsZCB1c2UgdW5pcXVlX3B0ciBhbmQgaW5pdGlhbGl6ZWQgbGFtYmRhIGNhcHR1cmUKICAgICBh
dXRvIGNhcHR1cmUgPSBzdGQ6Om1ha2Vfc2hhcmVkPENhcHR1cmU+KENhcHR1cmUgeyBvcmlnaW5h
bFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyIH0pOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2
ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIGNhcHR1cmUsIHN0YXJ0VGltZV0oc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBlbnRyeSkgeworICAgIG1fc3Rv
cmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFy
dFRpbWUsIHN0b3JhZ2VLZXksIHJlcXVlc3RVUkxdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2Fj
aGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKICAgICAgICAgaWYgKCFlbnRyeSkgewogICAgICAg
ICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0
b3JhZ2UiKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRzU3RvcmFnZSkgeworICAgICAgICAgICAg
ICAgIG1fc3RhdHNTdG9yYWdlLT53YXNQcmV2aW91c2x5U2VlbihzdG9yYWdlS2V5LCBbcmVxdWVz
dFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
d2FzUHJldmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IGNhY2hlZCBidXQgaXMg
bm8gbG9uZ2VyIGluIHRoZSBjYWNoZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9n
Z2luZy4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FwdHVyZS0+Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBkZWNv
ZGVkRW50cnkgPSBkZWNvZGVTdG9yYWdlRW50cnkoKmVudHJ5LCBjYXB0dXJlLT5vcmlnaW5hbFJl
cXVlc3QpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSAhIWRlY29kZWRFbnRyeTsKKyAgICAgICAg
aWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSAlcyBpcyBpbiB0aGUgY2FjaGUgYnV0IGlzbid0IHVzYWJsZSIsIHJlcXVlc3RVUkwu
c3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdu
b3N0aWMgbG9nZ2luZy4KKyAgICAgICAgfQogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgYXV0
byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSku
Y291bnQoKTsKICNlbmRpZgpAQCAtMzMwLDYgKzM1NCw4IEBAIHZvaWQgTmV0d29ya0NhY2hlOjpj
bGVhcigpCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcg
Y2FjaGUiKTsKICAgICBpZiAobV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKCk7
CisgICAgaWYgKG1fc3RhdHNTdG9yYWdlKQorICAgICAgICBtX3N0YXRzU3RvcmFnZS0+Y2xlYXIo
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuaAppbmRleCBhNzA1NzUxLi4xNDliNzc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtNDEsNiArNDEs
OCBAQCBjbGFzcyBVUkw7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2U7CisKIGNsYXNzIE5ldHdvcmtDYWNoZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTmV0d29ya0NhY2hlKTsKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ry
b3llZDxOZXR3b3JrQ2FjaGU+OwpAQCAtNzMsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIH5OZXR3
b3JrQ2FjaGUoKSA9IGRlbGV0ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVT
dG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRz
U3RvcmFnZT4gbV9zdGF0c1N0b3JhZ2U7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0
ZW1Qb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmU5NTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorI2RlZmluZSBOZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtUG9zaXhfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4K
KyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cit2b2lkIHRy
YXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBG
dW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworICAgIGlmICghZGlyKQorICAg
ICAgICByZXR1cm47CisgICAgc3RydWN0IGRpcmVudCogZHA7CisgICAgd2hpbGUgKChkcCA9IHJl
YWRkaXIoZGlyKSkpIHsKKyAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKKyAg
ICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7CisgICAg
fQorICAgIGNsb3NlZGlyKGRpcik7Cit9CisKK2lubGluZSB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxl
cyhjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKK3sK
KyAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZm
dW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAgIFN0cmluZyBwYXJ0
aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwg
c3ViZGlyTmFtZSk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERU
X1JFRywgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
IHsKKyAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSA4KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRo
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2lubGluZSBTdHJpbmcgZGlyZWN0b3J5UGF0
aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBh
dGgpCit7CisgICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwga2V5LnBhcnRp
dGlvbigpKTsKK30KKworaW5saW5lIFN0cmluZyBmaWxlUGF0aEZvcktleShjb25zdCBOZXR3b3Jr
Q2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAgcmV0dXJuIFdl
YkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnlQYXRoRm9yS2V5KGtleSwg
Y2FjaGVQYXRoKSwga2V5Lmhhc2hBc1N0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3YzI4NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRz
U3RvcmFnZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZV9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZV9oCisK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvQmxvb21G
aWx0ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtDYWNoZVN0YXRz
U3RvcmFnZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworCisgICAgdm9p
ZCBjbGVhcigpOworICAgIHZvaWQgd2FzUHJldmlvdXNseVNlZW4oY29uc3QgTmV0d29ya0NhY2hl
S2V5Jiwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc1ByZXZpb3VzbHlTZWVuKT4pOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJp
bmcmIHN0YXRzRGlyZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2
b2lkIG1hcmtBc1NlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5Jik7CisKKyAgICBTdHJpbmcgbV9z
dGF0c0RpcmVjdG9yeVBhdGg7CisgICAgQmxvb21GaWx0ZXI8MjA+IG1fcHJldmlvdXNseVNlZW5G
aWx0ZXI7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRp
c3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5kaWYKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNl
bmRpZiAvLyBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2VDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTAx
Yjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0KQEAgLTAsMCArMSwxMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgorCisjaW5jbHVkZSAi
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVT
dGF0c1N1YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZVN0YXRzIjsKKworc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpvcGVu
KGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBTdHJpbmcgbmV0d29ya0NhY2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3Rv
cnkpOworICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0
YXRzUGF0aCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RhdHNTdG9y
YWdlKG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0c1N0b3Jh
Z2U6Ok5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0b3J5
UGF0aCkKKyAgICA6IG1fc3RhdHNEaXJlY3RvcnlQYXRoKHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAg
ICAsIG1fYmFja2dyb3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVh
dGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdHNTdG9yYWdlLkJhY2tncm91bmQiLCBESVNQ
QVRDSF9RVUVVRV9DT05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1
ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJ
U1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUo
KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OmluaXRpYWxpemUoKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBi
b290c3RyYXBwaW5nIGZyb20gbmV0d29yayBjYWNoZSBmb2xkZXIgb24gZmlyc3QgcnVuLgorICAg
IGF1dG8mIGRpc2tQcmV2aW91c2x5U2VlbkZpbHRlciA9IG1fcHJldmlvdXNseVNlZW5GaWx0ZXI7
CisgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVN0YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9y
eVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtj
YWNoZVN0YXRzUGF0aENhcHR1cmUsICZkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXJdIHsKKyAgICAg
ICAgU3RyaW5nIGNhY2hlU3RhdHNQYXRoID0gY2FjaGVTdGF0c1BhdGhDYXB0dXJlLnN0cmluZygp
OworICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVTdGF0c1BhdGgsIFsmZGlza1ByZXZp
b3VzbHlTZWVuRmlsdGVyXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmKSB7
CisgICAgICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgICAg
ICBpZiAoIU5ldHdvcmtDYWNoZUtleTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkaXNrUHJldmlvdXNseVNlZW5GaWx0
ZXIuYWRkKGhhc2gpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2U6Om1hcmtBc1NlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkpCit7
CisgICAgLy8gRklYTUU6IE1ha2Ugcm9vbSBpZiB0aGUgYmxvb20gZmlsdGVyIGJlY29tZXMgdG8g
Y3Jvd2RlZC4KKyAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChrZXkuaGFzaCgpKTsKKwor
ICAgIC8vIENyZWF0ZSBlbXB0eSBmaWxlIGluIGNhY2hlIHN0YXRzIGZvbGRlci4KKyAgICBTdHJp
bmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtrZXksIHN0YXRzUGF0aENh
cHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0aEZvcktleShrZXksIHN0YXRz
UGF0aENhcHR1cmUuc3RyaW5nKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5n
IGZpbGUgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmICghV2ViQ29yZTo6
bWFrZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUocGF0aCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGhhbmRsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKHBh
dGgsIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSho
YW5kbGUpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZTo6d2Fz
UHJldmlvdXNseVNlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoYm9vbCB3YXNQcmV2aW91c2x5U2Vlbik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IGlmICghbV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlDb250YWluKGtleS5oYXNoKCkpKSB7Cisg
ICAgICAgIG1hcmtBc1NlZW4oa2V5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0c1BhdGhD
YXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tn
cm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgc3RhdHNQYXRoQ2FwdHVyZSwga2V5LCBjb21wbGV0
aW9uSGFuZGxlcl0geworICAgICAgICBib29sIHdhc1ByZXZpb3VzbHlTZWVuID0gV2ViQ29yZTo6
ZmlsZUV4aXN0cyhmaWxlUGF0aEZvcktleShrZXksIHN0YXRzUGF0aENhcHR1cmUuc3RyaW5nKCkp
KTsKKyAgICAgICAgaWYgKCF3YXNQcmV2aW91c2x5U2VlbikKKyAgICAgICAgICAgIG1hcmtBc1Nl
ZW4oa2V5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzUHJldmlvdXNseVNlZW4pOwor
ICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZTo6Y2xlYXIoKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3ByZXZpb3VzbHlTZWVuRmls
dGVyLmNsZWFyKCk7CisKKyAgICBTdHJpbmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9zdGF0
c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUu
Z2V0KCksIFtzdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmluZyBzdGF0c1BhdGggPSBz
dGF0c1BhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShzdGF0
c1BhdGgsIERUX0RJUiwgWyZzdGF0c1BhdGhdKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewor
ICAgICAgICAgICAgU3RyaW5nIHN1YmRpclBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoc3RhdHNQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgICAgIHRyYXZlcnNlRGly
ZWN0b3J5KHN1YmRpclBhdGgsIERUX1JFRywgWyZzdWJkaXJQYXRoXShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN1YmRpclBhdGgsIGZpbGVOYW1lKTsKKyAgICAgICAgICAg
ICAgICB1bmxpbmsoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKS5k
YXRhKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBybWRpcihXZWJDb3JlOjpmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oc3ViZGlyUGF0aCkuZGF0YSgpKTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXggMGUwZTM4Mi4uYjE5NTVhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaApAQCAtMTY1LDYgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90
IG1fbWF4aW11bVNpemUgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07CiAK
ICAgICBCbG9vbUZpbHRlcjwyMD4gbV9jb250ZW50c0ZpbHRlcjsKKwogICAgIHN0ZDo6YXRvbWlj
PHNpemVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgeyAwIH07CiAgICAgc3RkOjphdG9taWM8
Ym9vbD4gbV9zaHJpbmtJblByb2dyZXNzIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1t
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZUNvY29hLm1tCmluZGV4IGIxZmEyZGUuLjRjZGM4OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
Q29jb2EubW0KQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaCIKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTQzLDM2ICs0Miw2IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5
ID0gIldlYktpdENhY2hlIjsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGlj
IHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUs
IGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2Vi
Q29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFk
aXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAo
KGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9u
YW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4u
IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUp
KTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhdmVyc2VD
YWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0
aW9uKQotewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hl
UGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgU3Ry
aW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2Fj
aGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9u
UGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRp
dGlvblBhdGgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogTmV0d29ya0NhY2hlU3RvcmFn
ZTo6RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IG1f
ZGlzcGF0Y2hEYXRhKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6
ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQpKSkKICAgICAsIG1f
c2l6ZShzaXplKQpAQCAtMTQ0LDE3ICsxMTMsNiBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6
OmluaXRpYWxpemUoKQogICAgIH0pOwogfQogCi1zdGF0aWMgU3RyaW5nIGRpcmVjdG9yeVBhdGhG
b3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRo
KQotewotICAgIEFTU0VSVCgha2V5LnBhcnRpdGlvbigpLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIGtleS5wYXJ0aXRp
b24oKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZmlsZVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIHJldHVybiBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aEZvcktleShrZXksIGNh
Y2hlUGF0aCksIGtleS5oYXNoQXNTdHJpbmcoKSk7Ci19Ci0KIGVudW0gY2xhc3MgRmlsZU9wZW5U
eXBlIHsgUmVhZCwgV3JpdGUsIENyZWF0ZSB9Owogc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNo
X2lvX3Q+IG9wZW5GaWxlRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBGaWxlT3Bl
blR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGludCYgZmQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQ1
NTgwNy4uNjQxMWU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTE0Niw2ICsxMTQ2LDkgQEAKIAkJN0NGNDdGRkUxNzI3NkFF
MzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBX
S0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi87IH07CiAJCTdDRjQ3RkZGMTcyNzZBRTMwMDhBQ0I5
MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBh
Z2VCYW5uZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5
MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovOyB9OworCQk4MzRC
MjUwQzFBODMxODQ3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwOTFB
ODMxNTBDMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gKi87IH07
CisJCTgzNEIyNTBEMUE4MzE4NEIwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTA4
MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCAqLzsgfTsKKwkJ
ODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MEUx
QTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oICovOyB9Owog
CQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJE
QjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgzNzJEQjI4
MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjYxQTY3
NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi87IH07
CiAJCTgzNzJEQjI5MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgz
NzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
aCAqLzsgfTsKQEAgLTMzMTksNiArMzMyMiw5IEBACiAJCTdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5
MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5u
ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFu
bmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFQzRGMEY5MThFNEE5NDUw
MDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzNEIyNTA4MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3Rh
dHNTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTA5MUE4MzE1
MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM3OSw4ICs3
Mzg1LDExIEBACiAJCQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURl
Y29kZXIuaCAqLywKIAkJCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hl
RW5jb2Rlci5jcHAgKi8sCiAJCQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtD
YWNoZUVuY29kZXIuaCAqLywKKwkJCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAgKi8sCiAJCQkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZUtleS5oICovLAorCQkJCTgzNEIyNTA4MUE4MzE1MEMwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCAqLywKKwkJCQk4MzRCMjUwOTFBODMxNTBDMDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkJRTQ0MzZF
QzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLywKIAkJCQlFNDQz
NkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tICovLAog
CQkJKTsKQEAgLTc2ODMsNiArNzY5Miw3IEBACiAJCQkJMUEyMTYxQjAxMUYzNzY2NDAwOEFEMEY1
IC8qIE5QUnVudGltZU9iamVjdE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyMTYyQjExMUYz
ODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEyRDg0QTMxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuaCBpbiBIZWFkZXJzICov
LAorCQkJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBP
YmpDT2JqZWN0R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhG
OUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZC
MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc5MzMs
NiArNzk0Myw3IEBACiAJCQkJNzU5Q0NENUExODA4RjYxNjAwNzhFOEE4IC8qIFdlYk9yaWdpbkRh
dGFNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1RTc0OUVDMTgwREJCOTgwMDA4
OEJBNiAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDMyRDhGMTBGNDM3QTAwMDU4QzE1QSAvKiBXZWJQYWdlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4MzRCMjUwRDFBODMxODRCMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9y
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIwNjEyOUEwQTY3MDBEMTc0QTQgLyogV2Vi
UGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjI1MjEyQTQzQzk2MDBEMTc0QTQg
LyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMTUxMkE0MjE5
QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTk0NjMs
NiArOTQ3NCw3IEBACiAJCQkJN0MzRjhDOTAxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9y
bWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTM1QUFDMTczQjBDRkYwMDU4NkFFMiAv
KiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRUZDQzEzMTFE
MDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
ODM0QjI1MEMxQTgzMTg0NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29h
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFRkNDQkQxMUQwMkM1RTAwODIxOUQzIC8qIFBsdWdp
bkluZm9TdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBM0Q2MTAxMTNBN0NDMkEwMEY5
NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQzOTc3
MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246082</attachid>
            <date>2015-02-04 22:26:37 -0800</date>
            <delta_ts>2015-02-04 22:31:27 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>29266</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IDgxZjI0YTQuLjhhY2JhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTUzLDYgKzU0LDkgQEAgYm9vbCBO
ZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAg
bV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBjb25kaXRpb25hbCBiYXNlZCBvbiBhIHNldHRpbmcuCisgICAg
bV9zdGF0c1N0b3JhZ2UgPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Om9wZW4oY2FjaGVQYXRo
KTsKKwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNo
ZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3Rv
cmFnZTsKIH0KQEAgLTIyMCwxNCArMjI0LDIzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAK
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHBy
aW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVz
dFVSTCA9IG9yaWdpbmFsUmVxdWVzdC51cmwoKTsKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFn
ZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmll
dmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAg
ICAgICAgICAgIG1fc3RhdHNTdG9yYWdlLT53YXNQcmV2aW91c2x5U2VlbihzdG9yYWdlS2V5LCBb
cmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgIGlm
ICh3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBzZWVuIGJ1dCB3YXNuJ3Qg
Y2FjaGVhYmxlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCi0gICAgTmV0d29ya0Nh
Y2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKICAgICB1
bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpOwogCiAgICAgLy8g
Q2FwdHVyZWQgZGF0YSBpcyBnb2luZyB0byBiZSBzaHVmZmxlZCBhcm91bmQgdGhyZWFkcy4gQXZv
aWQgdW5zYWZlIGNvcHlpbmcuCkBAIC0yMzgsMTQgKzI1MSwyNiBAQCB2b2lkIE5ldHdvcmtDYWNo
ZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIHN0ZAogICAgIC8vIEZJWE1FOiBXaXRoIEMrKzE0IHRoaXMgY291bGQgdXNlIHVuaXF1ZV9w
dHIgYW5kIGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlCiAgICAgYXV0byBjYXB0dXJlID0gc3Rk
OjptYWtlX3NoYXJlZDxDYXB0dXJlPihDYXB0dXJlIHsgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0
aW9uSGFuZGxlciB9KTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJp
b3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0
b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgY2FwdHVyZSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5
LCByZXF1ZXN0VVJMXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+
IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisgICAgICAg
ICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzU3RvcmFn
ZS0+d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJl
dmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlTZWVu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUg
Y2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhcHR1cmUtPmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2Rl
U3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0KTsKICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMgaW4g
dGhlIGNhY2hlIGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisg
ICAgICAgIH0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYK
QEAgLTMzMCw2ICszNTUsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlm
IChtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0
c1N0b3JhZ2UpCisgICAgICAgIG1fc3RhdHNTdG9yYWdlLT5jbGVhcigpOworfQorCitTdHJpbmcg
TmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFn
ZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5k
ZXggYTcwNTc1MS4uYjZjM2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgVVJMOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOwor
CiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtD
YWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hl
PjsKQEAgLTY4LDExICs3MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKKyAg
ICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBOZXR3b3JrQ2Fj
aGUoKSA9IGRlZmF1bHQ7CiAgICAgfk5ldHdvcmtDYWNoZSgpID0gZGVsZXRlOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPiBtX3N0YXRzU3RvcmFnZTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzRmZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIq
IGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50
KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAt
PmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8
ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVu
Y3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKworaW5s
aW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFy
dGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0
aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5h
bWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VE
aXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0
aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxl
bmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rp
b24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
aW5saW5lIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYg
a2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleS5wYXJ0aXRp
b24oKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOworfQorCitpbmxpbmUgU3RyaW5nIGZp
bGVQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFzU3RyaW5nKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdHNTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZmMwMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKyNkZWZpbmUgTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisj
aW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gb3Blbihjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCB3YXNQcmV2aW91
c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wg
d2FzUHJldmlvdXNseVNlZW4pPik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya0Nh
Y2hlU3RhdHNTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RhdHNEaXJlY3RvcnlQYXRoKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYm9vdHN0YXBGcm9tTmV0d29ya0NhY2hlKCk7
CisgICAgdm9pZCBtYXJrQXNTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYpOworICAgIHZvaWQg
c2hyaW5rSWZOZWVkZWQoKTsKKworICAgIGNvbnN0IFN0cmluZyBtX3N0YXRzRGlyZWN0b3J5UGF0
aDsKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9wcmV2aW91c2x5U2VlbkZpbHRlcjsKKworICAgIHN0
ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgc3RkOjph
dG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlDb3VudCB7IDAgfTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gbV9i
YWNrZ3JvdW5kSU9RdWV1ZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjg2NTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2VDb2NvYS5tbQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
LmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0c1N1YmRpcmVjdG9yeSA9ICJXZWJLaXRD
YWNoZVN0YXRzIjsKKworc3RhdGljIHZvaWQgY3JlYXRlRW1wdHlGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpk
aXJlY3RvcnlOYW1lKHBhdGgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaGFuZGxlID0g
V2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICBXZWJD
b3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZT4gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBT
dHJpbmcgbmV0d29ya0NhY2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3RvcnkpOworICAgIGlm
ICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlU3RhdHNTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlKG5ldHdvcmtD
YWNoZVN0YXRzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Ok5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICA6
IG1fc3RhdHNEaXJlY3RvcnlQYXRoKHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICAsIG1fYmFja2dy
b3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuQ2FjaGUuU3RhdHNTdG9yYWdlLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9D
T05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZShtX2JhY2tncm91
bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVF
X1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIg
PSBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0c1Bh
dGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2Jh
Y2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgY2FjaGVTdGF0c1BhdGhDYXB0dXJlLCAmZGlz
a1ByZXZpb3VzbHlTZWVuRmlsdGVyXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0aCA9
IGNhY2hlU3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZp
bGVzKGNhY2hlU3RhdHNQYXRoLCBbdGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlcl0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29y
a0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVL
ZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgZGlza1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAg
ICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChtX2FwcHJveGltYXRlRW50cnlDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBCb290c3RyYXAgdGhlIHN0YXRzIGNhY2hlIGZyb20gbmV0d29yayBjYWNoZSBzdG9y
YWdlLgorICAgICAgICBTdHJpbmcgY2FjaGVQYXRoID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5zdG9yYWdlUGF0aCgpOworICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBb
dGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlciwgJmNhY2hlUGF0aCwgJmNhY2hlU3RhdHNQ
YXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgp
IHsKKyAgICAgICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAgICAgICAg
ICAgIGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpc2tQcmV2aW91c2x5U2VlbkZp
bHRlci5hZGQoaGFzaCk7CisgICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50Owor
CisgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgZmlsZSBpbiBjYWNoZSBzdGF0cyBmb2xkZXIu
CisgICAgICAgICAgICBTdHJpbmcgc3RhdHNQYXJ0aXRpb25QYXRoID0gcGFydGl0aW9uUGF0aDsK
KyAgICAgICAgICAgIHN0YXRzUGFydGl0aW9uUGF0aC5yZXBsYWNlKGNhY2hlUGF0aCwgY2FjaGVT
dGF0c1BhdGgpOworICAgICAgICAgICAgY3JlYXRlRW1wdHlGaWxlKFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChzdGF0c1BhcnRpdGlvblBhdGgsIGZpbGVOYW1lKSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZTo6c2hyaW5r
SWZOZWVkZWQoKQoreworICAgIC8vIEZvciBhIEJsb29tRmlsdGVyIHdpdGggMjAga2V5Qml0cywg
dGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgYmVjb21lcworICAgIC8vIH4zMCUgd2hlbiByZWFjaGlu
ZyBtYXhFbnRyaWVzIChzZWUgY29tbWVudCBpbiBCbG9vbUZpbHRlci5oKS4KKyAgICBjb25zdCBz
aXplX3QgbWF4RW50cmllcyA9IDEwMDAwMDsKKyAgICBjb25zdCBzaXplX3QgZXZlcnlOdGhFbnRy
eVRvRGVsZXRlID0gOCA7CisKKyAgICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPCBtYXhF
bnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaHJpbmtJblByb2dyZXNzKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zaHJpbmtJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIExP
RyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzaHJpbmtpbmcgc3RhdHMg
Y2FjaGUgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ9JWx1LCBtYXhFbnRyaWVzPSVsdSIsIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpLCBtYXhFbnRyaWVzKTsKKwor
ICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQ
YXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhp
cywgY2FjaGVTdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0
aCA9IGNhY2hlU3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgc2l6ZV90IGZvdW5k
RW50cnlDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBkZWxldGVkQ291bnQgPSAwOworICAgICAg
ICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVTdGF0c1BhdGgsIFt0aGlzLCAmZm91bmRFbnRyeUNv
dW50LCAmZGVsZXRlZENvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgICAgICsrZm91bmRFbnRyeUNvdW50OworICAgICAg
ICAgICAgaWYgKGZvdW5kRW50cnlDb3VudCAlIGV2ZXJ5TnRoRW50cnlUb0RlbGV0ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICArK2RlbGV0ZWRDb3VudDsKKworICAgICAg
ICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsKKworICAgICAgICAgICAgTmV0d29ya0NhY2hl
S2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0
cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMs
IGhhc2hdIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlD
b250YWluKGhhc2gpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVy
LnJlbW92ZShoYXNoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgbV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQgPSBmb3VuZEVudHJ5Q291bnQgLSBkZWxldGVkQ291bnQ7Cisg
ICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOworCisgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdGF0cyBjYWNoZSBzaHJpbmsgY29tcGxl
dGVkIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVT
dGF0c1N0b3JhZ2U6Om1hcmtBc1NlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQ7CisgICAgc2hyaW5rSWZOZWVkZWQoKTsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0
ZXIuYWRkKGtleS5oYXNoKCkpOworCisgICAgLy8gQ3JlYXRlIGVtcHR5IGZpbGUgaW4gY2FjaGUg
c3RhdHMgZm9sZGVyLgorICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRz
RGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW2tleSwgc3RhdHNQYXRoQ2FwdHVyZV0geworICAgICAgICBTdHJpbmcgcGF0aCA9IGZp
bGVQYXRoRm9yS2V5KGtleSwgc3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKSk7CisgICAgICAgIGNy
ZWF0ZUVtcHR5RmlsZShwYXRoKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2U6Ondhc1ByZXZpb3VzbHlTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX3By
ZXZpb3VzbHlTZWVuRmlsdGVyLm1heUNvbnRhaW4oa2V5Lmhhc2goKSkpIHsKKyAgICAgICAgbWFy
a0FzU2VlbihrZXkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9z
dGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVl
dWUuZ2V0KCksIFt0aGlzLCBzdGF0c1BhdGhDYXB0dXJlLCBrZXksIGNvbXBsZXRpb25IYW5kbGVy
XSB7CisgICAgICAgIGJvb2wgd2FzUHJldmlvdXNseVNlZW4gPSBXZWJDb3JlOjpmaWxlRXhpc3Rz
KGZpbGVQYXRoRm9yS2V5KGtleSwgc3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKSkpOworICAgICAg
ICBpZiAoIXdhc1ByZXZpb3VzbHlTZWVuKQorICAgICAgICAgICAgbWFya0FzU2VlbihrZXkpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNQcmV2aW91c2x5U2Vlbik7CisgICAgfSk7Cit9
CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpjbGVhcigpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuY2xlYXIo
KTsKKworICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5
UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3N0
YXRzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIHN0YXRzUGF0aCA9IHN0YXRzUGF0aENh
cHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN0YXRzUGF0aCwgRFRf
RElSLCBbJnN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAgICAg
ICBTdHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChz
dGF0c1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAgdHJhdmVyc2VEaXJlY3Rvcnkoc3Vi
ZGlyUGF0aCwgRFRfUkVHLCBbJnN1YmRpclBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoc3ViZGlyUGF0aCwgZmlsZU5hbWUpOworICAgICAgICAgICAgICAgIHVubGlu
ayhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJtZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihzdWJkaXJQYXRoKS5kYXRhKCkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNI
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCAwZTBlMzgyLi4zYzg1MDJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCkBAIC0xNDUsNiArMTQ1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHZlcnNpb24gPSAxOwogCisgICAgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXJlY3RvcnlQYXRoOyB9CisKIHByaXZhdGU6CiAgICAgTmV0d29y
a0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpOwogCkBAIC0xNjUsNiAr
MTY3LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9tYXhpbXVtU2l6ZSB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKIAogICAgIEJsb29tRmlsdGVyPDIwPiBtX2NvbnRl
bnRzRmlsdGVyOworCiAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlD
b3VudCB7IDAgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3Nocmlua0luUHJvZ3Jlc3MgeyBm
YWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KaW5kZXggYjFmYTJkZS4uNGNk
Yzg5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQpAQCAtMzAsOCArMzAsNyBAQAog
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgorI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPGRpc3BhdGNo
L2Rpc3BhdGNoLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5o
PgpAQCAtNDMsMzYgKzQyLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBj
aGFyKiBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkgPSAiV2ViS2l0Q2FjaGUiOwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQot
ewotICAgIERJUiogZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIHN0
cnVjdCBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAg
ICAgIGlmIChkcC0+ZF90eXBlICE9IHR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5h
bWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBmdW5jdGlvbihTdHJpbmcobmFtZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIp
OwotfQotCi1zdGF0aWMgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNo
ZVBhdGgsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXJ0aXRpb25QYXRoKT4gZnVuY3Rpb24pCi17Ci0gICAgdHJhdmVyc2VEaXJlY3Rv
cnkoY2FjaGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmlu
ZyYgc3ViZGlyTmFtZSkgewotICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOwotICAgICAg
ICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZw
YXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBpZiAo
ZmlsZU5hbWUubGVuZ3RoKCkgIT0gOCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotCiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQogICAgIDogbV9kaXNwYXRjaERhdGEoYWRvcHREaXNwYXRjaChk
aXNwYXRjaF9kYXRhX2NyZWF0ZShkYXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRDSF9EQVRBX0RF
U1RSVUNUT1JfREVGQVVMVCkpKQogICAgICwgbV9zaXplKHNpemUpCkBAIC0xNDQsMTcgKzExMyw2
IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6aW5pdGlhbGl6ZSgpCiAgICAgfSk7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgZGlyZWN0b3J5UGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFrZXkucGFydGl0
aW9uKCkuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwga2V5LnBhcnRpdGlvbigpKTsKLX0KLQotc3RhdGljIFN0cmluZyBm
aWxlUGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChkaXJlY3RvcnlQYXRoRm9yS2V5KGtleSwgY2FjaGVQYXRoKSwga2V5Lmhhc2hBc1N0cmluZygp
KTsKLX0KLQogZW51bSBjbGFzcyBGaWxlT3BlblR5cGUgeyBSZWFkLCBXcml0ZSwgQ3JlYXRlIH07
CiBzdGF0aWMgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfaW9fdD4gb3BlbkZpbGVGb3JLZXkoY29uc3Qg
TmV0d29ya0NhY2hlS2V5JiBrZXksIEZpbGVPcGVuVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCwgaW50JiBmZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDU1ODA3Li42NDExZTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ2LDYg
KzExNDYsOSBAQAogCQk3Q0Y0N0ZGRTE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFu
bmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLzsg
fTsKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQx
NzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgw
NTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQ
cm9jZXNzQ29jb2EubW0gKi87IH07CisJCTgzNEIyNTBDMUE4MzE4NDcwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLzsgfTsKKwkJODM0QjI1MEQxQTgzMTg0QjAwQ0ZCMTUw
IC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZS5oICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07CiAJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAv
KiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM3MkRCMjgxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1
IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdl
YlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwpAQCAtMzMxOSw2ICszMzIyLDkg
QEAKIAkJN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJh
bm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRkQxNzI3NkFF
MzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDgxQTgzMTUwQzAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDkxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0
YXRzU3RvcmFnZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0
MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAv
KiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03Mzc5LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4
OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIy
NTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywK
IAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywK
IAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJ
CQkJODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5o
ICovLAorCQkJCTgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0
b3JhZ2VDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVDMjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29y
a0NhY2hlU3RvcmFnZS5oICovLAogCQkJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3
b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkpOwpAQCAtNzY4Myw2ICs3NjkyLDcgQEAK
IAkJCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyog
TlBWYXJpYW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM4QUNBMTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzkzMyw2ICs3OTQzLDcgQEAKIAkJCQk3NTlDQ0Q1QTE4
MDhGNjE2MDA3OEU4QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzVFNzQ5RUMxODBEQkI5ODAwMDg4QkE2IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThD
MTVBIC8qIFdlYlBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTBEMUE4MzE4NEIwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
N0I2MjA2MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDN0I2MjUyMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzdCNjIxNTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJv
eHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTQ2Myw2ICs5NDc0LDcgQEAKIAkJCQk3QzNGOEM5MDE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFFRkNDMTMxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9T
dG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzRCMjUwQzFBODMxODQ3MDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUVG
Q0NCRDExRDAyQzVFMDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEzRDYxMDExM0E3Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwNDM5NzcxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblBy
b2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246083</attachid>
            <date>2015-02-04 22:31:27 -0800</date>
            <delta_ts>2015-02-04 22:51:46 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>29017</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IDgxZjI0YTQuLjhhY2JhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTUzLDYgKzU0LDkgQEAgYm9vbCBO
ZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAg
bV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBjb25kaXRpb25hbCBiYXNlZCBvbiBhIHNldHRpbmcuCisgICAg
bV9zdGF0c1N0b3JhZ2UgPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Om9wZW4oY2FjaGVQYXRo
KTsKKwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNo
ZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3Rv
cmFnZTsKIH0KQEAgLTIyMCwxNCArMjI0LDIzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAK
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHBy
aW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVz
dFVSTCA9IG9yaWdpbmFsUmVxdWVzdC51cmwoKTsKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFn
ZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmll
dmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAg
ICAgICAgICAgIG1fc3RhdHNTdG9yYWdlLT53YXNQcmV2aW91c2x5U2VlbihzdG9yYWdlS2V5LCBb
cmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgIGlm
ICh3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBzZWVuIGJ1dCB3YXNuJ3Qg
Y2FjaGVhYmxlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCi0gICAgTmV0d29ya0Nh
Y2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKICAgICB1
bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpOwogCiAgICAgLy8g
Q2FwdHVyZWQgZGF0YSBpcyBnb2luZyB0byBiZSBzaHVmZmxlZCBhcm91bmQgdGhyZWFkcy4gQXZv
aWQgdW5zYWZlIGNvcHlpbmcuCkBAIC0yMzgsMTQgKzI1MSwyNiBAQCB2b2lkIE5ldHdvcmtDYWNo
ZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIHN0ZAogICAgIC8vIEZJWE1FOiBXaXRoIEMrKzE0IHRoaXMgY291bGQgdXNlIHVuaXF1ZV9w
dHIgYW5kIGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlCiAgICAgYXV0byBjYXB0dXJlID0gc3Rk
OjptYWtlX3NoYXJlZDxDYXB0dXJlPihDYXB0dXJlIHsgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0
aW9uSGFuZGxlciB9KTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJp
b3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0
b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgY2FwdHVyZSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5
LCByZXF1ZXN0VVJMXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+
IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisgICAgICAg
ICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzU3RvcmFn
ZS0+d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJl
dmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlTZWVu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUg
Y2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhcHR1cmUtPmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2Rl
U3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0KTsKICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMgaW4g
dGhlIGNhY2hlIGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisg
ICAgICAgIH0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYK
QEAgLTMzMCw2ICszNTUsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlm
IChtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0
c1N0b3JhZ2UpCisgICAgICAgIG1fc3RhdHNTdG9yYWdlLT5jbGVhcigpOworfQorCitTdHJpbmcg
TmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFn
ZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5k
ZXggYTcwNTc1MS4uYjZjM2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgVVJMOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOwor
CiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtD
YWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hl
PjsKQEAgLTY4LDExICs3MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKKyAg
ICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBOZXR3b3JrQ2Fj
aGUoKSA9IGRlZmF1bHQ7CiAgICAgfk5ldHdvcmtDYWNoZSgpID0gZGVsZXRlOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPiBtX3N0YXRzU3RvcmFnZTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzRmZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIq
IGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50
KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAt
PmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8
ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVu
Y3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKworaW5s
aW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFy
dGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0
aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5h
bWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VE
aXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0
aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxl
bmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rp
b24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
aW5saW5lIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYg
a2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleS5wYXJ0aXRp
b24oKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOworfQorCitpbmxpbmUgU3RyaW5nIGZp
bGVQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFzU3RyaW5nKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdHNTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZmMwMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKyNkZWZpbmUgTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisj
aW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gb3Blbihjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCB3YXNQcmV2aW91
c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wg
d2FzUHJldmlvdXNseVNlZW4pPik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya0Nh
Y2hlU3RhdHNTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RhdHNEaXJlY3RvcnlQYXRoKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYm9vdHN0YXBGcm9tTmV0d29ya0NhY2hlKCk7
CisgICAgdm9pZCBtYXJrQXNTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYpOworICAgIHZvaWQg
c2hyaW5rSWZOZWVkZWQoKTsKKworICAgIGNvbnN0IFN0cmluZyBtX3N0YXRzRGlyZWN0b3J5UGF0
aDsKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9wcmV2aW91c2x5U2VlbkZpbHRlcjsKKworICAgIHN0
ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgc3RkOjph
dG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlDb3VudCB7IDAgfTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gbV9i
YWNrZ3JvdW5kSU9RdWV1ZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjg2NTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2VDb2NvYS5tbQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
LmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0c1N1YmRpcmVjdG9yeSA9ICJXZWJLaXRD
YWNoZVN0YXRzIjsKKworc3RhdGljIHZvaWQgY3JlYXRlRW1wdHlGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpk
aXJlY3RvcnlOYW1lKHBhdGgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaGFuZGxlID0g
V2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICBXZWJD
b3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZT4gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBT
dHJpbmcgbmV0d29ya0NhY2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3RvcnkpOworICAgIGlm
ICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlU3RhdHNTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlKG5ldHdvcmtD
YWNoZVN0YXRzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Ok5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICA6
IG1fc3RhdHNEaXJlY3RvcnlQYXRoKHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICAsIG1fYmFja2dy
b3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuQ2FjaGUuU3RhdHNTdG9yYWdlLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9D
T05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZShtX2JhY2tncm91
bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVF
X1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIg
PSBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0c1Bh
dGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2Jh
Y2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgY2FjaGVTdGF0c1BhdGhDYXB0dXJlLCAmZGlz
a1ByZXZpb3VzbHlTZWVuRmlsdGVyXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0aCA9
IGNhY2hlU3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZp
bGVzKGNhY2hlU3RhdHNQYXRoLCBbdGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlcl0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29y
a0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVL
ZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgZGlza1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAg
ICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChtX2FwcHJveGltYXRlRW50cnlDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBCb290c3RyYXAgdGhlIHN0YXRzIGNhY2hlIGZyb20gbmV0d29yayBjYWNoZSBzdG9y
YWdlLgorICAgICAgICBTdHJpbmcgY2FjaGVQYXRoID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5zdG9yYWdlUGF0aCgpOworICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBb
dGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlciwgJmNhY2hlUGF0aCwgJmNhY2hlU3RhdHNQ
YXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgp
IHsKKyAgICAgICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAgICAgICAg
ICAgIGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpc2tQcmV2aW91c2x5U2VlbkZp
bHRlci5hZGQoaGFzaCk7CisgICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50Owor
CisgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgZmlsZSBpbiBjYWNoZSBzdGF0cyBmb2xkZXIu
CisgICAgICAgICAgICBTdHJpbmcgc3RhdHNQYXJ0aXRpb25QYXRoID0gcGFydGl0aW9uUGF0aDsK
KyAgICAgICAgICAgIHN0YXRzUGFydGl0aW9uUGF0aC5yZXBsYWNlKGNhY2hlUGF0aCwgY2FjaGVT
dGF0c1BhdGgpOworICAgICAgICAgICAgY3JlYXRlRW1wdHlGaWxlKFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChzdGF0c1BhcnRpdGlvblBhdGgsIGZpbGVOYW1lKSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZTo6c2hyaW5r
SWZOZWVkZWQoKQoreworICAgIC8vIEZvciBhIEJsb29tRmlsdGVyIHdpdGggMjAga2V5Qml0cywg
dGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgYmVjb21lcworICAgIC8vIH4zMCUgd2hlbiByZWFjaGlu
ZyBtYXhFbnRyaWVzIChzZWUgY29tbWVudCBpbiBCbG9vbUZpbHRlci5oKS4KKyAgICBjb25zdCBz
aXplX3QgbWF4RW50cmllcyA9IDEwMDAwMDsKKyAgICBjb25zdCBzaXplX3QgZXZlcnlOdGhFbnRy
eVRvRGVsZXRlID0gOCA7CisKKyAgICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPCBtYXhF
bnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaHJpbmtJblByb2dyZXNzKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zaHJpbmtJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIExP
RyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzaHJpbmtpbmcgc3RhdHMg
Y2FjaGUgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ9JWx1LCBtYXhFbnRyaWVzPSVsdSIsIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpLCBtYXhFbnRyaWVzKTsKKwor
ICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQ
YXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhp
cywgY2FjaGVTdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0
aCA9IGNhY2hlU3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgc2l6ZV90IGZvdW5k
RW50cnlDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBkZWxldGVkQ291bnQgPSAwOworICAgICAg
ICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVTdGF0c1BhdGgsIFt0aGlzLCAmZm91bmRFbnRyeUNv
dW50LCAmZGVsZXRlZENvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgICAgICsrZm91bmRFbnRyeUNvdW50OworICAgICAg
ICAgICAgaWYgKGZvdW5kRW50cnlDb3VudCAlIGV2ZXJ5TnRoRW50cnlUb0RlbGV0ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICArK2RlbGV0ZWRDb3VudDsKKworICAgICAg
ICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsKKworICAgICAgICAgICAgTmV0d29ya0NhY2hl
S2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0
cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMs
IGhhc2hdIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlD
b250YWluKGhhc2gpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVy
LnJlbW92ZShoYXNoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgbV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQgPSBmb3VuZEVudHJ5Q291bnQgLSBkZWxldGVkQ291bnQ7Cisg
ICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOworCisgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdGF0cyBjYWNoZSBzaHJpbmsgY29tcGxl
dGVkIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVT
dGF0c1N0b3JhZ2U6Om1hcmtBc1NlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQ7CisgICAgc2hyaW5rSWZOZWVkZWQoKTsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0
ZXIuYWRkKGtleS5oYXNoKCkpOworCisgICAgLy8gQ3JlYXRlIGVtcHR5IGZpbGUgaW4gY2FjaGUg
c3RhdHMgZm9sZGVyLgorICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRz
RGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW2tleSwgc3RhdHNQYXRoQ2FwdHVyZV0geworICAgICAgICBTdHJpbmcgcGF0aCA9IGZp
bGVQYXRoRm9yS2V5KGtleSwgc3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKSk7CisgICAgICAgIGNy
ZWF0ZUVtcHR5RmlsZShwYXRoKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2U6Ondhc1ByZXZpb3VzbHlTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX3By
ZXZpb3VzbHlTZWVuRmlsdGVyLm1heUNvbnRhaW4oa2V5Lmhhc2goKSkpIHsKKyAgICAgICAgbWFy
a0FzU2VlbihrZXkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9z
dGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVl
dWUuZ2V0KCksIFt0aGlzLCBzdGF0c1BhdGhDYXB0dXJlLCBrZXksIGNvbXBsZXRpb25IYW5kbGVy
XSB7CisgICAgICAgIGJvb2wgd2FzUHJldmlvdXNseVNlZW4gPSBXZWJDb3JlOjpmaWxlRXhpc3Rz
KGZpbGVQYXRoRm9yS2V5KGtleSwgc3RhdHNQYXRoQ2FwdHVyZS5zdHJpbmcoKSkpOworICAgICAg
ICBpZiAoIXdhc1ByZXZpb3VzbHlTZWVuKQorICAgICAgICAgICAgbWFya0FzU2VlbihrZXkpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNQcmV2aW91c2x5U2Vlbik7CisgICAgfSk7Cit9
CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpjbGVhcigpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuY2xlYXIo
KTsKKworICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5
UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3N0
YXRzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIHN0YXRzUGF0aCA9IHN0YXRzUGF0aENh
cHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN0YXRzUGF0aCwgRFRf
RElSLCBbJnN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAgICAg
ICBTdHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChz
dGF0c1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAgdHJhdmVyc2VEaXJlY3Rvcnkoc3Vi
ZGlyUGF0aCwgRFRfUkVHLCBbJnN1YmRpclBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoc3ViZGlyUGF0aCwgZmlsZU5hbWUpOworICAgICAgICAgICAgICAgIHVubGlu
ayhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJtZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihzdWJkaXJQYXRoKS5kYXRhKCkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNI
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCAwZTBlMzgyLi45NDQ3NGQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCkBAIC0xNDUsNiArMTQ1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHZlcnNpb24gPSAxOwogCisgICAgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXJlY3RvcnlQYXRoOyB9CisKIHByaXZhdGU6CiAgICAgTmV0d29y
a0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlQ29jb2EubW0KaW5kZXggYjFmYTJkZS4uNGNkYzg5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2VDb2NvYS5tbQpAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmls
ZVN5c3RlbS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAjaW5jbHVk
ZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtNDMsMzYgKzQyLDYgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdWJk
aXJlY3RvcnkgPSAiV2ViS2l0Q2FjaGUiOwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ4
X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIERJUiogZGlyID0gb3Bl
bmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAg
ICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIHN0cnVjdCBkaXJlbnQqIGRwOwotICAg
IHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9
IHR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9
IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChu
YW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihTdHJp
bmcobmFtZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwotfQotCi1zdGF0aWMgdm9pZCB0
cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRo
KT4gZnVuY3Rpb24pCi17Ci0gICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBEVF9ESVIs
IFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewotICAg
ICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShw
YXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0g
OCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFt
ZSwgcGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCiBOZXR3b3JrQ2Fj
aGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQog
ICAgIDogbV9kaXNwYXRjaERhdGEoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0ZShk
YXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfREVGQVVMVCkpKQog
ICAgICwgbV9zaXplKHNpemUpCkBAIC0xNDQsMTcgKzExMyw2IEBAIHZvaWQgTmV0d29ya0NhY2hl
U3RvcmFnZTo6aW5pdGlhbGl6ZSgpCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZGlyZWN0
b3J5UGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwga2V5
LnBhcnRpdGlvbigpKTsKLX0KLQotc3RhdGljIFN0cmluZyBmaWxlUGF0aEZvcktleShjb25zdCBO
ZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCi17Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnlQYXRoRm9yS2V5
KGtleSwgY2FjaGVQYXRoKSwga2V5Lmhhc2hBc1N0cmluZygpKTsKLX0KLQogZW51bSBjbGFzcyBG
aWxlT3BlblR5cGUgeyBSZWFkLCBXcml0ZSwgQ3JlYXRlIH07CiBzdGF0aWMgRGlzcGF0Y2hQdHI8
ZGlzcGF0Y2hfaW9fdD4gb3BlbkZpbGVGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXks
IEZpbGVPcGVuVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgaW50JiBmZCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA4ZDU1ODA3Li42NDExZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ2LDYgKzExNDYsOSBAQAogCQk3Q0Y0N0ZG
RTE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkMxNzI3NkFFMzAwOEFD
QjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLzsgfTsKIAkJN0NGNDdGRkYxNzI3NkFF
MzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdL
QnVuZGxlUGFnZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vz
c0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi87IH07
CisJCTgzNEIyNTBDMUE4MzE4NDcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VD
b2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgz
NEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5t
bSAqLzsgfTsKKwkJODM0QjI1MEQxQTgzMTg0QjAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRz
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oICov
OyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmgg
Ki87IH07CiAJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
ODM3MkRCMjgxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzcy
REIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNw
cCAqLzsgfTsKIAkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oICovOyB9OwpAQCAtMzMxOSw2ICszMzIyLDkgQEAKIAkJN0NGNDdGRkMxNzI3NkFF
MzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxl
UGFnZUJhbm5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRs
ZVBhZ2VCYW5uZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0VDNEYwRjkx
OEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3Jr
Q2FjaGVTdGF0c1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1
MDkxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdHNT
dG9yYWdlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTBFMUE4
MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBX
S1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
Mzc5LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3
b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQzNkVDMDFBMENGREIy
MDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFBMENGREIy
MDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1MDgxQTgzMTUwQzAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oICovLAorCQkJCTgzNEIyNTA5MUE4
MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLywKIAkJ
CQlFNDQzNkVDMjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oICovLAog
CQkJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2Eu
bW0gKi8sCiAJCQkpOwpAQCAtNzY4Myw2ICs3NjkyLDcgQEAKIAkJCQkxQTIxNjFCMDExRjM3NjY0
MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIx
NjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QUNBMTMxNjY3MEQ4OTAwNEMx
OTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjY3MkQxMkM3
RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNzkzMyw2ICs3OTQzLDcgQEAKIAkJCQk3NTlDQ0Q1QTE4MDhGNjE2MDA3OEU4QTggLyogV2Vi
T3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVFNzQ5RUMxODBE
QkI5ODAwMDg4QkE2IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTgzNEIyNTBEMUE4MzE4NEIwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVT
dGF0c1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjA2MTI5QTBBNjcwMEQxNzRB
NCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjUyMTJBNDNDOTYw
MEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIx
NTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCBpbiBIZWFkZXJzICovLApA
QCAtOTQ2Myw2ICs5NDc0LDcgQEAKIAkJCQk3QzNGOEM5MDE3M0FGNTJEMDA3QjdGMzkgLyogUGx1
Z2luSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxMzVBQUMxNzNCMENGRjAw
NTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFF
RkNDMTMxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4MzRCMjUwQzFBODMxODQ3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9y
YWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUVGQ0NCRDExRDAyQzVFMDA4MjE5RDMg
LyogUGx1Z2luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzRDYxMDExM0E3
Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEwNDM5NzcxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246090</attachid>
            <date>2015-02-04 22:51:46 -0800</date>
            <delta_ts>2015-02-05 12:57:38 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>29099</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IDgxZjI0YTQuLjhhY2JhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTUzLDYgKzU0LDkgQEAgYm9vbCBO
ZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAg
bV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBjb25kaXRpb25hbCBiYXNlZCBvbiBhIHNldHRpbmcuCisgICAg
bV9zdGF0c1N0b3JhZ2UgPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Om9wZW4oY2FjaGVQYXRo
KTsKKwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNo
ZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3Rv
cmFnZTsKIH0KQEAgLTIyMCwxNCArMjI0LDIzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAK
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHBy
aW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVz
dFVSTCA9IG9yaWdpbmFsUmVxdWVzdC51cmwoKTsKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFn
ZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmll
dmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAg
ICAgICAgICAgIG1fc3RhdHNTdG9yYWdlLT53YXNQcmV2aW91c2x5U2VlbihzdG9yYWdlS2V5LCBb
cmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgIGlm
ICh3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBzZWVuIGJ1dCB3YXNuJ3Qg
Y2FjaGVhYmxlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCi0gICAgTmV0d29ya0Nh
Y2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKICAgICB1
bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpOwogCiAgICAgLy8g
Q2FwdHVyZWQgZGF0YSBpcyBnb2luZyB0byBiZSBzaHVmZmxlZCBhcm91bmQgdGhyZWFkcy4gQXZv
aWQgdW5zYWZlIGNvcHlpbmcuCkBAIC0yMzgsMTQgKzI1MSwyNiBAQCB2b2lkIE5ldHdvcmtDYWNo
ZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIHN0ZAogICAgIC8vIEZJWE1FOiBXaXRoIEMrKzE0IHRoaXMgY291bGQgdXNlIHVuaXF1ZV9w
dHIgYW5kIGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlCiAgICAgYXV0byBjYXB0dXJlID0gc3Rk
OjptYWtlX3NoYXJlZDxDYXB0dXJlPihDYXB0dXJlIHsgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0
aW9uSGFuZGxlciB9KTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJp
b3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0
b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgY2FwdHVyZSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5
LCByZXF1ZXN0VVJMXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+
IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisgICAgICAg
ICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzU3RvcmFn
ZS0+d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJl
dmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlTZWVu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUg
Y2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhcHR1cmUtPmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2Rl
U3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0KTsKICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMgaW4g
dGhlIGNhY2hlIGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisg
ICAgICAgIH0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYK
QEAgLTMzMCw2ICszNTUsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlm
IChtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0
c1N0b3JhZ2UpCisgICAgICAgIG1fc3RhdHNTdG9yYWdlLT5jbGVhcigpOworfQorCitTdHJpbmcg
TmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFn
ZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5k
ZXggYTcwNTc1MS4uYjZjM2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgVVJMOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOwor
CiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtD
YWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hl
PjsKQEAgLTY4LDExICs3MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKKyAg
ICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBOZXR3b3JrQ2Fj
aGUoKSA9IGRlZmF1bHQ7CiAgICAgfk5ldHdvcmtDYWNoZSgpID0gZGVsZXRlOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPiBtX3N0YXRzU3RvcmFnZTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzRmZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIq
IGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50
KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAt
PmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8
ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVu
Y3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKworaW5s
aW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFy
dGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0
aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5h
bWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VE
aXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0
aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxl
bmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rp
b24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
aW5saW5lIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYg
a2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleS5wYXJ0aXRp
b24oKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOworfQorCitpbmxpbmUgU3RyaW5nIGZp
bGVQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFzU3RyaW5nKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdHNTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZmMwMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKyNkZWZpbmUgTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisj
aW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gb3Blbihjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCB3YXNQcmV2aW91
c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wg
d2FzUHJldmlvdXNseVNlZW4pPik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya0Nh
Y2hlU3RhdHNTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RhdHNEaXJlY3RvcnlQYXRoKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYm9vdHN0YXBGcm9tTmV0d29ya0NhY2hlKCk7
CisgICAgdm9pZCBtYXJrQXNTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYpOworICAgIHZvaWQg
c2hyaW5rSWZOZWVkZWQoKTsKKworICAgIGNvbnN0IFN0cmluZyBtX3N0YXRzRGlyZWN0b3J5UGF0
aDsKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9wcmV2aW91c2x5U2VlbkZpbHRlcjsKKworICAgIHN0
ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgc3RkOjph
dG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlDb3VudCB7IDAgfTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gbV9i
YWNrZ3JvdW5kSU9RdWV1ZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2U5YjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2VDb2NvYS5tbQpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
LmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0c1N1YmRpcmVjdG9yeSA9ICJXZWJLaXRD
YWNoZVN0YXRzIjsKKworc3RhdGljIHZvaWQgY3JlYXRlRW1wdHlGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpk
aXJlY3RvcnlOYW1lKHBhdGgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaGFuZGxlID0g
V2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICBXZWJD
b3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0YXRzU3RvcmFnZT4gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBT
dHJpbmcgbmV0d29ya0NhY2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3RvcnkpOworICAgIGlm
ICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlU3RhdHNTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlKG5ldHdvcmtD
YWNoZVN0YXRzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Ok5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICA6
IG1fc3RhdHNEaXJlY3RvcnlQYXRoKHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICAsIG1fYmFja2dy
b3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuQ2FjaGUuU3RhdHNTdG9yYWdlLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9D
T05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZShtX2JhY2tncm91
bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVF
X1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIg
PSBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0c1Bh
dGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBTdHJpbmdDYXB0dXJlIGNhY2hl
UGF0aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yYWdlUGF0aCgpKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgY2FjaGVT
dGF0c1BhdGhDYXB0dXJlLCBjYWNoZVBhdGhDYXB0dXJlLCAmZGlza1ByZXZpb3VzbHlTZWVuRmls
dGVyXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0aCA9IGNhY2hlU3RhdHNQYXRoQ2Fw
dHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlU3RhdHNQYXRo
LCBbdGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlcl0oY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlw
ZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmluZ1RvSGFzaChm
aWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGlz
a1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAgICAgICAgICsrbV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChtX2FwcHJveGltYXRl
RW50cnlDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBCb290c3RyYXAg
dGhlIHN0YXRzIGNhY2hlIGZyb20gbmV0d29yayBjYWNoZSBzdG9yYWdlLgorICAgICAgICBTdHJp
bmcgY2FjaGVQYXRoID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVy
c2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgW3RoaXMsICZkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIs
ICZjYWNoZVBhdGgsICZjYWNoZVN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6
Okhhc2hUeXBlIGhhc2g7CisgICAgICAgICAgICBpZiAoIU5ldHdvcmtDYWNoZUtleTo6c3RyaW5n
VG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGhhc2gpOworICAgICAgICAgICAgKytt
X2FwcHJveGltYXRlRW50cnlDb3VudDsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5IGZp
bGUgaW4gY2FjaGUgc3RhdHMgZm9sZGVyLgorICAgICAgICAgICAgU3RyaW5nIHN0YXRzUGFydGl0
aW9uUGF0aCA9IHBhcnRpdGlvblBhdGg7CisgICAgICAgICAgICBzdGF0c1BhcnRpdGlvblBhdGgu
cmVwbGFjZShjYWNoZVBhdGgsIGNhY2hlU3RhdHNQYXRoKTsKKyAgICAgICAgICAgIGNyZWF0ZUVt
cHR5RmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RhdHNQYXJ0aXRpb25Q
YXRoLCBmaWxlTmFtZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3Jr
Q2FjaGVTdGF0c1N0b3JhZ2U6OnNocmlua0lmTmVlZGVkKCkKK3sKKyAgICAvLyBGb3IgYSBCbG9v
bUZpbHRlciB3aXRoIDIwIGtleUJpdHMsIHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRlIGJlY29tZXMK
KyAgICAvLyB+MzAlIHdoZW4gcmVhY2hpbmcgbWF4RW50cmllcyAoc2VlIGNvbW1lbnQgaW4gQmxv
b21GaWx0ZXIuaCkuCisgICAgY29uc3Qgc2l6ZV90IG1heEVudHJpZXMgPSAxMDAwMDA7CisgICAg
Y29uc3Qgc2l6ZV90IGV2ZXJ5TnRoRW50cnlUb0RlbGV0ZSA9IDggOworCisgICAgaWYgKG1fYXBw
cm94aW1hdGVFbnRyeUNvdW50IDwgbWF4RW50cmllcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fc2hyaW5rSW5Qcm9ncmVzcykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hyaW5rSW5Q
cm9ncmVzcyA9IHRydWU7CisKKyAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3Jr
UHJvY2Vzcykgc2hyaW5raW5nIHN0YXRzIGNhY2hlIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVs
dSwgbWF4RW50cmllcz0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRy
eUNvdW50KSwgbWF4RW50cmllcyk7CisKKyAgICBTdHJpbmdDYXB0dXJlIGNhY2hlU3RhdHNQYXRo
Q2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNr
Z3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGNhY2hlU3RhdHNQYXRoQ2FwdHVyZV0geworICAg
ICAgICBTdHJpbmcgY2FjaGVTdGF0c1BhdGggPSBjYWNoZVN0YXRzUGF0aENhcHR1cmUuc3RyaW5n
KCk7CisgICAgICAgIHNpemVfdCBmb3VuZEVudHJ5Q291bnQgPSAwOworICAgICAgICBzaXplX3Qg
ZGVsZXRlZENvdW50ID0gMDsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlU3RhdHNQ
YXRoLCBbdGhpcywgJmZvdW5kRW50cnlDb3VudCwgJmRlbGV0ZWRDb3VudF0oY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgICAgICAr
K2ZvdW5kRW50cnlDb3VudDsKKyAgICAgICAgICAgIGlmIChmb3VuZEVudHJ5Q291bnQgJSBldmVy
eU50aEVudHJ5VG9EZWxldGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
KytkZWxldGVkQ291bnQ7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUoV2ViQ29y
ZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKSk7CisK
KyAgICAgICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAgICAgICAgICAg
IGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBoYXNoXSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
cHJldmlvdXNseVNlZW5GaWx0ZXIubWF5Q29udGFpbihoYXNoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcmV2aW91c2x5U2VlbkZpbHRlci5yZW1vdmUoaGFzaCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0gZm91bmRFbnRy
eUNvdW50IC0gZGVsZXRlZENvdW50OworICAgICAgICBtX3Nocmlua0luUHJvZ3Jlc3MgPSBmYWxz
ZTsKKworICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2Vzcykg
c3RhdHMgY2FjaGUgc2hyaW5rIGNvbXBsZXRlZCBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUi
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjptYXJrQXNTZWVuKGNvbnN0IE5l
dHdvcmtDYWNoZUtleSYga2V5KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAgIHNocmlua0lmTmVlZGVkKCk7CisK
KyAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChrZXkuaGFzaCgpKTsKKworICAgIC8vIENy
ZWF0ZSBlbXB0eSBmaWxlIGluIGNhY2hlIHN0YXRzIGZvbGRlci4KKyAgICBTdHJpbmdDYXB0dXJl
IHN0YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2Fz
eW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtrZXksIHN0YXRzUGF0aENhcHR1cmVdIHsK
KyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0aEZvcktleShrZXksIHN0YXRzUGF0aENhcHR1
cmUuc3RyaW5nKCkpOworICAgICAgICBjcmVhdGVFbXB0eUZpbGUocGF0aCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjp3YXNQcmV2aW91c2x5U2Vlbihjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc1ByZXZp
b3VzbHlTZWVuKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGlmICghbV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlDb250YWluKGtl
eS5oYXNoKCkpKSB7CisgICAgICAgIG1hcmtBc1NlZW4oa2V5KTsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nQ2Fw
dHVyZSBzdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRj
aF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgc3RhdHNQYXRoQ2FwdHVy
ZSwga2V5LCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBib29sIHdhc1ByZXZpb3VzbHlT
ZWVuID0gV2ViQ29yZTo6ZmlsZUV4aXN0cyhmaWxlUGF0aEZvcktleShrZXksIHN0YXRzUGF0aENh
cHR1cmUuc3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKCF3YXNQcmV2aW91c2x5U2VlbikKKyAgICAg
ICAgICAgIG1hcmtBc1NlZW4oa2V5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzUHJl
dmlvdXNseVNlZW4pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFn
ZTo6Y2xlYXIoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3By
ZXZpb3VzbHlTZWVuRmlsdGVyLmNsZWFyKCk7CisKKyAgICBTdHJpbmdDYXB0dXJlIHN0YXRzUGF0
aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFj
a2dyb3VuZElPUXVldWUuZ2V0KCksIFtzdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmlu
ZyBzdGF0c1BhdGggPSBzdGF0c1BhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICB0cmF2ZXJz
ZURpcmVjdG9yeShzdGF0c1BhdGgsIERUX0RJUiwgWyZzdGF0c1BhdGhdKGNvbnN0IFN0cmluZyYg
c3ViZGlyTmFtZSkgeworICAgICAgICAgICAgU3RyaW5nIHN1YmRpclBhdGggPSBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RhdHNQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAg
ICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN1YmRpclBhdGgsIERUX1JFRywgWyZzdWJkaXJQYXRoXShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVQYXRo
ID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN1YmRpclBhdGgsIGZpbGVOYW1l
KTsKKyAgICAgICAgICAgICAgICB1bmxpbmsoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKGZpbGVQYXRoKS5kYXRhKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBybWRp
cihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ViZGlyUGF0aCkuZGF0YSgpKTsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXggMGUwZTM4
Mi4uOTQ0NzRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTQ1LDYgKzE0NSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gMTsKIAorICAgIGNvbnN0
IFN0cmluZyYgZGlyZWN0b3J5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0b3J5UGF0aDsg
fQorCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJl
Y3RvcnlQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCmluZGV4IGIxZmEyZGUu
LjRjZGM4OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KQEAgLTMwLDggKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4K
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKICNpbmNsdWRlIDxkaXNw
YXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0
YXQuaD4KQEAgLTQzLDM2ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29u
c3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5ID0gIldlYktpdENhY2hlIjsKIAotdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGljIHZvaWQgdHJhdmVyc2VEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewot
ICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0cmNt
cChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIo
ZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYg
Y2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQotewotICAgIHRyYXZlcnNlRGly
ZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBT
dHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAg
ICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9u
LCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgewotICAgICAgICAgICAg
aWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQogTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IG1fZGlzcGF0Y2hEYXRhKGFkb3B0RGlzcGF0
Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFU
QV9ERVNUUlVDVE9SX0RFRkFVTFQpKSkKICAgICAsIG1fc2l6ZShzaXplKQpAQCAtMTQ0LDE3ICsx
MTMsNiBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmluaXRpYWxpemUoKQogICAgIH0pOwog
fQogCi1zdGF0aWMgU3RyaW5nIGRpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hl
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIEFTU0VSVCgha2V5LnBh
cnRpdGlvbigpLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChjYWNoZVBhdGgsIGtleS5wYXJ0aXRpb24oKSk7Ci19Ci0KLXN0YXRpYyBTdHJp
bmcgZmlsZVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoKQotewotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoZGlyZWN0b3J5UGF0aEZvcktleShrZXksIGNhY2hlUGF0aCksIGtleS5oYXNoQXNTdHJp
bmcoKSk7Ci19Ci0KIGVudW0gY2xhc3MgRmlsZU9wZW5UeXBlIHsgUmVhZCwgV3JpdGUsIENyZWF0
ZSB9Owogc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNoX2lvX3Q+IG9wZW5GaWxlRm9yS2V5KGNv
bnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBGaWxlT3BlblR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBjYWNoZVBhdGgsIGludCYgZmQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQ1NTgwNy4uNjQxMWU2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE0
Niw2ICsxMTQ2LDkgQEAKIAkJN0NGNDdGRkUxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFn
ZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0g
Ki87IH07CiAJCTdDRjQ3RkZGMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJN
YWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3
RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JC
MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3
b3JrUHJvY2Vzc0NvY29hLm1tICovOyB9OworCQk4MzRCMjUwQzFBODMxODQ3MDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwOTFBODMxNTBDMDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gKi87IH07CisJCTgzNEIyNTBEMUE4MzE4NEIwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTA4MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCAqLzsgfTsKKwkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUw
IC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oICovOyB9OwogCQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3
QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBX
S1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgzNzJEQjI4MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi87IH07CiAJCTgzNzJEQjI5MUE2NzU2MjgwMEM2
OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAv
KiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKQEAgLTMzMTksNiArMzMy
Miw5IEBACiAJCTdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0J1bmRsZVBh
Z2VCYW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjQ3RkZEMTcy
NzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vz
c0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTA4MUE4MzE1
MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmls
ZVN5c3RlbVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtD
YWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzcy
REIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjYxQTY3NTYyODAw
QzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM3OSw4ICs3Mzg1LDExIEBACiAJCQkJRTQ4OUQyODcx
QTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCAqLywKIAkJCQlFNDg5RDI4
ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgKi8sCiAJCQkJRTQ4
OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLywKKwkJCQk4
MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmgg
Ki8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAg
Ki8sCiAJCQkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5oICov
LAorCQkJCTgzNEIyNTA4MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3Jh
Z2UuaCAqLywKKwkJCQk4MzRCMjUwOTFBODMxNTBDMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dHNTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5l
dHdvcmtDYWNoZVN0b3JhZ2UuaCAqLywKIAkJCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyog
TmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tICovLAogCQkJKTsKQEAgLTc2ODMsNiArNzY5Miw3
IEBACiAJCQkJMUEyMTYxQjAxMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyMTYyQjExMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGlt
ZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDg0QTMxMjdGNkFEMTAwMUVCOTYy
IC8qIE5QVmFyaWFudERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTBGMUE4MzFBOEQw
MENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGguaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFz
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdl
QmFubmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc5MzMsNiArNzk0Myw3IEBACiAJCQkJNzU5Q0NE
NUExODA4RjYxNjAwNzhFOEE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc1RTc0OUVDMTgwREJCOTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5EYXRhTWFu
YWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDhGMTBGNDM3QTAw
MDU4QzE1QSAvKiBXZWJQYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRCMjUwRDFBODMxODRC
MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzdCNjIwNjEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzdCNjI1MjEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMTUxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91
cFByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTk0NjMsNiArOTQ3NCw3IEBACiAJCQkJN0MzRjhD
OTAxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDMTM1QUFDMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBRUZDQzEzMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5J
bmZvU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODM0QjI1MEMxQTgzMTg0NzAwQ0ZCMTUw
IC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFFRkNDQkQxMUQwMkM1RTAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBM0Q2MTAxMTNBN0NDMkEwMEY5NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQzOTc3MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVn
aW5Qcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246123</attachid>
            <date>2015-02-05 12:57:38 -0800</date>
            <delta_ts>2015-02-05 14:46:36 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>29380</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IGVjZGFiMWIuLjVlZWM1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTUzLDYgKzU0LDkgQEAgYm9vbCBO
ZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAg
bV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBjb25kaXRpb25hbCBiYXNlZCBvbiBhIHNldHRpbmcuCisgICAg
bV9zdGF0c1N0b3JhZ2UgPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Om9wZW4oY2FjaGVQYXRo
KTsKKwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNo
ZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3Rv
cmFnZTsKIH0KQEAgLTIyMCwyMyArMjI0LDQ0IEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAK
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHBy
aW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVz
dFVSTCA9IG9yaWdpbmFsUmVxdWVzdC51cmwoKTsKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFn
ZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmll
dmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAg
ICAgICAgICAgIG1fc3RhdHNTdG9yYWdlLT53YXNQcmV2aW91c2x5U2VlbihzdG9yYWdlS2V5LCBb
cmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgIGlm
ICh3YXNQcmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBzZWVuIGJ1dCB3YXNuJ3Qg
Y2FjaGVhYmxlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIE5ldHdvcmtDYWNo
ZUtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgdW5z
aWduZWQgcHJpb3JpdHkgPSBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKTsKIAotICAgIG1fc3Rv
cmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVl
c3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0
b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFu
ZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCByZXF1ZXN0VVJMXShzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkp
IHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBm
b3VuZCBpbiBzdG9yYWdlIik7CisgICAgICAgICAgICBpZiAobV9zdGF0c1N0b3JhZ2UpIHsKKyAg
ICAgICAgICAgICAgICBtX3N0YXRzU3RvcmFnZS0+d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtl
eSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBjYWNo
ZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUgY2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFn
bm9zdGljIGxvZ2dpbmcuCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVj
b2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgb3JpZ2luYWxSZXF1ZXN0KTsK
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
JXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0VVJMLnN0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxv
Z2dpbmcuCisgICAgICAgIH0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNl
ZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7
CiAjZW5kaWYKQEAgLTMyMSw2ICszNDYsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkK
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIp
OwogICAgIGlmIChtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBp
ZiAobV9zdGF0c1N0b3JhZ2UpCisgICAgICAgIG1fc3RhdHNTdG9yYWdlLT5jbGVhcigpOworfQor
CitTdHJpbmcgTmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RvcmFnZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmgKaW5kZXggYTcwNTc1MS4uYjZjM2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xh
c3MgVVJMOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNT
dG9yYWdlOworCiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5ldHdvcmtDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TmV0
d29ya0NhY2hlPjsKQEAgLTY4LDExICs3MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFy
KCk7CiAKKyAgICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBO
ZXR3b3JrQ2FjaGUoKSA9IGRlZmF1bHQ7CiAgICAgfk5ldHdvcmtDYWNoZSgpID0gZGVsZXRlOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPiBtX3N0YXRzU3RvcmFn
ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3Np
eC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sK
KyAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1
Y3QgZGlyZW50KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAg
ICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1l
LCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsK
K30KKworaW5saW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQ
YXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0
cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5
KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcm
IHN1YmRpck5hbWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAg
dHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFy
dGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZp
bGVOYW1lLmxlbmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKworaW5saW5lIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtD
YWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWtl
eS5wYXJ0aXRpb24oKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOworfQorCitpbmxpbmUg
U3RyaW5nIGZpbGVQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBT
dHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFz
U3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdHNTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZjFmNjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKyNk
ZWZpbmUgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gb3Blbihj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCB3
YXNQcmV2aW91c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pPiYpOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0
b3J5UGF0aCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIGJvb3RzdGFwRnJv
bU5ldHdvcmtDYWNoZSgpOworICAgIHZvaWQgbWFya0FzU2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVL
ZXkmKTsKKyAgICB2b2lkIHNocmlua0lmTmVlZGVkKCk7CisKKyAgICBzdHJ1Y3QgUHJldmlvdXNs
eVNlZW5RdWVyeSB7CisgICAgICAgIE5ldHdvcmtDYWNoZUtleSBrZXk7CisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNQcmV2aW91c2x5U2Vlbik+IGNvbXBsZXRpb25IYW5kbGVy
OworICAgIH07CisKKyAgICBjb25zdCBTdHJpbmcgbV9zdGF0c0RpcmVjdG9yeVBhdGg7CisgICAg
Qmxvb21GaWx0ZXI8MjA+IG1fcHJldmlvdXNseVNlZW5GaWx0ZXI7CisKKyAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX3Nocmlua0luUHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgIHN0ZDo6YXRvbWljPHNp
emVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgeyAwIH07CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3Vu
ZElPUXVldWU7CisjZW5kaWYKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcmV2
aW91c2x5U2VlblF1ZXJ5Pj4gbV9hY3RpdmVRdWVyaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5l
dHdvcmtDYWNoZVN0YXRzU3RvcmFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNv
Y29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGU1NDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5
c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0c1N1YmRpcmVjdG9yeSA9
ICJXZWJLaXRDYWNoZVN0YXRzIjsKKworc3RhdGljIHZvaWQgY3JlYXRlRW1wdHlGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhX
ZWJDb3JlOjpkaXJlY3RvcnlOYW1lKHBhdGgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
aGFuZGxlID0gV2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsK
KyAgICBXZWJDb3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpvcGVuKGNv
bnN0IFN0cmluZyYgY2FjaGVQYXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBTdHJpbmcgbmV0d29ya0NhY2hlU3RhdHNQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0NhY2hlU3RhdHNTdWJkaXJlY3Rvcnkp
OworICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVN0YXRz
UGF0aCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdl
KG5ldHdvcmtDYWNoZVN0YXRzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6
Ok5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZShjb25zdCBTdHJpbmcmIHN0YXRzRGlyZWN0b3J5UGF0
aCkKKyAgICA6IG1fc3RhdHNEaXJlY3RvcnlQYXRoKHN0YXRzRGlyZWN0b3J5UGF0aCkKKyAgICAs
IG1fYmFja2dyb3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUo
ImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdHNTdG9yYWdlLkJhY2tncm91bmQiLCBESVNQQVRD
SF9RVUVVRV9DT05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZSht
X2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BB
VENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUoKTsK
K30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OmluaXRpYWxpemUoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBkaXNrUHJldmlvdXNseVNl
ZW5GaWx0ZXIgPSBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworICAgIFN0cmluZ0NhcHR1cmUgY2Fj
aGVTdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBTdHJpbmdDYXB0
dXJlIGNhY2hlUGF0aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yYWdlUGF0
aCgpKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhp
cywgY2FjaGVTdGF0c1BhdGhDYXB0dXJlLCBjYWNoZVBhdGhDYXB0dXJlLCAmZGlza1ByZXZpb3Vz
bHlTZWVuRmlsdGVyXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRzUGF0aCA9IGNhY2hlU3Rh
dHNQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hl
U3RhdHNQYXRoLCBbdGhpcywgJmRpc2tQcmV2aW91c2x5U2VlbkZpbHRlcl0oY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5
OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmlu
Z1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgZGlza1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAgICAgICAgICsr
bV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChtX2Fw
cHJveGltYXRlRW50cnlDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBC
b290c3RyYXAgdGhlIHN0YXRzIGNhY2hlIGZyb20gbmV0d29yayBjYWNoZSBzdG9yYWdlLgorICAg
ICAgICBTdHJpbmcgY2FjaGVQYXRoID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAg
ICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgW3RoaXMsICZkaXNrUHJldmlvdXNseVNl
ZW5GaWx0ZXIsICZjYWNoZVBhdGgsICZjYWNoZVN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgICAgICBOZXR3b3Jr
Q2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgICAgICBpZiAoIU5ldHdvcmtDYWNoZUtl
eTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGhhc2gpOworICAgICAg
ICAgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKworICAgICAgICAgICAgLy8gQ3JlYXRl
IGVtcHR5IGZpbGUgaW4gY2FjaGUgc3RhdHMgZm9sZGVyLgorICAgICAgICAgICAgU3RyaW5nIHN0
YXRzUGFydGl0aW9uUGF0aCA9IHBhcnRpdGlvblBhdGg7CisgICAgICAgICAgICBzdGF0c1BhcnRp
dGlvblBhdGgucmVwbGFjZShjYWNoZVBhdGgsIGNhY2hlU3RhdHNQYXRoKTsKKyAgICAgICAgICAg
IGNyZWF0ZUVtcHR5RmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RhdHNQ
YXJ0aXRpb25QYXRoLCBmaWxlTmFtZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6OnNocmlua0lmTmVlZGVkKCkKK3sKKyAgICAvLyBG
b3IgYSBCbG9vbUZpbHRlciB3aXRoIDIwIGtleUJpdHMsIHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRl
IGJlY29tZXMKKyAgICAvLyB+MzAlIHdoZW4gcmVhY2hpbmcgbWF4RW50cmllcyAoc2VlIGNvbW1l
bnQgaW4gQmxvb21GaWx0ZXIuaCkuCisgICAgY29uc3Qgc2l6ZV90IG1heEVudHJpZXMgPSAxMDAw
MDA7CisgICAgY29uc3Qgc2l6ZV90IGV2ZXJ5TnRoRW50cnlUb0RlbGV0ZSA9IDggOworCisgICAg
aWYgKG1fYXBwcm94aW1hdGVFbnRyeUNvdW50IDwgbWF4RW50cmllcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc2hyaW5rSW5Qcm9ncmVzcykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2hyaW5rSW5Qcm9ncmVzcyA9IHRydWU7CisKKyAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwg
IihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIHN0YXRzIGNhY2hlIG1fYXBwcm94aW1hdGVFbnRy
eUNvdW50PSVsdSwgbWF4RW50cmllcz0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94
aW1hdGVFbnRyeUNvdW50KSwgbWF4RW50cmllcyk7CisKKyAgICBTdHJpbmdDYXB0dXJlIGNhY2hl
U3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5
bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGNhY2hlU3RhdHNQYXRoQ2FwdHVy
ZV0geworICAgICAgICBTdHJpbmcgY2FjaGVTdGF0c1BhdGggPSBjYWNoZVN0YXRzUGF0aENhcHR1
cmUuc3RyaW5nKCk7CisgICAgICAgIHNpemVfdCBmb3VuZEVudHJ5Q291bnQgPSAwOworICAgICAg
ICBzaXplX3QgZGVsZXRlZENvdW50ID0gMDsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNh
Y2hlU3RhdHNQYXRoLCBbdGhpcywgJmZvdW5kRW50cnlDb3VudCwgJmRlbGV0ZWRDb3VudF0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAg
ICAgICAgICArK2ZvdW5kRW50cnlDb3VudDsKKyAgICAgICAgICAgIGlmIChmb3VuZEVudHJ5Q291
bnQgJSBldmVyeU50aEVudHJ5VG9EZWxldGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgKytkZWxldGVkQ291bnQ7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZp
bGUoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVO
YW1lKSk7CisKKyAgICAgICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAg
ICAgICAgICAgIGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhh
c2gpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBoYXNoXSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fcHJldmlvdXNseVNlZW5GaWx0ZXIubWF5Q29udGFpbihoYXNoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcmV2aW91c2x5U2VlbkZpbHRlci5yZW1vdmUoaGFzaCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0g
Zm91bmRFbnRyeUNvdW50IC0gZGVsZXRlZENvdW50OworICAgICAgICBtX3Nocmlua0luUHJvZ3Jl
c3MgPSBmYWxzZTsKKworICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3Jr
UHJvY2Vzcykgc3RhdHMgY2FjaGUgc2hyaW5rIGNvbXBsZXRlZCBtX2FwcHJveGltYXRlRW50cnlD
b3VudD0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjptYXJrQXNTZWVu
KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworCisgICAgbV9wcmV2aW91
c2x5U2VlbkZpbHRlci5hZGQoa2V5Lmhhc2goKSk7CisKKyAgICAvLyBDcmVhdGUgZW1wdHkgZmls
ZSBpbiBjYWNoZSBzdGF0cyBmb2xkZXIuCisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0c1BhdGhDYXB0
dXJlKG1fc3RhdHNEaXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91
bmRJT1F1ZXVlLmdldCgpLCBba2V5LCBzdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmlu
ZyBwYXRoID0gZmlsZVBhdGhGb3JLZXkoa2V5LCBzdGF0c1BhdGhDYXB0dXJlLnN0cmluZygpKTsK
KyAgICAgICAgY3JlYXRlRW1wdHlGaWxlKHBhdGgpOworICAgIH0pOworCisgICAgc2hyaW5rSWZO
ZWVkZWQoKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U6Ondhc1ByZXZpb3Vz
bHlTZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pPiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9wcmV2aW91c2x5U2VlbkZp
bHRlci5tYXlDb250YWluKGtleS5oYXNoKCkpKSB7CisgICAgICAgIG1hcmtBc1NlZW4oa2V5KTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYXV0byBwcmV2aW91c2x5U2VlblF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxQcmV2
aW91c2x5U2VlblF1ZXJ5PihQcmV2aW91c2x5U2VlblF1ZXJ5IHsga2V5LCBjb21wbGV0aW9uSGFu
ZGxlciB9KTsKKyAgICBhdXRvJiBxdWVyeSA9ICpwcmV2aW91c2x5U2VlblF1ZXJ5OworICAgIG1f
YWN0aXZlUXVlcmllcy5hZGQoV1RGOjptb3ZlKHByZXZpb3VzbHlTZWVuUXVlcnkpKTsKKyAgICBT
dHJpbmdDYXB0dXJlIHN0YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAg
IGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBzdGF0c1Bh
dGhDYXB0dXJlLCAmcXVlcnldIHsKKyAgICAgICAgYm9vbCB3YXNQcmV2aW91c2x5U2VlbiA9IFdl
YkNvcmU6OmZpbGVFeGlzdHMoZmlsZVBhdGhGb3JLZXkocXVlcnkua2V5LCBzdGF0c1BhdGhDYXB0
dXJlLnN0cmluZygpKSk7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFt0aGlzLCAmcXVlcnksIHdhc1ByZXZpb3VzbHlTZWVuXSB7CisgICAgICAgICAg
ICBpZiAoIXdhc1ByZXZpb3VzbHlTZWVuKQorICAgICAgICAgICAgICAgIG1hcmtBc1NlZW4ocXVl
cnkua2V5KTsKKyAgICAgICAgICAgIHF1ZXJ5LmNvbXBsZXRpb25IYW5kbGVyKHdhc1ByZXZpb3Vz
bHlTZWVuKTsKKyAgICAgICAgICAgIG1fYWN0aXZlUXVlcmllcy5yZW1vdmUoJnF1ZXJ5KTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpj
bGVhcigpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcHJldmlv
dXNseVNlZW5GaWx0ZXIuY2xlYXIoKTsKKworICAgIFN0cmluZ0NhcHR1cmUgc3RhdHNQYXRoQ2Fw
dHVyZShtX3N0YXRzRGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3Jv
dW5kSU9RdWV1ZS5nZXQoKSwgW3N0YXRzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIHN0
YXRzUGF0aCA9IHN0YXRzUGF0aENhcHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlRGly
ZWN0b3J5KHN0YXRzUGF0aCwgRFRfRElSLCBbJnN0YXRzUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJk
aXJOYW1lKSB7CisgICAgICAgICAgICBTdHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChzdGF0c1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAg
dHJhdmVyc2VEaXJlY3Rvcnkoc3ViZGlyUGF0aCwgRFRfUkVHLCBbJnN1YmRpclBhdGhdKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3ViZGlyUGF0aCwgZmlsZU5hbWUpOwor
ICAgICAgICAgICAgICAgIHVubGluayhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZmlsZVBhdGgpLmRhdGEoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJtZGlyKFdl
YkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzdWJkaXJQYXRoKS5kYXRhKCkpOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCAwNjM0NTdjLi4x
MzAxYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0xNDYsNiArMTQ2LDggQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZlcnNpb24gPSAxOwogCisgICAgY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3RvcnlQYXRoOyB9CisK
IHByaXZhdGU6CiAgICAgTmV0d29ya0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eVBhdGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KaW5kZXggMmU0NDQ2MS4uYTA5
NTM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQpAQCAtMzAsOCArMzAsNyBAQAog
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgorI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPGRpc3BhdGNo
L2Rpc3BhdGNoLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5o
PgpAQCAtNDMsMzYgKzQyLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBj
aGFyKiBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkgPSAiV2ViS2l0Q2FjaGUiOwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQot
ewotICAgIERJUiogZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIHN0
cnVjdCBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAg
ICAgIGlmIChkcC0+ZF90eXBlICE9IHR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5h
bWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBmdW5jdGlvbihTdHJpbmcobmFtZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIp
OwotfQotCi1zdGF0aWMgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNo
ZVBhdGgsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXJ0aXRpb25QYXRoKT4gZnVuY3Rpb24pCi17Ci0gICAgdHJhdmVyc2VEaXJlY3Rv
cnkoY2FjaGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmlu
ZyYgc3ViZGlyTmFtZSkgewotICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOwotICAgICAg
ICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZw
YXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBpZiAo
ZmlsZU5hbWUubGVuZ3RoKCkgIT0gOCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotCiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQogICAgIDogbV9kaXNwYXRjaERhdGEoYWRvcHREaXNwYXRjaChk
aXNwYXRjaF9kYXRhX2NyZWF0ZShkYXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRDSF9EQVRBX0RF
U1RSVUNUT1JfREVGQVVMVCkpKQogICAgICwgbV9zaXplKHNpemUpCkBAIC0xNDQsMTcgKzExMyw2
IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6aW5pdGlhbGl6ZSgpCiAgICAgfSk7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgZGlyZWN0b3J5UGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFrZXkucGFydGl0
aW9uKCkuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwga2V5LnBhcnRpdGlvbigpKTsKLX0KLQotc3RhdGljIFN0cmluZyBm
aWxlUGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChkaXJlY3RvcnlQYXRoRm9yS2V5KGtleSwgY2FjaGVQYXRoKSwga2V5Lmhhc2hBc1N0cmluZygp
KTsKLX0KLQogZW51bSBjbGFzcyBGaWxlT3BlblR5cGUgeyBSZWFkLCBXcml0ZSwgQ3JlYXRlIH07
CiBzdGF0aWMgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfaW9fdD4gb3BlbkZpbGVGb3JLZXkoY29uc3Qg
TmV0d29ya0NhY2hlS2V5JiBrZXksIEZpbGVPcGVuVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCwgaW50JiBmZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDU1ODA3Li42NDExZTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ2LDYg
KzExNDYsOSBAQAogCQk3Q0Y0N0ZGRTE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFu
bmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLzsg
fTsKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQx
NzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgw
NTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQ
cm9jZXNzQ29jb2EubW0gKi87IH07CisJCTgzNEIyNTBDMUE4MzE4NDcwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLzsgfTsKKwkJODM0QjI1MEQxQTgzMTg0QjAwQ0ZCMTUw
IC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtD
YWNoZVN0YXRzU3RvcmFnZS5oICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07CiAJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAv
KiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM3MkRCMjgxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1
IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdl
YlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwpAQCAtMzMxOSw2ICszMzIyLDkg
QEAKIAkJN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJh
bm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRkQxNzI3NkFF
MzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDgxQTgzMTUwQzAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDkxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0
YXRzU3RvcmFnZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0
MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAv
KiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03Mzc5LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4
OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIy
NTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywK
IAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywK
IAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJ
CQkJODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5o
ICovLAorCQkJCTgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0
b3JhZ2VDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVDMjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29y
a0NhY2hlU3RvcmFnZS5oICovLAogCQkJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3
b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkpOwpAQCAtNzY4Myw2ICs3NjkyLDcgQEAK
IAkJCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyog
TlBWYXJpYW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM4QUNBMTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzkzMyw2ICs3OTQzLDcgQEAKIAkJCQk3NTlDQ0Q1QTE4
MDhGNjE2MDA3OEU4QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzVFNzQ5RUMxODBEQkI5ODAwMDg4QkE2IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThD
MTVBIC8qIFdlYlBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTBEMUE4MzE4NEIwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
N0I2MjA2MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDN0I2MjUyMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzdCNjIxNTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJv
eHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTQ2Myw2ICs5NDc0LDcgQEAKIAkJCQk3QzNGOEM5MDE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFFRkNDMTMxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9T
dG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzRCMjUwQzFBODMxODQ3MDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUVG
Q0NCRDExRDAyQzVFMDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEzRDYxMDExM0E3Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwNDM5NzcxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblBy
b2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246131</attachid>
            <date>2015-02-05 14:46:36 -0800</date>
            <delta_ts>2015-02-05 16:59:15 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>141269_NetworkCacheEfficacyLogging1_wip.patch</filename>
            <type>text/plain</type>
            <size>34132</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IGVjZGFiMWIuLmQ4MjU2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTQ5LDEwICs1MCwxMyBAQCBOZXR3
b3JrQ2FjaGUmIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CiAKLWJvb2wgTmV0d29ya0NhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQ
YXRoKQorYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBh
dGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKQogewogICAgIG1fc3RvcmFnZSA9IE5ldHdv
cmtDYWNoZVN0b3JhZ2U6Om9wZW4oY2FjaGVQYXRoKTsKIAorICAgIGlmIChlbmFibGVFZmZpY2Fj
eUxvZ2dpbmcpCisgICAgICAgIG1fc3RhdHNTdG9yYWdlID0gTmV0d29ya0NhY2hlU3RhdHNTdG9y
YWdlOjpvcGVuKGNhY2hlUGF0aCk7CisKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSBvcGVuZWQgY2FjaGUgc3RvcmFnZSwgc3VjY2VzcyAlZCIsICEhbV9zdG9yYWdlKTsK
ICAgICByZXR1cm4gISFtX3N0b3JhZ2U7CiB9CkBAIC0yMjAsMjMgKzIyNCw0NCBAQCB2b2lkIE5l
dHdvcmtDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIHN0ZAogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgcmV0cmlldmluZyAlcyBwcmlvcml0eSAldSIsIG9yaWdpbmFsUmVxdWVzdC51cmwoKS5zdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkpOwogCisgICAg
V2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSBvcmlnaW5hbFJlcXVlc3QudXJsKCk7CisgICAgTmV0
d29ya0NhY2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsK
ICAgICBpZiAoIWNhblJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCkpIHsKKyAgICAgICAgaWYgKGlz
RWZmaWNhY3lMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRzU3RvcmFnZS0+
d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3JlcXVlc3RVUkxdKGJvb2wgd2FzUHJldmlv
dXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAod2FzUHJldmlvdXNseVNlZW4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMg
d2FzIHByZXZpb3VzbHkgc2VlbiBidXQgd2Fzbid0IGNhY2hlYWJsZSIsIHJlcXVlc3RVUkwuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRG8g
ZGlhZ25vc3RpYyBsb2dnaW5nLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjpub3coKTsKLSAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNo
ZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxS
ZXF1ZXN0LnByaW9yaXR5KCk7CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXks
IHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3Rh
cnRUaW1lXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5
KSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMs
IG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtl
eSwgcmVxdWVzdFVSTF0oc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5
PiBlbnRyeSkgewogICAgICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29y
a0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOworICAgICAg
ICAgICAgaWYgKGlzRWZmaWNhY3lMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAg
bV9zdGF0c1N0b3JhZ2UtPndhc1ByZXZpb3VzbHlTZWVuKHN0b3JhZ2VLZXksIFtyZXF1ZXN0VVJM
XShib29sIHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3YXNQ
cmV2aW91c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgd2FzIHByZXZpb3VzbHkgY2FjaGVkIGJ1dCBpcyBubyBs
b25nZXIgaW4gdGhlIGNhY2hlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3RpYyBsb2dnaW5n
LgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhdXRvIGRlY29kZWRFbnRyeSA9IGRl
Y29kZVN0b3JhZ2VFbnRyeSgqZW50cnksIG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgICAgIGJvb2wg
c3VjY2VzcyA9ICEhZGVjb2RlZEVudHJ5OworICAgICAgICBpZiAoaXNFZmZpY2FjeUxvZ2dpbmdF
bmFibGVkKCkgJiYgIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpICVzIGlzIGluIHRoZSBjYWNoZSBidXQgaXNuJ3QgdXNhYmxlIiwgcmVx
dWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
RG8gZGlhZ25vc3RpYyBsb2dnaW5nLgorICAgICAgICB9CiAjaWYgIUxPR19ESVNBQkxFRAogICAg
ICAgICBhdXRvIGVsYXBzZWRNUyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3Rh
cnRUaW1lKS5jb3VudCgpOwogI2VuZGlmCkBAIC0zMjEsNiArMzQ2LDEzIEBAIHZvaWQgTmV0d29y
a0NhY2hlOjpjbGVhcigpCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
Y2xlYXJpbmcgY2FjaGUiKTsKICAgICBpZiAobV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2Ut
PmNsZWFyKCk7CisgICAgaWYgKG1fc3RhdHNTdG9yYWdlKQorICAgICAgICBtX3N0YXRzU3RvcmFn
ZS0+Y2xlYXIoKTsKK30KKworU3RyaW5nIE5ldHdvcmtDYWNoZTo6c3RvcmFnZVBhdGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N0b3JhZ2UgPyBtX3N0b3JhZ2UtPmRpcmVjdG9yeVBhdGgoKSA6
IFN0cmluZygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4IGE3MDU3NTEuLmUwZmJkMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCkBAIC00
MSwxMyArNDEsMTUgQEAgY2xhc3MgVVJMOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3Mg
TmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOworCiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6
TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hlPjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0d29y
a0NhY2hlJiBzaW5nbGV0b24oKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCk7CisgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRo
LCBib29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZyk7CiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShz
aXplX3QpOwogCiAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RvcmFn
ZTsgfQpAQCAtNjgsMTEgKzcwLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAor
ICAgIFN0cmluZyBzdG9yYWdlUGF0aCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIE5ldHdvcmtD
YWNoZSgpID0gZGVmYXVsdDsKICAgICB+TmV0d29ya0NhY2hlKCkgPSBkZWxldGU7CiAKKyAgICBi
b29sIGlzRWZmaWNhY3lMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdGF0c1N0
b3JhZ2U7IH0KKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPiBtX3N0
b3JhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4gbV9z
dGF0c1N0b3JhZ2U7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmU5NTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtUG9zaXguaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXhfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVLZXkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxk
aXJlbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cit2b2lkIHRyYXZlcnNlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVu
Y3Rpb24pCit7CisgICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm47
CisgICAgc3RydWN0IGRpcmVudCogZHA7CisgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkp
IHsKKyAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKKyAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7CisgICAgfQorICAgIGNsb3Nl
ZGlyKGRpcik7Cit9CisKK2lubGluZSB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKK3sKKyAgICB0cmF2ZXJz
ZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29u
c3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0g
V2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7
CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5j
dGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKKyAgICAgICAg
ICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSA4KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK2lubGluZSBTdHJpbmcgZGlyZWN0b3J5UGF0aEZvcktleShjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAg
QVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwga2V5LnBhcnRpdGlvbigpKTsKK30K
KworaW5saW5lIFN0cmluZyBmaWxlUGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtl
eSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnlQYXRoRm9yS2V5KGtleSwgY2FjaGVQYXRoKSwg
a2V5Lmhhc2hBc1N0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxZjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZVN0YXRzU3Rv
cmFnZV9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZV9oCisKKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0c1N0b3Jh
Z2U+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworCisgICAgdm9pZCBjbGVhcigpOwor
ICAgIHZvaWQgd2FzUHJldmlvdXNseVNlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc1ByZXZpb3VzbHlTZWVuKT4mKTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UoY29uc3QgU3RyaW5nJiBz
dGF0c0RpcmVjdG9yeVBhdGgpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBi
b290c3RhcEZyb21OZXR3b3JrQ2FjaGUoKTsKKyAgICB2b2lkIG1hcmtBc1NlZW4oY29uc3QgTmV0
d29ya0NhY2hlS2V5Jik7CisgICAgdm9pZCBzaHJpbmtJZk5lZWRlZCgpOworCisgICAgc3RydWN0
IFByZXZpb3VzbHlTZWVuUXVlcnkgeworICAgICAgICBOZXR3b3JrQ2FjaGVLZXkga2V5OworICAg
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pPiBjb21wbGV0
aW9uSGFuZGxlcjsKKyAgICB9OworCisgICAgY29uc3QgU3RyaW5nIG1fc3RhdHNEaXJlY3RvcnlQ
YXRoOworICAgIEJsb29tRmlsdGVyPDIwPiBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyOworCisgICAg
c3RkOjphdG9taWM8Ym9vbD4gbV9zaHJpbmtJblByb2dyZXNzIHsgZmFsc2UgfTsKKyAgICBzdGQ6
OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVFbnRyeUNvdW50IHsgMCB9OworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgbXV0YWJsZSBEaXNwYXRjaFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBt
X2JhY2tncm91bmRJT1F1ZXVlOworI2VuZGlmCisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8
Y29uc3QgUHJldmlvdXNseVNlZW5RdWVyeT4+IG1fYWN0aXZlUXVlcmllczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNl
bmRpZiAvLyBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
c1N0b3JhZ2VDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBl
NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0KQEAgLTAsMCArMSwyMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIgorCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3RhdHNTdWJk
aXJlY3RvcnkgPSAiV2ViS2l0Q2FjaGVTdGF0cyI7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUVtcHR5
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKCFXZWJDb3JlOjptYWtlQWxsRGly
ZWN0b3JpZXMoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShwYXRoKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGhhbmRsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKHBhdGgsIFdlYkNvcmU6Ok9wZW5G
b3JXcml0ZSk7CisgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGhhbmRsZSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2U+IE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFn
ZTo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgU3RyaW5nIG5ldHdvcmtDYWNoZVN0YXRzUGF0aCA9IFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIG5ldHdvcmtDYWNoZVN0YXRzU3Vi
ZGlyZWN0b3J5KTsKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhuZXR3b3Jr
Q2FjaGVTdGF0c1BhdGgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZT4obmV3IE5ldHdvcmtDYWNoZVN0
YXRzU3RvcmFnZShuZXR3b3JrQ2FjaGVTdGF0c1BhdGgpKTsKK30KKworTmV0d29ya0NhY2hlU3Rh
dHNTdG9yYWdlOjpOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdGF0c0Rp
cmVjdG9yeVBhdGgpCisgICAgOiBtX3N0YXRzRGlyZWN0b3J5UGF0aChzdGF0c0RpcmVjdG9yeVBh
dGgpCisgICAgLCBtX2JhY2tncm91bmRJT1F1ZXVlKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfcXVl
dWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRzU3RvcmFnZS5CYWNrZ3JvdW5k
IiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCkpKQoreworICAgIGRpc3BhdGNoX3NldF90YXJn
ZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9CQUNLR1JPVU5ELCAwKSk7CisKKyAgICBpbml0
aWFsaXplKCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjppbml0aWFsaXpl
KCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgZGlza1By
ZXZpb3VzbHlTZWVuRmlsdGVyID0gbV9wcmV2aW91c2x5U2VlbkZpbHRlcjsKKyAgICBTdHJpbmdD
YXB0dXJlIGNhY2hlU3RhdHNQYXRoQ2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5UGF0aCk7CisgICAg
U3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCku
c3RvcmFnZVBhdGgoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW3RoaXMsIGNhY2hlU3RhdHNQYXRoQ2FwdHVyZSwgY2FjaGVQYXRoQ2FwdHVyZSwgJmRp
c2tQcmV2aW91c2x5U2VlbkZpbHRlcl0geworICAgICAgICBTdHJpbmcgY2FjaGVTdGF0c1BhdGgg
PSBjYWNoZVN0YXRzUGF0aENhcHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlQ2FjaGVG
aWxlcyhjYWNoZVN0YXRzUGF0aCwgW3RoaXMsICZkaXNrUHJldmlvdXNseVNlZW5GaWx0ZXJdKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAgICAgIE5ldHdv
cmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAgICAgICAgICAgIGlmICghTmV0d29ya0NhY2hl
S2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGRpc2tQcmV2aW91c2x5U2VlbkZpbHRlci5hZGQoaGFzaCk7CisgICAg
ICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAgICAgICB9KTsKKworICAgICAg
ICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgLy8gQm9vdHN0cmFwIHRoZSBzdGF0cyBjYWNoZSBmcm9tIG5ldHdvcmsgY2FjaGUgc3Rv
cmFnZS4KKyAgICAgICAgU3RyaW5nIGNhY2hlUGF0aCA9IGNhY2hlUGF0aENhcHR1cmUuc3RyaW5n
KCk7CisgICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhjYWNoZVBhdGgsIFt0aGlzLCAmZGlza1By
ZXZpb3VzbHlTZWVuRmlsdGVyLCAmY2FjaGVQYXRoLCAmY2FjaGVTdGF0c1BhdGhdKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICAg
ICAgTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3
b3JrQ2FjaGVLZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgZGlza1ByZXZpb3VzbHlTZWVuRmlsdGVyLmFkZChoYXNo
KTsKKyAgICAgICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBlbXB0eSBmaWxlIGluIGNhY2hlIHN0YXRzIGZvbGRlci4KKyAgICAgICAgICAg
IFN0cmluZyBzdGF0c1BhcnRpdGlvblBhdGggPSBwYXJ0aXRpb25QYXRoOworICAgICAgICAgICAg
c3RhdHNQYXJ0aXRpb25QYXRoLnJlcGxhY2UoY2FjaGVQYXRoLCBjYWNoZVN0YXRzUGF0aCk7Cisg
ICAgICAgICAgICBjcmVhdGVFbXB0eUZpbGUoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHN0YXRzUGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjpzaHJpbmtJZk5lZWRlZCgpCit7
CisgICAgLy8gRm9yIGEgQmxvb21GaWx0ZXIgd2l0aCAyMCBrZXlCaXRzLCB0aGUgZmFsc2UgcG9z
aXRpdmUgcmF0ZSBiZWNvbWVzCisgICAgLy8gfjMwJSB3aGVuIHJlYWNoaW5nIG1heEVudHJpZXMg
KHNlZSBjb21tZW50IGluIEJsb29tRmlsdGVyLmgpLgorICAgIGNvbnN0IHNpemVfdCBtYXhFbnRy
aWVzID0gMTAwMDAwOworICAgIGNvbnN0IHNpemVfdCBldmVyeU50aEVudHJ5VG9EZWxldGUgPSA4
IDsKKworICAgIGlmIChtX2FwcHJveGltYXRlRW50cnlDb3VudCA8IG1heEVudHJpZXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3Nocmlua0luUHJvZ3Jlc3MpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3Nocmlua0luUHJvZ3Jlc3MgPSB0cnVlOworCisgICAgTE9HKE5ldHdvcmtDYWNo
ZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHNocmlua2luZyBzdGF0cyBjYWNoZSBtX2FwcHJv
eGltYXRlRW50cnlDb3VudD0lbHUsIG1heEVudHJpZXM9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2FwcHJveGltYXRlRW50cnlDb3VudCksIG1heEVudHJpZXMpOworCisgICAgU3RyaW5nQ2Fw
dHVyZSBjYWNoZVN0YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBjYWNoZVN0YXRz
UGF0aENhcHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIGNhY2hlU3RhdHNQYXRoID0gY2FjaGVTdGF0
c1BhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICBzaXplX3QgZm91bmRFbnRyeUNvdW50ID0g
MDsKKyAgICAgICAgc2l6ZV90IGRlbGV0ZWRDb3VudCA9IDA7CisgICAgICAgIHRyYXZlcnNlQ2Fj
aGVGaWxlcyhjYWNoZVN0YXRzUGF0aCwgW3RoaXMsICZmb3VuZEVudHJ5Q291bnQsICZkZWxldGVk
Q291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0
aCkgeworICAgICAgICAgICAgKytmb3VuZEVudHJ5Q291bnQ7CisgICAgICAgICAgICBpZiAoZm91
bmRFbnRyeUNvdW50ICUgZXZlcnlOdGhFbnRyeVRvRGVsZXRlKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICsrZGVsZXRlZENvdW50OworCisgICAgICAgICAgICBXZWJDb3Jl
OjpkZWxldGVGaWxlKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25Q
YXRoLCBmaWxlTmFtZSkpOworCisgICAgICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBl
IGhhc2g7CisgICAgICAgICAgICBpZiAoIU5ldHdvcmtDYWNoZUtleTo6c3RyaW5nVG9IYXNoKGZp
bGVOYW1lLCBoYXNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgaGFzaF0geworICAg
ICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzbHlTZWVuRmlsdGVyLm1heUNvbnRhaW4oaGFzaCkp
CisgICAgICAgICAgICAgICAgICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIucmVtb3ZlKGhhc2gp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBtX2FwcHJveGltYXRlRW50
cnlDb3VudCA9IGZvdW5kRW50cnlDb3VudCAtIGRlbGV0ZWRDb3VudDsKKyAgICAgICAgbV9zaHJp
bmtJblByb2dyZXNzID0gZmFsc2U7CisKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2Us
ICIoTmV0d29ya1Byb2Nlc3MpIHN0YXRzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQ9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50
cnlDb3VudCkpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZTo6
bWFya0FzU2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKworICAg
IG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGtleS5oYXNoKCkpOworCisgICAgLy8gQ3JlYXRl
IGVtcHR5IGZpbGUgaW4gY2FjaGUgc3RhdHMgZm9sZGVyLgorICAgIFN0cmluZ0NhcHR1cmUgc3Rh
dHNQYXRoQ2FwdHVyZShtX3N0YXRzRGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMo
bV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW2tleSwgc3RhdHNQYXRoQ2FwdHVyZV0geworICAg
ICAgICBTdHJpbmcgcGF0aCA9IGZpbGVQYXRoRm9yS2V5KGtleSwgc3RhdHNQYXRoQ2FwdHVyZS5z
dHJpbmcoKSk7CisgICAgICAgIGNyZWF0ZUVtcHR5RmlsZShwYXRoKTsKKyAgICB9KTsKKworICAg
IHNocmlua0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlOjp3
YXNQcmV2aW91c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkIChib29sIHdhc1ByZXZpb3VzbHlTZWVuKT4mIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fcHJldmlv
dXNseVNlZW5GaWx0ZXIubWF5Q29udGFpbihrZXkuaGFzaCgpKSkgeworICAgICAgICBtYXJrQXNT
ZWVuKGtleSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gcHJldmlvdXNseVNlZW5RdWVyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8UHJldmlvdXNseVNlZW5RdWVyeT4oUHJldmlvdXNseVNlZW5RdWVyeSB7IGtleSwgY29t
cGxldGlvbkhhbmRsZXIgfSk7CisgICAgYXV0byYgcXVlcnkgPSAqcHJldmlvdXNseVNlZW5RdWVy
eTsKKyAgICBtX2FjdGl2ZVF1ZXJpZXMuYWRkKFdURjo6bW92ZShwcmV2aW91c2x5U2VlblF1ZXJ5
KSk7CisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0c1BhdGhDYXB0dXJlKG1fc3RhdHNEaXJlY3RvcnlQ
YXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhp
cywgc3RhdHNQYXRoQ2FwdHVyZSwgJnF1ZXJ5XSB7CisgICAgICAgIGJvb2wgd2FzUHJldmlvdXNs
eVNlZW4gPSBXZWJDb3JlOjpmaWxlRXhpc3RzKGZpbGVQYXRoRm9yS2V5KHF1ZXJ5LmtleSwgc3Rh
dHNQYXRoQ2FwdHVyZS5zdHJpbmcoKSkpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnF1ZXJ5LCB3YXNQcmV2aW91c2x5U2Vlbl0gewor
ICAgICAgICAgICAgaWYgKCF3YXNQcmV2aW91c2x5U2VlbikKKyAgICAgICAgICAgICAgICBtYXJr
QXNTZWVuKHF1ZXJ5LmtleSk7CisgICAgICAgICAgICBxdWVyeS5jb21wbGV0aW9uSGFuZGxlcih3
YXNQcmV2aW91c2x5U2Vlbik7CisgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVtb3ZlKCZx
dWVyeSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRz
U3RvcmFnZTo6Y2xlYXIoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyLmNsZWFyKCk7CisKKyAgICBTdHJpbmdDYXB0dXJlIHN0
YXRzUGF0aENhcHR1cmUobV9zdGF0c0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5j
KG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtzdGF0c1BhdGhDYXB0dXJlXSB7CisgICAgICAg
IFN0cmluZyBzdGF0c1BhdGggPSBzdGF0c1BhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICB0
cmF2ZXJzZURpcmVjdG9yeShzdGF0c1BhdGgsIERUX0RJUiwgWyZzdGF0c1BhdGhdKGNvbnN0IFN0
cmluZyYgc3ViZGlyTmFtZSkgeworICAgICAgICAgICAgU3RyaW5nIHN1YmRpclBhdGggPSBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RhdHNQYXRoLCBzdWJkaXJOYW1lKTsKKyAg
ICAgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN1YmRpclBhdGgsIERUX1JFRywgWyZzdWJkaXJQ
YXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZp
bGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN1YmRpclBhdGgsIGZp
bGVOYW1lKTsKKyAgICAgICAgICAgICAgICB1bmxpbmsoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKGZpbGVQYXRoKS5kYXRhKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBybWRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ViZGlyUGF0aCkuZGF0
YSgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXgg
MDYzNDU3Yy4uMTMwMWFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTQ2LDYgKzE0Niw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gMTsKIAorICAg
IGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0b3J5
UGF0aDsgfQorCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZVN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBkaXJlY3RvcnlQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCmluZGV4IGRi
ZjAzY2EuLmFlODMxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KQEAgLTMwLDgg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVD
b2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxkaXJl
bnQuaD4KKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKICNpbmNsdWRl
IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8
c3lzL3N0YXQuaD4KQEAgLTQzLDM2ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0
aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5ID0gIldlYktpdENhY2hlIjsK
IAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGljIHZvaWQgdHJhdmVyc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIp
KSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAo
IXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0gICAgY2xv
c2VkaXIoZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0
cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQotewotICAgIHRyYXZl
cnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShj
b25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGgg
PSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1l
KTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1
bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgewotICAgICAg
ICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLX0KLQogTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IG1fZGlzcGF0Y2hEYXRhKGFkb3B0
RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFU
Q0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQpKSkKICAgICAsIG1fc2l6ZShzaXplKQpAQCAtMTQ1
LDE3ICsxMTQsNiBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmluaXRpYWxpemUoKQogICAg
IH0pOwogfQogCi1zdGF0aWMgU3RyaW5nIGRpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3QgTmV0d29y
a0NhY2hlS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIEFTU0VSVCgh
a2V5LnBhcnRpdGlvbigpLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIGtleS5wYXJ0aXRpb24oKSk7Ci19Ci0KLXN0YXRp
YyBTdHJpbmcgZmlsZVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aEZvcktleShrZXksIGNhY2hlUGF0aCksIGtleS5oYXNo
QXNTdHJpbmcoKSk7Ci19Ci0KIGVudW0gY2xhc3MgRmlsZU9wZW5UeXBlIHsgUmVhZCwgV3JpdGUs
IENyZWF0ZSB9Owogc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNoX2lvX3Q+IG9wZW5GaWxlRm9y
S2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBGaWxlT3BlblR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgsIGludCYgZmQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCA3
NjA0NDA5Li5lYWM1OGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTY0LDcgKzY0LDcgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2Nv
YShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBpZiAoIW1fZGlza0NhY2hlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEUpCi0gICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2Fj
aGVEaXJlY3RvcnkpKSB7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2Fj
aGVEaXJlY3RvcnksIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lM
b2dnaW5nKSkgewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+IHVybENhY2hlKGFk
b3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0Nh
cGFjaXR5OjAgZGlza1BhdGg6bmlsXSkpOwogICAgICAgICAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDU3OWUzNmIuLjAyMWE3MjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb24KICAgICBlbmNvZGVyIDw8IGRpc2tDYWNoZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBlbmNvZGVyIDw8IHNo
b3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKICNlbmRpZgogICAgIGVuY29kZXIgPDwgY29va2llU3Rv
cmFnZURpcmVjdG9yeTsKICNpZiBQTEFURk9STShJT1MpCkBAIC04Niw2ICs4Nyw4IEBAIGJvb2wg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgTmV0CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKICNl
bmRpZgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aAppbmRleCA0YTFlNGI3Li4xYTU0OTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKQEAgLTU4LDYgKzU4LDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZGlza0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGJvb2wgc2hvdWxk
RW5hYmxlTmV0d29ya0NhY2hlOworICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZm
aWNhY3lMb2dnaW5nOwogI2VuZGlmCiAKICAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9y
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW0KaW5kZXggOTE2NTNkYy4uZjAwYTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTgxLDYg
KzgxLDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0
c0tleSA9IEAiV2ViS2l0MkhUVFBTUHJveHkiOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVs
dHNLZXkgPSBAIldlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWQiOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5
ID0gQCJXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkIjsKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNiw2ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCByZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQog
ICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsK
KyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJs
ZWREZWZhdWx0c0tleV07CiAjZW5kaWYKIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6cmVnaXN0cmF0aW9uRGljdGlvbmFyeV07CkBA
IC0yNTIsNiArMjU0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlID0g
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXRO
ZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dp
bmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDU1ODA3Li42
NDExZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTQ2LDYgKzExNDYsOSBAQAogCQk3Q0Y0N0ZGRTE3Mjc2QUUzMDA4QUNC
OTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxl
UGFnZUJhbm5lck1hYy5tbSAqLzsgfTsKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkxIC8qIFdL
QnVuZGxlUGFnZUJhbm5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5l
ck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdFQzRGMEZCMThFNEFDQkIwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkxOEU0QTk0
NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi87IH07CisJCTgzNEIyNTBDMUE4
MzE4NDcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTA5MUE4MzE1MEMw
MENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLzsgfTsKKwkJODM0
QjI1MEQxQTgzMTg0QjAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MDgxQTgzMTUw
QzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5oICovOyB9OworCQk4MzRCMjUw
RjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThE
MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07CiAJCTgzNzJE
QjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjQxQTY3
NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM3MkRCMjgxQTY3NTYy
ODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNjFBNjc1NjI4MDBD
Njk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJODM3
MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjcx
QTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9
OwpAQCAtMzMxOSw2ICszMzIyLDkgQEAKIAkJN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdL
QnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFG
IC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0c1N0b3Jh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MDkxQTgzMTUwQzAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRzU3RvcmFnZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJE
QjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzc5LDggKzczODUsMTEg
QEAKIAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5o
ICovLAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVy
LmNwcCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5j
b2Rlci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1MDgxQTgzMTUwQzAwQ0ZCMTUwIC8qIE5ldHdv
cmtDYWNoZVN0YXRzU3RvcmFnZS5oICovLAorCQkJCTgzNEIyNTA5MUE4MzE1MEMwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2VDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVDMjFBMENG
REIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oICovLAogCQkJCUU0NDM2RUMzMUEw
Q0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkpOwpA
QCAtNzY4Myw2ICs3NjkyLDcgQEAKIAkJCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyogTlBS
dW50aW1lT2JqZWN0TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIxNjJCMTExRjM4OTcxMDA4
QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJEODRB
MzEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QUNBMTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmpl
Y3RHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5QzM1IC8q
IE9yaWdpbkFuZERhdGFiYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1
NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzkzMyw2ICs3OTQz
LDcgQEAKIAkJCQk3NTlDQ0Q1QTE4MDhGNjE2MDA3OEU4QTggLyogV2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVFNzQ5RUMxODBEQkI5ODAwMDg4QkE2IC8q
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMzJEOEYxMEY0MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTgzNEIyNTBEMUE4MzE4NEIwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0c1N0b3JhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDN0I2MjA2MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3Jv
dXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjUyMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQ
YWdlR3JvdXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIxNTEyQTQyMTlBMDBEMTc0
QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTQ2Myw2ICs5NDc0
LDcgQEAKIAkJCQk3QzNGOEM5MDE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdp
bkluZm9ybWF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFRkNDMTMxMUQwMUY5NjAw
ODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzRCMjUw
QzFBODMxODQ3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdHNTdG9yYWdlQ29jb2EubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQUVGQ0NCRDExRDAyQzVFMDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0
b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzRDYxMDExM0E3Q0MyQTAwRjk1RDRFIC8q
IFBsdWdpbk1vZHVsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwNDM5NzcxMjREMDM0
ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246139</attachid>
            <date>2015-02-05 16:59:19 -0800</date>
            <delta_ts>2015-02-05 17:16:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150205165919.patch</filename>
            <type>text/plain</type>
            <size>37061</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTdlNTM0N2M5N2ZkN2Qz
ZDdhMDM0MzU5NDViMWZmMGMyZjhlZDg1OC4uYWExMmFiYTQzYzY1Y2I2NmZiNzAzZGNiMDVmN2Y3
ODRjZWRjMmFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDE1LTAyLTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25zb2xlIGxvZ2dp
bmcgdG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kuIFRoaXMgd2lsbAorICAg
ICAgICB0ZWxsIHVzIGlmIHRoZSBuZXR3b3JrIGNhY2hlIGZhaWxzIGFzIHdlbGwgYXMgb25lIG9m
IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgcmVhc29uczoKKyAgICAgICAgLSBSZXF1ZXN0IGlzIG5v
dCBjYWNoZWFibGUKKyAgICAgICAgLSBXYXMgbm90IGluIHRoZSBjYWNoZSBidXQgaXMgbm8gbG9u
Z2VyIHRoZXJlIChwcnVuZWQpCisgICAgICAgIC0gSXMgaW4gdGhlIGNhY2hlIGJ1dCBpcyBub3Qg
dXNhYmxlCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZGlzay1iYXNlZCBuZXR3
b3JrIGNhY2hlIHN0YXRpc3RpY3Mgc3RvcmFnZQorICAgICAgICB0aGF0IGlzIHVzZWQgdG8gc3Rv
cmUgcmVxdWVzdHMgd2UgaGF2ZSBzZWVuIGJlZm9yZSwgYW5kIHF1ZXJ5IGlmIHdlCisgICAgICAg
IGhhdmUgc2VlbiBhIHJlcXVlc3QgYmVmb3JlLiBUaGUgc3RvcmFnZSBpcyBsaWdodHdlaWdodCBh
cyBpdCBtZXJlbHkKKyAgICAgICAgY3JlYXRlcyBlbXB0eSBmaWxlcyBpbiBhIGJhY2tncm91bmQg
dGhyZWFkLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29uLAorICAgICAgICB3ZSB1c2UgYSBibG9vbSBm
aWx0ZXIgdG8gYXZvaWQgYSBsb3Qgb2YgZGlzayBJL08gd2hlbiBxdWVyeWluZy4KKworICAgICAg
ICBUaGUgc3RhdGlzdGljcyBjYWNoZSBpcyBpbml0aWFsbHkgYm9vdHN0YXBwZWQgZnJvbSB0aGUg
bmV0d29yayBkaXNrCisgICAgICAgIGNhY2hlIHNvIHRoYXQgd2UgaGF2ZSBkYXRhIGluaXRpYWxs
eSBhbmQgZ2V0IGFzIGFjY3VyYXRlIHN0YXRpc3RpY3MKKyAgICAgICAgYXMgcG9zc2libGUgZnJv
bSB0aGUgc3RhcnQuCisKKyAgICAgICAgVG8gbWFpbnRhaW4gYW4gYWNjZXB0YWJsZSBsZXZlbCBv
ZiBwZXJmb3JtYW5jZSwgd2UgaGF2ZSBhIGhhcmQgbGltaXQKKyAgICAgICAgb24gdGhlIG51bWJl
ciBvZiB1bmlxdWUgcmVxdWVzdHMgdGhhdCBhcmUgcmV0YWluZWQgc2V0IHRvIDEwMDAwMCBhbmQK
KyAgICAgICAgYSBzb2Z0IGxpbWl0IGF0IDIwMDAwLiBBdCAxMDAwMDAsIHRoZSBibG9vbSBmaWx0
ZXIgcmVhY2hlcyBhIGZhbHNlCisgICAgICAgIHBvc2l0aXZlIHJhdGUgb2YgfjMwJS4gQXQgMjAw
MDAsIHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRlIGlzIG9ubHkgMC4xNCUuCisKKyAgICAgICAgRGlh
Z25vc3RpYyBsb2dnaW5nIGZvciB0aGlzIHdpbGwgYmUgYWRkZWQgaW4gYSBmb2xsb3ctdXAgcGF0
Y2guCisKKzIwMTUtMDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAg
ICAgICBbV0syXSBQcm9wZXJseSBjaGVjayBmb3IgbW1hcCgpIGVycm9yIGNhc2UKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTMwNAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApp
bmRleCBlY2RhYjFiNjM2ZWIyMmE1ODJkMGQwYzI0ZmI1NWFiMDE5OGU0MmZjLi41MmNmY2E4YmRj
ZDcxNzc4MDE5MTY4YjExZWUzNmVkNjlhNjU5NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMu
aCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiTmV0d29y
a0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtNDksMTAgKzUwLDEzIEBAIE5ldHdv
cmtDYWNoZSYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBpbnN0YW5jZTsK
IH0KIAotYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBh
dGgpCitib29sIE5ldHdvcmtDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0
aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiB7CiAgICAgbV9zdG9yYWdlID0gTmV0d29y
a0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAgaWYgKGVuYWJsZUVmZmljYWN5
TG9nZ2luZykKKyAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmFnZSA9IE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6Om9wZW4oY2FjaGVQYXRoKTsKKwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2Up
OwogICAgIHJldHVybiAhIW1fc3RvcmFnZTsKIH0KQEAgLTIyMCwyMyArMjI0LDQ2IEBAIHZvaWQg
TmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgc3RkCiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9j
ZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKKyAg
ICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IG9yaWdpbmFsUmVxdWVzdC51cmwoKTsKKyAgICBO
ZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3Qp
OwogICAgIGlmICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgICAgICBpZiAo
aXNFZmZpY2FjeUxvZ2dpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JhZ2UtPndhc1ByZXZpb3VzbHlTZWVuKHN0b3JhZ2VLZXksIFt0aGlzLCBzdG9yYWdlS2V5LCBy
ZXF1ZXN0VVJMXShib29sIHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAgaWYg
KHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IHNlZW4gYnV0IHdhc24ndCBj
YWNoZWFibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmFnZS0+bWFy
a0FzU2VlbihzdG9yYWdlS2V5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKLSAg
ICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVl
c3QpOwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCk7
CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywg
b3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lXShzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CisgICAgbV9zdG9yYWdl
LT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwg
Y29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgcmVxdWVzdFVSTF0oc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBlbnRyeSkgewogICAgICAg
ICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOworICAgICAgICAgICAgaWYgKGlzRWZmaWNh
Y3lMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmFn
ZS0+d2FzUHJldmlvdXNseVNlZW4oc3RvcmFnZUtleSwgW3RoaXMsIHN0b3JhZ2VLZXksIHJlcXVl
c3RVUkxdKGJvb2wgd2FzUHJldmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHdhc1ByZXZpb3VzbHlTZWVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0coTmV0d29y
a0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlz
IG5vIGxvbmdlciBpbiB0aGUgY2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxv
Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmFnZS0+bWFya0FzU2VlbihzdG9yYWdlS2V5KTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgb3JpZ2luYWxS
ZXF1ZXN0KTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAg
IGlmIChpc0VmZmljYWN5TG9nZ2luZ0VuYWJsZWQoKSAmJiAhc3VjY2VzcykgeworICAgICAgICAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMgaW4gdGhlIGNhY2hl
IGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgIH0K
ICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86
OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5
c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYKQEAgLTMyMSw2
ICszNDgsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlmIChtX3N0b3Jh
Z2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0aXN0aWNzU3Rv
cmFnZSkKKyAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmFnZS0+Y2xlYXIoKTsKK30KKworU3RyaW5n
IE5ldHdvcmtDYWNoZTo6c3RvcmFnZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0b3Jh
Z2UgPyBtX3N0b3JhZ2UtPmRpcmVjdG9yeVBhdGgoKSA6IFN0cmluZygpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
aCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmlu
ZGV4IGE3MDU3NTFmMmY0ZjNiMmQyMTFkZTdkM2E3MjFjYWM4YzJjZWJiNTcuLmU5Y2ZkNDQ3MDI3
ZDZlOWIzMTI1ZGQ3NmRiYWUwZDA0NWVhMWFlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCkBAIC00MSwxMyArNDEsMTUgQEAg
Y2xhc3MgVVJMOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29ya0NhY2hlU3Rh
dGlzdGljczsKKwogY2xhc3MgTmV0d29ya0NhY2hlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShOZXR3b3JrQ2FjaGUpOwogICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPE5l
dHdvcmtDYWNoZT47CiBwdWJsaWM6CiAgICAgc3RhdGljIE5ldHdvcmtDYWNoZSYgc2luZ2xldG9u
KCk7CiAKLSAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworICAg
IGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZp
Y2FjeUxvZ2dpbmcpOwogICAgIHZvaWQgc2V0TWF4aW11bVNpemUoc2l6ZV90KTsKIAogICAgIGJv
b2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gISFtX3N0b3JhZ2U7IH0KQEAgLTY4LDExICs3
MCwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKKyAgICBTdHJpbmcgc3RvcmFn
ZVBhdGgoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBOZXR3b3JrQ2FjaGUoKSA9IGRlZmF1bHQ7
CiAgICAgfk5ldHdvcmtDYWNoZSgpID0gZGVsZXRlOwogCisgICAgYm9vbCBpc0VmZmljYWN5TG9n
Z2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RhdGlzdGljc1N0b3JhZ2U7IH0KKwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+IG1fc3RhdGlzdGljc1N0b3Jh
Z2U7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc0ZmU5NTQ4ZTU1ZmIxY2EzNTE1MWRjNzQ2YmNhZmQyNzZlOGE0MGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtUG9zaXguaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXhfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVLZXkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxk
aXJlbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cit2b2lkIHRyYXZlcnNlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVu
Y3Rpb24pCit7CisgICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm47
CisgICAgc3RydWN0IGRpcmVudCogZHA7CisgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkp
IHsKKyAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKKyAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7CisgICAgfQorICAgIGNsb3Nl
ZGlyKGRpcik7Cit9CisKK2lubGluZSB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKK3sKKyAgICB0cmF2ZXJz
ZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29u
c3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CisgICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0g
V2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7
CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5j
dGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKKyAgICAgICAg
ICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSA4KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK2lubGluZSBTdHJpbmcgZGlyZWN0b3J5UGF0aEZvcktleShjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAg
QVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwga2V5LnBhcnRpdGlvbigpKTsKK30K
KworaW5saW5lIFN0cmluZyBmaWxlUGF0aEZvcktleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtl
eSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnlQYXRoRm9yS2V5KGtleSwgY2FjaGVQYXRoKSwg
a2V5Lmhhc2hBc1N0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzdiZDFm
OWE3ZWI4MWQ2NTY4ZGVjZjU4ZjRhZGNhNDZhNzQ3MmJmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3NfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAi
TmV0d29ya0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0NhY2hlU3RhdGlzdGljcyB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzUHJldmlvdXNseVNl
ZW4pPiBDb21wbGV0aW9uSGFuZGxlcjsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3M+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworCisgICAg
dm9pZCBjbGVhcigpOworICAgIHZvaWQgd2FzUHJldmlvdXNseVNlZW4oY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiwgY29uc3QgQ29tcGxldGlvbkhhbmRsZXImKSBjb25zdDsKKyAgICB2b2lkIG1hcmtB
c1NlZW4oY29uc3QgTmV0d29ya0NhY2hlS2V5Jik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
TmV0d29ya0NhY2hlU3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIHN0YXRpc3RpY3NEaXJlY3RvcnlQ
YXRoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYm9vdHN0YXBGcm9tTmV0
d29ya0NhY2hlKCk7CisgICAgdm9pZCBzaHJpbmtJZk5lZWRlZCgpOworCisgICAgc3RydWN0IFBy
ZXZpb3VzbHlTZWVuUXVlcnkgeworICAgICAgICBOZXR3b3JrQ2FjaGVLZXkga2V5OworICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICB9OworCisgICAgY29u
c3QgU3RyaW5nIG1fc3RhdGlzdGljc0RpcmVjdG9yeVBhdGg7CisgICAgQmxvb21GaWx0ZXI8MjA+
IG1fcHJldmlvdXNseVNlZW5GaWx0ZXI7CisKKyAgICBzdGQ6OmF0b21pYzxib29sPiBtX3Nocmlu
a0luUHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gbV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQgeyAwIH07CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IERpc3BhdGNoUHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5k
aWYKKyAgICBtdXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IFByZXZpb3VzbHlT
ZWVuUXVlcnk+PiBtX2FjdGl2ZVF1ZXJpZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0Nh
Y2hlU3RhdGlzdGljc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzcwNjJjMjQ1YWMzMmNjYWMwZDU3OWNlOTQ1NTRlYmU2YjEwNzJjOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGUuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aCIKKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NTdWJkaXJlY3RvcnkgPSAiV2Vi
S2l0Q2FjaGVTdGF0aXN0aWNzIjsKKworc3RhdGljIHZvaWQgY3JlYXRlRW1wdHlGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhX
ZWJDb3JlOjpkaXJlY3RvcnlOYW1lKHBhdGgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
aGFuZGxlID0gV2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsK
KyAgICBXZWJDb3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M+IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFN0cmluZyBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NTdWJkaXJl
Y3RvcnkpOworICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NQYXRoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPihuZXcgTmV0d29ya0NhY2hlU3Rh
dGlzdGljcyhuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgc3RhdGlzdGlj
c0RpcmVjdG9yeVBhdGgpCisgICAgOiBtX3N0YXRpc3RpY3NEaXJlY3RvcnlQYXRoKHN0YXRpc3Rp
Y3NEaXJlY3RvcnlQYXRoKQorICAgICwgbV9iYWNrZ3JvdW5kSU9RdWV1ZShhZG9wdERpc3BhdGNo
KGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DYWNoZS5TdGF0aXN0aWNz
U3RvcmFnZS5CYWNrZ3JvdW5kIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCkpKQoreworICAg
IGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9CQUNLR1JPVU5E
LCAwKSk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlz
dGljczo6aW5pdGlhbGl6ZSgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVTdGF0aXN0aWNzUGF0aENhcHR1cmUobV9zdGF0aXN0aWNz
RGlyZWN0b3J5UGF0aCk7CisgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKE5ldHdv
cmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmFnZVBhdGgoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMo
bV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGNhY2hlU3RhdGlzdGljc1BhdGhDYXB0
dXJlLCBjYWNoZVBhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmluZyBjYWNoZVN0YXRpc3RpY3NQ
YXRoID0gY2FjaGVTdGF0aXN0aWNzUGF0aENhcHR1cmUuc3RyaW5nKCk7CisgICAgICAgIHRyYXZl
cnNlQ2FjaGVGaWxlcyhjYWNoZVN0YXRpc3RpY3NQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5OjpI
YXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmluZ1Rv
SGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgaGFz
aF0geworICAgICAgICAgICAgICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGhhc2gpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50Owor
ICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQm9vdHN0cmFwIHRoZSBzdGF0aXN0aWNzIGNh
Y2hlIGZyb20gbmV0d29yayBjYWNoZSBzdG9yYWdlLgorICAgICAgICBTdHJpbmcgY2FjaGVQYXRo
ID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVz
KGNhY2hlUGF0aCwgW3RoaXMsICZjYWNoZVBhdGgsICZjYWNoZVN0YXRpc3RpY3NQYXRoXShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKKyAgICAg
ICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKKyAgICAgICAgICAgIGlmICgh
TmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3RoaXMsIGhhc2hdIHsKKyAgICAgICAgICAgICAgICBtX3ByZXZpb3Vz
bHlTZWVuRmlsdGVyLmFkZChoYXNoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgKytt
X2FwcHJveGltYXRlRW50cnlDb3VudDsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5IGZp
bGUgaW4gY2FjaGUgc3RhdGlzdGljcyBmb2xkZXIuCisgICAgICAgICAgICBTdHJpbmcgc3RhdGlz
dGljc1BhcnRpdGlvblBhdGggPSBwYXJ0aXRpb25QYXRoOworICAgICAgICAgICAgc3RhdGlzdGlj
c1BhcnRpdGlvblBhdGgucmVwbGFjZShjYWNoZVBhdGgsIGNhY2hlU3RhdGlzdGljc1BhdGgpOwor
ICAgICAgICAgICAgY3JlYXRlRW1wdHlGaWxlKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChzdGF0aXN0aWNzUGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQo
KQoreworICAgIC8vIEZvciBhIEJsb29tRmlsdGVyIHdpdGggMjAga2V5Qml0cywgdGhlIGZhbHNl
IHBvc2l0aXZlIHJhdGUgYmVjb21lcworICAgIC8vIH4zMCUgd2hlbiByZWFjaGluZyAxMDAwMDAg
ZW50cmllcyAoc2VlIGNvbW1lbnQgaW4gQmxvb21GaWx0ZXIuaCkuCisgICAgY29uc3Qgc2l6ZV90
IG1heEVudHJpZXMgPSAxMDAwMDA7CisgICAgY29uc3Qgc2l6ZV90IGV2ZXJ5TnRoRW50cnlUb0Rl
bGV0ZSA9IDU7CisKKyAgICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPCBtYXhFbnRyaWVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaHJpbmtJblByb2dyZXNzKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zaHJpbmtJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIExPRyhOZXR3
b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzaHJpbmtpbmcgc3RhdGlzdGljcyBj
YWNoZSBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUsIG1heEVudHJpZXM9JWx1Iiwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCksIG1heEVudHJpZXMpOworCisg
ICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVN0YXRpc3RpY3NQYXRoQ2FwdHVyZShtX3N0YXRpc3RpY3NE
aXJlY3RvcnlQYXRoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdl
dCgpLCBbdGhpcywgY2FjaGVTdGF0aXN0aWNzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgc2l6ZV90
IGZvdW5kRW50cnlDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBkZWxldGVkQ291bnQgPSAwOwor
ICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVTdGF0aXN0aWNzUGF0aENhcHR1cmUuc3Ry
aW5nKCksIFt0aGlzLCAmZm91bmRFbnRyeUNvdW50LCAmZGVsZXRlZENvdW50XShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgICAg
ICsrZm91bmRFbnRyeUNvdW50OworICAgICAgICAgICAgaWYgKGZvdW5kRW50cnlDb3VudCAlIGV2
ZXJ5TnRoRW50cnlUb0RlbGV0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICArK2RlbGV0ZWRDb3VudDsKKworICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsK
KworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAg
ICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsIGhhc2hdIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlDb250YWluKGhhc2gpKQorICAgICAgICAgICAgICAg
ICAgICBtX3ByZXZpb3VzbHlTZWVuRmlsdGVyLnJlbW92ZShoYXNoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICAgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSBmb3VuZEVu
dHJ5Q291bnQgLSBkZWxldGVkQ291bnQ7CisgICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZh
bHNlOworCisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNz
KSBzdGF0aXN0aWNzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHByb3hpbWF0ZUVudHJ5Q291
bnQ9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCkpOwor
ICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1NlZW4oY29u
c3QgTmV0d29ya0NhY2hlS2V5JiBrZXkpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisKKyAgICBtX3ByZXZpb3VzbHlT
ZWVuRmlsdGVyLmFkZChrZXkuaGFzaCgpKTsKKworICAgIC8vIENyZWF0ZSBlbXB0eSBmaWxlIGlu
IGNhY2hlIHN0YXRpc3RpY3MgZm9sZGVyLgorICAgIFN0cmluZ0NhcHR1cmUgc3RhdGlzdGljc1Bh
dGhDYXB0dXJlKG1fc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5j
KG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtrZXksIHN0YXRpc3RpY3NQYXRoQ2FwdHVyZV0g
eworICAgICAgICBTdHJpbmcgcGF0aCA9IGZpbGVQYXRoRm9yS2V5KGtleSwgc3RhdGlzdGljc1Bh
dGhDYXB0dXJlLnN0cmluZygpKTsKKyAgICAgICAgY3JlYXRlRW1wdHlGaWxlKHBhdGgpOworICAg
IH0pOworCisgICAgc2hyaW5rSWZOZWVkZWQoKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjp3YXNQcmV2aW91c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29u
c3QgQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fcHJldmlvdXNseVNlZW5GaWx0
ZXIubWF5Q29udGFpbihrZXkuaGFzaCgpKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHByZXZpb3VzbHlTZWVu
UXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFByZXZpb3VzbHlTZWVuUXVlcnk+KFByZXZpb3VzbHlT
ZWVuUXVlcnkgeyBrZXksIGNvbXBsZXRpb25IYW5kbGVyIH0pOworICAgIGF1dG8mIHF1ZXJ5ID0g
KnByZXZpb3VzbHlTZWVuUXVlcnk7CisgICAgbV9hY3RpdmVRdWVyaWVzLmFkZChXVEY6Om1vdmUo
cHJldmlvdXNseVNlZW5RdWVyeSkpOworICAgIFN0cmluZ0NhcHR1cmUgc3RhdGlzdGljc1BhdGhD
YXB0dXJlKG1fc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1f
YmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBzdGF0aXN0aWNzUGF0aENhcHR1cmUsICZx
dWVyeV0geworICAgICAgICBib29sIHdhc1ByZXZpb3VzbHlTZWVuID0gV2ViQ29yZTo6ZmlsZUV4
aXN0cyhmaWxlUGF0aEZvcktleShxdWVyeS5rZXksIHN0YXRpc3RpY3NQYXRoQ2FwdHVyZS5zdHJp
bmcoKSkpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbdGhpcywgJnF1ZXJ5LCB3YXNQcmV2aW91c2x5U2Vlbl0geworICAgICAgICAgICAgcXVlcnku
Y29tcGxldGlvbkhhbmRsZXIod2FzUHJldmlvdXNseVNlZW4pOworICAgICAgICAgICAgbV9hY3Rp
dmVRdWVyaWVzLnJlbW92ZSgmcXVlcnkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpjbGVhcigpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuY2xlYXIoKTsKKworICAg
IFN0cmluZ0NhcHR1cmUgc3RhdGlzdGljc1BhdGhDYXB0dXJlKG1fc3RhdGlzdGljc0RpcmVjdG9y
eVBhdGgpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFtz
dGF0aXN0aWNzUGF0aENhcHR1cmVdIHsKKyAgICAgICAgU3RyaW5nIHN0YXRpc3RpY3NQYXRoID0g
c3RhdGlzdGljc1BhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICB0cmF2ZXJzZURpcmVjdG9y
eShzdGF0aXN0aWNzUGF0aCwgRFRfRElSLCBbJnN0YXRpc3RpY3NQYXRoXShjb25zdCBTdHJpbmcm
IHN1YmRpck5hbWUpIHsKKyAgICAgICAgICAgIFN0cmluZyBzdWJkaXJQYXRoID0gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0YXRpc3RpY3NQYXRoLCBzdWJkaXJOYW1lKTsKKyAg
ICAgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN1YmRpclBhdGgsIERUX1JFRywgWyZzdWJkaXJQ
YXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlRmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3ViZGlyUGF0aCwg
ZmlsZU5hbWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRl
RW1wdHlEaXJlY3Rvcnkoc3ViZGlyUGF0aCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5oCmluZGV4IDA2MzQ1N2MxZTJiMjhhY2YzOGVkM2EwOGU1NjQyNmJkNzg3
ZjhjYzcuLjEzMDFhZmI5NzljMzc0OTMwZjE3OGNiYjUzYzhmZWJhMTgyYWRiNTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3Jh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmVyc2lvbiA9IDE7CiAKKyAgICBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBh
dGgoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdG9yeVBhdGg7IH0KKwogcHJpdmF0ZToKICAgICBO
ZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQppbmRleCBkYmYwM2NhYTAyNmJhN2ZlZDg0NTFjZDE4Nzdk
YmU4NjZmZWI2OWFiLi5hZTgzMTllMTIzNjY5MjFiZDVjNjRhOGJkYTI1MTViYTViN2MxNTE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCkBAIC0zMCw4ICszMCw3IEBACiAKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSAi
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCiAjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0
Y2guaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC00
MywzNiArNDIsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IGNoYXIqIG5l
dHdvcmtDYWNoZVN1YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZSI7CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KLXN0YXRpYyB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAg
RElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm47Ci0gICAgc3RydWN0IGRp
cmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKLSAgICAgICAgaWYg
KGRwLT5kX3R5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25z
dCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4i
KSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7Ci0gICAgfQotICAgIGNsb3NlZGlyKGRpcik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKLXsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNo
ZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJk
aXJOYW1lKSB7Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgIHRyYXZl
cnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5jdGlvbiwgJnBhcnRpdGlv
blBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFt
ZS5sZW5ndGgoKSAhPSA4KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZ1
bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19
Ci0KIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpCiAgICAgOiBtX2Rpc3BhdGNoRGF0YShhZG9wdERpc3BhdGNoKGRpc3BhdGNo
X2RhdGFfY3JlYXRlKGRhdGEsIHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RP
Ul9ERUZBVUxUKSkpCiAgICAgLCBtX3NpemUoc2l6ZSkKQEAgLTE0NSwxNyArMTE0LDYgQEAgdm9p
ZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjppbml0aWFsaXplKCkKICAgICB9KTsKIH0KIAotc3RhdGlj
IFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKLXsKLSAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24oKS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGZpbGVQYXRo
Rm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0
aCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVj
dG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFzU3RyaW5nKCkpOwotfQot
CiBlbnVtIGNsYXNzIEZpbGVPcGVuVHlwZSB7IFJlYWQsIFdyaXRlLCBDcmVhdGUgfTsKIHN0YXRp
YyBEaXNwYXRjaFB0cjxkaXNwYXRjaF9pb190PiBvcGVuRmlsZUZvcktleShjb25zdCBOZXR3b3Jr
Q2FjaGVLZXkmIGtleSwgRmlsZU9wZW5UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRo
LCBpbnQmIGZkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggNzYwNDQwOTJjYjE2YTM0NDJj
NzZkYmY3NjNiODI2YmQwYjMwYjkxMC4uZWFjNThlOTg2YTc5MTNkNDIzN2Y3MjRiMTYwYTQ1YTJk
ZDcyMzg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3Qg
TmV0d29ya1Byb2Nlc3NDCiAgICAgaWYgKCFtX2Rpc2tDYWNoZURpcmVjdG9yeS5pc051bGwoKSkg
ewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUg
JiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0
b3J5KSkgeworICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUg
JiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykp
IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiB1cmxDYWNoZShhZG9wdE5TKFtb
TlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTow
IGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENh
Y2hlOnVybENhY2hlLmdldCgpXTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA1NzllMzZiMDQzNGM1YTc3NTIzNzgxNGEwM2JmMTRh
MWYxZGYzOGI0Li4wMjFhNzI2MGVjMzZiNWZhZjdkYzM0NDZhYzdhODUxMDQ2YzBlY2RhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC00NSw2ICs0NSw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlcikgY29uCiAgICAgZW5jb2RlciA8PCBkaXNrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgZW5jb2RlciA8PCBz
aG91bGRFbmFibGVOZXR3b3JrQ2FjaGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVOZXR3
b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmc7CiAjZW5kaWYKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0
b3JhZ2VEaXJlY3Rvcnk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtODYsNiArODcsOCBAQCBib29s
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIE5ldAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFi
bGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVTdG9yYWdlRGlyZWN0
b3J5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKaW5kZXggNGExZTRiNzliYzZkMjg1MTg5M2NiMzg4OGZkYTUxNGFiYzZlYmViZC4uMWE1NDky
ODljZGQzN2UzODJiNTEyOTQ0YjdhMDNlMjdhZTQyMDRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCkBAIC01OCw2ICs1OCw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyB7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGRpc2tDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBi
b29sIHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBib29sIHNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKICNlbmRpZgogCiAgICAgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDkxNjUzZGNlN2RiOWI2MWFhZWI4YjM5NDFmZDVm
ZWQzM2E0MzcxZGQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUyMDZmZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tCkBAIC04MSw2ICs4MSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktp
dDJIVFRQU1Byb3h5RGVmYXVsdHNLZXkgPSBAIldlYktpdDJIVFRQU1Byb3h5IjsKIAogI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0TmV0d29y
a0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5ID0gQCJXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkIjsK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2lu
Z0VuYWJsZWREZWZhdWx0c0tleSA9IEAiV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5n
RW5hYmxlZCI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDYsNiArMTA3LDcg
QEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVu
YWJsZWREZWZhdWx0c0tleV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVF
ZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiAKICAgICBbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJh
dGlvbkRpY3Rpb25hcnldOwpAQCAtMjUyLDYgKzI1NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVu
YWJsZU5ldHdvcmtDYWNoZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGJvb2xGb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBw
YXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZyA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6V2ViS2l0TmV0d29y
a0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRpZgogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOGQ1NTgwN2FjOGQ0ZTRjZDYxYjA5NDBhOTQ4ZjgzYWIxYzExZDA4OS4uNzg2Yjc4
MWRmZjFjOWQ4MDY2NDk0M2RmY2FjYjgxMGJhMmJhOGM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE0Niw2ICsxMTQ2LDkg
QEAKIAkJN0NGNDdGRkUxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZD
MTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi87IH07CiAJCTdD
RjQ3RkZGMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZEMTcyNzZBRTMw
MDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4MDU2QUYgLyog
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmggKi87IH07CisJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
ICovOyB9OworCQk4MzRCMjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2Nv
YS5tbSAqLzsgfTsKIAkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmggKi87IH07CkBAIC0zMzE5LDYgKzMzMjIsOSBAQAogCQk3Q0Y0N0ZGQzE3
Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNCOTEgLyogV0tC
dW5kbGVQYWdlQmFubmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
QnVuZGxlUGFnZUJhbm5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RUM0
RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29jb2EubW07IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTExMUE4NDJDODcwMENGQjE1
MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1Bh
Z2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzc5
LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3Jr
Q2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQzNkVDMDFBMENGREIyMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFBMENGREIyMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1MTAxQTg0MkM4NzAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLywKKwkJCQk4MzRCMjUxMTFBODQyQzg3
MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tICovLAogCQkJCUU0NDM2
RUMyMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi8sCiAJCQkJRTQ0
MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbSAqLywK
IAkJCSk7CkBAIC03NDk3LDYgKzc1MDYsNyBAQAogCQkJCTFBQzEzMzZDMTg1NjVDN0EwMEYzRUMw
NSAvKiBBUElQYWdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERDMxNTE4OTFCNTQw
MDAxNTM5NzAgLyogQVBJUG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U0RDIy
MDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYzNDQ0NTYxMkE4ODVDODAwMDYxMkQ4IC8q
IEFQSVNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJFMTE4N0RFQzFB
MDBDMzlDOUUgLyogQVBJU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NjIxOTU0
RTlCMTAwQzQ4RkZBIC8qIEFQSVNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03Njgz
LDYgKzc2OTMsNyBAQAogCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVP
YmplY3RNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjE2MkIxMTFGMzg5NzEwMDhBRDBGNSAv
KiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NEEzMTI3RjZB
RDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRCMjUw
RjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNjcyRDEyQzdFREY3MDA4RjlDMzUgLyogT3JpZ2lu
QW5kRGF0YWJhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNC
OTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODgxLDYgKzk4OTIsNyBAQAog
CQkJCTFDOEUyOTNBMTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNDNzI1QzE5NkY2MDUyMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8q
IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJODM0QjI1MTMxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3ND
b2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQTlFMTBBMTMxNUNEMTgwMDlFNzAzMSAvKiBX
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzNEM0EzQjUx
MzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM0MDc1RkQxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJsZUFycmF5LmNwcCBpbiBT
b3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246141</attachid>
            <date>2015-02-05 17:16:44 -0800</date>
            <delta_ts>2015-02-06 15:57:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150205171643.patch</filename>
            <type>text/plain</type>
            <size>37096</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTdlNTM0N2M5N2ZkN2Qz
ZDdhMDM0MzU5NDViMWZmMGMyZjhlZDg1OC4uMDEzMTlkMDg5NTZlZDZmMzE3OTFlOWIwMmUxODdm
ODVkZGI5OTgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM3IEBACiAyMDE1LTAyLTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGNvbnNvbGUgbG9nZ2luZyB0byB2YWxpZGF0ZSB0aGUgbmV0
d29yayBjYWNoZSBlZmZpY2FjeS4gVGhpcyB3aWxsCisgICAgICAgIHRlbGwgdXMgaWYgdGhlIG5l
dHdvcmsgY2FjaGUgZmFpbHMgYXMgd2VsbCBhcyBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAg
ICByZWFzb25zOgorICAgICAgICAtIFJlcXVlc3QgaXMgbm90IGNhY2hlYWJsZQorICAgICAgICAt
IFdhcyBub3QgaW4gdGhlIGNhY2hlIGJ1dCBpcyBubyBsb25nZXIgdGhlcmUgKHBydW5lZCkKKyAg
ICAgICAgLSBJcyBpbiB0aGUgY2FjaGUgYnV0IGlzIG5vdCB1c2FibGUKKworICAgICAgICBUaGlz
IHBhdGNoIGludHJvZHVjZXMgYSBkaXNrLWJhc2VkIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBz
dG9yYWdlCisgICAgICAgIHRoYXQgaXMgdXNlZCB0byBzdG9yZSByZXF1ZXN0cyB3ZSBoYXZlIHNl
ZW4gYmVmb3JlLCBhbmQgcXVlcnkgaWYgd2UKKyAgICAgICAgaGF2ZSBzZWVuIGEgcmVxdWVzdCBi
ZWZvcmUuIFRoZSBzdG9yYWdlIGlzIGxpZ2h0d2VpZ2h0IGFzIGl0IG1lcmVseQorICAgICAgICBj
cmVhdGVzIGVtcHR5IGZpbGVzIGluIGEgYmFja2dyb3VuZCB0aHJlYWQuIEZvciBwZXJmb3JtYW5j
ZSByZWFzb24sCisgICAgICAgIHdlIHVzZSBhIGJsb29tIGZpbHRlciB0byBhdm9pZCBhIGxvdCBv
ZiBkaXNrIEkvTyB3aGVuIHF1ZXJ5aW5nLgorCisgICAgICAgIFRoZSBzdGF0aXN0aWNzIGNhY2hl
IGlzIGluaXRpYWxseSBib290c3RhcHBlZCBmcm9tIHRoZSBuZXR3b3JrIGRpc2sKKyAgICAgICAg
Y2FjaGUgc28gdGhhdCB3ZSBoYXZlIGRhdGEgaW5pdGlhbGx5IGFuZCBnZXQgYXMgYWNjdXJhdGUg
c3RhdGlzdGljcworICAgICAgICBhcyBwb3NzaWJsZSBmcm9tIHRoZSBzdGFydC4KKworICAgICAg
ICBUbyBtYWludGFpbiBhbiBhY2NlcHRhYmxlIGxldmVsIG9mIHBlcmZvcm1hbmNlLCB3ZSBoYXZl
IGEgaGFyZCBsaW1pdAorICAgICAgICBvbiB0aGUgbnVtYmVyIG9mIHVuaXF1ZSByZXF1ZXN0cyB0
aGF0IGFyZSByZXRhaW5lZCBzZXQgdG8gMTAwMDAwIGFuZAorICAgICAgICBhIHNvZnQgbGltaXQg
YXQgMjAwMDAuIEF0IDEwMDAwMCwgdGhlIGJsb29tIGZpbHRlciByZWFjaGVzIGEgZmFsc2UKKyAg
ICAgICAgcG9zaXRpdmUgcmF0ZSBvZiB+MzAlLiBBdCAyMDAwMCwgdGhlIGZhbHNlIHBvc2l0aXZl
IHJhdGUgaXMgb25seSAwLjE0JS4KKworICAgICAgICBEaWFnbm9zdGljIGxvZ2dpbmcgZm9yIHRo
aXMgd2lsbCBiZSBhZGRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworMjAxNS0wMi0wNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIFtXSzJdIFByb3Blcmx5IGNo
ZWNrIGZvciBtbWFwKCkgZXJyb3IgY2FzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzA0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmluZGV4IGVjZGFiMWI2MzZlYjIyYTU4
MmQwZDBjMjRmYjU1YWIwMTk4ZTQyZmMuLjUyY2ZjYThiZGNkNzE3NzgwMTkxNjhiMTFlZTM2ZWQ2
OWE2NTk1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCkBAIC00OSwxMCArNTAsMTMgQEAgTmV0d29ya0NhY2hlJiBOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCi1ib29sIE5ldHdvcmtDYWNo
ZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK2Jvb2wgTmV0d29ya0NhY2hl
Ojppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVmZmljYWN5
TG9nZ2luZykKIHsKICAgICBtX3N0b3JhZ2UgPSBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpvcGVuKGNh
Y2hlUGF0aCk7CiAKKyAgICBpZiAoZW5hYmxlRWZmaWNhY3lMb2dnaW5nKQorICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yYWdlID0gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3BlbihjYWNoZVBhdGgp
OworCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgb3BlbmVkIGNhY2hl
IHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0dXJuICEhbV9zdG9y
YWdlOwogfQpAQCAtMjIwLDIzICsyMjQsNDYgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZl
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBzdGQKIAog
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZpbmcgJXMgcHJp
b3JpdHkgJXUiLCBvcmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCks
IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpKTsKIAorICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0
VVJMID0gb3JpZ2luYWxSZXF1ZXN0LnVybCgpOworICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdl
S2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgaWYgKCFjYW5SZXRyaWV2
ZShvcmlnaW5hbFJlcXVlc3QpKSB7CisgICAgICAgIGlmIChpc0VmZmljYWN5TG9nZ2luZ0VuYWJs
ZWQoKSkgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmFnZS0+d2FzUHJldmlvdXNseVNl
ZW4oc3RvcmFnZUtleSwgW3RoaXMsIHN0b3JhZ2VLZXksIHJlcXVlc3RVUkxdKGJvb2wgd2FzUHJl
dmlvdXNseVNlZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAod2FzUHJldmlvdXNseVNlZW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
JXMgd2FzIHByZXZpb3VzbHkgc2VlbiBidXQgd2Fzbid0IGNhY2hlYWJsZSIsIHJlcXVlc3RVUkwu
c3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
RG8gZGlhZ25vc3RpYyBsb2dnaW5nLgorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yYWdlLT5tYXJrQXNTZWVuKHN0b3JhZ2VLZXkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIE5ldHdvcmtDYWNoZUtleSBzdG9y
YWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgdW5zaWduZWQgcHJp
b3JpdHkgPSBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0
cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBs
ZXRpb25IYW5kbGVyLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9y
YWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXks
IHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3Rh
cnRUaW1lLCBzdG9yYWdlS2V5LCByZXF1ZXN0VVJMXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBz
dG9yYWdlIik7CisgICAgICAgICAgICBpZiAoaXNFZmZpY2FjeUxvZ2dpbmdFbmFibGVkKCkpIHsK
KyAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yYWdlLT53YXNQcmV2aW91c2x5U2Vlbihz
dG9yYWdlS2V5LCBbdGhpcywgc3RvcmFnZUtleSwgcmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91
c2x5U2VlbikgeworICAgICAgICAgICAgICAgICAgICBpZiAod2FzUHJldmlvdXNseVNlZW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nl
c3MpICVzIHdhcyBwcmV2aW91c2x5IGNhY2hlZCBidXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBjYWNo
ZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yYWdl
LT5tYXJrQXNTZWVuKHN0b3JhZ2VLZXkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBkZWNvZGVkRW50cnkgPSBk
ZWNvZGVTdG9yYWdlRW50cnkoKmVudHJ5LCBvcmlnaW5hbFJlcXVlc3QpOwogICAgICAgICBib29s
IHN1Y2Nlc3MgPSAhIWRlY29kZWRFbnRyeTsKKyAgICAgICAgaWYgKGlzRWZmaWNhY3lMb2dnaW5n
RW5hYmxlZCgpICYmICFzdWNjZXNzKSB7CisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBpbiB0aGUgY2FjaGUgYnV0IGlzbid0IHVzYWJsZSIsIHJl
cXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6
IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KKyAgICAgICAgfQogI2lmICFMT0dfRElTQUJMRUQKICAg
ICAgICAgYXV0byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0
YXJ0VGltZSkuY291bnQoKTsKICNlbmRpZgpAQCAtMzIxLDYgKzM0OCwxMyBAQCB2b2lkIE5ldHdv
cmtDYWNoZTo6Y2xlYXIoKQogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IGNsZWFyaW5nIGNhY2hlIik7CiAgICAgaWYgKG1fc3RvcmFnZSkKICAgICAgICAgbV9zdG9yYWdl
LT5jbGVhcigpOworICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yYWdlKQorICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yYWdlLT5jbGVhcigpOworfQorCitTdHJpbmcgTmV0d29ya0NhY2hlOjpzdG9yYWdl
UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFnZSA/IG1fc3RvcmFnZS0+ZGlyZWN0
b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5kZXggYTcwNTc1MWYyZjRmM2IyZDIx
MWRlN2QzYTcyMWNhYzhjMmNlYmI1Ny4uZTljZmQ0NDcwMjdkNmU5YjMxMjVkZDc2ZGJhZTBkMDQ1
ZWExYWU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmgKQEAgLTQxLDEzICs0MSwxNSBAQCBjbGFzcyBVUkw7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCitjbGFzcyBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOworCiBjbGFzcyBOZXR3
b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtDYWNoZSk7CiAgICAg
ZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hlPjsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBzaW5nbGV0b24oKTsKIAotICAgIGJvb2wgaW5pdGlh
bGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7CisgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZyk7CiAgICAgdm9p
ZCBzZXRNYXhpbXVtU2l6ZShzaXplX3QpOwogCiAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiAhIW1fc3RvcmFnZTsgfQpAQCAtNjgsMTEgKzcwLDE2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgY2xlYXIoKTsKIAorICAgIFN0cmluZyBzdG9yYWdlUGF0aCgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIE5ldHdvcmtDYWNoZSgpID0gZGVmYXVsdDsKICAgICB+TmV0d29ya0NhY2hlKCkg
PSBkZWxldGU7CiAKKyAgICBib29sIGlzRWZmaWNhY3lMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuICEhbV9zdGF0aXN0aWNzU3RvcmFnZTsgfQorCiAgICAgc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlU3RhdGlzdGljcz4gbV9zdGF0aXN0aWNzU3RvcmFnZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRmZTk1NDhlNTVmYjFjYTM1MTUx
ZGM3NDZiY2FmZDI3NmU4YTQwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3Np
eF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
LCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIqIGRp
ciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEo
KSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50KiBk
cDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAtPmRf
dHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFz
dHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVuY3Rp
b24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKworaW5saW5l
IHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwg
RFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUp
IHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VEaXJl
Y3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0
aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb24o
ZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworaW5s
aW5lIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5
LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24o
KS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkpOworfQorCitpbmxpbmUgU3RyaW5nIGZpbGVQ
YXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hl
UGF0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRp
cmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpLCBrZXkuaGFzaEFzU3RyaW5nKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzN2JkMWY5YTdlYjgxZDY1NjhkZWNmNThmNGFk
Y2E0NmE3NDcyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3RhdGlzdGljc19oCisjZGVmaW5lIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3NfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgi
CisjaW5jbHVkZSA8d3RmL0Jsb29tRmlsdGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNQcmV2aW91c2x5U2Vlbik+IENvbXBsZXRpb25IYW5kbGVy
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gb3Bl
bihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9p
ZCB3YXNQcmV2aW91c2x5U2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBDb21wbGV0
aW9uSGFuZGxlciYpIGNvbnN0OworICAgIHZvaWQgbWFya0FzU2Vlbihjb25zdCBOZXR3b3JrQ2Fj
aGVLZXkmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
KGNvbnN0IFN0cmluZyYgc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgpOworCisgICAgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgdm9pZCBib290c3RhcEZyb21OZXR3b3JrQ2FjaGUoKTsKKyAgICB2b2lk
IHNocmlua0lmTmVlZGVkKCk7CisKKyAgICBzdHJ1Y3QgUHJldmlvdXNseVNlZW5RdWVyeSB7Cisg
ICAgICAgIE5ldHdvcmtDYWNoZUtleSBrZXk7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyIGNv
bXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBjb25zdCBTdHJpbmcgbV9zdGF0aXN0aWNz
RGlyZWN0b3J5UGF0aDsKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9wcmV2aW91c2x5U2VlbkZpbHRl
cjsKKworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07
CisgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlDb3VudCB7IDAgfTsK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hf
cXVldWVfdD4gbV9iYWNrZ3JvdW5kSU9RdWV1ZTsKKyNlbmRpZgorICAgIG11dGFibGUgSGFzaFNl
dDxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJldmlvdXNseVNlZW5RdWVyeT4+IG1fYWN0aXZlUXVl
cmllczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCisKKyNlbmRpZiAvLyBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzA2MmMyNDVhYzMyY2Nh
YzBkNTc5Y2U5NDU1NGViZTZiMTA3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCkBA
IC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
IgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29y
a0NhY2hlU3RhdGlzdGljc1N1YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MiOwor
CitzdGF0aWMgdm9pZCBjcmVhdGVFbXB0eUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUo
cGF0aCkpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBoYW5kbGUgPSBXZWJDb3JlOjpvcGVu
RmlsZShwYXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShoYW5kbGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4g
TmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5nIG5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hl
UGF0aCwgbmV0d29ya0NhY2hlU3RhdGlzdGljc1N1YmRpcmVjdG9yeSk7CisgICAgaWYgKCFXZWJD
b3JlOjptYWtlQWxsRGlyZWN0b3JpZXMobmV0d29ya0NhY2hlU3RhdGlzdGljc1BhdGgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M+KG5ldyBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzKG5ldHdvcmtDYWNoZVN0
YXRpc3RpY3NQYXRoKSk7Cit9CisKK05ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MoY29uc3QgU3RyaW5nJiBzdGF0aXN0aWNzRGlyZWN0b3J5UGF0aCkKKyAgICA6
IG1fc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgoc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgpCisgICAg
LCBtX2JhY2tncm91bmRJT1F1ZXVlKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfcXVldWVfY3JlYXRl
KCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3NTdG9yYWdlLkJhY2tncm91bmQiLCBE
SVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKSkpCit7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9x
dWV1ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKKworICAgIGluaXRpYWxp
emUoKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKCkKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5nQ2FwdHVyZSBjYWNo
ZVN0YXRpc3RpY3NQYXRoQ2FwdHVyZShtX3N0YXRpc3RpY3NEaXJlY3RvcnlQYXRoKTsKKyAgICBT
dHJpbmdDYXB0dXJlIGNhY2hlUGF0aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5z
dG9yYWdlUGF0aCgpKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdl
dCgpLCBbdGhpcywgY2FjaGVTdGF0aXN0aWNzUGF0aENhcHR1cmUsIGNhY2hlUGF0aENhcHR1cmVd
IHsKKyAgICAgICAgU3RyaW5nIGNhY2hlU3RhdGlzdGljc1BhdGggPSBjYWNoZVN0YXRpc3RpY3NQ
YXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlU3Rh
dGlzdGljc1BhdGgsIFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
KSB7CisgICAgICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAg
ICAgICBpZiAoIU5ldHdvcmtDYWNoZUtleTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBoYXNoXSB7CisgICAgICAgICAgICAgICAg
bV9wcmV2aW91c2x5U2VlbkZpbHRlci5hZGQoaGFzaCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChtX2FwcHJveGltYXRlRW50cnlDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBCb290c3RyYXAgdGhlIHN0YXRpc3RpY3MgY2FjaGUgZnJvbSBuZXR3b3JrIGNhY2hl
IHN0b3JhZ2UuCisgICAgICAgIFN0cmluZyBjYWNoZVBhdGggPSBjYWNoZVBhdGhDYXB0dXJlLnN0
cmluZygpOworICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBbdGhpcywgJmNh
Y2hlUGF0aCwgJmNhY2hlU3RhdGlzdGljc1BhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5
OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmlu
Z1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywg
aGFzaF0geworICAgICAgICAgICAgICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGhhc2gp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50
OworCisgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgZmlsZSBpbiBjYWNoZSBzdGF0aXN0aWNz
IGZvbGRlci4KKyAgICAgICAgICAgIFN0cmluZyBzdGF0aXN0aWNzUGFydGl0aW9uUGF0aCA9IHBh
cnRpdGlvblBhdGg7CisgICAgICAgICAgICBzdGF0aXN0aWNzUGFydGl0aW9uUGF0aC5yZXBsYWNl
KGNhY2hlUGF0aCwgY2FjaGVTdGF0aXN0aWNzUGF0aCk7CisgICAgICAgICAgICBjcmVhdGVFbXB0
eUZpbGUoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0YXRpc3RpY3NQYXJ0aXRp
b25QYXRoLCBmaWxlTmFtZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCit7CisgICAgLy8gRm9yIGEgQmxv
b21GaWx0ZXIgd2l0aCAyMCBrZXlCaXRzLCB0aGUgZmFsc2UgcG9zaXRpdmUgcmF0ZSBiZWNvbWVz
CisgICAgLy8gfjMwJSB3aGVuIHJlYWNoaW5nIDEwMDAwMCBlbnRyaWVzIChzZWUgY29tbWVudCBp
biBCbG9vbUZpbHRlci5oKS4KKyAgICBjb25zdCBzaXplX3QgbWF4RW50cmllcyA9IDEwMDAwMDsK
KyAgICBjb25zdCBzaXplX3QgZXZlcnlOdGhFbnRyeVRvRGVsZXRlID0gNTsKKworICAgIGlmICht
X2FwcHJveGltYXRlRW50cnlDb3VudCA8IG1heEVudHJpZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3Nocmlua0luUHJvZ3Jlc3MpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nocmlu
a0luUHJvZ3Jlc3MgPSB0cnVlOworCisgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0
d29ya1Byb2Nlc3MpIHNocmlua2luZyBzdGF0aXN0aWNzIGNhY2hlIG1fYXBwcm94aW1hdGVFbnRy
eUNvdW50PSVsdSwgbWF4RW50cmllcz0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94
aW1hdGVFbnRyeUNvdW50KSwgbWF4RW50cmllcyk7CisKKyAgICBTdHJpbmdDYXB0dXJlIGNhY2hl
U3RhdGlzdGljc1BhdGhDYXB0dXJlKG1fc3RhdGlzdGljc0RpcmVjdG9yeVBhdGgpOworICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBjYWNoZVN0YXRp
c3RpY3NQYXRoQ2FwdHVyZV0geworICAgICAgICBzaXplX3QgZm91bmRFbnRyeUNvdW50ID0gMDsK
KyAgICAgICAgc2l6ZV90IGRlbGV0ZWRDb3VudCA9IDA7CisgICAgICAgIHRyYXZlcnNlQ2FjaGVG
aWxlcyhjYWNoZVN0YXRpc3RpY3NQYXRoQ2FwdHVyZS5zdHJpbmcoKSwgW3RoaXMsICZmb3VuZEVu
dHJ5Q291bnQsICZkZWxldGVkQ291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0
cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICAgICAgKytmb3VuZEVudHJ5Q291bnQ7Cisg
ICAgICAgICAgICBpZiAoZm91bmRFbnRyeUNvdW50ICUgZXZlcnlOdGhFbnRyeVRvRGVsZXRlKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICsrZGVsZXRlZENvdW50OworCisg
ICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSkpOworCisgICAgICAgICAgICBOZXR3b3Jr
Q2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgICAgICBpZiAoIU5ldHdvcmtDYWNoZUtl
eTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
dGhpcywgaGFzaF0geworICAgICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzbHlTZWVuRmlsdGVy
Lm1heUNvbnRhaW4oaGFzaCkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJldmlvdXNseVNlZW5G
aWx0ZXIucmVtb3ZlKGhhc2gpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAg
ICBtX2FwcHJveGltYXRlRW50cnlDb3VudCA9IGZvdW5kRW50cnlDb3VudCAtIGRlbGV0ZWRDb3Vu
dDsKKyAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0gZmFsc2U7CisKKyAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHN0YXRpc3RpY3MgY2FjaGUgc2hy
aW5rIGNvbXBsZXRlZCBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUiLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya0NhY2hlU3RhdGlzdGljczo6bWFya0FzU2Vlbihjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtl
eSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgKyttX2FwcHJveGlt
YXRlRW50cnlDb3VudDsKKworICAgIG1fcHJldmlvdXNseVNlZW5GaWx0ZXIuYWRkKGtleS5oYXNo
KCkpOworCisgICAgLy8gQ3JlYXRlIGVtcHR5IGZpbGUgaW4gY2FjaGUgc3RhdGlzdGljcyBmb2xk
ZXIuCisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0aXN0aWNzUGF0aENhcHR1cmUobV9zdGF0aXN0aWNz
RGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW2tleSwgc3RhdGlzdGljc1BhdGhDYXB0dXJlXSB7CisgICAgICAgIFN0cmluZyBwYXRo
ID0gZmlsZVBhdGhGb3JLZXkoa2V5LCBzdGF0aXN0aWNzUGF0aENhcHR1cmUuc3RyaW5nKCkpOwor
ICAgICAgICBjcmVhdGVFbXB0eUZpbGUocGF0aCk7CisgICAgfSk7CisKKyAgICBzaHJpbmtJZk5l
ZWRlZCgpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ondhc1ByZXZpb3VzbHlT
ZWVuKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBDb21wbGV0aW9uSGFuZGxlciYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmICghbV9wcmV2aW91c2x5U2VlbkZpbHRlci5tYXlDb250YWluKGtleS5oYXNo
KCkpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcHJldmlvdXNseVNlZW5RdWVyeSA9IHN0ZDo6bWFrZV91bmlx
dWU8UHJldmlvdXNseVNlZW5RdWVyeT4oUHJldmlvdXNseVNlZW5RdWVyeSB7IGtleSwgY29tcGxl
dGlvbkhhbmRsZXIgfSk7CisgICAgYXV0byYgcXVlcnkgPSAqcHJldmlvdXNseVNlZW5RdWVyeTsK
KyAgICBtX2FjdGl2ZVF1ZXJpZXMuYWRkKFdURjo6bW92ZShwcmV2aW91c2x5U2VlblF1ZXJ5KSk7
CisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0aXN0aWNzUGF0aENhcHR1cmUobV9zdGF0aXN0aWNzRGly
ZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQo
KSwgW3RoaXMsIHN0YXRpc3RpY3NQYXRoQ2FwdHVyZSwgJnF1ZXJ5XSB7CisgICAgICAgIGJvb2wg
d2FzUHJldmlvdXNseVNlZW4gPSBXZWJDb3JlOjpmaWxlRXhpc3RzKGZpbGVQYXRoRm9yS2V5KHF1
ZXJ5LmtleSwgc3RhdGlzdGljc1BhdGhDYXB0dXJlLnN0cmluZygpKSk7CisgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCAmcXVlcnksIHdhc1By
ZXZpb3VzbHlTZWVuXSB7CisgICAgICAgICAgICBxdWVyeS5jb21wbGV0aW9uSGFuZGxlcih3YXNQ
cmV2aW91c2x5U2Vlbik7CisgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVtb3ZlKCZxdWVy
eSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9w
cmV2aW91c2x5U2VlbkZpbHRlci5jbGVhcigpOworCisgICAgU3RyaW5nQ2FwdHVyZSBzdGF0aXN0
aWNzUGF0aENhcHR1cmUobV9zdGF0aXN0aWNzRGlyZWN0b3J5UGF0aCk7CisgICAgZGlzcGF0Y2hf
YXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3N0YXRpc3RpY3NQYXRoQ2FwdHVyZV0g
eworICAgICAgICBTdHJpbmcgc3RhdGlzdGljc1BhdGggPSBzdGF0aXN0aWNzUGF0aENhcHR1cmUu
c3RyaW5nKCk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN0YXRpc3RpY3NQYXRoLCBEVF9E
SVIsIFsmc3RhdGlzdGljc1BhdGhdKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgeworICAgICAg
ICAgICAgU3RyaW5nIHN1YmRpclBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoc3RhdGlzdGljc1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAgdHJhdmVyc2VEaXJl
Y3Rvcnkoc3ViZGlyUGF0aCwgRFRfUkVHLCBbJnN1YmRpclBhdGhdKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChzdWJkaXJQYXRoLCBmaWxlTmFtZSkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShzdWJkaXJQ
YXRoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXgg
MDYzNDU3YzFlMmIyOGFjZjM4ZWQzYTA4ZTU2NDI2YmQ3ODdmOGNjNy4uMTMwMWFmYjk3OWMzNzQ5
MzBmMTc4Y2JiNTNjOGZlYmExODJhZGI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTQ2LDYg
KzE0Niw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0g
MTsKIAorICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlyZWN0b3J5UGF0aDsgfQorCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZVN0b3JhZ2UoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1t
CmluZGV4IGRiZjAzY2FhMDI2YmE3ZmVkODQ1MWNkMTg3N2RiZTg2NmZlYjY5YWIuLmFlODMxOWUx
MjM2NjkyMWJkNWM2NGE4YmRhMjUxNWJhNWI3YzE1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
Q29jb2EubW0KQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaCIKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTQzLDM2ICs0Miw2IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5
ID0gIldlYktpdENhY2hlIjsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGlj
IHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUs
IGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2Vi
Q29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFk
aXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAo
KGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9u
YW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4u
IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUp
KTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhdmVyc2VD
YWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0
aW9uKQotewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hl
UGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgU3Ry
aW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2Fj
aGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9u
UGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRp
dGlvblBhdGgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogTmV0d29ya0NhY2hlU3RvcmFn
ZTo6RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IG1f
ZGlzcGF0Y2hEYXRhKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6
ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQpKSkKICAgICAsIG1f
c2l6ZShzaXplKQpAQCAtMTQ1LDE3ICsxMTQsNiBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6
OmluaXRpYWxpemUoKQogICAgIH0pOwogfQogCi1zdGF0aWMgU3RyaW5nIGRpcmVjdG9yeVBhdGhG
b3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRo
KQotewotICAgIEFTU0VSVCgha2V5LnBhcnRpdGlvbigpLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIGtleS5wYXJ0aXRp
b24oKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZmlsZVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIHJldHVybiBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aEZvcktleShrZXksIGNh
Y2hlUGF0aCksIGtleS5oYXNoQXNTdHJpbmcoKSk7Ci19Ci0KIGVudW0gY2xhc3MgRmlsZU9wZW5U
eXBlIHsgUmVhZCwgV3JpdGUsIENyZWF0ZSB9Owogc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNo
X2lvX3Q+IG9wZW5GaWxlRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBGaWxlT3Bl
blR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGludCYgZmQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQppbmRleCA3NjA0NDA5MmNiMTZhMzQ0MmM3NmRiZjc2M2I4MjZiZDBiMzBiOTEw
Li5lYWM1OGU5ODZhNzkxM2Q0MjM3ZjcyNGIxNjBhNDVhMmRkNzIzODVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0KQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBp
ZiAoIW1fZGlza0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7CiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgICAgIGlmIChw
YXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3RvcnkpKSB7CisgICAgICAgIGlmIChw
YXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3RvcnksIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nKSkgewogICAgICAgICAgICAgUmV0YWlu
UHRyPE5TVVJMQ2FjaGU+IHVybENhY2hlKGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0
V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0NhcGFjaXR5OjAgZGlza1BhdGg6bmlsXSkpOwogICAg
ICAgICAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwog
ICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmlu
ZGV4IDU3OWUzNmIwNDM0YzVhNzc1MjM3ODE0YTAzYmYxNGExZjFkZjM4YjQuLjAyMWE3MjYwZWMz
NmI1ZmFmN2RjMzQ0NmFjN2E4NTEwNDZjMGVjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb24KICAg
ICBlbmNvZGVyIDw8IGRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNo
ZTsKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2lu
ZzsKICNlbmRpZgogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZURpcmVjdG9yeTsKICNpZiBQ
TEFURk9STShJT1MpCkBAIC04Niw2ICs4Nyw4IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgTmV0CiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCA0YTFlNGI3OWJjNmQy
ODUxODkzY2IzODg4ZmRhNTE0YWJjNmViZWJkLi4xYTU0OTI4OWNkZDM3ZTM4MmI1MTI5NDRiN2Ew
M2UyN2FlNDIwNGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTU4LDYg
KzU4LDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29y
a0NhY2hlOworICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5n
OwogI2VuZGlmCiAKICAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
aW5kZXggOTE2NTNkY2U3ZGI5YjYxYWFlYjhiMzk0MWZkNWZlZDMzYTQzNzFkZC4uZjAwYTVmZmJk
MjBmNGUxNTlmZjYyODZjZDZmYzRkMzNhNTIwNmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTgxLDYgKzgx
LDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tl
eSA9IEAiV2ViS2l0MkhUVFBTUHJveHkiOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiBz
dGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNL
ZXkgPSBAIldlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWQiOworc3RhdGljIE5TU3RyaW5nICogY29u
c3QgV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5ID0g
QCJXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkIjsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNiw2ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAg
IFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAg
ICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWRE
ZWZhdWx0c0tleV07CiAjZW5kaWYKIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6cmVnaXN0cmF0aW9uRGljdGlvbmFyeV07CkBAIC0y
NTIsNiArMjU0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlID0gW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXROZXR3
b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxl
TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdF
bmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDU1ODA3YWM4ZDRl
NGNkNjFiMDk0MGE5NDhmODNhYjFjMTFkMDg5Li43ODZiNzgxZGZmMWM5ZDgwNjY0OTQzZGZjYWNi
ODEwYmEyYmE4Yzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ2LDYgKzExNDYsOSBAQAogCQk3Q0Y0N0ZGRTE3Mjc2QUUz
MDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdL
QnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLzsgfTsKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkx
IC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFn
ZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkx
OEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi87IH07CisJCTgzNEIy
NTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTBFMUE4MzFB
OEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLzsgfTsKKwkJODM0
QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTEwMUE4NDJDODcw
MENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi87IH07CisJCTgzNEIyNTEzMUE4
NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUxMTFBODQyQzg3MDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tICovOyB9OwogCQk4MzcyREIy
NTFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI0MUE2NzRD
OEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgzNzJEQjI4MUE2NzU2Mjgw
MEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjYxQTY3NTYyODAwQzY5
N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi87IH07CiAJCTgzNzJE
QjI5MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI3MUE2
NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsK
QEAgLTMzMTksNiArMzMyMiw5IEBACiAJCTdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1
bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAv
KiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTEwMUE4NDJDODcw
MENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2
NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYy
ODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczNzksOCArNzM4NSwxMSBAQAogCQkJCUU0
ODlEMjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8sCiAJCQkJ
RTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovLAog
CQkJCUU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8s
CisJCQkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeC5oICovLAogCQkJCUU0NDM2RUMwMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVL
ZXkuY3BwICovLAogCQkJCUU0NDM2RUMxMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVL
ZXkuaCAqLywKKwkJCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oICovLAorCQkJCTgzNEIyNTExMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzQ29jb2EubW0gKi8sCiAJCQkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLywKIAkJCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQg
LyogTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tICovLAogCQkJKTsKQEAgLTc0OTcsNiArNzUw
Niw3IEBACiAJCQkJMUFDMTMzNkMxODU2NUM3QTAwRjNFQzA1IC8qIEFQSVBhZ2VIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRkREMzE1MTg5MUI1NDAwMDE1Mzk3MCAvKiBBUElQb2xpY3lD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTREMjIwMUE0OTE0Q0EwMEM3RjE1MiAvKiBB
UElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTEy
MUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNjM0NDQ1NjEyQTg4NUM4MDAwNjEyRDggLyogQVBJU2VjdXJpdHlPcmlnaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCTc1QThEMkUxMTg3REVDMUEwMEMzOUM5RSAvKiBBUElTZXNzaW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERTY2MjE5NTRFOUIxMDBDNDhGRkEgLyogQVBJU2Vz
c2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTc2ODMsNiArNzY5Myw3IEBACiAJCQkJMUEy
MTYxQjAxMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEyMTYyQjExMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDg0QTMxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFu
dERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEFDQTEz
MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTk4ODEsNiArOTg5Miw3IEBACiAJCQkJMUM4RTI5M0ExMjc2MUU1QjAw
QkM3QkQwIC8qIFdLSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0M3MjVDMTk2
RjYwNTIwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBNTQyOTNBNTE5NUE0M0REMDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk4MzRCMjUxMzFBODQyQzg3
MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFBOUUxMEExMzE1Q0QxODAwOUU3MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNCNTEzMzk2MDBCMDA3MDlCRTQgLyogV0tN
ZWRpYUNhY2hlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGRDEyNEZGMDI3
MDA2OEYyMEEgLyogV0tNdXRhYmxlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246184</attachid>
            <date>2015-02-06 15:57:47 -0800</date>
            <delta_ts>2015-02-06 16:41:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150206155746.patch</filename>
            <type>text/plain</type>
            <size>40832</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E1NjlmMWI3OWQwN2Yx
NzRlY2Y0MzNiZmIzMGQ4ZTI2Yjk5NjAxNS4uMDVlZDgzN2ZlOTZiYTgwNDE0ZGNkYzIzMGViODk4
ZWRjNzA0OWZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRXhwb3J0IGFuIGV4dHJhIHN5bWJvbC4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorCiAyMDE1LTAyLTA2ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBs
ZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTc5NzA2KTogQ2F1c2VkIG1lbW9yeSBjb3Jy
dXB0aW9uIG9uIHNvbWUgdGVzdHMgKFJlcXVlc3RlZCBieSBfYXBfIG9uICN3ZWJraXQpLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGE5MDM2MjMwZjdmZDc1ZGI5ZDEzZmMzMGViNzNjN2MzMmRhOWUzMzMuLjIyNmUy
ODNmYTA5MjA3MTliMTYwODc4NzliYWJmY2IxYTdmYTFlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNCBAQAorMjAxNS0wMi0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXSzJdIEFkZCBsb2dnaW5nIHRvIHZhbGlkYXRlIHRoZSBuZXR3b3JrIGNhY2hlIGVm
ZmljYWN5IChQYXJ0IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDEyNjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE5NjMyMDgwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25zb2xlIGxv
Z2dpbmcgdG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kuIFRoaXMgd2lsbAor
ICAgICAgICB0ZWxsIHVzIGlmIGhvdyB0aGUgbmV0d29yayBjYWNoZSBzYXRpc3RpZXMgcmVxdWVz
dHMsIGluIHBhcnRpY3VsYXI6CisgICAgICAgIC0gUmVxdWVzdCBjYW5ub3QgYmUgaGFuZGxlZCBi
eSB0aGUgY2FjaGUKKyAgICAgICAgLSBFbnRyeSB3YXMgbm90IGluIHRoZSBjYWNoZSBidXQgaXMg
bm8gbG9uZ2VyIHRoZXJlIChwcnVuZWQpCisgICAgICAgIC0gRW50cnkgaXMgaW4gdGhlIGNhY2hl
IGJ1dCBpcyBub3QgdXNhYmxlCisgICAgICAgIC0gRW50cnkgaXMgaW4gdGhlIGNhY2hlIGFuZCBp
cyB1c2VkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIFNRTGl0ZS1iYXNlZCBu
ZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3Mgc3RvcmFnZQorICAgICAgICB0aGF0IGlzIHVzZWQgdG8g
c3RvcmUgcmVxdWVzdHMgd2UgaGF2ZSBzZWVuIGJlZm9yZSwgYW5kIHF1ZXJ5IGlmIHdlCisgICAg
ICAgIGhhdmUgc2VlbiBhIHJlcXVlc3QgYmVmb3JlLiBUaGUgc3RvcmFnZSBpcyBsaWdodHdlaWdo
dCBhcyBpdCBvbmx5CisgICAgICAgIHN0b3JlcyBoYXNoZXMgaW4gdGhlIGRhdGFiYXNlLCBpbiBh
IGJhY2tncm91bmQgdGhyZWFkLiBGb3IgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVhc29ucywgd2Ug
dXNlIGEgYmxvb20gZmlsdGVyIHRvIGF2b2lkIG1vc3Qgb2YgZGlzayBJL08gd2hlbiBxdWVyeWlu
Zy4KKworICAgICAgICBUaGUgc3RhdGlzdGljcyBjYWNoZSBpcyBpbml0aWFsbHkgYm9vdHN0YXBw
ZWQgZnJvbSB0aGUgbmV0d29yayBkaXNrCisgICAgICAgIGNhY2hlIHNvIHRoYXQgd2UgaGF2ZSBk
YXRhIGluaXRpYWxseSBhbmQgZ2V0IGFzIGFjY3VyYXRlIHN0YXRpc3RpY3MKKyAgICAgICAgYXMg
cG9zc2libGUgZnJvbSB0aGUgc3RhcnQuCisKKyAgICAgICAgVG8gbWFpbnRhaW4gYW4gYWNjZXB0
YWJsZSBsZXZlbCBvZiBwZXJmb3JtYW5jZSwgd2UgaGF2ZSBhIGhhcmQgbGltaXQKKyAgICAgICAg
b24gdGhlIG51bWJlciBvZiB1bmlxdWUgcmVxdWVzdHMgdGhhdCBhcmUgcmV0YWluZWQgc2V0IHRv
IDgwMDAwLiBBdAorICAgICAgICA4MDAwMCwgdGhlIGJsb29tIGZpbHRlciByZWFjaGVzIGEgZmFs
c2UgcG9zaXRpdmUgcmF0ZSBvZiB+MjAlLgorCisgICAgICAgIERpYWdub3N0aWMgbG9nZ2luZyBm
b3IgdGhpcyB3aWxsIGJlIGFkZGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCiAyMDE1LTAyLTA2
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBSZW1vdmUgV2ViS2l0V2ViVmlldzo6Y2xvc2Utbm90aWZpY2F0aW9uIHNpZ25hbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgppbmRleCBmYzdkYThlMTllYTY2M2E1MzJkZTNlNmEzODA1ZGY1N2NkZTE4
ZTllLi44Mjg0YWJhYzQ4ZmJjM2YzMDY2NzkwMTIyNjE4OTBjZTViM2EwNTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtOTc2LDYgKzk3Niw3IEBAIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyMjRzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWRFUE5TXzVGcmFtZUVQTlNfMzJOCiBf
X1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjZyZW1vdmVFUE5TXzE0UmVzb3VyY2VM
b2FkZXJFCiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlckMyRXYKIF9fWk43V2Vi
Q29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyRDJFdgorX19aTjdXZWJDb3JlMjFTUUxpdGVEYXRh
YmFzZVRyYWNrZXIyNGhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzc0V2CiBfX1pON1dlYkNvcmUyMVNR
TGl0ZURhdGFiYXNlVHJhY2tlcjM1ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRF
dgogX19aTjdXZWJDb3JlMjFTUUxpdGVEYXRhYmFzZVRyYWNrZXIzNWluY3JlbWVudFRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0NvdW50RXYKIF9fWk43V2ViQ29yZTIxU1FMaXRlRGF0YWJhc2VUcmFja2Vy
OXNldENsaWVudEVQTlNfMjdTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRFCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRl
eCA2NmI2NDc5YjQ5OWFmYzIyOTY0ZDVkMDBjODQwZDE3YmJkOTExYTYzLi45MWEzNTFhMTAxZTMw
Y2VlYmNlNjAyYmI1OTExMzc3OGIzMjU2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtNDksMTAgKzUwLDEzIEBAIE5ldHdvcmtD
YWNoZSYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0K
IAotYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgp
Citib29sIE5ldHdvcmtDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwg
Ym9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiB7CiAgICAgbV9zdG9yYWdlID0gTmV0d29ya0Nh
Y2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwogCisgICAgaWYgKGVuYWJsZUVmZmljYWN5TG9n
Z2luZykKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3Bl
bihjYWNoZVBhdGgpOworCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
b3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0
dXJuICEhbV9zdG9yYWdlOwogfQpAQCAtMjIwLDIzICsyMjQsMzcgQEAgdm9pZCBOZXR3b3JrQ2Fj
aGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1
ZXN0LCBzdGQKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJp
ZXZpbmcgJXMgcHJpb3JpdHkgJXUiLCBvcmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpKTsKIAorICAgIE5ldHdvcmtD
YWNoZUtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAg
aWYgKCFjYW5SZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QpKSB7CisgICAgICAgIGlmIChtX3N0YXRp
c3RpY3MpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JS
ZXF1ZXN0KHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCk7CisKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0
YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIE5ldHdvcmtD
YWNoZUtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAg
dW5zaWduZWQgcHJpb3JpdHkgPSBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKTsKIAotICAgIG1f
c3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJl
cXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9u
SGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5XShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBz
dG9yYWdlIik7CisKKyAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHN0b3JhZ2VLZXksIG9yaWdp
bmFsUmVxdWVzdCk7CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2Rl
ZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgb3JpZ2luYWxSZXF1ZXN0KTsKICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmIChtX3N0YXRp
c3RpY3MpIHsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgIG1fc3Rh
dGlzdGljcy0+cmVjb3JkVXNpbmdDYWNoZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVl
c3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVj
b3JkTm90VXNpbmdDYWNoZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAg
ICAgICB9CisKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYK
QEAgLTMzMSw2ICszNDksMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlm
IChtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0
aXN0aWNzKQorICAgICAgICBtX3N0YXRpc3RpY3MtPmNsZWFyKCk7Cit9CisKK1N0cmluZyBOZXR3
b3JrQ2FjaGU6OnN0b3JhZ2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlID8g
bV9zdG9yYWdlLT5kaXJlY3RvcnlQYXRoKCkgOiBTdHJpbmcoKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCBi
Mjg3OTY5OWRhODQ0NzVkOWVkZGNlZGM2YzZhYjJiMDUxMDJhOThjLi40MGU0M2ZjN2M5NWVmNzdi
ZTVmODA0ODY3NDI0NzM1MDUzMDlkMTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtNDEsMTMgKzQxLDE1IEBAIGNsYXNz
IFVSTDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M7CisKIGNsYXNzIE5ldHdvcmtDYWNoZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0
d29ya0NhY2hlKTsKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxOZXR3b3Jr
Q2FjaGU+OwogcHVibGljOgogICAgIHN0YXRpYyBOZXR3b3JrQ2FjaGUmIHNpbmdsZXRvbigpOwog
Ci0gICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKyAgICBib29s
IGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lM
b2dnaW5nKTsKICAgICB2b2lkIHNldE1heGltdW1TaXplKHNpemVfdCk7CiAKICAgICBib29sIGlz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdG9yYWdlOyB9CkBAIC03NSwxMSArNzcsMTQg
QEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpOwogCisgICAgU3RyaW5nIHN0b3JhZ2VQYXRo
KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgTmV0d29ya0NhY2hlKCkgPSBkZWZhdWx0OwogICAg
IH5OZXR3b3JrQ2FjaGUoKSA9IGRlbGV0ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M+IG1fc3RhdGlzdGljczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhjY2NjYTYxNDNmMzU4Y2ZiOWYxMjFmZDBhZDY0N2M1
OTkwNGIzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisjZGVmaW5l
IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5
cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIqIGRpciA9IG9wZW5kaXIo
V2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYg
KCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAgICB3aGls
ZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBl
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+
ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwg
Ii4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5h
bWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKworaW5saW5lIHZvaWQgdHJhdmVy
c2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1
bmN0aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNh
Y2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKKyAgICAgICAg
U3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0
aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSkgeworICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBh
cnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5l
dHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yYWExOThlMDFmMGFmZTIwOWY4NTNiMmE1NzI1ZDY3MDc1ODZmNGQyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3NfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gK
KworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgTmV0d29ya0NhY2hlU3RhdGlzdGljcyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPiBvcGVuKGNvbnN0IFN0
cmluZyYgY2FjaGVQYXRoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgcmVjb3Jk
Tm90VXNpbmdDYWNoZUZvclJlcXVlc3QoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNvcmRSZXRyaWV2YWxGYWlsdXJl
KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVL
ZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZFVz
aW5nQ2FjaGVkRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya0NhY2hlU3Rh
dGlzdGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CisKKyAgICB2b2lkIGluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOworICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5l
dHdvcmtDYWNoZShjb25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpOworICAgIHZvaWQgc2hy
aW5rSWZOZWVkZWQoKTsKKworICAgIGJvb2wgYWRkSGFzaFRvRGF0YWJhc2UoTmV0d29ya0NhY2hl
S2V5OjpIYXNoVHlwZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCB3
YXNFdmVyUmVxdWVzdGVkKT4gUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdm9pZCBx
dWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSwgY29uc3QgUmVx
dWVzdGVkQ29tcGxldGlvbkhhbmRsZXImKTsKKyAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChOZXR3
b3JrQ2FjaGVLZXk6Okhhc2hUeXBlKTsKKworICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkg
eworICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgIFJlcXVl
c3RlZENvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBC
bG9vbUZpbHRlcjwyMD4gbV9ldmVyUmVxdWVzdGVkRmlsdGVyOworICAgIHN0ZDo6YXRvbWljPHNp
emVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgeyAwIH07CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3Vu
ZElPUXVldWU7CisjZW5kaWYKKyAgICBtdXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNv
bnN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeT4+IG1fYWN0aXZlUXVlcmllczsKKyAgICBXZWJDb3JlOjpT
UUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUyMTAyMTYxZDBjZjE0MjQ1YTNjZmM5ODZiMjAyZDhiMWUzNjQ3MWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzQ29jb2EubW0KQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
TmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hh
ciogbmV0d29ya0NhY2hlU3RhdGlzdGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRp
c3RpY3MuZGIiOworCitzdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3FsKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRy
YWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Uu
aXNPcGVuKCkpOworCisgICAgYm9vbCByZXN1bHQgPSBkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChz
cWwpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENh
Y2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIl
c1wiIiwgc3FsLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6
aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJh
c2UoKS0+aXNPcGVuKCkpOworCisgICAgYm9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0ZUNv
bW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJBcHBsaWNhdGlv
biBDYWNoZSBTdG9yYWdlOiBmYWlsZWQgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9y
IFwiJXNcIiIsIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRlbWVudC5kYXRh
YmFzZSgpLT5sYXN0RXJyb3JNc2coKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NEYXRhYmFz
ZU5hbWUpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGlj
cz4obmV3IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoZGF0YWJhc2VQYXRoKSk7Cit9CisKK05ldHdv
cmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVBhdGgpCisgICAgOiBtX2JhY2tncm91bmRJT1F1ZXVlKGFkb3B0RGlzcGF0Y2goZGlz
cGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3MuQmFj
a2dyb3VuZCIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpKQoreworICAgIGRpc3BhdGNoX3NldF90
YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9CQUNLR1JPVU5ELCAwKSk7CisKKyAgICBp
bml0aWFsaXplKGRhdGFiYXNlUGF0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjpub3coKTsKKworICAgIFN0cmluZ0NhcHR1cmUgZGF0YWJhc2VQYXRoQ2Fw
dHVyZShkYXRhYmFzZVBhdGgpOworICAgIFN0cmluZ0NhcHR1cmUgbmV0d29ya0NhY2hlUGF0aENh
cHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yYWdlUGF0aCgpKTsKKyAgICBkaXNw
YXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgZGF0YWJhc2VQYXRo
Q2FwdHVyZSwgbmV0d29ya0NhY2hlUGF0aENhcHR1cmUsIHN0YXJ0VGltZV0geworICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CisKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aENh
cHR1cmUuc3RyaW5nKCk7CisgICAgICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVz
KFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgT3Blbmlu
ZyBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgYXQgJXMuLi4iLCBkYXRhYmFzZVBh
dGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgp
OworICAgICAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAgICAgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBvcGVuIC8gY3JlYXRlIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2Ui
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGV4ZWN1dGVTUUxD
b21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgQWxyZWFkeVJlcXVlc3RlZCAoaGFzaCBJTlRFR0VSIFBSSU1BUlkgS0VZKSIpKTsKKyAgICAg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxp
dGVyYWwoIlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVlc3RlZCIpKTsKKyAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYm9vbCBuZWVkc0Jvb3RzdHJhcHBpbmcgPSB0cnVlOworICAg
ICAgICBpbnQgcmVzdWx0OworICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykgeworICAgICAgICAgICAgbmVlZHNCb290c3Ry
YXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBhdXRvIGhhc2ggPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbdGhpcywgaGFzaF0geworICAgICAgICAgICAgICAgIG1fZXZlclJlcXVlc3Rl
ZEZpbHRlci5hZGQoaGFzaCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICsrbV9hcHBy
b3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAg
ICAgYXV0byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0
VGltZSkuY291bnQoKTsKKyNlbmRpZgorICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSBOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgbG9hZCBjb21wbGV0
ZSwgZW50cmllcz0lbHUgdGltZT0lbGxkbXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94
aW1hdGVFbnRyeUNvdW50KSwgZWxhcHNlZE1TKTsKKworICAgICAgICBpZiAobmVlZHNCb290c3Ry
YXBwaW5nKSB7CisgICAgICAgICAgICBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtD
YWNoZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgICAg
ICBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSku
Y291bnQoKTsKKyNlbmRpZgorICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3Jr
UHJvY2VzcykgTmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGJvb3RzdHJhcHBpbmcg
Y29tcGxldGUsIGVudHJpZXM9JWx1IHRpbWU9JWxsZG1zIiwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2FwcHJveGltYXRlRW50cnlDb3VudCksIGVsYXBzZWRNUyk7CisgICAgICAgIH0KKyAgICB9KTsK
K30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0Nh
Y2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9t
IHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CisKKyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlv
bkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgV2ViQ29yZTo6
U1FMaXRlVHJhbnNhY3Rpb24gYm9vdHN0cmFwVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAg
Ym9vdHN0cmFwVHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhu
ZXR3b3JrQ2FjaGVQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3Ry
aW5nJikgeworICAgICAgICBOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAg
IGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghYWRkSGFzaFRvRGF0YWJhc2UoaGFzaCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3RoaXMsIGhhc2hdIHsKKyAgICAgICAgICAgIG1fZXZlclJlcXVl
c3RlZEZpbHRlci5hZGQoaGFzaCk7CisgICAgICAgIH0pOworICAgICAgICArK21fYXBwcm94aW1h
dGVFbnRyeUNvdW50OworICAgIH0pOworICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmNvbW1pdCgp
OworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIC8vIEZvciBhIEJsb29tRmlsdGVy
IHdpdGggMjAga2V5Qml0cywgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgYmVjb21lcworICAgIC8v
IH4yMCUgd2hlbiByZWFjaGluZyA4MDAwMCBlbnRyaWVzIChzZWUgY29tbWVudCBpbiBCbG9vbUZp
bHRlci5oKS4KKyAgICBjb25zdCBzaXplX3QgbWF4RW50cmllcyA9IDgwMDAwOworCisgICAgaWYg
KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50IDwgbWF4RW50cmllcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIHN0YXRp
c3RpY3MgY2FjaGUgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ9JWx1LCBtYXhFbnRyaWVzPSVsdSIs
IHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpLCBtYXhFbnRyaWVz
KTsKKworICAgIGNsZWFyKCk7CisKKyAgICBTdHJpbmdDYXB0dXJlIG5ldHdvcmtDYWNoZVBhdGhD
YXB0dXJlKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmFnZVBhdGgoKSk7CisgICAgZGlz
cGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIG5ldHdvcmtDYWNo
ZVBhdGhDYXB0dXJlXSB7CisgICAgICAgIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29y
a0NhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCkpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSBzdGF0aXN0aWNzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHBy
b3hpbWF0ZUVudHJ5Q291bnQ9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRl
RW50cnlDb3VudCkpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6
OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBo
YXNoID0ga2V5Lmhhc2goKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3Qu
dXJsKCk7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1
ZXN0VVJMXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKKyAgICAgICAgaWYgKHdhc0V2ZXJSZXF1
ZXN0ZWQpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
ICVzIHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBidXQgaXMgbm90IGhhbmRsZWQgYnkgdGhlIGNh
Y2hlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAv
LyBGSVhNRTogRG8gZGlhZ25vc3RpYyBsb2dnaW5nLgorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1hcmtBc1JlcXVlc3RlZChoYXNoKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtl
eSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAg
YXV0byBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJl
cXVlc3QudXJsKCk7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNo
LCByZXF1ZXN0VVJMXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgaWYg
KHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IGNhY2hlZCBidXQgaXMgbm8gbG9u
Z2VyIGluIHRoZSBjYWNoZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZWRFbnRyeShjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBhdXRvIGhhc2ggPSBrZXkuaGFzaCgpOwor
ICAgIEFTU0VSVChtX2V2ZXJSZXF1ZXN0ZWRGaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisjZW5k
aWYKKworICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKKyAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBpbiB0aGUgY2FjaGUgYnV0
IGlzbid0IHVzYWJsZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
IC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCit9CisKK3ZvaWQgTmV0d29ya0NhY2hl
U3RhdGlzdGljczo6cmVjb3JkVXNpbmdDYWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
IGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBhdXRvIGhhc2ggPSBrZXkuaGFzaCgpOworICAgIEFTU0VSVChtX2V2ZXJS
ZXF1ZXN0ZWRGaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisjZW5kaWYKKworICAgIFdlYkNvcmU6
OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBpbiB0aGUgY2FjaGUgYW5kIGlzIHVzZWQiLCByZXF1ZXN0
VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3Rp
YyBsb2dnaW5nLgorfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1JlcXVl
c3RlZChOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2gpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fZXZlclJlcXVlc3RlZEZpbHRlci5hZGQoaGFzaCk7Cisg
ICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFj
a2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBoYXNoXSB7CisgICAgICAgIFdlYkNvcmU6OlNR
TGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsK
KyAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICBhZGRIYXNoVG9E
YXRhYmFzZShoYXNoKTsKKyAgICB9KTsKKworICAgIHNocmlua0lmTmVlZGVkKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKE5ldHdvcmtD
YWNoZUtleTo6SGFzaFR5cGUgaGFzaCwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXIm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAoIW1fZXZlclJlcXVlc3RlZEZpbHRlci5tYXlDb250YWluKGhhc2gpKSB7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVz
dGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gsIGNvbXBsZXRpb25IYW5kbGVyIH0p
OworICAgIGF1dG8mIHF1ZXJ5ID0gKmV2ZXJSZXF1ZXN0ZWRRdWVyeTsKKyAgICBtX2FjdGl2ZVF1
ZXJpZXMuYWRkKFdURjo6bW92ZShldmVyUmVxdWVzdGVkUXVlcnkpKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgJnF1ZXJ5XSB7CisgICAgICAg
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKKyAgICAgICAgYm9vbCB3YXNBbHJlYWR5UmVxdWVzdGVkID0gZmFsc2U7Cisg
ICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNU
IGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBxdWVyeS5oYXNoKTsKKyAgICAgICAg
ICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVkID0gc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3Jl
OjpTUUxSZXN1bHRSb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsICZxdWVyeSwgd2FzQWxy
ZWFkeVJlcXVlc3RlZF0geworICAgICAgICAgICAgcXVlcnkuY29tcGxldGlvbkhhbmRsZXIod2Fz
QWxyZWFkeVJlcXVlc3RlZCk7CisgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVtb3ZlKCZx
dWVyeSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
bV9ldmVyUmVxdWVzdGVkRmlsdGVyLmNsZWFyKCk7CisgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291
bnQgPSAwOworCisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwg
W3RoaXNdIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgICAgIGV4ZWN1dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0
ZXJhbCgiREVMRVRFIEZST00gQWxyZWFkeVJlcXVlc3RlZCIpKTsKKyAgICB9KTsKK30KKworYm9v
bCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShOZXR3b3JrQ2FjaGVL
ZXk6Okhhc2hUeXBlIGhhc2gpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25J
blByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKKworICAgIFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFs
KCJJTlNFUlQgSU5UTyBBbHJlYWR5UmVxdWVzdGVkIChoYXNoKSBWQUxVRVMgKD8pIikpOworICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGhhc2gpOworICAg
IHJldHVybiBleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmgKaW5kZXggYTkxYzZlYjU1NTJhMTM4YTgwZDI2Mjg2YzMyNTRkOGZmMWE1YjUxZi4uYmQ1
MTM1ZWJlNmQ1YTYwNTc1NDY0NGE3ZGVlZGE1NzY5OTAzYzMxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
aApAQCAtMTU1LDYgKzE1NSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCB2ZXJzaW9uID0gMTsKIAorICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0b3J5UGF0aDsgfQorCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNo
ZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZUNvY29hLm1tCmluZGV4IDZmNzIwOTg0NmIzMjdmMjlkNDEzODJlYWI4NTZhY2M1NjI0ODdj
OWUuLjcxZDcxZTk4ZDliYjdlYzViOWIwOWRlMzVlMzVjNGJiMzk5NjIxODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlQ29jb2EubW0KQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtUG9zaXguaCIKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTQzLDM2ICs0Miw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hl
U3ViZGlyZWN0b3J5ID0gIldlYktpdENhY2hlIjsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgotc3RhdGljIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1
aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9
IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7
Ci0gICAgaWYgKCFkaXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsK
LSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlw
ZSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5h
bWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJj
bXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24o
U3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLX0KLQotc3RhdGljIHZv
aWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9u
UGF0aCk+IGZ1bmN0aW9uKQotewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRf
RElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsK
LSAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3Rv
cnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgp
ICE9IDgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmls
ZU5hbWUsIHBhcnRpdGlvblBhdGgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogTmV0d29y
a0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKICAgICA6IG1fZGlzcGF0Y2hEYXRhKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVh
dGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQp
KSkKICAgICAsIG1fc2l6ZShzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggNzYwNDQwOTJj
YjE2YTM0NDJjNzZkYmY3NjNiODI2YmQwYjMwYjkxMC4uZWFjNThlOTg2YTc5MTNkNDIzN2Y3MjRi
MTYwYTQ1YTJkZDcyMzg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgaWYgKCFtX2Rpc2tDYWNoZURpcmVjdG9yeS5p
c051bGwoKSkgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQotICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3
b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0Nh
Y2hlRGlyZWN0b3J5KSkgeworICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3
b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0Nh
Y2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZykpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiB1cmxDYWNoZShh
ZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tD
YXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgIFtOU1VSTENhY2hlIHNldFNo
YXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA1NzllMzZiMDQzNGM1YTc3NTIzNzgx
NGEwM2JmMTRhMWYxZGYzOGI0Li4wMjFhNzI2MGVjMzZiNWZhZjdkYzM0NDZhYzdhODUxMDQ2YzBl
Y2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC00NSw2ICs0NSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uCiAgICAgZW5jb2RlciA8PCBkaXNrQ2FjaGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgZW5j
b2RlciA8PCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRF
bmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmc7CiAjZW5kaWYKICAgICBlbmNvZGVyIDw8
IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtODYsNiArODcs
OCBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpB
cmd1bWVudERlY29kZXImIGRlY29kZXIsIE5ldAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5z
aG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVTdG9y
YWdlRGlyZWN0b3J5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggNGExZTRiNzliYzZkMjg1MTg5M2NiMzg4OGZkYTUxNGFiYzZlYmVi
ZC4uMWE1NDkyODljZGQzN2UzODJiNTEyOTQ0YjdhMDNlMjdhZTQyMDRjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC01OCw2ICs1OCw3IEBAIHN0cnVjdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGRp
c2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKICAgICBib29sIHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBib29sIHNob3VsZEVu
YWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKICNlbmRpZgogCiAgICAgU3RyaW5nIGNv
b2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDkxNjUzZGNlN2RiOWI2MWFhZWI4
YjM5NDFmZDVmZWQzM2E0MzcxZGQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUy
MDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCkBAIC04MSw2ICs4MSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IFdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXkgPSBAIldlYktpdDJIVFRQU1Byb3h5IjsK
IAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2Vi
S2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5ID0gQCJXZWJLaXROZXR3b3JrQ2FjaGVF
bmFibGVkIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtDYWNoZUVmZmlj
YWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleSA9IEAiV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNh
Y3lMb2dnaW5nRW5hYmxlZCI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDYs
NiArMTA3LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAK
ICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdv
cmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3
b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiAKICAg
ICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRz
OnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwpAQCAtMjUyLDYgKzI1NCw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIGJvb2xGb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5
XTsKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2lu
ZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRp
ZgogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggOGQ1NTgwN2FjOGQ0ZTRjZDYxYjA5NDBhOTQ4ZjgzYWIxYzExZDA4
OS4uNzg2Yjc4MWRmZjFjOWQ4MDY2NDk0M2RmY2FjYjgxMGJhMmJhOGM4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE0Niw2
ICsxMTQ2LDkgQEAKIAkJN0NGNDdGRkUxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJh
bm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi87
IH07CiAJCTdDRjQ3RkZGMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZE
MTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4
MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0
d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4LmggKi87IH07CisJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oICovOyB9OworCQk4MzRCMjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3NDb2NvYS5tbSAqLzsgfTsKIAkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CkBAIC0zMzE5LDYgKzMzMjIsOSBAQAogCQk3
Q0Y0N0ZGQzE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNC
OTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29j
b2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAg
LyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTExMUE4NDJD
ODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdD
NSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03Mzc5LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAv
KiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMw
NkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQzNkVDMDFB
MENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFB
MENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1MTAxQTg0
MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLywKKwkJCQk4MzRCMjUx
MTFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tICovLAog
CQkJCUU0NDM2RUMyMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi8s
CiAJCQkJRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2VDb2Nv
YS5tbSAqLywKIAkJCSk7CkBAIC03NDk3LDYgKzc1MDYsNyBAQAogCQkJCTFBQzEzMzZDMTg1NjVD
N0EwMEYzRUMwNSAvKiBBUElQYWdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERDMx
NTE4OTFCNTQwMDAxNTM5NzAgLyogQVBJUG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3Q0U0RDIyMDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYzNDQ0NTYxMkE4ODVDODAw
MDYxMkQ4IC8qIEFQSVNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJF
MTE4N0RFQzFBMDBDMzlDOUUgLyogQVBJU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFG
REU2NjIxOTU0RTlCMTAwQzQ4RkZBIC8qIEFQSVNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NjgzLDYgKzc2OTMsNyBAQAogCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBO
UFJ1bnRpbWVPYmplY3RNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjE2MkIxMTFGMzg5NzEw
MDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4
NEEzMTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09i
amVjdEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNjcyRDEyQzdFREY3MDA4RjlDMzUg
LyogT3JpZ2luQW5kRGF0YWJhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1
QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODgxLDYgKzk4
OTIsNyBAQAogCQkJCTFDOEUyOTNBMTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjNDNzI1QzE5NkY2MDUyMDBBRUREMEMgLyogV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0MjkzQTUxOTVBNDNERDAw
Mjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJODM0QjI1MTMxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQTlFMTBBMTMxNUNEMTgwMDlF
NzAzMSAvKiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzNEM0EzQjUxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM0MDc1RkQxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJsZUFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246189</attachid>
            <date>2015-02-06 16:41:51 -0800</date>
            <delta_ts>2015-02-06 19:10:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150206164150.patch</filename>
            <type>text/plain</type>
            <size>40523</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk0N2FmYjQxNWYzMWU2
ZTQ0OGE0Y2U4MTBmOTRkZGE1ZDA3OGVmNi4uZjA4NWViNjRlY2ZlN2QyZGJjMWZlYjMwZTljYTIx
ZWFiNmQxMmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRXhwb3J0IGFuIGV4dHJhIHN5bWJvbC4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorCiAyMDE1LTAyLTA2ICBCYXJ0bG9taWVqIEdhamRhICA8Yi5nYWpkYUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbTVNFXSBJbXBsZW1lbnQgQXBwZW5kIEVycm9yIGFsZ29y
aXRobS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCAwYmE5NmY2ODNmOWJkMjFkNDk1NmUyNWY1ZDk3ZGI1MGJmNGQz
MTlhLi4yZDU0MTA4NmU2YzIzY2EzMTg4MTI5NzdlMDk4ODBjODI4Y2VlMDYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzQgQEAKKzIwMTUtMDItMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBbV0syXSBBZGQgbG9nZ2luZyB0byB2YWxpZGF0ZSB0aGUgbmV0d29y
ayBjYWNoZSBlZmZpY2FjeSAoUGFydCAxKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMjY5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xOTYzMjA4
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
Y29uc29sZSBsb2dnaW5nIHRvIHZhbGlkYXRlIHRoZSBuZXR3b3JrIGNhY2hlIGVmZmljYWN5LiBU
aGlzIHdpbGwKKyAgICAgICAgdGVsbCB1cyBpZiBob3cgdGhlIG5ldHdvcmsgY2FjaGUgc2F0aXN0
aWVzIHJlcXVlc3RzLCBpbiBwYXJ0aWN1bGFyOgorICAgICAgICAtIFJlcXVlc3QgY2Fubm90IGJl
IGhhbmRsZWQgYnkgdGhlIGNhY2hlCisgICAgICAgIC0gRW50cnkgd2FzIG5vdCBpbiB0aGUgY2Fj
aGUgYnV0IGlzIG5vIGxvbmdlciB0aGVyZSAocHJ1bmVkKQorICAgICAgICAtIEVudHJ5IGlzIGlu
IHRoZSBjYWNoZSBidXQgaXMgbm90IHVzYWJsZQorICAgICAgICAtIEVudHJ5IGlzIGluIHRoZSBj
YWNoZSBhbmQgaXMgdXNlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBTUUxp
dGUtYmFzZWQgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIHN0b3JhZ2UKKyAgICAgICAgdGhhdCBp
cyB1c2VkIHRvIHN0b3JlIHJlcXVlc3RzIHdlIGhhdmUgc2VlbiBiZWZvcmUsIGFuZCBxdWVyeSBp
ZiB3ZQorICAgICAgICBoYXZlIHNlZW4gYSByZXF1ZXN0IGJlZm9yZS4gVGhlIHN0b3JhZ2UgaXMg
bGlnaHR3ZWlnaHQgYXMgaXQgb25seQorICAgICAgICBzdG9yZXMgaGFzaGVzIGluIHRoZSBkYXRh
YmFzZSwgaW4gYSBiYWNrZ3JvdW5kIHRocmVhZC4gRm9yIHBlcmZvcm1hbmNlCisgICAgICAgIHJl
YXNvbnMsIHdlIHVzZSBhIGJsb29tIGZpbHRlciB0byBhdm9pZCBtb3N0IG9mIGRpc2sgSS9PIHdo
ZW4gcXVlcnlpbmcuCisKKyAgICAgICAgVGhlIHN0YXRpc3RpY3MgY2FjaGUgaXMgaW5pdGlhbGx5
IGJvb3RzdGFwcGVkIGZyb20gdGhlIG5ldHdvcmsgZGlzaworICAgICAgICBjYWNoZSBzbyB0aGF0
IHdlIGhhdmUgZGF0YSBpbml0aWFsbHkgYW5kIGdldCBhcyBhY2N1cmF0ZSBzdGF0aXN0aWNzCisg
ICAgICAgIGFzIHBvc3NpYmxlIGZyb20gdGhlIHN0YXJ0LgorCisgICAgICAgIFRvIG1haW50YWlu
IGFuIGFjY2VwdGFibGUgbGV2ZWwgb2YgcGVyZm9ybWFuY2UsIHdlIGhhdmUgYSBoYXJkIGxpbWl0
CisgICAgICAgIG9uIHRoZSBudW1iZXIgb2YgdW5pcXVlIHJlcXVlc3RzIHRoYXQgYXJlIHJldGFp
bmVkIHNldCB0byA4MDAwMC4gQXQKKyAgICAgICAgODAwMDAsIHRoZSBibG9vbSBmaWx0ZXIgcmVh
Y2hlcyBhIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjIwJS4KKworICAgICAgICBEaWFnbm9zdGlj
IGxvZ2dpbmcgZm9yIHRoaXMgd2lsbCBiZSBhZGRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKwog
MjAxNS0wMi0wNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXBvcnQgbmV0d29yayBwcm9jZXNzIGNyYXNoZXMgZHVyaW5nIGxheW91dCB0ZXN0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgppbmRleCBmYzdkYThlMTllYTY2M2E1MzJkZTNlNmEzODA1ZGY1N2NkZTE4
ZTllLi5mMGYyOThiYmRlZDEwODE1MWI5ZDA3Mjk1ZmRlOTc3MjRhODQwM2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtMjI2Miw2ICsyMjYyLDcgQEAgX19aTks3V2ViQ29yZTdFbGVtZW50MjZm
YXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKICNlbmRpZgog
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorX19aTjdXZWJDb3JlMjFTUUxpdGVEYXRhYmFzZVRyYWNr
ZXIyNGhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzc0V2CiBfX1pON1dlYkNvcmUyN05vRXhjZXB0aW9u
QXNzZXJ0aW9uQ2hlY2tlckMxRVBLY2kKIF9fWk43V2ViQ29yZTI3Tm9FeGNlcHRpb25Bc3NlcnRp
b25DaGVja2VyRDFFdgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCA2NmI2NDc5YjQ5OWFmYzIyOTY0ZDVk
MDBjODQwZDE3YmJkOTExYTYzLi45MWEzNTFhMTAxZTMwY2VlYmNlNjAyYmI1OTExMzc3OGIzMjU2
ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgpAQCAtNDksMTAgKzUwLDEzIEBAIE5ldHdvcmtDYWNoZSYgTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGU6Omlu
aXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCitib29sIE5ldHdvcmtDYWNoZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dp
bmcpCiB7CiAgICAgbV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBh
dGgpOwogCisgICAgaWYgKGVuYWJsZUVmZmljYWN5TG9nZ2luZykKKyAgICAgICAgbV9zdGF0aXN0
aWNzID0gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3BlbihjYWNoZVBhdGgpOworCiAgICAgTE9H
KE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgb3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1
Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0dXJuICEhbV9zdG9yYWdlOwogfQpAQCAt
MjIwLDIzICsyMjQsMzcgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBzdGQKIAogICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJXUiLCBv
cmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG9yaWdpbmFsUmVx
dWVzdC5wcmlvcml0eSgpKTsKIAorICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdlS2V5ID0gbWFr
ZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgaWYgKCFjYW5SZXRyaWV2ZShvcmlnaW5h
bFJlcXVlc3QpKSB7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHN0b3JhZ2VLZXksIG9yaWdp
bmFsUmVxdWVzdCk7CisKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpz
eXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdlS2V5ID0gbWFr
ZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgdW5zaWduZWQgcHJpb3JpdHkgPSBvcmln
aW5hbFJlcXVlc3QucHJpb3JpdHkoKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFn
ZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVy
LCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4g
ZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBb
dGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9y
YWdlS2V5XShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5
KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisKKyAgICAgICAgICAg
IGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRS
ZXRyaWV2YWxGYWlsdXJlKHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCk7CisKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVu
dHJ5KCplbnRyeSwgb3JpZ2luYWxSZXF1ZXN0KTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gISFk
ZWNvZGVkRW50cnk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpIHsKKyAgICAgICAgICAgIGlm
IChzdWNjZXNzKQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkVXNpbmdDYWNo
ZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90VXNpbmdDYWNoZWRFbnRyeShz
dG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICB9CisKICNpZiAhTE9HX0RJU0FC
TEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93
KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYKQEAgLTMzMSw2ICszNDksMTMgQEAgdm9p
ZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlmIChtX3N0b3JhZ2UpCiAgICAgICAgIG1f
c3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICBtX3N0YXRp
c3RpY3MtPmNsZWFyKCk7Cit9CisKK1N0cmluZyBOZXR3b3JrQ2FjaGU6OnN0b3JhZ2VQYXRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlID8gbV9zdG9yYWdlLT5kaXJlY3RvcnlQYXRo
KCkgOiBTdHJpbmcoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCBiMjg3OTY5OWRhODQ0NzVkOWVkZGNlZGM2
YzZhYjJiMDUxMDJhOThjLi40MGU0M2ZjN2M5NWVmNzdiZTVmODA0ODY3NDI0NzM1MDUzMDlkMTk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuaApAQCAtNDEsMTMgKzQxLDE1IEBAIGNsYXNzIFVSTDsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKK2NsYXNzIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M7CisKIGNsYXNzIE5ldHdvcmtDYWNo
ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0NhY2hlKTsKICAgICBmcmllbmQg
Y2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxOZXR3b3JrQ2FjaGU+OwogcHVibGljOgogICAgIHN0
YXRpYyBOZXR3b3JrQ2FjaGUmIHNpbmdsZXRvbigpOwogCi0gICAgYm9vbCBpbml0aWFsaXplKGNv
bnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKyAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5n
JiBjYWNoZVBhdGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKTsKICAgICB2b2lkIHNldE1h
eGltdW1TaXplKHNpemVfdCk7CiAKICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9zdG9yYWdlOyB9CkBAIC03NSwxMSArNzcsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhcigpOwogCisgICAgU3RyaW5nIHN0b3JhZ2VQYXRoKCkgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgTmV0d29ya0NhY2hlKCkgPSBkZWZhdWx0OwogICAgIH5OZXR3b3JrQ2FjaGUoKSA9IGRlbGV0
ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPiBtX3N0b3JhZ2U7
CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+IG1fc3RhdGlzdGlj
czsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODhjY2NjYTYxNDNmMzU4Y2ZiOWYxMjFmZDBhZDY0N2M1OTkwNGIzNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdv
cmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUtleS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRp
cmVudC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5j
dGlvbikKK3sKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsK
KyAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkg
eworICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0
cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2Vk
aXIoZGlyKTsKK30KKworaW5saW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZlcnNl
RGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25z
dCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsK
KyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0
aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAgICAg
ICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3Np
eF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWExOThlMDFmMGFmZTIw
OWY4NTNiMmE1NzI1ZDY3MDc1ODZmNGQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NfaAor
I2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcyB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKworICAg
IHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3Qo
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
CisgICAgdm9pZCByZWNvcmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkTm90VXNp
bmdDYWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZFVzaW5nQ2FjaGVkRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgTmV0d29ya0NhY2hlU3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIGRh
dGFiYXNlUGF0aCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZVBhdGgpOworICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBTdHJpbmcm
IG5ldHdvcmtDYWNoZVBhdGgpOworICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQoKTsKKworICAgIGJv
b2wgYWRkSGFzaFRvRGF0YWJhc2UoTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSk7CisKKyAgICB0
eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNFdmVyUmVxdWVzdGVkKT4gUmVxdWVz
dGVkQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoTmV0
d29ya0NhY2hlS2V5OjpIYXNoVHlwZSwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXIm
KTsKKyAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlKTsK
KworICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkgeworICAgICAgICBOZXR3b3JrQ2FjaGVL
ZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgIFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyIGNv
bXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9ldmVyUmVx
dWVzdGVkRmlsdGVyOworICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQgeyAwIH07CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIERpc3BhdGNo
UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5kaWYKKyAgICBt
dXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeT4+
IG1fYWN0aXZlUXVlcmllczsKKyAgICBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09S
S19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMTAyMTYxZDBjZjE0MjQ1YTNj
ZmM5ODZiMjAyZDhiMWUzNjQ3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAgLTAs
MCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCisK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3RhdGlzdGlj
c0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworCitzdGF0aWMgYm9v
bCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgc3FsKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Q
cm9ncmVzcygpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgYm9vbCBy
ZXN1bHQgPSBkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChzcWwpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBl
eGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3FsLnV0ZjgoKS5kYXRhKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBz
dGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJU
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNz
KCkpOworICAgIEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS0+aXNPcGVuKCkpOworCisgICAg
Ym9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgTE9HX0VSUk9SKCJBcHBsaWNhdGlvbiBDYWNoZSBTdG9yYWdlOiBmYWlsZWQg
dG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9yIFwiJXNcIiIsIHN0YXRlbWVudC5xdWVy
eSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRlbWVudC5kYXRhYmFzZSgpLT5sYXN0RXJyb3JNc2coKSk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hl
U3RhdGlzdGljcz4gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5n
IGRhdGFiYXNlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBh
dGgsIG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NEYXRhYmFzZU5hbWUpOworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4obmV3IE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3MoZGF0YWJhc2VQYXRoKSk7Cit9CisKK05ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdv
cmtDYWNoZVN0YXRpc3RpY3MoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCisgICAgOiBtX2Jh
Y2tncm91bmRJT1F1ZXVlKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20u
YXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3MuQmFja2dyb3VuZCIsIERJU1BBVENIX1FVRVVF
X1NFUklBTCkpKQoreworICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5k
SU9RdWV1ZS5nZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9Q
UklPUklUWV9CQUNLR1JPVU5ELCAwKSk7CisKKyAgICBpbml0aWFsaXplKGRhdGFiYXNlUGF0aCk7
Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6aW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmIGRhdGFiYXNlUGF0aCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKwor
ICAgIFN0cmluZ0NhcHR1cmUgZGF0YWJhc2VQYXRoQ2FwdHVyZShkYXRhYmFzZVBhdGgpOworICAg
IFN0cmluZ0NhcHR1cmUgbmV0d29ya0NhY2hlUGF0aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKS5zdG9yYWdlUGF0aCgpKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJ
T1F1ZXVlLmdldCgpLCBbdGhpcywgZGF0YWJhc2VQYXRoQ2FwdHVyZSwgbmV0d29ya0NhY2hlUGF0
aENhcHR1cmUsIHN0YXJ0VGltZV0geworICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlv
bkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisKKyAgICAgICAgU3Ry
aW5nIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aENhcHR1cmUuc3RyaW5nKCk7CisgICAgICAg
IGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUo
ZGF0YWJhc2VQYXRoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgT3BlbmluZyBuZXR3b3JrIGNhY2hlIHN0YXRpc3Rp
Y3MgZGF0YWJhc2UgYXQgJXMuLi4iLCBkYXRhYmFzZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIG1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpOworICAgICAgICBtX2RhdGFiYXNlLmRp
c2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIC8gY3JlYXRlIHRoZSBu
ZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGV4ZWN1dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJ
TGl0ZXJhbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQWxyZWFkeVJlcXVlc3RlZCAoaGFz
aCBJTlRFR0VSIFBSSU1BUlkgS0VZKSIpKTsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBoYXNoIEZST00g
QWxyZWFkeVJlcXVlc3RlZCIpKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
V2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9v
bCBuZWVkc0Jvb3RzdHJhcHBpbmcgPSB0cnVlOworICAgICAgICBpbnQgcmVzdWx0OworICAgICAg
ICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFdlYkNvcmU6OlNRTFJlc3Vs
dFJvdykgeworICAgICAgICAgICAgbmVlZHNCb290c3RyYXBwaW5nID0gZmFsc2U7CisgICAgICAg
ICAgICBhdXRvIGhhc2ggPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgaGFzaF0g
eworICAgICAgICAgICAgICAgIG1fZXZlclJlcXVlc3RlZEZpbHRlci5hZGQoaGFzaCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAg
ICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgYXV0byBlbGFwc2VkTVMgPSBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSkuY291bnQoKTsKKyNlbmRpZgor
ICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrIGNhY2hl
IHN0YXRpc3RpY3MgZGF0YWJhc2UgbG9hZCBjb21wbGV0ZSwgZW50cmllcz0lbHUgdGltZT0lbGxk
bXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSwgZWxhcHNl
ZE1TKTsKKworICAgICAgICBpZiAobmVlZHNCb290c3RyYXBwaW5nKSB7CisgICAgICAgICAgICBi
b290c3RyYXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlLnN0cmluZygp
KTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgICAgICBlbGFwc2VkTVMgPSBzdGQ6OmNocm9u
bzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSkuY291bnQoKTsKKyNlbmRpZgorICAgICAg
ICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgTmV0d29yayBjYWNoZSBz
dGF0aXN0aWNzIGRhdGFiYXNlIGJvb3RzdHJhcHBpbmcgY29tcGxldGUsIGVudHJpZXM9JWx1IHRp
bWU9JWxsZG1zIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCks
IGVsYXBzZWRNUyk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29y
a0NhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdv
cmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7
CisKKyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gYm9vdHN0
cmFwVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgYm9vdHN0cmFwVHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbdGhpc10o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJikgeworICAgICAgICBOZXR3b3Jr
Q2FjaGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgIGlmICghTmV0d29ya0NhY2hlS2V5Ojpz
dHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICghYWRkSGFzaFRvRGF0YWJhc2UoaGFzaCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMs
IGhhc2hdIHsKKyAgICAgICAgICAgIG1fZXZlclJlcXVlc3RlZEZpbHRlci5hZGQoaGFzaCk7Cisg
ICAgICAgIH0pOworICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAgIH0pOwor
ICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmNvbW1pdCgpOworfQorCit2b2lkIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIC8vIEZvciBhIEJsb29tRmlsdGVyIHdpdGggMjAga2V5Qml0cywgdGhlIGZh
bHNlIHBvc2l0aXZlIHJhdGUgYmVjb21lcworICAgIC8vIH4yMCUgd2hlbiByZWFjaGluZyA4MDAw
MCBlbnRyaWVzIChzZWUgY29tbWVudCBpbiBCbG9vbUZpbHRlci5oKS4KKyAgICBjb25zdCBzaXpl
X3QgbWF4RW50cmllcyA9IDgwMDAwOworCisgICAgaWYgKG1fYXBwcm94aW1hdGVFbnRyeUNvdW50
IDwgbWF4RW50cmllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIHN0YXRpc3RpY3MgY2FjaGUgbV9hcHByb3hpbWF0
ZUVudHJ5Q291bnQ9JWx1LCBtYXhFbnRyaWVzPSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQpLCBtYXhFbnRyaWVzKTsKKworICAgIGNsZWFyKCk7CisKKyAg
ICBTdHJpbmdDYXB0dXJlIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuc3RvcmFnZVBhdGgoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5k
SU9RdWV1ZS5nZXQoKSwgW3RoaXMsIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlXSB7CisgICAgICAg
IGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29ya0NhY2hlUGF0aENhcHR1cmUuc3RyaW5n
KCkpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdGF0aXN0
aWNzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ9JWx1Iiwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCkpOworICAgIH0pOwor
fQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JS
ZXF1ZXN0KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBX
ZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgcXVlcnlXYXNFdmVy
UmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMXShib29sIHdhc0V2ZXJSZXF1
ZXN0ZWQpIHsKKyAgICAgICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IHJlcXVl
c3RlZCBidXQgaXMgbm90IGhhbmRsZWQgYnkgdGhlIGNhY2hlIiwgcmVxdWVzdFVSTC5zdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3RpYyBs
b2dnaW5nLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1hcmtBc1JlcXVlc3RlZChoYXNo
KTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRy
aWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBoYXNoID0ga2V5Lmhhc2goKTsK
KyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgcXVlcnlX
YXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMXShib29sIHdhc1By
ZXZpb3VzbHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQp
IHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdh
cyBwcmV2aW91c2x5IGNhY2hlZCBidXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBjYWNoZSIsIHJlcXVl
c3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IERv
IGRpYWdub3N0aWMgbG9nZ2luZy4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYXJrQXNS
ZXF1ZXN0ZWQoaGFzaCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkTm90VXNpbmdDYWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBhdXRvIGhhc2ggPSBrZXkuaGFzaCgpOworICAgIEFTU0VSVChtX2V2ZXJSZXF1ZXN0
ZWRGaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisjZW5kaWYKKworICAgIFdlYkNvcmU6OlVSTCBy
ZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSAlcyBpcyBpbiB0aGUgY2FjaGUgYnV0IGlzbid0IHVzYWJsZSIsIHJlcXVlc3RV
Ukwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGlj
IGxvZ2dpbmcuCit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkVXNpbmdD
YWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBhdXRvIGhhc2gg
PSBrZXkuaGFzaCgpOworICAgIEFTU0VSVChtX2V2ZXJSZXF1ZXN0ZWRGaWx0ZXIubWF5Q29udGFp
bihoYXNoKSk7CisjZW5kaWYKKworICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVz
dC51cmwoKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBp
biB0aGUgY2FjaGUgYW5kIGlzIHVzZWQiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3RpYyBsb2dnaW5nLgorfQorCit2b2lkIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1JlcXVlc3RlZChOZXR3b3JrQ2FjaGVLZXk6Okhh
c2hUeXBlIGhhc2gpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
ZXZlclJlcXVlc3RlZEZpbHRlci5hZGQoaGFzaCk7CisgICAgKyttX2FwcHJveGltYXRlRW50cnlD
b3VudDsKKworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0
aGlzLCBoYXNoXSB7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpCisgICAgICAgICAgICBhZGRIYXNoVG9EYXRhYmFzZShoYXNoKTsKKyAgICB9KTsK
KworICAgIHNocmlua0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaCwg
Y29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fZXZlclJlcXVlc3Rl
ZEZpbHRlci5tYXlDb250YWluKGhhc2gpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1
ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVzdGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRR
dWVyeSB7IGhhc2gsIGNvbXBsZXRpb25IYW5kbGVyIH0pOworICAgIGF1dG8mIHF1ZXJ5ID0gKmV2
ZXJSZXF1ZXN0ZWRRdWVyeTsKKyAgICBtX2FjdGl2ZVF1ZXJpZXMuYWRkKFdURjo6bW92ZShldmVy
UmVxdWVzdGVkUXVlcnkpKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVl
LmdldCgpLCBbdGhpcywgJnF1ZXJ5XSB7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyAgICAgICAgYm9v
bCB3YXNBbHJlYWR5UmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVz
dGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBxdWVyeS5oYXNoKTsKKyAgICAgICAgICAgICAgICB3YXNBbHJlYWR5UmVxdWVz
dGVkID0gc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3c7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3RoaXMsICZxdWVyeSwgd2FzQWxyZWFkeVJlcXVlc3RlZF0geworICAgICAg
ICAgICAgcXVlcnkuY29tcGxldGlvbkhhbmRsZXIod2FzQWxyZWFkeVJlcXVlc3RlZCk7CisgICAg
ICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVtb3ZlKCZxdWVyeSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmNsZWFyKCkKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9ldmVyUmVxdWVzdGVkRmlsdGVyLmNs
ZWFyKCk7CisgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSAwOworCisgICAgZGlzcGF0Y2hf
YXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXNdIHsKKyAgICAgICAgV2ViQ29y
ZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3Vu
dGVyOworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIGV4ZWN1
dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiREVMRVRFIEZST00gQWxyZWFk
eVJlcXVlc3RlZCIpKTsKKyAgICB9KTsKK30KKworYm9vbCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
OjphZGRIYXNoVG9EYXRhYmFzZShOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2gpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VS
VChtX2RhdGFiYXNlLmlzT3BlbigpKTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBBbHJlYWR5UmVx
dWVzdGVkIChoYXNoKSBWQUxVRVMgKD8pIikpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
dGF0ZW1lbnQuYmluZEludDY0KDEsIGhhc2gpOworICAgIHJldHVybiBleGVjdXRlU1FMU3RhdGVt
ZW50KHN0YXRlbWVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXggYTkxYzZlYjU1NTJh
MTM4YTgwZDI2Mjg2YzMyNTRkOGZmMWE1YjUxZi4uYmQ1MTM1ZWJlNmQ1YTYwNTc1NDY0NGE3ZGVl
ZGE1NzY5OTAzYzMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTU1LDYgKzE1NSw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gMTsKIAorICAgIGNv
bnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0b3J5UGF0
aDsgfQorCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnlQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCmluZGV4IDZmNzIw
OTg0NmIzMjdmMjlkNDEzODJlYWI4NTZhY2M1NjI0ODdjOWUuLjcxZDcxZTk4ZDliYjdlYzViOWIw
OWRlMzVlMzVjNGJiMzk5NjIxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KQEAg
LTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRl
IDxkaXJlbnQuaD4KKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKICNp
bmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5j
bHVkZSA8c3lzL3N0YXQuaD4KQEAgLTQzLDM2ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5ID0gIldlYktpdENh
Y2hlIjsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGljIHZvaWQgdHJhdmVy
c2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAgICAg
IHJldHVybjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRp
cihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0g
ICAgY2xvc2VkaXIoZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNv
bnN0IFN0cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQotewotICAg
IHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0
aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlv
blBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJk
aXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVH
LCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgewot
ICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOwot
ICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IG1fZGlzcGF0Y2hEYXRh
KGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwg
RElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQpKSkKICAgICAsIG1fc2l6ZShzaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0KaW5kZXggNzYwNDQwOTJjYjE2YTM0NDJjNzZkYmY3NjNiODI2YmQw
YjMwYjkxMC4uZWFjNThlOTg2YTc5MTNkNDIzN2Y3MjRiMTYwYTQ1YTJkZDcyMzg1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3ND
CiAgICAgaWYgKCFtX2Rpc2tDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewogICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgICAg
ICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0b3J5KSkgeworICAgICAg
ICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykpIHsKICAgICAgICAgICAg
IFJldGFpblB0cjxOU1VSTENhY2hlPiB1cmxDYWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxv
Y10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0p
KTsKICAgICAgICAgICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdl
dCgpXTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAppbmRleCA1NzllMzZiMDQzNGM1YTc3NTIzNzgxNGEwM2JmMTRhMWYxZGYzOGI0Li4wMjFh
NzI2MGVjMzZiNWZhZjdkYzM0NDZhYzdhODUxMDQ2YzBlY2RhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCkBAIC00NSw2ICs0NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uCiAgICAgZW5jb2RlciA8PCBkaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVOZXR3
b3JrQ2FjaGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2Fj
eUxvZ2dpbmc7CiAjZW5kaWYKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7
CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtODYsNiArODcsOCBAQCBib29sIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IE5ldAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVF
ZmZpY2FjeUxvZ2dpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggNGExZTRi
NzliYzZkMjg1MTg5M2NiMzg4OGZkYTUxNGFiYzZlYmViZC4uMWE1NDkyODljZGQzN2UzODJiNTEy
OTQ0YjdhMDNlMjdhZTQyMDRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBA
IC01OCw2ICs1OCw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBib29sIHNob3VsZEVuYWJs
ZU5ldHdvcmtDYWNoZTsKKyAgICBib29sIHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZzsKICNlbmRpZgogCiAgICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCmluZGV4IDkxNjUzZGNlN2RiOWI2MWFhZWI4YjM5NDFmZDVmZWQzM2E0MzcxZGQuLmYw
MGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUyMDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC04
MSw2ICs4MSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdDJIVFRQU1Byb3h5RGVm
YXVsdHNLZXkgPSBAIldlYktpdDJIVFRQU1Byb3h5IjsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERl
ZmF1bHRzS2V5ID0gQCJXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkIjsKK3N0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0
c0tleSA9IEAiV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZCI7CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDYsNiArMTA3LDcgQEAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tl
eV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdF
bmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnld
OwpAQCAtMjUyLDYgKzI1NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNo
ZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBwYXJhbWV0ZXJzLnNob3Vs
ZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lM
b2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRpZgogfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQ1NTgw
N2FjOGQ0ZTRjZDYxYjA5NDBhOTQ4ZjgzYWIxYzExZDA4OS4uNzg2Yjc4MWRmZjFjOWQ4MDY2NDk0
M2RmY2FjYjgxMGJhMmJhOGM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE0Niw2ICsxMTQ2LDkgQEAKIAkJN0NGNDdGRkUx
NzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5
MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi87IH07CiAJCTdDRjQ3RkZGMTcyNzZBRTMw
MDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1
bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdF
QzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovOyB9Owor
CQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUw
RTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07
CisJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUxMDFB
ODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oICovOyB9OworCQk4MzRC
MjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MTExQTg0
MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSAqLzsgfTsKIAkJ
ODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIy
NDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4MzcyREIyODFB
Njc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI2MUE2NzU2
MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovOyB9Owog
CQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzcy
REIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmgg
Ki87IH07CkBAIC0zMzE5LDYgKzMzMjIsOSBAQAogCQk3Q0Y0N0ZGQzE3Mjc2QUUzMDA4QUNCOTEg
LyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVy
TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5l
ck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RUM0RjBGOTE4RTRBOTQ1MDA4
MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUxMDFB
ODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTExMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzcy
REIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3
MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzc5LDggKzczODUsMTEgQEAK
IAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICov
LAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNw
cCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rl
ci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29y
a0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29y
a0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1MTAxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuaCAqLywKKwkJCQk4MzRCMjUxMTFBODQyQzg3MDBDRkIxNTAgLyogTmV0
d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tICovLAogCQkJCUU0NDM2RUMyMUEwQ0ZEQjIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi8sCiAJCQkJRTQ0MzZFQzMxQTBDRkRCMjAw
RUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbSAqLywKIAkJCSk7CkBAIC03NDk3
LDYgKzc1MDYsNyBAQAogCQkJCTFBQzEzMzZDMTg1NjVDN0EwMEYzRUMwNSAvKiBBUElQYWdlSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERDMxNTE4OTFCNTQwMDAxNTM5NzAgLyogQVBJ
UG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U0RDIyMDFBNDkxNENBMDBDN0Yx
NTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjYzNDQ0NTYxMkE4ODVDODAwMDYxMkQ4IC8qIEFQSVNlY3VyaXR5T3Jp
Z2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJFMTE4N0RFQzFBMDBDMzlDOUUgLyogQVBJ
U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NjIxOTU0RTlCMTAwQzQ4RkZBIC8q
IEFQSVNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjgzLDYgKzc2OTMsNyBAQAog
CQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMjE2MkIxMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGls
aXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NEEzMTI3RjZBRDEwMDFFQjk2MiAvKiBO
UFZhcmlhbnREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRCMjUwRjFBODMxQThEMDBDRkIx
NTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0NGNjcyRDEyQzdFREY3MDA4RjlDMzUgLyogT3JpZ2luQW5kRGF0YWJhc2VzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5l
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODgxLDYgKzk4OTIsNyBAQAogCQkJCTFDOEUyOTNBMTI3
NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjND
NzI1QzE5NkY2MDUyMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODM0QjI1MTMx
QTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxQTlFMTBBMTMxNUNEMTgwMDlFNzAzMSAvKiBXS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzNEM0EzQjUxMzM5NjAwQjAwNzA5QkU0
IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc1RkQx
MjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJsZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246197</attachid>
            <date>2015-02-06 19:10:09 -0800</date>
            <delta_ts>2015-02-07 15:32:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150206191007.patch</filename>
            <type>text/plain</type>
            <size>40638</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjc2YzNmOTAzODlhN2Uy
NzYwNjk4YTE1OGUwOWQwYTE0MzgwOTQxMy4uNGVkZWEzOWJhY2I3YTlkZTZkZmFiYTdmN2E4MjJi
MzlkMjhjZTczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDE1LTAyLTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRXhwb3J0IGFuIGV4dHJhIHN5bWJvbC4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorCisyMDE1LTAyLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKICAgICAgICAgSGF2ZSBTUUxpdGVTdGF0ZW1lbnQ6OmRhdGFiYXNlKCkgcmV0dXJuIGEg
cmVmZXJlbmNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDEzNDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI0MzJhNDQxZmM1Mzg5ODhlZmFhMzA0ODIzYWJhYWM2
NzU3MTk0ZTIuLjRmNWUyMjBmMGUwOTY5Yjk4Yjk3MWI1N2NkY2FlMTgzYTZhZDI0NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsNSArMSwzNiBAQAogMjAxNS0wMi0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCisgICAgICAgIFtXSzJdIEFkZCBsb2dnaW5nIHRvIHZhbGlkYXRlIHRoZSBu
ZXR3b3JrIGNhY2hlIGVmZmljYWN5IChQYXJ0IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEyNjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE5
NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25zb2xlIGxvZ2dpbmcgdG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNh
Y3kuIFRoaXMgd2lsbAorICAgICAgICB0ZWxsIHVzIGlmIGhvdyB0aGUgbmV0d29yayBjYWNoZSBz
YXRpc3RpZXMgcmVxdWVzdHMsIGluIHBhcnRpY3VsYXI6CisgICAgICAgIC0gUmVxdWVzdCBjYW5u
b3QgYmUgaGFuZGxlZCBieSB0aGUgY2FjaGUKKyAgICAgICAgLSBFbnRyeSB3YXMgbm90IGluIHRo
ZSBjYWNoZSBidXQgaXMgbm8gbG9uZ2VyIHRoZXJlIChwcnVuZWQpCisgICAgICAgIC0gRW50cnkg
aXMgaW4gdGhlIGNhY2hlIGJ1dCBpcyBub3QgdXNhYmxlCisgICAgICAgIC0gRW50cnkgaXMgaW4g
dGhlIGNhY2hlIGFuZCBpcyB1c2VkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh
IFNRTGl0ZS1iYXNlZCBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3Mgc3RvcmFnZQorICAgICAgICB0
aGF0IGlzIHVzZWQgdG8gc3RvcmUgcmVxdWVzdHMgd2UgaGF2ZSBzZWVuIGJlZm9yZSwgYW5kIHF1
ZXJ5IGlmIHdlCisgICAgICAgIGhhdmUgc2VlbiBhIHJlcXVlc3QgYmVmb3JlLiBUaGUgc3RvcmFn
ZSBpcyBsaWdodHdlaWdodCBhcyBpdCBvbmx5CisgICAgICAgIHN0b3JlcyBoYXNoZXMgaW4gdGhl
IGRhdGFiYXNlLCBpbiBhIGJhY2tncm91bmQgdGhyZWFkLiBGb3IgcGVyZm9ybWFuY2UKKyAgICAg
ICAgcmVhc29ucywgd2UgdXNlIGEgYmxvb20gZmlsdGVyIHRvIGF2b2lkIG1vc3Qgb2YgZGlzayBJ
L08gd2hlbiBxdWVyeWluZy4KKworICAgICAgICBUaGUgc3RhdGlzdGljcyBjYWNoZSBpcyBpbml0
aWFsbHkgYm9vdHN0YXBwZWQgZnJvbSB0aGUgbmV0d29yayBkaXNrCisgICAgICAgIGNhY2hlIHNv
IHRoYXQgd2UgaGF2ZSBkYXRhIGluaXRpYWxseSBhbmQgZ2V0IGFzIGFjY3VyYXRlIHN0YXRpc3Rp
Y3MKKyAgICAgICAgYXMgcG9zc2libGUgZnJvbSB0aGUgc3RhcnQuCisKKyAgICAgICAgVG8gbWFp
bnRhaW4gYW4gYWNjZXB0YWJsZSBsZXZlbCBvZiBwZXJmb3JtYW5jZSwgd2UgaGF2ZSBhIGhhcmQg
bGltaXQKKyAgICAgICAgb24gdGhlIG51bWJlciBvZiB1bmlxdWUgcmVxdWVzdHMgdGhhdCBhcmUg
cmV0YWluZWQgc2V0IHRvIDgwMDAwLiBBdAorICAgICAgICA4MDAwMCwgdGhlIGJsb29tIGZpbHRl
ciByZWFjaGVzIGEgZmFsc2UgcG9zaXRpdmUgcmF0ZSBvZiB+MjAlLgorCisgICAgICAgIERpYWdu
b3N0aWMgbG9nZ2luZyBmb3IgdGhpcyB3aWxsIGJlIGFkZGVkIGluIGEgZm9sbG93LXVwIHBhdGNo
LgorCisyMDE1LTAyLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAg
ICAgSGF2ZSBTUUxpdGVTdGF0ZW1lbnQ6OmRhdGFiYXNlKCkgcmV0dXJuIGEgcmVmZXJlbmNlCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzNDgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmYzdkYThlMTllYTY2M2E1MzJkZTNlNmEzODA1ZGY1N2Nk
ZTE4ZTllLi5mMGYyOThiYmRlZDEwODE1MWI5ZDA3Mjk1ZmRlOTc3MjRhODQwM2QzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMjI2Miw2ICsyMjYyLDcgQEAgX19aTks3V2ViQ29yZTdFbGVtZW50
MjZmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKICNlbmRp
ZgogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorX19aTjdXZWJDb3JlMjFTUUxpdGVEYXRhYmFzZVRy
YWNrZXIyNGhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzc0V2CiBfX1pON1dlYkNvcmUyN05vRXhjZXB0
aW9uQXNzZXJ0aW9uQ2hlY2tlckMxRVBLY2kKIF9fWk43V2ViQ29yZTI3Tm9FeGNlcHRpb25Bc3Nl
cnRpb25DaGVja2VyRDFFdgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCA2NmI2NDc5YjQ5OWFmYzIyOTY0
ZDVkMDBjODQwZDE3YmJkOTExYTYzLi45MWEzNTFhMTAxZTMwY2VlYmNlNjAyYmI1OTExMzc3OGIz
MjU2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1
ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgpAQCAtNDksMTAgKzUwLDEzIEBAIE5ldHdvcmtDYWNoZSYgTmV0d29ya0NhY2hlOjpz
aW5nbGV0b24oKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGU6
OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCitib29sIE5ldHdvcmtDYWNoZTo6
aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxv
Z2dpbmcpCiB7CiAgICAgbV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNo
ZVBhdGgpOwogCisgICAgaWYgKGVuYWJsZUVmZmljYWN5TG9nZ2luZykKKyAgICAgICAgbV9zdGF0
aXN0aWNzID0gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3BlbihjYWNoZVBhdGgpOworCiAgICAg
TE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgb3BlbmVkIGNhY2hlIHN0b3JhZ2Us
IHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0dXJuICEhbV9zdG9yYWdlOwogfQpA
QCAtMjIwLDIzICsyMjQsMzcgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBzdGQKIAogICAgIExPRyhO
ZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJXUi
LCBvcmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG9yaWdpbmFs
UmVxdWVzdC5wcmlvcml0eSgpKTsKIAorICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdlS2V5ID0g
bWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgaWYgKCFjYW5SZXRyaWV2ZShvcmln
aW5hbFJlcXVlc3QpKSB7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICBt
X3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHN0b3JhZ2VLZXksIG9y
aWdpbmFsUmVxdWVzdCk7CisKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdlS2V5ID0g
bWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgdW5zaWduZWQgcHJpb3JpdHkgPSBv
cmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3Rv
cmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5k
bGVyLCBzdGFydFRpbWVdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRy
eT4gZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5
LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBz
dG9yYWdlS2V5XShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVu
dHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CisKKyAgICAgICAg
ICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNv
cmRSZXRyaWV2YWxGYWlsdXJlKHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCk7CisKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFn
ZUVudHJ5KCplbnRyeSwgb3JpZ2luYWxSZXF1ZXN0KTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0g
ISFkZWNvZGVkRW50cnk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpIHsKKyAgICAgICAgICAg
IGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkVXNpbmdD
YWNoZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90VXNpbmdDYWNoZWRFbnRy
eShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICB9CisKICNpZiAhTE9HX0RJ
U0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYKQEAgLTMzMSw2ICszNDksMTMgQEAg
dm9pZCBOZXR3b3JrQ2FjaGU6OmNsZWFyKCkKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogICAgIGlmIChtX3N0b3JhZ2UpCiAgICAgICAg
IG1fc3RvcmFnZS0+Y2xlYXIoKTsKKyAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICBtX3N0
YXRpc3RpY3MtPmNsZWFyKCk7Cit9CisKK1N0cmluZyBOZXR3b3JrQ2FjaGU6OnN0b3JhZ2VQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlID8gbV9zdG9yYWdlLT5kaXJlY3RvcnlQ
YXRoKCkgOiBTdHJpbmcoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCBiMjg3OTY5OWRhODQ0NzVkOWVkZGNl
ZGM2YzZhYjJiMDUxMDJhOThjLi40MGU0M2ZjN2M5NWVmNzdiZTVmODA0ODY3NDI0NzM1MDUzMDlk
MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuaApAQCAtNDEsMTMgKzQxLDE1IEBAIGNsYXNzIFVSTDsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKK2NsYXNzIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M7CisKIGNsYXNzIE5ldHdvcmtD
YWNoZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0NhY2hlKTsKICAgICBmcmll
bmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxOZXR3b3JrQ2FjaGU+OwogcHVibGljOgogICAg
IHN0YXRpYyBOZXR3b3JrQ2FjaGUmIHNpbmdsZXRvbigpOwogCi0gICAgYm9vbCBpbml0aWFsaXpl
KGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKyAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3Ry
aW5nJiBjYWNoZVBhdGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKTsKICAgICB2b2lkIHNl
dE1heGltdW1TaXplKHNpemVfdCk7CiAKICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9zdG9yYWdlOyB9CkBAIC03NSwxMSArNzcsMTQgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjbGVhcigpOwogCisgICAgU3RyaW5nIHN0b3JhZ2VQYXRoKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgTmV0d29ya0NhY2hlKCkgPSBkZWZhdWx0OwogICAgIH5OZXR3b3JrQ2FjaGUoKSA9IGRl
bGV0ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPiBtX3N0b3Jh
Z2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+IG1fc3RhdGlz
dGljczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODhjY2NjYTYxNDNmMzU4Y2ZiOWYxMjFmZDBhZDY0N2M1OTkwNGIzNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5l
dHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW1Qb3NpeF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZUtleS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUg
PGRpcmVudC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgdHJhdmVyc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikKK3sKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIp
KSkgeworICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAo
IXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xv
c2VkaXIoZGlyKTsKK30KKworaW5saW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0
cmluZyYgY2FjaGVQYXRoLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCk+IGZ1bmN0aW9uKQoreworICAgIHRyYXZl
cnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShj
b25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGgg
PSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1l
KTsKKyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1
bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgeworICAgICAg
ICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IDgpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWExOThlMDFmMGFm
ZTIwOWY4NTNiMmE1NzI1ZDY3MDc1ODZmNGQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0w
LDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Nf
aAorI2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKKworI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNp
bmNsdWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29y
a0NhY2hlU3RhdGlzdGljcyB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKwor
ICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVl
c3QoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgdm9pZCByZWNvcmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtl
eSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkTm90
VXNpbmdDYWNoZWRFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZFVzaW5nQ2FjaGVkRW50cnkoY29uc3Qg
TmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya0NhY2hlU3RhdGlzdGljcyhjb25zdCBTdHJpbmcm
IGRhdGFiYXNlUGF0aCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVBhdGgpOworICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBTdHJp
bmcmIG5ldHdvcmtDYWNoZVBhdGgpOworICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQoKTsKKworICAg
IGJvb2wgYWRkSGFzaFRvRGF0YWJhc2UoTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSk7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNFdmVyUmVxdWVzdGVkKT4gUmVx
dWVzdGVkQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQo
TmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRs
ZXImKTsKKyAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBl
KTsKKworICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkgeworICAgICAgICBOZXR3b3JrQ2Fj
aGVLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgIFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVy
IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBCbG9vbUZpbHRlcjwyMD4gbV9ldmVy
UmVxdWVzdGVkRmlsdGVyOworICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gbV9hcHByb3hpbWF0ZUVu
dHJ5Q291bnQgeyAwIH07CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIERpc3Bh
dGNoUHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5kaWYKKyAg
ICBtdXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2ZXJSZXF1ZXN0ZWRRdWVy
eT4+IG1fYWN0aXZlUXVlcmllczsKKyAgICBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZmI2MTllZDIwNDAyMTc0
YzA4NDRmZmQ2NDk5MjM5NjJlMzlhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAg
LTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgi
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tl
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3RhdGlz
dGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworCitzdGF0aWMg
Ym9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgc3FsKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgYm9v
bCByZXN1bHQgPSBkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChzcWwpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0
byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3FsLnV0ZjgoKS5kYXRh
KCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
JiBzdGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNT
RVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOworICAgIEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS5pc09wZW4oKSk7CisKKyAg
ICBib29sIHJlc3VsdCA9IHN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlmICghcmVz
dWx0KQorICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxl
ZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3RhdGVtZW50LnF1
ZXJ5KCkudXRmOCgpLmRhdGEoKSwgc3RhdGVtZW50LmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M+IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0cmlu
ZyBkYXRhYmFzZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQ
YXRoLCBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzRGF0YWJhc2VOYW1lKTsKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+KG5ldyBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzKGRhdGFiYXNlUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQorICAgIDogbV9i
YWNrZ3JvdW5kSU9RdWV1ZShhZG9wdERpc3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5DYWNoZS5TdGF0aXN0aWNzLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVV
RV9TRVJJQUwpKSkKK3sKKyAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKG1fYmFja2dyb3Vu
ZElPUXVldWUuZ2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVf
UFJJT1JJVFlfQkFDS0dST1VORCwgMCkpOworCisgICAgaW5pdGlhbGl6ZShkYXRhYmFzZVBhdGgp
OworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CisK
KyAgICBTdHJpbmdDYXB0dXJlIGRhdGFiYXNlUGF0aENhcHR1cmUoZGF0YWJhc2VQYXRoKTsKKyAg
ICBTdHJpbmdDYXB0dXJlIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuc3RvcmFnZVBhdGgoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5k
SU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGRhdGFiYXNlUGF0aENhcHR1cmUsIG5ldHdvcmtDYWNoZVBh
dGhDYXB0dXJlLCBzdGFydFRpbWVdIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAgICAgIFN0
cmluZyBkYXRhYmFzZVBhdGggPSBkYXRhYmFzZVBhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAg
ICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpkaXJlY3RvcnlOYW1l
KGRhdGFiYXNlUGF0aCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIE9wZW5pbmcgbmV0d29yayBjYWNoZSBzdGF0aXN0
aWNzIGRhdGFiYXNlIGF0ICVzLi4uIiwgZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKKyAgICAgICAgbV9kYXRhYmFzZS5k
aXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiAvIGNyZWF0ZSB0aGUg
bmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJ
SUxpdGVyYWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEFscmVhZHlSZXF1ZXN0ZWQgKGhh
c2ggSU5URUdFUiBQUklNQVJZIEtFWSkiKSk7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgaGFzaCBGUk9N
IEFscmVhZHlSZXF1ZXN0ZWQiKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJv
b2wgbmVlZHNCb290c3RyYXBwaW5nID0gdHJ1ZTsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAg
ICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBXZWJDb3JlOjpTUUxSZXN1
bHRSb3cpIHsKKyAgICAgICAgICAgIG5lZWRzQm9vdHN0cmFwcGluZyA9IGZhbHNlOworICAgICAg
ICAgICAgYXV0byBoYXNoID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsIGhhc2hd
IHsKKyAgICAgICAgICAgICAgICBtX2V2ZXJSZXF1ZXN0ZWRGaWx0ZXIuYWRkKGhhc2gpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAg
ICAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CisjZW5kaWYK
KyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgTmV0d29yayBjYWNo
ZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGxvYWQgY29tcGxldGUsIGVudHJpZXM9JWx1IHRpbWU9JWxs
ZG1zIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCksIGVsYXBz
ZWRNUyk7CisKKyAgICAgICAgaWYgKG5lZWRzQm9vdHN0cmFwcGluZykgeworICAgICAgICAgICAg
Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmco
KSk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICAgICAgZWxhcHNlZE1TID0gc3RkOjpjaHJv
bm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CisjZW5kaWYKKyAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmsgY2FjaGUg
c3RhdGlzdGljcyBkYXRhYmFzZSBib290c3RyYXBwaW5nIGNvbXBsZXRlLCBlbnRyaWVzPSVsdSB0
aW1lPSVsbGRtcyIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQp
LCBlbGFwc2VkTVMpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hl
U3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBTdHJpbmcmIG5ldHdv
cmtDYWNoZVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBCb290c3RyYXBwaW5nIHRoZSBuZXR3
b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgZnJvbSB0aGUgbmV0d29yayBjYWNoZS4uLiIp
OworCisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOworICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIGJvb3Rz
dHJhcFRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKKyAgICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgW3RoaXNd
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAgTmV0d29y
a0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICBpZiAoIU5ldHdvcmtDYWNoZUtleTo6
c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoIWFkZEhhc2hUb0RhdGFiYXNlKGhhc2gpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlz
LCBoYXNoXSB7CisgICAgICAgICAgICBtX2V2ZXJSZXF1ZXN0ZWRGaWx0ZXIuYWRkKGhhc2gpOwor
ICAgICAgICB9KTsKKyAgICAgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKyAgICB9KTsK
KyAgICBib290c3RyYXBUcmFuc2FjdGlvbi5jb21taXQoKTsKK30KKwordm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICAvLyBGb3IgYSBCbG9vbUZpbHRlciB3aXRoIDIwIGtleUJpdHMsIHRoZSBm
YWxzZSBwb3NpdGl2ZSByYXRlIGJlY29tZXMKKyAgICAvLyB+MjAlIHdoZW4gcmVhY2hpbmcgODAw
MDAgZW50cmllcyAoc2VlIGNvbW1lbnQgaW4gQmxvb21GaWx0ZXIuaCkuCisgICAgY29uc3Qgc2l6
ZV90IG1heEVudHJpZXMgPSA4MDAwMDsKKworICAgIGlmIChtX2FwcHJveGltYXRlRW50cnlDb3Vu
dCA8IG1heEVudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHNocmlua2luZyBzdGF0aXN0aWNzIGNhY2hlIG1fYXBwcm94aW1h
dGVFbnRyeUNvdW50PSVsdSwgbWF4RW50cmllcz0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
YXBwcm94aW1hdGVFbnRyeUNvdW50KSwgbWF4RW50cmllcyk7CisKKyAgICBjbGVhcigpOworCisg
ICAgU3RyaW5nQ2FwdHVyZSBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZShOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnN0b3JhZ2VQYXRoKCkpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3Vu
ZElPUXVldWUuZ2V0KCksIFt0aGlzLCBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZV0geworICAgICAg
ICBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlLnN0cmlu
ZygpKTsKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RhdGlz
dGljcyBjYWNoZSBzaHJpbmsgY29tcGxldGVkIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIs
IHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpKTsKKyAgICB9KTsK
K30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RVc2luZ0NhY2hlRm9y
UmVxdWVzdChjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGF1dG8gaGFzaCA9IGtleS5oYXNoKCk7CisgICAg
V2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOworICAgIHF1ZXJ5V2FzRXZl
clJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTF0oYm9vbCB3YXNFdmVyUmVx
dWVzdGVkKSB7CisgICAgICAgIGlmICh3YXNFdmVyUmVxdWVzdGVkKSB7CisgICAgICAgICAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNseSByZXF1
ZXN0ZWQgYnV0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBjYWNoZSIsIHJlcXVlc3RVUkwuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMg
bG9nZ2luZy4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFz
aCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0
cmlldmFsRmFpbHVyZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGF1dG8gaGFzaCA9IGtleS5oYXNoKCk7
CisgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOworICAgIHF1ZXJ5
V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTF0oYm9vbCB3YXNQ
cmV2aW91c2x5UmVxdWVzdGVkKSB7CisgICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVxdWVzdGVk
KSB7CisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3
YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUgY2FjaGUiLCByZXF1
ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBE
byBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWFya0Fz
UmVxdWVzdGVkKGhhc2gpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVkRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXks
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyNpZm5kZWYgTkRF
QlVHCisgICAgYXV0byBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBBU1NFUlQobV9ldmVyUmVxdWVz
dGVkRmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2VzcykgJXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCBpc24ndCB1c2FibGUiLCByZXF1ZXN0
VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3Rp
YyBsb2dnaW5nLgorfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFVzaW5n
Q2FjaGVkRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgYXV0byBoYXNo
ID0ga2V5Lmhhc2goKTsKKyAgICBBU1NFUlQobV9ldmVyUmVxdWVzdGVkRmlsdGVyLm1heUNvbnRh
aW4oaGFzaCkpOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVl
c3QudXJsKCk7CisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMg
aW4gdGhlIGNhY2hlIGFuZCBpcyB1c2VkIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KK30KKwordm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjptYXJrQXNSZXF1ZXN0ZWQoTmV0d29ya0NhY2hlS2V5OjpI
YXNoVHlwZSBoYXNoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBt
X2V2ZXJSZXF1ZXN0ZWRGaWx0ZXIuYWRkKGhhc2gpOworICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQ7CisKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBb
dGhpcywgaGFzaF0geworICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICAgICAgYWRkSGFzaFRvRGF0YWJhc2UoaGFzaCk7CisgICAgfSk7
CisKKyAgICBzaHJpbmtJZk5lZWRlZCgpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OnF1ZXJ5V2FzRXZlclJlcXVlc3RlZChOZXR3b3JrQ2FjaGVLZXk6Okhhc2hUeXBlIGhhc2gs
IGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2V2ZXJSZXF1ZXN0
ZWRGaWx0ZXIubWF5Q29udGFpbihoYXNoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGV2ZXJSZXF1ZXN0ZWRR
dWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RXZlclJlcXVlc3RlZFF1ZXJ5PihFdmVyUmVxdWVzdGVk
UXVlcnkgeyBoYXNoLCBjb21wbGV0aW9uSGFuZGxlciB9KTsKKyAgICBhdXRvJiBxdWVyeSA9ICpl
dmVyUmVxdWVzdGVkUXVlcnk7CisgICAgbV9hY3RpdmVRdWVyaWVzLmFkZChXVEY6Om1vdmUoZXZl
clJlcXVlc3RlZFF1ZXJ5KSk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1
ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0geworICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgICAgIGJv
b2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kYXRhYmFzZS5p
c09wZW4oKSkgeworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVl
c3RlZCBXSEVSRSBoYXNoPT8iKSk7CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgICAgIHN0YXRlbWVudC5i
aW5kSW50NjQoMSwgcXVlcnkuaGFzaCk7CisgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVl
c3RlZCA9IHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFt0aGlzLCAmcXVlcnksIHdhc0FscmVhZHlSZXF1ZXN0ZWRdIHsKKyAgICAg
ICAgICAgIHF1ZXJ5LmNvbXBsZXRpb25IYW5kbGVyKHdhc0FscmVhZHlSZXF1ZXN0ZWQpOworICAg
ICAgICAgICAgbV9hY3RpdmVRdWVyaWVzLnJlbW92ZSgmcXVlcnkpOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpjbGVhcigpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fZXZlclJlcXVlc3RlZEZpbHRlci5j
bGVhcigpOworICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0gMDsKKworICAgIGRpc3BhdGNo
X2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzXSB7CisgICAgICAgIFdlYkNv
cmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291
bnRlcjsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICBleGVj
dXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEFscmVh
ZHlSZXF1ZXN0ZWQiKSk7CisgICAgfSk7Cit9CisKK2Jvb2wgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6YWRkSGFzaFRvRGF0YWJhc2UoTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CisKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gQWxyZWFkeVJl
cXVlc3RlZCAoaGFzaCkgVkFMVUVTICg/KSIpKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBoYXNoKTsKKyAgICByZXR1cm4gZXhlY3V0ZVNRTFN0YXRl
bWVudChzdGF0ZW1lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IGE5MWM2ZWI1NTUy
YTEzOGE4MGQyNjI4NmMzMjU0ZDhmZjFhNWI1MWYuLmJkNTEzNWViZTZkNWE2MDU3NTQ2NDRhN2Rl
ZWRhNTc2OTkwM2MzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKQEAgLTE1NSw2ICsxNTUsOCBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmVyc2lvbiA9IDE7CiAKKyAgICBj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdG9yeVBh
dGg7IH0KKwogcHJpdmF0ZToKICAgICBOZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5UGF0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQppbmRleCA2Zjcy
MDk4NDZiMzI3ZjI5ZDQxMzgyZWFiODU2YWNjNTYyNDg3YzllLi43MWQ3MWU5OGQ5YmI3ZWM1Yjli
MDlkZTM1ZTM1YzRiYjM5OTYyMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCkBA
IC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29y
a0NhY2hlQ29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVk
ZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCiAj
aW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC00MywzNiArNDIsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSA9ICJXZWJLaXRD
YWNoZSI7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXN0YXRpYyB2b2lkIHRyYXZl
cnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5j
dGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAg
ICByZXR1cm47Ci0gICAgc3RydWN0IGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRk
aXIoZGlyKSkpIHsKLSAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAg
ICAgaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7Ci0gICAgfQot
ICAgIGNsb3NlZGlyKGRpcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKLXsKLSAg
ICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5j
dGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRp
b25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3Vi
ZGlyTmFtZSk7Ci0gICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JF
RywgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsK
LSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSA4KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsK
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgOiBtX2Rpc3BhdGNoRGF0
YShhZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRlKGRhdGEsIHNpemUsIG51bGxwdHIs
IERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSkpCiAgICAgLCBtX3NpemUoc2l6ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDc2MDQ0MDkyY2IxNmEzNDQyYzc2ZGJmNzYzYjgyNmJk
MGIzMGI5MTAuLmVhYzU4ZTk4NmE3OTEzZDQyMzdmNzI0YjE2MGE0NWEyZGQ3MjM4NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNz
QwogICAgIGlmICghbV9kaXNrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICAg
ICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlICYmIE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSkpIHsKKyAgICAg
ICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlICYmIE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpKSB7CiAgICAgICAgICAg
ICBSZXRhaW5QdHI8TlNVUkxDYWNoZT4gdXJsQ2FjaGUoYWRvcHROUyhbW05TVVJMQ2FjaGUgYWxs
b2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MCBkaXNrQ2FwYWNpdHk6MCBkaXNrUGF0aDpuaWxd
KSk7CiAgICAgICAgICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5n
ZXQoKV07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHAKaW5kZXggNTc5ZTM2YjA0MzRjNWE3NzUyMzc4MTRhMDNiZjE0YTFmMWRmMzhiNC4uMDIx
YTcyNjBlYzM2YjVmYWY3ZGMzNDQ2YWM3YTg1MTA0NmMwZWNkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtNDUsNiArNDUsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbgogICAgIGVuY29kZXIgPDwgZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwog
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0
d29ya0NhY2hlOworICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNh
Y3lMb2dnaW5nOwogI2VuZGlmCiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlRGlyZWN0b3J5
OwogI2lmIFBMQVRGT1JNKElPUykKQEAgLTg2LDYgKzg3LDggQEAgYm9vbCBOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVy
LCBOZXQKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hl
RWZmaWNhY3lMb2dnaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llU3RvcmFnZURpcmVjdG9yeSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDRhMWU0
Yjc5YmM2ZDI4NTE4OTNjYjM4ODhmZGE1MTRhYmM2ZWJlYmQuLjFhNTQ5Mjg5Y2RkMzdlMzgyYjUx
Mjk0NGI3YTAzZTI3YWU0MjA0YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApA
QCAtNTgsNiArNTgsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMg
ewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBkaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgYm9vbCBzaG91bGRFbmFi
bGVOZXR3b3JrQ2FjaGU7CisgICAgYm9vbCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2Fj
eUxvZ2dpbmc7CiAjZW5kaWYKIAogICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29s
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbQppbmRleCA5MTY1M2RjZTdkYjliNjFhYWViOGIzOTQxZmQ1ZmVkMzNhNDM3MWRkLi5m
MDBhNWZmYmQyMGY0ZTE1OWZmNjI4NmNkNmZjNGQzM2E1MjA2ZmVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAt
ODEsNiArODEsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXQySFRUUFNQcm94eURl
ZmF1bHRzS2V5ID0gQCJXZWJLaXQySFRUUFNQcm94eSI7CiAKICNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWRE
ZWZhdWx0c0tleSA9IEAiV2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZCI7CitzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVs
dHNLZXkgPSBAIldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWQiOwogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTA2LDYgKzEwNyw3IEBAIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNL
ZXldOworICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5n
RW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRpZgogCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gcmVnaXN0ZXJEZWZhdWx0czpyZWdpc3RyYXRpb25EaWN0aW9uYXJ5
XTsKQEAgLTI1Miw2ICsyNTQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2Fj
aGUgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5Oldl
YktpdE5ldHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07CisgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcgPSBbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleV07CiAjZW5kaWYKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkNTU4
MDdhYzhkNGU0Y2Q2MWIwOTQwYTk0OGY4M2FiMWMxMWQwODkuLjc4NmI3ODFkZmYxYzlkODA2NjQ5
NDNkZmNhY2I4MTBiYTJiYThjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNDYsNiArMTE0Niw5IEBACiAJCTdDRjQ3RkZF
MTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGQzE3Mjc2QUUzMDA4QUNC
OTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1tICovOyB9OwogCQk3Q0Y0N0ZGRjE3Mjc2QUUz
MDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNCOTEgLyogV0tC
dW5kbGVQYWdlQmFubmVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0VDNEYwRkIxOEU0QUNCQjAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNz
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLzsgfTsK
KwkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3Np
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1
MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oICovOyB9
OworCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MTAx
QTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLzsgfTsKKwkJODM0
QjI1MTMxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTExMUE4
NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gKi87IH07CiAJ
CTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRC
MjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM3MkRCMjgx
QTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNjFBNjc1
NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsK
IAkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3
MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
ICovOyB9OwpAQCAtMzMxOSw2ICszMzIyLDkgQEAKIAkJN0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkx
IC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5l
ck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5u
ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0VDNEYwRjkxOEU0QTk0NTAw
ODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW1Qb3NpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtUG9zaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MTAx
QTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUxMTFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3
MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIy
NzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM3OSw4ICs3Mzg1LDExIEBA
CiAJCQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCAq
LywKIAkJCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5j
cHAgKi8sCiAJCQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29k
ZXIuaCAqLywKKwkJCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmls
ZVN5c3RlbVBvc2l4LmggKi8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdv
cmtDYWNoZUtleS5jcHAgKi8sCiAJCQkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdv
cmtDYWNoZUtleS5oICovLAorCQkJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmggKi8sCisJCQkJODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVDMjFBMENGREIyMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oICovLAogCQkJCUU0NDM2RUMzMUEwQ0ZEQjIw
MEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gKi8sCiAJCQkpOwpAQCAtNzQ5
Nyw2ICs3NTA2LDcgQEAKIAkJCQkxQUMxMzM2QzE4NTY1QzdBMDBGM0VDMDUgLyogQVBJUGFnZUhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREQzMTUxODkxQjU0MDAwMTUzOTcwIC8qIEFQ
SVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNEQyMjAxQTQ5MTRDQTAwQzdG
MTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY2MzQ0NDU2MTJBODg1QzgwMDA2MTJEOCAvKiBBUElTZWN1cml0eU9y
aWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVBOEQyRTExODdERUMxQTAwQzM5QzlFIC8qIEFQ
SVNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkRFNjYyMTk1NEU5QjEwMEM0OEZGQSAv
KiBBUElTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzY4Myw2ICs3NjkzLDcgQEAK
IAkJCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyog
TlBWYXJpYW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM4QUNBMTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTg4MSw2ICs5ODkyLDcgQEAKIAkJCQkxQzhFMjkzQTEy
NzYxRTVCMDBCQzdCRDAgLyogV0tJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
QzcyNUMxOTZGNjA1MjAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE1NDI5M0E1MTk1QTQzREQwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5v
ZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTgzNEIyNTEz
MUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MUE5RTEwQTEzMTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzRDNBM0I1MTMzOTYwMEIwMDcwOUJF
NCAvKiBXS01lZGlhQ2FjaGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUZE
MTI0RkYwMjcwMDY4RjIwQSAvKiBXS011dGFibGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246220</attachid>
            <date>2015-02-07 15:32:19 -0800</date>
            <delta_ts>2015-02-07 15:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150207153219.patch</filename>
            <type>text/plain</type>
            <size>39014</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGRmZmQ2ODIzMTQwYjlj
NjdlNWRiMzBhMGU1ZDRjZGMzYzI3ZmMxZC4uYTg4Y2M4N2NiMzY3YjhlMmYxMWJkMzBiNTcyMTM3
ZThmYjAxZDc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCisKKyAgICAgICAgRXhwb3J0IGFuIGV4dHJhIHN5bWJvbC4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorCiAyMDE1LTAyLTA3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIFNldCAtY29udGVudHNTY2FsZSBvbiBBVlBsYXllckxheWVy
IHRvIGFsbG93IEFWUGxheWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgSExTIHZhcmlhbnQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMjYxMzAyMGE5ZTZjNmNiN2VmMGY0MGQ5ODExNGUyYTA4NDI4N2M2ZC4u
NTNiOGU0NzRlYTY1NzQ2ZjdkYzI3OWI3OTM0ZjRjNjZhZWI5Y2Y0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMyIEBACisyMDE1LTAyLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcgdG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2Fj
aGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIGNvbnNv
bGUgbG9nZ2luZyB0byB2YWxpZGF0ZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeS4gVGhpcyB3
aWxsCisgICAgICAgIHRlbGwgdXMgaWYgaG93IHRoZSBuZXR3b3JrIGNhY2hlIHNhdGlzdGllcyBy
ZXF1ZXN0cywgaW4gcGFydGljdWxhcjoKKyAgICAgICAgLSBSZXF1ZXN0IGNhbm5vdCBiZSBoYW5k
bGVkIGJ5IHRoZSBjYWNoZQorICAgICAgICAtIEVudHJ5IHdhcyBub3QgaW4gdGhlIGNhY2hlIGJ1
dCBpcyBubyBsb25nZXIgdGhlcmUgKHBydW5lZCkKKyAgICAgICAgLSBFbnRyeSBpcyBpbiB0aGUg
Y2FjaGUgYnV0IGlzIG5vdCB1c2FibGUKKyAgICAgICAgLSBFbnRyeSBpcyBpbiB0aGUgY2FjaGUg
YW5kIGlzIHVzZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgU1FMaXRlLWJh
c2VkIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBzdG9yYWdlCisgICAgICAgIHRoYXQgaXMgdXNl
ZCB0byBzdG9yZSByZXF1ZXN0cyB3ZSBoYXZlIHNlZW4gYmVmb3JlLCBhbmQgcXVlcnkgaWYgd2UK
KyAgICAgICAgaGF2ZSBzZWVuIGEgcmVxdWVzdCBiZWZvcmUuIFRoZSBzdG9yYWdlIGlzIGxpZ2h0
d2VpZ2h0IGFzIGl0IG9ubHkKKyAgICAgICAgc3RvcmVzIGhhc2hlcyBpbiB0aGUgZGF0YWJhc2Us
IGluIGEgYmFja2dyb3VuZCB0aHJlYWQuCisKKyAgICAgICAgVGhlIHN0YXRpc3RpY3MgY2FjaGUg
aXMgaW5pdGlhbGx5IGJvb3RzdGFwcGVkIGZyb20gdGhlIG5ldHdvcmsgZGlzaworICAgICAgICBj
YWNoZSBzbyB0aGF0IHdlIGhhdmUgZGF0YSBpbml0aWFsbHkgYW5kIGdldCBhcyBhY2N1cmF0ZSBz
dGF0aXN0aWNzCisgICAgICAgIGFzIHBvc3NpYmxlIGZyb20gdGhlIHN0YXJ0LgorCisgICAgICAg
IFRvIG1haW50YWluIGFuIGFjY2VwdGFibGUgbGV2ZWwgb2YgcGVyZm9ybWFuY2UsIHdlIGhhdmUg
YSBoYXJkIGxpbWl0CisgICAgICAgIG9uIHRoZSBudW1iZXIgb2YgdW5pcXVlIHJlcXVlc3RzIHRo
YXQgYXJlIHJldGFpbmVkIHNldCB0byAxMDAwMDAuCisKKyAgICAgICAgRGlhZ25vc3RpYyBsb2dn
aW5nIGZvciB0aGlzIHdpbGwgYmUgYWRkZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKIDIwMTUt
MDItMDcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFuZCBh
cyBhIGZ1cnRoZXIgZm9sbG93dXAgcmVzdG9yZSB0aGUgOGJpdCB0ZXN0IHRvby4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KaW5kZXggZmM3ZGE4ZTE5ZWE2NjNhNTMyZGUzZTZhMzgwNWRmNTdjZGUxOGU5ZS4u
ZjBmMjk4YmJkZWQxMDgxNTFiOWQwNzI5NWZkZTk3NzI0YTg0MDNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTIyNjIsNiArMjI2Miw3IEBAIF9fWk5LN1dlYkNvcmU3RWxlbWVudDI2ZmFzdEF0
dHJpYnV0ZUxvb2t1cEFsbG93ZWRFUktOU18xM1F1YWxpZmllZE5hbWVFCiAjZW5kaWYKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKK19fWk43V2ViQ29yZTIxU1FMaXRlRGF0YWJhc2VUcmFja2VyMjRo
YXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3NFdgogX19aTjdXZWJDb3JlMjdOb0V4Y2VwdGlvbkFzc2Vy
dGlvbkNoZWNrZXJDMUVQS2NpCiBfX1pON1dlYkNvcmUyN05vRXhjZXB0aW9uQXNzZXJ0aW9uQ2hl
Y2tlckQxRXYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggNjZiNjQ3OWI0OTlhZmMyMjk2NGQ1ZDAwYzg0
MGQxN2JiZDkxMWE2My4uZDQ3NzBhYTZiNmNkZDIzZTRhZmVkODVjMmFhY2I5ZWYyODUzODcyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
QEAgLTQ5LDEwICs1MCwxMyBAQCBOZXR3b3JrQ2FjaGUmIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLWJvb2wgTmV0d29ya0NhY2hlOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQorYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKQog
ewogICAgIG1fc3RvcmFnZSA9IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY2FjaGVQYXRoKTsK
IAorICAgIGlmIChlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCisgICAgICAgIG1fc3RhdGlzdGljcyA9
IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY2FjaGVQYXRoKTsKKwogICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNz
ICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3RvcmFnZTsKIH0KQEAgLTIyMCwy
MyArMjI0LDMzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAKICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICV1Iiwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW5hbFJlcXVlc3Qu
cHJpb3JpdHkoKSk7CiAKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNo
ZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1
ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdChzdG9yYWdlS2V5LCBvcmlnaW5hbFJl
cXVlc3QpOworCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjpub3coKTsKLSAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNo
ZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxS
ZXF1ZXN0LnByaW9yaXR5KCk7CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXks
IHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3Rh
cnRUaW1lXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5
KSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMs
IG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtl
eV0oc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBlbnRyeSkgewog
ICAgICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOworCisgICAgICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmll
dmFsRmFpbHVyZShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIGRlY29kZWRFbnRyeSA9IGRlY29kZVN0b3JhZ2VFbnRyeSgq
ZW50cnksIG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9ICEhZGVjb2Rl
ZEVudHJ5OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVl
c3QsIHN1Y2Nlc3MpOworCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBhdXRvIGVsYXBzZWRN
UyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwog
I2VuZGlmCkBAIC0zMzEsNiArMzQ1LDEzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpjbGVhcigpCiAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUiKTsK
ICAgICBpZiAobV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKCk7CisgICAgaWYg
KG1fc3RhdGlzdGljcykKKyAgICAgICAgbV9zdGF0aXN0aWNzLT5jbGVhcigpOworfQorCitTdHJp
bmcgTmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rv
cmFnZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgK
aW5kZXggYjI4Nzk2OTlkYTg0NDc1ZDllZGRjZWRjNmM2YWIyYjA1MTAyYTk4Yy4uNDBlNDNmYzdj
OTVlZjc3YmU1ZjgwNDg2NzQyNDczNTA1MzA5ZDE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDEzICs0MSwxNSBA
QCBjbGFzcyBVUkw7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOworCiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE5ldHdvcmtDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8
TmV0d29ya0NhY2hlPjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBzaW5nbGV0
b24oKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7Cisg
ICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVm
ZmljYWN5TG9nZ2luZyk7CiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShzaXplX3QpOwogCiAgICAg
Ym9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RvcmFnZTsgfQpAQCAtNzUsMTEg
Kzc3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAorICAgIFN0cmluZyBzdG9y
YWdlUGF0aCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZSgpID0gZGVmYXVs
dDsKICAgICB+TmV0d29ya0NhY2hlKCkgPSBkZWxldGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlU3RvcmFnZT4gbV9zdG9yYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzPiBtX3N0YXRpc3RpY3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMWY1NDcwOTc5MDEzNjg5ZWJhOTA1YWNj
NGMwNDYzNjNiMWFhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAor
I2RlZmluZSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitzdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIERJUiog
ZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpKTsKKyAgICBpZiAoIWRpcikKKyAgICAgICAgcmV0dXJuOworICAgIHN0cnVjdCBkaXJlbnQq
IGRwOworICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7CisgICAgICAgIGlmIChkcC0+
ZF90eXBlICE9IHR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgY2hh
ciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwg
IXN0cmNtcChuYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmdW5j
dGlvbihTdHJpbmcobmFtZSkpOworICAgIH0KKyAgICBjbG9zZWRpcihkaXIpOworfQorCitpbmxp
bmUgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0
aXRpb25QYXRoKT4gZnVuY3Rpb24pCit7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRo
LCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFt
ZSkgeworICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOworICAgICAgICB0cmF2ZXJzZURp
cmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRo
XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVu
Z3RoKCkgIT0gTmV0d29ya0NhY2hlS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBh
dGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YjUyMzg3OGJkZWU5YmFmMTFmODMwOWQyOWQ4MjViNzIyOGM2YWY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0
YWJhc2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0NhY2hlU3RhdGlzdGljcyB7
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKworICAgIHZvaWQgY2xlYXIoKTsK
KworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNv
cmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnko
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCBzdWNjZXNzKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CisgICAgdm9pZCBib290c3RyYXBGcm9tTmV0
d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2hlUGF0aCk7CisgICAgdm9pZCBzaHJp
bmtJZk5lZWRlZCgpOworCisgICAgdm9pZCBhZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcm
IGhhc2gpOworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJl
cXVlc3RlZCk+IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyOworICAgIHZvaWQgcXVlcnlXYXNF
dmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5k
bGVyJik7CisgICAgdm9pZCBtYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKTsKKwor
ICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkgeworICAgICAgICBTdHJpbmcgaGFzaDsKKyAg
ICAgICAgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CisgICAg
fTsKKworICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgeyAw
IH07CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3Bh
dGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5kaWYKKyAgICBtdXRhYmxlIEhh
c2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeT4+IG1fYWN0aXZl
UXVlcmllczsKKyAgICBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkK
KworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29h
Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2ZjUyNjk4MmMxNGI0YjRjN2I0NDE2MjcxNjlj
Mjk5N2Q5ZGI1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAgLTAsMCArMSwyNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCisKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVU
cmFuc2FjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3RhdGlzdGljc0RhdGFiYXNl
TmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworCitzdGF0aWMgYm9vbCBleGVjdXRl
U1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgc3FsKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKyAgICBBU1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgYm9vbCByZXN1bHQgPSBk
YXRhYmFzZS5leGVjdXRlQ29tbWFuZChzcWwpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBM
T0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0
YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3FsLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29s
IGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAg
IEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS5pc09wZW4oKSk7CisKKyAgICBib29sIHJlc3Vs
dCA9IHN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAg
ICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRl
IHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgp
LmRhdGEoKSwgc3RhdGVtZW50LmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+
IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0cmluZyBkYXRhYmFzZVBh
dGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBuZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzRGF0YWJhc2VOYW1lKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+KG5ldyBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzKGRhdGFi
YXNlUGF0aCkpOworfQorCitOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQorICAgIDogbV9iYWNrZ3JvdW5kSU9R
dWV1ZShhZG9wdERpc3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYktp
dC5DYWNoZS5TdGF0aXN0aWNzLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKSkK
K3sKKyAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0
KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfQkFD
S0dST1VORCwgMCkpOworCisgICAgaW5pdGlhbGl6ZShkYXRhYmFzZVBhdGgpOworfQorCit2b2lk
IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZVBhdGgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3Rh
cnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CisKKyAgICBTdHJpbmdD
YXB0dXJlIGRhdGFiYXNlUGF0aENhcHR1cmUoZGF0YWJhc2VQYXRoKTsKKyAgICBTdHJpbmdDYXB0
dXJlIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3Rv
cmFnZVBhdGgoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQo
KSwgW3RoaXMsIGRhdGFiYXNlUGF0aENhcHR1cmUsIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlLCBz
dGFydFRpbWVdIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAgICAgIFN0cmluZyBkYXRhYmFz
ZVBhdGggPSBkYXRhYmFzZVBhdGhDYXB0dXJlLnN0cmluZygpOworICAgICAgICBpZiAoIVdlYkNv
cmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKGRhdGFiYXNlUGF0
aCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIE9wZW5pbmcgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNl
IGF0ICVzLi4uIiwgZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX2RhdGFi
YXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKKyAgICAgICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFk
aW5nQ2hlY2tzKCk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiAvIGNyZWF0ZSB0aGUgbmV0d29yayBjYWNo
ZSBzdGF0aXN0aWNzIGRhdGFiYXNlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEFscmVhZHlSZXF1ZXN0ZWQgKGhhc2ggVEVYVCBQUklN
QVJZIEtFWSkiKSk7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgY291bnQoKikgRlJPTSBBbHJlYWR5UmVx
dWVzdGVkIikpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgIT0gV2Vi
Q29yZTo6U1FMUmVzdWx0Um93KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
b3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gQWxyZWFkeVJlcXVlc3RlZCB0YWJsZSIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgICAgICBhdXRvIGVsYXBzZWRNUyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0g
c3RhcnRUaW1lKS5jb3VudCgpOworI2VuZGlmCisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIE5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBsb2FkIGNv
bXBsZXRlLCBlbnRyaWVzPSVsdSB0aW1lPSVsbGRtcyIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQpLCBlbGFwc2VkTVMpOworCisgICAgICAgIGlmICghbV9hcHBy
b3hpbWF0ZUVudHJ5Q291bnQpIHsKKyAgICAgICAgICAgIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2Fj
aGUobmV0d29ya0NhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCkpOworI2lmICFMT0dfRElTQUJMRUQK
KyAgICAgICAgICAgIGVsYXBzZWRNUyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0g
c3RhcnRUaW1lKS5jb3VudCgpOworI2VuZGlmCisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hl
LCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgYm9v
dHN0cmFwcGluZyBjb21wbGV0ZSwgZW50cmllcz0lbHUgdGltZT0lbGxkbXMiLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSwgZWxhcHNlZE1TKTsKKyAgICAgICAg
fQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmJvb3RzdHJhcEZy
b21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2VzcykgQm9vdHN0cmFwcGluZyB0aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRh
dGFiYXNlIGZyb20gdGhlIG5ldHdvcmsgY2FjaGUuLi4iKTsKKworICAgIFdlYkNvcmU6OlNRTGl0
ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyAg
ICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiBib290c3RyYXBUcmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICBib290c3RyYXBUcmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgdHJhdmVyc2VD
YWNoZUZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIFt0aGlzXShjb25zdCBTdHJpbmcmIGhhc2gsIGNv
bnN0IFN0cmluZyYpIHsKKyAgICAgICAgYWRkSGFzaFRvRGF0YWJhc2UoaGFzaCk7CisgICAgfSk7
CisgICAgYm9vdHN0cmFwVHJhbnNhY3Rpb24uY29tbWl0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0Nh
Y2hlU3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgY29uc3Qgc2l6ZV90IG1heEVudHJpZXMgPSAxMDAwMDA7CisKKyAgICBp
ZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPCBtYXhFbnRyaWVzKQorICAgICAgICByZXR1cm47
CisKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzaHJpbmtpbmcgc3Rh
dGlzdGljcyBjYWNoZSBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUsIG1heEVudHJpZXM9JWx1
Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3VudCksIG1heEVudHJp
ZXMpOworCisgICAgY2xlYXIoKTsKKworICAgIFN0cmluZ0NhcHR1cmUgbmV0d29ya0NhY2hlUGF0
aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yYWdlUGF0aCgpKTsKKyAgICBk
aXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgbmV0d29ya0Nh
Y2hlUGF0aENhcHR1cmVdIHsKKyAgICAgICAgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShuZXR3
b3JrQ2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKSk7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHN0YXRpc3RpY3MgY2FjaGUgc2hyaW5rIGNvbXBsZXRlZCBtX2Fw
cHJveGltYXRlRW50cnlDb3VudD0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1h
dGVFbnRyeUNvdW50KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBr
ZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBTdHJp
bmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVS
TCA9IHJlcXVlc3QudXJsKCk7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlz
LCBoYXNoLCByZXF1ZXN0VVJMXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKKyAgICAgICAgaWYg
KHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0
d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBidXQgaXMgbm90IGhhbmRs
ZWQgYnkgdGhlIGNhY2hlIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogRG8gZGlhZ25vc3RpYyBsb2dnaW5nLgorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1hcmtBc1JlcXVlc3RlZChoYXNoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5l
dHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgU3RyaW5nIGhhc2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7CisgICAgV2ViQ29y
ZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOworICAgIHF1ZXJ5V2FzRXZlclJlcXVl
c3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTF0oYm9vbCB3YXNQcmV2aW91c2x5UmVx
dWVzdGVkKSB7CisgICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVxdWVzdGVkKSB7CisgICAgICAg
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyB3YXMgcHJldmlvdXNs
eSBjYWNoZWQgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUgY2FjaGUiLCByZXF1ZXN0VVJMLnN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGlj
IGxvZ2dpbmcuCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWFya0FzUmVxdWVzdGVkKGhh
c2gpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFJl
dHJpZXZlZENhY2hlZEVudHJ5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBXZWJD
b3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgaWYgKHN1Y2Nlc3MpCisg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIGlzIGluIHRoZSBj
YWNoZSBhbmQgaXMgdXNlZCIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMg
aXMgaW4gdGhlIGNhY2hlIGJ1dCB3YXNuJ3QgdXNlZCIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOworICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCit9CisK
K3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6bWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmlu
ZyYgaGFzaCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5n
Q2FwdHVyZSBoYXNoQ2FwdHVyZShoYXNoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91
bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmVdIHsKKyAgICAgICAgV2ViQ29yZTo6
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVy
OworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIGFkZEhhc2hU
b0RhdGFiYXNlKGhhc2hDYXB0dXJlLnN0cmluZygpKTsKKyAgICB9KTsKKworICAgIHNocmlua0lm
TmVlZGVkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVy
UmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhh
bmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIGV2ZXJSZXF1ZXN0ZWRRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RXZl
clJlcXVlc3RlZFF1ZXJ5PihFdmVyUmVxdWVzdGVkUXVlcnkgeyBoYXNoLCBjb21wbGV0aW9uSGFu
ZGxlciB9KTsKKyAgICBhdXRvJiBxdWVyeSA9ICpldmVyUmVxdWVzdGVkUXVlcnk7CisgICAgbV9h
Y3RpdmVRdWVyaWVzLmFkZChXVEY6Om1vdmUoZXZlclJlcXVlc3RlZFF1ZXJ5KSk7CisgICAgZGlz
cGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0gewor
ICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgICAgIGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZh
bHNlOworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgeworICAgICAgICAgICAgV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwo
IlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVlc3RlZCBXSEVSRSBoYXNoPT8iKSk7CisgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykg
eworICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsKKyAg
ICAgICAgICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVkID0gc3RhdGVtZW50LnN0ZXAoKSA9PSBX
ZWJDb3JlOjpTUUxSZXN1bHRSb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsICZxdWVyeSwg
d2FzQWxyZWFkeVJlcXVlc3RlZF0geworICAgICAgICAgICAgcXVlcnkuY29tcGxldGlvbkhhbmRs
ZXIod2FzQWxyZWFkeVJlcXVlc3RlZCk7CisgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVt
b3ZlKCZxdWVyeSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXNdIHsK
KyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewor
ICAgICAgICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJE
RUxFVEUgRlJPTSBBbHJlYWR5UmVxdWVzdGVkIikpOworICAgICAgICAgICAgbV9hcHByb3hpbWF0
ZUVudHJ5Q291bnQgPSAwOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0Nh
Y2hlU3RhdGlzdGljczo6YWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CisKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIElHTk9SRSBJTlRP
IEFscmVhZHlSZXF1ZXN0ZWQgKGhhc2gpIFZBTFVFUyAoPykiKSk7CisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBoYXNoKTsKKyAgICBpZiAoIWV4ZWN1dGVTUUxTdGF0
ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgKyttX2FwcHJveGltYXRl
RW50cnlDb3VudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCA4NWNjMDI4OTM4NDIwOWQ0
ZGIxMGEwYzM5NjlmMjZjNjYzM2QzZjIxLi5jMTdiM2VjN2ZmM2Y0OWQyYzNmOTVkMmU3NDVhYWM4
YzVhYTFhMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0xNTUsNiArMTU1LDggQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZlcnNpb24gPSAyOwogCisgICAgY29uc3Qg
U3RyaW5nJiBkaXJlY3RvcnlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3RvcnlQYXRoOyB9
CisKIHByaXZhdGU6CiAgICAgTmV0d29ya0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KaW5kZXggNzJjMDZjNjJl
M2I0ODBhNGI3OWQyN2ZlMWViMmUxNTBjNTBhMDE2Yy4uZTVkYjI2MzE4MDQwNTY1MDBhNjVhMmJl
OGMwYjk2NWMyNGIyNzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQpAQCAtMzAs
OCArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUNvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPGRp
cmVudC5oPgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1
ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRl
IDxzeXMvc3RhdC5oPgpAQCAtNDQsMzYgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0
aWMgY29uc3QgY2hhciBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnlbXSA9ICJXZWJLaXRDYWNoZSI7
CiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uRGlyZWN0b3J5UHJlZml4W10gPSAiVmVyc2lvbiAi
OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQotewotICAgIERJUiogZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0
dXJuOwotICAgIHN0cnVjdCBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRp
cikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IHR5cGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlm
ICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihTdHJpbmcobmFtZSkpOwotICAgIH0KLSAgICBj
bG9zZWRpcihkaXIpOwotfQotCi1zdGF0aWMgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKT4gZnVuY3Rpb24pCi17Ci0gICAgdHJh
dmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25d
KGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewotICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0
aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5h
bWUpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsm
ZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAg
ICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0gTmV0d29ya0NhY2hlS2V5OjpoYXNoU3Ry
aW5nTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rp
b24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQog
TmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKICAgICA6IG1fZGlzcGF0Y2hEYXRhKGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0
YV9jcmVhdGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RF
RkFVTFQpKSkKICAgICAsIG1fc2l6ZShzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggNzYw
NDQwOTJjYjE2YTM0NDJjNzZkYmY3NjNiODI2YmQwYjMwYjkxMC4uZWFjNThlOTg2YTc5MTNkNDIz
N2Y3MjRiMTYwYTQ1YTJkZDcyMzg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC02NCw3ICs2
NCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgaWYgKCFtX2Rpc2tDYWNoZURpcmVj
dG9yeS5pc051bGwoKSkgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFi
bGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1f
ZGlza0NhY2hlRGlyZWN0b3J5KSkgeworICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFi
bGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1f
ZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVm
ZmljYWN5TG9nZ2luZykpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiB1cmxD
YWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTow
IGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgIFtOU1VSTENhY2hl
IHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKICAgICAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA1NzllMzZiMDQzNGM1YTc3
NTIzNzgxNGEwM2JmMTRhMWYxZGYzOGI0Li4wMjFhNzI2MGVjMzZiNWZhZjdkYzM0NDZhYzdhODUx
MDQ2YzBlY2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC00NSw2
ICs0NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJ
UEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uCiAgICAgZW5jb2RlciA8PCBkaXNrQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAg
ICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGU7CisgICAgZW5jb2RlciA8PCBz
aG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmc7CiAjZW5kaWYKICAgICBlbmNv
ZGVyIDw8IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtODYs
NiArODcsOCBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUo
SVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIE5ldAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtD
YWNoZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggNGExZTRiNzliYzZkMjg1MTg5M2NiMzg4OGZkYTUxNGFi
YzZlYmViZC4uMWE1NDkyODljZGQzN2UzODJiNTEyOTQ0YjdhMDNlMjdhZTQyMDRjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC01OCw2ICs1OCw3IEBAIHN0cnVjdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKICAgICBib29sIHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBib29sIHNo
b3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKICNlbmRpZgogCiAgICAgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDkxNjUzZGNlN2RiOWI2
MWFhZWI4YjM5NDFmZDVmZWQzM2E0MzcxZGQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0
ZDMzYTUyMDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC04MSw2ICs4MSw3IEBAIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXkgPSBAIldlYktpdDJIVFRQU1By
b3h5IjsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogc3RhdGljIE5TU3RyaW5nICogY29u
c3QgV2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5ID0gQCJXZWJLaXROZXR3b3Jr
Q2FjaGVFbmFibGVkIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtDYWNo
ZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleSA9IEAiV2ViS2l0TmV0d29ya0NhY2hl
RWZmaWNhY3lMb2dnaW5nRW5hYmxlZCI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC0xMDYsNiArMTA3LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRl
ZCgpCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlv
bmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktp
dE5ldHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rp
b25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJL
aXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlm
CiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRl
ZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwpAQCAtMjUyLDYgKzI1NCw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1
bHRzS2V5XTsKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JL
ZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsK
ICNlbmRpZgogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQ1NTgwN2FjOGQ0ZTRjZDYxYjA5NDBhOTQ4ZjgzYWIx
YzExZDA4OS4uNzg2Yjc4MWRmZjFjOWQ4MDY2NDk0M2RmY2FjYjgxMGJhMmJhOGM4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTE0Niw2ICsxMTQ2LDkgQEAKIAkJN0NGNDdGRkUxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxl
UGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMu
bW0gKi87IH07CiAJCTdDRjQ3RkZGMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5u
ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRB
Q0JCMDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBO
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAg
LyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07CisJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1
MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5oICovOyB9OworCQk4MzRCMjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0
d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbSAqLzsgfTsKIAkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8q
IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUg
LyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CkBAIC0zMzE5LDYgKzMzMjIsOSBA
QAogCQk3Q0Y0N0ZGQzE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFu
bmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGRDE3Mjc2QUUz
MDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9j
ZXNzQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTEx
MUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYw
MEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03Mzc5LDggKzczODUsMTEgQEAKIAkJCQlFNDg5RDI4NzFBMEEyREI4MDA3OEMw
NkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovLAogCQkJCUU0ODlEMjg4MUEwQTJEQjgwMDc4
QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKIAkJCQlFNDg5RDI4OTFBMEEyREI4
MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAorCQkJCTgzNEIyNTBFMUE4MzFB
OEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDQz
NkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQz
NkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODM0QjI1
MTAxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLywKKwkJCQk4
MzRCMjUxMTFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1t
ICovLAogCQkJCUU0NDM2RUMyMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdl
LmggKi8sCiAJCQkJRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3Jh
Z2VDb2NvYS5tbSAqLywKIAkJCSk7CkBAIC03NDk3LDYgKzc1MDYsNyBAQAogCQkJCTFBQzEzMzZD
MTg1NjVDN0EwMEYzRUMwNSAvKiBBUElQYWdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUZERDMxNTE4OTFCNTQwMDAxNTM5NzAgLyogQVBJUG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Q0U0RDIyMDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYzNDQ0NTYxMkE4
ODVDODAwMDYxMkQ4IC8qIEFQSVNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
NUE4RDJFMTE4N0RFQzFBMDBDMzlDOUUgLyogQVBJU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFGREU2NjIxOTU0RTlCMTAwQzQ4RkZBIC8qIEFQSVNlc3Npb25TdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03NjgzLDYgKzc2OTMsNyBAQAogCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBG
NSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjE2MkIxMTFG
Mzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBMkQ4NEEzMTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEgLyog
T2JqQ09iamVjdEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNjcyRDEyQzdFREY3MDA4
RjlDMzUgLyogT3JpZ2luQW5kRGF0YWJhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZG
QjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODgx
LDYgKzk4OTIsNyBAQAogCQkJCTFDOEUyOTNBMTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNDNzI1QzE5NkY2MDUyMDBBRUREMEMgLyogV0tJ
bnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0MjkzQTUxOTVB
NDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJODM0QjI1MTMxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3NDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQTlFMTBBMTMxNUNE
MTgwMDlFNzAzMSAvKiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzNEM0EzQjUxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc1RkQxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJs
ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246221</attachid>
            <date>2015-02-07 15:35:23 -0800</date>
            <delta_ts>2015-02-08 14:06:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141269-20150207153523.patch</filename>
            <type>text/plain</type>
            <size>39064</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGRmZmQ2ODIzMTQwYjlj
NjdlNWRiMzBhMGU1ZDRjZGMzYzI3ZmMxZC4uYTg4Y2M4N2NiMzY3YjhlMmYxMWJkMzBiNTcyMTM3
ZThmYjAxZDc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcg
dG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2FjaGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCisKKyAgICAgICAgRXhwb3J0IGFuIGV4dHJhIHN5bWJvbC4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorCiAyMDE1LTAyLTA3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIFNldCAtY29udGVudHNTY2FsZSBvbiBBVlBsYXllckxheWVy
IHRvIGFsbG93IEFWUGxheWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgSExTIHZhcmlhbnQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMjYxMzAyMGE5ZTZjNmNiN2VmMGY0MGQ5ODExNGUyYTA4NDI4N2M2ZC4u
NTNiOGU0NzRlYTY1NzQ2ZjdkYzI3OWI3OTM0ZjRjNjZhZWI5Y2Y0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMyIEBACisyMDE1LTAyLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dLMl0gQWRkIGxvZ2dpbmcgdG8gdmFsaWRhdGUgdGhlIG5ldHdvcmsgY2Fj
aGUgZWZmaWNhY3kgKFBhcnQgMSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTI2OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIGNvbnNv
bGUgbG9nZ2luZyB0byB2YWxpZGF0ZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeS4gVGhpcyB3
aWxsCisgICAgICAgIHRlbGwgdXMgaWYgaG93IHRoZSBuZXR3b3JrIGNhY2hlIHNhdGlzdGllcyBy
ZXF1ZXN0cywgaW4gcGFydGljdWxhcjoKKyAgICAgICAgLSBSZXF1ZXN0IGNhbm5vdCBiZSBoYW5k
bGVkIGJ5IHRoZSBjYWNoZQorICAgICAgICAtIEVudHJ5IHdhcyBub3QgaW4gdGhlIGNhY2hlIGJ1
dCBpcyBubyBsb25nZXIgdGhlcmUgKHBydW5lZCkKKyAgICAgICAgLSBFbnRyeSBpcyBpbiB0aGUg
Y2FjaGUgYnV0IGlzIG5vdCB1c2FibGUKKyAgICAgICAgLSBFbnRyeSBpcyBpbiB0aGUgY2FjaGUg
YW5kIGlzIHVzZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgU1FMaXRlLWJh
c2VkIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBzdG9yYWdlCisgICAgICAgIHRoYXQgaXMgdXNl
ZCB0byBzdG9yZSByZXF1ZXN0cyB3ZSBoYXZlIHNlZW4gYmVmb3JlLCBhbmQgcXVlcnkgaWYgd2UK
KyAgICAgICAgaGF2ZSBzZWVuIGEgcmVxdWVzdCBiZWZvcmUuIFRoZSBzdG9yYWdlIGlzIGxpZ2h0
d2VpZ2h0IGFzIGl0IG9ubHkKKyAgICAgICAgc3RvcmVzIGhhc2hlcyBpbiB0aGUgZGF0YWJhc2Us
IGluIGEgYmFja2dyb3VuZCB0aHJlYWQuCisKKyAgICAgICAgVGhlIHN0YXRpc3RpY3MgY2FjaGUg
aXMgaW5pdGlhbGx5IGJvb3RzdGFwcGVkIGZyb20gdGhlIG5ldHdvcmsgZGlzaworICAgICAgICBj
YWNoZSBzbyB0aGF0IHdlIGhhdmUgZGF0YSBpbml0aWFsbHkgYW5kIGdldCBhcyBhY2N1cmF0ZSBz
dGF0aXN0aWNzCisgICAgICAgIGFzIHBvc3NpYmxlIGZyb20gdGhlIHN0YXJ0LgorCisgICAgICAg
IFRvIG1haW50YWluIGFuIGFjY2VwdGFibGUgbGV2ZWwgb2YgcGVyZm9ybWFuY2UsIHdlIGhhdmUg
YSBoYXJkIGxpbWl0CisgICAgICAgIG9uIHRoZSBudW1iZXIgb2YgdW5pcXVlIHJlcXVlc3RzIHRo
YXQgYXJlIHJldGFpbmVkIHNldCB0byAxMDAwMDAuCisKKyAgICAgICAgRGlhZ25vc3RpYyBsb2dn
aW5nIGZvciB0aGlzIHdpbGwgYmUgYWRkZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKIDIwMTUt
MDItMDcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFuZCBh
cyBhIGZ1cnRoZXIgZm9sbG93dXAgcmVzdG9yZSB0aGUgOGJpdCB0ZXN0IHRvby4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KaW5kZXggZmM3ZGE4ZTE5ZWE2NjNhNTMyZGUzZTZhMzgwNWRmNTdjZGUxOGU5ZS4u
ZjBmMjk4YmJkZWQxMDgxNTFiOWQwNzI5NWZkZTk3NzI0YTg0MDNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTIyNjIsNiArMjI2Miw3IEBAIF9fWk5LN1dlYkNvcmU3RWxlbWVudDI2ZmFzdEF0
dHJpYnV0ZUxvb2t1cEFsbG93ZWRFUktOU18xM1F1YWxpZmllZE5hbWVFCiAjZW5kaWYKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKK19fWk43V2ViQ29yZTIxU1FMaXRlRGF0YWJhc2VUcmFja2VyMjRo
YXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3NFdgogX19aTjdXZWJDb3JlMjdOb0V4Y2VwdGlvbkFzc2Vy
dGlvbkNoZWNrZXJDMUVQS2NpCiBfX1pON1dlYkNvcmUyN05vRXhjZXB0aW9uQXNzZXJ0aW9uQ2hl
Y2tlckQxRXYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggNjZiNjQ3OWI0OTlhZmMyMjk2NGQ1ZDAwYzg0
MGQxN2JiZDkxMWE2My4uZDQ3NzBhYTZiNmNkZDIzZTRhZmVkODVjMmFhY2I5ZWYyODUzODcyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
QEAgLTQ5LDEwICs1MCwxMyBAQCBOZXR3b3JrQ2FjaGUmIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLWJvb2wgTmV0d29ya0NhY2hlOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQorYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKQog
ewogICAgIG1fc3RvcmFnZSA9IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY2FjaGVQYXRoKTsK
IAorICAgIGlmIChlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCisgICAgICAgIG1fc3RhdGlzdGljcyA9
IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY2FjaGVQYXRoKTsKKwogICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNz
ICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3RvcmFnZTsKIH0KQEAgLTIyMCwy
MyArMjI0LDMzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgc3RkCiAKICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICV1Iiwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW5hbFJlcXVlc3Qu
cHJpb3JpdHkoKSk7CiAKKyAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNo
ZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIGlmICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1
ZXN0KSkgeworICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdChzdG9yYWdlS2V5LCBvcmlnaW5hbFJl
cXVlc3QpOworCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjpub3coKTsKLSAgICBOZXR3b3JrQ2FjaGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNo
ZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIHVuc2lnbmVkIHByaW9yaXR5ID0gb3JpZ2luYWxS
ZXF1ZXN0LnByaW9yaXR5KCk7CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXks
IHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3Rh
cnRUaW1lXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5
KSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMs
IG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtl
eV0oc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBlbnRyeSkgewog
ICAgICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOworCisgICAgICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmll
dmFsRmFpbHVyZShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIGRlY29kZWRFbnRyeSA9IGRlY29kZVN0b3JhZ2VFbnRyeSgq
ZW50cnksIG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9ICEhZGVjb2Rl
ZEVudHJ5OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeShzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVl
c3QsIHN1Y2Nlc3MpOworCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBhdXRvIGVsYXBzZWRN
UyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwog
I2VuZGlmCkBAIC0zMzEsNiArMzQ1LDEzIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpjbGVhcigpCiAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUiKTsK
ICAgICBpZiAobV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKCk7CisgICAgaWYg
KG1fc3RhdGlzdGljcykKKyAgICAgICAgbV9zdGF0aXN0aWNzLT5jbGVhcigpOworfQorCitTdHJp
bmcgTmV0d29ya0NhY2hlOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rv
cmFnZSA/IG1fc3RvcmFnZS0+ZGlyZWN0b3J5UGF0aCgpIDogU3RyaW5nKCk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgK
aW5kZXggYjI4Nzk2OTlkYTg0NDc1ZDllZGRjZWRjNmM2YWIyYjA1MTAyYTk4Yy4uNDBlNDNmYzdj
OTVlZjc3YmU1ZjgwNDg2NzQyNDczNTA1MzA5ZDE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQxLDEzICs0MSwxNSBA
QCBjbGFzcyBVUkw7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOworCiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE5ldHdvcmtDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8
TmV0d29ya0NhY2hlPjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBzaW5nbGV0
b24oKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7Cisg
ICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVm
ZmljYWN5TG9nZ2luZyk7CiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShzaXplX3QpOwogCiAgICAg
Ym9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RvcmFnZTsgfQpAQCAtNzUsMTEg
Kzc3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAorICAgIFN0cmluZyBzdG9y
YWdlUGF0aCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIE5ldHdvcmtDYWNoZSgpID0gZGVmYXVs
dDsKICAgICB+TmV0d29ya0NhY2hlKCkgPSBkZWxldGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlU3RvcmFnZT4gbV9zdG9yYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzPiBtX3N0YXRpc3RpY3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMWY1NDcwOTc5MDEzNjg5ZWJhOTA1YWNj
NGMwNDYzNjNiMWFhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAor
I2RlZmluZSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitzdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIERJUiog
ZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpKTsKKyAgICBpZiAoIWRpcikKKyAgICAgICAgcmV0dXJuOworICAgIHN0cnVjdCBkaXJlbnQq
IGRwOworICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7CisgICAgICAgIGlmIChkcC0+
ZF90eXBlICE9IHR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgY2hh
ciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwg
IXN0cmNtcChuYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmdW5j
dGlvbihTdHJpbmcobmFtZSkpOworICAgIH0KKyAgICBjbG9zZWRpcihkaXIpOworfQorCitpbmxp
bmUgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0
aXRpb25QYXRoKT4gZnVuY3Rpb24pCit7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRo
LCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFt
ZSkgeworICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOworICAgICAgICB0cmF2ZXJzZURp
cmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRo
XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVu
Z3RoKCkgIT0gTmV0d29ya0NhY2hlS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBh
dGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YjUyMzg3OGJkZWU5YmFmMTFmODMwOWQyOWQ4MjViNzIyOGM2YWY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzX2gKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0
YWJhc2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0NhY2hlU3RhdGlzdGljcyB7
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKKworICAgIHZvaWQgY2xlYXIoKTsK
KworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNv
cmRSZXRyaWV2YWxGYWlsdXJlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnko
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCBzdWNjZXNzKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CisgICAgdm9pZCBib290c3RyYXBGcm9tTmV0
d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2hlUGF0aCk7CisgICAgdm9pZCBzaHJp
bmtJZk5lZWRlZCgpOworCisgICAgdm9pZCBhZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcm
IGhhc2gpOworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJl
cXVlc3RlZCk+IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyOworICAgIHZvaWQgcXVlcnlXYXNF
dmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5k
bGVyJik7CisgICAgdm9pZCBtYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKTsKKwor
ICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkgeworICAgICAgICBTdHJpbmcgaGFzaDsKKyAg
ICAgICAgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CisgICAg
fTsKKworICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgeyAw
IH07CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3Bh
dGNoX3F1ZXVlX3Q+IG1fYmFja2dyb3VuZElPUXVldWU7CisjZW5kaWYKKyAgICBtdXRhYmxlIEhh
c2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeT4+IG1fYWN0aXZl
UXVlcmllczsKKyAgICBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkK
KworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29h
Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyMjc5NDYxMDdjZTJiYmZlZjQ4M2FhZTMwNzFl
M2Y1Mjk2ZTQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAgLTAsMCArMSwyNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCisKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVU
cmFuc2FjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3RhdGlzdGljc0RhdGFiYXNl
TmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworCitzdGF0aWMgYm9vbCBleGVjdXRl
U1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgc3FsKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKyAgICBBU1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgYm9vbCByZXN1bHQgPSBk
YXRhYmFzZS5leGVjdXRlQ29tbWFuZChzcWwpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBM
T0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1dGUgc3Rh
dGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCBzcWwudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wg
ZXhlY3V0ZVNRTFN0YXRlbWVudChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAg
QVNTRVJUKHN0YXRlbWVudC5kYXRhYmFzZSgpLmlzT3BlbigpKTsKKworICAgIGJvb2wgcmVzdWx0
ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IExPR19FUlJPUigiTmV0d29yayBjYWNoZSBzdGF0aXN0aWNzOiBmYWlsZWQgdG8gZXhlY3V0ZSBz
dGF0ZW1lbnQgXCIlc1wiIGVycm9yIFwiJXNcIiIsIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5k
YXRhKCksIHN0YXRlbWVudC5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPiBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRo
ID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgbmV0d29ya0Nh
Y2hlU3RhdGlzdGljc0RhdGFiYXNlTmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPihuZXcgTmV0d29ya0NhY2hlU3RhdGlzdGljcyhkYXRhYmFz
ZVBhdGgpKTsKK30KKworTmV0d29ya0NhY2hlU3RhdGlzdGljczo6TmV0d29ya0NhY2hlU3RhdGlz
dGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKKyAgICA6IG1fYmFja2dyb3VuZElPUXVl
dWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQu
Q2FjaGUuU3RhdGlzdGljcy5CYWNrZ3JvdW5kIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKSkpCit7
CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgp
LCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tH
Uk9VTkQsIDApKTsKKworICAgIGluaXRpYWxpemUoZGF0YWJhc2VQYXRoKTsKK30KKwordm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQ
YXRoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworCisgICAgU3RyaW5nQ2Fw
dHVyZSBkYXRhYmFzZVBhdGhDYXB0dXJlKGRhdGFiYXNlUGF0aCk7CisgICAgU3RyaW5nQ2FwdHVy
ZSBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZShOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3Jh
Z2VQYXRoKCkpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCks
IFt0aGlzLCBkYXRhYmFzZVBhdGhDYXB0dXJlLCBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZSwgc3Rh
cnRUaW1lXSB7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1
dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgICAgICBTdHJpbmcgZGF0YWJhc2VQ
YXRoID0gZGF0YWJhc2VQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKKyAgICAgICAgaWYgKCFXZWJDb3Jl
OjptYWtlQWxsRGlyZWN0b3JpZXMoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShkYXRhYmFzZVBhdGgp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSBPcGVuaW5nIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBh
dCAlcy4uLiIsIGRhdGFiYXNlUGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9kYXRhYmFz
ZS5vcGVuKGRhdGFiYXNlUGF0aCk7CisgICAgICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiTmV0d29yayBjYWNoZSBzdGF0aXN0aWNzOiBGYWlsZWQgdG8gb3BlbiAv
IGNyZWF0ZSB0aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2Rh
dGFiYXNlLCBBU0NJSUxpdGVyYWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEFscmVhZHlS
ZXF1ZXN0ZWQgKGhhc2ggVEVYVCBQUklNQVJZIEtFWSkiKSk7CisgICAgICAgIFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1Qg
Y291bnQoKikgRlJPTSBBbHJlYWR5UmVxdWVzdGVkIikpOworICAgICAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmVBbmRTdGVwKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogRmFpbGVkIHRvIGNvdW50IHRo
ZSBudW1iZXIgb2Ygcm93cyBpbiBBbHJlYWR5UmVxdWVzdGVkIHRhYmxlIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2FwcHJveGltYXRlRW50cnlDb3VudCA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAg
IGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRp
bWUpLmNvdW50KCk7CisjZW5kaWYKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3Jr
UHJvY2VzcykgTmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGxvYWQgY29tcGxldGUs
IGVudHJpZXM9JWx1IHRpbWU9JWxsZG1zIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGlt
YXRlRW50cnlDb3VudCksIGVsYXBzZWRNUyk7CisKKyAgICAgICAgaWYgKCFtX2FwcHJveGltYXRl
RW50cnlDb3VudCkgeworICAgICAgICAgICAgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShuZXR3
b3JrQ2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKSk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAg
ICAgICAgZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydFRp
bWUpLmNvdW50KCk7CisjZW5kaWYKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0
d29ya1Byb2Nlc3MpIE5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBib290c3RyYXBw
aW5nIGNvbXBsZXRlLCBlbnRyaWVzPSVsdSB0aW1lPSVsbGRtcyIsIHN0YXRpY19jYXN0PHNpemVf
dD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpLCBlbGFwc2VkTVMpOworICAgICAgICB9CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdv
cmtDYWNoZShjb25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9j
ZXNzKSBCb290c3RyYXBwaW5nIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2Ug
ZnJvbSB0aGUgbmV0d29yayBjYWNoZS4uLiIpOworCisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNh
Y3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgIFdlYkNv
cmU6OlNRTGl0ZVRyYW5zYWN0aW9uIGJvb3RzdHJhcFRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwor
ICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICB0cmF2ZXJzZUNhY2hlRmls
ZXMobmV0d29ya0NhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgU3Ry
aW5nJikgeworICAgICAgICBhZGRIYXNoVG9EYXRhYmFzZShoYXNoKTsKKyAgICB9KTsKKyAgICBi
b290c3RyYXBUcmFuc2FjdGlvbi5jb21taXQoKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBjb25zdCBzaXplX3QgbWF4RW50cmllcyA9IDEwMDAwMDsKKworICAgIGlmIChtX2Fw
cHJveGltYXRlRW50cnlDb3VudCA8IG1heEVudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHNocmlua2luZyBzdGF0aXN0aWNz
IGNhY2hlIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSwgbWF4RW50cmllcz0lbHUiLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSwgbWF4RW50cmllcyk7CisK
KyAgICBjbGVhcigpOworCisgICAgU3RyaW5nQ2FwdHVyZSBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVy
ZShOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JhZ2VQYXRoKCkpOworICAgIGRpc3BhdGNo
X2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBuZXR3b3JrQ2FjaGVQYXRo
Q2FwdHVyZV0geworICAgICAgICBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtDYWNo
ZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNoZSBzaHJpbmsgY29tcGxldGVkIG1fYXBwcm94aW1h
dGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNv
cmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdChjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFN0cmluZyBoYXNo
ID0ga2V5Lmhhc2hBc1N0cmluZygpOworICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVx
dWVzdC51cmwoKTsKKyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gs
IHJlcXVlc3RVUkxdKGJvb2wgd2FzRXZlclJlcXVlc3RlZCkgeworICAgICAgICBpZiAod2FzRXZl
clJlcXVlc3RlZCkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJv
Y2VzcykgJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGJ1dCBpcyBub3QgaGFuZGxlZCBieSB0
aGUgY2FjaGUiLCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBEbyBkaWFnbm9zdGljIGxvZ2dpbmcuCisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbWFya0FzUmVxdWVzdGVkKGhhc2gpOworICAgIH0pOworfQorCit2b2lkIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZhbEZhaWx1cmUoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKKyAgICBXZWJDb3JlOjpVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhh
c2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQp
IHsKKyAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpICVzIHdhcyBwcmV2aW91c2x5IGNhY2hl
ZCBidXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBjYWNoZSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2lu
Zy4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVk
Q2FjaGVkRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzdWNjZXNzKQoreworICAgIFdlYkNvcmU6OlVS
TCByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAg
TE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgJXMgaXMgaW4gdGhlIGNhY2hlIGFu
ZCBpcyB1c2VkIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgZWxz
ZQorICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSAlcyBpcyBpbiB0
aGUgY2FjaGUgYnV0IHdhc24ndCB1c2VkIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgLy8gRklYTUU6IERvIGRpYWdub3N0aWMgbG9nZ2luZy4KK30KKwordm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjptYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNo
KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTdHJpbmdDYXB0dXJl
IGhhc2hDYXB0dXJlKGhhc2gpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVl
dWUuZ2V0KCksIFt0aGlzLCBoYXNoQ2FwdHVyZV0geworICAgICAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgYWRkSGFzaFRvRGF0YWJh
c2UoaGFzaENhcHR1cmUuc3RyaW5nKCkpOworICAgIH0pOworCisgICAgc2hyaW5rSWZOZWVkZWQo
KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpxdWVyeVdhc0V2ZXJSZXF1ZXN0
ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVz
dGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gsIGNvbXBsZXRpb25IYW5kbGVyIH0p
OworICAgIGF1dG8mIHF1ZXJ5ID0gKmV2ZXJSZXF1ZXN0ZWRRdWVyeTsKKyAgICBtX2FjdGl2ZVF1
ZXJpZXMuYWRkKFdURjo6bW92ZShldmVyUmVxdWVzdGVkUXVlcnkpKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgJnF1ZXJ5XSB7CisgICAgICAg
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKKyAgICAgICAgYm9vbCB3YXNBbHJlYWR5UmVxdWVzdGVkID0gZmFsc2U7Cisg
ICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNU
IGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAgICAg
ICAgICAgIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBzdGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6
OlNRTFJlc3VsdFJvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnF1ZXJ5LCB3YXNBbHJl
YWR5UmVxdWVzdGVkXSB7CisgICAgICAgICAgICBxdWVyeS5jb21wbGV0aW9uSGFuZGxlcih3YXNB
bHJlYWR5UmVxdWVzdGVkKTsKKyAgICAgICAgICAgIG1fYWN0aXZlUXVlcmllcy5yZW1vdmUoJnF1
ZXJ5KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlz
dGljczo6Y2xlYXIoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBk
aXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpc10geworICAgICAg
ICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2Fj
dGlvbkNvdW50ZXI7CisgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7CisgICAgICAg
ICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBG
Uk9NIEFscmVhZHlSZXF1ZXN0ZWQiKSk7CisgICAgICAgICAgICBtX2FwcHJveGltYXRlRW50cnlD
b3VudCA9IDA7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLmlzT3BlbigpKTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gQWxyZWFk
eVJlcXVlc3RlZCAoaGFzaCkgVkFMVUVTICg/KSIpKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIGhhc2gpOworICAgIGlmICghZXhlY3V0ZVNRTFN0YXRlbWVudChz
dGF0ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICArK21fYXBwcm94aW1hdGVFbnRyeUNv
dW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IDg1Y2MwMjg5Mzg0MjA5ZDRkYjEwYTBj
Mzk2OWYyNmM2NjMzZDNmMjEuLmMxN2IzZWM3ZmYzZjQ5ZDJjM2Y5NWQyZTc0NWFhYzhjNWFhMWEx
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKQEAgLTE1NSw2ICsxNTUsOCBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmVyc2lvbiA9IDI7CiAKKyAgICBjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdG9yeVBhdGg7IH0KKwogcHJp
dmF0ZToKICAgICBOZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0
aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQppbmRleCA3MmMwNmM2MmUzYjQ4MGE0
Yjc5ZDI3ZmUxZWIyZTE1MGM1MGEwMTZjLi5lNWRiMjYzMTgwNDA1NjUwMGE2NWEyYmU4YzBiOTY1
YzI0YjI3NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCkBAIC0zMCw4ICszMCw3
IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJz
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCiAjaW5jbHVkZSA8ZGlz
cGF0Y2gvZGlzcGF0Y2guaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9z
dGF0Lmg+CkBAIC00NCwzNiArNDMsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHN0YXRpYyBjb25z
dCBjaGFyIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeVtdID0gIldlYktpdENhY2hlIjsKIHN0YXRp
YyBjb25zdCBjaGFyIHZlcnNpb25EaXJlY3RvcnlQcmVmaXhbXSA9ICJWZXJzaW9uICI7CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXN0YXRpYyB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rp
b24pCi17Ci0gICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm47Ci0g
ICAgc3RydWN0IGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsK
LSAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFzdHJj
bXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7Ci0gICAgfQotICAgIGNsb3NlZGly
KGRpcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBj
b25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiBmdW5jdGlvbikKLXsKLSAgICB0cmF2ZXJzZURp
cmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29uc3Qg
U3RyaW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7Ci0g
ICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5jdGlv
biwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAg
IGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSBOZXR3b3JrQ2FjaGVLZXk6Omhhc2hTdHJpbmdMZW5n
dGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmdW5jdGlvbihmaWxl
TmFtZSwgcGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCiBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXpl
KQogICAgIDogbV9kaXNwYXRjaERhdGEoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0
ZShkYXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfREVGQVVMVCkp
KQogICAgICwgbV9zaXplKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCA3NjA0NDA5MmNi
MTZhMzQ0MmM3NmRiZjc2M2I4MjZiZDBiMzBiOTEwLi5lYWM1OGU5ODZhNzkxM2Q0MjM3ZjcyNGIx
NjBhNDVhMmRkNzIzODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTY0LDcgKzY0LDcgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2Nv
YShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBpZiAoIW1fZGlza0NhY2hlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEUpCi0gICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2Fj
aGVEaXJlY3RvcnkpKSB7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZSAmJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2Fj
aGVEaXJlY3RvcnksIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lM
b2dnaW5nKSkgewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+IHVybENhY2hlKGFk
b3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0Nh
cGFjaXR5OjAgZGlza1BhdGg6bmlsXSkpOwogICAgICAgICAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDU3OWUzNmIwNDM0YzVhNzc1MjM3ODE0
YTAzYmYxNGExZjFkZjM4YjQuLjAyMWE3MjYwZWMzNmI1ZmFmN2RjMzQ0NmFjN2E4NTEwNDZjMGVj
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTQ1LDYgKzQ1LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6QXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb24KICAgICBlbmNvZGVyIDw8IGRpc2tDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBlbmNv
ZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVu
YWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKICNlbmRpZgogICAgIGVuY29kZXIgPDwg
Y29va2llU3RvcmFnZURpcmVjdG9yeTsKICNpZiBQTEFURk9STShJT1MpCkBAIC04Niw2ICs4Nyw4
IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFy
Z3VtZW50RGVjb2RlciYgZGVjb2RlciwgTmV0CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNo
b3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAppbmRleCA0YTFlNGI3OWJjNmQyODUxODkzY2IzODg4ZmRhNTE0YWJjNmViZWJk
Li4xYTU0OTI4OWNkZDM3ZTM4MmI1MTI5NDRiN2EwM2UyN2FlNDIwNGM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTU4LDYgKzU4LDcgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZGlz
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQogICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlOworICAgIGJvb2wgc2hvdWxkRW5h
YmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nOwogI2VuZGlmCiAKICAgICBTdHJpbmcgY29v
a2llU3RvcmFnZURpcmVjdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOTE2NTNkY2U3ZGI5YjYxYWFlYjhi
Mzk0MWZkNWZlZDMzYTQzNzFkZC4uZjAwYTVmZmJkMjBmNGUxNTlmZjYyODZjZDZmYzRkMzNhNTIw
NmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KQEAgLTgxLDYgKzgxLDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29u
c3QgV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleSA9IEAiV2ViS2l0MkhUVFBTUHJveHkiOwog
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJL
aXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNLZXkgPSBAIldlYktpdE5ldHdvcmtDYWNoZUVu
YWJsZWQiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0TmV0d29ya0NhY2hlRWZmaWNh
Y3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5ID0gQCJXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2Fj
eUxvZ2dpbmdFbmFibGVkIjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNiw2
ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAog
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNl
dE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29y
a0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdv
cmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleV07CiAjZW5kaWYKIAogICAg
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6
cmVnaXN0cmF0aW9uRGljdGlvbmFyeV07CkBAIC0yNTIsNiArMjU0LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmEKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNLZXld
OworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5n
ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJL
aXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlm
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA4ZDU1ODA3YWM4ZDRlNGNkNjFiMDk0MGE5NDhmODNhYjFjMTFkMDg5
Li43ODZiNzgxZGZmMWM5ZDgwNjY0OTQzZGZjYWNiODEwYmEyYmE4Yzg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ2LDYg
KzExNDYsOSBAQAogCQk3Q0Y0N0ZGRTE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFu
bmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NGNDdGRkMxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5tbSAqLzsg
fTsKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQx
NzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgw
NTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQ
cm9jZXNzQ29jb2EubW0gKi87IH07CisJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtUG9zaXguaCAqLzsgfTsKKwkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmggKi87IH07CisJCTgzNEIyNTEzMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzRCMjUxMTFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tICovOyB9OwogCQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTgzNzJEQjI4MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5jcHAgKi87IH07CiAJCTgzNzJEQjI5MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKQEAgLTMzMTksNiArMzMyMiw5IEBACiAJCTdD
RjQ3RkZDMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5
MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb2Nv
YS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MTExQTg0MkM4
NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1
IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTczNzksOCArNzM4NSwxMSBAQAogCQkJCUU0ODlEMjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBO
ZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8sCiAJCQkJRTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovLAogCQkJCUU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8sCisJCQkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oICovLAogCQkJCUU0NDM2RUMwMUEw
Q0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuY3BwICovLAogCQkJCUU0NDM2RUMxMUEw
Q0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuaCAqLywKKwkJCQk4MzRCMjUxMDFBODQy
Qzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oICovLAorCQkJCTgzNEIyNTEx
MUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gKi8sCiAJ
CQkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLywK
IAkJCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZUNvY29h
Lm1tICovLAogCQkJKTsKQEAgLTc0OTcsNiArNzUwNiw3IEBACiAJCQkJMUFDMTMzNkMxODU2NUM3
QTAwRjNFQzA1IC8qIEFQSVBhZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkREMzE1
MTg5MUI1NDAwMDE1Mzk3MCAvKiBBUElQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRTREMjIwMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjM0NDQ1NjEyQTg4NUM4MDAw
NjEyRDggLyogQVBJU2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTc1QThEMkUx
MTg3REVDMUEwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZE
RTY2MjE5NTRFOUIxMDBDNDhGRkEgLyogQVBJU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywK
QEAgLTc2ODMsNiArNzY5Myw3IEBACiAJCQkJMUEyMTYxQjAxMUYzNzY2NDAwOEFEMEY1IC8qIE5Q
UnVudGltZU9iamVjdE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyMTYyQjExMUYzODk3MTAw
OEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDg0
QTMxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2Jq
ZWN0R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAv
KiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVD
NTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk4ODEsNiArOTg5
Miw3IEBACiAJCQkJMUM4RTI5M0ExMjc2MUU1QjAwQkM3QkQwIC8qIFdLSW5zcGVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGM0M3MjVDMTk2RjYwNTIwMEFFREQwQyAvKiBXS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTQyOTNBNTE5NUE0M0REMDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gaW4gU291
cmNlcyAqLywKKwkJCQk4MzRCMjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBOUUxMEExMzE1Q0QxODAwOUU3
MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
M0QzQTNCNTEzMzk2MDBCMDA3MDlCRTQgLyogV0tNZWRpYUNhY2hlTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzQwNzVGRDEyNEZGMDI3MDA2OEYyMEEgLyogV0tNdXRhYmxlQXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>