<?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>186104</bug_id>
          
          <creation_ts>2018-05-30 11:31:27 -0700</creation_ts>
          <short_desc>Stop using StorageTracker.db in LocalStorageDatabaseTracker</short_desc>
          <delta_ts>2018-06-01 13:24:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1428520</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 11:31:27 -0700</bug_when>
    <thetext>StorageTracker.db acts as an cache for searching files in LocalStorage directory. There are a few reasons we may not want StorageTracker.db any more:
1. We could compute file name from origin, so as long as we have origin information(m_origins), we don&apos;t need StorageTracker.db for mapping from origin to file path. This help us simplify the code.
2. Maintaining(open/delete/update) a database could be expensive. 
3. Currently StorageTracker.db stores full paths, which causes problems like not deleting correct files after restoring from iCloud backup(&lt;rdar://problem/31744826&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428525</commentid>
    <comment_count>1</comment_count>
      <attachid>341588</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 11:49:39 -0700</bug_when>
    <thetext>Created attachment 341588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428536</commentid>
    <comment_count>2</comment_count>
      <attachid>341588</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-30 12:19:58 -0700</bug_when>
    <thetext>Comment on attachment 341588
Patch

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

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));

Shouldn&apos;t we do this in the dispatch call above so that we do I/O on the background thread instead of the main thread?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:87
&gt; +    if (path.isEmpty())

if (!path.isEmpty())
    SQLiteFileSystem::deleteDatabaseFile(path);

since we&apos;d want to notify the clients even if the path was empty I would  assume?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:98
&gt; +    Vector&lt;String&gt; paths = FileSystem::listDirectory(m_localStorageDirectory, &quot;*.localstorage&quot;);

auto paths

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:111
&gt; +    importOrigins();

Looks like this unconditionally re-imports all origins from disk, even though they may have already been imported. This seems bad.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:131
&gt; +        origins.append(origin);

This should have been uncheckedAppend() since you reserveInitialCapacity() beforehand. However, in this case, we should rely on pre-existing copyToVector() instead of duplicating the logic for copying a container into a vector.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:171
&gt; +    m_origins.clear();

What if origins were already imported?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:174
&gt;          if (!path.endsWith(&quot;.localstorage&quot;))

Why is this needed? Maybe this could be an assertion?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h:60
&gt; +        double creationTime;

We try to avoid storing timestamps as double nowadays. This and the one below should probably be WallTime instead of double.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428564</commentid>
    <comment_count>3</comment_count>
      <attachid>341597</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 13:24:02 -0700</bug_when>
    <thetext>Created attachment 341597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428566</commentid>
    <comment_count>4</comment_count>
      <attachid>341597</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-30 13:31:03 -0700</bug_when>
    <thetext>Comment on attachment 341597
Patch

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

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));

Why are we still doing this on the main thread?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:110
&gt; +    importOrigins();

Why is this OK? This will reimport all origins from disk, even though they have likely already been imported.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:166
&gt;          if (!path.endsWith(&quot;.localstorage&quot;))

Why is this still here? Can this be made an assertion?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:172
&gt; +        if (origin)

Should we add a RELEASE_LOG_ERROR() for the case where it fails? It seems like we&apos;d want to know if we fail to import origins from the disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428567</commentid>
    <comment_count>5</comment_count>
      <attachid>341599</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 13:31:30 -0700</bug_when>
    <thetext>Created attachment 341599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428568</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-30 13:31:43 -0700</bug_when>
    <thetext>When you re-upload a patch please address ALL comments, either in the patch or via a comment explaining why you chose not to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428575</commentid>
    <comment_count>7</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 13:39:19 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; Comment on attachment 341597 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341597&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; &gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));
&gt; 
&gt; Why are we still doing this on the main thread?
&gt; 
Reload and fix.

&gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:110
&gt; &gt; +    importOrigins();
&gt; 
&gt; Why is this OK? This will reimport all origins from disk, even though they
&gt; have likely already been imported.
&gt; 
See &lt;rdar://problem/22781730&gt;.

&gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:166
&gt; &gt;          if (!path.endsWith(&quot;.localstorage&quot;))
&gt; 
&gt; Why is this still here? Can this be made an assertion?
&gt; 
Database file is accompanied by files &quot;-shm&quot; and &quot;-wal&quot;; e.g. &quot;xxx.localstorage&quot; exists with &quot;xxx.localstorage-shm&quot; and &quot;xxx.localstorage-wal&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428583</commentid>
    <comment_count>8</comment_count>
      <attachid>341599</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-30 13:46:50 -0700</bug_when>
    <thetext>Comment on attachment 341599
Patch

Did you measure the time it takes to load StorageTracker.db vs list the directory? What do those timings look like?

If StorageTracker.db is faster than listing the directory, then we need some other plan for solving the launch-time performance issue cased by LocalStorageDatabaseTracker::LocalStorageDatabaseTracker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428584</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-30 13:52:41 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #7)
&gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; Comment on attachment 341597 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=341597&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; &gt; &gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));
&gt; &gt; 
&gt; &gt; Why are we still doing this on the main thread?
&gt; &gt; 
&gt; Reload and fix.
&gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:110
&gt; &gt; &gt; +    importOrigins();
&gt; &gt; 
&gt; &gt; Why is this OK? This will reimport all origins from disk, even though they
&gt; &gt; have likely already been imported.
&gt; &gt; 
&gt; See &lt;rdar://problem/22781730&gt;.

I have looked at this radar and am still not unclear why we&apos;d want to force a reimport. Please clarify.
Either we could add a flag to indicate that we&apos;ve already done the import, or for some reason we do not trust our in-memory data. If we do not trust our in-memory data for this operation, then why are we trusting it for other operations?

&gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:166
&gt; &gt; &gt;          if (!path.endsWith(&quot;.localstorage&quot;))
&gt; &gt; 
&gt; &gt; Why is this still here? Can this be made an assertion?
&gt; &gt; 
&gt; Database file is accompanied by files &quot;-shm&quot; and &quot;-wal&quot;; e.g.
&gt; &quot;xxx.localstorage&quot; exists with &quot;xxx.localstorage-shm&quot; and
&gt; &quot;xxx.localstorage-wal&quot;.

We are asking for &quot;*.localstorage&quot;, not &quot;*.localstorage*&quot; so I would not expect such files to be returned. Are they?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428609</commentid>
    <comment_count>10</comment_count>
      <attachid>341599</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-30 14:48:30 -0700</bug_when>
    <thetext>Comment on attachment 341599
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Stop using StorageTracker.db in LocalStroageDatabaseTracker

typo: LocalStroageDatabaseTracker

&gt; Source/WebKit/ChangeLog:3
&gt; +        Stop using StorageTracker.db in LocalStroageDatabaseTracker

typo: LocalStroageDatabaseTracker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428677</commentid>
    <comment_count>11</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 16:51:51 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Sihui Liu from comment #7)
&gt; &gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; &gt; Comment on attachment 341597 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=341597&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; &gt; &gt; &gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));
&gt; &gt; &gt; 
&gt; &gt; &gt; Why are we still doing this on the main thread?
&gt; &gt; &gt; 
&gt; &gt; Reload and fix.
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:110
&gt; &gt; &gt; &gt; +    importOrigins();
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this OK? This will reimport all origins from disk, even though they
&gt; &gt; &gt; have likely already been imported.
&gt; &gt; &gt; 
&gt; &gt; See &lt;rdar://problem/22781730&gt;.
&gt; 
&gt; I have looked at this radar and am still not unclear why we&apos;d want to force
&gt; a reimport. Please clarify.
&gt; Either we could add a flag to indicate that we&apos;ve already done the import,
&gt; or for some reason we do not trust our in-memory data. If we do not trust
&gt; our in-memory data for this operation, then why are we trusting it for other
&gt; operations?
&gt; 
In this bug two UI processes are modifying the same directory, which actually is not an expected use case of WebKit.

In the new patch I removed m_origins which might resolve the confusion and the bug.

&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:166
&gt; &gt; &gt; &gt;          if (!path.endsWith(&quot;.localstorage&quot;))
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this still here? Can this be made an assertion?
&gt; &gt; &gt; 
&gt; &gt; Database file is accompanied by files &quot;-shm&quot; and &quot;-wal&quot;; e.g.
&gt; &gt; &quot;xxx.localstorage&quot; exists with &quot;xxx.localstorage-shm&quot; and
&gt; &gt; &quot;xxx.localstorage-wal&quot;.
&gt; 
&gt; We are asking for &quot;*.localstorage&quot;, not &quot;*.localstorage*&quot; so I would not
&gt; expect such files to be returned. Are they?
Yes! I&apos;ve tried, removed the redundant code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428679</commentid>
    <comment_count>12</comment_count>
      <attachid>341624</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-30 16:52:42 -0700</bug_when>
    <thetext>Created attachment 341624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428685</commentid>
    <comment_count>13</comment_count>
      <attachid>341624</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-30 17:03:58 -0700</bug_when>
    <thetext>Comment on attachment 341624
Patch

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

&gt; Source/WebKit/ChangeLog:8
&gt; +        Stop using StorageTracker.db and stop caching origins in LocalStorageDatabaseTracker for efficiency 

The specific efficiency we&apos;re trying to achieve is an improvement in launch time, especially on computers with spinning disks and large local storage collections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429324</commentid>
    <comment_count>14</comment_count>
      <attachid>341624</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-06-01 12:45:36 -0700</bug_when>
    <thetext>Comment on attachment 341624
Patch

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

r=me

&gt; Source/WebCore/platform/sql/SQLiteFileSystem.h:60
&gt; +    WEBCORE_EXPORT static String appendDatabaseFileNameToPath(const String&amp; path, const String&amp; fileName);

This is something that&apos;s nice to explain in your ChangeLog. What you&apos;ve done here is to call SQLiteFileSystem functions in cases where we used to call FileSystem functions because SQLiteFileSystem is logically more correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429325</commentid>
    <comment_count>15</comment_count>
      <attachid>341624</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-06-01 12:48:03 -0700</bug_when>
    <thetext>Comment on attachment 341624
Patch

So we&apos;re not worried about the performance impact of not having the m_origins cache now and going to disk every time we need the origins?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429326</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-06-01 12:49:04 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Sihui Liu from comment #7)
&gt; &gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; &gt; Comment on attachment 341597 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=341597&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:63
&gt; &gt; &gt; &gt; +    SQLiteFileSystem::deleteDatabaseFile(databasePath(&quot;StorageTracker.db&quot;));
&gt; &gt; &gt; 
&gt; &gt; &gt; Why are we still doing this on the main thread?
&gt; &gt; &gt; 
&gt; &gt; Reload and fix.
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:110
&gt; &gt; &gt; &gt; +    importOrigins();
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this OK? This will reimport all origins from disk, even though they
&gt; &gt; &gt; have likely already been imported.
&gt; &gt; &gt; 
&gt; &gt; See &lt;rdar://problem/22781730&gt;.

This radar is closed, did you point me to the right radar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429330</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-06-01 12:56:21 -0700</bug_when>
    <thetext>&gt; So we&apos;re not worried about the performance impact of not having the
&gt; m_origins cache now and going to disk every time we need the origins?

We did some debugging and it looks like we only make use of m_origins when you list website data in the Safari preferences window. Other storage technologies do not appear to cache their lists, so there&apos;s little incremental benefit to LocalStorage caching its list. Either way, you have a few seconds of async delay before the list populates.

If we do see more frequent use of this API, I think we&apos;ll want to add back the m_origins cache.

(Note that there is an open discussion about what should happen when multiple processes point at the same data store path. If we wanted to revive the m_origins cache, we would need to resolve that discussion and either (a) explain how the cache can be coherent across multiple UI processes or (b) decide that multiple UI processes with concurrent access to the same data store path is not supported.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429331</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-06-01 12:58:35 -0700</bug_when>
    <thetext>&gt; &gt; &gt; &gt; Why is this OK? This will reimport all origins from disk, even though they
&gt; &gt; &gt; &gt; have likely already been imported.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; See &lt;rdar://problem/22781730&gt;.
&gt; 
&gt; This radar is closed, did you point me to the right radar?

This Radar explains the original intention behind re-importing all origins, namely: working around a bug that can happen when multiple UI processes use the same data store path.

FWIW, the latest patch removes the extra import in favor of just not caching at all, since we weren&apos;t able to demonstrate a benefit to caching.

&lt;rdar://problem/40665000&gt; is the ongoing discussion about whether we should support concurrent access to a data store path or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429333</commentid>
    <comment_count>19</comment_count>
      <attachid>341624</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-01 13:13:14 -0700</bug_when>
    <thetext>Comment on attachment 341624
Patch

Clearing flags on attachment: 341624

Committed r232410: &lt;https://trac.webkit.org/changeset/232410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429334</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-01 13:13:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429342</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-01 13:24:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/40732090&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341588</attachid>
            <date>2018-05-30 11:49:39 -0700</date>
            <delta_ts>2018-05-30 13:24:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186104-20180530114938.patch</filename>
            <type>text/plain</type>
            <size>22482</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMwZWE3NGVjYjdkYzg5
YzIxYTNjMzIwYjUxMTUwNGMxZTJmNDNkZi4uNzQ5ZGE5MDc4YmFhZDE4ZGFmNzFmYjQ0MDAwYjY5
YzhlZDg2YmYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTMwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RvcmFn
ZVRyYWNrZXIuZGIgaW4gTG9jYWxTdHJvYWdlRGF0YWJhc2VUcmFja2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBiZWhhdmlvdXIgY2hhbmdlLgor
CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKwogMjAxOC0wNS0y
OSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBzZXRWYWx1ZSBv
biBjb250ZW50ZWRpdGFibGUgc2hvdWxkIHByZXNlcnZlIHdoaXRlc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
OTRhOTI2Y2ZiNjNkMzM1ZmRlNmI4NmRhYmY4NDhhMTNiNDY5NzIwZC4uOTE2YTQxYzU5ZWNkM2Ji
YzRmY2U0ZDdlYzQ5ZjczOGYxMGU1YzljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAx
OC0wNS0zMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9w
IHVzaW5nIFN0b3JhZ2VUcmFja2VyLmRiIGluIExvY2FsU3Ryb2FnZURhdGFiYXNlVHJhY2tlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MTA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIFN0
b3JhZ2VUcmFja2VyLmRiIGZyb20gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyIGZvciBlZmZp
Y2llbmN5IGFuZCBzaW1wbGljaXR5OiB3ZSBjb3VsZCAKKyAgICAgICAgY29tcHV0ZSBmaWxlIHBh
dGggYmFzZWQgb24gb3JpZ2luLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1haW50YWluIGEgZGF0YWJh
c2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGJ1Z3MgaW5jbHVkaW5nIG5vdCBk
ZWxldGluZyBjb3JyZWN0IGRhdGFiYXNlIGZpbGVzIGJlY2F1c2UgU3RvcmFnZVRyYWNrZXIuZGIK
KyAgICAgICAgc3RvcmVzIGFic29sdXRlIHBhdGggYW5kIG5vdCBlbGltaW5hdGluZyBjb3JyZWN0
IG9yaWdpbnMgYmVjYXVzZSBvZiB0eXBvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXS0tleVZhbHVlU3RvcmFnZU1h
bmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGlkT3Bl
bkRhdGFiYXNlV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlc01vZGlmaWVk
U2luY2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6Om9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6OmRhdGFiYXNlUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6aW1wb3J0T3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OmZp
bGVDcmVhdGlvblRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTW9kaWZpY2F0
aW9uVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0
b3JhZ2VEYXRhYmFzZUZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpyZW1v
dmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2lu
SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOC0wNS0yOSAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeGVzIGFmdGVyIHIyMjg5MDcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAppbmRl
eCA2YTQ4MjAwYWRhNWRhYjZiNzc2MWYzM2Q5Y2RmNWVjMjg1ZDQxNDdhLi44MjIwZjMxY2Q2Yzc5
YzFmZTg2ZGQxMTFlODU0ZTI3YTk4YzE3NTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTU3LDEzICs1NywxMyBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4KICAgICAvLyBmaWxlTmFtZSAtIFRo
ZSBmaWxlIG5hbWUuCi0gICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKICAgICAvLyBNYWtl
cyBzdXJlIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBhbGwgbWlzc2lu
ZyBkaXJlY3RvcmllcwogICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLgogICAgIC8vCiAgICAgLy8g
cGF0aCAtIFRoZSBkaXJlY3RvcnkuCi0gICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJl
Y3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgYm9vbCBlbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
OwogCiAgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9k
IG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4KICAgICAvLyBJZiAnY2hlY2tQ
YXRoT25seScgaXMgdHJ1ZSwgdGhlbiB0aGlzIG1ldGhvZCBtYWtlcyBzdXJlIGFsbCBkaXJlY3Rv
cmllcyBvbiB0aGUKQEAgLTk3LDggKzk3LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOwotICAgIHN0YXRpYyBkb3VibGUgZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7Ci0gICAgc3RhdGljIGRvdWJsZSBkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGRvdWJs
ZSBkYXRhYmFzZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgZG91YmxlIGRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKIAogcHJpdmF0ZToKICAgICAvLyBkbyBub3QgaW5zdGFudGlhdGUg
dGhpcyBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggNGUzOWRhZDgyYTUyMjViOWQ5ZGQy
NGVmODFmYThhZjc1M2EzNWIxNC4uYzUwMThhOTU4YjQxZTgwOTlhZWU4NjVmODcxMWU4ZjgzMWZh
OTEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0xMDIsOSArMTAyLDkgQEAgdm9pZCBXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKFdLS2V5VmFsdWVT
dG9yYWdlTWFuYWdlclIKIAogICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlckdldE9yaWdpbktleSgpKS0+c3RyaW5nKCksIG9yaWdpbik7CiAg
ICAgICAgICAgICBpZiAob3JpZ2luRGV0YWlscy5jcmVhdGlvblRpbWUpCi0gICAgICAgICAgICAg
ICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldENyZWF0
aW9uVGltZUtleSgpKS0+c3RyaW5nKCksIEFQSTo6RG91YmxlOjpjcmVhdGUob3JpZ2luRGV0YWls
cy5jcmVhdGlvblRpbWUudmFsdWVfb3IoMCkpKTsKKyAgICAgICAgICAgICAgICBkZXRhaWxzTWFw
LnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1lS2V5KCkp
LT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0aW9uVGlt
ZSkpOwogICAgICAgICAgICAgaWYgKG9yaWdpbkRldGFpbHMubW9kaWZpY2F0aW9uVGltZSkKLSAg
ICAgICAgICAgICAgICBkZXRhaWxzTWFwLnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5h
Z2VyR2V0TW9kaWZpY2F0aW9uVGltZUtleSgpKS0+c3RyaW5nKCksIEFQSTo6RG91YmxlOjpjcmVh
dGUob3JpZ2luRGV0YWlscy5tb2RpZmljYXRpb25UaW1lLnZhbHVlX29yKDApKSk7CisgICAgICAg
ICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdl
dE1vZGlmaWNhdGlvblRpbWVLZXkoKSktPnN0cmluZygpLCBBUEk6OkRvdWJsZTo6Y3JlYXRlKG9y
aWdpbkRldGFpbHMubW9kaWZpY2F0aW9uVGltZSkpOwogCiAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURk1vdmUoZGV0YWlsc01hcCkp
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IGNh
NTZkMDU3ZGVjNDA2MjVjMDcyNThlNjgzMGUzMGJiNWY2MGJjNDIuLmU5ZjExZThmMmNmZmM3ODgz
MzBkYTc4MTU5NDJiZjI3MTMxNGVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
ci5jcHAKQEAgLTU2LDggKzU2LDExIEBAIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsCiAgICAgVVRG
OEVuY29kaW5nKCk7CiAKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIG11dGFibGUgewotICAgICAgICBwcm90ZWN0ZWRUaGlzLT5pbXBvcnRP
cmlnaW5JZGVudGlmaWVycygpOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5pbXBvcnRPcmlnaW5z
KCk7CiAgICAgfSk7CisgICAgCisgICAgLy8gRGVsZXRlIGxlZ2FjeSBzdG9yYWdlVHJhY2tlciBk
YXRhYmFzZSBmaWxlLgorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShk
YXRhYmFzZVBhdGgoIlN0b3JhZ2VUcmFja2VyLmRiIikpOwogfQogCiBMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXI6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoKQpAQCAtNzEsOTkgKzc0
LDQ5IEBAIFN0cmluZyBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChj
b25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyCiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpkaWRPcGVuRGF0YWJhc2VXaXRoT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgYWRkRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRp
ZmllcihzZWN1cml0eU9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSwgZGF0YWJhc2VQYXRoKHNl
Y3VyaXR5T3JpZ2luKSk7CisgICAgbV9vcmlnaW5zLmFkZChzZWN1cml0eU9yaWdpbik7CisKKyAg
ICAvLyBGSVhNRTogVGVsbCBjbGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMgYWRkZWQuCiB9CiAK
IHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZVdpdGhPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICByZW1v
dmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpKTsKKyAgICBtX29yaWdpbnMucmVtb3ZlKHNlY3VyaXR5T3JpZ2luKTsKKworICAg
IGF1dG8gcGF0aCA9IGRhdGFiYXNlUGF0aChzZWN1cml0eU9yaWdpbik7CisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RGF0YWJhc2VGaWxlKHBhdGgpOworCisgICAgLy8gRklYTUU6IFRlbGwgY2xpZW50cyB0aGF0IHRo
ZSBvcmlnaW4gd2FzIHJlbW92ZWQuCiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQogewogICAgIG1fb3JpZ2lucy5jbGVhcigpOwotCi0g
ICAgb3BlblRyYWNrZXJEYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIp
OwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIAorICAgIFZlY3RvcjxTdHJpbmc+
IHBhdGhzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9y
eSwgIioubG9jYWxzdG9yYWdlIik7CisgICAgZm9yIChhdXRvIHBhdGggOiBwYXRocykgeworICAg
ICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCk7CiAKICAgICAg
ICAgLy8gRklYTUU6IENhbGwgb3V0IHRvIHRoZSBjbGllbnQuCiAgICAgfQogCi0gICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBp
biBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKLQotICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKQotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0KLSAgICBpZiAoIUZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKSkgewotICAgICAgICAvLyBJ
biB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVsZXRlIHRoZSBkYXRhYmFz
ZSBmaWxlIChlLmcgc29tZSBvdGhlciBwcm9ncmFtCi0gICAgICAgIC8vIGxpa2UgYSB2aXJ1cyBz
Y2FubmVyIGlzIGFjY2Vzc2luZyBpdCksIG1ha2Ugc3VyZSB0byByZW1vdmUgYWxsIGVudHJpZXMu
Ci0gICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotICAgICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZS
T00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVs
ZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5z
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBGaWxlU3lz
dGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSk7Ci19Ci0K
LXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHRpbWVfdD4gZmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJp
bmcmIGZpbGVQYXRoKQotewotICAgIHRpbWVfdCB0aW1lOwotICAgIHJldHVybiBGaWxlU3lzdGVt
OjpnZXRGaWxlQ3JlYXRpb25UaW1lKGZpbGVQYXRoLCB0aW1lKSA/IHRpbWUgOiBzdGQ6Om9wdGlv
bmFsPHRpbWVfdD4oc3RkOjpudWxsb3B0KTsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8dGlt
ZV90PiBmaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQotewotICAg
IHRpbWVfdCB0aW1lOwotICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoZmlsZVBhdGgsIHRpbWUpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIHRpbWU7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURp
cmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSk7CiB9CiAKIFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VzTW9kaWZpZWRT
aW5jZShXYWxsVGltZSB0aW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gb3JpZ2lu
SWRlbnRpZmllcnNNb2RpZmllZDsKLSAgICAKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2lu
IDogbV9vcmlnaW5zKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlUGF0aCA9IHBhdGhGb3JEYXRhYmFz
ZVdpdGhPcmlnaW5JZGVudGlmaWVyKG9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIG1v
ZGlmaWNhdGlvblRpbWUgPSBGaWxlU3lzdGVtOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShmaWxl
UGF0aCk7Ci0gICAgICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSB8fCBtb2RpZmljYXRpb25UaW1l
LnZhbHVlKCkgPj0gdGltZSkKLSAgICAgICAgICAgIG9yaWdpbklkZW50aWZpZXJzTW9kaWZpZWQu
YXBwZW5kKG9yaWdpbik7Ci0gICAgfQorICAgIGltcG9ydE9yaWdpbnMoKTsKICAgICAKICAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZDsKLSAgICBk
YXRhYmFzZU9yaWdpbnNNb2RpZmllZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbklkZW50
aWZpZXJzTW9kaWZpZWQuc2l6ZSgpKTsKICAgICAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdp
bklkZW50aWZpZXIgOiBvcmlnaW5JZGVudGlmaWVyc01vZGlmaWVkKSB7Ci0gICAgICAgIGlmIChh
dXRvIG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihv
cmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGRhdGFiYXNlT3JpZ2luc01vZGlmaWVkLnVu
Y2hlY2tlZEFwcGVuZCgqb3JpZ2luKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvIG9yaWdpbiA6IG1fb3JpZ2lucykgeworICAg
ICAgICBhdXRvIHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKKyAgICAgICAgYXV0byBtb2Rp
ZmljYXRpb25UaW1lID0gRmlsZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7
CisgICAgICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSB8fCBtb2RpZmljYXRpb25UaW1lLnZhbHVl
KCkgPj0gdGltZSkKKyAgICAgICAgICAgIGRhdGFiYXNlT3JpZ2luc01vZGlmaWVkLmFwcGVuZChv
cmlnaW4pOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZGF0YWJhc2VPcmlnaW5zTW9kaWZpZWQ7
CkBAIC0xNzQsMTEgKzEyNyw4IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpIGNvbnN0CiAgICAgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBvcmlnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9vcmlnaW5zLnNpemUoKSk7CiAKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciA6IG1fb3JpZ2lucykgewotICAgICAgICBpZiAoYXV0byBvcmlnaW4gPSBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikpCi0gICAg
ICAgICAgICBvcmlnaW5zLnVuY2hlY2tlZEFwcGVuZCgqb3JpZ2luKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvIG9yaWdpbiA6
IG1fb3JpZ2lucykgeworICAgICAgICBvcmlnaW5zLmFwcGVuZChvcmlnaW4pOwogICAgIH0KIAog
ICAgIHJldHVybiBvcmlnaW5zOwpAQCAtMTg5LDEzICsxMzksMTMgQEAgVmVjdG9yPExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjoKICAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gcmVzdWx0OwogICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fb3JpZ2lucy5zaXplKCkpOwogCi0gICAgZm9yIChjb25z
dCBTdHJpbmcmIG9yaWdpbiA6IG1fb3JpZ2lucykgewotICAgICAgICBTdHJpbmcgZmlsZVBhdGgg
PSBwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihvcmlnaW4pOworICAgIGZvciAo
YXV0byBvcmlnaW4gOiBtX29yaWdpbnMpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBkYXRhYmFz
ZVBhdGgob3JpZ2luKTsKIAogICAgICAgICBPcmlnaW5EZXRhaWxzIGRldGFpbHM7Ci0gICAgICAg
IGRldGFpbHMub3JpZ2luSWRlbnRpZmllciA9IG9yaWdpbi5pc29sYXRlZENvcHkoKTsKLSAgICAg
ICAgZGV0YWlscy5jcmVhdGlvblRpbWUgPSBmaWxlQ3JlYXRpb25UaW1lKGZpbGVQYXRoKTsKLSAg
ICAgICAgZGV0YWlscy5tb2RpZmljYXRpb25UaW1lID0gZmlsZU1vZGlmaWNhdGlvblRpbWUoZmls
ZVBhdGgpOworICAgICAgICBkZXRhaWxzLm9yaWdpbklkZW50aWZpZXIgPSBvcmlnaW4uZGF0YWJh
c2VJZGVudGlmaWVyKCk7CisgICAgICAgIGRldGFpbHMuY3JlYXRpb25UaW1lID0gU1FMaXRlRmls
ZVN5c3RlbTo6ZGF0YWJhc2VDcmVhdGlvblRpbWUocGF0aCk7CisgICAgICAgIGRldGFpbHMubW9k
aWZpY2F0aW9uVGltZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlTW9kaWZpY2F0aW9uVGlt
ZShwYXRoKTsKICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChkZXRhaWxzKTsKICAgICB9
CiAKQEAgLTIwNCw3ICsxNTQsNyBAQCBWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpPcmlnaW5EZXRhaWxzPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OgogCiBTdHJpbmcg
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkgY29uc3QKIHsKLSAgICBpZiAoIUZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3Rvcmll
cyhtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSkpIHsKKyAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06
OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkg
ewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFi
YXNlIHBhdGggJXMiLCBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIxMywxNzIgKzE2MywyMyBAQCBTdHJp
bmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSkgY29uc3QKICAgICBwbGF0Zm9ybU1heWJlRXhjbHVkZUZyb21CYWNrdXAoKTsK
ICNlbmRpZgogCi0gICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSwgZmlsZW5hbWUpOwotfQotCi1TdHJpbmcgTG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZGF0YWJhc2VQYXRoKCJTdG9yYWdlVHJhY2tlci5kYiIpOwotfQotCi12b2lkIExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShEYXRhYmFzZU9w
ZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UuaXNP
cGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSB0cmFj
a2VyRGF0YWJhc2VQYXRoKCk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZGF0
YWJhc2VQYXRoKSAmJiBvcGVuaW5nU3RyYXRlZ3kgPT0gU2tpcElmTm9uRXhpc3RlbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0
YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFNpbmNlIGEgV29ya1F1ZXVlIGlzbid0IGJvdW5kIHRvIGEgc3BlY2lmaWMgdGhyZWFkLCB3
ZSBoYXZlIHRvIGRpc2FibGUgdGhyZWFkaW5nIGNoZWNrcwotICAgIC8vIGV2ZW4gdGhvdWdoIHdl
IG5ldmVyIGFjY2VzcyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcyBzaW11bHRh
bmVvdXNseS4KLSAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKLQotICAg
IGlmIChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdp
bnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIp
KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgT3JpZ2lucyB0YWJsZS4iKTsK
LX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50
aWZpZXJzKCkKLXsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsK
LQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7Ci0g
ICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcmVzdWx0OwotCi0gICAgICAgIHdo
aWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ICAgIG1fb3JpZ2lucy5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotCi0gICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1cGRhdGVUcmFja2VyRGF0YWJh
c2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpOworICAgIHJldHVybiBTUUxpdGVGaWxl
U3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fbG9jYWxTdG9yYWdlRGlyZWN0
b3J5LCBmaWxlbmFtZSk7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjp1
cGRhdGVUcmFja2VyRGF0YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpCit2b2lk
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6aW1wb3J0T3JpZ2lucygpCiB7CisgICAgbV9v
cmlnaW5zLmNsZWFyKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHMgPSBGaWxlU3lzdGVtOjps
aXN0RGlyZWN0b3J5KG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5LCAiKi5sb2NhbHN0b3JhZ2UiKTsK
LQotICAgIEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5zKG1fb3JpZ2lucyk7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IG9yaWdpbnNGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlczsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoID0gcGF0aHNbaV07Ci0KKyAgICBmb3IgKGF1dG8gcGF0aCA6IHBhdGhzKSB7CiAg
ICAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgiLmxvY2Fsc3RvcmFnZSIpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gRmlsZVN5c3RlbTo6cGF0aEdl
dEZpbGVOYW1lKHBhdGgpOwotCi0gICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmls
ZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmxlbmd0aCgpIC0gc3RybGVuKCIubG9jYWxzdG9y
YWdlIikpOwotCi0gICAgICAgIGlmICghbV9vcmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZp
ZXIpKQotICAgICAgICAgICAgYWRkRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihvcmlnaW5J
ZGVudGlmaWVyLCBwYXRoKTsKLQotICAgICAgICBvcmlnaW5zRnJvbUxvY2FsU3RvcmFnZURhdGFi
YXNlRmlsZXMuYWRkKG9yaWdpbklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byBp
dCA9IG9yaWdpbnMuYmVnaW4oKSwgZW5kID0gb3JpZ2lucy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciA9ICppdDsKLSAgICAg
ICAgaWYgKG9yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICByZW1vdmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKG9y
aWdpbklkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6OmFkZERhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKLXsKLSAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKENyZWF0ZUlmTm9uRXhpc3RlbnQpOwotICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7Ci0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdp
bklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDIsIGRhdGFiYXNlUGF0aCk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgp
KTsKLQotICAgIG1fb3JpZ2lucy5hZGQob3JpZ2luSWRlbnRpZmllcik7Ci0KLSAgICAvLyBGSVhN
RTogVGVsbCBjbGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMgYWRkZWQuCi19Ci0KLXZvaWQgTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBvcGVuVHJhY2tlckRh
dGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBwYXRoID0gcGF0aEZvckRhdGFiYXNlV2l0
aE9yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYgKHBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7Ci0g
ICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAg
aWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCk7Ci0KLSAgICBtX29yaWdp
bnMucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmIChtX29yaWdpbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBubyBvcmlnaW5zIGxlZnQ7IGRlbGV0ZSB0aGUgdHJh
Y2tlciBkYXRhYmFzZS4KLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICBTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsK
LSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkobV9sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUZWxsIGNsaWVudHMgdGhhdCB0aGUg
b3JpZ2luIHdhcyByZW1vdmVkLgotfQotCi1TdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjpwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0g
ICAgaWYgKHBhdGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBvZiBwYXRoIGZvciBvcmlnaW4g
JyVzJyIsIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBGaWxlU3lzdGVtOjpw
YXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAgICAgIGF1dG8gb3JpZ2luSWRlbnRpZmllciA9IGZp
bGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sZW5ndGgoKSAtIHN0cmxlbigiLmxvY2Fsc3Rv
cmFnZSIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21E
YXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIGlmIChvcmlnaW4p
CisgICAgICAgICAgICBtX29yaWdpbnMuYWRkKG9yaWdpbi52YWx1ZSgpKTsKICAgICB9Ci0KLSAg
ICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotCi0gICAgaW50
IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIHBhdGhTdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaAppbmRleCA2M2RlOTZmNjljMmViNDA1NGUxMmE2MTQwOWQz
NTcyYmE4YWFkNTY1Li4yNDg4ZGNiOWViMTFhZjhkMDExMGJjMTU0N2Q3MzlhZjRhMGE3MmMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM1LDExICszNSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBT
ZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7Ci19Ci0KIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdHJ1Y3QgTG9jYWxTdG9yYWdlRGV0YWlsczsKQEAgLTYyLDggKzU3LDgg
QEAgcHVibGljOgogCiAgICAgc3RydWN0IE9yaWdpbkRldGFpbHMgewogICAgICAgICBTdHJpbmcg
b3JpZ2luSWRlbnRpZmllcjsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx0aW1lX3Q+IGNyZWF0aW9u
VGltZTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx0aW1lX3Q+IG1vZGlmaWNhdGlvblRpbWU7Cisg
ICAgICAgIGRvdWJsZSBjcmVhdGlvblRpbWU7CisgICAgICAgIGRvdWJsZSBtb2RpZmljYXRpb25U
aW1lOwogICAgIH07CiAgICAgVmVjdG9yPE9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHMoKTsK
IApAQCAtNzEsMjYgKzY2LDE5IEBAIHByaXZhdGU6CiAgICAgTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyKFJlZjxXb3JrUXVldWU+JiYsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5KTsKIAogICAgIFN0cmluZyBkYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkg
Y29uc3Q7Ci0gICAgU3RyaW5nIHRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdDsKIAogICAgIGVu
dW0gRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgewogICAgICAgICBDcmVhdGVJZk5vbkV4aXN0ZW50
LAogICAgICAgICBTa2lwSWZOb25FeGlzdGVudAogICAgIH07Ci0gICAgdm9pZCBvcGVuVHJhY2tl
ckRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5KTsKLQotICAgIHZvaWQgaW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKTsKLSAgICB2b2lkIHVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZUZpbGVzKCk7CiAKLSAgICB2b2lkIGFkZERhdGFiYXNlV2l0aE9yaWdp
bklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlUGF0aCk7Ci0gICAgdm9pZCByZW1vdmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIHBhdGhGb3JE
YXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cik7CisgICAgdm9pZCBpbXBvcnRPcmlnaW5zKCk7CisgICAgdm9pZCB1cGRhdGVPcmlnaW5zRnJv
bUxvY2FsU3RvcmFnZURhdGFiYXNlRmlsZXMoKTsKIAogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1f
cXVldWU7CiAgICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogCi0gICAgV2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9vcmln
aW5zOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBtX29yaWdpbnM7
CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBwbGF0Zm9ybU1heWJlRXhjbHVkZUZyb21C
YWNrdXAoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaAppbmRleCA4NDIzYjk5MzQ1ZjhkOTExNzA3ZTBmOGI1YzVmZTZh
ZDA0MGUyMzM3Li5iNmJhMGFhNTY0OGJiNGNmYjQ0YzZhZjIzYjIzYmJjZjU0MGM3YjAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbkRhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luSGFzaC5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341597</attachid>
            <date>2018-05-30 13:24:02 -0700</date>
            <delta_ts>2018-05-30 13:31:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186104-20180530132401.patch</filename>
            <type>text/plain</type>
            <size>22820</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMwZWE3NGVjYjdkYzg5
YzIxYTNjMzIwYjUxMTUwNGMxZTJmNDNkZi4uNzQ5ZGE5MDc4YmFhZDE4ZGFmNzFmYjQ0MDAwYjY5
YzhlZDg2YmYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTMwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RvcmFn
ZVRyYWNrZXIuZGIgaW4gTG9jYWxTdHJvYWdlRGF0YWJhc2VUcmFja2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBiZWhhdmlvdXIgY2hhbmdlLgor
CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKwogMjAxOC0wNS0y
OSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBzZXRWYWx1ZSBv
biBjb250ZW50ZWRpdGFibGUgc2hvdWxkIHByZXNlcnZlIHdoaXRlc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
OTRhOTI2Y2ZiNjNkMzM1ZmRlNmI4NmRhYmY4NDhhMTNiNDY5NzIwZC4uOTE2YTQxYzU5ZWNkM2Ji
YzRmY2U0ZDdlYzQ5ZjczOGYxMGU1YzljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAx
OC0wNS0zMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9w
IHVzaW5nIFN0b3JhZ2VUcmFja2VyLmRiIGluIExvY2FsU3Ryb2FnZURhdGFiYXNlVHJhY2tlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MTA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIFN0
b3JhZ2VUcmFja2VyLmRiIGZyb20gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyIGZvciBlZmZp
Y2llbmN5IGFuZCBzaW1wbGljaXR5OiB3ZSBjb3VsZCAKKyAgICAgICAgY29tcHV0ZSBmaWxlIHBh
dGggYmFzZWQgb24gb3JpZ2luLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1haW50YWluIGEgZGF0YWJh
c2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGJ1Z3MgaW5jbHVkaW5nIG5vdCBk
ZWxldGluZyBjb3JyZWN0IGRhdGFiYXNlIGZpbGVzIGJlY2F1c2UgU3RvcmFnZVRyYWNrZXIuZGIK
KyAgICAgICAgc3RvcmVzIGFic29sdXRlIHBhdGggYW5kIG5vdCBlbGltaW5hdGluZyBjb3JyZWN0
IG9yaWdpbnMgYmVjYXVzZSBvZiB0eXBvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXS0tleVZhbHVlU3RvcmFnZU1h
bmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGlkT3Bl
bkRhdGFiYXNlV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlc01vZGlmaWVk
U2luY2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6Om9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6OmRhdGFiYXNlUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6aW1wb3J0T3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OmZp
bGVDcmVhdGlvblRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTW9kaWZpY2F0
aW9uVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0
b3JhZ2VEYXRhYmFzZUZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpyZW1v
dmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2lu
SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOC0wNS0yOSAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeGVzIGFmdGVyIHIyMjg5MDcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAppbmRl
eCA2YTQ4MjAwYWRhNWRhYjZiNzc2MWYzM2Q5Y2RmNWVjMjg1ZDQxNDdhLi44MjIwZjMxY2Q2Yzc5
YzFmZTg2ZGQxMTFlODU0ZTI3YTk4YzE3NTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTU3LDEzICs1NywxMyBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4KICAgICAvLyBmaWxlTmFtZSAtIFRo
ZSBmaWxlIG5hbWUuCi0gICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKICAgICAvLyBNYWtl
cyBzdXJlIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBhbGwgbWlzc2lu
ZyBkaXJlY3RvcmllcwogICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLgogICAgIC8vCiAgICAgLy8g
cGF0aCAtIFRoZSBkaXJlY3RvcnkuCi0gICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJl
Y3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgYm9vbCBlbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
OwogCiAgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9k
IG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4KICAgICAvLyBJZiAnY2hlY2tQ
YXRoT25seScgaXMgdHJ1ZSwgdGhlbiB0aGlzIG1ldGhvZCBtYWtlcyBzdXJlIGFsbCBkaXJlY3Rv
cmllcyBvbiB0aGUKQEAgLTk3LDggKzk3LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOwotICAgIHN0YXRpYyBkb3VibGUgZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7Ci0gICAgc3RhdGljIGRvdWJsZSBkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGRvdWJs
ZSBkYXRhYmFzZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgZG91YmxlIGRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKIAogcHJpdmF0ZToKICAgICAvLyBkbyBub3QgaW5zdGFudGlhdGUg
dGhpcyBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggNGUzOWRhZDgyYTUyMjViOWQ5ZGQy
NGVmODFmYThhZjc1M2EzNWIxNC4uMzkxZjg1ZTM3NWVmMjY1M2EwZTI0MTg5OWViMGZkMzU0MDc1
NDE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0xMDIsOSArMTAyLDkgQEAgdm9pZCBXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKFdLS2V5VmFsdWVT
dG9yYWdlTWFuYWdlclIKIAogICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlckdldE9yaWdpbktleSgpKS0+c3RyaW5nKCksIG9yaWdpbik7CiAg
ICAgICAgICAgICBpZiAob3JpZ2luRGV0YWlscy5jcmVhdGlvblRpbWUpCi0gICAgICAgICAgICAg
ICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldENyZWF0
aW9uVGltZUtleSgpKS0+c3RyaW5nKCksIEFQSTo6RG91YmxlOjpjcmVhdGUob3JpZ2luRGV0YWls
cy5jcmVhdGlvblRpbWUudmFsdWVfb3IoMCkpKTsKKyAgICAgICAgICAgICAgICBkZXRhaWxzTWFw
LnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1lS2V5KCkp
LT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0aW9uVGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKICAgICAgICAgICAgIGlmIChvcmlnaW5E
ZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUpCi0gICAgICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQo
dG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldE1vZGlmaWNhdGlvblRpbWVLZXkoKSkt
PnN0cmluZygpLCBBUEk6OkRvdWJsZTo6Y3JlYXRlKG9yaWdpbkRldGFpbHMubW9kaWZpY2F0aW9u
VGltZS52YWx1ZV9vcigwKSkpOworICAgICAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0KHRvSW1w
bChXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRNb2RpZmljYXRpb25UaW1lS2V5KCkpLT5zdHJp
bmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSk7CiAKICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShkZXRhaWxzTWFwKSkp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggY2E1
NmQwNTdkZWM0MDYyNWMwNzI1OGU2ODMwZTMwYmI1ZjYwYmM0Mi4uYzYxOWY5ZDdjZGU4NTUzNTRk
MzZmYjllNGRhZWMxNzJkMGUyZWJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmNwcApAQCAtNTYsOCArNTYsMTEgQEAgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwKICAgICBVVEY4
RW5jb2RpbmcoKTsKIAogICAgIG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPmltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCk7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPmltcG9ydE9yaWdpbnMo
KTsKICAgICB9KTsKKyAgICAKKyAgICAvLyBEZWxldGUgbGVnYWN5IHN0b3JhZ2VUcmFja2VyIGRh
dGFiYXNlIGZpbGUuCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGRh
dGFiYXNlUGF0aCgiU3RvcmFnZVRyYWNrZXIuZGIiKSk7CiB9CiAKIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6fkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpCkBAIC03MSw5OSArNzQs
NDggQEAgU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXIKIAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6OmRpZE9wZW5EYXRhYmFzZVdpdGhPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBhZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlm
aWVyKHNlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLCBkYXRhYmFzZVBhdGgoc2Vj
dXJpdHlPcmlnaW4pKTsKKyAgICBtX29yaWdpbnMuYWRkKHNlY3VyaXR5T3JpZ2luKTsKKworICAg
IC8vIEZJWE1FOiBUZWxsIGNsaWVudHMgdGhhdCB0aGUgb3JpZ2luIHdhcyBhZGRlZC4KIH0KIAog
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdp
bihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQogewotICAgIHJlbW92
ZURhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIG1fb3JpZ2lucy5yZW1vdmUoc2VjdXJpdHlPcmlnaW4pOworCisgICAg
YXV0byBwYXRoID0gZGF0YWJhc2VQYXRoKHNlY3VyaXR5T3JpZ2luKTsKKyAgICBpZiAoIXBhdGgu
aXNFbXB0eSgpKQorICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUo
cGF0aCk7CisKKyAgICAvLyBGSVhNRTogVGVsbCBjbGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMg
cmVtb3ZlZC4KIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZUFs
bERhdGFiYXNlcygpCiB7CiAgICAgbV9vcmlnaW5zLmNsZWFyKCk7Ci0KLSAgICBvcGVuVHJhY2tl
ckRhdGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgCisgICAgYXV0byBwYXRocyA9IEZpbGVTeXN0ZW06Omxp
c3REaXJlY3RvcnkobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnksICIqLmxvY2Fsc3RvcmFnZSIpOwor
ICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpIHsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6
ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBDYWxsIG91dCB0
byB0aGUgY2xpZW50LgogICAgIH0KIAotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUg
ZGF0YWJhc2UuIik7Ci0KLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotCi0gICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSkpIHsKLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgaXQgaXMg
bm90IHBvc3NpYmxlIHRvIGRlbGV0ZSB0aGUgZGF0YWJhc2UgZmlsZSAoZS5nIHNvbWUgb3RoZXIg
cHJvZ3JhbQotICAgICAgICAvLyBsaWtlIGEgdmlydXMgc2Nhbm5lciBpcyBhY2Nlc3NpbmcgaXQp
LCBtYWtlIHN1cmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzLgotICAgICAgICBvcGVuVHJhY2tlckRh
dGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxl
dGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAg
aWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0
ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rv
cnkobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDx0
aW1lX3Q+IGZpbGVDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICB0
aW1lX3QgdGltZTsKLSAgICByZXR1cm4gRmlsZVN5c3RlbTo6Z2V0RmlsZUNyZWF0aW9uVGltZShm
aWxlUGF0aCwgdGltZSkgPyB0aW1lIDogc3RkOjpvcHRpb25hbDx0aW1lX3Q+KHN0ZDo6bnVsbG9w
dCk7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHRpbWVfdD4gZmlsZU1vZGlmaWNhdGlvblRp
bWUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICB0aW1lX3QgdGltZTsKLSAgICBpZiAo
IUZpbGVTeXN0ZW06OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVQYXRoLCB0aW1lKSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB0aW1lOworICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpOwogfQogCiBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSkKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpbXBvcnRPcmlnaW5JZGVudGlm
aWVycygpOwotICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpbklkZW50aWZpZXJzTW9kaWZpZWQ7Ci0g
ICAgCi0gICAgZm9yIChjb25zdCBTdHJpbmcmIG9yaWdpbiA6IG1fb3JpZ2lucykgewotICAgICAg
ICBTdHJpbmcgZmlsZVBhdGggPSBwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihv
cmlnaW4pOwotICAgICAgICAKLSAgICAgICAgYXV0byBtb2RpZmljYXRpb25UaW1lID0gRmlsZVN5
c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZmlsZVBhdGgpOwotICAgICAgICBpZiAoIW1v
ZGlmaWNhdGlvblRpbWUgfHwgbW9kaWZpY2F0aW9uVGltZS52YWx1ZSgpID49IHRpbWUpCi0gICAg
ICAgICAgICBvcmlnaW5JZGVudGlmaWVyc01vZGlmaWVkLmFwcGVuZChvcmlnaW4pOwotICAgIH0K
KyAgICBpbXBvcnRPcmlnaW5zKCk7CiAgICAgCiAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gZGF0YWJhc2VPcmlnaW5zTW9kaWZpZWQ7Ci0gICAgZGF0YWJhc2VPcmlnaW5zTW9kaWZpZWQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5JZGVudGlmaWVyc01vZGlmaWVkLnNpemUoKSk7
CiAgICAgCi0gICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW5JZGVudGlmaWVyIDogb3JpZ2luSWRl
bnRpZmllcnNNb2RpZmllZCkgewotICAgICAgICBpZiAoYXV0byBvcmlnaW4gPSBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikpCi0gICAg
ICAgICAgICBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZC51bmNoZWNrZWRBcHBlbmQoKm9yaWdpbik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGZv
ciAoYXV0byBvcmlnaW4gOiBtX29yaWdpbnMpIHsKKyAgICAgICAgYXV0byBwYXRoID0gZGF0YWJh
c2VQYXRoKG9yaWdpbik7CisgICAgICAgIGF1dG8gbW9kaWZpY2F0aW9uVGltZSA9IFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyhTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZU1vZGlmaWNhdGlvblRp
bWUocGF0aCkpOworICAgICAgICBpZiAobW9kaWZpY2F0aW9uVGltZSA+PSB0aW1lKQorICAgICAg
ICAgICAgZGF0YWJhc2VPcmlnaW5zTW9kaWZpZWQuYXBwZW5kKG9yaWdpbik7CiAgICAgfQogICAg
IAogICAgIHJldHVybiBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZDsKQEAgLTE3MSwxNyArMTIzLDcg
QEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpkYXRhYmFzZXNNb2RpZmllZFNpbmNlKFcKIAogVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkgY29uc3QKIHsKLSAgICBWZWN0
b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotICAgIG9yaWdpbnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX29yaWdpbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyIDogbV9vcmlnaW5zKSB7Ci0gICAgICAgIGlmIChhdXRvIG9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmlnaW5JZGVudGlm
aWVyKSkKLSAgICAgICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKCpvcmlnaW4pOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gb3JpZ2luczsKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fb3JpZ2lucyk7CiB9
CiAKIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3JpZ2luRGV0YWlscygpCkBAIC0xODksMTMgKzEz
MSwxMyBAQCBWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxz
PiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OgogICAgIFZlY3RvcjxPcmlnaW5EZXRhaWxz
PiByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9vcmlnaW5zLnNp
emUoKSk7CiAKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2luIDogbV9vcmlnaW5zKSB7Ci0g
ICAgICAgIFN0cmluZyBmaWxlUGF0aCA9IHBhdGhGb3JEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlm
aWVyKG9yaWdpbik7CisgICAgZm9yIChhdXRvIG9yaWdpbiA6IG1fb3JpZ2lucykgeworICAgICAg
ICBTdHJpbmcgcGF0aCA9IGRhdGFiYXNlUGF0aChvcmlnaW4pOwogCiAgICAgICAgIE9yaWdpbkRl
dGFpbHMgZGV0YWlsczsKLSAgICAgICAgZGV0YWlscy5vcmlnaW5JZGVudGlmaWVyID0gb3JpZ2lu
Lmlzb2xhdGVkQ29weSgpOwotICAgICAgICBkZXRhaWxzLmNyZWF0aW9uVGltZSA9IGZpbGVDcmVh
dGlvblRpbWUoZmlsZVBhdGgpOwotICAgICAgICBkZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUgPSBm
aWxlTW9kaWZpY2F0aW9uVGltZShmaWxlUGF0aCk7CisgICAgICAgIGRldGFpbHMub3JpZ2luSWRl
bnRpZmllciA9IG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICAgICAgZGV0YWlscy5j
cmVhdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoU1FMaXRlRmlsZVN5c3RlbTo6
ZGF0YWJhc2VDcmVhdGlvblRpbWUocGF0aCkpOworICAgICAgICBkZXRhaWxzLm1vZGlmaWNhdGlv
blRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJh
c2VNb2RpZmljYXRpb25UaW1lKHBhdGgpKTsKICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChkZXRhaWxzKTsKICAgICB9CiAKQEAgLTIwNCw3ICsxNDYsNyBAQCBWZWN0b3I8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6OgogCiBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZVBh
dGgoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKIHsKLSAgICBpZiAoIUZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSkpIHsKKyAgICBpZiAo
IVNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG1fbG9jYWxT
dG9yYWdlRGlyZWN0b3J5KSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUg
TG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeS51
dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIxMywx
NzIgKzE1NSwyMyBAQCBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFz
ZVBhdGgoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKICAgICBwbGF0Zm9ybU1heWJlRXhj
bHVkZUZyb21CYWNrdXAoKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSwgZmlsZW5hbWUpOwot
fQotCi1TdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQ
YXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YWJhc2VQYXRoKCJTdG9yYWdlVHJhY2tlci5k
YiIpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJE
YXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kpCi17Ci0gICAg
aWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBk
YXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSAmJiBvcGVuaW5nU3RyYXRlZ3kgPT0gU2tpcElm
Tm9uRXhpc3RlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhYmFzZS5vcGVu
KGRhdGFiYXNlUGF0aCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRh
YmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFNpbmNlIGEgV29ya1F1ZXVlIGlzbid0IGJvdW5kIHRvIGEg
c3BlY2lmaWMgdGhyZWFkLCB3ZSBoYXZlIHRvIGRpc2FibGUgdGhyZWFkaW5nIGNoZWNrcwotICAg
IC8vIGV2ZW4gdGhvdWdoIHdlIG5ldmVyIGFjY2VzcyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJl
bnQgdGhyZWFkcyBzaW11bHRhbmVvdXNseS4KLSAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRp
bmdDaGVja3MoKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
Q1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFLCBwYXRoIFRFWFQpOyIpKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
T3JpZ2lucyB0YWJsZS4iKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0
YWJhc2VGaWxlTmFtZVRvUGF0aChtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSwgZmlsZW5hbWUpOwog
fQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRp
ZmllcnMoKQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmltcG9ydE9yaWdpbnMo
KQogewotICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotCi0gICAg
aWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCByZXN1bHQ7Ci0KLSAgICAgICAgd2hpbGUgKChy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgbV9v
cmlnaW5zLmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21M
b2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzKCk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjp1cGRhdGVUcmFja2VyRGF0YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VG
aWxlcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGly
ZWN0b3J5KG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5LCAiKi5sb2NhbHN0b3JhZ2UiKTsKLQotICAg
IEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5zKG1fb3JpZ2lucyk7Ci0gICAgSGFzaFNldDxTdHJpbmc+
IG9yaWdpbnNGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlczsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBw
YXRoID0gcGF0aHNbaV07Ci0KKyAgICBtX29yaWdpbnMuY2xlYXIoKTsKKyAgICBhdXRvIHBhdGhz
ID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSwgIiou
bG9jYWxzdG9yYWdlIik7CisgICAgZm9yIChhdXRvIHBhdGggOiBwYXRocykgewogICAgICAgICBp
ZiAoIXBhdGguZW5kc1dpdGgoIi5sb2NhbHN0b3JhZ2UiKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFt
ZShwYXRoKTsKLQotICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGVuYW1lLnN1
YnN0cmluZygwLCBmaWxlbmFtZS5sZW5ndGgoKSAtIHN0cmxlbigiLmxvY2Fsc3RvcmFnZSIpKTsK
LQotICAgICAgICBpZiAoIW1fb3JpZ2lucy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKLSAg
ICAgICAgICAgIGFkZERhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmll
ciwgcGF0aCk7Ci0KLSAgICAgICAgb3JpZ2luc0Zyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVz
LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBvcmln
aW5zLmJlZ2luKCksIGVuZCA9IG9yaWdpbnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIgPSAqaXQ7Ci0gICAgICAgIGlmIChv
cmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgcmVtb3ZlRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjph
ZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCi17Ci0gICAgb3BlblRyYWNrZXJEYXRh
YmFzZShDcmVhdGVJZk5vbkV4aXN0ZW50KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgyLCBkYXRhYmFzZVBhdGgpOwotCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCi0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVz
JyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICBtX29yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIpOwotCi0gICAgLy8gRklYTUU6IFRlbGwg
Y2xpZW50cyB0aGF0IHRoZSBvcmlnaW4gd2FzIGFkZGVkLgotfQotCi12b2lkIExvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShT
a2lwSWZOb25FeGlzdGVudCk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhGb3JEYXRhYmFzZVdpdGhPcmlnaW5J
ZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOwotICAgIGlmIChk
ZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVs
ZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgpOwotCi0gICAgbV9vcmlnaW5zLnJlbW92
ZShvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAobV9vcmlnaW5zLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBUaGVyZSBhcmUgbm8gb3JpZ2lucyBsZWZ0OyBkZWxldGUgdGhlIHRyYWNrZXIgZGF0
YWJhc2UuCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGVsbCBjbGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3
YXMgcmVtb3ZlZC4KLX0KLQotU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6cGF0
aEZvckRhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmIChw
YXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICclcyciLCBv
cmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIAorICAgICAgICBhdXRvIGZpbGVuYW1lID0gRmlsZVN5c3RlbTo6cGF0aEdldEZp
bGVOYW1lKHBhdGgpOworICAgICAgICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlbmFtZS5z
dWJzdHJpbmcoMCwgZmlsZW5hbWUubGVuZ3RoKCkgLSBzdHJsZW4oIi5sb2NhbHN0b3JhZ2UiKSk7
CisgICAgICAgIGF1dG8gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBpZiAob3JpZ2luKQorICAgICAg
ICAgICAgbV9vcmlnaW5zLmFkZChvcmlnaW4udmFsdWUoKSk7CiAgICAgfQotCi0gICAgcGF0aFN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLQotICAgIGludCByZXN1bHQg
PSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENv
bHVtblRleHQoMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLmgKaW5kZXggNjNkZTk2ZjY5YzJlYjQwNTRlMTJhNjE0MDlkMzU3MmJhOGFh
ZDU2NS4uYmU5NzQ2OTQzYmRhYzc2NTBjYWZmOTFkNDc5ZmEzMmFkOThjYjI5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zNSwxMSAr
MzUsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU2VjdXJpdHlP
cmlnaW47Ci1zdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwotfQotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogc3RydWN0IExvY2FsU3RvcmFnZURldGFpbHM7CkBAIC02Miw4ICs1Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0cnVjdCBPcmlnaW5EZXRhaWxzIHsKICAgICAgICAgU3RyaW5nIG9yaWdpbklk
ZW50aWZpZXI7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dGltZV90PiBjcmVhdGlvblRpbWU7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dGltZV90PiBtb2RpZmljYXRpb25UaW1lOworICAgICAgICBX
YWxsVGltZSBjcmVhdGlvblRpbWU7CisgICAgICAgIFdhbGxUaW1lIG1vZGlmaWNhdGlvblRpbWU7
CiAgICAgfTsKICAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gb3JpZ2luRGV0YWlscygpOwogCkBA
IC03MSwyNiArNjYsMTkgQEAgcHJpdmF0ZToKICAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIoUmVmPFdvcmtRdWV1ZT4mJiwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnkp
OwogCiAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25z
dDsKLSAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAgZW51bSBE
YXRhYmFzZU9wZW5pbmdTdHJhdGVneSB7CiAgICAgICAgIENyZWF0ZUlmTm9uRXhpc3RlbnQsCiAg
ICAgICAgIFNraXBJZk5vbkV4aXN0ZW50CiAgICAgfTsKLSAgICB2b2lkIG9wZW5UcmFja2VyRGF0
YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kpOwotCi0gICAgdm9pZCBpbXBvcnRPcmlnaW5J
ZGVudGlmaWVycygpOwotICAgIHZvaWQgdXBkYXRlVHJhY2tlckRhdGFiYXNlRnJvbUxvY2FsU3Rv
cmFnZURhdGFiYXNlRmlsZXMoKTsKIAotICAgIHZvaWQgYWRkRGF0YWJhc2VXaXRoT3JpZ2luSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VQYXRoKTsKLSAgICB2b2lkIHJlbW92ZURhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgcGF0aEZvckRhdGFi
YXNlV2l0aE9yaWdpbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsK
KyAgICB2b2lkIGltcG9ydE9yaWdpbnMoKTsKKyAgICB2b2lkIHVwZGF0ZU9yaWdpbnNGcm9tTG9j
YWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpOwogCiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9xdWV1
ZTsKICAgICBTdHJpbmcgbV9sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAKLSAgICBXZWJDb3JlOjpT
UUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX29yaWdpbnM7
CisgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG1fb3JpZ2luczsKIAog
I2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHBsYXRmb3JtTWF5YmVFeGNsdWRlRnJvbUJhY2t1
cCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5oCmluZGV4IDg0MjNiOTkzNDVmOGQ5MTE3MDdlMGY4YjVjNWZlNmFkMDQw
ZTIzMzcuLmI2YmEwYWE1NjQ4YmI0Y2ZiNDRjNmFmMjNiMjNiYmNmNTQwYzdiMDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgK
QEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNoLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341599</attachid>
            <date>2018-05-30 13:31:30 -0700</date>
            <delta_ts>2018-05-30 16:52:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186104-20180530133129.patch</filename>
            <type>text/plain</type>
            <size>22786</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMwZWE3NGVjYjdkYzg5
YzIxYTNjMzIwYjUxMTUwNGMxZTJmNDNkZi4uNzQ5ZGE5MDc4YmFhZDE4ZGFmNzFmYjQ0MDAwYjY5
YzhlZDg2YmYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTMwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RvcmFn
ZVRyYWNrZXIuZGIgaW4gTG9jYWxTdHJvYWdlRGF0YWJhc2VUcmFja2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBiZWhhdmlvdXIgY2hhbmdlLgor
CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKwogMjAxOC0wNS0y
OSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBzZXRWYWx1ZSBv
biBjb250ZW50ZWRpdGFibGUgc2hvdWxkIHByZXNlcnZlIHdoaXRlc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
OTRhOTI2Y2ZiNjNkMzM1ZmRlNmI4NmRhYmY4NDhhMTNiNDY5NzIwZC4uOTE2YTQxYzU5ZWNkM2Ji
YzRmY2U0ZDdlYzQ5ZjczOGYxMGU1YzljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAx
OC0wNS0zMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9w
IHVzaW5nIFN0b3JhZ2VUcmFja2VyLmRiIGluIExvY2FsU3Ryb2FnZURhdGFiYXNlVHJhY2tlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MTA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIFN0
b3JhZ2VUcmFja2VyLmRiIGZyb20gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyIGZvciBlZmZp
Y2llbmN5IGFuZCBzaW1wbGljaXR5OiB3ZSBjb3VsZCAKKyAgICAgICAgY29tcHV0ZSBmaWxlIHBh
dGggYmFzZWQgb24gb3JpZ2luLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1haW50YWluIGEgZGF0YWJh
c2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGJ1Z3MgaW5jbHVkaW5nIG5vdCBk
ZWxldGluZyBjb3JyZWN0IGRhdGFiYXNlIGZpbGVzIGJlY2F1c2UgU3RvcmFnZVRyYWNrZXIuZGIK
KyAgICAgICAgc3RvcmVzIGFic29sdXRlIHBhdGggYW5kIG5vdCBlbGltaW5hdGluZyBjb3JyZWN0
IG9yaWdpbnMgYmVjYXVzZSBvZiB0eXBvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXS0tleVZhbHVlU3RvcmFnZU1h
bmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGlkT3Bl
bkRhdGFiYXNlV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlc01vZGlmaWVk
U2luY2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6Om9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6OmRhdGFiYXNlUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6aW1wb3J0T3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OmZp
bGVDcmVhdGlvblRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTW9kaWZpY2F0
aW9uVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0
b3JhZ2VEYXRhYmFzZUZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpyZW1v
dmVEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2lu
SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOC0wNS0yOSAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeGVzIGFmdGVyIHIyMjg5MDcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAppbmRl
eCA2YTQ4MjAwYWRhNWRhYjZiNzc2MWYzM2Q5Y2RmNWVjMjg1ZDQxNDdhLi44MjIwZjMxY2Q2Yzc5
YzFmZTg2ZGQxMTFlODU0ZTI3YTk4YzE3NTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTU3LDEzICs1NywxMyBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4KICAgICAvLyBmaWxlTmFtZSAtIFRo
ZSBmaWxlIG5hbWUuCi0gICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKICAgICAvLyBNYWtl
cyBzdXJlIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBhbGwgbWlzc2lu
ZyBkaXJlY3RvcmllcwogICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLgogICAgIC8vCiAgICAgLy8g
cGF0aCAtIFRoZSBkaXJlY3RvcnkuCi0gICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJl
Y3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgYm9vbCBlbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
OwogCiAgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9k
IG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4KICAgICAvLyBJZiAnY2hlY2tQ
YXRoT25seScgaXMgdHJ1ZSwgdGhlbiB0aGlzIG1ldGhvZCBtYWtlcyBzdXJlIGFsbCBkaXJlY3Rv
cmllcyBvbiB0aGUKQEAgLTk3LDggKzk3LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOwotICAgIHN0YXRpYyBkb3VibGUgZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7Ci0gICAgc3RhdGljIGRvdWJsZSBkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGRvdWJs
ZSBkYXRhYmFzZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgZG91YmxlIGRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKIAogcHJpdmF0ZToKICAgICAvLyBkbyBub3QgaW5zdGFudGlhdGUg
dGhpcyBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggNGUzOWRhZDgyYTUyMjViOWQ5ZGQy
NGVmODFmYThhZjc1M2EzNWIxNC4uMzkxZjg1ZTM3NWVmMjY1M2EwZTI0MTg5OWViMGZkMzU0MDc1
NDE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0xMDIsOSArMTAyLDkgQEAgdm9pZCBXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKFdLS2V5VmFsdWVT
dG9yYWdlTWFuYWdlclIKIAogICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlckdldE9yaWdpbktleSgpKS0+c3RyaW5nKCksIG9yaWdpbik7CiAg
ICAgICAgICAgICBpZiAob3JpZ2luRGV0YWlscy5jcmVhdGlvblRpbWUpCi0gICAgICAgICAgICAg
ICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldENyZWF0
aW9uVGltZUtleSgpKS0+c3RyaW5nKCksIEFQSTo6RG91YmxlOjpjcmVhdGUob3JpZ2luRGV0YWls
cy5jcmVhdGlvblRpbWUudmFsdWVfb3IoMCkpKTsKKyAgICAgICAgICAgICAgICBkZXRhaWxzTWFw
LnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1lS2V5KCkp
LT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0aW9uVGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKICAgICAgICAgICAgIGlmIChvcmlnaW5E
ZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUpCi0gICAgICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQo
dG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldE1vZGlmaWNhdGlvblRpbWVLZXkoKSkt
PnN0cmluZygpLCBBUEk6OkRvdWJsZTo6Y3JlYXRlKG9yaWdpbkRldGFpbHMubW9kaWZpY2F0aW9u
VGltZS52YWx1ZV9vcigwKSkpOworICAgICAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0KHRvSW1w
bChXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRNb2RpZmljYXRpb25UaW1lS2V5KCkpLT5zdHJp
bmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSk7CiAKICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShkZXRhaWxzTWFwKSkp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggY2E1
NmQwNTdkZWM0MDYyNWMwNzI1OGU2ODMwZTMwYmI1ZjYwYmM0Mi4uOTg1YjBlZTk2ZDZmNWNkMDQx
Mjc4MTVhZDE0NGM3ZmFlOTBkOGQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmNwcApAQCAtNTYsNyArNTYsMTAgQEAgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwKICAgICBVVEY4
RW5jb2RpbmcoKTsKIAogICAgIG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPmltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCk7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPmltcG9ydE9yaWdpbnMo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlbGV0ZSBsZWdhY3kgc3RvcmFnZVRyYWNrZXIgZGF0
YWJhc2UgZmlsZS4KKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxl
KHByb3RlY3RlZFRoaXMtPmRhdGFiYXNlUGF0aCgiU3RvcmFnZVRyYWNrZXIuZGIiKSk7CiAgICAg
fSk7CiB9CiAKQEAgLTcxLDk5ICs3NCw0OCBAQCBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZVBhdGgoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cgogCiB2
b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGlkT3BlbkRhdGFiYXNlV2l0aE9yaWdp
bihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQogewotICAgIGFkZERh
dGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCksIGRhdGFiYXNlUGF0aChzZWN1cml0eU9yaWdpbikpOworICAgIG1fb3JpZ2lucy5hZGQo
c2VjdXJpdHlPcmlnaW4pOworCisgICAgLy8gRklYTUU6IFRlbGwgY2xpZW50cyB0aGF0IHRoZSBv
cmlnaW4gd2FzIGFkZGVkLgogfQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJp
dHlPcmlnaW4pCiB7Ci0gICAgcmVtb3ZlRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihzZWN1
cml0eU9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgbV9vcmlnaW5zLnJlbW92ZShz
ZWN1cml0eU9yaWdpbik7CisKKyAgICBhdXRvIHBhdGggPSBkYXRhYmFzZVBhdGgoc2VjdXJpdHlP
cmlnaW4pOworICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShwYXRoKTsKKworICAgIC8vIEZJWE1FOiBUZWxsIGNsaWVu
dHMgdGhhdCB0aGUgb3JpZ2luIHdhcyByZW1vdmVkLgogfQogCiB2b2lkIExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKIHsKICAgICBtX29yaWdpbnMuY2xl
YXIoKTsKLQotICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9N
IE9yaWdpbnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBGaWxlU3lzdGVt
OjpkZWxldGVGaWxlKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAKKyAgICBhdXRv
IHBhdGhzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9y
eSwgIioubG9jYWxzdG9yYWdlIik7CisgICAgZm9yIChhdXRvIHBhdGggOiBwYXRocykgeworICAg
ICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCk7CiAKICAgICAg
ICAgLy8gRklYTUU6IENhbGwgb3V0IHRvIHRoZSBjbGllbnQuCiAgICAgfQogCi0gICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBp
biBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKLQotICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKQotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0KLSAgICBpZiAoIUZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKSkgewotICAgICAgICAvLyBJ
biB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVsZXRlIHRoZSBkYXRhYmFz
ZSBmaWxlIChlLmcgc29tZSBvdGhlciBwcm9ncmFtCi0gICAgICAgIC8vIGxpa2UgYSB2aXJ1cyBz
Y2FubmVyIGlzIGFjY2Vzc2luZyBpdCksIG1ha2Ugc3VyZSB0byByZW1vdmUgYWxsIGVudHJpZXMu
Ci0gICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotICAgICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZS
T00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVs
ZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5z
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBGaWxlU3lz
dGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSk7Ci19Ci0K
LXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHRpbWVfdD4gZmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJp
bmcmIGZpbGVQYXRoKQotewotICAgIHRpbWVfdCB0aW1lOwotICAgIHJldHVybiBGaWxlU3lzdGVt
OjpnZXRGaWxlQ3JlYXRpb25UaW1lKGZpbGVQYXRoLCB0aW1lKSA/IHRpbWUgOiBzdGQ6Om9wdGlv
bmFsPHRpbWVfdD4oc3RkOjpudWxsb3B0KTsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8dGlt
ZV90PiBmaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQotewotICAg
IHRpbWVfdCB0aW1lOwotICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoZmlsZVBhdGgsIHRpbWUpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIHRpbWU7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURp
cmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSk7CiB9CiAKIFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VzTW9kaWZpZWRT
aW5jZShXYWxsVGltZSB0aW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gb3JpZ2lu
SWRlbnRpZmllcnNNb2RpZmllZDsKLSAgICAKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2lu
IDogbV9vcmlnaW5zKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlUGF0aCA9IHBhdGhGb3JEYXRhYmFz
ZVdpdGhPcmlnaW5JZGVudGlmaWVyKG9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIG1v
ZGlmaWNhdGlvblRpbWUgPSBGaWxlU3lzdGVtOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShmaWxl
UGF0aCk7Ci0gICAgICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSB8fCBtb2RpZmljYXRpb25UaW1l
LnZhbHVlKCkgPj0gdGltZSkKLSAgICAgICAgICAgIG9yaWdpbklkZW50aWZpZXJzTW9kaWZpZWQu
YXBwZW5kKG9yaWdpbik7Ci0gICAgfQorICAgIGltcG9ydE9yaWdpbnMoKTsKICAgICAKICAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZDsKLSAgICBk
YXRhYmFzZU9yaWdpbnNNb2RpZmllZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbklkZW50
aWZpZXJzTW9kaWZpZWQuc2l6ZSgpKTsKICAgICAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdp
bklkZW50aWZpZXIgOiBvcmlnaW5JZGVudGlmaWVyc01vZGlmaWVkKSB7Ci0gICAgICAgIGlmIChh
dXRvIG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihv
cmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGRhdGFiYXNlT3JpZ2luc01vZGlmaWVkLnVu
Y2hlY2tlZEFwcGVuZCgqb3JpZ2luKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvIG9yaWdpbiA6IG1fb3JpZ2lucykgeworICAg
ICAgICBhdXRvIHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKKyAgICAgICAgYXV0byBtb2Rp
ZmljYXRpb25UaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKFNRTGl0ZUZpbGVTeXN0ZW06
OmRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShwYXRoKSk7CisgICAgICAgIGlmIChtb2RpZmljYXRp
b25UaW1lID49IHRpbWUpCisgICAgICAgICAgICBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZC5hcHBl
bmQob3JpZ2luKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGRhdGFiYXNlT3JpZ2luc01vZGlm
aWVkOwpAQCAtMTcxLDE3ICsxMjMsNyBAQCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlc01vZGlmaWVkU2luY2UoVwogCiBWZWN0
b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
bnMoKSBjb25zdAogewotICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7Ci0g
ICAgb3JpZ2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fb3JpZ2lucy5zaXplKCkpOwotCi0g
ICAgZm9yIChjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIgOiBtX29yaWdpbnMpIHsKLSAg
ICAgICAgaWYgKGF1dG8gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpKQotICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNr
ZWRBcHBlbmQoKm9yaWdpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJldHVybiBjb3B5
VG9WZWN0b3IobV9vcmlnaW5zKTsKIH0KIAogVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5E
ZXRhaWxzKCkKQEAgLTE4OSwxMyArMTMxLDEzIEBAIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6CiAg
ICAgVmVjdG9yPE9yaWdpbkRldGFpbHM+IHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX29yaWdpbnMuc2l6ZSgpKTsKIAotICAgIGZvciAoY29uc3QgU3RyaW5nJiBv
cmlnaW4gOiBtX29yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gcGF0aEZvckRh
dGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIob3JpZ2luKTsKKyAgICBmb3IgKGF1dG8gb3JpZ2lu
IDogbV9vcmlnaW5zKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gZGF0YWJhc2VQYXRoKG9yaWdp
bik7CiAKICAgICAgICAgT3JpZ2luRGV0YWlscyBkZXRhaWxzOwotICAgICAgICBkZXRhaWxzLm9y
aWdpbklkZW50aWZpZXIgPSBvcmlnaW4uaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIGRldGFpbHMu
Y3JlYXRpb25UaW1lID0gZmlsZUNyZWF0aW9uVGltZShmaWxlUGF0aCk7Ci0gICAgICAgIGRldGFp
bHMubW9kaWZpY2F0aW9uVGltZSA9IGZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVQYXRoKTsKKyAg
ICAgICAgZGV0YWlscy5vcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpOworICAgICAgICBkZXRhaWxzLmNyZWF0aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vj
b25kcyhTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUNyZWF0aW9uVGltZShwYXRoKSk7CisgICAg
ICAgIGRldGFpbHMubW9kaWZpY2F0aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhT
UUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUocGF0aCkpOwogICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGRldGFpbHMpOwogICAgIH0KIApAQCAtMjA0LDcgKzE0
Niw3IEBAIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6CiAKIFN0cmluZyBMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25zdAog
ewotICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fbG9jYWxTdG9yYWdl
RGlyZWN0b3J5KSkgeworICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VE
aXJlY3RvcnlFeGlzdHMobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1f
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgfQpAQCAtMjEzLDE3MiArMTU1LDIzIEBAIFN0cmluZyBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25z
dAogICAgIHBsYXRmb3JtTWF5YmVFeGNsdWRlRnJvbUJhY2t1cCgpOwogI2VuZGlmCiAKLSAgICBy
ZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fbG9jYWxTdG9yYWdl
RGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci19Ci0KLVN0cmluZyBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhYmFz
ZVBhdGgoIlN0b3JhZ2VUcmFja2VyLmRiIik7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9w
ZW5pbmdTdHJhdGVneSkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgo
KTsKLQotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpICYmIG9w
ZW5pbmdTdHJhdGVneSA9PSBTa2lwSWZOb25FeGlzdGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgewotICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2luY2UgYSBXb3Jr
UXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIHdlIGhhdmUgdG8gZGlzYWJs
ZSB0aHJlYWRpbmcgY2hlY2tzCi0gICAgLy8gZXZlbiB0aG91Z2ggd2UgbmV2ZXIgYWNjZXNzIHRo
ZSBkYXRhYmFzZSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LgotICAgIG1f
ZGF0YWJhc2UuZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOwotCi0gICAgaWYgKG1fZGF0YWJhc2Uu
dGFibGVFeGlzdHMoIk9yaWdpbnMiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQg
VU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHBhdGggVEVYVCk7IikpCi0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOworICAgIHJldHVybiBTUUxp
dGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fbG9jYWxTdG9yYWdl
RGlyZWN0b3J5LCBmaWxlbmFtZSk7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6aW1wb3J0T3JpZ2lucygpCiB7Ci0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShTa2lw
SWZOb25FeGlzdGVudCk7Ci0KLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZS
T00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
LiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlc3Vs
dDsKLQotICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBtX29yaWdpbnMuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFi
YXNlLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBk
YXRlVHJhY2tlckRhdGFiYXNlRnJvbUxvY2FsU3RvcmFnZURhdGFiYXNlRmlsZXMoKTsKLX0KLQot
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZy
b21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRo
cyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnksICIq
LmxvY2Fsc3RvcmFnZSIpOwotCi0gICAgSGFzaFNldDxTdHJpbmc+IG9yaWdpbnMobV9vcmlnaW5z
KTsKLSAgICBIYXNoU2V0PFN0cmluZz4gb3JpZ2luc0Zyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZp
bGVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRocy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBwYXRoc1tpXTsKLQorICAgIG1fb3JpZ2lucy5j
bGVhcigpOworICAgIGF1dG8gcGF0aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fbG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCAiKi5sb2NhbHN0b3JhZ2UiKTsKKyAgICBmb3IgKGF1dG8gcGF0
aCA6IHBhdGhzKSB7CiAgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgiLmxvY2Fsc3RvcmFnZSIp
KQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gRmls
ZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKHBhdGgpOwotCi0gICAgICAgIFN0cmluZyBvcmlnaW5J
ZGVudGlmaWVyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmxlbmd0aCgpIC0gc3Ry
bGVuKCIubG9jYWxzdG9yYWdlIikpOwotCi0gICAgICAgIGlmICghbV9vcmlnaW5zLmNvbnRhaW5z
KG9yaWdpbklkZW50aWZpZXIpKQotICAgICAgICAgICAgYWRkRGF0YWJhc2VXaXRoT3JpZ2luSWRl
bnRpZmllcihvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKLQotICAgICAgICBvcmlnaW5zRnJvbUxv
Y2FsU3RvcmFnZURhdGFiYXNlRmlsZXMuYWRkKG9yaWdpbklkZW50aWZpZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byBpdCA9IG9yaWdpbnMuYmVnaW4oKSwgZW5kID0gb3JpZ2lucy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciA9ICppdDsKLSAgICAgICAgaWYgKG9yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICByZW1vdmVEYXRhYmFzZVdpdGhPcmln
aW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmFkZERhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkK
LXsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmTm9uRXhpc3RlbnQpOwotICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMg
KD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUg
dHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7
Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlUGF0aCk7Ci0KLSAgICBpZiAoc3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmll
ci51dGY4KCkuZGF0YSgpKTsKLQotICAgIG1fb3JpZ2lucy5hZGQob3JpZ2luSWRlbnRpZmllcik7
Ci0KLSAgICAvLyBGSVhNRTogVGVsbCBjbGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMgYWRkZWQu
Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEYXRhYmFzZVdp
dGhPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAg
ICBvcGVuVHJhY2tlckRhdGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsKLSAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBwYXRoID0gcGF0
aEZvckRhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Ci0gICAg
aWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Yg
b3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRl
bnRpZmllcik7Ci0gICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewot
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdpbiAn
JXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCk7
Ci0KLSAgICBtX29yaWdpbnMucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmIChtX29y
aWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBubyBvcmlnaW5zIGxlZnQ7
IGRlbGV0ZSB0aGUgdHJhY2tlciBkYXRhYmFzZS4KLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgp
OwotICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRh
dGFiYXNlUGF0aCgpKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnko
bV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUZWxsIGNs
aWVudHMgdGhhdCB0aGUgb3JpZ2luIHdhcyByZW1vdmVkLgotfQotCi1TdHJpbmcgTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJF
IG9yaWdpbj0/Iik7Ci0gICAgaWYgKHBhdGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBvZiBw
YXRoIGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gZmlsZW5hbWUg
PSBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAgICAgIGF1dG8gb3JpZ2lu
SWRlbnRpZmllciA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sZW5ndGgoKSAtIHN0
cmxlbigiLmxvY2Fsc3RvcmFnZSIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7CisgICAg
ICAgIGlmIChvcmlnaW4pCisgICAgICAgICAgICBtX29yaWdpbnMuYWRkKG9yaWdpbi52YWx1ZSgp
KTsKICAgICB9Ci0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZp
ZXIpOwotCi0gICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0
dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaAppbmRleCA2M2RlOTZmNjljMmVi
NDA1NGUxMmE2MTQwOWQzNTcyYmE4YWFkNTY1Li5iZTk3NDY5NDNiZGFjNzY1MGNhZmY5MWQ0Nzlm
YTMyYWQ5OGNiMjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFi
YXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KQEAgLTM1LDExICszNSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7
Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgTG9jYWxTdG9yYWdlRGV0YWlsczsK
QEAgLTYyLDggKzU3LDggQEAgcHVibGljOgogCiAgICAgc3RydWN0IE9yaWdpbkRldGFpbHMgewog
ICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllcjsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx0
aW1lX3Q+IGNyZWF0aW9uVGltZTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx0aW1lX3Q+IG1vZGlm
aWNhdGlvblRpbWU7CisgICAgICAgIFdhbGxUaW1lIGNyZWF0aW9uVGltZTsKKyAgICAgICAgV2Fs
bFRpbWUgbW9kaWZpY2F0aW9uVGltZTsKICAgICB9OwogICAgIFZlY3RvcjxPcmlnaW5EZXRhaWxz
PiBvcmlnaW5EZXRhaWxzKCk7CiAKQEAgLTcxLDI2ICs2NiwxOSBAQCBwcml2YXRlOgogICAgIExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcihSZWY8V29ya1F1ZXVlPiYmLCBjb25zdCBTdHJpbmcm
IGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7CiAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpIGNvbnN0OwotICAgIFN0cmluZyB0cmFja2VyRGF0YWJhc2VQYXRo
KCkgY29uc3Q7CiAKICAgICBlbnVtIERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IHsKICAgICAgICAg
Q3JlYXRlSWZOb25FeGlzdGVudCwKICAgICAgICAgU2tpcElmTm9uRXhpc3RlbnQKICAgICB9Owot
ICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7Ci0K
LSAgICB2b2lkIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVUcmFj
a2VyRGF0YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpOwogCi0gICAgdm9pZCBh
ZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwotICAgIHZvaWQgcmVtb3ZlRGF0YWJh
c2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgIFN0cmluZyBwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgaW1wb3J0T3JpZ2lucygpOworICAgIHZv
aWQgdXBkYXRlT3JpZ2luc0Zyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzKCk7CiAKICAgICBS
ZWZQdHI8V29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0cmluZyBtX2xvY2FsU3RvcmFnZURpcmVj
dG9yeTsKIAotICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7Ci0gICAgSGFz
aFNldDxTdHJpbmc+IG1fb3JpZ2luczsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gbV9vcmlnaW5zOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZvaWQgcGxhdGZv
cm1NYXliZUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggODQyM2I5OTM0NWY4
ZDkxMTcwN2UwZjhiNWM1ZmU2YWQwNDBlMjMzNy4uYjZiYTBhYTU2NDhiYjRjZmI0NGM2YWYyM2Iy
M2JiY2Y1NDBjN2IwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaApAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbkhhc2guaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341624</attachid>
            <date>2018-05-30 16:52:42 -0700</date>
            <delta_ts>2018-06-01 13:13:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186104-20180530165241.patch</filename>
            <type>text/plain</type>
            <size>23225</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMwZWE3NGVjYjdkYzg5
YzIxYTNjMzIwYjUxMTUwNGMxZTJmNDNkZi4uMGE4ZmYzOWNmYmJmNTc0MzUzYWFiZDI4MDJhOWE1
NGUyOGM3NWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTMwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RvcmFn
ZVRyYWNrZXIuZGIgaW4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDE4LTA1LTI5
ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IHNldFZhbHVlIG9u
IGNvbnRlbnRlZGl0YWJsZSBzaG91bGQgcHJlc2VydmUgd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5
NGE5MjZjZmI2M2QzMzVmZGU2Yjg2ZGFiZjg0OGExM2I0Njk3MjBkLi43YTQ3MjI2ZmMyOGUzMjA1
YWQwZTE3ODFlYjc0Njk1ZWY0ZjUwNDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE4
LTA1LTMwICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3Ag
dXNpbmcgU3RvcmFnZVRyYWNrZXIuZGIgaW4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxMDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9wIHVzaW5n
IFN0b3JhZ2VUcmFja2VyLmRiIGFuZCBzdG9wIGNhY2hpbmcgb3JpZ2lucyBpbiBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXIgZm9yIGVmZmljaWVuY3kgCisgICAgICAgIGFuZCBzaW1wbGljaXR5
LiBTaW5jZSBmdW5jdGlvbnMgaW4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyIGFyZSBub3Qg
ZnJlcXVlbnRseSBjYWxsZWQsIHdlIGdldCAKKyAgICAgICAgbGl0dGxlIGJlbmVmaXRzIGZyb20g
Y2FjaGluZyBvcmlnaW5zLgorCisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAg
ICAoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbik6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmRpZE9wZW5EYXRhYmFzZVdpdGhPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdp
bik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGVsZXRl
QWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjpkYXRhYmFzZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5EZXRhaWxzKToKKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZVBhdGggY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpmaWxlQ3JlYXRpb25UaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU1vZGlmaWNhdGlvblRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9wZW5U
cmFja2VyRGF0YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjp1cGRhdGVUcmFja2VyRGF0
YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2VXaXRoT3JpZ2lu
SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6cGF0aEZvckRh
dGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6CisKIDIwMTgtMDUtMjkgIFBlciBB
cm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZvbGxvdy11cCBmaXhl
cyBhZnRlciByMjI4OTA3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmgKaW5kZXggNmE0ODIwMGFkYTVkYWI2Yjc3NjFmMzNkOWNkZjVlYzI4NWQ0MTQ3
YS4uODIyMGYzMWNkNmM3OWMxZmU4NmRkMTExZTg1NGUyN2E5OGMxNzUwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC01NywxMyArNTcs
MTMgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gcGF0aCAtIFRoZSBkaXJlY3RvcnkuCiAgICAg
Ly8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgotICAgIHN0YXRpYyBTdHJpbmcgYXBwZW5kRGF0
YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgYXBwZW5kRGF0YWJhc2VG
aWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
OwogCiAgICAgLy8gTWFrZXMgc3VyZSB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGV4aXN0cywgYnkgY3Jl
YXRpbmcgYWxsIG1pc3NpbmcgZGlyZWN0b3JpZXMKICAgICAvLyBvbiB0aGUgZ2l2ZW4gcGF0aC4K
ICAgICAvLwogICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5LgotICAgIHN0YXRpYyBib29sIGVu
c3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoY29u
c3QgU3RyaW5nJiBwYXRoKTsKIAogICAgIC8vIElmICdjaGVja1BhdGhPbmx5JyBpcyBmYWxzZSwg
dGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMuCiAg
ICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4gdGhpcyBtZXRob2QgbWFrZXMg
c3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlCkBAIC05Nyw4ICs5Nyw4IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIAogICAgIHN0YXRpYyBsb25nIGxvbmcgZ2V0RGF0YWJhc2VGaWxlU2l6ZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICBzdGF0aWMgZG91YmxlIGRhdGFiYXNlQ3JlYXRpb25U
aW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAgIHN0YXRpYyBkb3VibGUgZGF0YWJhc2VN
b2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBkb3VibGUgZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGRvdWJsZSBkYXRhYmFzZU1vZGlmaWNh
dGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKIHByaXZhdGU6CiAgICAgLy8gZG8g
bm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXgg
OWE0ZGFiOWIxNTVjMDEwODJhNzk4NzNkYjE3ZDkyMjAwNzljZTNlNy4uYjk3NjVkODY2YmM5NjEy
ZmU2OGU5MDE4OGZkYWEzZDAxOWQxMTQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAg
LTUyLDYgKzUyLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgTShLZXlIYW5kbGluZykgXAogICAgIE0o
TGF5ZXJzKSBcCiAgICAgTShMb2FkaW5nKSBcCisgICAgTShMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXIpIFwKICAgICBNKE1vdXNlSGFuZGxpbmcpIFwKICAgICBNKE5ldHdvcmspIFwKICAgICBN
KE5ldHdvcmtDYWNoZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggNGUzOWRhZDgyYTUyMjVi
OWQ5ZGQyNGVmODFmYThhZjc1M2EzNWIxNC4uMzkxZjg1ZTM3NWVmMjY1M2EwZTI0MTg5OWViMGZk
MzU0MDc1NDE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0xMDIsOSArMTAyLDkgQEAgdm9p
ZCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlclIKIAogICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBs
KFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldE9yaWdpbktleSgpKS0+c3RyaW5nKCksIG9yaWdp
bik7CiAgICAgICAgICAgICBpZiAob3JpZ2luRGV0YWlscy5jcmVhdGlvblRpbWUpCi0gICAgICAg
ICAgICAgICAgZGV0YWlsc01hcC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdl
dENyZWF0aW9uVGltZUtleSgpKS0+c3RyaW5nKCksIEFQSTo6RG91YmxlOjpjcmVhdGUob3JpZ2lu
RGV0YWlscy5jcmVhdGlvblRpbWUudmFsdWVfb3IoMCkpKTsKKyAgICAgICAgICAgICAgICBkZXRh
aWxzTWFwLnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1l
S2V5KCkpLT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0
aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKICAgICAgICAgICAgIGlmIChv
cmlnaW5EZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUpCi0gICAgICAgICAgICAgICAgZGV0YWlsc01h
cC5zZXQodG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldE1vZGlmaWNhdGlvblRpbWVL
ZXkoKSktPnN0cmluZygpLCBBUEk6OkRvdWJsZTo6Y3JlYXRlKG9yaWdpbkRldGFpbHMubW9kaWZp
Y2F0aW9uVGltZS52YWx1ZV9vcigwKSkpOworICAgICAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0
KHRvSW1wbChXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRNb2RpZmljYXRpb25UaW1lS2V5KCkp
LT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLm1vZGlmaWNhdGlv
blRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSk7CiAKICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShkZXRhaWxz
TWFwKSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKaW5k
ZXggY2E1NmQwNTdkZWM0MDYyNWMwNzI1OGU2ODMwZTMwYmI1ZjYwYmM0Mi4uYzZkODE1ZjlmZDNl
NjVkNjc4YmIzZDkxNWRlN2I5OGU0ZDRhMDViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLmNwcApAQCAtMjYsMTEgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCiAKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
UUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KQEAg
LTU2LDcgKzU1LDggQEAgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwKICAgICBVVEY4RW5jb2Rpbmco
KTsKIAogICAgIG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPmltcG9ydE9yaWdpbklkZW50
aWZpZXJzKCk7CisgICAgICAgIC8vIERlbGV0ZSBsZWdhY3kgc3RvcmFnZVRyYWNrZXIgZGF0YWJh
c2UgZmlsZS4KKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBy
b3RlY3RlZFRoaXMtPmRhdGFiYXNlUGF0aCgiU3RvcmFnZVRyYWNrZXIuZGIiKSk7CiAgICAgfSk7
CiB9CiAKQEAgLTcxLDEzMSArNzEsNzcgQEAgU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6ZGF0YWJhc2VQYXRoKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXIKIAogdm9p
ZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRpZE9wZW5EYXRhYmFzZVdpdGhPcmlnaW4o
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBhZGREYXRh
YmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpLCBkYXRhYmFzZVBhdGgoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAvLyBGSVhNRTogVGVsbCBj
bGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMgYWRkZWQuCiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4oY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICByZW1vdmVEYXRhYmFzZVdpdGhPcmln
aW5JZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBh
dXRvIHBhdGggPSBkYXRhYmFzZVBhdGgoc2VjdXJpdHlPcmlnaW4pOworICAgIGlmICghcGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShw
YXRoKTsKKworICAgIC8vIEZJWE1FOiBUZWxsIGNsaWVudHMgdGhhdCB0aGUgb3JpZ2luIHdhcyBy
ZW1vdmVkLgogfQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxs
RGF0YWJhc2VzKCkKIHsKLSAgICBtX29yaWdpbnMuY2xlYXIoKTsKLQotICAgIG9wZW5UcmFja2Vy
RGF0YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDEpKTsKKyAgICBhdXRvIHBhdGhzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVj
dG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9yeSwgIioubG9jYWxzdG9yYWdlIik7CisgICAgZm9y
IChhdXRvIHBhdGggOiBwYXRocykgeworICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVE
YXRhYmFzZUZpbGUocGF0aCk7CiAKICAgICAgICAgLy8gRklYTUU6IENhbGwgb3V0IHRvIHRoZSBj
bGllbnQuCiAgICAgfQogCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFz
ZS4iKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodHJhY2tlckRhdGFi
YXNlUGF0aCgpKSkgewotICAgICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3QgcG9z
c2libGUgdG8gZGVsZXRlIHRoZSBkYXRhYmFzZSBmaWxlIChlLmcgc29tZSBvdGhlciBwcm9ncmFt
Ci0gICAgICAgIC8vIGxpa2UgYSB2aXJ1cyBzY2FubmVyIGlzIGFjY2Vzc2luZyBpdCksIG1ha2Ug
c3VyZSB0byByZW1vdmUgYWxsIGVudHJpZXMuCi0gICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2Uo
U2tpcElmTm9uRXhpc3RlbnQpOwotICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRl
bWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVs
ZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5l
eGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVj
dXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShtX2xv
Y2FsU3RvcmFnZURpcmVjdG9yeSk7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHRpbWVfdD4g
ZmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQotewotICAgIHRpbWVfdCB0
aW1lOwotICAgIHJldHVybiBGaWxlU3lzdGVtOjpnZXRGaWxlQ3JlYXRpb25UaW1lKGZpbGVQYXRo
LCB0aW1lKSA/IHRpbWUgOiBzdGQ6Om9wdGlvbmFsPHRpbWVfdD4oc3RkOjpudWxsb3B0KTsKLX0K
LQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8dGltZV90PiBmaWxlTW9kaWZpY2F0aW9uVGltZShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQotewotICAgIHRpbWVfdCB0aW1lOwotICAgIGlmICghRmlsZVN5
c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZmlsZVBhdGgsIHRpbWUpKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHRpbWU7CisgICAgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2xvY2FsU3RvcmFnZURpcmVjdG9y
eSk7CiB9CiAKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6ZGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lKQogewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7
Ci0gICAgVmVjdG9yPFN0cmluZz4gb3JpZ2luSWRlbnRpZmllcnNNb2RpZmllZDsKLSAgICAKLSAg
ICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2luIDogbV9vcmlnaW5zKSB7Ci0gICAgICAgIFN0cmlu
ZyBmaWxlUGF0aCA9IHBhdGhGb3JEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKG9yaWdpbik7
Ci0gICAgICAgIAotICAgICAgICBhdXRvIG1vZGlmaWNhdGlvblRpbWUgPSBGaWxlU3lzdGVtOjpn
ZXRGaWxlTW9kaWZpY2F0aW9uVGltZShmaWxlUGF0aCk7Ci0gICAgICAgIGlmICghbW9kaWZpY2F0
aW9uVGltZSB8fCBtb2RpZmljYXRpb25UaW1lLnZhbHVlKCkgPj0gdGltZSkKLSAgICAgICAgICAg
IG9yaWdpbklkZW50aWZpZXJzTW9kaWZpZWQuYXBwZW5kKG9yaWdpbik7Ci0gICAgfQotICAgIAog
ICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IGRhdGFiYXNlT3JpZ2luc01vZGlmaWVkOwot
ICAgIGRhdGFiYXNlT3JpZ2luc01vZGlmaWVkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3JpZ2lu
SWRlbnRpZmllcnNNb2RpZmllZC5zaXplKCkpOworICAgIGF1dG8gZGF0YWJhc2VPcmlnaW5zID0g
b3JpZ2lucygpOwogICAgIAotICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luSWRlbnRpZmllciA6
IG9yaWdpbklkZW50aWZpZXJzTW9kaWZpZWQpIHsKLSAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0g
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZp
ZXIpKQotICAgICAgICAgICAgZGF0YWJhc2VPcmlnaW5zTW9kaWZpZWQudW5jaGVja2VkQXBwZW5k
KCpvcmlnaW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBmb3IgKGF1dG8gb3JpZ2luIDogZGF0YWJhc2VPcmlnaW5zKSB7CisgICAgICAgIGF1
dG8gcGF0aCA9IGRhdGFiYXNlUGF0aChvcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBt
b2RpZmljYXRpb25UaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKFNRTGl0ZUZpbGVTeXN0
ZW06OmRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShwYXRoKSk7CisgICAgICAgIGlmIChtb2RpZmlj
YXRpb25UaW1lID49IHRpbWUpCisgICAgICAgICAgICBkYXRhYmFzZU9yaWdpbnNNb2RpZmllZC5h
cHBlbmQob3JpZ2luKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZGF0YWJhc2VPcmlnaW5z
TW9kaWZpZWQ7CiB9CiAKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luczsKLSAgICBvcmlnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9v
cmlnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciA6IG1fb3JpZ2lucykgewotICAgICAgICBpZiAoYXV0byBvcmlnaW4gPSBTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikpCi0gICAgICAg
ICAgICBvcmlnaW5zLnVuY2hlY2tlZEFwcGVuZCgqb3JpZ2luKTsKKyAgICBWZWN0b3I8U2VjdXJp
dHlPcmlnaW5EYXRhPiBkYXRhYmFzZU9yaWdpbnM7CisgICAgYXV0byBwYXRocyA9IEZpbGVTeXN0
ZW06Omxpc3REaXJlY3RvcnkobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnksICIqLmxvY2Fsc3RvcmFn
ZSIpOworICAgIAorICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpIHsKKyAgICAgICAgYXV0byBm
aWxlbmFtZSA9IEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShwYXRoKTsKKyAgICAgICAgYXV0
byBvcmlnaW5JZGVudGlmaWVyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmxlbmd0
aCgpIC0gc3RybGVuKCIubG9jYWxzdG9yYWdlIikpOworICAgICAgICBhdXRvIG9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKG9yaWdpbikKKyAgICAgICAgICAgIGRhdGFiYXNlT3JpZ2lucy5hcHBl
bmQob3JpZ2luLnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlciwgIlVuYWJsZSB0byBleHRyYWN0IG9yaWdpbiBmcm9tIHBhdGggJXMiLCBw
YXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJl
dHVybiBkYXRhYmFzZU9yaWdpbnM7CiB9CiAKIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6Ok9yaWdpbkRldGFpbHM+IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
RGV0YWlscygpCiB7CiAgICAgVmVjdG9yPE9yaWdpbkRldGFpbHM+IHJlc3VsdDsKLSAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX29yaWdpbnMuc2l6ZSgpKTsKKyAgICBhdXRvIGRh
dGFiYXNlT3JpZ2lucyA9IG9yaWdpbnMoKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShkYXRhYmFzZU9yaWdpbnMuc2l6ZSgpKTsKIAotICAgIGZvciAoY29uc3QgU3RyaW5nJiBv
cmlnaW4gOiBtX29yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gcGF0aEZvckRh
dGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIob3JpZ2luKTsKKyAgICBmb3IgKGF1dG8gb3JpZ2lu
IDogZGF0YWJhc2VPcmlnaW5zKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gZGF0YWJhc2VQYXRo
KG9yaWdpbik7CiAKICAgICAgICAgT3JpZ2luRGV0YWlscyBkZXRhaWxzOwotICAgICAgICBkZXRh
aWxzLm9yaWdpbklkZW50aWZpZXIgPSBvcmlnaW4uaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIGRl
dGFpbHMuY3JlYXRpb25UaW1lID0gZmlsZUNyZWF0aW9uVGltZShmaWxlUGF0aCk7Ci0gICAgICAg
IGRldGFpbHMubW9kaWZpY2F0aW9uVGltZSA9IGZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVQYXRo
KTsKKyAgICAgICAgZGV0YWlscy5vcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpOworICAgICAgICBkZXRhaWxzLmNyZWF0aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUNyZWF0aW9uVGltZShwYXRoKSk7
CisgICAgICAgIGRldGFpbHMubW9kaWZpY2F0aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vj
b25kcyhTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUocGF0aCkpOwog
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGRldGFpbHMpOwogICAgIH0KIApAQCAtMjA0
LDcgKzE1MCw3IEBAIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6CiAKIFN0cmluZyBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBj
b25zdAogewotICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fbG9jYWxT
dG9yYWdlRGlyZWN0b3J5KSkgeworICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VEaXJlY3RvcnlFeGlzdHMobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKSB7CiAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAl
cyIsIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAgICAgfQpAQCAtMjEzLDE3MiArMTU5LDcgQEAgU3RyaW5nIExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUp
IGNvbnN0CiAgICAgcGxhdGZvcm1NYXliZUV4Y2x1ZGVGcm9tQmFja3VwKCk7CiAjZW5kaWYKIAot
ICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9sb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIGZpbGVuYW1lKTsKLX0KLQotU3RyaW5nIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRh
dGFiYXNlUGF0aCgiU3RvcmFnZVRyYWNrZXIuZGIiKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRl
Z3kgb3BlbmluZ1N0cmF0ZWd5KQotewotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNl
UGF0aCgpOwotCi0gICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCkg
JiYgb3BlbmluZ1N0cmF0ZWd5ID09IFNraXBJZk5vbkV4aXN0ZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNlUGF0aC5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSBh
IFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBhIHNwZWNpZmljIHRocmVhZCwgd2UgaGF2ZSB0byBk
aXNhYmxlIHRocmVhZGluZyBjaGVja3MKLSAgICAvLyBldmVuIHRob3VnaCB3ZSBuZXZlciBhY2Nl
c3MgdGhlIGRhdGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMgc2ltdWx0YW5lb3VzbHkuCi0g
ICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0KLSAgICBpZiAobV9kYXRh
YmFzZS50YWJsZUV4aXN0cygiT3JpZ2lucyIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4g
VEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUuIik7Ci19Ci0KLXZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCi17
Ci0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7Ci0KLSAgICBpZiAo
bV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlc3VsdDsKLQotICAgICAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBtX29yaWdp
bnMuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKLQotICAgICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFk
IGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlVHJhY2tlckRhdGFiYXNlRnJvbUxvY2Fs
U3RvcmFnZURhdGFiYXNlRmlsZXMoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVz
KCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRocyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rv
cnkobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnksICIqLmxvY2Fsc3RvcmFnZSIpOwotCi0gICAgSGFz
aFNldDxTdHJpbmc+IG9yaWdpbnMobV9vcmlnaW5zKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gb3Jp
Z2luc0Zyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXRocy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgg
PSBwYXRoc1tpXTsKLQotICAgICAgICBpZiAoIXBhdGguZW5kc1dpdGgoIi5sb2NhbHN0b3JhZ2Ui
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IEZp
bGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShwYXRoKTsKLQotICAgICAgICBTdHJpbmcgb3JpZ2lu
SWRlbnRpZmllciA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sZW5ndGgoKSAtIHN0
cmxlbigiLmxvY2Fsc3RvcmFnZSIpKTsKLQotICAgICAgICBpZiAoIW1fb3JpZ2lucy5jb250YWlu
cyhvcmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGFkZERhdGFiYXNlV2l0aE9yaWdpbklk
ZW50aWZpZXIob3JpZ2luSWRlbnRpZmllciwgcGF0aCk7Ci0KLSAgICAgICAgb3JpZ2luc0Zyb21M
b2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9Ci0K
LSAgICBmb3IgKGF1dG8gaXQgPSBvcmlnaW5zLmJlZ2luKCksIGVuZCA9IG9yaWdpbnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIgPSAqaXQ7Ci0gICAgICAgIGlmIChvcmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmVtb3ZlRGF0YWJhc2VXaXRoT3Jp
Z2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgTG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgp
Ci17Ci0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShDcmVhdGVJZk5vbkV4aXN0ZW50KTsKLSAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVT
ICg/LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewot
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhl
IHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZVBhdGgpOwotCi0gICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZp
ZXIudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBtX29yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIp
OwotCi0gICAgLy8gRklYTUU6IFRlbGwgY2xpZW50cyB0aGF0IHRoZSBvcmlnaW4gd2FzIGFkZGVk
LgotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGF0YWJhc2VX
aXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0g
ICAgb3BlblRyYWNrZXJEYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcGF0aCA9IHBh
dGhGb3JEYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOwotICAg
IGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1FMaXRlU3RhdGVt
ZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyB3aGVy
ZSBvcmlnaW49PyIpOwotICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9m
IG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklk
ZW50aWZpZXIpOwotICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4g
JyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgp
OwotCi0gICAgbV9vcmlnaW5zLnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAobV9v
cmlnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gb3JpZ2lucyBsZWZ0
OyBkZWxldGUgdGhlIHRyYWNrZXIgZGF0YWJhc2UuCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKLSAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJE
YXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGVsbCBj
bGllbnRzIHRoYXQgdGhlIG9yaWdpbiB3YXMgcmVtb3ZlZC4KLX0KLQotU3RyaW5nIExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6cGF0aEZvckRhdGFiYXNlV2l0aE9yaWdpbklkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50
IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVS
RSBvcmlnaW49PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2Yg
cGF0aCBmb3Igb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcGF0aFN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLQotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVt
ZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7
CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1Bh
dGgobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIGZpbGVuYW1lKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaAppbmRleCA2M2RlOTZmNjlj
MmViNDA1NGUxMmE2MTQwOWQzNTcyYmE4YWFkNTY1Li43NjIxYjRiYTY1ZDIwOTUzMWQwMmEzZTJl
NmI3NzdhNDRiOWI4NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgKQEAgLTI1
LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURh
dGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KQEAgLTM1LDExICszNSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBTZWN1cml0eU9yaWdpbkRh
dGE7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgTG9jYWxTdG9yYWdlRGV0YWls
czsKQEAgLTYyLDggKzU3LDggQEAgcHVibGljOgogCiAgICAgc3RydWN0IE9yaWdpbkRldGFpbHMg
ewogICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllcjsKLSAgICAgICAgc3RkOjpvcHRpb25h
bDx0aW1lX3Q+IGNyZWF0aW9uVGltZTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx0aW1lX3Q+IG1v
ZGlmaWNhdGlvblRpbWU7CisgICAgICAgIFdhbGxUaW1lIGNyZWF0aW9uVGltZTsKKyAgICAgICAg
V2FsbFRpbWUgbW9kaWZpY2F0aW9uVGltZTsKICAgICB9OwogICAgIFZlY3RvcjxPcmlnaW5EZXRh
aWxzPiBvcmlnaW5EZXRhaWxzKCk7CiAKQEAgLTcxLDI3ICs2NiwxNSBAQCBwcml2YXRlOgogICAg
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcihSZWY8V29ya1F1ZXVlPiYmLCBjb25zdCBTdHJp
bmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7CiAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpIGNvbnN0OwotICAgIFN0cmluZyB0cmFja2VyRGF0YWJhc2VQ
YXRoKCkgY29uc3Q7CiAKICAgICBlbnVtIERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IHsKICAgICAg
ICAgQ3JlYXRlSWZOb25FeGlzdGVudCwKICAgICAgICAgU2tpcElmTm9uRXhpc3RlbnQKICAgICB9
OwotICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7
Ci0KLSAgICB2b2lkIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVU
cmFja2VyRGF0YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpOwotCi0gICAgdm9p
ZCBhZGREYXRhYmFzZVdpdGhPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwotICAgIHZvaWQgcmVtb3ZlRGF0
YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
OwotICAgIFN0cmluZyBwYXRoRm9yRGF0YWJhc2VXaXRoT3JpZ2luSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9xdWV1
ZTsKICAgICBTdHJpbmcgbV9sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAKLSAgICBXZWJDb3JlOjpT
UUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX29yaWdpbnM7
Ci0KICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBwbGF0Zm9ybU1heWJlRXhjbHVkZUZyb21C
YWNrdXAoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4IDg0MjNiOTkzNDVmOGQ5MTE3MDdlMGY4YjVjNWZl
NmFkMDQwZTIzMzcuLmI2YmEwYWE1NjQ4YmI0Y2ZiNDRjNmFmMjNiMjNiYmNmNTQwYzdiMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>