<?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>215379</bug_id>
          
          <creation_ts>2020-08-11 09:12:12 -0700</creation_ts>
          <short_desc>Implement HTTPServer for API tests in c++</short_desc>
          <delta_ts>2022-03-07 15:26:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Takashi Komori">takashi.komori</reporter>
          <assigned_to name="Takashi Komori">takashi.komori</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>chris.reid</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>takashi.komori</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1679419</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-08-11 09:12:12 -0700</bug_when>
    <thetext>For testing Curl port we should have a http server which works for API tests, but we don&apos;t have.
Mac port has http server(cocoa/HTTPServer.mm), but we can not use it on wincairo.
So we have to make new HTTPServer in c++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679427</commentid>
    <comment_count>1</comment_count>
      <attachid>406386</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-08-11 09:29:01 -0700</bug_when>
    <thetext>Created attachment 406386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679428</commentid>
    <comment_count>2</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-08-11 09:30:34 -0700</bug_when>
    <thetext>HTTPServer.cpp is implemented by TCPServer.cpp, so we can use this new server on other ports by tweaking TCPServer.
And the interface of HTTPServer.cpp is not completely same as mac port&apos;s (HTTPServer.mm)  but is designed to resemble.
We might be able to utilize the new server as common server for API testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679479</commentid>
    <comment_count>3</comment_count>
      <attachid>406386</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 11:24:04 -0700</bug_when>
    <thetext>Comment on attachment 406386
Patch

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

I&apos;m happy to see interest in HTTPServer.  However, I think this needs a slightly better direction to work well with a multi-platform project like this.
TCPServer right now is too picky.  It uses std::threads for listening and sending/receiving on a connection.  If the exact request/response pairs are not perfect, it hangs.  That&apos;s why I wrote HTTPServer, which currently uses Apple&apos;s network framework, which isn&apos;t available on other platforms.  I think a good approach would be to abstract out nw_connection_t and other platform-specific parts of HTTPServer, make an implementation that uses select and no std::thread (just the main run loop), and leave TCPServer exactly how it is (except maybe taking shared pieces from it like the test certificates).  I&apos;m working to move the TCPServer tests to HTTPServer, and having a non-Apple implementation would help.

&gt; Tools/TestWebKitAPI/TCPServer.cpp:238
&gt; +                auto rc = select(listeningSocket + 1, &amp;readfd, nullptr, nullptr, &amp;timeout);

To be consistent, I think this should be ::select

&gt; Tools/TestWebKitAPI/curl/HTTPServer.cpp:106
&gt; +template&lt;typename T&gt;  void HTTPServer::respondToRequests(T connectionHandle)

This is mostly duplicate code.

&gt; Tools/TestWebKitAPI/curl/HTTPServer.h:37
&gt; +class HTTPServer {

There should be one class HTTPServer, and its platform parts should be abstracted instead of this.

&gt; Tools/TestWebKitAPI/curl/HTTPServer.h:56
&gt; +struct HTTPServer::HTTPResponse {

This is also duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681093</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-18 09:14:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/67331266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681586</commentid>
    <comment_count>5</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-08-19 19:51:20 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Comment on attachment 406386 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406386&amp;action=review
&gt; 
&gt; I&apos;m happy to see interest in HTTPServer.  However, I think this needs a
&gt; slightly better direction to work well with a multi-platform project like
&gt; this.
&gt; TCPServer right now is too picky.  It uses std::threads for listening and
&gt; sending/receiving on a connection.  If the exact request/response pairs are
&gt; not perfect, it hangs.  That&apos;s why I wrote HTTPServer, which currently uses
&gt; Apple&apos;s network framework, which isn&apos;t available on other platforms.  I
&gt; think a good approach would be to abstract out nw_connection_t and other
&gt; platform-specific parts of HTTPServer, make an implementation that uses
&gt; select and no std::thread (just the main run loop), and leave TCPServer
&gt; exactly how it is (except maybe taking shared pieces from it like the test
&gt; certificates).  I&apos;m working to move the TCPServer tests to HTTPServer, and
&gt; having a non-Apple implementation would help.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/TCPServer.cpp:238
&gt; &gt; +                auto rc = select(listeningSocket + 1, &amp;readfd, nullptr, nullptr, &amp;timeout);
&gt; 
&gt; To be consistent, I think this should be ::select
&gt; 
&gt; &gt; Tools/TestWebKitAPI/curl/HTTPServer.cpp:106
&gt; &gt; +template&lt;typename T&gt;  void HTTPServer::respondToRequests(T connectionHandle)
&gt; 
&gt; This is mostly duplicate code.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/curl/HTTPServer.h:37
&gt; &gt; +class HTTPServer {
&gt; 
&gt; There should be one class HTTPServer, and its platform parts should be
&gt; abstracted instead of this.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/curl/HTTPServer.h:56
&gt; &gt; +struct HTTPServer::HTTPResponse {
&gt; 
&gt; This is also duplicate code.

I agree TCPServer is not good base for the test server.
We started to re-design new server for API test.

Thank you for your review and comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691277</commentid>
    <comment_count>6</comment_count>
      <attachid>409506</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-09-23 15:19:12 -0700</bug_when>
    <thetext>Created attachment 409506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691279</commentid>
    <comment_count>7</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-09-23 15:22:50 -0700</bug_when>
    <thetext>In this patch we tried to abstract the concept of connection (Connection.h), and made HTTPServerPOSIX.
The Connection just has interfaces send(), receiveBytes(), terminate() and something and it is kind of wrapper of unix socket but it can handle tls connection.
We implemented this in ConnectionPOSIX.cpp for win port by using winsock2.h, if we use socket we can easily implement for other ports.

Actually, we just re-wrote the combination of TCPServer and PlatformSOcket in the patch before, so our new HTTPServerPOSIX doesn&apos;t have enough functions which HTTPSver.mm has.
But we can add those functionality which are implemented by nw_connection_t into HTTPServerPOSIX.cpp, so this patch is good starting point I think.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691368</commentid>
    <comment_count>8</comment_count>
      <attachid>409506</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 20:03:13 -0700</bug_when>
    <thetext>Comment on attachment 409506
Patch

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

This is a little better in that it doesn&apos;t directly use TCPServer, but it&apos;s still not a well-abstracted multi-platform server.  I was thinking something like this:

class Connection {
    ...
private:
#if PLATFORM(COCOA)
    RetainPtr&lt;nw_connection_t&gt; m_connection;
#else
    int socket { 0 };
    uint16_t m_port { 0 };
    std::unique_ptr&lt;SSL, deleter&lt;SSL&gt;&gt; m_ssl;
#endif
};

etc.

&gt; Tools/TestWebKitAPI/HTTPServerPOSIX.h:68
&gt; +struct HTTPServerPOSIX::HTTPResponse {

This is an entirely duplicate class.  We should move things around to reuse the same class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691369</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 20:08:51 -0700</bug_when>
    <thetext>Also, using multiple threads was one of the mistakes of TCPServer.  We should use the main run loop if we can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691830</commentid>
    <comment_count>10</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-09-25 02:51:39 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Also, using multiple threads was one of the mistakes of TCPServer.  We
&gt; should use the main run loop if we can.

I think we can remove multiple threads from Connection for WinCairo.
We will fix that, and rethink about abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786692</commentid>
    <comment_count>11</comment_count>
      <attachid>436269</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2021-08-24 02:15:02 -0700</bug_when>
    <thetext>Created attachment 436269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786694</commentid>
    <comment_count>12</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2021-08-24 02:21:43 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Also, using multiple threads was one of the mistakes of TCPServer.  We
&gt; should use the main run loop if we can.

We made a http server single thread version using run loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786695</commentid>
    <comment_count>13</comment_count>
      <attachid>436271</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2021-08-24 02:24:46 -0700</bug_when>
    <thetext>Created attachment 436271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786757</commentid>
    <comment_count>14</comment_count>
      <attachid>436271</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-08-24 09:21:50 -0700</bug_when>
    <thetext>Comment on attachment 436271
Patch

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

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:37
&gt; +static void initializeSSLLibrary()
&gt; +{
&gt; +#if HAVE(SSL)

I think HAVE(SSL) can go outside the declaration of initializeSSLLibrary, or we would have an unused function if we don&apos;t have SSL.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:71
&gt; +        X509_free(x509);

It would be nicer to use a smart pointer like I did with ssl::unique_ptr in TCPServer.cpp

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:128
&gt; +        while (sentTotal &lt; message.utf8().length()) {

I feel like each write call should be on a separate run loop iteration so that long messages can be read on the same run loop.  That also makes the CompletionHandler useful.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:169
&gt; +        completionHandler(WTFMove(result));

If the bytes aren&apos;t available immediately, this will be called with an empty Vector.  I think the intent was to call the completion handler whenever bytes are received and wait until they are.

&gt; Tools/TestWebKitAPI/GenericHTTPServer.cpp:73
&gt; +    result.append(&quot;Content-Length:&quot;);

This is basically duplicate code with HTTPResponse::serialize.  They should ideally be refactored to share common code.  A lot of this patch is duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789207</commentid>
    <comment_count>15</comment_count>
      <attachid>436989</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2021-08-31 20:15:21 -0700</bug_when>
    <thetext>Created attachment 436989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789209</commentid>
    <comment_count>16</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2021-08-31 20:33:43 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #14)
&gt; Comment on attachment 436271 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=436271&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:37
&gt; &gt; +static void initializeSSLLibrary()
&gt; &gt; +{
&gt; &gt; +#if HAVE(SSL)
&gt; 
&gt; I think HAVE(SSL) can go outside the declaration of initializeSSLLibrary, or
&gt; we would have an unused function if we don&apos;t have SSL.
&gt; 

Moved.

&gt; &gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:71
&gt; &gt; +        X509_free(x509);
&gt; 
&gt; It would be nicer to use a smart pointer like I did with ssl::unique_ptr in
&gt; TCPServer.cpp
&gt; 

Changed using smart pointer.

&gt; &gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:128
&gt; &gt; +        while (sentTotal &lt; message.utf8().length()) {
&gt; 
&gt; I feel like each write call should be on a separate run loop iteration so
&gt; that long messages can be read on the same run loop.  That also makes the
&gt; CompletionHandler useful.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:169
&gt; &gt; +        completionHandler(WTFMove(result));
&gt; 
&gt; If the bytes aren&apos;t available immediately, this will be called with an empty
&gt; Vector.  I think the intent was to call the completion handler whenever
&gt; bytes are received and wait until they are.
&gt; 

Fixed send/receive routines. Now the routines don&apos;t make other tasks wait when a big chunk coming.
And the receive routine call the completion handler immediately if bytes coming.

&gt; &gt; Tools/TestWebKitAPI/GenericHTTPServer.cpp:73
&gt; &gt; +    result.append(&quot;Content-Length:&quot;);
&gt; 
&gt; This is basically duplicate code with HTTPResponse::serialize.  They should
&gt; ideally be refactored to share common code.  A lot of this patch is
&gt; duplicate code.

Changed HTTPResponse to GenericHTTPResponse and removed duplicated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789903</commentid>
    <comment_count>17</comment_count>
      <attachid>436989</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-09-02 14:44:51 -0700</bug_when>
    <thetext>Comment on attachment 436989
Patch

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

&gt; Tools/ChangeLog:9
&gt; +            GenericHTTPServer: The server. It uses Connection which is abstracted socket.

Connection → GenericConnection ?

&gt; Tools/Scripts/webkitpy/port/win.py:201
&gt; +    API_TEST_BINARY_NAMES = [&apos;TestWTF.exe&apos;, &apos;TestWebCore.exe&apos;, &apos;TestWebKitLegacy.exe&apos;, &apos;TestWebKit.exe&apos;]

AppleWin doesn&apos;t enable WebKit2. Is this OK for AppleWin? What will happen for the build check?

&gt; Tools/TestWebKitAPI/GenericConnection.h:121
&gt; +

Remove this blank line.

&gt; Tools/TestWebKitAPI/GenericConnection.h:125
&gt; +

Ditto.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:53
&gt; +    auto certificate = WTF::makeUnique&lt;GenericCertificate&gt;();

Remove &quot;WTF::&quot;.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:67
&gt; +std::unique_ptr&lt;GenericPrivateKey&gt; GenericPrivateKey::createFromPEM(const String pem, const KeyType, const int)

What is this &quot;const int&quot; argument?

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:71
&gt; +    auto privateKey =  WTF::makeUnique&lt;GenericPrivateKey&gt;();

Remove &quot;WTF::&quot;.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:87
&gt; +    const int timeoutInUsec = 1*1000; // 1 millisecond

You need 1 millisecond? Did you try 0 second?
I think you should put whitespaces around &apos;*&apos; like &quot;1 * 1000&quot;. I don&apos;t think you need the variable timeoutInUsec.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:104
&gt; +    auto rc = ::select(fdMax + 1,

How about using poll instead of select? poll is modern than select.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:106
&gt; +        Socket::isValidSocket(writeSocket) ? &amp;fdsetWrite : nullptr,

I think you can simply this code by always initializing fdsetRead and fdsetWrite with FD_ZERO.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:123
&gt; +GenericConnection::GenericConnection()

You should remove if you don&apos;t need this.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:127
&gt; +GenericConnection::~GenericConnection()

Ditto.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:161
&gt; +    WTF::RunLoop::main().dispatchAfter(

Remove &quot;WTF::&quot;.

&gt; Tools/TestWebKitAPI/GenericConnectionPOSIX.cpp:203
&gt; +    Vector&lt;uint8_t&gt; result;

Allocate a Vector and shrink. Remove &apos;buffer&apos;.

Vector&lt;uint8_t&gt; result(bufferSize);
...
result.shrink(bytesRead);

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.mm:3
&gt; + bGen *

Remove &quot; bGen&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789923</commentid>
    <comment_count>18</comment_count>
      <attachid>436989</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-09-02 15:16:16 -0700</bug_when>
    <thetext>Comment on attachment 436989
Patch

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

&gt; Tools/TestWebKitAPI/GenericConnection.h:97
&gt; +class GenericConnection {

This is still not the unified code that should go in the repo.  In order to be properly abstracted, this should completely replace class Connection in HTTPServer.h and have the same interface.

&gt; Tools/TestWebKitAPI/GenericHTTPServer.h:43
&gt; +class GenericHTTPServer {

When this is properly abstracted, this should completely replace class HTTPServer in HTTPServer.h and have the same interface, except the function that returns a NSURLRequest is platform-specific.  I designed those classes to be able to be implemented on other platforms as they are.
We also don&apos;t need &quot;Generic&quot; prefix on all the class names.

&gt; Tools/TestWebKitAPI/cocoa/GenericConnectionCocoa.mm:113
&gt; +#if 0

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836267</commentid>
    <comment_count>19</comment_count>
      <attachid>450596</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-01 17:46:48 -0800</bug_when>
    <thetext>Created attachment 450596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836273</commentid>
    <comment_count>20</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-01 17:57:47 -0800</bug_when>
    <thetext>We implemented HTTPServer and Connection classes as cocoa/HTTPServer.h declares.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836671</commentid>
    <comment_count>21</comment_count>
      <attachid>450596</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-02-02 15:43:31 -0800</bug_when>
    <thetext>Comment on attachment 450596
Patch

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

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:253
&gt; +Vector&lt;uint8_t&gt; HTTPResponse::serialize(IncludeContentLength includeContentLength) const

This still has duplicate code instead of nice abstractions that have platform-specific implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836852</commentid>
    <comment_count>22</comment_count>
      <attachid>450757</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-03 03:56:05 -0800</bug_when>
    <thetext>Created attachment 450757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836853</commentid>
    <comment_count>23</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-03 03:57:18 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #21)
&gt; Comment on attachment 450596 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450596&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:253
&gt; &gt; +Vector&lt;uint8_t&gt; HTTPResponse::serialize(IncludeContentLength includeContentLength) const
&gt; 
&gt; This still has duplicate code instead of nice abstractions that have
&gt; platform-specific implementations.

Because HTTPResponse class is platform independent, I think the best way is sharing the HTTPResponse::serialize in HTTPServer.mm
However, wincairo port can&apos;t use HTTPServer.mm, so in the latest patch we copied the function from HTTPServer.mm to HTTPServer.cpp
I&apos;m not sure the copy makes sense or not for fixing duplication in the comment, because it produced complete duplicated code.

Or, does this comment mean that we should fix whole implementation of HTTPResponse class and share code between mac and wincairo ports somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837022</commentid>
    <comment_count>24</comment_count>
      <attachid>450757</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-02-03 11:08:04 -0800</bug_when>
    <thetext>Comment on attachment 450757
Patch

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

This is starting to head in the right direction, but needs to go further in that direction before landing.

&gt; Tools/TestWebKitAPI/ConnectionListenerPOSIX.cpp:302
&gt; +TestWebKitAPI::SecurityIdentityPEM certificatePrivateKeyDefault()

HTTPServer::testCertificate() should be reused rather than adding more test keys.

&gt; Tools/TestWebKitAPI/Tests/WebKit/SimpleHTTPServer.cpp:231
&gt; +TEST(HTTPServer, SimpleHTTP)

We shouldn&apos;t need to test the server itself.  The server should be used in unit tests to test other things.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:56
&gt; +    HTTPServer(std::initializer_list&lt;std::pair&lt;String, HTTPResponse&gt;&gt;, Protocol = Protocol::Http, std::unique_ptr&lt;SecurityIdentity&gt;&amp;&amp; = nullptr, std::optional&lt;uint16_t&gt; port = std::nullopt);

This is soooooo much closer to a good platform abstraction than previous patches uploaded here.  This is the first one that looks remotely like anything I would be ok with.  But I think it would be even better if you used platform specific types for CertificateVerifier and RetainPtr&lt;SecIdentityRef&gt; rather than a different constructor on different platforms.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:65
&gt; +    URL url(const String&amp; path = { });

I think the default path should be consistent among the different platforms.
There&apos;s also nothing Windows specific about this code, so it should be in a shared location.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:91
&gt; +#if PLATFORM(COCOA)
&gt;      RetainPtr&lt;nw_listener_t&gt; m_listener;
&gt; +#elif PLATFORM(WIN)
&gt; +    ConnectionListener m_listener;
&gt; +#endif

Excellent

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:109
&gt; +    Socket::Socket socket() const;
&gt; +    SSL* ssl() const;

I don&apos;t think you should need to access the socket or SSL directly.  In the Cocoa implementation, a Connection is only given to the Function&lt;void(Connection)&gt; if it is valid.  Can your implementation do the same?

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:125
&gt; +    static void receiveBytesProcess(const Connection&amp;, CompletionHandler&lt;void(Vector&lt;uint8_t&gt;&amp;&amp;)&gt;&amp;&amp;);

Can these just be static functions in ConnectionPOSIX.cpp rather than static member functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842197</commentid>
    <comment_count>25</comment_count>
      <attachid>452165</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-16 02:29:31 -0800</bug_when>
    <thetext>Created attachment 452165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842200</commentid>
    <comment_count>26</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-02-16 02:36:14 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #24)
&gt; Comment on attachment 450757 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450757&amp;action=review
&gt; 
&gt; This is starting to head in the right direction, but needs to go further in
&gt; that direction before landing.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListenerPOSIX.cpp:302
&gt; &gt; +TestWebKitAPI::SecurityIdentityPEM certificatePrivateKeyDefault()
&gt; 
&gt; HTTPServer::testCertificate() should be reused rather than adding more test
&gt; keys.

Copied certificates and private keys defined in HTTPServer.mm and Challenge.mm
 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit/SimpleHTTPServer.cpp:231
&gt; &gt; +TEST(HTTPServer, SimpleHTTP)
&gt; 
&gt; We shouldn&apos;t need to test the server itself.  The server should be used in
&gt; unit tests to test other things.

Removed simple server tests.

&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:56
&gt; &gt; +    HTTPServer(std::initializer_list&lt;std::pair&lt;String, HTTPResponse&gt;&gt;, Protocol = Protocol::Http, std::unique_ptr&lt;SecurityIdentity&gt;&amp;&amp; = nullptr, std::optional&lt;uint16_t&gt; port = std::nullopt);
&gt; 
&gt; This is soooooo much closer to a good platform abstraction than previous
&gt; patches uploaded here.  This is the first one that looks remotely like
&gt; anything I would be ok with.  But I think it would be even better if you
&gt; used platform specific types for CertificateVerifier and
&gt; RetainPtr&lt;SecIdentityRef&gt; rather than a different constructor on different
&gt; platforms.

Renamed to SecIdentityRef.

&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:65
&gt; &gt; +    URL url(const String&amp; path = { });
&gt; 
&gt; I think the default path should be consistent among the different platforms.
&gt; There&apos;s also nothing Windows specific about this code, so it should be in a
&gt; shared location.

Moved to shared location.

&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:109
&gt; &gt; +    Socket::Socket socket() const;
&gt; &gt; +    SSL* ssl() const;
&gt; 
&gt; I don&apos;t think you should need to access the socket or SSL directly.  In the
&gt; Cocoa implementation, a Connection is only given to the
&gt; Function&lt;void(Connection)&gt; if it is valid.  Can your implementation do the
&gt; same?
&gt; 
&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:125
&gt; &gt; +    static void receiveBytesProcess(const Connection&amp;, CompletionHandler&lt;void(Vector&lt;uint8_t&gt;&amp;&amp;)&gt;&amp;&amp;);
&gt; 
&gt; Can these just be static functions in ConnectionPOSIX.cpp rather than static
&gt; member functions?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842365</commentid>
    <comment_count>27</comment_count>
      <attachid>452165</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-02-16 10:21:07 -0800</bug_when>
    <thetext>Comment on attachment 452165
Patch

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

&gt; Tools/TestWebKitAPI/ConnectionListener.h:102
&gt; +    ssl::unique_ptr&lt;EVP_PKEY&gt; m_privateKey { nullptr };
&gt; +    ssl::unique_ptr&lt;X509&gt; m_x509 { nullptr };

{ nullptr } unnecessary

&gt; Tools/TestWebKitAPI/ConnectionListener.h:131
&gt; +    ConnectionEntity(Socket::Socket socket, SSL* ssl)

ssl::unique_ptr&lt;SSL&gt;

&gt; Tools/TestWebKitAPI/ConnectionListener.h:142
&gt; +    SSL* m_ssl { nullptr };

ssl::unique_ptr&lt;SSL&gt; that calls SSL_free for you.  That&apos;ll be safer.

&gt; Tools/TestWebKitAPI/ConnectionListener.h:166
&gt; +    uint16_t m_port;

{ 0 };
uint16_t does not have a default constructor, so this is currently uninitialized memory.

&gt; Tools/TestWebKitAPI/ConnectionListenerPOSIX.cpp:184
&gt; +static std::optional&lt; std::pair&lt;Socket::Socket, uint16_t&gt; &gt; createListeningSocket(uint16_t targetPort)

unnecessary spaces

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:28
&gt; +#include &quot;cocoa/HTTPServer.h&quot;

We should probably move HTTPServer from cocoa to a non-platform-specific directory.

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:37
&gt; +struct HTTPServer::RequestData : public ThreadSafeRefCounted&lt;HTTPServer::RequestData,  WTF::DestructionThread::MainRunLoop&gt; {

basically duplicate code

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:188
&gt; +void HTTPServer::respondWithOK(Connection connection)

duplicate code.

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:221
&gt; +static String statusText(unsigned statusCode)

duplicate code.  This already exists as &quot;static ASCIILiteral statusText&quot;.  Please move that code to a shared location instead of adding another copy of the same thing.

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:252
&gt; +Vector&lt;uint8_t&gt; HTTPResponse::serialize(IncludeContentLength includeContentLength) const

This is still 100% duplicate code.  We don&apos;t want to have multiple copies of the same thing.  Instead of doing this, move the existing code to a shared location.
Please go through this whole patch, compare with the existing HTTPServer implementation, and move things to a shared location instead of adding another copy.

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:321
&gt; +    &quot;MIIFgDCCA2gCCQCKHiPRU5MQuDANBgkqhkiG9w0BAQsFADCBgTELMAkGA1UEBhMC&quot;

The point wasn&apos;t to copy the existing keys.  The point was to move the existing keys so that we don&apos;t have multiple copies of the same thing.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:56
&gt; +    HTTPServer(std::initializer_list&lt;std::pair&lt;String, HTTPResponse&gt;&gt;, Protocol = Protocol::Http, std::unique_ptr&lt;SecIdentityRef&gt;&amp;&amp; = nullptr, std::optional&lt;uint16_t&gt; port = std::nullopt);

Instead of adding a different constructor, please reuse the same constructor and make platform abstractions for the types that are currently platform specific.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:60
&gt; +    URL url(const String&amp; path = { }) const;

Why is the default path empty here but &quot;/&quot; on the request functions below?  I think they should all be the same.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:118
&gt; +    RefPtr&lt;ConnectionEntity&gt; m_connection { nullptr };

{ nullptr } is unnecessary here because RefPtr already has a default constructor.

&gt; Tools/TestWebKitAPI/win/PlatformSocketWin.cpp:32
&gt; +namespace TestWebKitAPI {
&gt; +namespace Socket {

nit: namespace TestWebKitAPI::Socket</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848548</commentid>
    <comment_count>28</comment_count>
      <attachid>453917</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-03-05 12:16:19 -0800</bug_when>
    <thetext>Created attachment 453917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848550</commentid>
    <comment_count>29</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2022-03-05 12:34:34 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #27)
&gt; Comment on attachment 452165 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452165&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListener.h:102
&gt; &gt; +    ssl::unique_ptr&lt;EVP_PKEY&gt; m_privateKey { nullptr };
&gt; &gt; +    ssl::unique_ptr&lt;X509&gt; m_x509 { nullptr };
&gt; 
&gt; { nullptr } unnecessary
&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListener.h:131
&gt; &gt; +    ConnectionEntity(Socket::Socket socket, SSL* ssl)
&gt; 
&gt; ssl::unique_ptr&lt;SSL&gt;
&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListener.h:142
&gt; &gt; +    SSL* m_ssl { nullptr };
&gt; 
&gt; ssl::unique_ptr&lt;SSL&gt; that calls SSL_free for you.  That&apos;ll be safer.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListener.h:166
&gt; &gt; +    uint16_t m_port;
&gt; 
&gt; { 0 };
&gt; uint16_t does not have a default constructor, so this is currently
&gt; uninitialized memory.

Fixed.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/ConnectionListenerPOSIX.cpp:184
&gt; &gt; +static std::optional&lt; std::pair&lt;Socket::Socket, uint16_t&gt; &gt; createListeningSocket(uint16_t targetPort)
&gt; 
&gt; unnecessary spaces
&gt;

Removed.
 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:28
&gt; &gt; +#include &quot;cocoa/HTTPServer.h&quot;
&gt; 
&gt; We should probably move HTTPServer from cocoa to a non-platform-specific
&gt; directory.

Moved.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:37
&gt; &gt; +struct HTTPServer::RequestData : public ThreadSafeRefCounted&lt;HTTPServer::RequestData,  WTF::DestructionThread::MainRunLoop&gt; {
&gt; 
&gt; basically duplicate code
&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:188
&gt; &gt; +void HTTPServer::respondWithOK(Connection connection)
&gt; 
&gt; duplicate code.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:221
&gt; &gt; +static String statusText(unsigned statusCode)
&gt; 
&gt; duplicate code.  This already exists as &quot;static ASCIILiteral statusText&quot;. 
&gt; Please move that code to a shared location instead of adding another copy of
&gt; the same thing.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:252
&gt; &gt; +Vector&lt;uint8_t&gt; HTTPResponse::serialize(IncludeContentLength includeContentLength) const
&gt; 
&gt; This is still 100% duplicate code.  We don&apos;t want to have multiple copies of
&gt; the same thing.  Instead of doing this, move the existing code to a shared
&gt; location.
&gt; Please go through this whole patch, compare with the existing HTTPServer
&gt; implementation, and move things to a shared location instead of adding
&gt; another copy.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/HTTPServer.cpp:321
&gt; &gt; +    &quot;MIIFgDCCA2gCCQCKHiPRU5MQuDANBgkqhkiG9w0BAQsFADCBgTELMAkGA1UEBhMC&quot;
&gt;

Moved duplicated code to HTTPServerCommon.cpp

&gt; The point wasn&apos;t to copy the existing keys.  The point was to move the
&gt; existing keys so that we don&apos;t have multiple copies of the same thing.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:56
&gt; &gt; +    HTTPServer(std::initializer_list&lt;std::pair&lt;String, HTTPResponse&gt;&gt;, Protocol = Protocol::Http, std::unique_ptr&lt;SecIdentityRef&gt;&amp;&amp; = nullptr, std::optional&lt;uint16_t&gt; port = std::nullopt);
&gt; 
&gt; Instead of adding a different constructor, please reuse the same constructor
&gt; and make platform abstractions for the types that are currently platform
&gt; specific.
&gt; 

I agree reusing constructor is the best, but for me, it does not seem to be good using RetainPtr on windows port because our SecIdentityRef is not CF object.
Do we need changing constructor arguments for both platform for abstraction?
In other words, should we change the constructor argument RetainPtr&lt;SecIdentityRef&gt;&amp;&amp; to something better?

&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:60
&gt; &gt; +    URL url(const String&amp; path = { }) const;
&gt; 
&gt; Why is the default path empty here but &quot;/&quot; on the request functions below? 
&gt; I think they should all be the same.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/cocoa/HTTPServer.h:118
&gt; &gt; +    RefPtr&lt;ConnectionEntity&gt; m_connection { nullptr };
&gt; 
&gt; { nullptr } is unnecessary here because RefPtr already has a default
&gt; constructor.
&gt; 

Fixed.

&gt; &gt; Tools/TestWebKitAPI/win/PlatformSocketWin.cpp:32
&gt; &gt; +namespace TestWebKitAPI {
&gt; &gt; +namespace Socket {
&gt; 
&gt; nit: namespace TestWebKitAPI::Socket

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848995</commentid>
    <comment_count>30</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-03-07 15:18:43 -0800</bug_when>
    <thetext>(In reply to Takashi Komori from comment #29)
&gt; I agree reusing constructor is the best, but for me, it does not seem to be
&gt; good using RetainPtr on windows port because our SecIdentityRef is not CF
&gt; object.
&gt; Do we need changing constructor arguments for both platform for abstraction?
&gt; In other words, should we change the constructor argument
&gt; RetainPtr&lt;SecIdentityRef&gt;&amp;&amp; to something better?
Yes, change the constructor argument from RetainPtr to something that contains a RetainPtr on Cocoa platforms and something conceptually equivalent on non-Cocoa platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848997</commentid>
    <comment_count>31</comment_count>
      <attachid>453917</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-03-07 15:26:58 -0800</bug_when>
    <thetext>Comment on attachment 453917
Patch

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

&gt; Tools/TestWebKitAPI/ConnectionListener.h:99
&gt; +class SecIdentityRef {

This isn&apos;t a great name.  It is a class that represents similar information to what a SecIdentityRef points to on Cocoa platforms.  How about just &quot;Identity&quot;?

&gt; Tools/TestWebKitAPI/ConnectionListener.h:114
&gt; +class SecurityIdentityPEM {

Do you need this AND what is currently named SecIdentityRef?  They are kind of two classes with the same function.

&gt; Tools/TestWebKitAPI/ConnectionListener.h:132
&gt; +    int m_bitLength { 0 };

nit: unsigned or size_t

&gt; Tools/TestWebKitAPI/ConnectionListener.h:189
&gt; +    bool complete { false };

I think it would be better to have parseHTTPRequest return a std::optional&lt;HTTPRequest&gt; than to have this in the struct and require callers to remember to check it.

&gt; Tools/TestWebKitAPI/ConnectionPOSIX.cpp:130
&gt; +    }

else?
We still need to call completionHandler.

&gt; Tools/TestWebKitAPI/HTTPServer.cpp:148
&gt; +    String pemEncodedPrivateKey(&quot;&quot;

This should be moved instead of copied.  We don&apos;t want to introduce duplicate copies of things like this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406386</attachid>
            <date>2020-08-11 09:29:01 -0700</date>
            <delta_ts>2020-09-23 15:19:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20200812012135.patch</filename>
            <type>text/plain</type>
            <size>59186</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NDg1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWI1NWJiMGQyNmU0NTNlNzFiM2E1NzQ1MTVjNmUwMDQz
NzUwMDU4NS4uNmRkMDRkNjQwZmU1NWM1OWEyNjc5ODI5NmVkZWEzYjZkYzkyYzEyMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDIwLTA4LTExICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29t
PgorCisgICAgICAgIEltcGxlbWVudCBIVFRQU2VydmVyIGZvciBBUEkgdGVzdHMgaW4gYysrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
YSBodHRwKHMpIHNlcnZlciBpbiBjKysuCisgICAgICAgIFRoaXMgc2VydmVyIGlzIGltcGxlbWVu
dGVkIGJhc2VkIG9uIFRDUFNlcnZlci5jcHAgYW5kIHVzZWQgZm9yIEFQSSB0ZXN0cy4KKyAgICAg
ICAgV2UgY2FuIHNldCBhcmJpdGFyeSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSB0ZXN0IHNlcnZlci4K
KworICAgICAgICBUZXN0czogSFRUUFNlcnZlci5TaW1wbGVIVFRQU2VydmVyCisgICAgICAgICAg
ICAgICBIVFRQU2VydmVyLlNpbXBsZUhUVFBTU2VydmVyCisgICAgICAgICAgICAgICBIVFRQU2Vy
dmVyLkhUVFBTU2VydmVyV2l0aENlcnQKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZv
cm1Tb2NrZXQuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tl
dFBPU0lYLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmluaXRp
YWxpemUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojpzb2NrZXQpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojppc1ZhbGlkU29ja2V0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlNvY2tldDo6YWNjZXB0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tl
dDo6c2h1dGRvd24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpjbG9zZSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnJlYWQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6U29ja2V0Ojp3cml0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdp
bi5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1NvdXJjZXMudHh0OgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRl
bGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2Vy
dmVyOjpUQ1BTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpzdGFy
dFNlY3VyZUNvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjps
aXN0ZW5Gb3JDb25uZWN0aW9ucyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6
On5UQ1BTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpzdG9wKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rlbik6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnJlYWQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VENQU2VydmVyOjp3cml0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BT
ZXJ2ZXI6OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRDUFNlcnZlcjo6ZGVmYXVsdENlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRDUFNlcnZlcjo6ZGVmYXVsdFByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VENQU2VydmVyOjpjZXJ0aWZpY2F0ZURFUik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
Q1BTZXJ2ZXI6OmNlcnRpZmljYXRlUEVNKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNl
cnZlcjo6cHJpdmF0ZUtleVBFTSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIu
aDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0hUVFBTZXJ2ZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1cmw6OmNyZWF0ZVN0cmluZyk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpTZXJ2ZXJUZXN0ZXI6OlNlcnZlclRlc3Rl
cik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpTZXJ2ZXJUZXN0ZXI6OmxvYWQpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6U2VydmVyVGVzdGVyOjpkaWRGYWlsTG9hZCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpTZXJ2ZXJUZXN0ZXI6OmRpZFJlY2VpdmVT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1
cmw6OlNlcnZlclRlc3Rlcjo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1
cmw6OlNlcnZlclRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3IpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Q3VybDo6U2VydmVyVGVzdGVyOjpsb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1cmw6OlNlcnZlclRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJy
b3JEZXNjcmlwdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpTZXJ2ZXJUZXN0
ZXI6OnRpdGxlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1cmw6OlRFU1QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6Y2VydGlmaWNhdGVQcml2YXRlS2V5UlNBKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb3h5Lm1tOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBT
ZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhU
VFBTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6fkhUVFBTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6dXJsIGNvbnN0KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBvcnQgY29uc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6c3RhdHVzVGV4dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQ
U2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jdXJs
L0hUVFBTZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVy
OjpIVFRQUmVzcG9uc2U6OkhUVFBSZXNwb25zZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS93
aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlNvY2tldDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNv
Y2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6U29ja2V0OjpzaHV0ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2Nr
ZXQ6OmNsb3NlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OndyaXRlKToKKwogMjAyMC0wOC0xMCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1eGlsaWFyeVByb2Nlc3M6OmRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSgpIGZvciBXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xs
ZXJBY3Rpb24gSVBDCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29j
a2V0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWQxYWEwOWE2OTUxOWQ0ZWVlNjFjMTk5YTUyMDY1YWZmYjc5YzU3MgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgT1MoV0lORE9XUykKKyNpbmNs
dWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNw
YWNlIFNvY2tldCB7CisKKyNpZiBPUyhXSU5ET1dTKQordXNpbmcgU29ja2V0ID0gU09DS0VUOwor
I2Vsc2UKK3VzaW5nIFNvY2tldCA9IGludDsKKyNkZWZpbmUgU09DS0VUX0VSUk9SIC0xCisjZW5k
aWYKKwordm9pZCBpbml0aWFsaXplKCk7CitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0
eXBlLCBpbnQgcHJvdG9jb2wpOworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCk7CitTb2NrZXQg
YWNjZXB0KFNvY2tldCk7CitpbnQgc2h1dGRvd24oU29ja2V0KTsKK2ludCBjbG9zZShTb2NrZXQp
OworaW50IHJlYWQoU29ja2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CitpbnQgd3Jp
dGUoU29ja2V0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CisKK30gLy8gbmFt
ZXNwYWNlIFNvY2tldAorfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lYLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXRQT1NJWC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQyNTY4MDdmMDdk
ZmI4ZGQ3NGQzOGQ5MWQxNmRlNjY3YmY0ODhlNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXRQT1NJWC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2Nr
ZXQuaCIKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisK
K3ZvaWQgaW5pdGlhbGl6ZSgpCit7Cit9CisKK1NvY2tldCBzb2NrZXQoaW50IGRvbWFpbiwgaW50
IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKyAgICByZXR1cm4gOjpzb2NrZXQoZG9tYWluLCB0eXBl
LCBwcm90b2NvbCk7Cit9CisKK2Jvb2wgaXNWYWxpZFNvY2tldChTb2NrZXQgc29ja2V0KQorewor
ICAgIHJldHVybiBzb2NrZXQgPj0gMDsKK30KKworU29ja2V0IGFjY2VwdChTb2NrZXQgc29ja2V0
KQoreworICAgIHJldHVybiA6OmFjY2VwdChzb2NrZXQsIG51bGxwdHIsIG51bGxwdHIpOworfQor
CitpbnQgc2h1dGRvd24oU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpzaHV0ZG93bihz
b2NrZXQsIFNIVVRfUkRXUik7Cit9CisKK2ludCBjbG9zZShTb2NrZXQgc29ja2V0KQoreworICAg
IHJldHVybiA6OmNsb3NlKHNvY2tldCk7Cit9CisKK2ludCByZWFkKFNvY2tldCBzb2NrZXQsIHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnJlYWQoc29ja2V0LCBi
dWZmZXIsIGNvdW50KTsKK30KKworaW50IHdyaXRlKFNvY2tldCBzb2NrZXQsIGNvbnN0IHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OndyaXRlKHNvY2tldCwgYnVm
ZmVyLCBjb3VudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFNvY2tldAorfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdp
bi5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggM2Q2
MTgwMTQ1ZGQzN2Q3MjdhZWI0ZjMyZmY4NTM0NDJjZWIwZTU4YS4uYWQwNTgyYzViMDBmNTZmYWEz
NDIyZjk5MGY2YjY1Yzc2YzliMTc4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNt
YWtlCkBAIC0xMjcsNyArMTI3LDkgQEAgaWYgKEVOQUJMRV9XRUJLSVQpCiAKICAgICBsaXN0KEFQ
UEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKICAgICAgICAgJHt0ZXN0X21haW5fU09VUkNFU30KKyAg
ICAgICAgVENQU2VydmVyLmNwcAogCisgICAgICAgIHdpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAK
ICAgICAgICAgd2luL1BsYXRmb3JtVXRpbGl0aWVzV2luLmNwcAogICAgICAgICB3aW4vUGxhdGZv
cm1XZWJWaWV3V2luLmNwcAogICAgICAgICB3aW4vVXRpbGl0aWVzV2luLmNwcApAQCAtMTM2LDYg
KzEzOCw5IEBAIGlmIChFTkFCTEVfV0VCS0lUKQogICAgIGlmICgke1dURl9QTEFURk9STV9XSU5f
Q0FJUk99KQogICAgICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKICAgICAgICAg
ICAgIFRlc3RzL1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHAKKyAgICAgICAgICAgIFRlc3Rz
L1dlYktpdC9jdXJsL0hUVFBTZXJ2ZXIuY3BwCisKKyAgICAgICAgICAgIGN1cmwvSFRUUFNlcnZl
ci5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvU291cmNlcy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXMudHh0Cmlu
ZGV4IGMzYWE0YmYyZjA3MzJmNGQwZTAzMTM4NjA5NDEzODJiODY4NTA2YTEuLmUxNzllNTM4NGE2
MmJlZTc2NjE0OWM0ZTYyNjRhNTVkNjFjNzUwOTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvU291cmNlcy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Tb3VyY2VzLnR4dApA
QCAtMjIsNyArMjIsNyBAQAogLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBK
YXZhU2NyaXB0VGVzdC5jcHAKK1BsYXRmb3JtU29ja2V0UE9TSVguY3BwCiBQbGF0Zm9ybVV0aWxp
dGllcy5jcHAKIFRDUFNlcnZlci5jcHAKIFRlc3RzQ29udHJvbGxlci5jcHAKLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UQ1BTZXJ2ZXIuY3BwCmluZGV4IDgyNGJiMDMwNzA1YzgyMTE4YzBjZjEyNTk2ODlkNzM1MThi
MjczYTQuLmU4YzQzZTdlNmI3ZmRjYmExM2ExOWJlY2FmNjc5OGEwMmNkZjM5YmEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1RDUFNlcnZlci5jcHAKQEAgLTI2LDE0ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlRDUFNlcnZlci5oIgogCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgog
I2luY2x1ZGUgPHRocmVhZD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAotI2lmIEhBVkUoU1NMKQot
CisjaWYgSEFWRShTU0wpICYmICFVU0UoT1BFTlNTTCkKICNkZWZpbmUgU1RBQ0tfT0YodHlwZSkg
c3RydWN0IHN0YWNrX3N0XyMjdHlwZQogCiBleHRlcm4gIkMiIHsKQEAgLTQ3LDcgKzQzLDYgQEAg
ZW51bSBzc2xfdmVyaWZ5X3Jlc3VsdF90IHsKIHN0cnVjdCBCSU87CiBzdHJ1Y3QgQ1JZUFRPX0JV
RkZFUjsKIHN0cnVjdCBTU0xfQ1RYOwotc3RydWN0IEVWUF9QS0VZOwogc3RydWN0IFNTTF9NRVRI
T0Q7CiBzdHJ1Y3QgU1NMX1BSSVZBVEVfS0VZX01FVEhPRDsKIHN0cnVjdCBfU1RBQ0s7CkBAIC01
NywxMCArNTIsMTIgQEAgaW50IEJJT19mcmVlKEJJTyopOwogaW50IFNTTF9mcmVlKFNTTCopOwog
aW50IFNTTF9DVFhfZnJlZShTU0xfQ1RYKik7CiBpbnQgRVZQX1BLRVlfZnJlZShFVlBfUEtFWSop
OworaW50IFg1MDlfZnJlZShYNTA5Kik7CiBpbnQgU1NMX2xpYnJhcnlfaW5pdCgpOwogY29uc3Qg
U1NMX01FVEhPRCogVExTX3dpdGhfYnVmZmVyc19tZXRob2QoKTsKIEJJTyogQklPX25ld19tZW1f
YnVmKGNvbnN0IHZvaWQqLCBpbnQpOwogRVZQX1BLRVkqIFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5
KEJJTyosIEVWUF9QS0VZKiosIHBlbV9wYXNzd29yZF9jYiosIHZvaWQqKTsKK1g1MDkqIFBFTV9y
ZWFkX2Jpb19YNTA5KEJJTyosIFg1MDkqKiwgcGVtX3Bhc3N3b3JkX2NiKiwgdm9pZCopOwogU1NM
X0NUWCogU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCopOwogU1NMKiBTU0xfbmV3KFNTTF9D
VFgqKTsKIGludCBTU0xfYWNjZXB0KFNTTCopOwpAQCAtODEsNyArNzgsNiBAQCBjb25zdCBTVEFD
S19PRihDUllQVE9fQlVGRkVSKSAqU1NMX2dldDBfcGVlcl9jZXJ0aWZpY2F0ZXMoY29uc3QgU1NM
Kik7CiB2b2lkIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uKFNTTF9DVFgqLCB1aW50MTZf
dCk7CiAjZGVmaW5lIFNTTF9WRVJJRllfUEVFUiAweDAxCiAjZGVmaW5lIFNTTF9WRVJJRllfRkFJ
TF9JRl9OT19QRUVSX0NFUlQgMHgwMgotCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIHNpemVf
dCBza19DUllQVE9fQlVGRkVSX251bShjb25zdCBTVEFDS19PRihDUllQVE9fQlVGRkVSKSAqc2sp
IHsgcmV0dXJuIHNrX251bSgoY29uc3QgX1NUQUNLICopc2spOyB9CkBAIC05MSw3ICs4Nyw2IEBA
IGlubGluZSBDUllQVE9fQlVGRkVSKiBza19DUllQVE9fQlVGRkVSX3ZhbHVlKGNvbnN0IFNUQUNL
X09GKENSWVBUT19CVUZGRVIpICpzaywKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogI2lm
IEhBVkUoU1NMKQotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBkZWxldGVyOwogdGVtcGxhdGU8
PiBzdHJ1Y3QgZGVsZXRlcjxCSU8+IHsKICAgICB2b2lkIG9wZXJhdG9yKCkoQklPKiBiaW8pCiAg
ICAgewpAQCAtMTE2LDcyICsxMTEsNTUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgZGVsZXRlcjxFVlBf
UEtFWT4gewogICAgICAgICBFVlBfUEtFWV9mcmVlKGtleSk7CiAgICAgfQogfTsKK3RlbXBsYXRl
PD4gc3RydWN0IGRlbGV0ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiBrZXkp
CisgICAgeworICAgICAgICBYNTA5X2ZyZWUoa2V5KTsKKyAgICB9Cit9OworI2lmICFVU0UoT1BF
TlNTTCkKIHRlbXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8Q1JZUFRPX0JVRkZFUj4gewogICAgIHZv
aWQgb3BlcmF0b3IoKShDUllQVE9fQlVGRkVSKiBidWZmZXIpCiAgICAgewogICAgICAgICBDUllQ
VE9fQlVGRkVSX2ZyZWUoYnVmZmVyKTsKICAgICB9CiB9OwotbmFtZXNwYWNlIHNzbCB7Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgdW5pcXVlX3B0ciA9IHN0ZDo6dW5pcXVlX3B0cjxULCBk
ZWxldGVyPFQ+PjsKLX0KKyNlbmRpZgogI2VuZGlmIC8vIEhBVkUoU1NMKQogCi1UQ1BTZXJ2ZXI6
OlRDUFNlcnZlcihGdW5jdGlvbjx2b2lkKFNvY2tldCk+JiYgY29ubmVjdGlvbkhhbmRsZXIsIHNp
emVfdCBjb25uZWN0aW9ucykKK1RDUFNlcnZlcjo6VENQU2VydmVyKEZ1bmN0aW9uPHZvaWQoU29j
a2V0OjpTb2NrZXQpPiYmIGNvbm5lY3Rpb25IYW5kbGVyLCBzaXplX3QgY29ubmVjdGlvbnMpCiAg
ICAgOiBtX2Nvbm5lY3Rpb25IYW5kbGVyKFdURk1vdmUoY29ubmVjdGlvbkhhbmRsZXIpKQogewor
ICAgIFNvY2tldDo6aW5pdGlhbGl6ZSgpOwogICAgIGxpc3RlbkZvckNvbm5lY3Rpb25zKGNvbm5l
Y3Rpb25zKTsKIH0KIAogI2lmIEhBVkUoU1NMKQotdm9pZCBUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJl
Q29ubmVjdGlvbihTb2NrZXQgc29ja2V0LCBGdW5jdGlvbjx2b2lkKFNTTCopPiYmIHNlY3VyZUNv
bm5lY3Rpb25IYW5kbGVyLCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwgT3B0aW9uYWw8
dWludDE2X3Q+IG1heFRMU1ZlcnNpb24pCit2b2lkIFRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25u
ZWN0aW9uKFNvY2tldDo6U29ja2V0IHNvY2tldCwgRnVuY3Rpb248dm9pZChTU0wqKT4mJiBzZWN1
cmVDb25uZWN0aW9uSGFuZGxlciwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsIE9wdGlv
bmFsPHVpbnQxNl90PiBtYXhUTFNWZXJzaW9uLCBPcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+PiBzZXJ2ZXJDZXJ0aWZpY2F0ZSkKIHsKKyAgICBhdXRvIGNlcnRERVIgPSBkZWZhdWx0
Q2VydGlmaWNhdGUoKTsKKyAgICBhdXRvIHByaXZhdGVLZXkgPSBkZWZhdWx0UHJpdmF0ZUtleSgp
OworCiAgICAgU1NMX2xpYnJhcnlfaW5pdCgpOwogCi0gICAgc3NsOjp1bmlxdWVfcHRyPFNTTF9D
VFg+IGN0eChTU0xfQ1RYX25ldyhUTFNfd2l0aF9idWZmZXJzX21ldGhvZCgpKSk7CisjaWYgVVNF
KE9QRU5TU0wpCisgICAgc3NsOjp1bmlxdWVfcHRyPFNTTF9DVFg+IGN0eChTU0xfQ1RYX25ldyhT
U0x2MjNfbWV0aG9kKCkpKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZXN0IGNlcnRpZmljYXRlIGZy
b20gQm9yaW5nU1NMLgotICAgIFN0cmluZyBjZXJ0UEVNKAotICAgICJNSUlDV0RDQ0FjR2dBd0lC
QWdJSkFQdXdUQzZyRUpzTU1BMEdDU3FHU0liM0RRRUJCUVVBTUVVeEN6QUpCZ05WIgotICAgICJC
QVlUQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNt
NWxkQ0JYIgotICAgICJhV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVFF3TkRJek1qQTFNRFF3V2hj
Tk1UY3dOREl5TWpBMU1EUXdXakJGIgotICAgICJNUXN3Q1FZRFZRUUdFd0pCVlRFVE1CRUdBMVVF
Q0F3S1UyOXRaUzFUZEdGMFpURWhNQjhHQTFVRUNnd1lTVzUwIgotICAgICJaWEp1WlhRZ1YybGta
MmwwY3lCUWRIa2dUSFJrTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCIgotICAg
ICJnUURZSzhpbU11UmkvMDN6MEsxWmkwV252ZkZIdndsWWV5SzlOYTZYSllhVW9JREF0Qjkya1dk
R01kQVFoTGNpIgotICAgICJIbkFqa1hMSTZXMTVPb1YzZ0EvRWxSWjF4VXB4VE1oalA2UHlZNXdx
VDVyNnk4RnhiaWlGS0tBbkhtVWNyZ2ZWIgotICAgICJXMjh0USswcmtMR01yeVJ0cnVrWE9nWEJ2
N2djcm1VN0cxakMyYTdXcW1lSThRSURBUUFCbzFBd1RqQWRCZ05WIgotICAgICJIUTRFRmdRVWkz
WFZyTXNJdmc0ZlpiZjZWcjVzcDNYYWhhOHdId1lEVlIwakJCZ3dGb0FVaTNYVnJNc0l2ZzRmIgot
ICAgICJaYmY2VnI1c3AzWGFoYTh3REFZRFZSMFRCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUVVG
QUFPQmdRQTc2SGh0IgotICAgICJsZFk5YXZjVEdTd2J3b2l1SXF2MGpUTDFmSEZuenkzUkhNTERo
K0xwdm9sYzVEU3JTSkhDUDVXdUswZWVKWGhyIgotICAgICJUNW9RcEhMOXovY0NETEFLQ0tSYTR1
VjBmaEVkT1dCcXlSOXA4eTVqSnR5ZTcydDZDdUZVVjVpcWNwRjRCSDRmIgotICAgICJqMlZOSHdz
U3JKd2tENFFVR2xVdEg3dnduUW15Q0Z4Wk1tV0FKZz09Iik7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGNlcnRERVI7Ci0gICAgYmFzZTY0RGVjb2RlKGNlcnRQRU0sIGNlcnRERVIsIFdURjo6QmFzZTY0
RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7CisgICAgaWYgKHNlcnZlckNlcnRpZmljYXRl
KSB7CisgICAgICAgIGF1dG8gY2VydCA9IGNlcnRpZmljYXRlUEVNKHNlcnZlckNlcnRpZmljYXRl
LT5maXJzdCk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleSA9IHByaXZhdGVLZXlQRU0oc2VydmVy
Q2VydGlmaWNhdGUtPnNlY29uZCk7CisKKyAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGUo
Y3R4LmdldCgpLCBjZXJ0LmdldCgpKTsKKyAgICAgICAgU1NMX0NUWF91c2VfUHJpdmF0ZUtleShj
dHguZ2V0KCksIHByaXZhdGVLZXkuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFNTTF9D
VFhfdXNlX2NlcnRpZmljYXRlX0FTTjEoY3R4LmdldCgpLCBjZXJ0REVSLnNpemUoKSwgY2VydERF
Ui5kYXRhKCkpOworICAgICAgICBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5KGN0eC5nZXQoKSwgcHJp
dmF0ZUtleS5nZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBzc2w6OnVuaXF1ZV9wdHI8U1NMX0NU
WD4gY3R4KFNTTF9DVFhfbmV3KFRMU193aXRoX2J1ZmZlcnNfbWV0aG9kKCkpKTsKICAgICBzc2w6
OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0REVS
LmRhdGEoKSwgY2VydERFUi5zaXplKCksIG51bGxwdHIpKTsKICAgICBBU1NFUlQoY2VydCk7CiAK
LSAgICAvLyBUaGlzIGlzIGEgdGVzdCBrZXkgZnJvbSBCb3JpbmdTU0wuCi0gICAgY2hhciBrS2V5
UEVNW10gPQotICAgICItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4iCi0gICAgIk1J
SUNYZ0lCQUFLQmdRRFlLOGltTXVSaS8wM3owSzFaaTBXbnZmRkh2d2xZZXlLOU5hNlhKWWFVb0lE
QXRCOTJcbiIKLSAgICAia1dkR01kQVFoTGNpSG5BamtYTEk2VzE1T29WM2dBL0VsUloxeFVweFRN
aGpQNlB5WTV3cVQ1cjZ5OEZ4YmlpRlxuIgotICAgICJLS0FuSG1VY3JnZlZXMjh0USswcmtMR01y
eVJ0cnVrWE9nWEJ2N2djcm1VN0cxakMyYTdXcW1lSThRSURBUUFCXG4iCi0gICAgIkFvR0JBSUJ5
MDlGZDRET3EvSWpwOEhlS3VDTUtUSHFUVzF4R0hzaExRNmp3VlYydldaSW45YUlnbURzdmtqQ2Vc
biIKLSAgICAiaTZzc1p2bmJqVmN3elNvQnloak44WkNmL2kxNUhFQ1dERkZoNmd0MFA1ejBNbkNo
d3pabXZhdFYvRlhDVDBqK1xuIgotICAgICJXbUdOQi9na2VoS2pHWExMY2pUYjZkUllWSlNDWmhW
dU9MTGNiV0lWMTBnZ2dKUUJBa0VBOFM4c0dlNGV6eXlaXG4iCi0gICAgIm00ZTlyOTVnNnM0M2tQ
cXRqNXJld1RzVXh0KzJuNGVWb2REK1pVbENVTFdWTkFGTGtZUlRCQ0FTbFNybTlYaGpcbiIKLSAg
ICAiUXBtV0FISlVrUUpCQU9WelFkRlVhZXdMdGRPSm9QQ3RwWW9ZMXpkMjJlYWU4VFFFbXBHT1Ix
MUw2a2J4TFFza1xuIgotICAgICJhTWx5L0RPbk9hYTgydHFBR1RkcURFWmdTTm1DZUtLa25tRUNR
QXZwblk4R1VPVkF1YkdSNmMrVzkwaUJ1UUxqXG4iCi0gICAgIkx0RnAvOWloZDJ3L1BvRHdySFph
b1VZVmNUNFZTZkpRb2cvazdrakU0TVlYWVdMOGVFS2czV1RXUU5FQ1FRRGtcbiIKLSAgICAiMTA0
V2k5MVVtZDFQekYwaWpkMmpYT0VSSlUxd0VLZTZYTGtZWU5IV1FBZTVsNEo0TVdqOU9keEZYQXhJ
dXVSL1xuIgotICAgICJ0ZkR3YnFrdGE0eGN1eDY3Ly9raEFrRUF2dlJYTEhUYWE2VkZ6VGFpaU84
U2FGc0hWM2xReVhPdE1yQnBCNWpkXG4iCi0gICAgIm1vWldnakh2QjJXOUNrbjdzRHFzUEIrVTJ0
eVgwam9EZFFFeXVpTUVDRFk4b1E9PVxuIgotICAgICItLS0tLUVORCBSU0EgUFJJVkFURSBLRVkt
LS0tLVxuIjsKLQotICAgIHNzbDo6dW5pcXVlX3B0cjxCSU8+IHByaXZhdGVLZXlCSU8oQklPX25l
d19tZW1fYnVmKGtLZXlQRU0sIHN0cmxlbihrS2V5UEVNKSkpOwotICAgIHNzbDo6dW5pcXVlX3B0
cjxFVlBfUEtFWT4gcHJpdmF0ZUtleShQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShwcml2YXRlS2V5
QklPLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgQVNTRVJUKHByaXZh
dGVLZXkpOwotCiAgICAgU1NMX0NUWF9zZXRfY2hhaW5fYW5kX2tleShjdHguZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Q1JZUFRPX0JVRkZFUiAqY29uc3QgKj4oJmNlcnQpLCAxLCBwcml2YXRlS2V5
LmdldCgpLCBudWxscHRyKTsKIAogICAgIGlmIChyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUpIHsK
QEAgLTE5NSw2ICsxNzMsNyBAQCB2b2lkIFRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9u
KFNvY2tldCBzb2NrZXQsIEZ1bmN0aW9uPHZvaWQoU1NMKik+JiYgc2VjdQogICAgICAgICAgICAg
cmV0dXJuIHNzbF92ZXJpZnlfb2s7CiAgICAgICAgIH0pOwogICAgIH0KKyNlbmRpZgogCiAgICAg
aWYgKG1heFRMU1ZlcnNpb24pCiAgICAgICAgIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9u
KGN0eC5nZXQoKSwgKm1heFRMU1ZlcnNpb24pOwpAQCAtMjA3LDI2ICsxODYsMjcgQEAgdm9pZCBU
Q1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihTb2NrZXQgc29ja2V0LCBGdW5jdGlvbjx2
b2lkKFNTTCopPiYmIHNlY3UKICAgICBzZWN1cmVDb25uZWN0aW9uSGFuZGxlcihhY2NlcHRSZXN1
bHQgPiAwID8gc3NsLmdldCgpIDogbnVsbHB0cik7CiB9OwogCi1UQ1BTZXJ2ZXI6OlRDUFNlcnZl
cihQcm90b2NvbCBwcm90b2NvbCwgRnVuY3Rpb248dm9pZChTU0wqKT4mJiBzZWN1cmVDb25uZWN0
aW9uSGFuZGxlciwgT3B0aW9uYWw8dWludDE2X3Q+IG1heFRMU1ZlcnNpb24sIHNpemVfdCBjb25u
ZWN0aW9ucykKK1RDUFNlcnZlcjo6VENQU2VydmVyKFByb3RvY29sIHByb3RvY29sLCBGdW5jdGlv
bjx2b2lkKFNTTCopPiYmIHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyLCBPcHRpb25hbDx1aW50MTZf
dD4gbWF4VExTVmVyc2lvbiwgc2l6ZV90IGNvbm5lY3Rpb25zLCBPcHRpb25hbDxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+PiBzZXJ2ZXJDZXJ0aWZpY2F0ZSkKIHsKKyAgICBTb2NrZXQ6OmluaXRp
YWxpemUoKTsKICAgICBzd2l0Y2ggKHByb3RvY29sKSB7CiAgICAgY2FzZSBQcm90b2NvbDo6SFRU
UFM6CiAgICAgY2FzZSBQcm90b2NvbDo6SFRUUFNXaXRoQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0
OgotICAgICAgICBtX2Nvbm5lY3Rpb25IYW5kbGVyID0gW3NlY3VyZUNvbm5lY3Rpb25IYW5kbGVy
ID0gV1RGTW92ZShzZWN1cmVDb25uZWN0aW9uSGFuZGxlciksIHByb3RvY29sLCBtYXhUTFNWZXJz
aW9uXSAoU29ja2V0IHNvY2tldCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdGFydFNlY3VyZUNv
bm5lY3Rpb24oc29ja2V0LCBXVEZNb3ZlKHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyKSwgcHJvdG9j
b2wgPT0gUHJvdG9jb2w6OkhUVFBTV2l0aENsaWVudENlcnRpZmljYXRlUmVxdWVzdCwgbWF4VExT
VmVyc2lvbik7CisgICAgICAgIG1fY29ubmVjdGlvbkhhbmRsZXIgPSBbdGhpcywgc2VjdXJlQ29u
bmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyKSwgcHJvdG9j
b2wsIG1heFRMU1ZlcnNpb24sIHNlcnZlckNlcnRpZmljYXRlID0gV1RGTW92ZShzZXJ2ZXJDZXJ0
aWZpY2F0ZSldIChTb2NrZXQ6OlNvY2tldCBzb2NrZXQpIG11dGFibGUgeworICAgICAgICBzdGFy
dFNlY3VyZUNvbm5lY3Rpb24oc29ja2V0LCBXVEZNb3ZlKHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVy
KSwgcHJvdG9jb2wgPT0gUHJvdG9jb2w6OkhUVFBTV2l0aENsaWVudENlcnRpZmljYXRlUmVxdWVz
dCwgbWF4VExTVmVyc2lvbiwgc2VydmVyQ2VydGlmaWNhdGUpOwogICAgICAgICB9OwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFByb3RvY29sOjpIVFRQU1Byb3h5OgotICAgICAgICBtX2Nvbm5l
Y3Rpb25IYW5kbGVyID0gW3NlY3VyZUNvbm5lY3Rpb25IYW5kbGVyID0gV1RGTW92ZShzZWN1cmVD
b25uZWN0aW9uSGFuZGxlcildIChTb2NrZXQgc29ja2V0KSBtdXRhYmxlIHsKKyAgICAgICAgbV9j
b25uZWN0aW9uSGFuZGxlciA9IFt0aGlzLCBzZWN1cmVDb25uZWN0aW9uSGFuZGxlciA9IFdURk1v
dmUoc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIpXSAoU29ja2V0OjpTb2NrZXQgc29ja2V0KSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNoYXIgcmVhZEJ1ZmZlclsxMDAwXTsKLSAgICAgICAgICAgIGF1
dG8gYnl0ZXNSZWFkID0gOjpyZWFkKHNvY2tldCwgcmVhZEJ1ZmZlciwgc2l6ZW9mKHJlYWRCdWZm
ZXIpKTsKKyAgICAgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gU29ja2V0OjpyZWFkKHNvY2tldCwg
cmVhZEJ1ZmZlciwgc2l6ZW9mKHJlYWRCdWZmZXIpKTsKICAgICAgICAgICAgIEVYUEVDVF9HVChi
eXRlc1JlYWQsIDApOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8c2l6ZV90
PihieXRlc1JlYWQpIDwgc2l6ZW9mKHJlYWRCdWZmZXIpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVzcG9uc2VIZWFkZXIgPSAiIgogICAgICAgICAgICAgIkhUVFAv
MS4xIDIwMCBDb25uZWN0aW9uIEVzdGFibGlzaGVkXHJcbiIKICAgICAgICAgICAgICJDb25uZWN0
aW9uOiBjbG9zZVxyXG5cclxuIjsKLSAgICAgICAgICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gOjp3
cml0ZShzb2NrZXQsIHJlc3BvbnNlSGVhZGVyLCBzdHJsZW4ocmVzcG9uc2VIZWFkZXIpKTsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gU29ja2V0Ojp3cml0ZShzb2NrZXQsIHJlc3Bv
bnNlSGVhZGVyLCBzdHJsZW4ocmVzcG9uc2VIZWFkZXIpKTsKICAgICAgICAgICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzV3JpdHRlbiksIHN0cmxlbihyZXNwb25zZUhlYWRl
cikpOwogICAgICAgICAgICAgc3RhcnRTZWN1cmVDb25uZWN0aW9uKHNvY2tldCwgV1RGTW92ZShz
ZWN1cmVDb25uZWN0aW9uSGFuZGxlcikpOwogICAgICAgICB9OwpAQCAtMjM4LDMyICsyMTgsNzcg
QEAgVENQU2VydmVyOjpUQ1BTZXJ2ZXIoUHJvdG9jb2wgcHJvdG9jb2wsIEZ1bmN0aW9uPHZvaWQo
U1NMKik+JiYgc2VjdXJlQ29ubmVjdGlvbkgKIAogdm9pZCBUQ1BTZXJ2ZXI6Omxpc3RlbkZvckNv
bm5lY3Rpb25zKHNpemVfdCBjb25uZWN0aW9ucykKIHsKLSAgICBhdXRvIGxpc3RlbmluZ1NvY2tl
dCA9IHNvY2tldEJpbmRMaXN0ZW4oY29ubmVjdGlvbnMpOwotICAgIEFTU0VSVChsaXN0ZW5pbmdT
b2NrZXQpOwotICAgIG1fbGlzdGVuaW5nVGhyZWFkID0gc3RkOjp0aHJlYWQoW3RoaXMsIGxpc3Rl
bmluZ1NvY2tldCA9ICpsaXN0ZW5pbmdTb2NrZXQsIGNvbm5lY3Rpb25zXSB7CisgICAgbV9saXN0
ZW5pbmdTb2NrZXQgPSBzb2NrZXRCaW5kTGlzdGVuKGNvbm5lY3Rpb25zKTsKKyAgICBBU1NFUlQo
bV9saXN0ZW5pbmdTb2NrZXQpOworCisgICAgbV9ydW5uaW5nTGlzdGVuaW5nVGhyZWFkID0gdHJ1
ZTsKKyAgICBtX2xpc3RlbmluZ1RocmVhZCA9IHN0ZDo6dGhyZWFkKFt0aGlzLCBsaXN0ZW5pbmdT
b2NrZXQgPSAqbV9saXN0ZW5pbmdTb2NrZXQsIGNvbm5lY3Rpb25zXSB7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29ubmVjdGlvbnM7ICsraSkgewotICAgICAgICAgICAgU29ja2V0
IGNvbm5lY3Rpb25Tb2NrZXQgPSBhY2NlcHQobGlzdGVuaW5nU29ja2V0LCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIFNvY2tldDo6U29ja2V0IGNvbm5lY3Rpb25Tb2NrZXQgPSBJbnZh
bGlkUG9ydDsKKworICAgICAgICAgICAgd2hpbGUgKG1fcnVubmluZ0xpc3RlbmluZ1RocmVhZCAm
JiBjb25uZWN0aW9uU29ja2V0ID09IEludmFsaWRQb3J0KSB7CisgICAgICAgICAgICAgICAgZmRf
c2V0IHJlYWRmZDsKKyAgICAgICAgICAgICAgICBGRF9aRVJPKCZyZWFkZmQpOworICAgICAgICAg
ICAgICAgIEZEX1NFVChsaXN0ZW5pbmdTb2NrZXQsICZyZWFkZmQpOworCisgICAgICAgICAgICAg
ICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgICAgICAgICAgICB0aW1lb3V0LnR2X3Nl
YyA9IDE7CisgICAgICAgICAgICAgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgICAgICAg
ICAgICAgIGF1dG8gcmMgPSBzZWxlY3QobGlzdGVuaW5nU29ja2V0ICsgMSwgJnJlYWRmZCwgbnVs
bHB0ciwgbnVsbHB0ciwgJnRpbWVvdXQpOworICAgICAgICAgICAgICAgIGlmIChyYyA8PSAwKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNvbm5lY3Rp
b25Tb2NrZXQgPSBTb2NrZXQ6OmFjY2VwdChsaXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIW1fcnVubmluZ0xpc3RlbmluZ1RocmVhZCB8fCBjb25uZWN0
aW9uU29ja2V0IDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU29ja2V0ID4g
MCkgeworICAgICAgICAgICAgICAgICAgICBTb2NrZXQ6OnNodXRkb3duKGNvbm5lY3Rpb25Tb2Nr
ZXQpOworICAgICAgICAgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGNvbm5lY3Rpb25Tb2NrZXQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgbV9jb25uZWN0aW9uVGhyZWFkcy5hcHBlbmQoc3RkOjp0aHJlYWQo
W3RoaXMsIGNvbm5lY3Rpb25Tb2NrZXRdIHsKLSAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25I
YW5kbGVyKGNvbm5lY3Rpb25Tb2NrZXQpOwotICAgICAgICAgICAgICAgIHNodXRkb3duKGNvbm5l
Y3Rpb25Tb2NrZXQsIFNIVVRfUkRXUik7Ci0gICAgICAgICAgICAgICAgY2xvc2UoY29ubmVjdGlv
blNvY2tldCk7CisgICAgICAgICAgICAgICAgaWYgKG1fY29ubmVjdGlvbkhhbmRsZXIpCisgICAg
ICAgICAgICAgICAgICAgIG1fY29ubmVjdGlvbkhhbmRsZXIoY29ubmVjdGlvblNvY2tldCk7Cisg
ICAgICAgICAgICAgICAgU29ja2V0OjpzaHV0ZG93bihjb25uZWN0aW9uU29ja2V0KTsKKyAgICAg
ICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGNvbm5lY3Rpb25Tb2NrZXQpOwogICAgICAgICAgICAg
fSkpOwogICAgICAgICB9Ci0gICAgICAgIGNsb3NlKGxpc3RlbmluZ1NvY2tldCk7CisgICAgICAg
IFNvY2tldDo6Y2xvc2UobGlzdGVuaW5nU29ja2V0KTsKICAgICB9KTsKIH0KIAogVENQU2VydmVy
Ojp+VENQU2VydmVyKCkKIHsKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgVENQU2VydmVyOjpzdG9w
KCkKK3sKKyAgICBpZiAoIW1fcnVubmluZ0xpc3RlbmluZ1RocmVhZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9ydW5uaW5nTGlzdGVuaW5nVGhyZWFkID0gZmFsc2U7CisKKyAgICBpZiAobV9s
aXN0ZW5pbmdTb2NrZXQpIHsKKyAgICAgICAgU29ja2V0OjpzaHV0ZG93bigqbV9saXN0ZW5pbmdT
b2NrZXQpOworICAgICAgICBTb2NrZXQ6OmNsb3NlKCptX2xpc3RlbmluZ1NvY2tldCk7CisgICAg
ICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gV1RGOjpudWxsb3B0OworICAgIH0KKwogICAgIG1fbGlz
dGVuaW5nVGhyZWFkLmpvaW4oKTsKLSAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25UaHJlYWRzIDog
bV9jb25uZWN0aW9uVGhyZWFkcykKLSAgICAgICAgY29ubmVjdGlvblRocmVhZHMuam9pbigpOwor
CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uVGhyZWFkIDogbV9jb25uZWN0aW9uVGhyZWFkcykK
KyAgICAgICAgY29ubmVjdGlvblRocmVhZC5qb2luKCk7CiB9CiAKLWF1dG8gVENQU2VydmVyOjpz
b2NrZXRCaW5kTGlzdGVuKHNpemVfdCBjb25uZWN0aW9ucykgLT4gT3B0aW9uYWw8U29ja2V0Pgor
YXV0byBUQ1BTZXJ2ZXI6OnNvY2tldEJpbmRMaXN0ZW4oc2l6ZV90IGNvbm5lY3Rpb25zKSAtPiBP
cHRpb25hbDxTb2NrZXQ6OlNvY2tldD4KIHsKLSAgICBTb2NrZXQgbGlzdGVuaW5nU29ja2V0ID0g
c29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZiAobGlzdGVuaW5nU29ja2V0
ID09IC0xKQorICAgIGF1dG8gbGlzdGVuaW5nU29ja2V0ID0gU29ja2V0Ojpzb2NrZXQoUEZfSU5F
VCwgU09DS19TVFJFQU0sIDApOworICAgIGlmICghU29ja2V0Ojppc1ZhbGlkU29ja2V0KGxpc3Rl
bmluZ1NvY2tldCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8g
UG9ydHMgNDkxNTItNjU1MzUgYXJlIHVuYWxsb2NhdGVkIHBvcnRzLiBUcnkgdW50aWwgd2UgZmlu
ZCBvbmUgdGhhdCdzIGZyZWUuCkBAIC0yNzcsOSArMzAyLDkgQEAgYXV0byBUQ1BTZXJ2ZXI6OnNv
Y2tldEJpbmRMaXN0ZW4oc2l6ZV90IGNvbm5lY3Rpb25zKSAtPiBPcHRpb25hbDxTb2NrZXQ+CiAg
ICAgICAgICAgICAvLyBUaGlzIHBvcnQgaXMgYnVzeS4gVHJ5IHRoZSBuZXh0IHBvcnQuCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAobGlzdGVuKGxpc3Rlbmlu
Z1NvY2tldCwgY29ubmVjdGlvbnMpID09IC0xKSB7CisgICAgICAgIGlmIChsaXN0ZW4obGlzdGVu
aW5nU29ja2V0LCBjb25uZWN0aW9ucykgPT0gU09DS0VUX0VSUk9SKSB7CiAgICAgICAgICAgICAv
LyBMaXN0ZW5pbmcgZmFpbGVkLgotICAgICAgICAgICAgY2xvc2UobGlzdGVuaW5nU29ja2V0KTsK
KyAgICAgICAgICAgIFNvY2tldDo6Y2xvc2UobGlzdGVuaW5nU29ja2V0KTsKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgbV9wb3J0ID0gcG9ydDsK
QEAgLTI4NywxNCArMzEyLDE0IEBAIGF1dG8gVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKHNp
emVfdCBjb25uZWN0aW9ucykgLT4gT3B0aW9uYWw8U29ja2V0PgogICAgIH0KICAgICAKICAgICAv
LyBDb3VsZG4ndCBmaW5kIGFuIGF2YWlsYWJsZSBwb3J0LgotICAgIGNsb3NlKGxpc3RlbmluZ1Nv
Y2tldCk7CisgICAgU29ja2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOwogICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKLXRlbXBsYXRlPD4gVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6
cmVhZChTb2NrZXQgc29ja2V0KQordGVtcGxhdGU8PiBWZWN0b3I8dWludDhfdD4gVENQU2VydmVy
OjpyZWFkKFNvY2tldDo6U29ja2V0IHNvY2tldCkKIHsKICAgICB1aW50OF90IGJ1ZmZlclsxMDAw
XTsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IDo6cmVhZChzb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlcikpOworICAgIGF1dG8gYnl0ZXNSZWFkID0gU29ja2V0OjpyZWFkKHNvY2tldCwgYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSk7CiAgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQogICAgICAgICByZXR1
cm4geyB9OwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzUmVhZCkgPCBzaXpl
b2YoYnVmZmVyKSk7CkBAIC0zMDQsOSArMzI5LDkgQEAgdGVtcGxhdGU8PiBWZWN0b3I8dWludDhf
dD4gVENQU2VydmVyOjpyZWFkKFNvY2tldCBzb2NrZXQpCiAgICAgcmV0dXJuIHZlY3RvcjsKIH0K
IAotdGVtcGxhdGU8PiB2b2lkIFRDUFNlcnZlcjo6d3JpdGUoU29ja2V0IHNvY2tldCwgY29uc3Qg
dm9pZCogcmVzcG9uc2UsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTw+IHZvaWQgVENQU2VydmVy
Ojp3cml0ZShTb2NrZXQ6OlNvY2tldCBzb2NrZXQsIGNvbnN0IHZvaWQqIHJlc3BvbnNlLCBzaXpl
X3QgbGVuZ3RoKQogewotICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gOjp3cml0ZShzb2NrZXQsIHJl
c3BvbnNlLCBsZW5ndGgpOworICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gU29ja2V0Ojp3cml0ZShz
b2NrZXQsIHJlc3BvbnNlLCBsZW5ndGgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KGJ5dGVzV3JpdHRlbiksIGxlbmd0aCk7CiB9CiAKQEAgLTMzMSw3ICszNTYsNyBAQCB0ZW1w
bGF0ZTw+IHZvaWQgVENQU2VydmVyOjp3cml0ZShTU0wqIHNzbCwgY29uc3Qgdm9pZCogcmVzcG9u
c2UsIHNpemVfdCBsZW5ndGgpCiB9CiAjZW5kaWYKIAotdm9pZCBUQ1BTZXJ2ZXI6OnJlc3BvbmRX
aXRoQ2hhbGxlbmdlVGhlbk9LKFNvY2tldCBzb2NrZXQpCit2b2lkIFRDUFNlcnZlcjo6cmVzcG9u
ZFdpdGhDaGFsbGVuZ2VUaGVuT0soU29ja2V0OjpTb2NrZXQgc29ja2V0KQogewogICAgIHJlYWQo
c29ja2V0KTsKICAgICAKQEAgLTM2Myw2ICszODgsNzYgQEAgdm9pZCBUQ1BTZXJ2ZXI6OnJlc3Bv
bmRXaXRoT0soU1NMKiBzc2wpCiAgICAgIjxzY3JpcHQ+YWxlcnQoJ3N1Y2Nlc3MhJyk8L3Njcmlw
dD4iOwogICAgIHdyaXRlKHNzbCwgcmVwbHksIHN0cmxlbihyZXBseSkpOwogfQorCitWZWN0b3I8
dWludDhfdD4gVENQU2VydmVyOjpkZWZhdWx0Q2VydGlmaWNhdGUoKQoreworICAgIC8vIFRoaXMg
aXMgYSB0ZXN0IGNlcnRpZmljYXRlIGZyb20gQm9yaW5nU1NMLgorICAgIFN0cmluZyBwZW1FbmNv
ZGVkQ2VydGlmaWNhdGUoIiIKKyAgICAgICAgIk1JSUNXRENDQWNHZ0F3SUJBZ0lKQVB1d1RDNnJF
SnNNTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYiCisgICAgICAgICJCQVlUQWtGVk1S
TXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNtNWxkQ0JYIgor
ICAgICAgICAiYVdSbmFYUnpJRkIwZVNCTWRHUXdIaGNOTVRRd05ESXpNakExTURRd1doY05NVGN3
TkRJeU1qQTFNRFF3V2pCRiIKKyAgICAgICAgIk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVD
QXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTAiCisgICAgICAgICJaWEp1WlhRZ1Yy
bGtaMmwwY3lCUWRIa2dUSFJrTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCIgor
ICAgICAgICAiZ1FEWUs4aW1NdVJpLzAzejBLMVppMFdudmZGSHZ3bFlleUs5TmE2WEpZYVVvSURB
dEI5MmtXZEdNZEFRaExjaSIKKyAgICAgICAgIkhuQWprWExJNlcxNU9vVjNnQS9FbFJaMXhVcHhU
TWhqUDZQeVk1d3FUNXI2eThGeGJpaUZLS0FuSG1VY3JnZlYiCisgICAgICAgICJXMjh0USswcmtM
R01yeVJ0cnVrWE9nWEJ2N2djcm1VN0cxakMyYTdXcW1lSThRSURBUUFCbzFBd1RqQWRCZ05WIgor
ICAgICAgICAiSFE0RUZnUVVpM1hWck1zSXZnNGZaYmY2VnI1c3AzWGFoYTh3SHdZRFZSMGpCQmd3
Rm9BVWkzWFZyTXNJdmc0ZiIKKyAgICAgICAgIlpiZjZWcjVzcDNYYWhhOHdEQVlEVlIwVEJBVXdB
d0VCL3pBTkJna3Foa2lHOXcwQkFRVUZBQU9CZ1FBNzZIaHQiCisgICAgICAgICJsZFk5YXZjVEdT
d2J3b2l1SXF2MGpUTDFmSEZuenkzUkhNTERoK0xwdm9sYzVEU3JTSkhDUDVXdUswZWVKWGhyIgor
ICAgICAgICAiVDVvUXBITDl6L2NDRExBS0NLUmE0dVYwZmhFZE9XQnF5UjlwOHk1akp0eWU3MnQ2
Q3VGVVY1aXFjcEY0Qkg0ZiIKKyAgICAgICAgImoyVk5Id3NTckp3a0Q0UVVHbFV0SDd2d25RbXlD
RnhaTW1XQUpnPT0iKTsKKworICAgIHJldHVybiBjZXJ0aWZpY2F0ZURFUihwZW1FbmNvZGVkQ2Vy
dGlmaWNhdGUpOworfQorCitzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+IFRDUFNlcnZlcjo6ZGVm
YXVsdFByaXZhdGVLZXkoKQoreworICAgIC8vIFRoaXMgaXMgYSB0ZXN0IGtleSBmcm9tIEJvcmlu
Z1NTTC4KKyAgICBTdHJpbmcga2V5UEVNKCIiCisgICAgICAgICItLS0tLUJFR0lOIFJTQSBQUklW
QVRFIEtFWS0tLS0tXG4iCisgICAgICAgICJNSUlDWGdJQkFBS0JnUURZSzhpbU11UmkvMDN6MEsx
WmkwV252ZkZIdndsWWV5SzlOYTZYSllhVW9JREF0QjkyXG4iCisgICAgICAgICJrV2RHTWRBUWhM
Y2lIbkFqa1hMSTZXMTVPb1YzZ0EvRWxSWjF4VXB4VE1oalA2UHlZNXdxVDVyNnk4RnhiaWlGXG4i
CisgICAgICAgICJLS0FuSG1VY3JnZlZXMjh0USswcmtMR01yeVJ0cnVrWE9nWEJ2N2djcm1VN0cx
akMyYTdXcW1lSThRSURBUUFCXG4iCisgICAgICAgICJBb0dCQUlCeTA5RmQ0RE9xL0lqcDhIZUt1
Q01LVEhxVFcxeEdIc2hMUTZqd1ZWMnZXWkluOWFJZ21Ec3ZrakNlXG4iCisgICAgICAgICJpNnNz
WnZuYmpWY3d6U29CeWhqTjhaQ2YvaTE1SEVDV0RGRmg2Z3QwUDV6ME1uQ2h3elptdmF0Vi9GWENU
MGorXG4iCisgICAgICAgICJXbUdOQi9na2VoS2pHWExMY2pUYjZkUllWSlNDWmhWdU9MTGNiV0lW
MTBnZ2dKUUJBa0VBOFM4c0dlNGV6eXlaXG4iCisgICAgICAgICJtNGU5cjk1ZzZzNDNrUHF0ajVy
ZXdUc1V4dCsybjRlVm9kRCtaVWxDVUxXVk5BRkxrWVJUQkNBU2xTcm05WGhqXG4iCisgICAgICAg
ICJRcG1XQUhKVWtRSkJBT1Z6UWRGVWFld0x0ZE9Kb1BDdHBZb1kxemQyMmVhZThUUUVtcEdPUjEx
TDZrYnhMUXNrXG4iCisgICAgICAgICJhTWx5L0RPbk9hYTgydHFBR1RkcURFWmdTTm1DZUtLa25t
RUNRQXZwblk4R1VPVkF1YkdSNmMrVzkwaUJ1UUxqXG4iCisgICAgICAgICJMdEZwLzlpaGQydy9Q
b0R3ckhaYW9VWVZjVDRWU2ZKUW9nL2s3a2pFNE1ZWFlXTDhlRUtnM1dUV1FORUNRUURrXG4iCisg
ICAgICAgICIxMDRXaTkxVW1kMVB6RjBpamQyalhPRVJKVTF3RUtlNlhMa1lZTkhXUUFlNWw0SjRN
V2o5T2R4RlhBeEl1dVIvXG4iCisgICAgICAgICJ0ZkR3YnFrdGE0eGN1eDY3Ly9raEFrRUF2dlJY
TEhUYWE2VkZ6VGFpaU84U2FGc0hWM2xReVhPdE1yQnBCNWpkXG4iCisgICAgICAgICJtb1pXZ2pI
dkIyVzlDa243c0Rxc1BCK1UydHlYMGpvRGRRRXl1aU1FQ0RZOG9RPT1cbiIKKyAgICAgICAgIi0t
LS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4iKTsKKworICAgIHJldHVybiBwcml2YXRlS2V5
UEVNKGtleVBFTSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OmNlcnRpZmljYXRl
REVSKGNvbnN0IFN0cmluZyYgY2VydCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwor
ICAgIGJhc2U2NERlY29kZShjZXJ0LCB2ZWN0b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6
QmFzZTY0RGVmYXVsdCk7CisgICAgcmV0dXJuIHZlY3RvcjsKK30KKworc3NsOjp1bmlxdWVfcHRy
PFg1MDk+IFRDUFNlcnZlcjo6Y2VydGlmaWNhdGVQRU0oY29uc3QgU3RyaW5nJiBjZXJ0KQorewor
ICAgIGF1dG8gdG1wQ2VydCA9IGNlcnQubGF0aW4xKCk7CisgICAgc3NsOjp1bmlxdWVfcHRyPEJJ
Tz4gY2VydEJJTyhCSU9fbmV3X21lbV9idWYodG1wQ2VydC5kYXRhKCksIHRtcENlcnQubGVuZ3Ro
KCkpKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4gY2VydFg1MDkoUEVNX3JlYWRfYmlvX1g1
MDkoY2VydEJJTy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIEFTU0VS
VChjZXJ0NTA5KTsKKyAgICByZXR1cm4gY2VydFg1MDk7Cit9CisKK3NzbDo6dW5pcXVlX3B0cjxF
VlBfUEtFWT4gVENQU2VydmVyOjpwcml2YXRlS2V5UEVNKGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIGF1dG8gdG1wS2V5ID0ga2V5LmxhdGluMSgpOworICAgIHNzbDo6dW5pcXVlX3B0cjxCSU8+
IHByaXZhdGVLZXlCSU8oQklPX25ld19tZW1fYnVmKHRtcEtleS5kYXRhKCksIHRtcEtleS5sZW5n
dGgoKSkpOworICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4gcGtleShQRU1fcmVhZF9iaW9f
UHJpdmF0ZUtleShwcml2YXRlS2V5QklPLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
KSk7CisgICAgQVNTRVJUKHBrZXkpOworICAgIHJldHVybiBwa2V5OworfQorCiAjZW5kaWYKIAog
VmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1RD
UFNlcnZlci5oCmluZGV4IDkwZTJlMzE4YjBmMmE0ZGE4YWRkYzRjMjExM2Q5YmRlMjY4ZTY2MGYu
LjQ3MzM5Yzk2ZmVmNDdiYzAyZTcwYTY3YzE1ZGRkZWI3OGE3ZGI4YTQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
Q1BTZXJ2ZXIuaApAQCAtMjUsNTQgKzI1LDg0IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiUGxhdGZvcm1Tb2NrZXQuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgSEFWRShTU0wpCisj
aWYgVVNFKE9QRU5TU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxv
cGVuc3NsL3NzbC5oPgorI2Vsc2UKK3N0cnVjdCBFVlBfUEtFWTsKIHN0cnVjdCBTU0w7CitzdHJ1
Y3QgWDUwOTsKKyNlbmRpZgogI2VuZGlmIC8vIEhBVkUoU1NMKQogCiBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKKyNpZiBIQVZFKFNTTCkKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVs
ZXRlcjsKK25hbWVzcGFjZSBzc2wgewordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHVuaXF1
ZV9wdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VCwgZGVsZXRlcjxUPj47Cit9CisjZW5kaWYgLy8gSEFW
RShTU0wpCisKIGNsYXNzIFRDUFNlcnZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgU29ja2V0ID0gaW50OwogICAgIHVzaW5nIFBvcnQgPSB1aW50
MTZfdDsKICAgICBzdGF0aWMgY29uc3RleHByIFBvcnQgSW52YWxpZFBvcnQgPSAwOwogICAgIAot
ICAgIFRDUFNlcnZlcihGdW5jdGlvbjx2b2lkKFNvY2tldCk+JiYsIHNpemVfdCBjb25uZWN0aW9u
cyA9IDEpOworICAgIFRDUFNlcnZlcihGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0KT4mJiwg
c2l6ZV90IGNvbm5lY3Rpb25zID0gMSk7CiAjaWYgSEFWRShTU0wpCiAgICAgZW51bSBjbGFzcyBQ
cm90b2NvbCA6IHVpbnQ4X3QgewogICAgICAgICBIVFRQUywgSFRUUFNQcm94eSwgSFRUUFNXaXRo
Q2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0CiAgICAgfTsKLSAgICBUQ1BTZXJ2ZXIoUHJvdG9jb2ws
IEZ1bmN0aW9uPHZvaWQoU1NMKik+JiYsIE9wdGlvbmFsPHVpbnQxNl90PiBtYXhUTFNWZXJzaW9u
ID0gV1RGOjpudWxsb3B0LCBzaXplX3QgY29ubmVjdGlvbnMgPSAxKTsKKyAgICBUQ1BTZXJ2ZXIo
UHJvdG9jb2wsIEZ1bmN0aW9uPHZvaWQoU1NMKik+JiYsIE9wdGlvbmFsPHVpbnQxNl90PiBtYXhU
TFNWZXJzaW9uID0gV1RGOjpudWxsb3B0LCBzaXplX3QgY29ubmVjdGlvbnMgPSAxLCBPcHRpb25h
bDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiA9IFdURjo6bnVsbG9wdCk7CiAjZW5kaWYgLy8g
SEFWRShTU0wpCiAgICAgflRDUFNlcnZlcigpOwotICAgIAorCiAgICAgUG9ydCBwb3J0KCkgY29u
c3QgeyByZXR1cm4gbV9wb3J0OyB9Ci0gICAgCisKICNpZiBIQVZFKFNTTCkKICAgICBzdGF0aWMg
dm9pZCByZXNwb25kV2l0aE9LKFNTTCopOwotICAgIHN0YXRpYyB2b2lkIHN0YXJ0U2VjdXJlQ29u
bmVjdGlvbihTb2NrZXQsIEZ1bmN0aW9uPHZvaWQoU1NMKik+JiYgc2VjdXJlQ29ubmVjdGlvbkhh
bmRsZXIsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlID0gZmFsc2UsIE9wdGlvbmFsPHVp
bnQxNl90PiBtYXhUTFNWZXJzaW9uID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIHN0YXJ0U2Vj
dXJlQ29ubmVjdGlvbihTb2NrZXQ6OlNvY2tldCwgRnVuY3Rpb248dm9pZChTU0wqKT4mJiBzZWN1
cmVDb25uZWN0aW9uSGFuZGxlciwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUgPSBmYWxz
ZSwgT3B0aW9uYWw8dWludDE2X3Q+IG1heFRMU1ZlcnNpb24gPSBXVEY6Om51bGxvcHQsIE9wdGlv
bmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+ID0gV1RGOjpudWxsb3B0KTsKICNlbmRpZgot
ICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKFNvY2tldCk7CisgICAg
c3RhdGljIHZvaWQgcmVzcG9uZFdpdGhDaGFsbGVuZ2VUaGVuT0soU29ja2V0OjpTb2NrZXQpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFZlY3Rvcjx1aW50OF90PiByZWFkKFQp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlKFQsIGNvbnN0IHZv
aWQqLCBzaXplX3QpOwogICAgIAorI2lmIEhBVkUoU1NMKQorICAgIFZlY3Rvcjx1aW50OF90PiBk
ZWZhdWx0Q2VydGlmaWNhdGUoKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+IGRlZmF1
bHRQcml2YXRlS2V5KCk7CisKKyAgICBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRl
REVSKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4gY2Vy
dGlmaWNhdGVQRU0oY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHNzbDo6dW5pcXVlX3B0cjxF
VlBfUEtFWT4gcHJpdmF0ZUtleVBFTShjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgogICAgIHN0YXRp
YyBWZWN0b3I8dWludDhfdD4gdGVzdFByaXZhdGVLZXkoKTsKICAgICBzdGF0aWMgVmVjdG9yPHVp
bnQ4X3Q+IHRlc3RDZXJ0aWZpY2F0ZSgpOwotICAgIAorCisgICAgdm9pZCBzdG9wKCk7CisKIHBy
aXZhdGU6Ci0gICAgT3B0aW9uYWw8U29ja2V0PiBzb2NrZXRCaW5kTGlzdGVuKHNpemVfdCBjb25u
ZWN0aW9ucyk7CisgICAgT3B0aW9uYWw8U29ja2V0OjpTb2NrZXQ+IHNvY2tldEJpbmRMaXN0ZW4o
c2l6ZV90IGNvbm5lY3Rpb25zKTsKICAgICB2b2lkIGxpc3RlbkZvckNvbm5lY3Rpb25zKHNpemVf
dCBjb25uZWN0aW9ucyk7CiAKICAgICBQb3J0IG1fcG9ydCB7IEludmFsaWRQb3J0IH07CisKKyAg
ICBib29sIG1fcnVubmluZ0xpc3RlbmluZ1RocmVhZCB7IGZhbHNlIH07CiAgICAgc3RkOjp0aHJl
YWQgbV9saXN0ZW5pbmdUaHJlYWQ7CisgICAgT3B0aW9uYWw8U29ja2V0OjpTb2NrZXQ+IG1fbGlz
dGVuaW5nU29ja2V0OworCiAgICAgVmVjdG9yPHN0ZDo6dGhyZWFkPiBtX2Nvbm5lY3Rpb25UaHJl
YWRzOwotICAgIEZ1bmN0aW9uPHZvaWQoU29ja2V0KT4gbV9jb25uZWN0aW9uSGFuZGxlcjsKKyAg
ICBGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0KT4gbV9jb25uZWN0aW9uSGFuZGxlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L2N1cmwvSFRUUFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0hUVFBTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZGUy
MzBlNTkwNDQ5YjFhZDYxZmY5ZWFiYTQ2ZjRkMWI5Zjc2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0hUVFBTZXJ2ZXIuY3BwCkBAIC0w
LDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJjdXJsL0hUVFBTZXJ2ZXIuaCIKKworI2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRl
ICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25M
aXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1
ZGUgPFdlYktpdC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tD
b250ZXh0UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NyZWRlbnRpYWwuaD4KKyNpbmNs
dWRlIDxXZWJLaXQvV0tQcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcm90
ZWN0aW9uU3BhY2VDdXJsLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgQ3VybCB7CisKK3N0YXRpYyBzdGQ6OndzdHJp
bmcgY3JlYXRlU3RyaW5nKFdLU3RyaW5nUmVmIHdrU3RyaW5nKQoreworICAgIHNpemVfdCBtYXhT
aXplID0gV0tTdHJpbmdHZXRMZW5ndGgod2tTdHJpbmcpOworCisgICAgc3RkOjp2ZWN0b3I8V0tD
aGFyPiB3a0NoYXJCdWZmZXIobWF4U2l6ZSk7CisgICAgc2l6ZV90IGFjdHVhbExlbmd0aCA9IFdL
U3RyaW5nR2V0Q2hhcmFjdGVycyh3a1N0cmluZywgd2tDaGFyQnVmZmVyLmRhdGEoKSwgbWF4U2l6
ZSk7CisgICAgcmV0dXJuIHN0ZDo6d3N0cmluZyh3a0NoYXJCdWZmZXIuZGF0YSgpLCBhY3R1YWxM
ZW5ndGgpOworfQorCitjbGFzcyBTZXJ2ZXJUZXN0ZXIgeworcHVibGljOgorICAgIFNlcnZlclRl
c3RlcigpCisgICAgeworICAgICAgICBtX2NvbnRleHQgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0
ZVdpdGhDb25maWd1cmF0aW9uKG51bGxwdHIpKTsKKyAgICAgICAgbV93ZWJWaWV3ID0gbWFrZVVu
aXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8UGxhdGZvcm1XZWJWaWV3PihtX2NvbnRleHQuZ2V0
KCkpOworICAgICAgICAKKyAgICAgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRp
b25DbGllbnQ7CisgICAgICAgIG1lbXNldCgmbmF2aWdhdGlvbkNsaWVudCwgMCwgc2l6ZW9mKG5h
dmlnYXRpb25DbGllbnQpKTsKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5iYXNlLnZlcnNpb24g
PSAwOworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7Cisg
ICAgICAgIAorICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZEZpbmlzaE5hdmlnYXRpb24gPSBb
XSAoV0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykgeworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2Fz
dDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAg
ICAgICB0ZXN0ZXItPm1fZGlkRmFpbExvYWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRlc3Rlci0+
bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIG5h
dmlnYXRpb25DbGllbnQuZGlkRmFpbE5hdmlnYXRpb24gPSBbXSAoV0tQYWdlUmVmLCBXS05hdmln
YXRpb25SZWYsIFdLRXJyb3JSZWYgZXJyb3JSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykgeworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2Fz
dDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAg
ICAgICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShlcnJvclJlZik7
CisgICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0
ZVN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9jYWxpemVkRGVzY3JpcHRpb24oZXJyb3JSZWYp
KS5nZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFpbExvYWQgPSB0cnVlOworICAg
ICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0cnVlOworICAgICAgICB9OworCisg
ICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9IFtd
IChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tFcnJvclJlZiBlcnJvclJlZiwgV0tUeXBl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICBTZXJ2ZXJUZXN0ZXIq
IHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9lcnJvckNvZGUgPSBXS0Vycm9yR2V0
RXJyb3JDb2RlKGVycm9yUmVmKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9sb2NhbGl6ZWRFcnJv
ckRlc2NyaXB0aW9uID0gY3JlYXRlU3RyaW5nKGFkb3B0V0soV0tFcnJvckNvcHlMb2NhbGl6ZWRE
ZXNjcmlwdGlvbihlcnJvclJlZikpLmdldCgpKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRG
YWlsTG9hZCA9IHRydWU7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmluaXNoTG9hZCA9IHRy
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgPSBbXSAoV0tQYWdlUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAg
ICAgYXV0byBwcm90ZWN0aW9uU3BhY2UgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJv
dGVjdGlvblNwYWNlKGNoYWxsZW5nZSk7CisgICAgICAgICAgICBhdXRvIGRlY2lzaW9uTGlzdGVu
ZXIgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0RGVjaXNpb25MaXN0ZW5lcihjaGFsbGVu
Z2UpOworICAgICAgICAgICAgYXV0byBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFdLUHJvdGVjdGlv
blNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTtcCisKKyAgICAg
ICAgICAgIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAg
ICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGVJbmZvID0gYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlDZXJ0aWZpY2F0
ZUluZm8ocHJvdGVjdGlvblNwYWNlKSk7CisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2RpZFJl
Y2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB0ZXN0ZXItPm1fdmVyaWZpY2F0aW9uRXJyb3IgPSBXS0NlcnRpZmljYXRlSW5mb0dldFZlcmlm
aWNhdGlvbkVycm9yKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAgICAgICAgICAgICAgdGVz
dGVyLT5tX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gPSBjcmVhdGVTdHJpbmcoYWRvcHRX
SyhXS0NlcnRpZmljYXRlSW5mb0NvcHlWZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uKGNlcnRp
ZmljYXRlSW5mby5nZXQoKSkpLmdldCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPm1faWdu
b3JlQ2VydEVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2NlcHQgc2VydmVyIHRydXN0Iikp
OworICAgICAgICAgICAgICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3Jl
ZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNz
d29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAg
ICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRp
YWwoZGVjaXNpb25MaXN0ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlz
dGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIG51bGxwdHIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50
KG1fd2ViVmlldy0+cGFnZSgpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKyAgICB9CisKKyAg
ICBib29sIGxvYWQoU3RyaW5nIHVybCwgYm9vbCBpZ25vcmVDZXJ0RXJyb3IgPSBmYWxzZSkKKyAg
ICB7CisgICAgICAgIG1faWdub3JlQ2VydEVycm9yID0gaWdub3JlQ2VydEVycm9yOworICAgICAg
ICBtX2RpZEZpbmlzaExvYWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaWRGYWlsTG9hZCA9IGZhbHNl
OworICAgICAgICBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gZmFs
c2U7CisgICAgICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICAgICAgbV92ZXJpZmljYXRpb25FcnJv
ciA9IDA7CisgICAgICAgIG1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbi5jbGVhcigpOworICAg
ICAgICBtX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24uY2xlYXIoKTsKKyAgICAgICAgCisg
ICAgICAgIGF1dG8gdXJsUmVmID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1
cmwudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBXS1BhZ2VMb2FkVVJMKG1fd2ViVmlldy0+cGFn
ZSgpLCB1cmxSZWYuZ2V0KCkpOworICAgICAgICBVdGlsOjpydW4oJm1fZGlkRmluaXNoTG9hZCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gIW1fZGlkRmFpbExvYWQ7CisgICAgfQorCisgICAg
Ym9vbCBkaWRGYWlsTG9hZCgpIHsgcmV0dXJuIG1fZGlkRmFpbExvYWQ7IH0KKyAgICBib29sIGRp
ZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KCkgeyByZXR1cm4gbV9kaWRSZWNl
aXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdDsgfQorICAgIGludCBlcnJvckNvZGUoKSB7
IHJldHVybiBtX2Vycm9yQ29kZTsgfQorICAgIGludCB2ZXJpZmljYXRpb25FcnJvcigpIHsgcmV0
dXJuIG1fdmVyaWZpY2F0aW9uRXJyb3I7IH0KKyAgICBzdGQ6OndzdHJpbmcgbG9jYWxpemVkRXJy
b3JEZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbjsgfQor
ICAgIHN0ZDo6d3N0cmluZyB2ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uKCkgeyByZXR1cm4g
bV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uOyB9CisKKyAgICBzdGQ6OndzdHJpbmcgdGl0
bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRnJhbWVD
b3B5VGl0bGUoV0tQYWdlR2V0TWFpbkZyYW1lKG1fd2ViVmlldy0+cGFnZSgpKSkpLmdldCgpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lnbm9yZUNlcnRFcnJvciB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2RpZEZpbmlzaExvYWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRGYWls
TG9hZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b25SZXF1ZXN0IHsgZmFsc2UgfTsKKworICAgIGludCBtX2Vycm9yQ29kZSB7IDAgfTsKKyAgICBp
bnQgbV92ZXJpZmljYXRpb25FcnJvciB7IDAgfTsKKyAgICBzdGQ6OndzdHJpbmcgbV9sb2NhbGl6
ZWRFcnJvckRlc2NyaXB0aW9uOworICAgIHN0ZDo6d3N0cmluZyBtX3ZlcmlmaWNhdGlvbkVycm9y
RGVzY3JpcHRpb247CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3PiBtX3dlYlZpZXc7CisKK307Cisg
ICAgCitURVNUKEhUVFBTZXJ2ZXIsIFNpbXBsZUhUVFBTZXJ2ZXIpCit7CisgICAgSFRUUFNlcnZl
ciBodHRwU2VydmVyKHsKKyAgICAgICAgeyAiLyIsIHsgIjxodG1sPjx0aXRsZT5TaW1sZSBIVFRQ
IFNlcnZlcjwvdGl0bGU+PGJvZHk+aHR0cCBzZXJ2ZXIgcm9vdDwvYm9keT48L2h0bWw+In19LAor
ICAgICAgICB7ICIvdGVzdC5odG1sIiwgeyI8aHRtbD48dGl0bGU+U2ltcGxlIEhUVFAgU2VydmVy
IHRlc3Q8L3RpdGxlPjxib2R5PnRlc3QuaHRtbDwvYm9keT48L2h0bWw+In19LAorICAgICAgICB7
ICIvaW52YWxpZC5odG1sIiwgezQwNCwgeyB9LCAiPGh0bWw+PHRpdGxlPkZpbGUgbm90IGZvdW5k
PC90aXRsZT48Ym9keT40MDQgRVJST1I8L2JvZHk+PC9odG1sPiJ9fQorICAgIH0sCisgICAgSFRU
UFNlcnZlcjo6UHJvdG9jb2w6Okh0dHAsCisgICAgMyk7CisKKyAgICBTZXJ2ZXJUZXN0ZXIgbG9h
ZGVyOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOworICAgIHVybC5hcHBlbmQoaHR0cFNlcnZlci51
cmwoKSk7CisgICAgRVhQRUNUX1RSVUUobG9hZGVyLmxvYWQodXJsLnRvU3RyaW5nKCkpKTsKKyAg
ICBFWFBFQ1RfRVEobG9hZGVyLnRpdGxlKCksIEwiU2ltbGUgSFRUUCBTZXJ2ZXIiKTsKKworICAg
IHVybC5hcHBlbmQoIi90ZXN0Lmh0bWwiKTsKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh1
cmwudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9FUShsb2FkZXIudGl0bGUoKSwgTCJTaW1wbGUg
SFRUUCBTZXJ2ZXIgdGVzdCIpOworCisgICAgU3RyaW5nQnVpbGRlciBpbnZhbGlkVVJMOworICAg
IGludmFsaWRVUkwuYXBwZW5kKGh0dHBTZXJ2ZXIudXJsKCkpOworICAgIGludmFsaWRVUkwuYXBw
ZW5kKCIvaW52YWxpZC5odG1sIik7CisgICAgRVhQRUNUX1RSVUUobG9hZGVyLmxvYWQoaW52YWxp
ZFVSTC50b1N0cmluZygpKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci50aXRsZSgpLCBMIkZpbGUg
bm90IGZvdW5kIik7Cit9CisKK1RFU1QoSFRUUFNlcnZlciwgU2ltcGxlSFRUUFNTZXJ2ZXIpCit7
CisgICAgSFRUUFNlcnZlciBodHRwc1NlcnZlcih7CisgICAgICAgIHsgIi8iLCB7ICI8aHRtbD48
dGl0bGU+U2ltbGUgSFRUUFMgU2VydmVyPC90aXRsZT48Ym9keT5odHRwcyBzZXJ2ZXIgcm9vdDwv
Ym9keT48L2h0bWw+In19CisgICAgfSwKKyAgICBIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cHMs
CisgICAgNik7CisKKyAgICBTZXJ2ZXJUZXN0ZXIgbG9hZGVyOworICAgIFN0cmluZ0J1aWxkZXIg
dXJsOworICAgIHVybC5hcHBlbmQoaHR0cHNTZXJ2ZXIudXJsKCkpOworICAgIEVYUEVDVF9GQUxT
RShsb2FkZXIubG9hZCh1cmwudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5k
aWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCgpKTsKKworICAgIEVYUEVDVF9F
UShsb2FkZXIuZXJyb3JDb2RlKCksIDYwKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLmxvY2FsaXpl
ZEVycm9yRGVzY3JpcHRpb24oKSwgTCJTU0wgcGVlciBjZXJ0aWZpY2F0ZSBvciBTU0ggcmVtb3Rl
IGtleSB3YXMgbm90IE9LIik7CisgICAgRVhQRUNUX0VRKGxvYWRlci52ZXJpZmljYXRpb25FcnJv
cigpLCAxOCk7CisgICAgRVhQRUNUX0VRKGxvYWRlci52ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0
aW9uKCksIEwic2VsZiBzaWduZWQgY2VydGlmaWNhdGUiKTsKKworICAgIEVYUEVDVF9UUlVFKGxv
YWRlci5sb2FkKHVybC50b1N0cmluZygpLCB0cnVlKSk7CisgICAgRVhQRUNUX1RSVUUobG9hZGVy
LmRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KCkpOworICAgIEVYUEVDVF9F
UShsb2FkZXIudGl0bGUoKSwgTCJTaW1sZSBIVFRQUyBTZXJ2ZXIiKTsKK30KKworc3RhdGljIHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gY2VydGlmaWNhdGVQcml2YXRlS2V5UlNBKCkKK3sKKyAg
ICAvLyBUaGlzIHByaXZhdGUga2V5IGFuZCBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZSB3ZXJlIGdl
bmVyYXRlZCBieSBvcGVuc3NsIGNvbW1hbmQgYmVsb3cuCisgICAgLy8KKyAgICAvLyAgb3BlbnNz
bCByZXEgLXg1MDkgLXNoYTI1NiAtbm9kZXMgLWRheXMgMzY1MCAtbmV3a2V5IHJzYToxMDI0IFwK
KyAgICAvLyAgICAgICAgICAtc3ViaiAiL0M9SlAvU1Q9VG9reW8vTz1TZWxmL0NOPWxvY2FsaG9z
dCIgLWtleW91dCBzZXJ2ZXIua2V5IC1vdXQgc2VydmVyLmNydAorICAgIFN0cmluZyBjZXJ0aWZp
Y2F0ZSgiIgorICAgICAgICAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iCisgICAgICAg
ICJNSUlDVGpDQ0FiZWdBd0lCQWdJSkFKcmRxM2ljVkcvMk1BMEdDU3FHU0liM0RRRUJDd1VBTUVB
eEN6QUpCZ05WXG4iCisgICAgICAgICJCQVlUQWtwUU1RNHdEQVlEVlFRSURBVlViMnQ1YnpFTk1B
c0dBMVVFQ2d3RVUyVnNaakVTTUJBR0ExVUVBd3dKXG4iCisgICAgICAgICJiRzlqWVd4b2IzTjBN
QjRYRFRJd01EZ3dOekE0TlRneE5Wb1hEVE13TURnd05UQTROVGd4TlZvd1FERUxNQWtHXG4iCisg
ICAgICAgICJBMVVFQmhNQ1NsQXhEakFNQmdOVkJBZ01CVlJ2YTNsdk1RMHdDd1lEVlFRS0RBUlRa
V3htTVJJd0VBWURWUVFEXG4iCisgICAgICAgICJEQWxzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJ
aHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQUowcFBjcUNEa2VsXG4iCisgICAgICAgICJNNzVWOWlv
d2crRXhZUk5kcm14bjgxaFg0MFB4MEttTUxkMmVBSlYwaURad3dhejhqQWlYZjZiN2VPOEY0RURJ
XG4iCisgICAgICAgICJvekl1Nlg5V2RxZ0FySDBGR21adDJHSC8wbTQ5Vm9XSnBZeEszMjl4d0wv
VnVGUDVWRmVIclFsRTVsNmpNc1B2XG4iCisgICAgICAgICJsWHQyU0FGWHd4WGNMVFgwRE5sRzhs
NllXaWxmcEhxL0FnTUJBQUdqVURCT01CMEdBMVVkRGdRV0JCU3pOdTJiXG4iCisgICAgICAgICJC
M1puR0ZjemNaSm9ySy90YWl4S21qQWZCZ05WSFNNRUdEQVdnQlN6TnUyYkIzWm5HRmN6Y1pKb3JL
L3RhaXhLXG4iCisgICAgICAgICJtakFNQmdOVkhSTUVCVEFEQVFIL01BMEdDU3FHU0liM0RRRUJD
d1VBQTRHQkFKd0JGVS8vLzJQUlJWMmJSbW9FXG4iCisgICAgICAgICJIT28vaU1zS0hSbGcvTkN6
L01tQmhMOEFWUXl2RkJ2UVVSUms5aHY5ckZ0T0poWE9weE5yNHZSZWZhM01qdElVXG4iCisgICAg
ICAgICJlL3JtSkFGVHRjZFJKcnJjcDAxK2lRYUlBQklYaVExa2FVNmpvS1RaOXpYSDRwOGdlZ0Yx
ck9EcGg4Q2c5MnlpXG4iCisgICAgICAgICJtZERoeFZBS0NCWGhyYzhLaitNOEdlRnZcbiIKKyAg
ICAgICAgIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbiIpOworCisgICAgU3RyaW5nIHByaXZh
dGVLZXkoIiIKKyAgICAgICAgIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuIgorICAgICAg
ICAiTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQUowcFBj
cUNEa2VsTTc1VlxuIgorICAgICAgICAiOWlvd2crRXhZUk5kcm14bjgxaFg0MFB4MEttTUxkMmVB
SlYwaURad3dhejhqQWlYZjZiN2VPOEY0RURJb3pJdVxuIgorICAgICAgICAiNlg5V2RxZ0FySDBG
R21adDJHSC8wbTQ5Vm9XSnBZeEszMjl4d0wvVnVGUDVWRmVIclFsRTVsNmpNc1B2bFh0MlxuIgor
ICAgICAgICAiU0FGWHd4WGNMVFgwRE5sRzhsNllXaWxmcEhxL0FnTUJBQUVDZ1lCQ2s3MEVjOUgr
MGVJNHFJdk8xWnlZb21XQVxuIgorICAgICAgICAiWWJoSlhrUDlVY1lKKzMrc3c2Q09lS2ZBcUl3
bm05N0FISUJxQjF2aGJqaU44VXhOeFhFMUNpQ0tmQ05wWUVoL1xuIgorICAgICAgICAiN1FCOXZx
WERsSEZURkcwT1FrSWI4WFdoT2VjNWI5Z2RHelMwejJSc3ZWOGtQeENtR1Fpbk5GTW9vbjRGZUpP
YlxuIgorICAgICAgICAibkIrZWJ5VVQxTkoyUWZoLzRRSkJBTkFSdjlSS3FTZWJ5MmdMSEY2dGhU
R0NLQXNoRXltdzg4eDIvb0ZYZjYzN1xuIgorICAgICAgICAidmRRaU11RzhXR1RXTWo0cDNvWXZX
U0NLSnZkbVRwcFB3M2gwWUZkYnVqRUNRUURCWFZYSVpqb1QrbUZMVFNEMlxuIgorICAgICAgICAi
NGRuajVXZ2s2aW1sQTNUUW9qNzhOVHp5ak1tMFNHbFV2V2F2ZkUvNEYvZTBkZTBuMS9Lc0I3SitE
a0JEUWM4bVxuIgorICAgICAgICAicTFmdkFrRUF2c1EzUS9XOEIyT3c1OUNnRHpJNmx6ekZhQWJJ
SWdacVVNR2M4SXQvdGMzRXF0VThIM2xtOWZUcFxuIgorICAgICAgICAiRmRPZmdSbXlOc0pUbmFy
QVVIem5NKzVIVW5ENFVRSkFJY0dhaFNhYmd2dFYydUIzSGNKbDJHd25Gekt0M0huU1xuIgorICAg
ICAgICAiL2MwbE04QlRpSUJkZ2hTV0ZzNE56QnJtbHdnUUhUZnRFK1NXSDhRa08rOWU5cDdaZkFX
emp3SkFNdzR3WXljNlxuIgorICAgICAgICAiT05IKzNyc3ZiaEdGcW9MMUk5QXhiblVEcXBpM1do
REtPOFlFZVpKR2VGc3hwYnZ6Ulc5RTgxRk10RWFZQkR5WlxuIgorICAgICAgICAiSzJkQTZ2NDJt
T0ZQeFE9PVxuIgorICAgICAgICAiLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIik7CisKKyAg
ICByZXR1cm4geyBXVEZNb3ZlKGNlcnRpZmljYXRlKSwgV1RGTW92ZShwcml2YXRlS2V5KSB9Owor
fQorCitURVNUKEhUVFBTZXJ2ZXIsIEhUVFBTU2VydmVyV2l0aENlcnQpCit7CisgICAgSFRUUFNl
cnZlciBodHRwc1NlcnZlcih7CisgICAgICAgIHsgIi8iLCB7ICI8aHRtbD48dGl0bGU+SFRUUFMg
U2VydmVyIFdpdGggQ2VydDwvdGl0bGU+PGJvZHk+aHR0cHMgc2VydmVyIHJvb3Q8L2JvZHk+PC9o
dG1sPiJ9fQorICAgIH0sCisgICAgSFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHBzLAorICAgIDYs
CisgICAgY2VydGlmaWNhdGVQcml2YXRlS2V5UlNBKCkKKyAgICApOworCisgICAgU2VydmVyVGVz
dGVyIGxvYWRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHVybDsKKyAgICB1cmwuYXBwZW5kKGh0dHBz
U2VydmVyLnVybCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobG9hZGVyLmxvYWQodXJsLnRvU3RyaW5n
KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIuZGlkUmVjZWl2ZVNlcnZlclRydXN0RXZhbHVh
dGlvblJlcXVlc3QoKSk7CisKKyAgICBFWFBFQ1RfRVEobG9hZGVyLmVycm9yQ29kZSgpLCA2MCk7
CisgICAgRVhQRUNUX0VRKGxvYWRlci5sb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uKCksIEwiU1NM
IHBlZXIgY2VydGlmaWNhdGUgb3IgU1NIIHJlbW90ZSBrZXkgd2FzIG5vdCBPSyIpOworICAgIEVY
UEVDVF9FUShsb2FkZXIudmVyaWZpY2F0aW9uRXJyb3IoKSwgMTgpOworICAgIEVYUEVDVF9FUShs
b2FkZXIudmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbigpLCBMInNlbGYgc2lnbmVkIGNlcnRp
ZmljYXRlIik7CisKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh1cmwudG9TdHJpbmcoKSwg
dHJ1ZSkpOworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFs
dWF0aW9uUmVxdWVzdCgpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRpdGxlKCksIEwiSFRUUFMg
U2VydmVyIFdpdGggQ2VydCIpOworfQorCit9IC8vIG5hbWVzcGFjZSBDdXJsCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoQ1VSTCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJveHkubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb3h5Lm1tCmluZGV4IDJlZmZhODFiYzBmZGQy
OTljMWZlOGIyNWU4ZDAwNmM3MWU3MGQ5YTYuLjQ1Njg5MjQ1MzU1YTE4MTI4YTBkYjBiN2NhMTk1
ZmQ2N2M0NWJiM2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJveHkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Qcm94eS5tbQpAQCAtOTQsNyArOTQsNyBAQCBURVNUKFdlYktpdCwgSFRUUFNQcm94eSkKIAog
VEVTVChXZWJLaXQsIEhUVFBQcm94eUF1dGhlbnRpY2F0aW9uKQogewotICAgIFRDUFNlcnZlciBz
ZXJ2ZXIoW10gKGludCBzb2NrZXQpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VENQU2VydmVyPiBz
ZXJ2ZXIgPSBtYWtlVW5pcXVlPFRDUFNlcnZlcj4oWyZzZXJ2ZXJdIChpbnQgc29ja2V0KSB7CiAg
ICAgICAgIGF1dG8gcmVxdWVzdFNob3VsZENvbnRhaW4gPSBbXSAoY29uc3QgYXV0byYgcmVxdWVz
dCwgY29uc3QgY2hhciogc3RyKSB7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlcXVlc3QuZGF0YSgpKSwgc3RyLCByZXF1ZXN0
LnNpemUoKSkpOwogICAgICAgICB9OwpAQCAtMTE2LDE0ICsxMTYsMTMgQEAgVEVTVChXZWJLaXQs
IEhUVFBQcm94eUF1dGhlbnRpY2F0aW9uKQogICAgICAgICAgICAgIkNvbm5lY3Rpb246IGNsb3Nl
XHJcbiIKICAgICAgICAgICAgICJcclxuIjsKICAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2Nr
ZXQsIHJlc3BvbnNlMiwgc3RybGVuKHJlc3BvbnNlMikpOwotCi0gICAgICAgIFRDUFNlcnZlcjo6
c3RhcnRTZWN1cmVDb25uZWN0aW9uKHNvY2tldCwgVENQU2VydmVyOjpyZXNwb25kV2l0aE9LKTsK
KyAgICAgICAgc2VydmVyLT5zdGFydFNlY3VyZUNvbm5lY3Rpb24oc29ja2V0LCBUQ1BTZXJ2ZXI6
OnJlc3BvbmRXaXRoT0spOwogICAgIH0pOwogICAgIAogICAgIGF1dG8gc3RvcmVDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CiAg
ICAgW3N0b3JlQ29uZmlndXJhdGlvbiBzZXRQcm94eUNvbmZpZ3VyYXRpb246QHsKICAgICAgICAg
KE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQU1Byb3h5SG9zdDogQCIxMjcuMC4wLjEi
LAotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZTdHJlYW1Qcm9wZXJ0eUhUVFBTUHJveHlQb3J0OiBA
KHNlcnZlci5wb3J0KCkpCisgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRU
UFNQcm94eVBvcnQ6IEAoc2VydmVyLT5wb3J0KCkpCiAgICAgfV07CiAgICAgW3N0b3JlQ29uZmln
dXJhdGlvbiBzZXRBbGxvd3NTZXJ2ZXJQcmVjb25uZWN0Ok5PXTsKICAgICBbc3RvcmVDb25maWd1
cmF0aW9uIHNldFByZXZlbnRzU3lzdGVtSFRUUFByb3h5QXV0aGVudGljYXRpb246WUVTXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY3VybC9IVFRQU2VydmVyLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvY3VybC9IVFRQU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTY0Y2IzODVh
MDgxZThiY2IyM2U4OWRkNGNlMTdkY2JmNWQyODY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRUUFNlcnZlci5oIgor
CisjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitIVFRQU2VydmVyOjpIVFRQU2VydmVy
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiBy
ZXNwb25zZXMsIFByb3RvY29sIHByb3RvY29sLCBzaXplX3QgY29ubmVjdGlvbnMsIE9wdGlvbmFs
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHNlcnZlckNlcnRpZmljYXRlKQorICAgIDogbV9w
cm90b2NvbChwcm90b2NvbCkKKyAgICAsIG1fcmVxdWVzdFJlc3BvbnNlTWFwKFtdKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+
PiBsaXN0KSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVFRQU2VydmVyOjpIVFRQUmVzcG9u
c2U+IG1hcDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbGlzdCkKKyAgICAgICAgICAgIG1h
cC5hZGQocGFpci5maXJzdCwgcGFpci5zZWNvbmQpOworICAgICAgICByZXR1cm4gbWFwOworICAg
IH0ocmVzcG9uc2VzKSkKK3sKKyNpZiAhSEFWRShTU0wpCisgICAgQVNTRVJUKHByb3RvY29sID09
IFByb3RvY29sOjpIdHRwKTsKKyNlbmRpZgorCisgICAgaWYgKHByb3RvY29sID09IFByb3RvY29s
OjpIdHRwKSB7CisgICAgICAgIG1fc2VydmVyID0gV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RN
YWxsb2NDaGVjazxUQ1BTZXJ2ZXI+KAorICAgICAgICAgICAgW3RoaXNdIChTb2NrZXQ6OlNvY2tl
dCBzb2NrZXQpIHsKKyAgICAgICAgICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhzb2NrZXQpOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb25zKTsKKyAgICB9IGVsc2UgaWYg
KHByb3RvY29sID09IFByb3RvY29sOjpIdHRwcykgeworI2lmIEhBVkUoU1NMKQorICAgICAgICBt
X3NlcnZlciA9IFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8VENQU2VydmVy
PigKKyAgICAgICAgICAgIFRDUFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLAorICAgICAgICAgICAg
W3RoaXNdIChTU0wqIHNzbCkgeworICAgICAgICAgICAgICAgIGlmIChzc2wpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKHNzbCk7CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgV1RGOjpudWxsb3B0LCBjb25uZWN0aW9ucywgc2VydmVyQ2VydGlmaWNhdGUpOworI2Vu
ZGlmCisgICAgfQorfQorCitIVFRQU2VydmVyOjp+SFRUUFNlcnZlcigpCit7CisgICAgaWYgKG1f
c2VydmVyKQorICAgICAgICBtX3NlcnZlci0+c3RvcCgpOworfQorCitTdHJpbmcgSFRUUFNlcnZl
cjo6dXJsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VydmVyKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCIiKTsKKworICAgIGlmIChtX3Byb3RvY29sID09IFByb3RvY29sOjpIdHRwKQorICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiaHR0cDovLzEyNy4wLjAuMToiLCBTdHJpbmc6Om51bWJlcihw
b3J0KCkpKTsKKworICAgIGlmIChtX3Byb3RvY29sID09IFByb3RvY29sOjpIdHRwcykKKyAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImh0dHBzOi8vMTI3LjAuMC4xOiIsIFN0cmluZzo6bnVtYmVy
KHBvcnQoKSkpOworCisgICAgcmV0dXJuIFN0cmluZygiIik7Cit9CisKK3VpbnQxNl90IEhUVFBT
ZXJ2ZXI6OnBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlcnZlciA/IG1fc2VydmVyLT5w
b3J0KCkgOiAwOworfQorCitzdGF0aWMgU3RyaW5nIHN0YXR1c1RleHQodW5zaWduZWQgc3RhdHVz
Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICBjYXNlIDIwMDoKKyAgICAg
ICAgcmV0dXJuICJPSyJfczsKKyAgICBjYXNlIDMwMToKKyAgICAgICAgcmV0dXJuICJNb3ZlZCBQ
ZXJtYW5lbnRseSJfczsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gIHZvaWQgSFRUUFNlcnZlcjo6cmVz
cG9uZFRvUmVxdWVzdHMoVCBjb25uZWN0aW9uSGFuZGxlKQoreworICAgIHN0YXRpYyBpbnQgQ09V
TlQgPSAwOworICAgIGF1dG8gcmVxdWVzdCA9IFRDUFNlcnZlcjo6cmVhZChjb25uZWN0aW9uSGFu
ZGxlKTsKKyAgICBhdXRvIHJlcXVlc3RTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3Qu
ZGF0YSgpLCByZXF1ZXN0LnNpemUoKSk7CisKKyAgICBjb25zdCBTdHJpbmcgZ2V0UGF0aFByZWZp
eCgiR0VUICIpOworICAgIGNvbnN0IFN0cmluZyBwb3N0UGF0aFByZWZpeCgiUE9TVCAiKTsKKyAg
ICBjb25zdCBTdHJpbmcgcGF0aFN1ZmZpeCgiIEhUVFAvMS4xXHJcbiIpOworCisgICAgYXV0byBw
YXRoRW5kID0gcmVxdWVzdFN0cmluZy5maW5kKHBhdGhTdWZmaXgpOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UocGF0aEVuZCAhPSBub3RGb3VuZCAsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVz
dCBpcyBIVFRQIDEuMSIpOworICAgIGF1dG8gZG91YmxlTmV3bGluZSA9IHJlcXVlc3RTdHJpbmcu
ZmluZCgiXHJcblxyXG4iKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGRvdWJsZU5ld2xpbmUg
IT0gbm90Rm91bmQsICJIVFRQU2VydmVyIGFzc3VtZXMgZW50aXJlIEhUVFAgcmVxdWVzdCBpcyBy
ZWNlaXZlZCBhdCBvbmNlIik7CisKKyAgICBzaXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7Cisg
ICAgaWYgKCFyZXF1ZXN0U3RyaW5nLmZpbmQoZ2V0UGF0aFByZWZpeCkpCisgICAgICAgIHBhdGhQ
cmVmaXhMZW5ndGggPSBnZXRQYXRoUHJlZml4Lmxlbmd0aCgpOworICAgIGVsc2UgaWYgKCFyZXF1
ZXN0U3RyaW5nLmZpbmQocG9zdFBhdGhQcmVmaXgpKQorICAgICAgICBwYXRoUHJlZml4TGVuZ3Ro
ID0gcG9zdFBhdGhQcmVmaXgubGVuZ3RoKCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRo
UHJlZml4TGVuZ3RoLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgR0VUIG9yIFBPU1Qi
KTsKKworICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0aEVuZCAtIHBhdGhQcmVmaXhMZW5ndGg7
CisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0U3RyaW5nLnN1YnN0cmluZyhwYXRoUHJlZml4TGVu
Z3RoLCBwYXRoTGVuZ3RoKTsKKyAgICBpZiAocGF0aC5maW5kKCJodHRwOi8vIikgIT0gbm90Rm91
bmQgfHwgcGF0aC5maW5kKCJodHRwczovLyIpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIFVSTCBy
ZXF1ZXN0VVJMKHsgfSwgcGF0aCk7CisgICAgICAgIHBhdGggPSBTdHJpbmcocmVxdWVzdFVSTC5w
YXRoKCkuY2hhcmFjdGVyczgoKSwgcmVxdWVzdFVSTC5wYXRoKCkubGVuZ3RoKCkpOworICAgIH0K
KworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXF1ZXN0UmVzcG9uc2VNYXAuY29udGFpbnMo
cGF0aCksICJUaGlzIEhUVFBTZXJ2ZXIgZG9lcyBub3Qga25vdyBob3cgdG8gcmVzcG9uZCB0byBh
IHJlcXVlc3QgZm9yICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKworICAgIGF1dG8gY29udGVu
dExlbmd0aEJlZ2luID0gcmVxdWVzdFN0cmluZy5maW5kKCJDb250ZW50LUxlbmd0aDogIik7Cisg
ICAgaWYgKGNvbnRlbnRMZW5ndGhCZWdpbiAhPSBub3RGb3VuZCkgeworICAgICAgICBhdXRvIGNv
bnRlbnRMZW5ndGhFbmQgPSByZXF1ZXN0U3RyaW5nLmZpbmQoIlxyXG4iLCBjb250ZW50TGVuZ3Ro
QmVnaW4pOworICAgICAgICBhdXRvIGxlbmd0aFN0cmluZyA9IHJlcXVlc3RTdHJpbmcuc3Vic3Ry
aW5nKGNvbnRlbnRMZW5ndGhCZWdpbiwgY29udGVudExlbmd0aEVuZCAtIGNvbnRlbnRMZW5ndGhC
ZWdpbik7CisgICAgICAgIHNpemVfdCBjb250ZW50TGVuZ3RoID0gbGVuZ3RoU3RyaW5nLnRvVUlu
dCgpOworICAgICAgICBzaXplX3QgaGVhZGVyTGVuZ3RoID0gZG91YmxlTmV3bGluZSArIFN0cmlu
ZygiXHJcblxyXG4iKS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3BvbnNlID0gbV9y
ZXF1ZXN0UmVzcG9uc2VNYXAuZ2V0KHBhdGgpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2VC
dWlsZGVyOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIpOworICAgIHJl
c3BvbnNlQnVpbGRlci5hcHBlbmROdW1iZXIocmVzcG9uc2Uuc3RhdHVzQ29kZSk7CisgICAgcmVz
cG9uc2VCdWlsZGVyLmFwcGVuZCgnICcpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoc3Rh
dHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2RlKSk7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVu
ZCgiXHJcbkNvbnRlbnQtTGVuZ3RoOiAiKTsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kTnVt
YmVyKHJlc3BvbnNlLmJvZHkubGVuZ3RoKCkpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQo
IlxyXG4iKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiByZXNwb25zZS5oZWFkZXJGaWVsZHMpIHsK
KyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgIHJlc3Bv
bnNlQnVpbGRlci5hcHBlbmQoIjogIik7CisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQo
cGFpci52YWx1ZSk7CisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKKyAg
ICB9CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIHJlc3BvbnNlQnVp
bGRlci5hcHBlbmQocmVzcG9uc2UuYm9keSk7CisKKyAgICBhdXRvIHJlc3BvbnNlQm9keUFuZEhl
YWRlciA9IHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygpLnJlbGVhc2VJbXBsKCk7CisgICAgVENQ
U2VydmVyOjp3cml0ZShjb25uZWN0aW9uSGFuZGxlLCByZXNwb25zZUJvZHlBbmRIZWFkZXItPmNo
YXJhY3RlcnM4KCksIHJlc3BvbnNlQm9keUFuZEhlYWRlci0+bGVuZ3RoKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2N1cmwvSFRUUFNlcnZlci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iODhiMDBmMjY5NjFlYjQ3NDJhOGE0NDdkN2Q4NzYwNTZiODkyNzg3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRDUFNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEhUVFBT
ZXJ2ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBIVFRQUmVzcG9uc2U7CisgICAgZW51bSBjbGFz
cyBQcm90b2NvbCA6IHVpbnQ4X3QgeyBIdHRwLCBIdHRwcyB9OworCisgICAgSFRUUFNlcnZlcihz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4sIFBy
b3RvY29sID0gUHJvdG9jb2w6Okh0dHAsIHNpemVfdCBjb25uZWN0aW9ucyA9IDEsIE9wdGlvbmFs
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB+SFRUUFNl
cnZlcigpOworCisgICAgU3RyaW5nIHVybCgpIGNvbnN0OworICAgIHVpbnQxNl90IHBvcnQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHJlc3BvbmRU
b1JlcXVlc3RzKFQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFRDUFNlcnZlcj4gbV9zZXJ2ZXI7
CisgICAgY29uc3QgUHJvdG9jb2wgbV9wcm90b2NvbDsKKyAgICBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgSFRUUFJlc3BvbnNlPiBtX3JlcXVlc3RSZXNwb25zZU1hcDsKK307CisKK3N0cnVjdCBIVFRQ
U2VydmVyOjpIVFRQUmVzcG9uc2UgeworICAgIEhUVFBSZXNwb25zZShTdHJpbmcmJiBib2R5KQor
ICAgICAgICA6IGJvZHkoV1RGTW92ZShib2R5KSkgeyB9CisgICAgSFRUUFJlc3BvbnNlKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAg
ICA6IGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCisgICAgICAgICwgYm9keShX
VEZNb3ZlKGJvZHkpKSB7IH0KKyAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIFN0cmluZyYmIGJvZHkgPSB7
IH0pCisgICAgICAgIDogc3RhdHVzQ29kZShzdGF0dXNDb2RlKQorICAgICAgICAsIGhlYWRlckZp
ZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCisgICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkp
KSB7IH0KKworICAgIEhUVFBSZXNwb25zZShjb25zdCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7
CisgICAgSFRUUFJlc3BvbnNlKEhUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7CisgICAgSFRUUFJl
c3BvbnNlKCkgPSBkZWZhdWx0OworICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0b3I9KGNvbnN0IEhU
VFBSZXNwb25zZSYpID0gZGVmYXVsdDsKKyAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShIVFRQ
UmVzcG9uc2UmJikgPSBkZWZhdWx0OworCisgICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7IDIwMCB9
OworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlckZpZWxkczsKKyAgICBTdHJpbmcg
Ym9keTsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzNmMDFhMDJi
MzI1NDkzMWI4Nzc5NTcwMjZmYmUxNTZiMDEyYjJkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCkBAIC0wLDAgKzEsODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U29ja2V0LmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworbmFtZXNwYWNlIFNvY2tldCB7CisKK3ZvaWQgaW5pdGlhbGl6ZSgpCit7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIGZsYWc7CisKKyAgICBzdGQ6OmNhbGxfb25jZShmbGFnLCBbXSB7Cisg
ICAgICAgIFdTQURBVEEgZGF0YTsKKyAgICAgICAgV1NBU3RhcnR1cChNQUtFV09SRCgyLCAwKSwg
JmRhdGEpOworICAgIH0pOworfQorCitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBl
LCBpbnQgcHJvdG9jb2wpCit7CisgICAgcmV0dXJuIDo6c29ja2V0KGRvbWFpbiwgdHlwZSwgcHJv
dG9jb2wpOworfQorCitib29sIGlzVmFsaWRTb2NrZXQoU29ja2V0IHNvY2tldCkKK3sKKyAgICBy
ZXR1cm4gc29ja2V0ICE9IElOVkFMSURfU09DS0VUOworfQorCitTb2NrZXQgYWNjZXB0KFNvY2tl
dCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6YWNjZXB0KHNvY2tldCwgbnVsbHB0ciwgbnVsbHB0
cik7Cit9CisKK2ludCBzaHV0ZG93bihTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OnNo
dXRkb3duKHNvY2tldCwgU0RfQk9USCk7Cit9CisKK2ludCBjbG9zZShTb2NrZXQgc29ja2V0KQor
eworICAgIHJldHVybiA6OmNsb3Nlc29ja2V0KHNvY2tldCk7Cit9CisKK2ludCByZWFkKFNvY2tl
dCBzb2NrZXQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnJl
Y3Yoc29ja2V0LCBzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQorCitp
bnQgd3JpdGUoU29ja2V0IHNvY2tldCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQp
Cit7CisgICAgcmV0dXJuIDo6c2VuZChzb2NrZXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihi
dWZmZXIpLCBjb3VudCwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFNvY2tldAorfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409506</attachid>
            <date>2020-09-23 15:19:12 -0700</date>
            <delta_ts>2021-08-24 02:14:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20200924071910.patch</filename>
            <type>text/plain</type>
            <size>47872</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NDY0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjJhNDUyMmZhZjNkZDc3NWU4ODQ3MGY0NzlmMzc4ZTJm
M2IzMzNkNi4uMGY4MjUwNDA5ODJjMzE3MGIwYmI2NGIzMjdlN2FkYTY0ZGI3ODIxNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkx
IEBACisyMDIwLTA5LTI0ICBUYWthc2hpIEtvbW9yaSAgPHhUYWthc2hpLktvbW9yaUBqcC5zb255
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgSFRUUFNlcnZlciBmb3IgQVBJIHRlc3RzIGluIGMr
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1Mzc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVt
ZW50ZWQgYSBIVFRQKFMpIHNlcnZlciBmb3IgQVBJIHRlc3RzIGZvciB3aW4tcG9ydC4KKyAgICAg
ICAgVGhpcyBzZXJ2ZXIgc3VwcG9ydHMgdGxzIGNvbm5lY3Rpb24gYW5kIGNhbiByZXNwb25kIHRv
IHNpbXBsZSBIVFRQKFMpIHJlcXVlc3RzLgorCisgICAgICAgIFN1bW1hcnkgb2YgaW1wbGVtZW50
YXRpb24uCisgICAgICAgICAgICBIVFRQU2VydmVyUE9TSVg6IFRoZSBzZXJ2ZXIuIEl0IHVzZXMg
Q29ubmVjdGlvbiB3aGljaCBpcyBhYnN0cmFjdGVkIHNvY2tldC4KKyAgICAgICAgICAgIENvbm5l
Y3Rpb246IEFic3RyYWN0ZWQgZW5kcG9pbnQgb2YgY29ubmVjdGlvbi4gSXQgY2FuIGhhbmRsZSBU
TFMgY29ubmVjdGlvbi4KKyAgICAgICAgICAgIFBsYXRmb3JtU29ja2V0OiBBIHRoaW4gbGF5ZXIg
dG8gcmVtb3ZlIGRpZmZlcmVuY2VzIGJldHdlZW4gdW5peCBzb2NrZXQgYW5kIHdpbnNvY2syLgor
CisJVGVzdHM6IFRlc3RzL1dlYktpdC9IVFRQU2VydmVyLmNwcAorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9Db25uZWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29u
bmVjdGlvbjo6aXNTZWN1cmVDb25uZWN0aW9uKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0Nv
bm5lY3Rpb25QT1NJWC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6aW5pdGlh
bGl6ZVNTTExpYnJhcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c29ja2V0QmluZExpc3Rl
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpzZXRTZWN1cmVDb25uZWN0
aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5n
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnN0b3BMaXN0ZW5pbmcpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6Q29ubmVjdGlvbik6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp+Q29ubmVjdGlvbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpDb25uZWN0aW9uOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkNvbm5lY3Rpb246OnBvcnQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Q29ubmVjdGlvbjo6c2VuZCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0
aW9uOjpyZWNlaXZlQnl0ZXMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6
dGVybWluYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0hUVFBTZXJ2ZXJQT1NJWC5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpnZXRSZXNw
b25zZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyUE9TSVg6OnBhcnNlUmVx
dWVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyUE9TSVg6OmJ1aWxkUmVz
cG9uc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpyZXNwb25k
VG9SZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXJQT1NJWDo6SFRU
UFNlcnZlclBPU0lYKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1fbGlzdGVuaW5nQ29ubmVj
dGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptX2NlcnRpZmljYXRlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXJQT1NJWDo6fkhUVFBTZXJ2ZXJQT1NJWCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyUE9TSVg6OnBvcnQgY29uc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjp1cmwgY29uc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpIVFRQUmVzcG9uc2U6OnN0YXR1c1RleHQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpDZXJ0aWZpY2F0ZTo6
Y3JlYXRlRnJvbVBFTSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyUE9TSVg6
OkNlcnRpZmljYXRlOjp+Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRU
UFNlcnZlclBPU0lYOjpQcml2YXRlS2V5OjpjcmVhdGVGcm9tUEVNKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkhUVFBTZXJ2ZXJQT1NJWDo6UHJpdmF0ZUtleTo6flByaXZhdGVLZXkpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvSFRUUFNlcnZlclBPU0lYLmg6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpIVFRQU2VydmVyUE9TSVgpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpyZXNwb25kVG9SZXF1ZXN0KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXJQT1NJWDo6SFRUUFJlc3BvbnNlOjpIVFRQ
UmVzcG9uc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlclBPU0lYOjpDZXJ0
aWZpY2F0ZTo6eDUwOSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyUE9TSVg6
OlByaXZhdGVLZXk6OmtleSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tl
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0UE9TSVgu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNvY2tldCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpzaHV0
ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
b2NrZXQ6OndyaXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtl
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0hUVFBTZXJ2ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZVN0cmluZyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OlNlcnZlclRlc3Rlcik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmxvYWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U2VydmVyVGVzdGVyOjpkaWRGYWlsTG9hZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2
ZXJUZXN0ZXI6OmRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3IpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpsb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3JE
ZXNjcmlwdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnRpdGxl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNlcnRpZmljYXRlUHJpdmF0ZUtleVJTQSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL3dp
bi9QbGF0Zm9ybVNvY2tldFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U29ja2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6c29j
a2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aXNWYWxpZFNvY2tldCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmFjY2VwdCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTb2NrZXQ6OnNodXRkb3duKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tl
dDo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpyZWFkKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6d3JpdGUpOgorCiAyMDIwLTA5LTIyICBLZWl0aCBS
b2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVbmlmeSBkZWJ1ZyBhbmQgcmVs
ZWFzZSB0YXJnZXQgYWxpYXNlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25u
ZWN0aW9uLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ZmZlMWUzYjNkMDNhODYwYzgyYjFlNDUwZDcwZDExMGEyOTc5OTUwCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNp
bmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYv
Q29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
UGxhdGZvcm1Tb2NrZXQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K2NsYXNzIENvbm5lY3Rpb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVz
aW5nIFJlc3BvbnNlSGFuZGxlclR5cGUgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjp1bmlxdWVf
cHRyPENvbm5lY3Rpb24+KT47CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZf
dCBJbnZhbGlkUG9ydCA9IDA7CisKKyAgICBDb25uZWN0aW9uKCk7CisgICAgQ29ubmVjdGlvbihS
ZXNwb25zZUhhbmRsZXJUeXBlJiYsIFg1MDkqLCBFVlBfUEtFWSopOworICAgIH5Db25uZWN0aW9u
KCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2b2lkIHNlbmQoU3RyaW5nJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgY29uc3Q7CisgICAgdm9pZCByZWNlaXZlQnl0
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGUg
PSBudWxscHRyKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgdWludDE2X3QgcG9ydCgp
IGNvbnN0OworCitwcml2YXRlOgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIGJvb2wgaXNTZWN1
cmVDb25uZWN0aW9uKCkgeyByZXR1cm4gbV94NTA5ICYmIG1fcHJpdmF0ZUtleTsgfQorICAgIHZv
aWQgc3RhcnRMaXN0ZW5pbmcoKTsKKyAgICB2b2lkIHN0b3BMaXN0ZW5pbmcoKTsKKyAgICBib29s
IHNldFNlY3VyZUNvbm5lY3Rpb24oWDUwOSosIEVWUF9QS0VZKik7CisKKyAgICBTU0wqIG1fc3Ns
IHsgbnVsbHB0ciB9OworICAgIFg1MDkqIG1feDUwOSB7IG51bGxwdHIgfTsKKyAgICBFVlBfUEtF
WSogbV9wcml2YXRlS2V5IHsgbnVsbHB0ciB9OworCisgICAgU29ja2V0OjpTb2NrZXQgbV9zb2Nr
ZXQgeyBTb2NrZXQ6OkludmFsaWRTb2NrZXQgfTsKKyAgICBib29sIG1fcnVubmluZ0xpc3Rlbmlu
ZyB7IGZhbHNlIH07CisgICAgdWludDE2X3QgbV9wb3J0IHsgSW52YWxpZFBvcnQgfTsKKyAgICBz
dGQ6OnRocmVhZCBtX2xpc3RlbmluZ1RocmVhZDsKKyAgICBSZXNwb25zZUhhbmRsZXJUeXBlIG1f
cmVzcG9uc2VIYW5kbGVyOworI2VuZGlmCisKK307CisKK30gLy8gbmFtZXNwYWNkZSBUZXN0V2Vi
S2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25QT1NJWC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25QT1NJWC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Mjg3ZTYyMmVhYTA3Yzc0NGViMmVjYjY4ZjkzMDYyYzc0OGNhYzQzZgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvblBPU0lYLmNwcApAQCAtMCwwICsxLDIw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgorCisjaW5jbHVkZSA8bXV0ZXg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKK3ZvaWQgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBzc2xJbml0aWFsaXplZDsKKyAgICBzdGQ6OmNhbGxfb25jZShzc2xJbml0aWFsaXplZCwg
W10geworICAgICAgICBTU0xfbGlicmFyeV9pbml0KCk7CisgICAgfSk7Cit9CisKK09wdGlvbmFs
PHN0ZDo6cGFpcjxTb2NrZXQ6OlNvY2tldCwgdWludDE2X3Q+PiBzb2NrZXRCaW5kTGlzdGVuKCkK
K3sKKyAgICBTb2NrZXQ6OmluaXRpYWxpemUoKTsKKworICAgIGNvbnN0IGludCBCYWNrbG9nID0g
ODsKKyAgICBhdXRvIGxpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6c29ja2V0KFBGX0lORVQsIFNP
Q0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoIVNvY2tldDo6aXNWYWxpZFNvY2tldChsaXN0ZW5pbmdT
b2NrZXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgLy8gUG9ydHMgNDkx
NTItNjU1MzUgYXJlIHVuYWxsb2NhdGVkIHBvcnRzLiBUcnkgdW50aWwgd2UgZmluZCBvbmUgdGhh
dCdzIGZyZWUuCisgICAgZm9yICh1aW50MTZfdCBwb3J0ID0gNDkxNTI7IHBvcnQgPD0gNjU1MzU7
IHBvcnQrKykgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKKyAgICAgICAgbWVt
c2V0KCZuYW1lLCAwLCBzaXplb2YobmFtZSkpOworICAgICAgICBuYW1lLnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOworICAgICAgICBuYW1lLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIG5h
bWUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIGlmIChiaW5k
KGxpc3RlbmluZ1NvY2tldCwgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6
ZW9mKG5hbWUpKSA8IDApIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcG9ydCBpcyBidXN5LiBUcnkg
dGhlIG5leHQgcG9ydC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmICg6Omxpc3RlbihsaXN0ZW5pbmdTb2NrZXQsIEJhY2tsb2cpID09IFNPQ0tFVF9FUlJPUikg
eworICAgICAgICAgICAgU29ja2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihsaXN0ZW5pbmdTb2NrZXQsIHBvcnQpOyAvLyBTdWNjZXNzZnVsbHkgc2V0IHVw
IGxpc3RlbmluZyBwb3J0LgorICAgIH0KKworICAgIC8vIENvdWxkbid0IGZpbmQgYW4gYXZhaWxh
YmxlIHBvcnQuCisgICAgU29ja2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2V0U2VjdXJlQ29ubmVjdGlv
bihYNTA5KiB4NTA5LCBFVlBfUEtFWSogcHJpdmF0ZUtleSkKK3sKKyAgICBpbml0aWFsaXplU1NM
TGlicmFyeSgpOworCisgICAgU1NMX0NUWCogY29udGV4dCA9IFNTTF9DVFhfbmV3KFNTTHYyM19t
ZXRob2QoKSk7CisgICAgaWYgKHg1MDkpCisgICAgICAgIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRl
KGNvbnRleHQsIHg1MDkpOworICAgIGlmIChwcml2YXRlS2V5KQorICAgICAgICBTU0xfQ1RYX3Vz
ZV9Qcml2YXRlS2V5KGNvbnRleHQsIHByaXZhdGVLZXkpOworCisgICAgbV9zc2wgPSBTU0xfbmV3
KGNvbnRleHQpOworICAgIFNTTF9zZXRfZmQobV9zc2wsIG1fc29ja2V0KTsKKyAgICBib29sIGNv
bm5lY3RlZCA9IFNTTF9hY2NlcHQobV9zc2wpID4gMDsKKyAgICBTU0xfQ1RYX2ZyZWUoY29udGV4
dCk7CisKKyAgICByZXR1cm4gY29ubmVjdGVkOworfQorCit2b2lkIENvbm5lY3Rpb246OnN0YXJ0
TGlzdGVuaW5nKCkKK3sKKyAgICBtX3J1bm5pbmdMaXN0ZW5pbmcgPSB0cnVlOworICAgIG1fbGlz
dGVuaW5nVGhyZWFkID0gc3RkOjp0aHJlYWQoW3RoaXMsIGxpc3RlbmluZ1NvY2tldCA9IG1fc29j
a2V0XSB7CisgICAgICAgIHdoaWxlIChtX3J1bm5pbmdMaXN0ZW5pbmcpIHsKKyAgICAgICAgICAg
IGZkX3NldCByZWFkZmQ7CisgICAgICAgICAgICBGRF9aRVJPKCZyZWFkZmQpOworICAgICAgICAg
ICAgRkRfU0VUKGxpc3RlbmluZ1NvY2tldCwgJnJlYWRmZCk7CisKKyAgICAgICAgICAgIHN0cnVj
dCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAg
ICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAwOworCisgICAgICAgICAgICBhdXRvIHJjID0gOjpz
ZWxlY3QobGlzdGVuaW5nU29ja2V0ICsgMSwgJnJlYWRmZCwgbnVsbHB0ciwgbnVsbHB0ciwgJnRp
bWVvdXQpOworICAgICAgICAgICAgaWYgKHJjIDw9IDApCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoIW1fcnVubmluZ0xpc3RlbmluZykKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgYXV0byBjb25uZWN0aW9uU29ja2V0ID0gU29ja2V0Ojph
Y2NlcHQobGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VDb25uZWN0
aW9uID0gV1RGOjptYWtlVW5pcXVlPENvbm5lY3Rpb24+KCk7CisgICAgICAgICAgICByZXNwb25z
ZUNvbm5lY3Rpb24tPm1fc29ja2V0ID0gY29ubmVjdGlvblNvY2tldDsKKyAgICAgICAgICAgIGlm
IChpc1NlY3VyZUNvbm5lY3Rpb24oKSAmJiAhcmVzcG9uc2VDb25uZWN0aW9uLT5zZXRTZWN1cmVD
b25uZWN0aW9uKG1feDUwOSwgbV9wcml2YXRlS2V5KSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgaWYgKG1fcmVzcG9uc2VIYW5kbGVyKSB7CisgICAgICAgICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcmVzcG9uc2VDb25uZWN0aW9uID0gV1RGTW92ZShy
ZXNwb25zZUNvbm5lY3Rpb24pXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBtX3Jl
c3BvbnNlSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlQ29ubmVjdGlvbikpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgQ29u
bmVjdGlvbjo6c3RvcExpc3RlbmluZygpCit7CisgICAgaWYgKG1fcnVubmluZ0xpc3RlbmluZykg
eworICAgICAgICBtX3J1bm5pbmdMaXN0ZW5pbmcgPSBmYWxzZTsKKyAgICAgICAgbV9saXN0ZW5p
bmdUaHJlYWQuam9pbigpOworICAgIH0KK30KKworQ29ubmVjdGlvbjo6Q29ubmVjdGlvbigpCit7
Cit9CisKK0Nvbm5lY3Rpb246OkNvbm5lY3Rpb24oUmVzcG9uc2VIYW5kbGVyVHlwZSYmIHJlc3Bv
bnNlSGFuZGxlciwgWDUwOSogeDUwOSwgRVZQX1BLRVkqIHByaXZhdGVLZXkpCisgICAgOiBtX3Jl
c3BvbnNlSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlSGFuZGxlcikpCit7CisgICAgYXV0byBzb2Nr
ZXRfcG9ydCA9IHNvY2tldEJpbmRMaXN0ZW4oKTsKKyAgICBpZiAoc29ja2V0X3BvcnQpIHsKKyAg
ICAgICAgbV9zb2NrZXQgPSBzb2NrZXRfcG9ydC0+Zmlyc3Q7CisgICAgICAgIG1fcG9ydCA9IHNv
Y2tldF9wb3J0LT5zZWNvbmQ7CisKKyAgICAgICAgbV94NTA5ID0geDUwOTsKKyAgICAgICAgbV9w
cml2YXRlS2V5ID0gcHJpdmF0ZUtleTsKKyAgICAgICAgc3RhcnRMaXN0ZW5pbmcoKTsKKyAgICB9
Cit9CisKK0Nvbm5lY3Rpb246On5Db25uZWN0aW9uKCkKK3sKKyAgICBzdG9wTGlzdGVuaW5nKCk7
CisgICAgdGVybWluYXRlKCk7CisKKyAgICBpZiAobV9zc2wpCisgICAgICAgIFNTTF9mcmVlKG1f
c3NsKTsKK30KKworYm9vbCBDb25uZWN0aW9uOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wb3J0ICE9IFNvY2tldDo6SW52YWxpZFNvY2tldDsKK30KKwordWludDE2X3QgQ29ubmVj
dGlvbjo6cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcG9ydDsKK30KKwordm9pZCBDb25u
ZWN0aW9uOjpzZW5kKFN0cmluZyYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0ZSkgY29uc3QKK3sKKyAgICBpZiAobV9zc2wpCisgICAgICAgIFNTTF93cml0ZSht
X3NzbCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7Cisg
ICAgZWxzZSBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KG1fc29ja2V0KSkKKyAgICAgICAgU29j
a2V0Ojp3cml0ZShtX3NvY2tldCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0Zjgo
KS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNvbXBsZXRlKQoreworICAgIGNv
bnN0IHNpemVfdCBidWZmZXJTaXplID0gNDA5NjsKKyAgICB1aW50OF90IGJ1ZmZlcltidWZmZXJT
aXplXTsKKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRWZWN0b3I7CisgICAgaW50IGJ5dGVz
UmVhZCA9IC0xOworCisgICAgaWYgKG1fc3NsKQorICAgICAgICBieXRlc1JlYWQgPSBTU0xfcmVh
ZChtX3NzbCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgZWxzZQorICAgICAgICBieXRl
c1JlYWQgPSBTb2NrZXQ6OnJlYWQobV9zb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwor
CisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICBlbHNl
CisgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoYnVmZmVyLCBieXRlc1JlYWQpOworCisgICAg
aWYgKGNvbXBsZXRlKQorICAgICAgICBjb21wbGV0ZShXVEZNb3ZlKHJlc3VsdFZlY3RvcikpOwor
fQorCit2b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0ZSgpCit7CisgICAgaWYgKFNvY2tldDo6aXNW
YWxpZFNvY2tldChtX3NvY2tldCkpIHsKKyAgICAgICAgU29ja2V0OjpzaHV0ZG93bihtX3NvY2tl
dCk7CisgICAgICAgIFNvY2tldDo6Y2xvc2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9
IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlclBPU0lY
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlclBPU0lYLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTExMDAwMTFiNTAwODk0OWI5NGQ0NGU5MzljMDc1YmNmZmVhYWEzCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9IVFRQU2VydmVyUE9TSVguY3BwCkBAIC0wLDAgKzEs
MjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJIVFRQU2VydmVyUE9TSVguaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit2b2lkIGluaXRpYWxpemVT
U0xMaWJyYXJ5KCk7CisKK0hUVFBTZXJ2ZXJQT1NJWDo6SFRUUFJlc3BvbnNlIEhUVFBTZXJ2ZXJQ
T1NJWDo6Z2V0UmVzcG9uc2UoU3RyaW5nIHBhdGgpCit7CisgICAgaWYgKG1fcmVxdWVzdFJlc3Bv
bnNlTWFwLmNvbnRhaW5zKHBhdGgpKQorICAgICAgICByZXR1cm4gbV9yZXF1ZXN0UmVzcG9uc2VN
YXAuZ2V0KHBhdGgpOworCisgICAgcmV0dXJuIEhUVFBSZXNwb25zZSg0MDQsIHsgfSwgIk5vdCBG
b3VuZCIpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEhUVFBTZXJ2ZXJQT1NJWDo6cGFyc2VSZXF1
ZXN0KFZlY3Rvcjx1aW50OF90PiYgcmVxdWVzdCkKK3sKKyAgICBjb25zdCBjaGFyKiBnZXRQYXRo
UHJlZml4ID0gIkdFVCAiOworICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRoUHJlZml4ID0gIlBPU1Qg
IjsKKyAgICBjb25zdCBjaGFyKiBlbmRvZlJlcXVlc3QgPSAiXHJcblxyXG4iOworICAgIGNvbnN0
IGNoYXIqIHBhdGhTdWZmaXggPSAiIEhUVFAvMS4xXHJcbiI7CisKKyAgICBjb25zdCBjaGFyKiBy
ZXF1ZXN0SGVhZGVyRW5kID0gc3RybnN0cihzdGF0aWNfY2FzdDxjaGFyKj4oc3RhdGljX2Nhc3Q8
dm9pZCo+KHJlcXVlc3QuZGF0YSgpKSksIGVuZG9mUmVxdWVzdCwgcmVxdWVzdC5zaXplKCkpOwor
ICAgIGlmICghcmVxdWVzdEhlYWRlckVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIGNvbnN0IGNoYXIqIHBhdGhFbmQgPSBzdHJuc3RyKHN0YXRpY19jYXN0PGNoYXIqPihz
dGF0aWNfY2FzdDx2b2lkKj4ocmVxdWVzdC5kYXRhKCkpKSwgcGF0aFN1ZmZpeCwgcmVxdWVzdC5z
aXplKCkpOworICAgIGlmICghcGF0aEVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHNpemVfdCBwYXRoUHJlZml4TGVuZ3RoID0gMDsKKyAgICBpZiAoIW1lbWNtcChyZXF1
ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3RybGVuKGdldFBhdGhQcmVmaXgpKSkKKyAgICAg
ICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsKKyAgICBlbHNlIGlm
ICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBwb3N0UGF0aFByZWZpeCwgc3RybGVuKHBvc3RQYXRo
UHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4ocG9zdFBhdGhQcmVm
aXgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZpeExlbmd0aCwgIkhUVFBTZXJ2
ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7CisgICAgc2l6ZV90IHBhdGhMZW5n
dGggPSBwYXRoRW5kIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXRpY19jYXN0PHZvaWQqPihyZXF1
ZXN0LmRhdGEoKSkpIC0gcGF0aFByZWZpeExlbmd0aDsKKyAgICBTdHJpbmcgcGF0aChyZXF1ZXN0
LmRhdGEoKSArIHBhdGhQcmVmaXhMZW5ndGgsIHBhdGhMZW5ndGgpOworCisgICAgcmV0dXJuIHBh
dGg7Cit9CisKK1N0cmluZyBIVFRQU2VydmVyUE9TSVg6OmJ1aWxkUmVzcG9uc2UoSFRUUFJlc3Bv
bnNlIHJlc3BvbnNlKQoreworICAgIFdURjo6U3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7
CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiSFRUUC8xLjEgIiwgcmVzcG9uc2Uuc3RhdHVz
Q29kZSwgJyAnLCBIVFRQUmVzcG9uc2U6OnN0YXR1c1RleHQocmVzcG9uc2Uuc3RhdHVzQ29kZSks
ICJcclxuIik7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIs
IHJlc3BvbnNlLmJvZHkubGVuZ3RoKCksICJcclxuIik7CisgICAgZm9yIChhdXRvJiBwYWlyIDog
cmVzcG9uc2UuaGVhZGVyRmllbGRzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBh
aXIua2V5LCAiOiAiLCBwYWlyLnZhbHVlLCAiXHJcbiIpOworICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQoIlxyXG4iKTsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHJlc3BvbnNlLmJvZHkp
OworCisgICAgcmV0dXJuIHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lkIEhU
VFBTZXJ2ZXJQT1NJWDo6cmVzcG9uZFRvUmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8Q29ubmVjdGlv
bj4gY2xpZW50Q29ubmVjdGlvbiwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQoreworICAgIGlm
IChjbGllbnRDb25uZWN0aW9uICYmICFjbGllbnRDb25uZWN0aW9uLT5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNsaWVudENvbm5lY3Rpb24tPnJlY2VpdmVCeXRlcyhbdGhpcywg
Y2xpZW50Q29ubmVjdGlvbiA9IFdURk1vdmUoY2xpZW50Q29ubmVjdGlvbiksIGJ1ZmZlciA9IFdU
Rk1vdmUoYnVmZmVyKV0oVmVjdG9yPHVpbnQ4X3Q+IHJlcXVlc3RCdWZmZXIpIG11dGFibGUgewor
ICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKHJlcXVlc3RCdWZmZXIpOworCisgICAgICAgIGF1
dG8gcGF0aCA9IHBhcnNlUmVxdWVzdChidWZmZXIpOworICAgICAgICBpZiAoIXBhdGgpIHsKKyAg
ICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3QoV1RGTW92ZShjbGllbnRDb25uZWN0aW9uKSwgV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IEhUVFBSZXNwb25zZSByZXNwb25zZSA9IGdldFJlc3BvbnNlKCpwYXRoKTsKKyAgICAgICAgaWYg
KHJlc3BvbnNlLnRlcm1pbmF0ZUNvbm5lY3Rpb24gPT0gSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVD
b25uZWN0aW9uOjpObykgeworICAgICAgICAgICAgU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gYnVp
bGRSZXNwb25zZShyZXNwb25zZSk7CisgICAgICAgICAgICBjbGllbnRDb25uZWN0aW9uLT5zZW5k
KFdURk1vdmUocmVzcG9uc2VTdHJpbmcpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgICAgICBj
bGllbnRDb25uZWN0aW9uLT50ZXJtaW5hdGUoKTsKKyAgICB9KTsKK30KKworSFRUUFNlcnZlclBP
U0lYOjpIVFRQU2VydmVyUE9TSVgoUHJvdG9jb2wgcHJvdG9jb2wsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMsIHN0ZDo6dW5p
cXVlX3B0cjxQcml2YXRlS2V5PiBwcml2YXRlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Q2VydGlmaWNh
dGU+IGNlcnRpZmljYXRlKQorICAgIDogbV9wcm90b2NvbChwcm90b2NvbCkKKyAgICAsIG1fcmVx
dWVzdFJlc3BvbnNlTWFwKFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5n
LCBIVFRQU2VydmVyUE9TSVg6OkhUVFBSZXNwb25zZT4+IGxpc3QpIHsKKyAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIEhUVFBTZXJ2ZXJQT1NJWDo6SFRUUFJlc3BvbnNlPiBtYXA7CisgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGxpc3QpCisgICAgICAgICAgICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBh
aXIuc2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9KHJlc3BvbnNlcykpCisgICAg
LCBtX2xpc3RlbmluZ0Nvbm5lY3Rpb24oW3RoaXNdKHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0aW9u
PiBjbGllbnRDb25uZWN0aW9uKSB7CisgICAgICAgIHJlc3BvbmRUb1JlcXVlc3QoV1RGTW92ZShj
bGllbnRDb25uZWN0aW9uKSk7CisgICAgfSwKKyAgICAocHJvdG9jb2wgPT0gUHJvdG9jb2w6Okh0
dHBzKSA/IGNlcnRpZmljYXRlLT54NTA5KCkgOiBudWxscHRyLAorICAgIChwcm90b2NvbCA9PSBQ
cm90b2NvbDo6SHR0cHMpID8gcHJpdmF0ZUtleS0+a2V5KCkgOiBudWxscHRyKQorICAgICwgbV9w
cml2YXRlS2V5KFdURk1vdmUocHJpdmF0ZUtleSkpCisgICAgLCBtX2NlcnRpZmljYXRlKFdURk1v
dmUoY2VydGlmaWNhdGUpKQoreworfQorCitIVFRQU2VydmVyUE9TSVg6On5IVFRQU2VydmVyUE9T
SVgoKQoreworfQorCit1aW50MTZfdCBIVFRQU2VydmVyUE9TSVg6OnBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xpc3RlbmluZ0Nvbm5lY3Rpb24ucG9ydCgpOworfQorCitTdHJpbmcgSFRU
UFNlcnZlclBPU0lYOjp1cmwoKSBjb25zdAoreworICAgIGlmIChtX3Byb3RvY29sID09IFByb3Rv
Y29sOjpIdHRwKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiaHR0cDovLzEyNy4wLjAuMToi
LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKKworICAgIGlmIChtX3Byb3RvY29sID09IFByb3Rv
Y29sOjpIdHRwcykKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImh0dHBzOi8vMTI3LjAuMC4x
OiIsIFN0cmluZzo6bnVtYmVyKHBvcnQoKSkpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgSFRUUFNlcnZlclBPU0lYOjpIVFRQUmVzcG9uc2U6OnN0YXR1c1RleHQodW5zaWdu
ZWQgc3RhdHVzQ29kZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICBjYXNlIDIw
MDoKKyAgICAgICAgcmV0dXJuICJPSyJfczsKKyAgICBjYXNlIDMwMToKKyAgICAgICAgcmV0dXJu
ICJNb3ZlZCBQZXJtYW5lbnRseSJfczsKKyAgICBjYXNlIDQwNDoKKyAgICAgICAgcmV0dXJuICJO
b3QgRm91bmQiX3M7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxIVFRQU2VydmVyUE9TSVg6OkNlcnRpZmljYXRl
PiBIVFRQU2VydmVyUE9TSVg6OkNlcnRpZmljYXRlOjpjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmlu
ZyBwZW0pCit7CisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKworICAgIGF1dG8gY2VydCA9
IFdURjo6bWFrZVVuaXF1ZTxDZXJ0aWZpY2F0ZT4oKTsKKyAgICBhdXRvIHBlbV8gPSBwZW0ubGF0
aW4xKCk7CisKKyAgICBCSU8qIG1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1fLmRhdGEoKSwgcGVt
Xy5sZW5ndGgoKSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBjZXJ0LT5tX3g1MDkgPSBQRU1f
cmVhZF9iaW9fWDUwOShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBC
SU9fZnJlZShtZW0pOworICAgIH0KKworICAgIHJldHVybiBjZXJ0OworfQorCitIVFRQU2VydmVy
UE9TSVg6OkNlcnRpZmljYXRlOjp+Q2VydGlmaWNhdGUoKQoreworICAgIGlmIChtX3g1MDkpCisg
ICAgICAgIFg1MDlfZnJlZShtX3g1MDkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SFRUUFNlcnZl
clBPU0lYOjpQcml2YXRlS2V5PiBIVFRQU2VydmVyUE9TSVg6OlByaXZhdGVLZXk6OmNyZWF0ZUZy
b21QRU0oY29uc3QgU3RyaW5nIHBlbSkKK3sKKyAgICBpbml0aWFsaXplU1NMTGlicmFyeSgpOwor
CisgICAgYXV0byBwa2V5ID0gV1RGOjptYWtlVW5pcXVlPFByaXZhdGVLZXk+KCk7CisgICAgYXV0
byBwZW1fID0gcGVtLmxhdGluMSgpOworCisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYo
cGVtXy5kYXRhKCksIHBlbV8ubGVuZ3RoKCkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgcGtl
eS0+bV9wcml2YXRlS2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkobWVtLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgQklPX2ZyZWUobWVtKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGtleTsKK30KKworSFRUUFNlcnZlclBPU0lYOjpQcml2YXRlS2V5Ojp+UHJpdmF0ZUtl
eSgpCit7CisgICAgaWYgKG1fcHJpdmF0ZUtleSkKKyAgICAgICAgRVZQX1BLRVlfZnJlZShtX3By
aXZhdGVLZXkpOworfQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0hUVFBT
ZXJ2ZXJQT1NJWC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9IVFRQU2VydmVyUE9TSVguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YWZiNDZlZjUyNmEzNmIwYWU1YWUwZTZkN2E5ZjlmZGYxNzY0ZDA0Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9IVFRQU2VydmVyUE9TSVguaApAQCAtMCww
ICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgorCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRlIDxvcGVuc3Ns
L2NyeXB0by5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBIVFRQU2VydmVyUE9T
SVggeworCitwdWJsaWM6CisgICAgc3RydWN0IEhUVFBSZXNwb25zZTsKKyAgICBjbGFzcyBDZXJ0
aWZpY2F0ZTsKKyAgICBjbGFzcyBQcml2YXRlS2V5OworCisgICAgZW51bSBjbGFzcyBQcm90b2Nv
bCA6IHVpbnQ4X3QgeyBIdHRwLCBIdHRwcyB9OworCisgICAgSFRUUFNlcnZlclBPU0lYKFByb3Rv
Y29sLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNl
Pj4sIHN0ZDo6dW5pcXVlX3B0cjxQcml2YXRlS2V5PiBwcml2YXRlS2V5ID0geyB9LCBzdGQ6OnVu
aXF1ZV9wdHI8Q2VydGlmaWNhdGU+IGNlcnRpZmljYXRlID0geyB9KTsKKworICAgIEhUVFBTZXJ2
ZXJQT1NJWCgpOworICAgIH5IVFRQU2VydmVyUE9TSVgoKTsKKworICAgIHVpbnQxNl90IHBvcnQo
KSBjb25zdDsKKyAgICBTdHJpbmcgdXJsKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IE9wdGlvbmFsPFN0cmluZz4gcGFyc2VSZXF1ZXN0KFZlY3Rvcjx1aW50OF90PiYpOworICAgIEhU
VFBSZXNwb25zZSBnZXRSZXNwb25zZShTdHJpbmcgcGF0aCk7CisgICAgU3RyaW5nIGJ1aWxkUmVz
cG9uc2UoSFRUUFJlc3BvbnNlKTsKKyAgICB2b2lkIHJlc3BvbmRUb1JlcXVlc3Qoc3RkOjp1bmlx
dWVfcHRyPENvbm5lY3Rpb24+LCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pOworCisg
ICAgUHJvdG9jb2wgbV9wcm90b2NvbCB7IFByb3RvY29sOjpIdHRwIH07CisgICAgQ29ubmVjdGlv
biBtX2xpc3RlbmluZ0Nvbm5lY3Rpb247CisgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBSZXNwb25z
ZT4gbV9yZXF1ZXN0UmVzcG9uc2VNYXA7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJpdmF0ZUtl
eT4gbV9wcml2YXRlS2V5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDZXJ0aWZpY2F0ZT4gbV9jZXJ0
aWZpY2F0ZTsKK307CisKK3N0cnVjdCBIVFRQU2VydmVyUE9TSVg6OkhUVFBSZXNwb25zZSB7Cisg
ICAgZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9OworCisgICAgc3Rh
dGljIFN0cmluZyBzdGF0dXNUZXh0KHVuc2lnbmVkKTsKKworICAgIEhUVFBSZXNwb25zZShjb25z
dCBTdHJpbmcmIGJvZHkpCisgICAgICAgIDogYm9keShib2R5KSB7IH0KKyAgICBIVFRQUmVzcG9u
c2UoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIFN0cmluZyYmIGJvZHkp
CisgICAgICAgIDogaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKKyAgICAgICAg
LCBib2R5KFdURk1vdmUoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZSh1bnNpZ25lZCBzdGF0
dXNDb2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcyA9IHsgfSwgU3Ry
aW5nJiYgYm9keSA9IHsgfSkKKyAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCisgICAg
ICAgICwgaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKKyAgICAgICAgLCBib2R5
KFdURk1vdmUoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZShUZXJtaW5hdGVDb25uZWN0aW9u
IHRlcm1pbmF0ZUNvbm5lY3Rpb24pCisgICAgICAgIDogdGVybWluYXRlQ29ubmVjdGlvbih0ZXJt
aW5hdGVDb25uZWN0aW9uKSB7IH0KKworICAgIEhUVFBSZXNwb25zZShjb25zdCBIVFRQUmVzcG9u
c2UmKSA9IGRlZmF1bHQ7CisgICAgSFRUUFJlc3BvbnNlKEhUVFBSZXNwb25zZSYmKSA9IGRlZmF1
bHQ7CisgICAgSFRUUFJlc3BvbnNlKCkgPSBkZWZhdWx0OworICAgIEhUVFBSZXNwb25zZSYgb3Bl
cmF0b3I9KGNvbnN0IEhUVFBSZXNwb25zZSYpID0gZGVmYXVsdDsKKyAgICBIVFRQUmVzcG9uc2Um
IG9wZXJhdG9yPShIVFRQUmVzcG9uc2UmJikgPSBkZWZhdWx0OworCisgICAgdW5zaWduZWQgc3Rh
dHVzQ29kZSB7IDIwMCB9OworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlckZpZWxk
czsKKyAgICBTdHJpbmcgYm9keTsKKyAgICBUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNv
bm5lY3Rpb24geyBUZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9OworfTsKKworY2xhc3MgSFRUUFNl
cnZlclBPU0lYOjpDZXJ0aWZpY2F0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDZXJ0aWZpY2F0ZT4gY3JlYXRlRnJv
bVBFTShjb25zdCBTdHJpbmcpOworCisgICAgfkNlcnRpZmljYXRlKCk7CisgICAgWDUwOSogeDUw
OSgpIHsgcmV0dXJuIG1feDUwOTsgfQorCitwcml2YXRlOgorICAgIFg1MDkqIG1feDUwOSB7IG51
bGxwdHIgfTsKK307CisKK2NsYXNzIEhUVFBTZXJ2ZXJQT1NJWDo6UHJpdmF0ZUtleSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxQcml2YXRlS2V5PiBjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZyk7CisKKyAgICB+UHJp
dmF0ZUtleSgpOworICAgIEVWUF9QS0VZKiBrZXkoKSB7IHJldHVybiBtX3ByaXZhdGVLZXk7IH0K
KworcHJpdmF0ZToKKyAgICBFVlBfUEtFWSogbV9wcml2YXRlS2V5IHsgbnVsbHB0ciB9OworfTsK
KworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkODEzNDI3
MGNiNmUwZjdlYmY3ZmU4ZjUxNmZmNzBhZDNhMmY5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI3ByYWdtYSBvbmNlCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNv
Y2syLmg+CisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0
IHsKKworI2lmIE9TKFdJTkRPV1MpCit1c2luZyBTb2NrZXQgPSBTT0NLRVQ7Citjb25zdGV4cHIg
U29ja2V0IEludmFsaWRTb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKKyNlbHNlCit1c2luZyBTb2Nr
ZXQgPSBpbnQ7CisjZGVmaW5lIFNPQ0tFVF9FUlJPUiAtMQorY29uc3RleHByIFNvY2tldCBJbnZh
bGlkU29ja2V0ID0gU09DS0VUX0VSUk9SOworI2VuZGlmCisKK3ZvaWQgaW5pdGlhbGl6ZSgpOwor
U29ja2V0IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKK2Jvb2wg
aXNWYWxpZFNvY2tldChTb2NrZXQpOworU29ja2V0IGFjY2VwdChTb2NrZXQpOworaW50IHNodXRk
b3duKFNvY2tldCk7CitpbnQgY2xvc2UoU29ja2V0KTsKK2ludCByZWFkKFNvY2tldCwgdm9pZCog
YnVmZmVyLCBzaXplX3QgY291bnQpOworaW50IHdyaXRlKFNvY2tldCwgY29uc3Qgdm9pZCogYnVm
ZmVyLCBzaXplX3QgY291bnQpOworCit9IC8vIG5hbWVzcGFjZSBTb2NrZXQKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1Tb2NrZXRQT1NJWC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0UE9T
SVguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg0MjU2ODA3ZjA3ZGZiOGRkNzRkMzhkOTFkMTZkZTY2N2JmNDg4
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0
UE9TSVguY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU29ja2V0LmgiCisKK25hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKK25hbWVzcGFjZSBTb2NrZXQgeworCit2b2lkIGluaXRpYWxpemUoKQoreworfQor
CitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCit7Cisg
ICAgcmV0dXJuIDo6c29ja2V0KGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wpOworfQorCitib29sIGlz
VmFsaWRTb2NrZXQoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gc29ja2V0ID49IDA7Cit9
CisKK1NvY2tldCBhY2NlcHQoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjphY2NlcHQo
c29ja2V0LCBudWxscHRyLCBudWxscHRyKTsKK30KKworaW50IHNodXRkb3duKFNvY2tldCBzb2Nr
ZXQpCit7CisgICAgcmV0dXJuIDo6c2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpOworfQorCitp
bnQgY2xvc2UoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpjbG9zZShzb2NrZXQpOwor
fQorCitpbnQgcmVhZChTb2NrZXQgc29ja2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkK
K3sKKyAgICByZXR1cm4gOjpyZWFkKHNvY2tldCwgYnVmZmVyLCBjb3VudCk7Cit9CisKK2ludCB3
cml0ZShTb2NrZXQgc29ja2V0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sK
KyAgICByZXR1cm4gOjp3cml0ZShzb2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBTb2NrZXQKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDljNmY4NDViMWM1MDU3YzIxMjMzNzc0Y2VjMzA0
M2Q0YmRlMzkwODguLmFjZTc1Njg1OWVlZDVhNGU0ODZhODgyNDcxODBiZmUyOGJmYzdkOTYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTI4LDcgKzEyOCwxMCBAQCBp
ZiAoRU5BQkxFX1dFQktJVCkKIAogICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJLaXRfU09VUkNFUwog
ICAgICAgICAke3Rlc3RfbWFpbl9TT1VSQ0VTfQorICAgICAgICBDb25uZWN0aW9uUE9TSVguY3Bw
CisgICAgICAgIEhUVFBTZXJ2ZXJQT1NJWC5jcHAKIAorICAgICAgICB3aW4vUGxhdGZvcm1Tb2Nr
ZXRXaW4uY3BwCiAgICAgICAgIHdpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAKICAgICAgICAg
d2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAKICAgICAgICAgd2luL1V0aWxpdGllc1dpbi5jcHAK
QEAgLTEzNiw2ICsxMzksNyBAQCBpZiAoRU5BQkxFX1dFQktJVCkKIAogICAgIGlmICgke1dURl9Q
TEFURk9STV9XSU5fQ0FJUk99KQogICAgICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJD
RVMKKyAgICAgICAgICAgIFRlc3RzL1dlYktpdC9IVFRQU2VydmVyLmNwcAogICAgICAgICAgICAg
VGVzdHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVzLmNwcAogICAgICAgICApCiAgICAgZW5kaWYg
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0hUVFBTZXJ2
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjExN2U5ODEzOTM1ZWNjYjkyYmUzYzJmYWEwZWE2ZWQzMjM5NTRmMQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0hUVFBTZXJ2
ZXIuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkhUVFBTZXJ2ZXJQT1NJWC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiV1RG
U3RyaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVu
ZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxX
ZWJLaXQvV0tDb250ZXh0UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NyZWRlbnRpYWwu
aD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJL
aXQvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgPFdlYktpdC9X
S0NlcnRpZmljYXRlSW5mb0N1cmwuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcm90ZWN0aW9uU3Bh
Y2VDdXJsLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuaD4K
KyNlbmRpZgorCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHN0ZDo6d3N0
cmluZyBjcmVhdGVTdHJpbmcoV0tTdHJpbmdSZWYgd2tTdHJpbmcpCit7CisgICAgc2l6ZV90IG1h
eFNpemUgPSBXS1N0cmluZ0dldExlbmd0aCh3a1N0cmluZyk7CisKKyAgICBzdGQ6OnZlY3RvcjxX
S0NoYXI+IHdrQ2hhckJ1ZmZlcihtYXhTaXplKTsKKyAgICBzaXplX3QgYWN0dWFsTGVuZ3RoID0g
V0tTdHJpbmdHZXRDaGFyYWN0ZXJzKHdrU3RyaW5nLCB3a0NoYXJCdWZmZXIuZGF0YSgpLCBtYXhT
aXplKTsKKyAgICByZXR1cm4gc3RkOjp3c3RyaW5nKHdrQ2hhckJ1ZmZlci5kYXRhKCksIGFjdHVh
bExlbmd0aCk7Cit9CisKK2NsYXNzIFNlcnZlclRlc3RlciB7CitwdWJsaWM6CisgICAgU2VydmVy
VGVzdGVyKCkKKyAgICB7CisgICAgICAgIG1fY29udGV4dCA9IGFkb3B0V0soV0tDb250ZXh0Q3Jl
YXRlV2l0aENvbmZpZ3VyYXRpb24obnVsbHB0cikpOworICAgICAgICBtX3dlYlZpZXcgPSBtYWtl
VW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxQbGF0Zm9ybVdlYlZpZXc+KG1fY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGll
bnQ7CisgICAgICAgIG1lbXNldCgmbmF2aWdhdGlvbkNsaWVudCwgMCwgc2l6ZW9mKG5hdmlnYXRp
b25DbGllbnQpKTsKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5iYXNlLnZlcnNpb24gPSAwOwor
ICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7CisKKyAgICAg
ICAgbmF2aWdhdGlvbkNsaWVudC5kaWRGaW5pc2hOYXZpZ2F0aW9uID0gW10gKFdLUGFnZVJlZiwg
V0tOYXZpZ2F0aW9uUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAg
ICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgdGVzdGVyLT5t
X2RpZEZhaWxMb2FkID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmluaXNoTG9h
ZCA9IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5kaWRGYWls
TmF2aWdhdGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tFcnJvclJlZiBl
cnJvclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAg
ICBTZXJ2ZXJUZXN0ZXIqIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9lcnJvckNv
ZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yUmVmKTsKKyAgICAgICAgICAgIHRlc3Rlci0+
bV9sb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uID0gY3JlYXRlU3RyaW5nKGFkb3B0V0soV0tFcnJv
ckNvcHlMb2NhbGl6ZWREZXNjcmlwdGlvbihlcnJvclJlZikpLmdldCgpKTsKKyAgICAgICAgICAg
IHRlc3Rlci0+bV9kaWRGYWlsTG9hZCA9IHRydWU7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlk
RmluaXNoTG9hZCA9IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVu
dC5kaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gW10gKFdLUGFnZVJlZiwgV0tOYXZpZ2F0
aW9uUmVmLCBXS0Vycm9yUmVmIGVycm9yUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pIHsKKyAgICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8
U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAg
ICAgdGVzdGVyLT5tX2Vycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3JSZWYpOwor
ICAgICAgICAgICAgdGVzdGVyLT5tX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24gPSBjcmVhdGVT
dHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weUxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yUmVmKSku
Z2V0KCkpOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZhaWxMb2FkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRlc3Rlci0+bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAgfTsKKworICAg
ICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9
IFtdIChXS1BhZ2VSZWYsIFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICBhdXRvIHByb3RlY3Rpb25TcGFj
ZSA9IFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VHZXRQcm90ZWN0aW9uU3BhY2UoY2hhbGxlbmdl
KTsKKyAgICAgICAgICAgIGF1dG8gZGVjaXNpb25MaXN0ZW5lciA9IFdLQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VHZXREZWNpc2lvbkxpc3RlbmVyKGNoYWxsZW5nZSk7CisgICAgICAgICAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlv
blNjaGVtZShwcm90ZWN0aW9uU3BhY2UpO1wKKworICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0
aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVy
VHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgU2VydmVyVGVzdGVy
KiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihj
bGllbnRJbmZvKSk7CisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2RpZFJlY2VpdmVTZXJ2ZXJU
cnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gdHJ1ZTsKKyNpZiBVU0UoQ1VSTCkKKyAgICAgICAgICAg
ICAgICBhdXRvIGNlcnRpZmljYXRlSW5mbyA9IGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5
Q2VydGlmaWNhdGVJbmZvKHByb3RlY3Rpb25TcGFjZSkpOworICAgICAgICAgICAgICAgIHRlc3Rl
ci0+bV92ZXJpZmljYXRpb25FcnJvciA9IFdLQ2VydGlmaWNhdGVJbmZvR2V0VmVyaWZpY2F0aW9u
RXJyb3IoY2VydGlmaWNhdGVJbmZvLmdldCgpKTsKKyAgICAgICAgICAgICAgICB0ZXN0ZXItPm1f
dmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLQ2Vy
dGlmaWNhdGVJbmZvQ29weVZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24oY2VydGlmaWNhdGVJ
bmZvLmdldCgpKSkuZ2V0KCkpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAodGVzdGVy
LT5tX2lnbm9yZUNlcnRFcnJvcikgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHVzZXJuYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXB0IHNlcnZlciB0
cnVzdCIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwYXNzd29yZCA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byB3a0NyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh1c2VybmFtZS5nZXQo
KSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsK
KyAgICAgICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VD
cmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIHdrQ3JlZGVudGlhbC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNp
c2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlv
bkNsaWVudChtX3dlYlZpZXctPnBhZ2UoKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisgICAg
fQorCisgICAgYm9vbCBsb2FkKFN0cmluZyB1cmwsIGJvb2wgaWdub3JlQ2VydEVycm9yID0gZmFs
c2UpCisgICAgeworICAgICAgICBtX2lnbm9yZUNlcnRFcnJvciA9IGlnbm9yZUNlcnRFcnJvcjsK
KyAgICAgICAgbV9kaWRGaW5pc2hMb2FkID0gZmFsc2U7CisgICAgICAgIG1fZGlkRmFpbExvYWQg
PSBmYWxzZTsKKyAgICAgICAgbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dCA9IGZhbHNlOworICAgICAgICBtX2Vycm9yQ29kZSA9IDA7CisgICAgICAgIG1fdmVyaWZpY2F0
aW9uRXJyb3IgPSAwOworICAgICAgICBtX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24uY2xlYXIo
KTsKKyAgICAgICAgbV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uLmNsZWFyKCk7CisKKyAg
ICAgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVy
bC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFdLUGFnZUxvYWRVUkwobV93ZWJWaWV3LT5wYWdl
KCksIHVybFJlZi5nZXQoKSk7CisgICAgICAgIFV0aWw6OnJ1bigmbV9kaWRGaW5pc2hMb2FkKTsK
KworICAgICAgICByZXR1cm4gIW1fZGlkRmFpbExvYWQ7CisgICAgfQorCisgICAgYm9vbCBkaWRG
YWlsTG9hZCgpIHsgcmV0dXJuIG1fZGlkRmFpbExvYWQ7IH0KKyAgICBib29sIGRpZFJlY2VpdmVT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KCkgeyByZXR1cm4gbV9kaWRSZWNlaXZlU2VydmVy
VHJ1c3RFdmFsdWF0aW9uUmVxdWVzdDsgfQorICAgIGludCBlcnJvckNvZGUoKSB7IHJldHVybiBt
X2Vycm9yQ29kZTsgfQorICAgIGludCB2ZXJpZmljYXRpb25FcnJvcigpIHsgcmV0dXJuIG1fdmVy
aWZpY2F0aW9uRXJyb3I7IH0KKyAgICBzdGQ6OndzdHJpbmcgbG9jYWxpemVkRXJyb3JEZXNjcmlw
dGlvbigpIHsgcmV0dXJuIG1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbjsgfQorICAgIHN0ZDo6
d3N0cmluZyB2ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV92ZXJpZmlj
YXRpb25FcnJvckRlc2NyaXB0aW9uOyB9CisKKyAgICBzdGQ6OndzdHJpbmcgdGl0bGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRnJhbWVDb3B5VGl0bGUo
V0tQYWdlR2V0TWFpbkZyYW1lKG1fd2ViVmlldy0+cGFnZSgpKSkpLmdldCgpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgYm9vbCBtX2lnbm9yZUNlcnRFcnJvciB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2RpZEZpbmlzaExvYWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRGYWlsTG9hZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0
IHsgZmFsc2UgfTsKKworICAgIGludCBtX2Vycm9yQ29kZSB7IDAgfTsKKyAgICBpbnQgbV92ZXJp
ZmljYXRpb25FcnJvciB7IDAgfTsKKyAgICBzdGQ6OndzdHJpbmcgbV9sb2NhbGl6ZWRFcnJvckRl
c2NyaXB0aW9uOworICAgIHN0ZDo6d3N0cmluZyBtX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRp
b247CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3PiBtX3dlYlZpZXc7Cit9OworCitzdGF0aWMgc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBjZXJ0aWZpY2F0ZVByaXZhdGVLZXlSU0EoKQoreworICAg
IC8vIFRoaXMgcHJpdmF0ZSBrZXkgYW5kIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlIHdlcmUgZ2Vu
ZXJhdGVkIGJ5IG9wZW5zc2wgY29tbWFuZCBiZWxvdy4KKyAgICAvLworICAgIC8vICBvcGVuc3Ns
IHJlcSAteDUwOSAtc2hhMjU2IC1ub2RlcyAtZGF5cyAzNjUwIC1uZXdrZXkgcnNhOjEwMjQgXAor
ICAgIC8vICAgICAgICAgIC1zdWJqICIvQz1KUC9TVD1Ub2t5by9PPVNlbGYvQ049bG9jYWxob3N0
IiAta2V5b3V0IHNlcnZlci5rZXkgLW91dCBzZXJ2ZXIuY3J0CisgICAgU3RyaW5nIGNlcnRpZmlj
YXRlKCIiCisgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbiIKKyAgICAgICAg
Ik1JSUNUakNDQWJlZ0F3SUJBZ0lKQUpyZHEzaWNWRy8yTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUF4
Q3pBSkJnTlZcbiIKKyAgICAgICAgIkJBWVRBa3BRTVE0d0RBWURWUVFJREFWVWIydDViekVOTUFz
R0ExVUVDZ3dFVTJWc1pqRVNNQkFHQTFVRUF3d0pcbiIKKyAgICAgICAgImJHOWpZV3hvYjNOME1C
NFhEVEl3TURnd056QTROVGd4TlZvWERUTXdNRGd3TlRBNE5UZ3hOVm93UURFTE1Ba0dcbiIKKyAg
ICAgICAgIkExVUVCaE1DU2xBeERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3WURWUVFLREFSVFpX
eG1NUkl3RUFZRFZRUURcbiIKKyAgICAgICAgIkRBbHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklo
dmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBSjBwUGNxQ0RrZWxcbiIKKyAgICAgICAgIk03NVY5aW93
ZytFeFlSTmRybXhuODFoWDQwUHgwS21NTGQyZUFKVjBpRFp3d2F6OGpBaVhmNmI3ZU84RjRFRElc
biIKKyAgICAgICAgIm96SXU2WDlXZHFnQXJIMEZHbVp0MkdILzBtNDlWb1dKcFl4SzMyOXh3TC9W
dUZQNVZGZUhyUWxFNWw2ak1zUHZcbiIKKyAgICAgICAgImxYdDJTQUZYd3hYY0xUWDBETmxHOGw2
WVdpbGZwSHEvQWdNQkFBR2pVREJPTUIwR0ExVWREZ1FXQkJTek51MmJcbiIKKyAgICAgICAgIkIz
Wm5HRmN6Y1pKb3JLL3RhaXhLbWpBZkJnTlZIU01FR0RBV2dCU3pOdTJiQjNabkdGY3pjWkpvcksv
dGFpeEtcbiIKKyAgICAgICAgIm1qQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkN3
VUFBNEdCQUp3QkZVLy8vMlBSUlYyYlJtb0VcbiIKKyAgICAgICAgIkhPby9pTXNLSFJsZy9OQ3ov
TW1CaEw4QVZReXZGQnZRVVJSazlodjlyRnRPSmhYT3B4TnI0dlJlZmEzTWp0SVVcbiIKKyAgICAg
ICAgImUvcm1KQUZUdGNkUkpycmNwMDEraVFhSUFCSVhpUTFrYVU2am9LVFo5elhINHA4Z2VnRjFy
T0RwaDhDZzkyeWlcbiIKKyAgICAgICAgIm1kRGh4VkFLQ0JYaHJjOEtqK004R2VGdlxuIgorICAg
ICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIik7CisKKyAgICBTdHJpbmcgcHJpdmF0
ZUtleSgiIgorICAgICAgICAiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG4iCisgICAgICAg
ICJNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBSjBwUGNx
Q0RrZWxNNzVWXG4iCisgICAgICAgICI5aW93ZytFeFlSTmRybXhuODFoWDQwUHgwS21NTGQyZUFK
VjBpRFp3d2F6OGpBaVhmNmI3ZU84RjRFRElvekl1XG4iCisgICAgICAgICI2WDlXZHFnQXJIMEZH
bVp0MkdILzBtNDlWb1dKcFl4SzMyOXh3TC9WdUZQNVZGZUhyUWxFNWw2ak1zUHZsWHQyXG4iCisg
ICAgICAgICJTQUZYd3hYY0xUWDBETmxHOGw2WVdpbGZwSHEvQWdNQkFBRUNnWUJDazcwRWM5SCsw
ZUk0cUl2TzFaeVlvbVdBXG4iCisgICAgICAgICJZYmhKWGtQOVVjWUorMytzdzZDT2VLZkFxSXdu
bTk3QUhJQnFCMXZoYmppTjhVeE54WEUxQ2lDS2ZDTnBZRWgvXG4iCisgICAgICAgICI3UUI5dnFY
RGxIRlRGRzBPUWtJYjhYV2hPZWM1YjlnZEd6UzB6MlJzdlY4a1B4Q21HUWluTkZNb29uNEZlSk9i
XG4iCisgICAgICAgICJuQitlYnlVVDFOSjJRZmgvNFFKQkFOQVJ2OVJLcVNlYnkyZ0xIRjZ0aFRH
Q0tBc2hFeW13ODh4Mi9vRlhmNjM3XG4iCisgICAgICAgICJ2ZFFpTXVHOFdHVFdNajRwM29ZdldT
Q0tKdmRtVHBwUHczaDBZRmRidWpFQ1FRREJYVlhJWmpvVCttRkxUU0QyXG4iCisgICAgICAgICI0
ZG5qNVdnazZpbWxBM1RRb2o3OE5UenlqTW0wU0dsVXZXYXZmRS80Ri9lMGRlMG4xL0tzQjdKK0Rr
QkRRYzhtXG4iCisgICAgICAgICJxMWZ2QWtFQXZzUTNRL1c4QjJPdzU5Q2dEekk2bHp6RmFBYklJ
Z1pxVU1HYzhJdC90YzNFcXRVOEgzbG05ZlRwXG4iCisgICAgICAgICJGZE9mZ1JteU5zSlRuYXJB
VUh6bk0rNUhVbkQ0VVFKQUljR2FoU2FiZ3Z0VjJ1QjNIY0psMkd3bkZ6S3QzSG5TXG4iCisgICAg
ICAgICIvYzBsTThCVGlJQmRnaFNXRnM0TnpCcm1sd2dRSFRmdEUrU1dIOFFrTys5ZTlwN1pmQVd6
andKQU13NHdZeWM2XG4iCisgICAgICAgICJPTkgrM3JzdmJoR0Zxb0wxSTlBeGJuVURxcGkzV2hE
S084WUVlWkpHZUZzeHBidnpSVzlFODFGTXRFYVlCRHlaXG4iCisgICAgICAgICJLMmRBNnY0Mm1P
RlB4UT09XG4iCisgICAgICAgICItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iKTsKKworICAg
IHJldHVybiB7IFdURk1vdmUoY2VydGlmaWNhdGUpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH07Cit9
CisKK1RFU1QoSFRUUFNlcnZlclBPU0lYLCBTaW1wbGVIVFRQKQoreworICAgIEhUVFBTZXJ2ZXJQ
T1NJWCBodHRwU2VydmVyKEhUVFBTZXJ2ZXJQT1NJWDo6UHJvdG9jb2w6Okh0dHAsIHsKKyAgICAg
ICAgeyAiLyIsIHsgIjxodG1sPjx0aXRsZT5TaW1wbGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPjxib2R5
PkhUVFAgaHR0cCBzZXJ2ZXIgcm9vdDwvYm9keT48L2h0bWw+In19LAorICAgICAgICB7ICIvdGVz
dC5odG1sIiwgeyI8aHRtbD48dGl0bGU+U2ltcGxlIEhUVFAgU2VydmVyIHRlc3Q8L3RpdGxlPjxi
b2R5PkhUVFAgdGVzdC5odG1sPC9ib2R5PjwvaHRtbD4ifX0sCisgICAgICAgIHsgIi9pbnZhbGlk
Lmh0bWwiLCB7NDA0LCB7IH0sICI8aHRtbD48dGl0bGU+RmlsZSBub3QgZm91bmQ8L3RpdGxlPjxi
b2R5PkhUVFAgNDA0IEVSUk9SPC9ib2R5PjwvaHRtbD4ifX0KKyAgICB9KTsKKworICAgIFNlcnZl
clRlc3RlciBsb2FkZXI7CisgICAgU3RyaW5nQnVpbGRlciB1cmw7CisgICAgdXJsLmFwcGVuZCho
dHRwU2VydmVyLnVybCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5sb2FkKHVybC50b1N0
cmluZygpKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci50aXRsZSgpLCBMIlNpbXBsZSBIVFRQIFNl
cnZlciIpOworCisgICAgdXJsLmFwcGVuZCgiL3Rlc3QuaHRtbCIpOworICAgIEVYUEVDVF9UUlVF
KGxvYWRlci5sb2FkKHVybC50b1N0cmluZygpKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci50aXRs
ZSgpLCBMIlNpbXBsZSBIVFRQIFNlcnZlciB0ZXN0Iik7CisKKyAgICBTdHJpbmdCdWlsZGVyIGlu
dmFsaWRVUkw7CisgICAgaW52YWxpZFVSTC5hcHBlbmQoaHR0cFNlcnZlci51cmwoKSk7CisgICAg
aW52YWxpZFVSTC5hcHBlbmQoIi9pbnZhbGlkLmh0bWwiKTsKKyAgICBFWFBFQ1RfVFJVRShsb2Fk
ZXIubG9hZChpbnZhbGlkVVJMLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRp
dGxlKCksIEwiRmlsZSBub3QgZm91bmQiKTsKK30KKworVEVTVChIVFRQU2VydmVyUE9TSVgsIFNp
bXBsZUhUVFBTKQoreworICAgIGF1dG8gY2VydF9rZXkgPSBjZXJ0aWZpY2F0ZVByaXZhdGVLZXlS
U0EoKTsKKyAgICBhdXRvIGNlcnQgPSBIVFRQU2VydmVyUE9TSVg6OkNlcnRpZmljYXRlOjpjcmVh
dGVGcm9tUEVNKGNlcnRfa2V5LmZpcnN0KTsKKyAgICBhdXRvIHBrZXkgPSBIVFRQU2VydmVyUE9T
SVg6OlByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0oY2VydF9rZXkuc2Vjb25kKTsKKworICAgIEhU
VFBTZXJ2ZXJQT1NJWCBodHRwU2VydmVyKEhUVFBTZXJ2ZXJQT1NJWDo6UHJvdG9jb2w6Okh0dHBz
LCB7CisgICAgICAgIHsgIi8iLCB7ICI8aHRtbD48dGl0bGU+U2ltcGxlIEhUVFBTIFNlcnZlcjwv
dGl0bGU+PGJvZHk+SFRUUFMgaHR0cCBzZXJ2ZXIgcm9vdDwvYm9keT48L2h0bWw+In19LAorICAg
ICAgICB7ICIvdGVzdC5odG1sIiwgeyI8aHRtbD48dGl0bGU+U2ltcGxlIEhUVFBTIFNlcnZlciB0
ZXN0PC90aXRsZT48Ym9keT5IVFRQUyB0ZXN0Lmh0bWw8L2JvZHk+PC9odG1sPiJ9fSwKKyAgICAg
ICAgeyAiL2ludmFsaWQuaHRtbCIsIHs0MDQsIHsgfSwgIjxodG1sPjx0aXRsZT5GaWxlIG5vdCBm
b3VuZDwvdGl0bGU+PGJvZHk+SFRUUFMgNDA0IEVSUk9SPC9ib2R5PjwvaHRtbD4ifX0KKyAgICB9
LAorICAgIFdURk1vdmUocGtleSksCisgICAgV1RGTW92ZShjZXJ0KSk7CisKKyAgICBTZXJ2ZXJU
ZXN0ZXIgbG9hZGVyOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOworICAgIHVybC5hcHBlbmQoaHR0
cFNlcnZlci51cmwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxvYWRlci5sb2FkKHVybC50b1N0cmlu
ZygpKSk7CisKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh1cmwudG9TdHJpbmcoKSwgdHJ1
ZSkpOworICAgIEVYUEVDVF9FUShsb2FkZXIudGl0bGUoKSwgTCJTaW1wbGUgSFRUUFMgU2VydmVy
Iik7CisKKyAgICB1cmwuYXBwZW5kKCIvdGVzdC5odG1sIik7CisgICAgRVhQRUNUX1RSVUUobG9h
ZGVyLmxvYWQodXJsLnRvU3RyaW5nKCksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRp
dGxlKCksIEwiU2ltcGxlIEhUVFBTIFNlcnZlciB0ZXN0Iik7CisKKyAgICBTdHJpbmdCdWlsZGVy
IGludmFsaWRVUkw7CisgICAgaW52YWxpZFVSTC5hcHBlbmQoaHR0cFNlcnZlci51cmwoKSk7Cisg
ICAgaW52YWxpZFVSTC5hcHBlbmQoIi9pbnZhbGlkLmh0bWwiKTsKKyAgICBFWFBFQ1RfVFJVRShs
b2FkZXIubG9hZChpbnZhbGlkVVJMLnRvU3RyaW5nKCksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEo
bG9hZGVyLnRpdGxlKCksIEwiRmlsZSBub3QgZm91bmQiKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZv
cm1Tb2NrZXRXaW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRX
aW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc3M2YwMWEwMmIzMjU0OTMxYjg3Nzk1NzAyNmZiZTE1NmIwMTJi
MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNv
Y2tldFdpbi5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKworI2luY2x1ZGUgPG11dGV4
PgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKwordm9p
ZCBpbml0aWFsaXplKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZmxhZzsKKworICAg
IHN0ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdIHsKKyAgICAgICAgV1NBREFUQSBkYXRhOworICAgICAg
ICBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDApLCAmZGF0YSk7CisgICAgfSk7Cit9CisKK1NvY2tl
dCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKyAgICByZXR1
cm4gOjpzb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9CisKK2Jvb2wgaXNWYWxpZFNv
Y2tldChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiBzb2NrZXQgIT0gSU5WQUxJRF9TT0NL
RVQ7Cit9CisKK1NvY2tldCBhY2NlcHQoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjph
Y2NlcHQoc29ja2V0LCBudWxscHRyLCBudWxscHRyKTsKK30KKworaW50IHNodXRkb3duKFNvY2tl
dCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6c2h1dGRvd24oc29ja2V0LCBTRF9CT1RIKTsKK30K
KworaW50IGNsb3NlKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6Y2xvc2Vzb2NrZXQo
c29ja2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNvY2tldCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6cmVjdihzb2NrZXQsIHN0YXRpY19jYXN0PGNoYXIq
PihidWZmZXIpLCBjb3VudCwgMCk7Cit9CisKK2ludCB3cml0ZShTb2NrZXQgc29ja2V0LCBjb25z
dCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjpzZW5kKHNvY2tl
dCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50LCAwKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436269</attachid>
            <date>2021-08-24 02:15:02 -0700</date>
            <delta_ts>2021-08-24 02:38:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20210824181353.patch</filename>
            <type>text/plain</type>
            <size>77859</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2VkMDQ0NTNjOWZjM2UzMmQzNmU4OWYxMjRlMTc1OTg4
YjU5M2QxMS4uODI1NTNjMjE5OTYwODBmMzZiMTUzODkxYTQzNWQ2MDAzNDFlYTEyYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
NCBAQAorMjAyMS0wOC0yNCAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1bW1h
cnkgb2YgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBHZW5lcmljSFRUUFNlcnZlcjogVGhl
IHNlcnZlci4gSXQgdXNlcyBDb25uZWN0aW9uIHdoaWNoIGlzIGFic3RyYWN0ZWQgc29ja2V0Lgor
ICAgICAgICAgICAgQ29ubmVjdGlvbjogQWJzdHJhY3RlZCBlbmRwb2ludCBvZiBjb25uZWN0aW9u
LiBJdCBjYW4gaGFuZGxlIFRMUyBjb25uZWN0aW9uLgorICAgICAgICAgICAgUGxhdGZvcm1Tb2Nr
ZXQ6IEEgdGhpbiBsYXllciB0byByZW1vdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB1bml4IHNvY2tl
dCBhbmQgd2luc29jazIuCisKKwlUZXN0czogVGVzdHMvV2ViS2l0L0hUVFBTZXJ2ZXIuY3BwCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9y
dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6cHJvdG9jb2wpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpzZXRQcm90b2NvbCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnNldElkZW50aXR5KToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uUE9TSVguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmluaXRpYWxpemVTU0xMaWJyYXJ5KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdlbmVyaWNDZXJ0aWZpY2F0ZTo6Y3JlYXRlRnJvbVBFTSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ2VydGlmaWNhdGU6OkdlbmVyaWNDZXJ0aWZpY2F0ZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ2VydGlmaWNhdGU6On5HZW5lcmljQ2Vy
dGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6OmNy
ZWF0ZUZyb21QRU0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6
OkdlbmVyaWNQcml2YXRlS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2
YXRlS2V5Ojp+R2VuZXJpY1ByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2Vu
ZXJpY0Nvbm5lY3Rpb246OkdlbmVyaWNDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkdlbmVyaWNDb25uZWN0aW9uOjp+R2VuZXJpY0Nvbm5lY3Rpb24pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OnNlbmQgY29uc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OnJlY2VpdmVCeXRlcyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OmFjY2VwdFNTTENvbm5lY3Rpb24pOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpHZW5lcmljTGlzdGVuZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjp+R2VuZXJpY0xpc3RlbmVy
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6aXNWYWxpZCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnBvcnQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpzdGFydCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OmNhbmNlbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpHZW5lcmljTGlzdGVuZXI6OnJlZ2lzdGVySGFuZGxlcik6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpHZW5lcmljTGlzdGVuZXI6OmRpc3BhdGNoTGlzdGVuaW5nKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL0dlbmVyaWNIVFRQU2VydmVyLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQ
UmVzcG9uc2U6OnNlcmlhbGl6ZSBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5l
cmljSFRUUFNlcnZlcjo6c2V0SFRUUFJlc3BvbnNlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpHZW5lcmljSFRUUFNlcnZlcjo6c2V0SFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlv
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6cmVjZWl2ZUhU
VFBSZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpz
ZW5kSFRUUFJlc3BvbnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2Vy
dmVyOjpiYXNpY0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6cGFyc2VBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnNlbmRIVFRQUmVzcG9uc2VGb3JCYXNpY0F1dGhlbnRpY2F0
aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzdGFydCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6c3RvcCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6cGFyc2VIVFRQUmVxdWVzdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6cG9ydCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6dXJsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL0dlbmVyaWNIVFRQU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY0hUVFBSZXNwb25zZTo6R2VuZXJpY0hUVFBSZXNwb25zZSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6dXJsKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6c2V0SWRlbnRpdHkpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lYLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTb2NrZXQ6OnNvY2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6
OmlzVmFsaWRTb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjphY2NlcHQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpzaHV0ZG93bik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNv
Y2tldDo6cmVhZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OndyaXRlKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0hUVFBTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZVN0cmluZyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpDZXJ0aWZpY2F0ZUNoYWluOjpjbGVhcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
ZXJ0aWZpY2F0ZUNoYWluOjpzaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNlcnRpZmlj
YXRlQ2hhaW46OnB1c2hfYmFjayk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDZXJ0aWZpY2F0
ZUNoYWluOjpnZXRDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDZXJ0aWZp
Y2F0ZUNoYWluOjpnZXRQdWJsaWNLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVi
bGljS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6U2VydmVyVGVz
dGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6c2V0VXNlcm5hbWVQ
YXNzd29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmxvYWQpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpkaWRGYWlsTG9hZCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2
YWx1YXRpb25SZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6
ZXJyb3JDb2RlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dmVyaWZp
Y2F0aW9uRXJyb3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpsb2Nh
bGl6ZWRFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRl
c3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpTZXJ2ZXJUZXN0ZXI6OnN0YXR1c0NvZGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U2VydmVyVGVzdGVyOjpnZXRDZXJ0aWZpY2F0ZUNoYWluKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNlcnZlclRlc3Rlcjo6dGl0bGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2VydGlm
aWNhdGVQcml2YXRlS2V5UlNBKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbTogQWRk
ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpleHRyYWN0UEVNRGF0YSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHZW5lcmljQ2VydGlmaWNhdGU6OmNyZWF0ZUZyb21QRU0pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRlOjpHZW5lcmljQ2VydGlmaWNhdGUp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRlOjp+R2VuZXJpY0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlUlNBS2V5KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlRUNLZXkpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0pOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6OkdlbmVyaWNQcml2YXRlS2V5KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2YXRlS2V5Ojp+R2VuZXJpY1ByaXZhdGVLZXkpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGF0YUZyb21TdHJpbmcpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6dmVjdG9yRnJvbURhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJp
Y0Nvbm5lY3Rpb246OkdlbmVyaWNDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkdlbmVyaWNDb25uZWN0aW9uOjp+R2VuZXJpY0Nvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OnNlbmQgY29uc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OnJlY2VpdmVCeXRlcyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpHZW5lcmljTGlzdGVuZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjp+R2VuZXJpY0xpc3RlbmVyKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6cG9ydCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnJlZ2lzdGVySGFuZGxlcik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnN0YXJ0KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkdlbmVyaWNMaXN0ZW5lcjo6Y2FuY2VsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Okdl
bmVyaWNMaXN0ZW5lcjo6Y3JlYXRlSWRlbnRpdHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
d2luL1BsYXRmb3JtU29ja2V0V2luLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpTb2NrZXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojpz
b2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojppc1ZhbGlkU29ja2V0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6YWNjZXB0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlNvY2tldDo6c2h1dGRvd24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29j
a2V0OjpjbG9zZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnJlYWQpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojp3cml0ZSk6CisKIDIwMjEtMDgtMjEgIERhbmll
bCBLb2xlc2EgIDxka29sZXNhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIERvIG5vdCBh
c3N1bWUgbG9nIHN1Y2Nlc3MgaW4gYXBwbHktYnVpbGQtcmV2aXNpb24tdG8tZmlsZXMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luLnB5CmluZGV4IGU4NWE0MmU0Nzg1N2VlOGExY2U0N2U1MDFkNWJk
ZTc1MWNlOWQ2ZGYuLjg1Y2VkNjZiODE3ODU3MjMwOWE5OWQxMTY5MzM4ZTRlZmE2MDMyY2UgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQpAQCAtMTk4LDcgKzE5OCw3IEBAIGNsYXNzIFdp
blBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgX3BhdGhfdG9fZGVmYXVsdF9pbWFnZV9kaWZmKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnSW1hZ2VEaWZmLmV4ZScpCiAK
LSAgICBBUElfVEVTVF9CSU5BUllfTkFNRVMgPSBbJ1Rlc3RXVEYuZXhlJywgJ1Rlc3RXZWJDb3Jl
LmV4ZScsICdUZXN0V2ViS2l0TGVnYWN5LmV4ZSddCisgICAgQVBJX1RFU1RfQklOQVJZX05BTUVT
ID0gWydUZXN0V1RGLmV4ZScsICdUZXN0V2ViQ29yZS5leGUnLCAnVGVzdFdlYktpdExlZ2FjeS5l
eGUnLCAnVGVzdFdlYktpdC5leGUnXQogCiAgICAgZGVmIHBhdGhfdG9fYXBpX3Rlc3RfYmluYXJp
ZXMoc2VsZik6CiAgICAgICAgIHJldHVybiB7YmluYXJ5LnNwbGl0KCcuJylbMF06IHNlbGYuX2J1
aWxkX3BhdGgoYmluYXJ5KSBmb3IgYmluYXJ5IGluIHNlbGYuQVBJX1RFU1RfQklOQVJZX05BTUVT
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MzE0
MWU2ZDkyMTEzZGM0MDg3NDA4ZGQ1OTk2YjkwYTUwYmExMzcKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uLmgKQEAgLTAsMCArMSwxNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pICYmIEhB
VkUoU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9z
c2wuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8
TmV0d29yay9OZXR3b3JrLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisK
KyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CitjbGFzcyBHZW5lcmljQ29ubmVjdGlvbjsKK2Ns
YXNzIEdlbmVyaWNMaXN0ZW5lcjsKKworc3RydWN0IEdlbmVyaWNDZXJ0aWZpY2F0ZSB7CisgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8R2VuZXJpY0NlcnRpZmljYXRlPiBjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZyk7CisKKyAg
ICBHZW5lcmljQ2VydGlmaWNhdGUoKTsKKyAgICB+R2VuZXJpY0NlcnRpZmljYXRlKCk7CisKKyNp
ZiBQTEFURk9STShXSU4pICYmIEhBVkUoU1NMKQorICAgIFg1MDkqIHg1MDkgeyBudWxscHRyIH07
CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+
IGNlcnRpZmljYXRlOworI2VuZGlmCit9OworCitzdHJ1Y3QgR2VuZXJpY1ByaXZhdGVLZXkgewor
ICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBlbnVtIGNsYXNzIEtleVR5
cGUgeyBSU0FUeXBlLCBFQ1R5cGUgfTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdlbmVy
aWNQcml2YXRlS2V5PiBjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZywgY29uc3QgS2V5VHlwZSwg
Y29uc3QgaW50KTsKKworICAgIEdlbmVyaWNQcml2YXRlS2V5KCk7CisgICAgfkdlbmVyaWNQcml2
YXRlS2V5KCk7CisKKyNpZiBQTEFURk9STShXSU4pICYmIEhBVkUoU1NMKQorICAgIEVWUF9QS0VZ
KiBrZXkgeyBudWxscHRyIH07CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8
U2VjS2V5UmVmPiBrZXk7CisjZW5kaWYKK307CisKKworY2xhc3MgR2VuZXJpY0Nvbm5lY3Rpb24g
eworICAgIGZyaWVuZCBjbGFzcyBHZW5lcmljTGlzdGVuZXI7CitwdWJsaWM6CisjaWYgUExBVEZP
Uk0oV0lOKQorICAgIEdlbmVyaWNDb25uZWN0aW9uKCk7CisjZWxpZiBQTEFURk9STShDT0NPQSkK
KyAgICBHZW5lcmljQ29ubmVjdGlvbihud19jb25uZWN0aW9uX3QpOworI2VuZGlmCisgICAgfkdl
bmVyaWNDb25uZWN0aW9uKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2b2lk
IHNlbmQoU3RyaW5nJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpIGNv
bnN0OworICAgIHZvaWQgcmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PHVpbnQ4X3Q+JiYpPiYmKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKK3ByaXZhdGU6CisjaWYgUExB
VEZPUk0oV0lOKSAmJiBIQVZFKFNTTCkKKyAgICBib29sIGFjY2VwdFNTTENvbm5lY3Rpb24oRVZQ
X1BLRVkqLCBYNTA5Kik7CisKKyAgICBTU0wqIG1fc3NsIHsgbnVsbHB0ciB9OworICAgIFNvY2tl
dDo6U29ja2V0IG1fc29ja2V0IHsgU29ja2V0OjpJbnZhbGlkU29ja2V0IH07CisjZWxpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247
CisgICAgYm9vbCBtX2luaXRpYWxpemVkIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworCitjbGFz
cyBHZW5lcmljTGlzdGVuZXIgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1
aW50OF90IHsgSHR0cCwgSHR0cHMsIEh0dHBzV2l0aExlZ2FjeVRMUyB9OworCisgICAgR2VuZXJp
Y0xpc3RlbmVyKCk7CisgICAgfkdlbmVyaWNMaXN0ZW5lcigpOworCisgICAgUHJvdG9jb2wgcHJv
dG9jb2woKSB7IHJldHVybiBtX3Byb3RvY29sOyB9CisgICAgdm9pZCBzZXRQcm90b2NvbChQcm90
b2NvbCBwcm90b2NvbCkgeyBtX3Byb3RvY29sID0gcHJvdG9jb2w7IH0KKyAgICB2b2lkIHNldElk
ZW50aXR5KHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0ZUtleT4mJiBwcml2YXRlS2V5LCBz
dGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0NlcnRpZmljYXRlPiYmIGNlcnRpZmljYXRlKQorICAgIHsK
KyAgICAgICAgbV9wcml2YXRlS2V5ID0gV1RGTW92ZShwcml2YXRlS2V5KTsKKyAgICAgICAgbV9j
ZXJ0aWZpY2F0ZSA9IFdURk1vdmUoY2VydGlmaWNhdGUpOworICAgIH0KKworICAgIGJvb2wgaXNW
YWxpZCgpOworICAgIHVpbnQxNl90IHBvcnQoKTsKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9p
ZCBjYW5jZWwoKTsKKyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlcihGdW5jdGlvbjx2b2lkKEdlbmVy
aWNDb25uZWN0aW9uJiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKEdlbmVy
aWNDb25uZWN0aW9uJiYpPiBtX2Nvbm5lY3Rpb25IYW5kbGVyOworCisgICAgUHJvdG9jb2wgbV9w
cm90b2NvbCB7IFByb3RvY29sOjpIdHRwIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNQ
cml2YXRlS2V5PiBtX3ByaXZhdGVLZXkgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRy
PEdlbmVyaWNDZXJ0aWZpY2F0ZT4gbV9jZXJ0aWZpY2F0ZSB7IG51bGxwdHIgfTsKKworI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaExpc3RlbmluZyhHZW5lcmljTGlz
dGVuZXIqKTsKKworICAgIFNvY2tldDo6U29ja2V0IG1fbGlzdGVuaW5nU29ja2V0IHsgU29ja2V0
OjpJbnZhbGlkU29ja2V0IH07CisgICAgdWludDE2X3QgbV9wb3J0OworICAgIGJvb2wgbV9saXN0
ZW5pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9saXN0ZW5pbmdTdG9wcGVkIHsgZmFsc2UgfTsK
KyNlbGlmIFBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBSZXRhaW5QdHI8U2VjSWRlbnRpdHlS
ZWY+IGNyZWF0ZUlkZW50aXR5KEdlbmVyaWNDZXJ0aWZpY2F0ZSYsIEdlbmVyaWNQcml2YXRlS2V5
Jik7CisgICAgUmV0YWluUHRyPG53X2xpc3RlbmVyX3Q+IG1fbGlzdGVuZXI7CisjZW5kaWYKK307
CisKKworfSAvLyBuYW1lc3BhY2RlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvR2VuZXJpY0Nvbm5lY3Rpb25QT1NJWC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0dlbmVyaWNDb25uZWN0aW9uUE9TSVguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkNWYyOGU2MDRmNzhk
NDJiZDE5YTYzMzAzYzljMWU0NWRhZGE3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uUE9TSVguY3BwCkBAIC0wLDAgKzEsMzI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZW5lcmljQ29u
bmVjdGlvbi5oIgorCisjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8b3B0aW9uYWw+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKQoreworI2lmIEhBVkUoU1NMKQorICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBzc2xJbml0aWFsaXplZDsKKyAgICBzdGQ6OmNhbGxfb25jZShz
c2xJbml0aWFsaXplZCwgW10geworICAgICAgICBTU0xfbGlicmFyeV9pbml0KCk7CisgICAgfSk7
CisjZW5kaWYKK30KKworc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4gR2VuZXJp
Y0NlcnRpZmljYXRlOjpjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZyBwZW0pCit7CisjaWYgSEFW
RShTU0wpCisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKyAgICBhdXRvIHBlbUxhdGluID0g
cGVtLmxhdGluMSgpOworICAgIGF1dG8gY2VydGlmaWNhdGUgPSBXVEY6Om1ha2VVbmlxdWU8R2Vu
ZXJpY0NlcnRpZmljYXRlPigpOworCisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYocGVt
TGF0aW4uZGF0YSgpLCBwZW1MYXRpbi5sZW5ndGgoKSk7CisgICAgaWYgKG1lbSkgeworICAgICAg
ICBjZXJ0aWZpY2F0ZS0+eDUwOSA9IFBFTV9yZWFkX2Jpb19YNTA5KG1lbSwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgfQorICAgIHJldHVy
biBjZXJ0aWZpY2F0ZTsKKyNlbHNlCisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKwor
R2VuZXJpY0NlcnRpZmljYXRlOjpHZW5lcmljQ2VydGlmaWNhdGUoKQoreworfQorCitHZW5lcmlj
Q2VydGlmaWNhdGU6On5HZW5lcmljQ2VydGlmaWNhdGUoKQoreworI2lmIEhBVkUoU1NMKQorICAg
IGlmICh4NTA5KSB7CisgICAgICAgIFg1MDlfZnJlZSh4NTA5KTsKKyAgICAgICAgeDUwOSA9IG51
bGxwdHI7CisgICAgfQorI2VuZGlmCit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0
ZUtleT4gR2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0oY29uc3QgU3RyaW5nIHBlbSwg
Y29uc3QgS2V5VHlwZSwgY29uc3QgaW50KQoreworI2lmIEhBVkUoU1NMKQorICAgIGluaXRpYWxp
emVTU0xMaWJyYXJ5KCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gIFdURjo6bWFrZVVuaXF1ZTxH
ZW5lcmljUHJpdmF0ZUtleT4oKTsKKyAgICBhdXRvIHBlbUxhdGluID0gcGVtLmxhdGluMSgpOwor
CisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYocGVtTGF0aW4uZGF0YSgpLCBwZW1MYXRp
bi5sZW5ndGgoKSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBwcml2YXRlS2V5LT5rZXkgPSBQ
RU1fcmVhZF9iaW9fUHJpdmF0ZUtleShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgICAgICBCSU9fZnJlZShtZW0pOworICAgIH0KKyAgICByZXR1cm4gcHJpdmF0ZUtleTsKKyNl
bHNlCisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKworR2VuZXJpY1ByaXZhdGVLZXk6
OkdlbmVyaWNQcml2YXRlS2V5KCkKK3sKK30KKworR2VuZXJpY1ByaXZhdGVLZXk6On5HZW5lcmlj
UHJpdmF0ZUtleSgpCit7CisjaWYgSEFWRShTU0wpCisgICAgaWYgKGtleSkgeworICAgICAgICBF
VlBfUEtFWV9mcmVlKGtleSk7CisgICAgICAgIGtleSA9IG51bGxwdHI7CisgICAgfQorI2VuZGlm
Cit9CisKKworR2VuZXJpY0Nvbm5lY3Rpb246OkdlbmVyaWNDb25uZWN0aW9uKCkKK3sKK30KKwor
R2VuZXJpY0Nvbm5lY3Rpb246On5HZW5lcmljQ29ubmVjdGlvbigpCit7Cit9CisKK2Jvb2wgR2Vu
ZXJpY0Nvbm5lY3Rpb246OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBTb2NrZXQ6Omlz
VmFsaWRTb2NrZXQobV9zb2NrZXQpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9uOjpzZW5k
KFN0cmluZyYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKK3sKKyAgICBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KG1fc29ja2V0
KSkgeworICAgICAgICBpbnQgc2VudFRvdGFsID0gMDsKKyAgICAgICAgY29uc3QgY2hhciogcHRy
ID0gbWVzc2FnZS51dGY4KCkuZGF0YSgpOworICAgICAgICB3aGlsZSAoc2VudFRvdGFsIDwgbWVz
c2FnZS51dGY4KCkubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGludCBzZW50OworI2lmIEhBVkUo
U1NMKQorICAgICAgICAgICAgaWYgKG1fc3NsKQorICAgICAgICAgICAgICAgIHNlbnQgPSBTU0xf
d3JpdGUobV9zc2wsIHB0ciwgbWVzc2FnZS51dGY4KCkubGVuZ3RoKCkgLSBzZW50VG90YWwpOwor
ICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgc2VudCA9IFNvY2tldDo6
d3JpdGUobV9zb2NrZXQsIHB0ciwgbWVzc2FnZS51dGY4KCkubGVuZ3RoKCkgLSBzZW50VG90YWwp
OworICAgICAgICAgICAgaWYgKHNlbnQgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBzZW50VG90YWwgKz0gc2VudDsKKyAgICAgICAgICAgIHB0ciArPSBzZW50Owor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9uOjpyZWNlaXZl
Qnl0ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSA0MDk2OworICAg
IHVpbnQ4X3QgYnVmZmVyW2J1ZmZlclNpemVdOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gLTE7CisjaWYgSEFWRShTU0wpCisgICAgaWYgKG1fc3Ns
ICYmIFNvY2tldDo6aXNWYWxpZFNvY2tldChtX3NvY2tldCkpCisgICAgICAgIGJ5dGVzUmVhZCA9
IFNTTF9yZWFkKG1fc3NsLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBlbHNlCisjZW5k
aWYKKyAgICAgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldChtX3NvY2tldCkpCisgICAgICAg
ICAgICBieXRlc1JlYWQgPSBTb2NrZXQ6OnJlYWQobV9zb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlcikpOworCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnVmZmVyLCBieXRlc1JlYWQpOworICAgIGVsc2UKKyAgICAgICAgY2xvc2UoKTsKKworICAgIGlm
IChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShy
ZXN1bHQpKTsKK30KKwordm9pZCBHZW5lcmljQ29ubmVjdGlvbjo6Y2xvc2UoKQoreworICAgIGlm
IChTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9zb2NrZXQpKSB7CisgICAgICAgIFNvY2tldDo6c2h1
dGRvd24obV9zb2NrZXQpOworICAgICAgICBTb2NrZXQ6OmNsb3NlKG1fc29ja2V0KTsKKyAgICAg
ICAgbV9zb2NrZXQgPSBTb2NrZXQ6OkludmFsaWRTb2NrZXQ7CisgICAgfQorfQorCisjaWYgSEFW
RShTU0wpCitib29sIEdlbmVyaWNDb25uZWN0aW9uOjphY2NlcHRTU0xDb25uZWN0aW9uKEVWUF9Q
S0VZKiBwcml2YXRlS2V5LCBYNTA5KiB4NTA5KQoreworICAgIGluaXRpYWxpemVTU0xMaWJyYXJ5
KCk7CisKKyAgICBTU0xfQ1RYKiBjb250ZXh0ID0gU1NMX0NUWF9uZXcoVExTX21ldGhvZCgpKTsK
KworICAgIGludCBjZXJ0SW50LCBrZXlJbnQ7CisgICAgaWYgKHg1MDkpCisgICAgICAgIGNlcnRJ
bnQgPSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjb250ZXh0LCB4NTA5KTsKKyAgICBpZiAocHJp
dmF0ZUtleSkKKyAgICAgICAga2V5SW50ID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleShjb250ZXh0
LCBwcml2YXRlS2V5KTsKKworICAgIG1fc3NsID0gU1NMX25ldyhjb250ZXh0KTsKKyAgICBTU0xf
c2V0X2ZkKG1fc3NsLCBtX3NvY2tldCk7CisgICAgYm9vbCBhY2NlcHRlZCA9IFNTTF9hY2NlcHQo
bV9zc2wpID4gMDsKKyAgICBTU0xfQ1RYX2ZyZWUoY29udGV4dCk7CisKKyAgICByZXR1cm4gYWNj
ZXB0ZWQ7Cit9CisjZW5kaWYKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8IHN0ZDo6cGFpcjxTb2Nr
ZXQ6OlNvY2tldCwgdWludDE2X3Q+ID4gY3JlYXRlTGlzdGVuaW5nU29ja2V0KCkKK3sKKyAgICBj
b25zdCBpbnQgQmFja2xvZyA9IDg7CisgICAgYXV0byBsaXN0ZW5pbmdTb2NrZXQgPSBTb2NrZXQ6
OnNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKCFTb2NrZXQ6OmlzVmFs
aWRTb2NrZXQobGlzdGVuaW5nU29ja2V0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIC8vIFBvcnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFsbG9jYXRlZCBwb3J0cy4gVHJ5IHVu
dGlsIHdlIGZpbmQgb25lIHRoYXQncyBmcmVlLgorICAgIGZvciAodWludDE2X3QgcG9ydCA9IDQ5
MTUyOyBwb3J0IDw9IDY1NTM1OyBwb3J0KyspIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2lu
IG5hbWU7CisgICAgICAgIG1lbXNldCgmbmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsKKyAgICAgICAg
bmFtZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbmFtZS5zaW5fcG9ydCA9IGh0b25z
KHBvcnQpOworICAgICAgICBuYW1lLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkp
OworICAgICAgICBpZiAoYmluZChsaXN0ZW5pbmdTb2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8c29j
a2FkZHIqPigmbmFtZSksIHNpemVvZihuYW1lKSkgPCAwKSB7CisgICAgICAgICAgICAvLyBUaGlz
IHBvcnQgaXMgYnVzeS4gVHJ5IHRoZSBuZXh0IHBvcnQuCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoOjpsaXN0ZW4obGlzdGVuaW5nU29ja2V0LCBCYWNrbG9n
KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICAgIFNvY2tldDo6Y2xvc2UobGlzdGVuaW5n
U29ja2V0KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGlzdGVuaW5nU29ja2V0LCBwb3J0KTsgLy8g
U3VjY2Vzc2Z1bGx5IHNldCB1cCBsaXN0ZW5pbmcgcG9ydC4KKyAgICB9CisKKyAgICAvLyBDb3Vs
ZG4ndCBmaW5kIGFuIGF2YWlsYWJsZSBwb3J0LgorICAgIFNvY2tldDo6Y2xvc2UobGlzdGVuaW5n
U29ja2V0KTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitHZW5lcmljTGlzdGVuZXI6
OkdlbmVyaWNMaXN0ZW5lcigpCit7Cit9CisKK0dlbmVyaWNMaXN0ZW5lcjo6fkdlbmVyaWNMaXN0
ZW5lcigpCit7CisgICAgY2FuY2VsKCk7Cit9CisKK2Jvb2wgR2VuZXJpY0xpc3RlbmVyOjppc1Zh
bGlkKCkKK3sKKyAgICByZXR1cm4gU29ja2V0Ojppc1ZhbGlkU29ja2V0KG1fbGlzdGVuaW5nU29j
a2V0KTsKK30KKwordWludDE2X3QgR2VuZXJpY0xpc3RlbmVyOjpwb3J0KCkKK3sKKyAgICByZXR1
cm4gbV9wb3J0OworfQorCit2b2lkIEdlbmVyaWNMaXN0ZW5lcjo6c3RhcnQoKQoreworICAgIGlm
IChtX2xpc3RlbmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzb2NrZXRfcG9ydCA9
IGNyZWF0ZUxpc3RlbmluZ1NvY2tldCgpOworICAgIGlmICghc29ja2V0X3BvcnQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gc29ja2V0X3BvcnQtPmZpcnN0Owor
ICAgIG1fcG9ydCA9IHNvY2tldF9wb3J0LT5zZWNvbmQ7CisgICAgbV9saXN0ZW5pbmdTdG9wcGVk
ID0gZmFsc2U7CisgICAgbV9saXN0ZW5pbmcgPSB0cnVlOworICAgIGRpc3BhdGNoTGlzdGVuaW5n
KHRoaXMpOworfQorCit2b2lkIEdlbmVyaWNMaXN0ZW5lcjo6Y2FuY2VsKCkKK3sKKyAgICBpZiAo
IW1fbGlzdGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xpc3RlbmluZ1N0b3BwZWQg
PSBmYWxzZTsKKyAgICBtX2xpc3RlbmluZyA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbV9saXN0
ZW5pbmdTdG9wcGVkKTsKK30KKwordm9pZCBHZW5lcmljTGlzdGVuZXI6OnJlZ2lzdGVySGFuZGxl
cihGdW5jdGlvbjx2b2lkKEdlbmVyaWNDb25uZWN0aW9uJiYpPiYmIGhhbmRsZXIpCit7CisgICAg
bV9jb25uZWN0aW9uSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisKK3ZvaWQgR2VuZXJp
Y0xpc3RlbmVyOjpkaXNwYXRjaExpc3RlbmluZyhHZW5lcmljTGlzdGVuZXIqIHNlbGYpCit7Cisg
ICAgY29uc3QgZmxvYXQgbGlzdGVuaW5nSW50ZXJ2YWxJblNlYyA9IDAuMTsgLy8gMTAwIG1pbGxp
c2Vjb25kcworICAgIGNvbnN0IGludCB0aW1lb3V0SW5Vc2VjID0gMTAwMDsgLy8gMSBtaWxsaXNl
Y29uZAorICAgIGZkX3NldCByZWFkZmQ7CisgICAgRkRfWkVSTygmcmVhZGZkKTsKKyAgICBGRF9T
RVQoc2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQsICZyZWFkZmQpOworCisgICAgc3RydWN0IHRpbWV2
YWwgdGltZW91dDsKKyAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgdGltZW91dC50dl91c2Vj
ID0gdGltZW91dEluVXNlYzsKKworICAgIGF1dG8gcmMgPSA6OnNlbGVjdChzZWxmLT5tX2xpc3Rl
bmluZ1NvY2tldCArIDEsICZyZWFkZmQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsKKyAg
ICBpZiAocmMgPiAwKSB7CisgICAgICAgIEdlbmVyaWNDb25uZWN0aW9uIHJlc3BvbnNlQ29ubmVj
dGlvbjsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgICAgIG1lbXNldCgm
YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgaW50IGxlbiA9IHNpemVvZihhZGRyKTsK
KyAgICAgICAgcmVzcG9uc2VDb25uZWN0aW9uLm1fc29ja2V0ID0gOjphY2NlcHQoc2VsZi0+bV9s
aXN0ZW5pbmdTb2NrZXQsIChzb2NrYWRkciopJmFkZHIsICZsZW4pOworCisgICAgICAgIGJvb2wg
YWNjZXB0ZWQgPSByZXNwb25zZUNvbm5lY3Rpb24uaXNWYWxpZCgpOworI2lmIEhBVkUoU1NMKQor
ICAgICAgICBib29sIHNzbENvbm5lY3Rpb24gPSBzZWxmLT5tX3Byb3RvY29sID09IEdlbmVyaWNM
aXN0ZW5lcjo6UHJvdG9jb2w6Okh0dHBzICYmIHNlbGYtPm1fcHJpdmF0ZUtleSAmJiBzZWxmLT5t
X2NlcnRpZmljYXRlOworICAgICAgICBpZiAoYWNjZXB0ZWQgJiYgc3NsQ29ubmVjdGlvbikKKyAg
ICAgICAgICAgIGFjY2VwdGVkID0gcmVzcG9uc2VDb25uZWN0aW9uLmFjY2VwdFNTTENvbm5lY3Rp
b24oc2VsZi0+bV9wcml2YXRlS2V5LT5rZXksIHNlbGYtPm1fY2VydGlmaWNhdGUtPng1MDkpOwor
I2VuZGlmCisgICAgICAgIGlmIChhY2NlcHRlZCAmJiBzZWxmLT5tX2Nvbm5lY3Rpb25IYW5kbGVy
KQorICAgICAgICAgICAgc2VsZi0+bV9jb25uZWN0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNl
Q29ubmVjdGlvbikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXNwb25zZUNvbm5lY3Rp
b24uY2xvc2UoKTsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+bV9saXN0ZW5pbmcgJiYgc2VsZi0+
aXNWYWxpZCgpKSB7CisgICAgICAgIFdURjo6UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIo
CisgICAgICAgICAgICBTZWNvbmRzKGxpc3RlbmluZ0ludGVydmFsSW5TZWMpLAorICAgICAgICAg
ICAgWz1dKCkgeworICAgICAgICAgICAgICAgIGRpc3BhdGNoTGlzdGVuaW5nKHNlbGYpOworICAg
ICAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU29ja2V0OjpjbG9zZShzZWxmLT5t
X2xpc3RlbmluZ1NvY2tldCk7CisgICAgICAgIHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0ID0gU29j
a2V0OjpJbnZhbGlkU29ja2V0OworICAgICAgICBzZWxmLT5tX2xpc3RlbmluZ1N0b3BwZWQgPSB0
cnVlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL0dlbmVyaWNIVFRQU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjBmMDFmZGJmYjll
MDRmMDM3YzI2NTJlYzQ0N2ExYjhmMDdiOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZW5lcmljSFRUUFNlcnZl
ci5oIgorCisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKK2NvbnN0IEdlbmVyaWNIVFRQUmVzcG9uc2UgUmVzcG9uc2VOb3RGb3Vu
ZCA9IHs0MDQsIHsgfSwKKyAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPjQwNCBOb3QgRm91bmQ8L3Rp
dGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjxoMT5GaWxlIG5vdCBmb3VuZDwvaDE+PC9ib2R5Pjwv
aHRtbD4ifTsKKworc3RhdGljIFN0cmluZyBzdGF0dXNUZXh0KHVuc2lnbmVkIHN0YXR1c0NvZGUp
Cit7CisgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7CisgICAgY2FzZSAyMDA6CisgICAgICAgIHJl
dHVybiAiT0siX3M7CisgICAgY2FzZSAzMDE6CisgICAgICAgIHJldHVybiAiTW92ZWQgUGVybWFu
ZW50bHkiX3M7CisgICAgY2FzZSA0MDE6CisgICAgICAgIHJldHVybiAiVW5hdXRob3JpemVkIl9z
OworICAgIGNhc2UgNDA0OgorICAgICAgICByZXR1cm4gIk5vdCBGb3VuZCJfczsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEdl
bmVyaWNIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgiSFRUUC8xLjEgIik7CisgICAgcmVzdWx0LmFw
cGVuZChTdHJpbmc6Om51bWJlcihzdGF0dXNDb2RlKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiICIp
OworICAgIHJlc3VsdC5hcHBlbmQoc3RhdHVzVGV4dChzdGF0dXNDb2RlKSk7CisgICAgcmVzdWx0
LmFwcGVuZCgiXHJcbiIpOworCisgICAgZm9yIChhdXRvIGtleSA6IGhlYWRlckZpZWxkcy5rZXlz
KCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCI6Iik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGVhZGVyRmllbGRzLmdldChrZXkpKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiXHJcbiIpOworICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQo
IkNvbnRlbnQtTGVuZ3RoOiIpOworICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYm9k
eS5zaXplSW5CeXRlcygpKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKGJvZHkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwor
dm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c2V0SFRUUFJlc3BvbnNlcyhzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgR2VuZXJpY0hUVFBSZXNwb25zZT4+IHBhdGhSZXNwb25z
ZUxpc3QpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcGF0aFJlc3BvbnNlTGlzdCkKKyAgICAg
ICAgbV9wYXRoUmVzcG9uc2VNYXAuc2V0KHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKK30KKwor
dm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c2V0SFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNh
dGlvbihTdHJpbmcgcGF0aCwgU3RyaW5nIHVzZXJOYW1lLCBTdHJpbmcgcGFzc3dvcmQsIEdlbmVy
aWNIVFRQUmVzcG9uc2UgdW5hdXRob3JpemVkUmVzcG9uc2UsIEdlbmVyaWNIVFRQUmVzcG9uc2Ug
YXV0aG9yaXplZFJlc3BvbnNlKQoreworICAgIG1fcGF0aFJlc3BvbnNlTWFwLnNldChwYXRoLCB1
bmF1dGhvcml6ZWRSZXNwb25zZSk7CisgICAgbV9wYXRoUmVzcG9uc2VNYXBGb3JCYXNpY0F1dGhl
bnRpY2F0aW9uLnNldChwYXRoLCBhdXRob3JpemVkUmVzcG9uc2UpOworCisgICAgbV9iYXNpY1Vz
ZXJOYW1lUGFzc3dvcmQgPSB7dXNlck5hbWUsIHBhc3N3b3JkfTsKK30KKwordm9pZCBHZW5lcmlj
SFRUUFNlcnZlcjo6cmVjZWl2ZUhUVFBSZXF1ZXN0KEdlbmVyaWNDb25uZWN0aW9uJiYgY29ubmVj
dGlvbiwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyID0geyB9KQoreworICAgIGNvbm5lY3Rpb24u
cmVjZWl2ZUJ5dGVzKFsmLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlciksIGNvbm5lY3Rpb24gPSBX
VEZNb3ZlKGNvbm5lY3Rpb24pXSAoVmVjdG9yPHVpbnQ4X3Q+JiYgcmVjZWl2ZUJ1ZmZlcikgbXV0
YWJsZSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmRWZWN0b3IoKHJlY2VpdmVCdWZmZXIpKTsKKwor
ICAgICAgICBhdXRvIHJlcXVlc3QgPSBwYXJzZUhUVFBSZXF1ZXN0KGJ1ZmZlcik7CisgICAgICAg
IGlmICghY29ubmVjdGlvbi5pc1ZhbGlkKCkgfHwgcmVxdWVzdC5jb21wbGV0ZSkgeworICAgICAg
ICAgICAgaWYgKGJhc2ljQXV0aGVudGljYXRpb25SZXF1aXJlZChyZXF1ZXN0KSkKKyAgICAgICAg
ICAgICAgICBzZW5kSFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlvbihXVEZNb3ZlKGNv
bm5lY3Rpb24pLCBXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzZW5kSFRUUFJlc3BvbnNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUocmVx
dWVzdCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlY2VpdmVIVFRQUmVxdWVzdChX
VEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pOworfQorCit2b2lk
IEdlbmVyaWNIVFRQU2VydmVyOjpzZW5kSFRUUFJlc3BvbnNlKEdlbmVyaWNDb25uZWN0aW9uJiYg
Y29ubmVjdGlvbiwgR2VuZXJpY0hUVFBSZXF1ZXN0JiYgcmVxdWVzdCkKK3sKKyAgICBTdHJpbmcg
cmVzcG9uc2VTdHJpbmc7CisgICAgaWYgKG1fcGF0aFJlc3BvbnNlTWFwLmNvbnRhaW5zKHJlcXVl
c3QucGF0aCkpCisgICAgICAgIHJlc3BvbnNlU3RyaW5nID0gbV9wYXRoUmVzcG9uc2VNYXAuZ2V0
KHJlcXVlc3QucGF0aCkuc2VyaWFsaXplKCk7CisgICAgZWxzZQorICAgICAgICByZXNwb25zZVN0
cmluZyA9IFJlc3BvbnNlTm90Rm91bmQuc2VyaWFsaXplKCk7CisKKyAgICBjb25uZWN0aW9uLnNl
bmQocmVzcG9uc2VTdHJpbmcudXRmOCgpLmRhdGEoKSwgW2Nvbm5lY3Rpb24gPSBXVEZNb3ZlKGNv
bm5lY3Rpb24pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOworICAg
IH0pOworfQorCitib29sIEdlbmVyaWNIVFRQU2VydmVyOjpiYXNpY0F1dGhlbnRpY2F0aW9uUmVx
dWlyZWQoR2VuZXJpY0hUVFBSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBtX3BhdGhS
ZXNwb25zZU1hcC5jb250YWlucyhyZXF1ZXN0LnBhdGgpICYmIG1fcGF0aFJlc3BvbnNlTWFwRm9y
QmFzaWNBdXRoZW50aWNhdGlvbi5jb250YWlucyhyZXF1ZXN0LnBhdGgpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50aWFsKFN0cmlu
ZyB0eXBlLCBTdHJpbmcgaGVhZGVyTGluZSkKK3sKKyAgICBhdXRvIGZvdW5kID0gaGVhZGVyTGlu
ZS5maW5kKHR5cGUpOworICAgIGlmIChmb3VuZCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdmFsdWUgPSBoZWFkZXJMaW5lLnN1YnN0cmluZyhm
b3VuZCArIHR5cGUubGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGls
ZSAoaW5kZXggPCB2YWx1ZS5sZW5ndGgoKSAmJiB2YWx1ZVtpbmRleF0gPT0gdScgJykKKyAgICAg
ICAgaW5kZXgrKzsKKworICAgIGlmIChpbmRleCA9PSB2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaW5kZXgp
OworfQorCit2b2lkIEdlbmVyaWNIVFRQU2VydmVyOjpzZW5kSFRUUFJlc3BvbnNlRm9yQmFzaWNB
dXRoZW50aWNhdGlvbihHZW5lcmljQ29ubmVjdGlvbiYmIGNvbm5lY3Rpb24sIEdlbmVyaWNIVFRQ
UmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgYm9vbCBhdXRob3JpemVkID0gZmFsc2U7CisgICAg
aWYgKHJlcXVlc3QuaGVhZGVyRmllbGRzLmNvbnRhaW5zKCJBdXRob3JpemF0aW9uIikpIHsKKyAg
ICAgICAgaWYgKGF1dG8gY3JlZGVudGlhbCA9IHBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50aWFs
KCJCYXNpYyIsIHJlcXVlc3QuaGVhZGVyRmllbGRzLmdldCgiQXV0aG9yaXphdGlvbiIpKSkgewor
ICAgICAgICAgICAgU3RyaW5nIHVzZXJQYXNzd29yZCA9IG1fYmFzaWNVc2VyTmFtZVBhc3N3b3Jk
LmZpcnN0ICsgIjoiICsgbV9iYXNpY1VzZXJOYW1lUGFzc3dvcmQuc2Vjb25kOworICAgICAgICAg
ICAgYXV0byBlbmNvZGVkVXNlclBhc3N3b3JkID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcodXNlclBh
c3N3b3JkLnV0ZjgoKS5kYXRhKCksIHVzZXJQYXNzd29yZC5sZW5ndGgoKSk7CisKKyAgICAgICAg
ICAgIGlmIChjcmVkZW50aWFsID09IGVuY29kZWRVc2VyUGFzc3dvcmQpCisgICAgICAgICAgICAg
ICAgYXV0aG9yaXplZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgU3RyaW5nIHJlc3Bv
bnNlU3RyaW5nOworICAgIGlmIChhdXRob3JpemVkKQorICAgICAgICByZXNwb25zZVN0cmluZyA9
IG1fcGF0aFJlc3BvbnNlTWFwRm9yQmFzaWNBdXRoZW50aWNhdGlvbi5nZXQocmVxdWVzdC5wYXRo
KS5zZXJpYWxpemUoKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3BvbnNlU3RyaW5nID0gbV9wYXRo
UmVzcG9uc2VNYXAuZ2V0KHJlcXVlc3QucGF0aCkuc2VyaWFsaXplKCk7CisKKyAgICBjb25uZWN0
aW9uLnNlbmQocmVzcG9uc2VTdHJpbmcudXRmOCgpLmRhdGEoKSwgW2Nvbm5lY3Rpb24gPSBXVEZN
b3ZlKGNvbm5lY3Rpb24pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgp
OworICAgIH0pOworfQorCit2b2lkIEdlbmVyaWNIVFRQU2VydmVyOjpzdGFydCgpCit7CisgICAg
bV9saXN0ZW5lci5yZWdpc3RlckhhbmRsZXIoWyZdIChHZW5lcmljQ29ubmVjdGlvbiYmIGNvbm5l
Y3Rpb24pIHsKKyAgICAgICAgdGhpcy0+cmVjZWl2ZUhUVFBSZXF1ZXN0KFdURk1vdmUoY29ubmVj
dGlvbikpOworICAgIH0pOworCisgICAgbV9saXN0ZW5lci5zdGFydCgpOworfQorCit2b2lkIEdl
bmVyaWNIVFRQU2VydmVyOjpzdG9wKCkKK3sKKyAgICBtX2xpc3RlbmVyLmNhbmNlbCgpOworfQor
CitHZW5lcmljSFRUUFJlcXVlc3QgR2VuZXJpY0hUVFBTZXJ2ZXI6OnBhcnNlSFRUUFJlcXVlc3Qo
VmVjdG9yPHVpbnQ4X3Q+JiByZXF1ZXN0VmVjdG9yKQoreworICAgIGNvbnN0IFN0cmluZyBzZXBh
cmF0b3IoIlxyXG5cclxuIik7CisKKyAgICBHZW5lcmljSFRUUFJlcXVlc3QgcmVxdWVzdDsKKyAg
ICBTdHJpbmcgcmVxdWVzdFN0cmluZyhyZXF1ZXN0VmVjdG9yLmRhdGEoKSk7CisgICAgYXV0byBo
ZWFkZXJCb2R5U2VwYXJhdG9yID0gcmVxdWVzdFN0cmluZy5maW5kKHNlcGFyYXRvcik7CisKKyAg
ICBpZiAoaGVhZGVyQm9keVNlcGFyYXRvciA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHJl
cXVlc3Q7CisKKyAgICBhdXRvIGhlYWRlclN0cmluZyA9IHJlcXVlc3RTdHJpbmcuc3Vic3RyaW5n
KDAsIGhlYWRlckJvZHlTZXBhcmF0b3IpOworICAgIGF1dG8gYm9keVN0cmluZyA9IHJlcXVlc3RT
dHJpbmcuc3Vic3RyaW5nKGhlYWRlckJvZHlTZXBhcmF0b3IgKyBzZXBhcmF0b3IubGVuZ3RoKCkp
OworCisgICAgYXV0byBoZWFkZXJMaW5lcyA9IGhlYWRlclN0cmluZy5zcGxpdCgiXHJcbiIpOwor
ICAgIGF1dG8gZmlyc3RFbGVtZW50cyA9IGhlYWRlckxpbmVzWzBdLnNwbGl0KCIgIik7CisgICAg
aWYgKGZpcnN0RWxlbWVudHMuc2l6ZSgpID49IDIpCisgICAgICAgIHJlcXVlc3QucGF0aCA9IGZp
cnN0RWxlbWVudHNbMV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGhlYWRlckxpbmVz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgIGF1dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXJMaW5lc1tp
XS5zcGxpdCgiOiIpOworICAgICAgICBpZiAoaGVhZGVyVmFsdWUuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICByZXF1ZXN0LmhlYWRlckZpZWxkcy5zZXQoaGVhZGVyVmFsdWVbMF0sIGhlYWRlclZh
bHVlWzFdKTsKKyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5oZWFkZXJGaWVsZHMuY29udGFpbnMo
IkNvbnRlbnQtTGVuZ3RoIikpIHsKKyAgICAgICAgaW50IGNvbnRlbnRMZW5ndGggPSBhdG9pKHJl
cXVlc3QuaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgQVNTRVJUKGNvbnRlbnRMZW5ndGggPj0gMCk7CisgICAgICAgIGlmIChib2R5U3Ry
aW5nLnNpemVJbkJ5dGVzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvbnRlbnRMZW5ndGgpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgICAgIHJlcXVlc3QuYm9keSA9IGJvZHlT
dHJpbmc7CisgICAgfQorCisgICAgcmVxdWVzdC5jb21wbGV0ZSA9IHRydWU7CisgICAgcmV0dXJu
IHJlcXVlc3Q7Cit9CisKK3VpbnQxNl90IEdlbmVyaWNIVFRQU2VydmVyOjpwb3J0KCkKK3sKKyAg
ICByZXR1cm4gbV9saXN0ZW5lci5wb3J0KCk7Cit9CisKK1VSTCBHZW5lcmljSFRUUFNlcnZlcjo6
dXJsKFN0cmluZyBwYXRoKQoreworICAgIFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nOworCisgICAg
c3dpdGNoIChtX2xpc3RlbmVyLnByb3RvY29sKCkpIHsKKyAgICBjYXNlIEdlbmVyaWNMaXN0ZW5l
cjo6UHJvdG9jb2w6Okh0dHBzOgorICAgICAgICB1cmxTdHJpbmcuYXBwZW5kKCJodHRwczovLzEy
Ny4wLjAuMS8iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW5lcmljTGlzdGVuZXI6OlBy
b3RvY29sOjpIdHRwOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHVybFN0cmluZy5hcHBlbmQoImh0
dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgfQorCisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKKyAg
ICAgICAgdXJsU3RyaW5nLmFwcGVuZChwYXRoKTsKKworICAgIFVSTCBzZXJ2ZXJVUkwoVVJMKCks
IHVybFN0cmluZy50b1N0cmluZygpKTsKKyAgICBzZXJ2ZXJVUkwuc2V0UG9ydChtX2xpc3RlbmVy
LnBvcnQoKSk7CisKKyAgICByZXR1cm4gc2VydmVyVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL0dlbmVyaWNIVFRQU2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0dlbmVyaWNIVFRQU2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ1YmM5YzNjOTA5OWY4ZDYzMGQ0
OWVmMmY3N2E1ZWExODUxOGMzMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvR2VuZXJpY0hUVFBTZXJ2ZXIuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHZW5lcmljQ29ubmVjdGlvbi5oIgorCisjaW5jbHVk
ZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CitzdHJ1Y3QgR2VuZXJpY0hUVFBSZXNwb25z
ZSB7CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShjb25zdCBTdHJpbmcmIGJvZHkpCisgICAgICAg
IDogYm9keShib2R5KSB7IH0KKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAgICA6IGhlYWRl
ckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCisgICAgICAgICwgYm9keShXVEZNb3ZlKGJv
ZHkpKSB7IH0KKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBTdHJpbmcmJiBib2R5
ID0geyB9KQorICAgICAgICA6IHN0YXR1c0NvZGUoc3RhdHVzQ29kZSkKKyAgICAgICAgLCBoZWFk
ZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMpKQorICAgICAgICAsIGJvZHkoV1RGTW92ZShi
b2R5KSkgeyB9CisKKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlKGNvbnN0IEdlbmVyaWNIVFRQUmVz
cG9uc2UmKSA9IGRlZmF1bHQ7CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShHZW5lcmljSFRUUFJl
c3BvbnNlJiYpID0gZGVmYXVsdDsKKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlKCkgPSBkZWZhdWx0
OworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBHZW5lcmljSFRUUFJl
c3BvbnNlJikgPSBkZWZhdWx0OworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShH
ZW5lcmljSFRUUFJlc3BvbnNlJiYpID0gZGVmYXVsdDsKKworICAgIHVuc2lnbmVkIHN0YXR1c0Nv
ZGUgeyAyMDAgfTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJGaWVsZHM7Cisg
ICAgU3RyaW5nIGJvZHk7CisKKyAgICBTdHJpbmcgc2VyaWFsaXplKCkgY29uc3Q7Cit9OworCitz
dHJ1Y3QgR2VuZXJpY0hUVFBSZXF1ZXN0IHsKKyAgICBTdHJpbmcgcGF0aDsKKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBoZWFkZXJGaWVsZHM7CisgICAgU3RyaW5nIGJvZHk7CisgICAgYm9v
bCBjb21wbGV0ZSB7IGZhbHNlIH07Cit9OworCitjbGFzcyBHZW5lcmljSFRUUFNlcnZlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHVpbnQxNl90
IHBvcnQoKTsKKyAgICBVUkwgdXJsKFN0cmluZyBwYXRoID0geyB9KTsKKworICAgIHZvaWQgc2V0
UHJvdG9jb2woR2VuZXJpY0xpc3RlbmVyOjpQcm90b2NvbCBwcm90b2NvbCkKKyAgICB7CisgICAg
ICAgIG1fbGlzdGVuZXIuc2V0UHJvdG9jb2wocHJvdG9jb2wpOworICAgIH0KKyAgICB2b2lkIHNl
dElkZW50aXR5KHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0ZUtleT4mJiBwcml2YXRlS2V5
LCBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0NlcnRpZmljYXRlPiYmIGNlcnRpZmljYXRlKQorICAg
IHsKKyAgICAgICAgbV9saXN0ZW5lci5zZXRJZGVudGl0eShXVEZNb3ZlKHByaXZhdGVLZXkpLCBX
VEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRIVFRQUmVzcG9uc2Vz
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBHZW5lcmljSFRUUFJlc3Bv
bnNlPj4pOworICAgIHZvaWQgc2V0SFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlvbihT
dHJpbmcgcGF0aCwgU3RyaW5nIHVzZXJOYW1lLCBTdHJpbmcgcGFzc3dvcmQsIEdlbmVyaWNIVFRQ
UmVzcG9uc2UgdW5hdXRob3JpemVkUmVzcG9uc2UsIEdlbmVyaWNIVFRQUmVzcG9uc2UgYXV0aG9y
aXplZFJlc3BvbnNlKTsKK3ByaXZhdGU6CisgICAgc3RhdGljIEdlbmVyaWNIVFRQUmVxdWVzdCBw
YXJzZUhUVFBSZXF1ZXN0KFZlY3Rvcjx1aW50OF90PiYpOworICAgIHZvaWQgcmVjZWl2ZUhUVFBS
ZXF1ZXN0KEdlbmVyaWNDb25uZWN0aW9uJiYsIFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICB2b2lk
IHNlbmRIVFRQUmVzcG9uc2UoR2VuZXJpY0Nvbm5lY3Rpb24mJiwgR2VuZXJpY0hUVFBSZXF1ZXN0
JiYpOworCisgICAgYm9vbCBiYXNpY0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQoR2VuZXJpY0hUVFBS
ZXF1ZXN0Jik7CisgICAgdm9pZCBzZW5kSFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlv
bihHZW5lcmljQ29ubmVjdGlvbiYmLCBHZW5lcmljSFRUUFJlcXVlc3QmJik7CisKKyAgICBHZW5l
cmljTGlzdGVuZXIgbV9saXN0ZW5lcjsKKyAgICBIYXNoTWFwPFN0cmluZywgR2VuZXJpY0hUVFBS
ZXNwb25zZT4gbV9wYXRoUmVzcG9uc2VNYXA7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdlbmVyaWNI
VFRQUmVzcG9uc2U+IG1fcGF0aFJlc3BvbnNlTWFwRm9yQmFzaWNBdXRoZW50aWNhdGlvbjsKKyAg
ICBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IG1fYmFzaWNVc2VyTmFtZVBhc3N3b3JkOworfTsK
KworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjNTYyZGJi
MjI2Zjk5NTk2OWQ2ZTljNmFhNGFhZmU5NzM2YTAxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI3ByYWdtYSBvbmNlCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNv
Y2syLmg+CisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0
IHsKKworI2lmIE9TKFdJTkRPV1MpCit1c2luZyBTb2NrZXQgPSBTT0NLRVQ7Cit1c2luZyBzb2Nr
bGVuX3QgPSBpbnQ7Citjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2NrZXQgPSBJTlZBTElEX1NP
Q0tFVDsKKyNlbHNlCit1c2luZyBTb2NrZXQgPSBpbnQ7CisjZGVmaW5lIFNPQ0tFVF9FUlJPUiAt
MQorY29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gU09DS0VUX0VSUk9SOworI2VuZGlm
CisKK1NvY2tldCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7Citi
b29sIGlzVmFsaWRTb2NrZXQoU29ja2V0KTsKK1NvY2tldCBhY2NlcHQoU29ja2V0KTsKK2ludCBz
aHV0ZG93bihTb2NrZXQpOworaW50IGNsb3NlKFNvY2tldCk7CitpbnQgcmVhZChTb2NrZXQsIHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKK2ludCB3cml0ZShTb2NrZXQsIGNvbnN0IHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtU29ja2V0UE9TSVguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tl
dFBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlhNDVlYmM5MDc3ZDRjM2NiODYyZjM3ZWM4ZDQxZGJl
YjE1NjcwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNv
Y2tldFBPU0lYLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKworU29ja2V0IHNvY2tldChpbnQgZG9t
YWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIHJldHVybiA6OnNvY2tldChkb21h
aW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCBzb2Nr
ZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCA+PSAwOworfQorCitTb2NrZXQgYWNjZXB0KFNvY2tl
dCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6YWNjZXB0KHNvY2tldCwgbnVsbHB0ciwgbnVsbHB0
cik7Cit9CisKK2ludCBzaHV0ZG93bihTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OnNo
dXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKK30KKworaW50IGNsb3NlKFNvY2tldCBzb2NrZXQp
Cit7CisgICAgcmV0dXJuIDo6Y2xvc2Uoc29ja2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNv
Y2tldCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6cmVhZChz
b2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCisKK2ludCB3cml0ZShTb2NrZXQgc29ja2V0LCBj
b25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjp3cml0ZShz
b2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBTb2NrZXQKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XaW4uY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtl
CmluZGV4IDY3ZTVjZjQyNDM4M2E3MTQzYjEyNTc1MmQ3M2IzM2Q3N2RmNmM3NzIuLjhiNjYzMjky
MGU4N2NiMTYwMDVmMjE1ZDA0Y2RhN2UzYWM4MGVlNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdpbi5jbWFrZQpAQCAtMTIzLDcgKzEyMywxMCBAQCBpZiAoRU5BQkxFX1dFQktJVCkKIAog
ICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJLaXRfU09VUkNFUwogICAgICAgICAke3Rlc3RfbWFpbl9T
T1VSQ0VTfQorICAgICAgICBHZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcAorICAgICAgICBHZW5l
cmljSFRUUFNlcnZlci5jcHAKIAorICAgICAgICB3aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCiAg
ICAgICAgIHdpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAKICAgICAgICAgd2luL1BsYXRmb3Jt
V2ViVmlld1dpbi5jcHAKICAgICAgICAgd2luL1V0aWxpdGllc1dpbi5jcHAKQEAgLTEzMSw2ICsx
MzQsOCBAQCBpZiAoRU5BQkxFX1dFQktJVCkKIAogICAgIGlmICgke1dURl9QTEFURk9STV9XSU5f
Q0FJUk99KQogICAgICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKKyAgICAgICAg
ICAgIFRlc3RzL1dlYktpdC9IVFRQU2VydmVyLmNwcAorCiAgICAgICAgICAgICBUZXN0cy9XZWJL
aXQvY3VybC9DZXJ0aWZpY2F0ZXMuY3BwCiAgICAgICAgICkKICAgICBlbmRpZiAoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAzM2JiMDY1NDBiMWE0ZTQ4OTZmM2VkMzg2YTEwZDhmZjBkMmRh
MzZiLi4yMTNjZTk3MTlmNWIzNzNlZWMwMjhiMDE2YjVhOWQ3NGNkNTM2MGYxIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtOTUsNiArOTUsOCBAQAogCQkxMUMyNTk4RDIxRkE2MzI0MDA0QzlF
MjMgLyogYXN5bmMtc2NyaXB0LWxvYWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUMyNTk4QzIxRkE2MThEMDA0QzlFMjMgLyogYXN5
bmMtc2NyaXB0LWxvYWQuaHRtbCAqLzsgfTsKIAkJMTQzRERFOTgyMEM5MDE4QjAwN0Y3NkZBIC8q
IFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3NEY1NUQwMjA0RDQ3MUMwMDI5NDhDNiAvKiBTZWN1cml0eS5mcmFtZXdv
cmsgKi87IH07CiAJCTE0Q0M0MkU2MjRCOEQ4RkEwMEU2NEY0OCAvKiBKU1J1bkxvb3BUaW1lci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0M0MkU1
MjRCOEQ4RkEwMEU2NEY0OCAvKiBKU1J1bkxvb3BUaW1lci5tbSAqLzsgfTsKKwkJMTY1Q0IyMEYy
NkExQjY1RjAwOUQ4QUIxIC8qIEdlbmVyaWNIVFRQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2NUNCMjBFMjZBMUI2NUYwMDlEOEFCMSAv
KiBHZW5lcmljSFRUUFNlcnZlci5jcHAgKi87IH07CisJCTE2NUNCMjEyMjZBMUI3NjcwMDlEOEFC
MSAvKiBHZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTY1Q0IyMTEyNkExQjc2NzAwOUQ4QUIxIC8qIEdlbmVyaWND
b25uZWN0aW9uQ29jb2EubW0gKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBm
aW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUEz
NTI0QUUxRDYzQTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzUyNEFDMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29w
ZS5jcHAgKi87IH07CiAJCTFBNEY4MUNGMUJERkZENTMwMDRFNjcyRSAvKiBSZW1vdGVPYmplY3RS
ZWdpc3RyeVBsdWdJbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNEY4MUNEMUJERkZENTMwMDRFNjcyRSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeVBs
dWdJbi5tbSAqLzsgfTsKQEAgLTE4NTMsNiArMTg1NSwxMCBAQAogCQkxNDRENDBFQzIyMUI0NkE3
MDA0QjQ3NEYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDQzQyRTUyNEI4RDhG
QTAwRTY0RjQ4IC8qIEpTUnVuTG9vcFRpbWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gSlNSdW5Mb29wVGltZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3Bl
cmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYXR1cmF0
ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE2NUNCMjBEMjZBMUI2MUUwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljSFRUUFNlcnZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNjVDQjIwRTI2QTFCNjVGMDA5RDhBQjEgLyogR2VuZXJpY0hU
VFBTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VuZXJp
Y0hUVFBTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNjVDQjIxMDI2
QTFCNkY2MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2VuZXJpY0Nvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTY1Q0IyMTEyNkExQjc2NzAwOUQ4QUIxIC8qIEdlbmVyaWNDb25uZWN0aW9uQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBHZW5lcmljQ29u
bmVjdGlvbkNvY29hLm1tOyBwYXRoID0gY29jb2EvR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8q
IGZpbmQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGZpbmQuaHRtbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwMkM4NEUxMjVENEE4NDAwRTNGNEJEIC8qIEZpbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmluZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMzUyNEE5MUQ2MjdCRDQwMDMxNzI5QiAvKiBEZWxl
dGVkQWRkcmVzc09mT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsZXRlZEFkZHJlc3NPZk9w
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjY1LDYgKzMyNzEsOSBA
QAogCQkJCUJDMTMxQTlFMTE3MTMxN0MwMEI2OTcyNyAvKiBjb25maWcuaCAqLywKIAkJCQk3QzZC
QkQ4QjE5Q0VBNjMwMDBDMUY1RTAgLyogQ291bnRlcnMuY3BwICovLAogCQkJCTdDNkJCRDhBMTlD
RUE1NDMwMEMxRjVFMCAvKiBDb3VudGVycy5oICovLAorCQkJCTE2NUNCMjEwMjZBMUI2RjYwMDlE
OEFCMSAvKiBHZW5lcmljQ29ubmVjdGlvbi5oICovLAorCQkJCTE2NUNCMjBFMjZBMUI2NUYwMDlE
OEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5jcHAgKi8sCisJCQkJMTY1Q0IyMEQyNkExQjYxRTAw
OUQ4QUIxIC8qIEdlbmVyaWNIVFRQU2VydmVyLmggKi8sCiAJCQkJQzBBREJFN0ExMkZDQTREMDAw
RDJDMTI5IC8qIEphdmFTY3JpcHRUZXN0LmNwcCAqLywKIAkJCQlDMEFEQkU3QjEyRkNBNEQwMDBE
MkMxMjkgLyogSmF2YVNjcmlwdFRlc3QuaCAqLywKIAkJCQlCQzU3NUJCRjEyNkY1NzUyMDA2RjBG
MTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovLApAQCAtMzMwNCw2ICszMzEzLDcgQEAKIAkJ
CQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZBREIgLyogRHJhZ0FuZERyb3BTaW11bGF0b3IuaCAqLywK
IAkJCQlGNDREMDY0ODFGMzk2MkUzMDAxQTBFMjkgLyogRWRpdGluZ1Rlc3RIYXJuZXNzLmggKi8s
CiAJCQkJRjQ0RDA2NDkxRjM5NjJFMzAwMUEwRTI5IC8qIEVkaXRpbmdUZXN0SGFybmVzcy5tbSAq
LywKKwkJCQkxNjVDQjIxMTI2QTFCNzY3MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb25Db2Nv
YS5tbSAqLywKIAkJCQk1QzdDMjRGQjIzN0M5NzIzMDA1OTlDOTEgLyogSFRUUFNlcnZlci5oICov
LAogCQkJCTVDN0MyNEZBMjM3Qzk3MjMwMDU5OUM5MSAvKiBIVFRQU2VydmVyLm1tICovLAogCQkJ
CUY0NEE1MzBEMjFCODk3NjkwMERCQjk5QyAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmggKi8s
CkBAIC01NTQ2LDYgKzU1NTYsOCBAQAogCQkJCUNEREM3QzY5MjVGRkY2RDAwMDIyNDI3OCAvKiBG
dWxsc2NyZWVuUmVtb3ZlTm9kZUJlZm9yZUVudGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RC
RkNDNDUxQTlGRjQ1MzAwQTdCNjkxIC8qIEZ1bGxzY3JlZW5ab29tSW5pdGlhbEZyYW1lLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODNEQjc5NjkxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTE2NUNCMjEyMjZBMUI3NjcwMDlEOEFCMSAvKiBHZW5lcmlj
Q29ubmVjdGlvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMTY1Q0IyMEYyNkExQjY1RjAw
OUQ4QUIxIC8qIEdlbmVyaWNIVFRQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUY4MUE0MTFBRTYwMDQ0N0M0QyAvKiBHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MzFFRkZGNjFFN0I1RThEMDBEMkVCQjggLyogR2VvbG9jYXRpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VFMTFBNDExQTlBMDA0NDdDNEMgLyogR2V0QmFja2luZ1NjYWxlRmFjdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9IVFRQU2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L0hUVFBTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOThlNWI1YzM2YTIzYmNiNmFlYjNmM2I2OTJm
MmU5NzdiODJiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9IVFRQU2VydmVyLmNwcApAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKworI2luY2x1ZGUgIkdlbmVyaWNDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiR2VuZXJpY0hUVFBTZXJ2ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYktpdC9X
S0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGlj
YXRpb25EZWNpc2lvbkxpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ2VydGlmaWNhdGVJ
bmZvLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQvV0tDcmVkZW50aWFsLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNl
Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgVVNFKENVUkwpCisjaWYg
SEFWRShTU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNlbmRpZgorI2luY2x1ZGUgPFdl
YktpdC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcm90ZWN0
aW9uU3BhY2VDdXJsLmg+CisjZW5kaWYKKworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Cisj
aWYgUExBVEZPUk0oV0lOKQorCitzdGF0aWMgc3RkOjp3c3RyaW5nIGNyZWF0ZVN0cmluZyhXS1N0
cmluZ1JlZiB3a1N0cmluZykKK3sKKyAgICBzaXplX3QgbWF4U2l6ZSA9IFdLU3RyaW5nR2V0TGVu
Z3RoKHdrU3RyaW5nKTsKKworICAgIHN0ZDo6dmVjdG9yPFdLQ2hhcj4gd2tDaGFyQnVmZmVyKG1h
eFNpemUpOworICAgIHNpemVfdCBhY3R1YWxMZW5ndGggPSBXS1N0cmluZ0dldENoYXJhY3RlcnMo
d2tTdHJpbmcsIHdrQ2hhckJ1ZmZlci5kYXRhKCksIG1heFNpemUpOworICAgIHJldHVybiBzdGQ6
OndzdHJpbmcod2tDaGFyQnVmZmVyLmRhdGEoKSwgYWN0dWFsTGVuZ3RoKTsKK30KKworY2xhc3Mg
Q2VydGlmaWNhdGVDaGFpbiB7CitwdWJsaWM6CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBtX2NlcnRpZmljYXRlcy5jbGVhcigpOworICAgIH0KKworICAgIGludCBzaXplKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NlcnRpZmljYXRlcy5zaXplKCk7CisgICAgfQorCisgICAg
dm9pZCBwdXNoX2JhY2soc3RkOjp2ZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVEYXRhLCBzdGQ6
OnZlY3Rvcjx1aW50OF90PiBwdWJsaWNLZXkpCisgICAgeworICAgICAgICBtX2NlcnRpZmljYXRl
cy5wdXNoX2JhY2soY2VydGlmaWNhdGVEYXRhKTsKKyAgICAgICAgbV9wdWJsaWNLZXlzLnB1c2hf
YmFjayhwdWJsaWNLZXkpOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGdldENl
cnRpZmljYXRlKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NlcnRpZmljYXRl
c1tpbmRleF07CisgICAgfQorCisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZ2V0UHVibGljS2V5
KGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3B1YmxpY0tleXNbaW5kZXhdOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjx1aW50OF90Pj4g
bV9jZXJ0aWZpY2F0ZXM7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8dWludDhfdD4+IG1f
cHVibGljS2V5czsKK307CisKK3N0YXRpYyBzdGQ6OnZlY3Rvcjx1aW50OF90PiBnZXRQdWJsaWNL
ZXkoc3RkOjp2ZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGUpCit7CisjaWYgSEFWRShTU0wpCisg
ICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYoY2VydGlmaWNhdGUuZGF0YSgpLCBjZXJ0aWZp
Y2F0ZS5zaXplKCkpOworICAgIGlmICghbWVtKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
WDUwOSogeDUwOSA9IFBFTV9yZWFkX2Jpb19YNTA5KG1lbSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgRVZQX1BLRVkqIHB1YmxpY0tleSA9IFg1MDlfZ2V0X3B1YmtleSh4NTA5KTsK
KyAgICBCSU8qIHBlbUJJTyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIFBFTV93cml0ZV9i
aW9fUFVCS0VZKHBlbUJJTywgcHVibGljS2V5KTsKKyAgICBCSU9fZmx1c2gocGVtQklPKTsKKwor
ICAgIEJVRl9NRU0qIGJ1Zm1lbTsKKyAgICBCSU9fZ2V0X21lbV9wdHIocGVtQklPLCAmYnVmbWVt
KTsKKworICAgIHJldHVybiBzdGQ6OnZlY3Rvcjx1aW50OF90PihidWZtZW0tPmRhdGEsIGJ1Zm1l
bS0+ZGF0YSArIGJ1Zm1lbS0+bGVuZ3RoKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRp
ZgorfQorCitjbGFzcyBTZXJ2ZXJUZXN0ZXIgeworcHVibGljOgorICAgIFNlcnZlclRlc3Rlcigp
CisgICAgeworICAgICAgICBtX2NvbnRleHQgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhD
b25maWd1cmF0aW9uKG51bGxwdHIpKTsKKyAgICAgICAgbV93ZWJWaWV3ID0gbWFrZVVuaXF1ZVdp
dGhvdXRGYXN0TWFsbG9jQ2hlY2s8UGxhdGZvcm1XZWJWaWV3PihtX2NvbnRleHQuZ2V0KCkpOwor
CisgICAgICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50OworICAg
ICAgICBtZW1zZXQoJm5hdmlnYXRpb25DbGllbnQsIDAsIHNpemVvZihuYXZpZ2F0aW9uQ2xpZW50
KSk7CisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICAgICAg
bmF2aWdhdGlvbkNsaWVudC5iYXNlLmNsaWVudEluZm8gPSB0aGlzOworICAgICAgICBuYXZpZ2F0
aW9uQ2xpZW50LmRpZEZpbmlzaE5hdmlnYXRpb24gPSBbXSAoV0tQYWdlUmVmLCBXS05hdmlnYXRp
b25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAg
U2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFpbExv
YWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsK
KyAgICAgICAgfTsKKworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZEZhaWxOYXZpZ2F0aW9u
ID0gW10gKFdLUGFnZVJlZiwgV0tOYXZpZ2F0aW9uUmVmLCBXS0Vycm9yUmVmIGVycm9yUmVmLCBX
S1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIFNlcnZlclRl
c3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworCisgICAgICAgICAgICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tF
cnJvckdldEVycm9yQ29kZShlcnJvclJlZik7CisgICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxp
emVkRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9j
YWxpemVkRGVzY3JpcHRpb24oZXJyb3JSZWYpKS5nZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXIt
Pm1fZGlkRmFpbExvYWQgPSB0cnVlOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExv
YWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkRmFp
bFByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwg
V0tFcnJvclJlZiBlcnJvclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7
CisgICAgICAgICAgICBTZXJ2ZXJUZXN0ZXIqIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRl
c3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rl
ci0+bV9lcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yUmVmKTsKKyAgICAgICAg
ICAgIHRlc3Rlci0+bV9sb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uID0gY3JlYXRlU3RyaW5nKGFk
b3B0V0soV0tFcnJvckNvcHlMb2NhbGl6ZWREZXNjcmlwdGlvbihlcnJvclJlZikpLmdldCgpKTsK
KyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRGYWlsTG9hZCA9IHRydWU7CisgICAgICAgICAgICB0
ZXN0ZXItPm1fZGlkRmluaXNoTG9hZCA9IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2
aWdhdGlvbkNsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBbXSAoV0tQ
YWdlUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgYXV0byBwcm90ZWN0aW9uU3BhY2UgPSBXS0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxsZW5nZSk7CisgICAg
ICAgICAgICBhdXRvIGRlY2lzaW9uTGlzdGVuZXIgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
R2V0RGVjaXNpb25MaXN0ZW5lcihjaGFsbGVuZ2UpOworICAgICAgICAgICAgYXV0byBhdXRoZW50
aWNhdGlvblNjaGVtZSA9IFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUo
cHJvdGVjdGlvblNwYWNlKTsKKworICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1l
ID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFs
dWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIg
PSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1
YXRpb25SZXF1ZXN0ID0gdHJ1ZTsKKyNpZiBVU0UoQ1VSTCkKKyAgICAgICAgICAgICAgICBhdXRv
IGNlcnRpZmljYXRlSW5mbyA9IGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5Q2VydGlmaWNh
dGVJbmZvKHByb3RlY3Rpb25TcGFjZSkpOworICAgICAgICAgICAgICAgIHRlc3Rlci0+bV92ZXJp
ZmljYXRpb25FcnJvciA9IFdLQ2VydGlmaWNhdGVJbmZvR2V0VmVyaWZpY2F0aW9uRXJyb3IoY2Vy
dGlmaWNhdGVJbmZvLmdldCgpKTsKKyAgICAgICAgICAgICAgICB0ZXN0ZXItPm1fdmVyaWZpY2F0
aW9uRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLQ2VydGlmaWNhdGVJ
bmZvQ29weVZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24oY2VydGlmaWNhdGVJbmZvLmdldCgp
KSkuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2NlcnRpZmljYXRlQ2hhaW4u
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFdLQ2VydGlmaWNh
dGVJbmZvR2V0Q2VydGlmaWNhdGVDaGFpblNpemUoY2VydGlmaWNhdGVJbmZvLmdldCgpKTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBhZG9wdFdLKFdLQ2Vy
dGlmaWNhdGVJbmZvQ29weUNlcnRpZmljYXRlQXRJbmRleChjZXJ0aWZpY2F0ZUluZm8uZ2V0KCks
IGkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0gV0tEYXRhR2V0
Qnl0ZXMoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rv
cjx1aW50OF90PiBjZXJ0aWZpY2F0ZURhdGEoc3RkOjp2ZWN0b3I8dWludDhfdD4ocHRyLCBwdHIg
KyBXS0RhdGFHZXRTaXplKGNlcnRpZmljYXRlLmdldCgpKSkpOworICAgICAgICAgICAgICAgICAg
ICB0ZXN0ZXItPm1fY2VydGlmaWNhdGVDaGFpbi5wdXNoX2JhY2soY2VydGlmaWNhdGVEYXRhLCBn
ZXRQdWJsaWNLZXkoY2VydGlmaWNhdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlm
CisgICAgICAgICAgICAgICAgaWYgKHRlc3Rlci0+bV9pZ25vcmVDZXJ0RXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB1c2VybmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKSk7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIi
KSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd2tDcmVkZW50aWFsID0gYWRvcHRXSyhXS0Ny
ZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50
aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgIFdLQXV0aGVu
dGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCB3
a0NyZWRlbnRpYWwuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVj
aXNpb25MaXN0ZW5lciwgbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGF1dGhlbnRp
Y2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRU
UEJhc2ljKSB7CisgICAgICAgICAgICAgICAgaWYgKFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VH
ZXRQcmV2aW91c0ZhaWx1cmVDb3VudChjaGFsbGVuZ2UpKQorICAgICAgICAgICAgICAgICAgICBX
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lckNhbmNlbChkZWNpc2lvbkxpc3RlbmVyKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2VydmVyVGVzdGVy
KiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihj
bGllbnRJbmZvKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRlc3Rlci0+bV91c2VybmFtZS5jX3N0cigp
KSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHRlc3Rlci0+bV9wYXNzd29yZC5jX3N0cigpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gd2tDcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxD
cmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lz
dGVuY2VGb3JTZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCB3a0NyZWRlbnRp
YWwuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBXS1BhZ2VQb2xpY3lDbGllbnRWMSBwYWdlUG9saWN5Q2xpZW50OworICAgICAg
ICBtZW1zZXQoJnBhZ2VQb2xpY3lDbGllbnQsIDAsIHNpemVvZihXS1BhZ2VQb2xpY3lDbGllbnRW
MSkpOworICAgICAgICBwYWdlUG9saWN5Q2xpZW50LmJhc2UudmVyc2lvbiA9IDE7CisgICAgICAg
IHBhZ2VQb2xpY3lDbGllbnQuYmFzZS5jbGllbnRJbmZvID0gdGhpczsKKyAgICAgICAgcGFnZVBv
bGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSA9IFtdIChXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgV0tVUkxSZXF1ZXN0
UmVmIHJlcXVlc3QsIGJvb2wgY2FuU2hvd01JTUVUeXBlLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJS
ZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykg
eworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJU
ZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0
ZXItPm1fc3RhdHVzQ29kZSA9IFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSk7
CisgICAgICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOworICAgICAg
ICB9OworCisgICAgICAgIFdLUGFnZVN0YXRlQ2xpZW50VjAgcGFnZVN0YXRlQ2xpZW50OworICAg
ICAgICBtZW1zZXQoJnBhZ2VTdGF0ZUNsaWVudCwgMCwgc2l6ZW9mKHBhZ2VTdGF0ZUNsaWVudCkp
OworICAgICAgICBwYWdlU3RhdGVDbGllbnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICAgICAgcGFn
ZVN0YXRlQ2xpZW50LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7CisgICAgICAgIHBhZ2VTdGF0ZUNs
aWVudC5kaWRDaGFuZ2VUaXRsZSA9IFtdIChjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAg
ICAgICAgICBTZXJ2ZXJUZXN0ZXIqIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+
KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9k
aWRDaGFuZ2VUaXRsZSA9IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgV0tQYWdlU2V0UGFn
ZU5hdmlnYXRpb25DbGllbnQobV93ZWJWaWV3LT5wYWdlKCksICZuYXZpZ2F0aW9uQ2xpZW50LmJh
c2UpOworICAgICAgICBXS1BhZ2VTZXRQYWdlUG9saWN5Q2xpZW50KG1fd2ViVmlldy0+cGFnZSgp
LCAoV0tQYWdlUG9saWN5Q2xpZW50QmFzZSopJnBhZ2VQb2xpY3lDbGllbnQpOworICAgICAgICBX
S1BhZ2VTZXRQYWdlU3RhdGVDbGllbnQobV93ZWJWaWV3LT5wYWdlKCksIChXS1BhZ2VTdGF0ZUNs
aWVudEJhc2UqKSZwYWdlU3RhdGVDbGllbnQpOworICAgIH0KKworICAgIHZvaWQgc2V0VXNlcm5h
bWVQYXNzd29yZChzdGQ6OnN0cmluZyB1c2VybmFtZSwgc3RkOjpzdHJpbmcgcGFzc3dvcmQpCisg
ICAgeworICAgICAgICBtX3VzZXJuYW1lID0gdXNlcm5hbWU7CisgICAgICAgIG1fcGFzc3dvcmQg
PSBwYXNzd29yZDsKKyAgICB9CisKKyAgICBib29sIGxvYWQoU3RyaW5nIHVybCwgYm9vbCBpZ25v
cmVDZXJ0RXJyb3IgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIG1faWdub3JlQ2VydEVycm9yID0g
aWdub3JlQ2VydEVycm9yOworICAgICAgICBtX2RpZEZpbmlzaExvYWQgPSBmYWxzZTsKKyAgICAg
ICAgbV9kaWRGYWlsTG9hZCA9IGZhbHNlOworICAgICAgICBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25SZXF1ZXN0ID0gZmFsc2U7CisgICAgICAgIG1fc3RhdHVzQ29kZSA9IDA7Cisg
ICAgICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICAgICAgbV92ZXJpZmljYXRpb25FcnJvciA9IDA7
CisgICAgICAgIG1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbi5jbGVhcigpOworICAgICAgICBt
X3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jZXJ0aWZp
Y2F0ZUNoYWluLmNsZWFyKCk7CisKKyAgICAgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLVVJM
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHVybC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFdLUGFn
ZUxvYWRVUkwobV93ZWJWaWV3LT5wYWdlKCksIHVybFJlZi5nZXQoKSk7CisgICAgICAgIFV0aWw6
OnJ1bigmbV9kaWRGaW5pc2hMb2FkKTsKKworICAgICAgICByZXR1cm4gIW1fZGlkRmFpbExvYWQ7
CisgICAgfQorCisgICAgYm9vbCBkaWRGYWlsTG9hZCgpIHsgcmV0dXJuIG1fZGlkRmFpbExvYWQ7
IH0KKyAgICBib29sIGRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KCkgeyBy
ZXR1cm4gbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdDsgfQorICAgIGlu
dCBlcnJvckNvZGUoKSB7IHJldHVybiBtX2Vycm9yQ29kZTsgfQorICAgIGludCB2ZXJpZmljYXRp
b25FcnJvcigpIHsgcmV0dXJuIG1fdmVyaWZpY2F0aW9uRXJyb3I7IH0KKyAgICBzdGQ6OndzdHJp
bmcgbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fbG9jYWxpemVkRXJyb3JE
ZXNjcmlwdGlvbjsgfQorICAgIHN0ZDo6d3N0cmluZyB2ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0
aW9uKCkgeyByZXR1cm4gbV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uOyB9CisKKyAgICBp
bnQgc3RhdHVzQ29kZSgpIHsgcmV0dXJuIG1fc3RhdHVzQ29kZTsgfQorICAgIENlcnRpZmljYXRl
Q2hhaW4gZ2V0Q2VydGlmaWNhdGVDaGFpbigpIHsgcmV0dXJuIG1fY2VydGlmaWNhdGVDaGFpbjsg
fQorCisgICAgc3RkOjp3c3RyaW5nIHRpdGxlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRG
aW5pc2hMb2FkIHx8IG1fZGlkRmFpbExvYWQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjp3c3Ry
aW5nKCk7CisKKyAgICAgICAgVXRpbDo6cnVuKCZtX2RpZENoYW5nZVRpdGxlKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRnJhbWVDb3B5VGl0bGUoV0tQYWdlR2V0TWFp
bkZyYW1lKG1fd2ViVmlldy0+cGFnZSgpKSkpLmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX2lnbm9yZUNlcnRFcnJvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZEZpbmlz
aExvYWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRGYWlsTG9hZCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0IHsgZmFsc2UgfTsK
KyAgICBib29sIG1fZGlkQ2hhbmdlVGl0bGUgeyBmYWxzZSB9OworCisgICAgaW50IG1fc3RhdHVz
Q29kZSB7IDAgfTsKKyAgICBpbnQgbV9lcnJvckNvZGUgeyAwIH07CisgICAgaW50IG1fdmVyaWZp
Y2F0aW9uRXJyb3IgeyAwIH07CisgICAgc3RkOjp3c3RyaW5nIG1fbG9jYWxpemVkRXJyb3JEZXNj
cmlwdGlvbjsKKyAgICBzdGQ6OndzdHJpbmcgbV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9u
OworCisgICAgc3RkOjpzdHJpbmcgbV91c2VybmFtZTsKKyAgICBzdGQ6OnN0cmluZyBtX3Bhc3N3
b3JkOworCisgICAgQ2VydGlmaWNhdGVDaGFpbiBtX2NlcnRpZmljYXRlQ2hhaW47CisKKyAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1XZWJWaWV3PiBtX3dlYlZpZXc7Cit9OworI2VuZGlmCisKK3N0cnVjdCBDZXJ0aWZp
Y2F0ZVByaXZhdGVLZXkgeworICAgIEdlbmVyaWNQcml2YXRlS2V5OjpLZXlUeXBlIGtleVR5cGU7
CisgICAgaW50IGJpdExlbmd0aDsKKyAgICBTdHJpbmcgY2VydGlmaWNhdGVQRU07CisgICAgU3Ry
aW5nIHByaXZhdGVLZXlQRU07CisgICAgU3RyaW5nIHB1YmxpY0tleVBFTTsKK307CisKKworQ2Vy
dGlmaWNhdGVQcml2YXRlS2V5IGNlcnRpZmljYXRlUHJpdmF0ZUtleVJTQSgpCit7CisgICAgLy8g
VGhpcyBwcml2YXRlIGtleSBhbmQgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUgd2VyZSBnZW5lcmF0
ZWQgYnkgb3BlbnNzbCBjb21tYW5kIGJlbG93LgorICAgIC8vCisgICAgLy8gb3BlbnNzbCByZXEg
LXg1MDkgLW5vZGVzIC1kYXlzIDM2NTAgLW5ld2tleSByc2E6MTAyNCAgXAorICAgIC8vICAgICAg
ICAgLXN1YmogIi9DPUpQL1NUPVRva3lvL089U2VsZi9DTj1sb2NhbGhvc3QiIC1rZXlvdXQgcHJp
dmF0ZS5rZXkgLXB1YmtleSAtb3V0IHNlcnZlci5jcnQKKworICAgIHJldHVybiB7CisgICAgICAg
IEdlbmVyaWNQcml2YXRlS2V5OjpLZXlUeXBlOjpSU0FUeXBlLAorICAgICAgICAxMDI0LAorICAg
ICAgICAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iCisgICAgICAgICJNSUlDVGpDQ0Fi
ZWdBd0lCQWdJSkFLSDJUdWRRK2hVN01BMEdDU3FHU0liM0RRRUJDd1VBTUVBeEN6QUpCZ05WXG4i
CisgICAgICAgICJCQVlUQWtwUU1RNHdEQVlEVlFRSURBVlViMnQ1YnpFTk1Bc0dBMVVFQ2d3RVUy
VnNaakVTTUJBR0ExVUVBd3dKXG4iCisgICAgICAgICJiRzlqWVd4b2IzTjBNQjRYRFRJeE1EZ3lN
ekF6TXpRME9Gb1hEVE14TURneU1UQXpNelEwT0Zvd1FERUxNQWtHXG4iCisgICAgICAgICJBMVVF
QmhNQ1NsQXhEakFNQmdOVkJBZ01CVlJ2YTNsdk1RMHdDd1lEVlFRS0RBUlRaV3htTVJJd0VBWURW
UVFEXG4iCisgICAgICAgICJEQWxzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFE
Z1kwQU1JR0pBb0dCQUs0Q2xvTEtmclZQXG4iCisgICAgICAgICJnR2E3NTExNFAxWDNsczN1dHZG
RWV1RGx1MDNWVUlDY3dOMGdlL3NDb24zaTIvTEpnVW9ZMUxMQnF0cEFKSjZ6XG4iCisgICAgICAg
ICI3d2h0U1ZqME53NTFTUVJIMGdOVzdiWmtVNElaK1g2UThmU3pmSjZydnhWRnoxRGF6NnIrcVVn
cDhWemhRbnR2XG4iCisgICAgICAgICJDcy9TekdyK3hjVWl6TlBRS3RLRmtXdGt0cWNmdFBSakFn
TUJBQUdqVURCT01CMEdBMVVkRGdRV0JCUzlTT25LXG4iCisgICAgICAgICI5Rk9nQU1NZE9hTDgz
ZEhIUmRlMnNEQWZCZ05WSFNNRUdEQVdnQlM5U09uSzlGT2dBTU1kT2FMODNkSEhSZGUyXG4iCisg
ICAgICAgICJzREFNQmdOVkhSTUVCVEFEQVFIL01BMEdDU3FHU0liM0RRRUJDd1VBQTRHQkFHV1Nt
MEJIaitFNVZtT0VJZk53XG4iCisgICAgICAgICJSU09seEF0bGxQaW5JVmJ4ZUIyM1FrOEpoQkZz
b055NDJ4MW5mcjYxcWtDSXc5WnJKMXN1TWlGN3FUZmVVc24rXG4iCisgICAgICAgICJMWVhKTU1s
ZTMrU1NvU1hQN0hZdjNlOGdHOC9DYzdzN0puenAvWGhXSi81Y1piMzhqT0VzaVVFMTBnVTIvNTl2
XG4iCisgICAgICAgICI2amV5YWlabkROLzdPKzVsSGdJVFo0RGNcbiIKKyAgICAgICAgIi0tLS0t
RU5EIENFUlRJRklDQVRFLS0tLS1cbiIsCisKKyAgICAgICAgIi0tLS0tQkVHSU4gUFJJVkFURSBL
RVktLS0tLVxuIgorICAgICAgICAiTUlJQ2RRSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbDh3
Z2dKYkFnRUFBb0dCQUs0Q2xvTEtmclZQZ0dhN1xuIgorICAgICAgICAiNTExNFAxWDNsczN1dHZG
RWV1RGx1MDNWVUlDY3dOMGdlL3NDb24zaTIvTEpnVW9ZMUxMQnF0cEFKSjZ6N3dodFxuIgorICAg
ICAgICAiU1ZqME53NTFTUVJIMGdOVzdiWmtVNElaK1g2UThmU3pmSjZydnhWRnoxRGF6NnIrcVVn
cDhWemhRbnR2Q3MvU1xuIgorICAgICAgICAiekdyK3hjVWl6TlBRS3RLRmtXdGt0cWNmdFBSakFn
TUJBQUVDZ1lCV2crTGhWRng3T1BQV0lFYUFLbkVUQk81dFxuIgorICAgICAgICAicE9wQU9wUDlq
VHI3RDd2ZXRoRU40RURFSkNNMkE3em5rVmcreHVtNWxxQ2pzcENDZDJPNUJOMGE1UkVaeE9EMVxu
IgorICAgICAgICAiMDV3WWx6RE5DLy9FZElQekVteUdpUFpqcnY3VldVRDRMTnlkNG1uK281TW0y
azhaL0pGWEZjY2hJNGdYNmV0c1xuIgorICAgICAgICAiVVBnWU1vL1lZRzZCWG0wbkFRSkJBT0J0
Nmp6N1VtT1NRQmNIZ2VVNW5QNXRPeXRNSEd3YmNjZFRTUEFZZkE3alxuIgorICAgICAgICAib2hD
bzVnQXZtVXlBZ1FiNzREUGZxMXJwdFNnR0gvcHQzckVJbkhUcU5YRUNRUURHZlAxWWNtaGtlMHVX
UzA1TVxuIgorICAgICAgICAiY1NFeE9hdTVYVmxxSzc1MUVkeHdqZjQ3c3drOHA3cjRCL25kVUNQ
ZjRQU05tNGV4M01rVVYya2NSQldYNkZya1xuIgorICAgICAgICAiUUUwVEFrQjQ5bVVvNXlDWjhF
ckEzdGdCTDVOUmdwaEFsdTQreW5BQnlmN25BWnRqL3dicnljemx6c0htZk9DT1xuIgorICAgICAg
ICAiWGhXU2YveUFyTFJxVlJySlJJeWhpSTJqYWxUUkFrQmVoaU40UFhPdGRuSDJyd0lvc1M5bmE5
bDF1eGpiME4wd1xuIgorICAgICAgICAiajBMMWJ3bUZrS3R6Y1VVKzNUMkd3YVZ6OW9NLzlMTlla
cFp6MDNUQSswTjFSamdTdnZSMUFrQmtSeENpTk01UlxuIgorICAgICAgICAicFRLbG9BdVQySytq
M0pvem1XT2R3RWFPQWFWbEJUNlppbDhFbXJFQi9hNkFSb2FRdElCRndobUZnN2RwOEJ3TFxuIgor
ICAgICAgICAiaysvcCtHZ09EcDlwXG4iCisgICAgICAgICItLS0tLUVORCBQUklWQVRFIEtFWS0t
LS0tXG4iLAorCisgICAgICAgICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuIgorICAgICAg
ICAiTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDdUFwYUN5bjYxVDRCbXUr
ZGRlRDlWOTViTlxuIgorICAgICAgICAiN3JieFJIcmc1YnROMVZDQW5NRGRJSHY3QXFKOTR0dnl5
WUZLR05TeXdhcmFRQ1Nlcys4SWJVbFk5RGNPZFVrRVxuIgorICAgICAgICAiUjlJRFZ1MjJaRk9D
R2ZsK2tQSDBzM3llcTc4VlJjOVEycytxL3FsSUtmRmM0VUo3YndyUDBzeHEvc1hGSXN6VFxuIgor
ICAgICAgICAiMENyU2haRnJaTGFuSDdUMFl3SURBUUFCXG4iCisgICAgICAgICItLS0tLUVORCBQ
VUJMSUMgS0VZLS0tLS1cbiIKKyAgICB9OworfQorCisKKyNpZiBQTEFURk9STShXSU4pCitURVNU
KEhUVFBTZXJ2ZXIsIFNpbXBsZUhUVFApCit7CisgICAgR2VuZXJpY0hUVFBTZXJ2ZXIgc2VydmVy
OworICAgIHNlcnZlci5zZXRQcm90b2NvbChHZW5lcmljTGlzdGVuZXI6OlByb3RvY29sOjpIdHRw
KTsKKyAgICBzZXJ2ZXIuc2V0SFRUUFJlc3BvbnNlcyh7eyIvIiwgeworICAgICAgICAyMDAsCisg
ICAgICAgIHsgfSwKKyAgICAgICAgIjxodG1sPiA8aGVhZD48dGl0bGU+U2ltcGxlIEhUVFAgU2Vy
dmVyPC90aXRsZT48L2hlYWQ+IDxib2R5PkhUVFAgaHR0cCBzZXJ2ZXIgcm9vdDwvYm9keT4gPC9o
dG1sPiIKKyAgICB9fX0pOworICAgIHNlcnZlci5zdGFydCgpOworCisgICAgU2VydmVyVGVzdGVy
IGxvYWRlcjsKKyAgICBTdHJpbmcgdG9wVVJMID0gc2VydmVyLnVybCgpLnN0cmluZygpOworICAg
IEVYUEVDVF9UUlVFKGxvYWRlci5sb2FkKHRvcFVSTCkpOworICAgIEVYUEVDVF9FUShsb2FkZXIu
dGl0bGUoKSwgTCJTaW1wbGUgSFRUUCBTZXJ2ZXIiKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnN0
YXR1c0NvZGUoKSwgMjAwKTsKKworICAgIFN0cmluZyB3cm9uZ1VSTCA9IHNlcnZlci51cmwoIm5v
dC1mb3VuZC5odG1sIikuc3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUobG9hZGVyLmxvYWQod3Jv
bmdVUkwpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnN0YXR1c0NvZGUoKSwgNDA0KTsKKworICAg
IHNlcnZlci5zdG9wKCk7Cit9CisKKyNpZiBIQVZFKFNTTCkKK1RFU1QoSFRUUFNlcnZlciwgU2lt
cGxlSFRUUFMpCit7CisgICAgYXV0byBjZXJ0S2V5ID0gY2VydGlmaWNhdGVQcml2YXRlS2V5UlNB
KCk7CisgICAgYXV0byBjZXJ0RGF0YSA9IEdlbmVyaWNDZXJ0aWZpY2F0ZTo6Y3JlYXRlRnJvbVBF
TShjZXJ0S2V5LmNlcnRpZmljYXRlUEVNKTsKKyAgICBhdXRvIGtleURhdGEgPSBHZW5lcmljUHJp
dmF0ZUtleTo6Y3JlYXRlRnJvbVBFTShjZXJ0S2V5LnByaXZhdGVLZXlQRU0sIGNlcnRLZXkua2V5
VHlwZSwgY2VydEtleS5iaXRMZW5ndGgpOworCisgICAgR2VuZXJpY0hUVFBTZXJ2ZXIgc2VydmVy
OworICAgIHNlcnZlci5zZXRQcm90b2NvbChHZW5lcmljTGlzdGVuZXI6OlByb3RvY29sOjpIdHRw
cyk7CisgICAgc2VydmVyLnNldEhUVFBSZXNwb25zZXMoe3siLyIsIHsKKyAgICAgICAgMjAwLAor
ICAgICAgICB7IH0sCisgICAgICAgICI8aHRtbD4gPGhlYWQ+PHRpdGxlPlNpbXBsZSBIVFRQUyBT
ZXJ2ZXI8L3RpdGxlPjwvaGVhZD4gPGJvZHk+SFRUUFMgaHR0cHMgc2VydmVyIHJvb3Q8L2JvZHk+
IDwvaHRtbD4iCisgICAgfX19KTsKKworICAgIHNlcnZlci5zZXRJZGVudGl0eShXVEZNb3ZlKGtl
eURhdGEpLCBXVEZNb3ZlKGNlcnREYXRhKSk7CisgICAgc2VydmVyLnN0YXJ0KCk7CisKKyAgICBT
ZXJ2ZXJUZXN0ZXIgbG9hZGVyOworICAgIFN0cmluZyB0b3BVUkwgPSBzZXJ2ZXIudXJsKCkuc3Ry
aW5nKCk7CisgICAgRVhQRUNUX1RSVUUobG9hZGVyLmxvYWQodG9wVVJMLCB0cnVlKSk7CisgICAg
RVhQRUNUX0VRKGxvYWRlci50aXRsZSgpLCBMIlNpbXBsZSBIVFRQUyBTZXJ2ZXIiKTsKKyAgICBF
WFBFQ1RfRVEobG9hZGVyLnN0YXR1c0NvZGUoKSwgMjAwKTsKKworICAgIGF1dG8gY2VydGlmaWNh
dGVDaGFpbiA9IGxvYWRlci5nZXRDZXJ0aWZpY2F0ZUNoYWluKCk7CisgICAgRVhQRUNUX0VRKGNl
cnRpZmljYXRlQ2hhaW4uc2l6ZSgpLCAxKTsKKworICAgIFN0cmluZyBjZXJ0aWZpY2F0ZShjZXJ0
aWZpY2F0ZUNoYWluLmdldENlcnRpZmljYXRlKDApLmRhdGEoKSwgY2VydGlmaWNhdGVDaGFpbi5n
ZXRDZXJ0aWZpY2F0ZSgwKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjZXJ0aWZpY2F0ZSwgY2Vy
dEtleS5jZXJ0aWZpY2F0ZVBFTSk7CisKKyAgICBTdHJpbmcgcHVia2V5KGNlcnRpZmljYXRlQ2hh
aW4uZ2V0UHVibGljS2V5KDApLmRhdGEoKSwgY2VydGlmaWNhdGVDaGFpbi5nZXRQdWJsaWNLZXko
MCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEocHVia2V5LCBjZXJ0S2V5LnB1YmxpY0tleVBFTSk7
CisKKyAgICBzZXJ2ZXIuc3RvcCgpOworfQorI2VuZGlmCisKK1RFU1QoSFRUUFNlcnZlciwgQmFz
aWNBdXRoZW50aWNhdGlvbikKK3sKKyAgICBHZW5lcmljSFRUUFNlcnZlciBzZXJ2ZXI7CisgICAg
c2VydmVyLnNldFByb3RvY29sKEdlbmVyaWNMaXN0ZW5lcjo6UHJvdG9jb2w6Okh0dHApOworICAg
IHNlcnZlci5zZXRIVFRQUmVzcG9uc2VGb3JCYXNpY0F1dGhlbnRpY2F0aW9uKCIvYmFzaWMuaHRt
bCIsICJVU0VSTkFNRSIsICJQQVNTV09SRCIsIHsKKyAgICAgICAgNDAxLAorICAgICAgICB7eyJX
V1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlbG09XCJzZWNyZXQgYXJlYVwiIn19LAorICAgICAg
ICAiPGh0bWw+IDxoZWFkPjx0aXRsZT5iYXNpYyB1bmF1dGhvcml6ZWQ8L3RpdGxlPjwvaGVhZD4g
PGJvZHk+PGgxPnVuYXV0aG9yaXplZCBjb250ZW50PC9oMT48L2JvZHk+IDwvaHRtbD4iCisgICAg
fSwgeworICAgICAgICAyMDAsCisgICAgICAgIHsgfSwKKyAgICAgICAgIjxodG1sPiA8aGVhZD48
dGl0bGU+YmFzaWMgYXV0aG9yaXplZDwvdGl0bGU+PC9oZWFkPiA8Ym9keT48aDE+YXV0aG9yaXpl
ZCA8L2gxPjwvYm9keT4gPC9odG1sPiIKKyAgICB9KTsKKyAgICBzZXJ2ZXIuc3RhcnQoKTsKKwor
ICAgIFNlcnZlclRlc3RlciBsb2FkZXI7CisgICAgU3RyaW5nIHRhcmdldFVSTCA9IHNlcnZlci51
cmwoImJhc2ljLmh0bWwiKS5zdHJpbmcoKTsKKworICAgIGxvYWRlci5zZXRVc2VybmFtZVBhc3N3
b3JkKCJiYWQtdXNlciIsICJiYWQtcGFzc3dvcmQiKTsKKyAgICBFWFBFQ1RfRkFMU0UobG9hZGVy
LmxvYWQodGFyZ2V0VVJMKSk7CisgICAgRVhQRUNUX05FKGxvYWRlci5zdGF0dXNDb2RlKCksIDIw
MCk7CisKKyAgICBsb2FkZXIuc2V0VXNlcm5hbWVQYXNzd29yZCgiVVNFUk5BTUUiLCAiUEFTU1dP
UkQiKTsKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh0YXJnZXRVUkwpKTsKKyAgICBFWFBF
Q1RfRVEobG9hZGVyLnN0YXR1c0NvZGUoKSwgMjAwKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRp
dGxlKCksIEwiYmFzaWMgYXV0aG9yaXplZCIpOworCisgICAgc2VydmVyLnN0b3AoKTsKK30KKwor
I2VuZGlmCisKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9HZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9HZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUyMTdjNjYxOWFkMDk2ZDIyZjA3ZTJjYTliMWVlNmY3N2VkZTI3ZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0dlbmVyaWNDb25uZWN0aW9uQ29jb2EubW0K
QEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiR2VuZXJpY0Nvbm5lY3Rpb24uaCIKKworI2ltcG9ydCAiR2VuZXJpY0hUVFBTZXJ2ZXIu
aCIKKyNpbXBvcnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCA8d2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CisjaW1wb3J0IDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZXh0cmFjdFBFTURhdGEoY29uc3QgU3RyaW5nIHBl
bSwgY29uc3QgU3RyaW5nIGRlbGltaXRlckJlZ2luLCBjb25zdCBTdHJpbmcgZGVsaW1pdGVyRW5k
KQoreworICAgIGF1dG8gYmVnaW5Qb3NpdGlvbiA9IHBlbS5maW5kKGRlbGltaXRlckJlZ2luKTsK
KyAgICBhdXRvIGVuZFBvc2l0aW9uID0gcGVtLmZpbmQoZGVsaW1pdGVyRW5kKTsKKworICAgIFN0
cmluZyBiYXNlNjRTdHJpbmc7CisgICAgaWYgKGJlZ2luUG9zaXRpb24gIT0gbm90Rm91bmQgJiYg
ZW5kUG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgIGJhc2U2NFN0cmluZyA9IHBlbS5zdWJz
dHJpbmcoYmVnaW5Qb3NpdGlvbiArIGRlbGltaXRlckJlZ2luLmxlbmd0aCgpLCBlbmRQb3NpdGlv
biAtIGJlZ2luUG9zaXRpb24gLSBkZWxpbWl0ZXJCZWdpbi5sZW5ndGgoKSk7CisgICAgZWxzZQor
ICAgICAgICBiYXNlNjRTdHJpbmcgPSBwZW07CisKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGJh
c2U2NFN0cmluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0NlcnRpZmljYXRlPiBHZW5lcmljQ2VydGlm
aWNhdGU6OmNyZWF0ZUZyb21QRU0oY29uc3QgU3RyaW5nIHBlbSkKK3sKKyAgICBjb25zdCBTdHJp
bmcgY2VydEJlZ2luID0gIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLSI7CisgICAgY29uc3Qg
U3RyaW5nIGNlcnRFbmQgPSAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSI7CisKKyAgICBhdXRv
IHBlbUJvZHkgPSBleHRyYWN0UEVNRGF0YShwZW0sIGNlcnRCZWdpbiwgY2VydEVuZCk7CisgICAg
aWYgKCFwZW1Cb2R5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY2VydGlm
aWNhdGUgPSBXVEY6Om1ha2VVbmlxdWU8R2VuZXJpY0NlcnRpZmljYXRlPigpOworICAgIE5TRGF0
YSAqY2VydGlmaWNhdGVEYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOnBlbUJvZHktPmRhdGEo
KSBsZW5ndGg6cGVtQm9keS0+c2l6ZSgpXTsKKyAgICBjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGUg
PSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgKF9fYnJpZGdl
IENGRGF0YVJlZiljZXJ0aWZpY2F0ZURhdGEpKTsKKworICAgIHJldHVybiBjZXJ0aWZpY2F0ZTsK
K30KKworR2VuZXJpY0NlcnRpZmljYXRlOjpHZW5lcmljQ2VydGlmaWNhdGUoKQoreworfQorCitH
ZW5lcmljQ2VydGlmaWNhdGU6On5HZW5lcmljQ2VydGlmaWNhdGUoKQoreworfQorCitzdGF0aWMg
UmV0YWluUHRyPFNlY0tleVJlZj4gZ2VuZXJhdGVSU0FLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IHBlbUJvZHksIGludCBiaXRMZW5ndGgpCit7CisgICAgTlNEaWN0aW9uYXJ5KiBvcHRpb25zID0g
QHsKKyAgICAgICAgKGlkKWtTZWNBdHRyS2V5VHlwZTogKGlkKWtTZWNBdHRyS2V5VHlwZVJTQSwK
KyAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0
ZSwKKyAgICAgICAgKGlkKWtTZWNBdHRyS2V5U2l6ZUluQml0czogW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6Yml0TGVuZ3RoXQorICAgIH07CisgICAgTlNEYXRhICplbmNvZGVkUHJpdmF0ZUtleSA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpwZW1Cb2R5LmRhdGEoKSBsZW5ndGg6cGVtQm9keS5zaXpl
KCldOworCisgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CisgICAgY29uc3QgTlNVSW50
ZWdlciBoZWFkZXJMZW5ndGggPSAyNjsKKyAgICByZXR1cm4gYWRvcHRDRihTZWNLZXlDcmVhdGVX
aXRoRGF0YSgoX19icmlkZ2UgQ0ZEYXRhUmVmKVtlbmNvZGVkUHJpdmF0ZUtleSBzdWJkYXRhV2l0
aFJhbmdlOk5TTWFrZVJhbmdlKGhlYWRlckxlbmd0aCwgZW5jb2RlZFByaXZhdGVLZXkubGVuZ3Ro
IC0gaGVhZGVyTGVuZ3RoKV0sIChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpb3B0aW9ucywgJmVy
cm9yKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8U2VjS2V5UmVmPiBnZW5lcmF0ZUVDS2V5KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiBwZW1Cb2R5LCBpbnQgYml0TGVuZ3RoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEdlbmVyaWNQcml2YXRlS2V5PiBHZW5lcmljUHJpdmF0ZUtleTo6Y3JlYXRlRnJvbVBFTShjb25z
dCBTdHJpbmcgcGVtLCBjb25zdCBLZXlUeXBlIGtleVR5cGUsIGNvbnN0IGludCBiaXRMZW5ndGgp
Cit7CisgICAgY29uc3QgU3RyaW5nIGtleUJlZ2luID0gIi0tLS0tQkVHSU4gUFJJVkFURSBLRVkt
LS0tLSI7CisgICAgY29uc3QgU3RyaW5nIGtleUVuZCA9ICItLS0tLUVORCBQUklWQVRFIEtFWS0t
LS0tIjsKKworICAgIGF1dG8gcGVtQm9keSA9IGV4dHJhY3RQRU1EYXRhKHBlbSwga2V5QmVnaW4s
IGtleUVuZCk7CisgICAgaWYgKCFwZW1Cb2R5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gdW5pcXVlS2V5ID0gV1RGOjptYWtlVW5pcXVlPEdlbmVyaWNQcml2YXRlS2V5Pigp
OworICAgIHN3aXRjaCAoa2V5VHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6UlNBVHlwZToKKyAg
ICAgICAgdW5pcXVlS2V5LT5rZXkgPSBnZW5lcmF0ZVJTQUtleSgqcGVtQm9keSwgYml0TGVuZ3Ro
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlUeXBlOjpFQ1R5cGU6CisgICAgICAgIHVu
aXF1ZUtleS0+a2V5ID0gZ2VuZXJhdGVFQ0tleSgqcGVtQm9keSwgYml0TGVuZ3RoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHVuaXF1ZUtleTsKK30KKworR2VuZXJpY1By
aXZhdGVLZXk6OkdlbmVyaWNQcml2YXRlS2V5KCkKK3sKK30KKworR2VuZXJpY1ByaXZhdGVLZXk6
On5HZW5lcmljUHJpdmF0ZUtleSgpCit7Cit9CisKKworc3RhdGljIGRpc3BhdGNoX2RhdGFfdCBk
YXRhRnJvbVN0cmluZyhTdHJpbmcmJiBzKQoreworICAgIGF1dG8gaW1wbCA9IHMucmVsZWFzZUlt
cGwoKTsKKyAgICBBU1NFUlQoaW1wbC0+aXM4Qml0KCkpOworICAgIHJldHVybiBkaXNwYXRjaF9k
YXRhX2NyZWF0ZShpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBsLT5sZW5ndGgoKSwgZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgKHZvaWQpaW1wbDsKKyAgICB9KTsKK30KKwor
c3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tRGF0YShkaXNwYXRjaF9kYXRhX3QgY29u
dGVudCkKK3sKKyAgICBBU1NFUlQoY29udGVudCk7CisgICAgX19ibG9jayBWZWN0b3I8dWludDhf
dD4gcmVxdWVzdDsKKyAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIF5ib29sKGRpc3Bh
dGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKSB7Cisg
ICAgICAgIHJlcXVlc3QuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKK0dlbmVyaWNDb25uZWN0aW9uOjpHZW5lcmljQ29ubmVjdGlvbihud19jb25uZWN0aW9u
X3QgY29ubmVjdGlvbikKKyAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQoreworICAgIG1f
aW5pdGlhbGl6ZWQgID0gdHJ1ZTsKK30KKworR2VuZXJpY0Nvbm5lY3Rpb246On5HZW5lcmljQ29u
bmVjdGlvbigpCit7Cit9CisKK2Jvb2wgR2VuZXJpY0Nvbm5lY3Rpb246OmlzVmFsaWQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2luaXRpYWxpemVkOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0
aW9uOjpzZW5kKFN0cmluZyYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBud19jb25uZWN0aW9uX3NlbmQobV9jb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVN0cmluZyhXVEZNb3ZlKG1lc3NhZ2UpKSwgTldfQ09OTkVD
VElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwKKyAgICAgICAgbWFrZUJsb2NrUHRy
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShud19lcnJv
cl90IGVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEFTU0VSVCghZXJyb3IpOworICAgICAg
ICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgIH0pLmdldCgpKTsKK30KKwordm9pZCBHZW5lcmljQ29ubmVjdGlv
bjo6cmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShtX2Nv
bm5lY3Rpb24uZ2V0KCksIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgbWFrZUJsb2NrUHRyKFtjb25uZWN0aW9uID0gKnRoaXMsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50
LCBud19jb250ZW50X2NvbnRleHRfdCwgYm9vbCwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7
CisgICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWNvbnRlbnQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih2ZWN0b3JGcm9tRGF0YShjb250ZW50KSk7CisgICAgICAgIH0pLmdldCgpKTsKK30KKwordm9p
ZCBHZW5lcmljQ29ubmVjdGlvbjo6Y2xvc2UoKQoreworICAgIGlmICghbV9pbml0aWFsaXplZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9jYW5jZWwobV9jb25uZWN0aW9u
LmdldCgpKTsKKyAgICBtX2luaXRpYWxpemVkID0gZmFsc2U7Cit9CisKKworR2VuZXJpY0xpc3Rl
bmVyOjpHZW5lcmljTGlzdGVuZXIoKQoreworfQorCitHZW5lcmljTGlzdGVuZXI6On5HZW5lcmlj
TGlzdGVuZXIoKQoreworfQorCit1aW50MTZfdCBHZW5lcmljTGlzdGVuZXI6OnBvcnQoKQorewor
ICAgIHJldHVybiBud19saXN0ZW5lcl9nZXRfcG9ydChtX2xpc3RlbmVyLmdldCgpKTsKK30KKwor
dm9pZCBHZW5lcmljTGlzdGVuZXI6OnJlZ2lzdGVySGFuZGxlcihGdW5jdGlvbjx2b2lkKEdlbmVy
aWNDb25uZWN0aW9uJiYpPiYmIGhhbmRsZXIpCit7CisgICAgbV9jb25uZWN0aW9uSGFuZGxlciA9
IFdURk1vdmUoaGFuZGxlcik7Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVyOjpzdGFydCgpCit7
CisgICAgYXV0byBjb25maWd1cmVUTFMgPSBtYWtlQmxvY2tQdHIoTldfUEFSQU1FVEVSU19ESVNB
QkxFX1BST1RPQ09MKTsKKworICAgIGlmIChtX2NlcnRpZmljYXRlICYmIG1fcHJpdmF0ZUtleSkg
eworICAgICAgICBhdXRvIG5ld0lkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHkoKm1fY2VydGlmaWNh
dGUsICptX3ByaXZhdGVLZXkpOworICAgICAgICBjb25maWd1cmVUTFMgPSBtYWtlQmxvY2tQdHIo
W2lkZW50aXR5ID0gV1RGTW92ZShuZXdJZGVudGl0eSldIChud19wcm90b2NvbF9vcHRpb25zX3Qg
cHJvdG9jb2xPcHRpb25zKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gb3B0aW9ucyA9IGFk
b3B0TlMobndfdGxzX2NvcHlfc2VjX3Byb3RvY29sX29wdGlvbnMocHJvdG9jb2xPcHRpb25zKSk7
CisgICAgICAgICAgICBhdXRvIGlkZW50aXR5MSA9IGFkb3B0TlMoc2VjX2lkZW50aXR5X2NyZWF0
ZShpZGVudGl0eS5nZXQoKSkpOworICAgICAgICAgICAgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0
X2xvY2FsX2lkZW50aXR5KG9wdGlvbnMuZ2V0KCksIGlkZW50aXR5MS5nZXQoKSk7CisgICAgICAg
IH0pOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9IG53X3BhcmFtZXRlcnNfY3JlYXRl
X3NlY3VyZV90Y3AoY29uZmlndXJlVExTLmdldCgpLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09O
RklHVVJBVElPTik7CisgICAgbV9saXN0ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRl
KHBhcmFtZXRlcnMpKTsKKyAgICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9saXN0ZW5lci5nZXQo
KSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CisKKyAgICBfX2Jsb2NrIGJvb2wgbGlzdGVu
ZXJSZWFkeSA9IGZhbHNlOworICAgIG53X2xpc3RlbmVyX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRs
ZXIobV9saXN0ZW5lci5nZXQoKSwgXihud19saXN0ZW5lcl9zdGF0ZV90IHN0YXRlLCBud19lcnJv
cl90IGVycm9yKSB7CisgICAgICAgIGlmIChzdGF0ZSA9PSBud19saXN0ZW5lcl9zdGF0ZV9yZWFk
eSkKKyAgICAgICAgICAgIGxpc3RlbmVyUmVhZHkgPSB0cnVlOworICAgIH0pOworCisgICAgbndf
bGlzdGVuZXJfc2V0X25ld19jb25uZWN0aW9uX2hhbmRsZXIobV9saXN0ZW5lci5nZXQoKSwKKyAg
ICAgICAgbWFrZUJsb2NrUHRyKFsmXSAobndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbikgewor
ICAgICAgICAgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobndDb25uZWN0aW9uLCBkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpKTsKKyAgICAgICAgICAgIG53X2Nvbm5lY3Rpb25fc3RhcnQobndD
b25uZWN0aW9uKTsKKworICAgICAgICAgICAgR2VuZXJpY0Nvbm5lY3Rpb24gcmVzcG9uc2VDb25u
ZWN0aW9uKG53Q29ubmVjdGlvbik7CisgICAgICAgICAgICBpZiAodGhpcy0+bV9jb25uZWN0aW9u
SGFuZGxlcikKKyAgICAgICAgICAgICAgICB0aGlzLT5tX2Nvbm5lY3Rpb25IYW5kbGVyKFdURk1v
dmUocmVzcG9uc2VDb25uZWN0aW9uKSk7CisgICAgICAgIH0pLmdldCgpKTsKKworICAgIG53X2xp
c3RlbmVyX3N0YXJ0KG1fbGlzdGVuZXIuZ2V0KCkpOworICAgIFV0aWw6OnJ1bigmbGlzdGVuZXJS
ZWFkeSk7Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVyOjpjYW5jZWwoKQoreworICAgIGlmICgh
bV9saXN0ZW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX19ibG9jayBib29sIGNhbmNlbGxl
ZCA9IGZhbHNlOworICAgIG53X2xpc3RlbmVyX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9s
aXN0ZW5lci5nZXQoKSwgXihud19saXN0ZW5lcl9zdGF0ZV90IHN0YXRlLCBud19lcnJvcl90IGVy
cm9yKSB7CisgICAgICAgIGlmIChzdGF0ZSA9PSBud19saXN0ZW5lcl9zdGF0ZV9jYW5jZWxsZWQp
CisgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlOworICAgIH0pOworICAgIG53X2xpc3RlbmVy
X2NhbmNlbChtX2xpc3RlbmVyLmdldCgpKTsKKyAgICBVdGlsOjpydW4oJmNhbmNlbGxlZCk7Cisg
ICAgbV9saXN0ZW5lciA9IG51bGxwdHI7Cit9CisKK1JldGFpblB0cjxTZWNJZGVudGl0eVJlZj4g
R2VuZXJpY0xpc3RlbmVyOjpjcmVhdGVJZGVudGl0eShHZW5lcmljQ2VydGlmaWNhdGUmIGNlcnRp
ZmljYXRlLCBHZW5lcmljUHJpdmF0ZUtleSYgcHJpdmF0ZUtleSkKK3sKKyAgICByZXR1cm4gYWRv
cHRDRihTZWNJZGVudGl0eUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjZXJ0aWZpY2F0ZS5j
ZXJ0aWZpY2F0ZS5nZXQoKSwgcHJpdmF0ZUtleS5rZXkuZ2V0KCkpKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVj
ZGJkMGQ5MTAyODc0Y2NlOGUxYTk0NjU2MWUzYmNjYzdhYWQwZDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKQEAgLTAsMCAr
MSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Tb2NrZXQuaCIKKworI2luY2x1ZGUgPG11dGV4PgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
Cit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGZsYWc7CisKKyAgICBzdGQ6OmNhbGxfb25j
ZShmbGFnLCBbXSB7CisgICAgICAgIFdTQURBVEEgZGF0YTsKKyAgICAgICAgV1NBU3RhcnR1cChN
QUtFV09SRCgyLCAwKSwgJmRhdGEpOworICAgIH0pOworfQorCitTb2NrZXQgc29ja2V0KGludCBk
b21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiA6OnNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1Zh
bGlkU29ja2V0KFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCAhPSBJTlZBTElE
X1NPQ0tFVDsKK30KKworU29ja2V0IGFjY2VwdChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVy
biA6OmFjY2VwdChzb2NrZXQsIG51bGxwdHIsIG51bGxwdHIpOworfQorCitpbnQgc2h1dGRvd24o
U29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpzaHV0ZG93bihzb2NrZXQsIFNEX0JPVEgp
OworfQorCitpbnQgY2xvc2UoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpjbG9zZXNv
Y2tldChzb2NrZXQpOworfQorCitpbnQgcmVhZChTb2NrZXQgc29ja2V0LCB2b2lkKiBidWZmZXIs
IHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjpyZWN2KHNvY2tldCwgc3RhdGljX2Nhc3Q8
Y2hhcio+KGJ1ZmZlciksIGNvdW50LCAwKTsKK30KKworaW50IHdyaXRlKFNvY2tldCBzb2NrZXQs
IGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnNlbmQo
c29ja2V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQor
Cit9IC8vIG5hbWVzcGFjZSBTb2NrZXQKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="459270"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436271</attachid>
            <date>2021-08-24 02:24:46 -0700</date>
            <delta_ts>2021-08-31 20:15:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20210824182336.patch</filename>
            <type>text/plain</type>
            <size>77866</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2VkMDQ0NTNjOWZjM2UzMmQzNmU4OWYxMjRlMTc1OTg4
YjU5M2QxMS4uMTA4OGZiYmUzNWEzMjg5MWQ4NTdjZGUxZDU0YTNmMTRhN2JhYTMzYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
NCBAQAorMjAyMS0wOC0yNCAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1bW1h
cnkgb2YgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBHZW5lcmljSFRUUFNlcnZlcjogVGhl
IHNlcnZlci4gSXQgdXNlcyBDb25uZWN0aW9uIHdoaWNoIGlzIGFic3RyYWN0ZWQgc29ja2V0Lgor
ICAgICAgICAgICAgQ29ubmVjdGlvbjogQWJzdHJhY3RlZCBlbmRwb2ludCBvZiBjb25uZWN0aW9u
LiBJdCBjYW4gaGFuZGxlIFRMUyBjb25uZWN0aW9uLgorICAgICAgICAgICAgUGxhdGZvcm1Tb2Nr
ZXQ6IEEgdGhpbiBsYXllciB0byByZW1vdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB1bml4IHNvY2tl
dCBhbmQgd2luc29jazIuCisKKyAgICAgICAgVGVzdHM6IFRlc3RzL1dlYktpdC9IVFRQU2VydmVy
LmNwcAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weToKKyAgICAgICAg
KFdpblBvcnQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvR2VuZXJpY0Nvbm5lY3Rpb24uaDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnByb3RvY29s
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6c2V0UHJvdG9jb2wp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpzZXRJZGVudGl0eSk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcDogQWRk
ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjppbml0aWFsaXplU1NMTGlicmFyeSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ2VydGlmaWNhdGU6OmNyZWF0ZUZyb21QRU0pOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRlOjpHZW5lcmljQ2VydGlm
aWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRlOjp+R2Vu
ZXJpY0NlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2YXRl
S2V5OjpjcmVhdGVGcm9tUEVNKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2
YXRlS2V5OjpHZW5lcmljUHJpdmF0ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5l
cmljUHJpdmF0ZUtleTo6fkdlbmVyaWNQcml2YXRlS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkdlbmVyaWNDb25uZWN0aW9uOjpHZW5lcmljQ29ubmVjdGlvbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6fkdlbmVyaWNDb25uZWN0aW9uKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjppc1ZhbGlkIGNvbnN0KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjpzZW5kIGNvbnN0KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjpyZWNlaXZlQnl0ZXMpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OmNsb3NlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjphY2NlcHRTU0xDb25uZWN0aW9u
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6R2VuZXJpY0xpc3Rl
bmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6fkdlbmVyaWNM
aXN0ZW5lcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OmlzVmFs
aWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpwb3J0KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6c3RhcnQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpyZWdpc3RlckhhbmRsZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpkaXNwYXRjaExpc3RlbmluZyk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6c3RhdHVzVGV4dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5l
cmljSFRUUFJlc3BvbnNlOjpzZXJpYWxpemUgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZXMpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVu
dGljYXRpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnJl
Y2VpdmVIVFRQUmVxdWVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNl
cnZlcjo6c2VuZEhUVFBSZXNwb25zZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmlj
SFRUUFNlcnZlcjo6YmFzaWNBdXRoZW50aWNhdGlvblJlcXVpcmVkKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50aWFsKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzZW5kSFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRo
ZW50aWNhdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6
c3RhcnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnN0b3Ap
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnBhcnNlSFRUUFJl
cXVlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnBvcnQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnVybCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQUmVzcG9uc2U6OkdlbmVyaWNIVFRQUmVzcG9uc2Up
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnVybCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6c2V0UHJvdG9jb2wpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnNldElkZW50aXR5KToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0Lmg6IEFkZGVkLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXRQT1NJWC5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U29ja2V0Ojpzb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U29ja2V0Ojppc1ZhbGlkU29ja2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6
YWNjZXB0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6c2h1dGRvd24pOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpjbG9zZSk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpTb2NrZXQ6OnJlYWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojp3cml0
ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9IVFRQU2VydmVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q2VydGlmaWNhdGVDaGFpbjo6Y2xlYXIpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Q2VydGlmaWNhdGVDaGFpbjo6c2l6ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
ZXJ0aWZpY2F0ZUNoYWluOjpwdXNoX2JhY2spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q2Vy
dGlmaWNhdGVDaGFpbjo6Z2V0Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Q2VydGlmaWNhdGVDaGFpbjo6Z2V0UHVibGljS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmdldFB1YmxpY0tleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OlNl
cnZlclRlc3Rlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnNldFVz
ZXJuYW1lUGFzc3dvcmQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjps
b2FkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6ZGlkRmFpbExvYWQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpkaWRSZWNlaXZlU2VydmVy
VHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJU
ZXN0ZXI6OmVycm9yQ29kZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6
OnZlcmlmaWNhdGlvbkVycm9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rl
cjo6bG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
ZXJ2ZXJUZXN0ZXI6OnZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpzdGF0dXNDb2RlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNlcnZlclRlc3Rlcjo6Z2V0Q2VydGlmaWNhdGVDaGFpbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnRpdGxlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmNlcnRpZmljYXRlUHJpdmF0ZUtleVJTQSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0dlbmVyaWNDb25uZWN0aW9uQ29jb2Eu
bW06IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZXh0cmFjdFBFTURhdGEpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRlOjpjcmVhdGVGcm9tUEVNKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDZXJ0aWZpY2F0ZTo6R2VuZXJpY0NlcnRp
ZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDZXJ0aWZpY2F0ZTo6fkdl
bmVyaWNDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJTQUtl
eSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZUVDS2V5KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2YXRlS2V5OjpjcmVhdGVGcm9tUEVNKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNQcml2YXRlS2V5OjpHZW5lcmljUHJpdmF0ZUtleSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljUHJpdmF0ZUtleTo6fkdlbmVyaWNQcml2YXRl
S2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRhdGFGcm9tU3RyaW5nKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnZlY3RvckZyb21EYXRhKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkdlbmVyaWNDb25uZWN0aW9uOjpHZW5lcmljQ29ubmVjdGlvbik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6fkdlbmVyaWNDb25uZWN0aW9uKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjppc1ZhbGlkIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjpzZW5kIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjpyZWNlaXZlQnl0ZXMpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6R2VuZXJpY0xpc3RlbmVyKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6fkdlbmVyaWNMaXN0ZW5lcik6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnBvcnQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpyZWdpc3RlckhhbmRsZXIpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpzdGFydCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OmNhbmNlbCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpHZW5lcmljTGlzdGVuZXI6OmNyZWF0ZUlkZW50aXR5KToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6U29ja2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNv
Y2tldDo6c29ja2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aXNWYWxpZFNv
Y2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmFjY2VwdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNodXRkb3duKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNvY2tldDo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpyZWFk
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6d3JpdGUpOgorCiAyMDIxLTA4LTIx
ICBEYW5pZWwgS29sZXNhICA8ZGtvbGVzYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBE
byBub3QgYXNzdW1lIGxvZyBzdWNjZXNzIGluIGFwcGx5LWJ1aWxkLXJldmlzaW9uLXRvLWZpbGVz
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQppbmRleCBlODVhNDJlNDc4NTdlZThhMWNlNDdl
NTAxZDViZGU3NTFjZTlkNmRmLi44NWNlZDY2YjgxNzg1NzIzMDlhOTlkMTE2OTMzOGU0ZWZhNjAz
MmNlIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKQEAgLTE5OCw3ICsxOTgsNyBAQCBj
bGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVmIF9wYXRoX3RvX2RlZmF1bHRfaW1hZ2Vf
ZGlmZihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ0ltYWdlRGlmZi5l
eGUnKQogCi0gICAgQVBJX1RFU1RfQklOQVJZX05BTUVTID0gWydUZXN0V1RGLmV4ZScsICdUZXN0
V2ViQ29yZS5leGUnLCAnVGVzdFdlYktpdExlZ2FjeS5leGUnXQorICAgIEFQSV9URVNUX0JJTkFS
WV9OQU1FUyA9IFsnVGVzdFdURi5leGUnLCAnVGVzdFdlYkNvcmUuZXhlJywgJ1Rlc3RXZWJLaXRM
ZWdhY3kuZXhlJywgJ1Rlc3RXZWJLaXQuZXhlJ10KIAogICAgIGRlZiBwYXRoX3RvX2FwaV90ZXN0
X2JpbmFyaWVzKHNlbGYpOgogICAgICAgICByZXR1cm4ge2JpbmFyeS5zcGxpdCgnLicpWzBdOiBz
ZWxmLl9idWlsZF9wYXRoKGJpbmFyeSkgZm9yIGJpbmFyeSBpbiBzZWxmLkFQSV9URVNUX0JJTkFS
WV9OQU1FU30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0Nvbm5lY3Rp
b24uaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0Nvbm5lY3Rpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNjMxNDFlNmQ5MjExM2RjNDA4NzQwOGRkNTk5NmI5MGE1MGJhMTM3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5oCkBAIC0wLDAgKzEs
MTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oV0lO
KSAmJiBIQVZFKFNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorI2luY2x1ZGUgPG9w
ZW5zc2wvc3NsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2lu
Y2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIlBsYXRmb3JtU29ja2V0LmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworY2xhc3MgR2VuZXJpY0Nvbm5lY3Rp
b247CitjbGFzcyBHZW5lcmljTGlzdGVuZXI7CisKK3N0cnVjdCBHZW5lcmljQ2VydGlmaWNhdGUg
eworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4gY3JlYXRlRnJvbVBFTShjb25zdCBTdHJpbmcp
OworCisgICAgR2VuZXJpY0NlcnRpZmljYXRlKCk7CisgICAgfkdlbmVyaWNDZXJ0aWZpY2F0ZSgp
OworCisjaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFNTTCkKKyAgICBYNTA5KiB4NTA5IHsgbnVs
bHB0ciB9OworI2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPFNlY0NlcnRpZmlj
YXRlUmVmPiBjZXJ0aWZpY2F0ZTsKKyNlbmRpZgorfTsKKworc3RydWN0IEdlbmVyaWNQcml2YXRl
S2V5IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgZW51bSBjbGFz
cyBLZXlUeXBlIHsgUlNBVHlwZSwgRUNUeXBlIH07CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxHZW5lcmljUHJpdmF0ZUtleT4gY3JlYXRlRnJvbVBFTShjb25zdCBTdHJpbmcsIGNvbnN0IEtl
eVR5cGUsIGNvbnN0IGludCk7CisKKyAgICBHZW5lcmljUHJpdmF0ZUtleSgpOworICAgIH5HZW5l
cmljUHJpdmF0ZUtleSgpOworCisjaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFNTTCkKKyAgICBF
VlBfUEtFWSoga2V5IHsgbnVsbHB0ciB9OworI2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0
YWluUHRyPFNlY0tleVJlZj4ga2V5OworI2VuZGlmCit9OworCisKK2NsYXNzIEdlbmVyaWNDb25u
ZWN0aW9uIHsKKyAgICBmcmllbmQgY2xhc3MgR2VuZXJpY0xpc3RlbmVyOworcHVibGljOgorI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBHZW5lcmljQ29ubmVjdGlvbigpOworI2VsaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgR2VuZXJpY0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90KTsKKyNlbmRpZgor
ICAgIH5HZW5lcmljQ29ubmVjdGlvbigpOworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZW5kKFN0cmluZyYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBudWxs
cHRyKSBjb25zdDsKKyAgICB2b2lkIHJlY2VpdmVCeXRlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisgICAgdm9pZCBjbG9zZSgpOworCitwcml2YXRlOgor
I2lmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShTU0wpCisgICAgYm9vbCBhY2NlcHRTU0xDb25uZWN0
aW9uKEVWUF9QS0VZKiwgWDUwOSopOworCisgICAgU1NMKiBtX3NzbCB7IG51bGxwdHIgfTsKKyAg
ICBTb2NrZXQ6OlNvY2tldCBtX3NvY2tldCB7IFNvY2tldDo6SW52YWxpZFNvY2tldCB9OworI2Vs
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9jb25u
ZWN0aW9uOworICAgIGJvb2wgbV9pbml0aWFsaXplZCB7IGZhbHNlIH07CisjZW5kaWYKK307CisK
KworY2xhc3MgR2VuZXJpY0xpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFByb3Rv
Y29sIDogdWludDhfdCB7IEh0dHAsIEh0dHBzLCBIdHRwc1dpdGhMZWdhY3lUTFMgfTsKKworICAg
IEdlbmVyaWNMaXN0ZW5lcigpOworICAgIH5HZW5lcmljTGlzdGVuZXIoKTsKKworICAgIFByb3Rv
Y29sIHByb3RvY29sKCkgeyByZXR1cm4gbV9wcm90b2NvbDsgfQorICAgIHZvaWQgc2V0UHJvdG9j
b2woUHJvdG9jb2wgcHJvdG9jb2wpIHsgbV9wcm90b2NvbCA9IHByb3RvY29sOyB9CisgICAgdm9p
ZCBzZXRJZGVudGl0eShzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY1ByaXZhdGVLZXk+JiYgcHJpdmF0
ZUtleSwgc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4mJiBjZXJ0aWZpY2F0ZSkK
KyAgICB7CisgICAgICAgIG1fcHJpdmF0ZUtleSA9IFdURk1vdmUocHJpdmF0ZUtleSk7CisgICAg
ICAgIG1fY2VydGlmaWNhdGUgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKTsKKyAgICB9CisKKyAgICBi
b29sIGlzVmFsaWQoKTsKKyAgICB1aW50MTZfdCBwb3J0KCk7CisgICAgdm9pZCBzdGFydCgpOwor
ICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCByZWdpc3RlckhhbmRsZXIoRnVuY3Rpb248dm9p
ZChHZW5lcmljQ29ubmVjdGlvbiYmKT4mJik7CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9p
ZChHZW5lcmljQ29ubmVjdGlvbiYmKT4gbV9jb25uZWN0aW9uSGFuZGxlcjsKKworICAgIFByb3Rv
Y29sIG1fcHJvdG9jb2wgeyBQcm90b2NvbDo6SHR0cCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
ZW5lcmljUHJpdmF0ZUtleT4gbV9wcml2YXRlS2V5IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHZW5lcmljQ2VydGlmaWNhdGU+IG1fY2VydGlmaWNhdGUgeyBudWxscHRyIH07CisK
KyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hMaXN0ZW5pbmcoR2Vu
ZXJpY0xpc3RlbmVyKik7CisKKyAgICBTb2NrZXQ6OlNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7
IFNvY2tldDo6SW52YWxpZFNvY2tldCB9OworICAgIHVpbnQxNl90IG1fcG9ydDsKKyAgICBib29s
IG1fbGlzdGVuaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbGlzdGVuaW5nU3RvcHBlZCB7IGZh
bHNlIH07CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMgUmV0YWluUHRyPFNlY0lk
ZW50aXR5UmVmPiBjcmVhdGVJZGVudGl0eShHZW5lcmljQ2VydGlmaWNhdGUmLCBHZW5lcmljUHJp
dmF0ZUtleSYpOworICAgIFJldGFpblB0cjxud19saXN0ZW5lcl90PiBtX2xpc3RlbmVyOworI2Vu
ZGlmCit9OworCisKK30gLy8gbmFtZXNwYWNkZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uUE9TSVguY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDVmMjhl
NjA0Zjc4ZDQyYmQxOWE2MzMwM2M5YzFlNDVkYWRhNzRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcApAQCAtMCwwICsxLDMy
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2Vu
ZXJpY0Nvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1ZGUgPG9w
dGlvbmFsPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVTU0xMaWJyYXJ5KCkKK3sKKyNpZiBIQVZFKFNTTCkK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3NsSW5pdGlhbGl6ZWQ7CisgICAgc3RkOjpjYWxs
X29uY2Uoc3NsSW5pdGlhbGl6ZWQsIFtdIHsKKyAgICAgICAgU1NMX2xpYnJhcnlfaW5pdCgpOwor
ICAgIH0pOworI2VuZGlmCit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHZW5lcmljQ2VydGlmaWNhdGU+
IEdlbmVyaWNDZXJ0aWZpY2F0ZTo6Y3JlYXRlRnJvbVBFTShjb25zdCBTdHJpbmcgcGVtKQorewor
I2lmIEhBVkUoU1NMKQorICAgIGluaXRpYWxpemVTU0xMaWJyYXJ5KCk7CisgICAgYXV0byBwZW1M
YXRpbiA9IHBlbS5sYXRpbjEoKTsKKyAgICBhdXRvIGNlcnRpZmljYXRlID0gV1RGOjptYWtlVW5p
cXVlPEdlbmVyaWNDZXJ0aWZpY2F0ZT4oKTsKKworICAgIEJJTyogbWVtID0gQklPX25ld19tZW1f
YnVmKHBlbUxhdGluLmRhdGEoKSwgcGVtTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmIChtZW0pIHsK
KyAgICAgICAgY2VydGlmaWNhdGUtPng1MDkgPSBQRU1fcmVhZF9iaW9fWDUwOShtZW0sIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBCSU9fZnJlZShtZW0pOworICAgIH0KKyAg
ICByZXR1cm4gY2VydGlmaWNhdGU7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlm
Cit9CisKK0dlbmVyaWNDZXJ0aWZpY2F0ZTo6R2VuZXJpY0NlcnRpZmljYXRlKCkKK3sKK30KKwor
R2VuZXJpY0NlcnRpZmljYXRlOjp+R2VuZXJpY0NlcnRpZmljYXRlKCkKK3sKKyNpZiBIQVZFKFNT
TCkKKyAgICBpZiAoeDUwOSkgeworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgICAgIHg1
MDkgPSBudWxscHRyOworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJp
Y1ByaXZhdGVLZXk+IEdlbmVyaWNQcml2YXRlS2V5OjpjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmlu
ZyBwZW0sIGNvbnN0IEtleVR5cGUsIGNvbnN0IGludCkKK3sKKyNpZiBIQVZFKFNTTCkKKyAgICBp
bml0aWFsaXplU1NMTGlicmFyeSgpOworICAgIGF1dG8gcHJpdmF0ZUtleSA9ICBXVEY6Om1ha2VV
bmlxdWU8R2VuZXJpY1ByaXZhdGVLZXk+KCk7CisgICAgYXV0byBwZW1MYXRpbiA9IHBlbS5sYXRp
bjEoKTsKKworICAgIEJJTyogbWVtID0gQklPX25ld19tZW1fYnVmKHBlbUxhdGluLmRhdGEoKSwg
cGVtTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgcHJpdmF0ZUtleS0+
a2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkobWVtLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgQklPX2ZyZWUobWVtKTsKKyAgICB9CisgICAgcmV0dXJuIHByaXZhdGVL
ZXk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKK0dlbmVyaWNQcml2
YXRlS2V5OjpHZW5lcmljUHJpdmF0ZUtleSgpCit7Cit9CisKK0dlbmVyaWNQcml2YXRlS2V5Ojp+
R2VuZXJpY1ByaXZhdGVLZXkoKQoreworI2lmIEhBVkUoU1NMKQorICAgIGlmIChrZXkpIHsKKyAg
ICAgICAgRVZQX1BLRVlfZnJlZShrZXkpOworICAgICAgICBrZXkgPSBudWxscHRyOworICAgIH0K
KyNlbmRpZgorfQorCisKK0dlbmVyaWNDb25uZWN0aW9uOjpHZW5lcmljQ29ubmVjdGlvbigpCit7
Cit9CisKK0dlbmVyaWNDb25uZWN0aW9uOjp+R2VuZXJpY0Nvbm5lY3Rpb24oKQoreworfQorCiti
b29sIEdlbmVyaWNDb25uZWN0aW9uOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU29j
a2V0Ojppc1ZhbGlkU29ja2V0KG1fc29ja2V0KTsKK30KKwordm9pZCBHZW5lcmljQ29ubmVjdGlv
bjo6c2VuZChTdHJpbmcmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIGNvbnN0Cit7CisgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldCht
X3NvY2tldCkpIHsKKyAgICAgICAgaW50IHNlbnRUb3RhbCA9IDA7CisgICAgICAgIGNvbnN0IGNo
YXIqIHB0ciA9IG1lc3NhZ2UudXRmOCgpLmRhdGEoKTsKKyAgICAgICAgd2hpbGUgKHNlbnRUb3Rh
bCA8IG1lc3NhZ2UudXRmOCgpLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBpbnQgc2VudDsKKyNp
ZiBIQVZFKFNTTCkKKyAgICAgICAgICAgIGlmIChtX3NzbCkKKyAgICAgICAgICAgICAgICBzZW50
ID0gU1NMX3dyaXRlKG1fc3NsLCBwdHIsIG1lc3NhZ2UudXRmOCgpLmxlbmd0aCgpIC0gc2VudFRv
dGFsKTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgIHNlbnQgPSBT
b2NrZXQ6OndyaXRlKG1fc29ja2V0LCBwdHIsIG1lc3NhZ2UudXRmOCgpLmxlbmd0aCgpIC0gc2Vu
dFRvdGFsKTsKKyAgICAgICAgICAgIGlmIChzZW50IDwgMCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgc2VudFRvdGFsICs9IHNlbnQ7CisgICAgICAgICAgICBwdHIgKz0g
c2VudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBHZW5lcmljQ29ubmVjdGlvbjo6
cmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbnN0IHNpemVfdCBidWZmZXJTaXplID0gNDA5
NjsKKyAgICB1aW50OF90IGJ1ZmZlcltidWZmZXJTaXplXTsKKyAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0OworCisgICAgaW50IGJ5dGVzUmVhZCA9IC0xOworI2lmIEhBVkUoU1NMKQorICAgIGlm
IChtX3NzbCAmJiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9zb2NrZXQpKQorICAgICAgICBieXRl
c1JlYWQgPSBTU0xfcmVhZChtX3NzbCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgZWxz
ZQorI2VuZGlmCisgICAgICAgIGlmIChTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9zb2NrZXQpKQor
ICAgICAgICAgICAgYnl0ZXNSZWFkID0gU29ja2V0OjpyZWFkKG1fc29ja2V0LCBidWZmZXIsIHNp
emVvZihidWZmZXIpKTsKKworICAgIGlmIChieXRlc1JlYWQgPiAwKQorICAgICAgICByZXN1bHQu
YXBwZW5kKGJ1ZmZlciwgYnl0ZXNSZWFkKTsKKyAgICBlbHNlCisgICAgICAgIGNsb3NlKCk7CisK
KyAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUocmVzdWx0KSk7Cit9CisKK3ZvaWQgR2VuZXJpY0Nvbm5lY3Rpb246OmNsb3NlKCkKK3sK
KyAgICBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KG1fc29ja2V0KSkgeworICAgICAgICBTb2Nr
ZXQ6OnNodXRkb3duKG1fc29ja2V0KTsKKyAgICAgICAgU29ja2V0OjpjbG9zZShtX3NvY2tldCk7
CisgICAgICAgIG1fc29ja2V0ID0gU29ja2V0OjpJbnZhbGlkU29ja2V0OworICAgIH0KK30KKwor
I2lmIEhBVkUoU1NMKQorYm9vbCBHZW5lcmljQ29ubmVjdGlvbjo6YWNjZXB0U1NMQ29ubmVjdGlv
bihFVlBfUEtFWSogcHJpdmF0ZUtleSwgWDUwOSogeDUwOSkKK3sKKyAgICBpbml0aWFsaXplU1NM
TGlicmFyeSgpOworCisgICAgU1NMX0NUWCogY29udGV4dCA9IFNTTF9DVFhfbmV3KFRMU19tZXRo
b2QoKSk7CisKKyAgICBpbnQgY2VydEludCwga2V5SW50OworICAgIGlmICh4NTA5KQorICAgICAg
ICBjZXJ0SW50ID0gU1NMX0NUWF91c2VfY2VydGlmaWNhdGUoY29udGV4dCwgeDUwOSk7CisgICAg
aWYgKHByaXZhdGVLZXkpCisgICAgICAgIGtleUludCA9IFNTTF9DVFhfdXNlX1ByaXZhdGVLZXko
Y29udGV4dCwgcHJpdmF0ZUtleSk7CisKKyAgICBtX3NzbCA9IFNTTF9uZXcoY29udGV4dCk7Cisg
ICAgU1NMX3NldF9mZChtX3NzbCwgbV9zb2NrZXQpOworICAgIGJvb2wgYWNjZXB0ZWQgPSBTU0xf
YWNjZXB0KG1fc3NsKSA+IDA7CisgICAgU1NMX0NUWF9mcmVlKGNvbnRleHQpOworCisgICAgcmV0
dXJuIGFjY2VwdGVkOworfQorI2VuZGlmCisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPCBzdGQ6OnBh
aXI8U29ja2V0OjpTb2NrZXQsIHVpbnQxNl90PiA+IGNyZWF0ZUxpc3RlbmluZ1NvY2tldCgpCit7
CisgICAgY29uc3QgaW50IEJhY2tsb2cgPSA4OworICAgIGF1dG8gbGlzdGVuaW5nU29ja2V0ID0g
U29ja2V0Ojpzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmICghU29ja2V0
Ojppc1ZhbGlkU29ja2V0KGxpc3RlbmluZ1NvY2tldCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICAvLyBQb3J0cyA0OTE1Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMu
IFRyeSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0J3MgZnJlZS4KKyAgICBmb3IgKHVpbnQxNl90IHBv
cnQgPSA0OTE1MjsgcG9ydCA8PSA2NTUzNTsgcG9ydCsrKSB7CisgICAgICAgIHN0cnVjdCBzb2Nr
YWRkcl9pbiBuYW1lOworICAgICAgICBtZW1zZXQoJm5hbWUsIDAsIHNpemVvZihuYW1lKSk7Cisg
ICAgICAgIG5hbWUuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG5hbWUuc2luX3BvcnQg
PSBodG9ucyhwb3J0KTsKKyAgICAgICAgbmFtZS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFE
RFJfQU5ZKTsKKyAgICAgICAgaWYgKGJpbmQobGlzdGVuaW5nU29ja2V0LCByZWludGVycHJldF9j
YXN0PHNvY2thZGRyKj4oJm5hbWUpLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgICAgICAgICAg
Ly8gVGhpcyBwb3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4dCBwb3J0LgorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDo6bGlzdGVuKGxpc3RlbmluZ1NvY2tldCwg
QmFja2xvZykgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGxp
c3RlbmluZ1NvY2tldCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxpc3RlbmluZ1NvY2tldCwgcG9y
dCk7IC8vIFN1Y2Nlc3NmdWxseSBzZXQgdXAgbGlzdGVuaW5nIHBvcnQuCisgICAgfQorCisgICAg
Ly8gQ291bGRuJ3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KKyAgICBTb2NrZXQ6OmNsb3NlKGxp
c3RlbmluZ1NvY2tldCk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworR2VuZXJpY0xp
c3RlbmVyOjpHZW5lcmljTGlzdGVuZXIoKQoreworfQorCitHZW5lcmljTGlzdGVuZXI6On5HZW5l
cmljTGlzdGVuZXIoKQoreworICAgIGNhbmNlbCgpOworfQorCitib29sIEdlbmVyaWNMaXN0ZW5l
cjo6aXNWYWxpZCgpCit7CisgICAgcmV0dXJuIFNvY2tldDo6aXNWYWxpZFNvY2tldChtX2xpc3Rl
bmluZ1NvY2tldCk7Cit9CisKK3VpbnQxNl90IEdlbmVyaWNMaXN0ZW5lcjo6cG9ydCgpCit7Cisg
ICAgcmV0dXJuIG1fcG9ydDsKK30KKwordm9pZCBHZW5lcmljTGlzdGVuZXI6OnN0YXJ0KCkKK3sK
KyAgICBpZiAobV9saXN0ZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc29ja2V0
X3BvcnQgPSBjcmVhdGVMaXN0ZW5pbmdTb2NrZXQoKTsKKyAgICBpZiAoIXNvY2tldF9wb3J0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IHNvY2tldF9wb3J0LT5m
aXJzdDsKKyAgICBtX3BvcnQgPSBzb2NrZXRfcG9ydC0+c2Vjb25kOworICAgIG1fbGlzdGVuaW5n
U3RvcHBlZCA9IGZhbHNlOworICAgIG1fbGlzdGVuaW5nID0gdHJ1ZTsKKyAgICBkaXNwYXRjaExp
c3RlbmluZyh0aGlzKTsKK30KKwordm9pZCBHZW5lcmljTGlzdGVuZXI6OmNhbmNlbCgpCit7Cisg
ICAgaWYgKCFtX2xpc3RlbmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5pbmdT
dG9wcGVkID0gZmFsc2U7CisgICAgbV9saXN0ZW5pbmcgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4o
Jm1fbGlzdGVuaW5nU3RvcHBlZCk7Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVyOjpyZWdpc3Rl
ckhhbmRsZXIoRnVuY3Rpb248dm9pZChHZW5lcmljQ29ubmVjdGlvbiYmKT4mJiBoYW5kbGVyKQor
eworICAgIG1fY29ubmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lk
IEdlbmVyaWNMaXN0ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmcoR2VuZXJpY0xpc3RlbmVyKiBzZWxm
KQoreworICAgIGNvbnN0IGZsb2F0IGxpc3RlbmluZ0ludGVydmFsSW5TZWMgPSAwLjE7IC8vIDEw
MCBtaWxsaXNlY29uZHMKKyAgICBjb25zdCBpbnQgdGltZW91dEluVXNlYyA9IDEwMDA7IC8vIDEg
bWlsbGlzZWNvbmQKKyAgICBmZF9zZXQgcmVhZGZkOworICAgIEZEX1pFUk8oJnJlYWRmZCk7Cisg
ICAgRkRfU0VUKHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0LCAmcmVhZGZkKTsKKworICAgIHN0cnVj
dCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgdGltZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQu
dHZfdXNlYyA9IHRpbWVvdXRJblVzZWM7CisKKyAgICBhdXRvIHJjID0gOjpzZWxlY3Qoc2VsZi0+
bV9saXN0ZW5pbmdTb2NrZXQgKyAxLCAmcmVhZGZkLCBudWxscHRyLCBudWxscHRyLCAmdGltZW91
dCk7CisgICAgaWYgKHJjID4gMCkgeworICAgICAgICBHZW5lcmljQ29ubmVjdGlvbiByZXNwb25z
ZUNvbm5lY3Rpb247CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBt
ZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGludCBsZW4gPSBzaXplb2Yo
YWRkcik7CisgICAgICAgIHJlc3BvbnNlQ29ubmVjdGlvbi5tX3NvY2tldCA9IDo6YWNjZXB0KHNl
bGYtPm1fbGlzdGVuaW5nU29ja2V0LCAoc29ja2FkZHIqKSZhZGRyLCAmbGVuKTsKKworICAgICAg
ICBib29sIGFjY2VwdGVkID0gcmVzcG9uc2VDb25uZWN0aW9uLmlzVmFsaWQoKTsKKyNpZiBIQVZF
KFNTTCkKKyAgICAgICAgYm9vbCBzc2xDb25uZWN0aW9uID0gc2VsZi0+bV9wcm90b2NvbCA9PSBH
ZW5lcmljTGlzdGVuZXI6OlByb3RvY29sOjpIdHRwcyAmJiBzZWxmLT5tX3ByaXZhdGVLZXkgJiYg
c2VsZi0+bV9jZXJ0aWZpY2F0ZTsKKyAgICAgICAgaWYgKGFjY2VwdGVkICYmIHNzbENvbm5lY3Rp
b24pCisgICAgICAgICAgICBhY2NlcHRlZCA9IHJlc3BvbnNlQ29ubmVjdGlvbi5hY2NlcHRTU0xD
b25uZWN0aW9uKHNlbGYtPm1fcHJpdmF0ZUtleS0+a2V5LCBzZWxmLT5tX2NlcnRpZmljYXRlLT54
NTA5KTsKKyNlbmRpZgorICAgICAgICBpZiAoYWNjZXB0ZWQgJiYgc2VsZi0+bV9jb25uZWN0aW9u
SGFuZGxlcikKKyAgICAgICAgICAgIHNlbGYtPm1fY29ubmVjdGlvbkhhbmRsZXIoV1RGTW92ZShy
ZXNwb25zZUNvbm5lY3Rpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzcG9uc2VD
b25uZWN0aW9uLmNsb3NlKCk7CisgICAgfQorCisgICAgaWYgKHNlbGYtPm1fbGlzdGVuaW5nICYm
IHNlbGYtPmlzVmFsaWQoKSkgeworICAgICAgICBXVEY6OlJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aEFmdGVyKAorICAgICAgICAgICAgU2Vjb25kcyhsaXN0ZW5pbmdJbnRlcnZhbEluU2VjKSwKKyAg
ICAgICAgICAgIFs9XSgpIHsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaExpc3RlbmluZyhzZWxm
KTsKKyAgICAgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIFNvY2tldDo6Y2xvc2Uo
c2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAgICBzZWxmLT5tX2xpc3RlbmluZ1NvY2tl
dCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICAgICAgc2VsZi0+bV9saXN0ZW5pbmdTdG9w
cGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIwZjAx
ZmRiZmI5ZTA0ZjAzN2MyNjUyZWM0NDdhMWI4ZjA3YjlkNQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VuZXJpY0hU
VFBTZXJ2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitjb25zdCBHZW5lcmljSFRUUFJlc3BvbnNlIFJlc3BvbnNl
Tm90Rm91bmQgPSB7NDA0LCB7IH0sCisgICAgIjxodG1sPjxoZWFkPjx0aXRsZT40MDQgTm90IEZv
dW5kPC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48aDE+RmlsZSBub3QgZm91bmQ8L2gxPjwv
Ym9keT48L2h0bWw+In07CisKK3N0YXRpYyBTdHJpbmcgc3RhdHVzVGV4dCh1bnNpZ25lZCBzdGF0
dXNDb2RlKQoreworICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgeworICAgIGNhc2UgMjAwOgorICAg
ICAgICByZXR1cm4gIk9LIl9zOworICAgIGNhc2UgMzAxOgorICAgICAgICByZXR1cm4gIk1vdmVk
IFBlcm1hbmVudGx5Il9zOworICAgIGNhc2UgNDAxOgorICAgICAgICByZXR1cm4gIlVuYXV0aG9y
aXplZCJfczsKKyAgICBjYXNlIDQwNDoKKyAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiX3M7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0
cmluZyBHZW5lcmljSFRUUFJlc3BvbnNlOjpzZXJpYWxpemUoKSBjb25zdAoreworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoIkhUVFAvMS4xICIpOworICAgIHJl
c3VsdC5hcHBlbmQoU3RyaW5nOjpudW1iZXIoc3RhdHVzQ29kZSkpOworICAgIHJlc3VsdC5hcHBl
bmQoIiAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0YXR1c1RleHQoc3RhdHVzQ29kZSkpOworICAg
IHJlc3VsdC5hcHBlbmQoIlxyXG4iKTsKKworICAgIGZvciAoYXV0byBrZXkgOiBoZWFkZXJGaWVs
ZHMua2V5cygpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiOiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGhlYWRlckZpZWxkcy5nZXQoa2V5
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxyXG4iKTsKKyAgICB9CisKKyAgICByZXN1bHQu
YXBwZW5kKCJDb250ZW50LUxlbmd0aDoiKTsKKyAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKGJvZHkuc2l6ZUluQnl0ZXMoKSkpOworICAgIHJlc3VsdC5hcHBlbmQoIlxyXG5cclxuIik7
CisgICAgcmVzdWx0LmFwcGVuZChib2R5KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Cit9CisKK3ZvaWQgR2VuZXJpY0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZXMoc3RkOjppbml0
aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEdlbmVyaWNIVFRQUmVzcG9uc2U+PiBwYXRo
UmVzcG9uc2VMaXN0KQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHBhdGhSZXNwb25zZUxpc3Qp
CisgICAgICAgIG1fcGF0aFJlc3BvbnNlTWFwLnNldChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7
Cit9CisKK3ZvaWQgR2VuZXJpY0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZUZvckJhc2ljQXV0
aGVudGljYXRpb24oU3RyaW5nIHBhdGgsIFN0cmluZyB1c2VyTmFtZSwgU3RyaW5nIHBhc3N3b3Jk
LCBHZW5lcmljSFRUUFJlc3BvbnNlIHVuYXV0aG9yaXplZFJlc3BvbnNlLCBHZW5lcmljSFRUUFJl
c3BvbnNlIGF1dGhvcml6ZWRSZXNwb25zZSkKK3sKKyAgICBtX3BhdGhSZXNwb25zZU1hcC5zZXQo
cGF0aCwgdW5hdXRob3JpemVkUmVzcG9uc2UpOworICAgIG1fcGF0aFJlc3BvbnNlTWFwRm9yQmFz
aWNBdXRoZW50aWNhdGlvbi5zZXQocGF0aCwgYXV0aG9yaXplZFJlc3BvbnNlKTsKKworICAgIG1f
YmFzaWNVc2VyTmFtZVBhc3N3b3JkID0ge3VzZXJOYW1lLCBwYXNzd29yZH07Cit9CisKK3ZvaWQg
R2VuZXJpY0hUVFBTZXJ2ZXI6OnJlY2VpdmVIVFRQUmVxdWVzdChHZW5lcmljQ29ubmVjdGlvbiYm
IGNvbm5lY3Rpb24sIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9IHsgfSkKK3sKKyAgICBjb25u
ZWN0aW9uLnJlY2VpdmVCeXRlcyhbJiwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpLCBjb25uZWN0
aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKV0gKFZlY3Rvcjx1aW50OF90PiYmIHJlY2VpdmVCdWZm
ZXIpIG11dGFibGUgeworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKChyZWNlaXZlQnVmZmVy
KSk7CisKKyAgICAgICAgYXV0byByZXF1ZXN0ID0gcGFyc2VIVFRQUmVxdWVzdChidWZmZXIpOwor
ICAgICAgICBpZiAoIWNvbm5lY3Rpb24uaXNWYWxpZCgpIHx8IHJlcXVlc3QuY29tcGxldGUpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQocmVxdWVzdCkpCisg
ICAgICAgICAgICAgICAgc2VuZEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVudGljYXRpb24oV1RG
TW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc2VuZEhUVFBSZXNwb25zZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZN
b3ZlKHJlcXVlc3QpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWNlaXZlSFRUUFJl
cXVlc3QoV1RGTW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShidWZmZXIpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c2VuZEhUVFBSZXNwb25zZShHZW5lcmljQ29ubmVj
dGlvbiYmIGNvbm5lY3Rpb24sIEdlbmVyaWNIVFRQUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAg
U3RyaW5nIHJlc3BvbnNlU3RyaW5nOworICAgIGlmIChtX3BhdGhSZXNwb25zZU1hcC5jb250YWlu
cyhyZXF1ZXN0LnBhdGgpKQorICAgICAgICByZXNwb25zZVN0cmluZyA9IG1fcGF0aFJlc3BvbnNl
TWFwLmdldChyZXF1ZXN0LnBhdGgpLnNlcmlhbGl6ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmVz
cG9uc2VTdHJpbmcgPSBSZXNwb25zZU5vdEZvdW5kLnNlcmlhbGl6ZSgpOworCisgICAgY29ubmVj
dGlvbi5zZW5kKHJlc3BvbnNlU3RyaW5nLnV0ZjgoKS5kYXRhKCksIFtjb25uZWN0aW9uID0gV1RG
TW92ZShjb25uZWN0aW9uKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGNvbm5lY3Rpb24uY2xvc2Uo
KTsKKyAgICB9KTsKK30KKworYm9vbCBHZW5lcmljSFRUUFNlcnZlcjo6YmFzaWNBdXRoZW50aWNh
dGlvblJlcXVpcmVkKEdlbmVyaWNIVFRQUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
bV9wYXRoUmVzcG9uc2VNYXAuY29udGFpbnMocmVxdWVzdC5wYXRoKSAmJiBtX3BhdGhSZXNwb25z
ZU1hcEZvckJhc2ljQXV0aGVudGljYXRpb24uY29udGFpbnMocmVxdWVzdC5wYXRoKTsKK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBwYXJzZUF1dGhlbnRpY2F0aW9uQ3JlZGVudGlh
bChTdHJpbmcgdHlwZSwgU3RyaW5nIGhlYWRlckxpbmUpCit7CisgICAgYXV0byBmb3VuZCA9IGhl
YWRlckxpbmUuZmluZCh0eXBlKTsKKyAgICBpZiAoZm91bmQgPT0gbm90Rm91bmQpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHZhbHVlID0gaGVhZGVyTGluZS5zdWJz
dHJpbmcoZm91bmQgKyB0eXBlLmxlbmd0aCgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7Cisg
ICAgd2hpbGUgKGluZGV4IDwgdmFsdWUubGVuZ3RoKCkgJiYgdmFsdWVbaW5kZXhdID09IHUnICcp
CisgICAgICAgIGluZGV4Kys7CisKKyAgICBpZiAoaW5kZXggPT0gdmFsdWUubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5n
KGluZGV4KTsKK30KKwordm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c2VuZEhUVFBSZXNwb25zZUZv
ckJhc2ljQXV0aGVudGljYXRpb24oR2VuZXJpY0Nvbm5lY3Rpb24mJiBjb25uZWN0aW9uLCBHZW5l
cmljSFRUUFJlcXVlc3QmJiByZXF1ZXN0KQoreworICAgIGJvb2wgYXV0aG9yaXplZCA9IGZhbHNl
OworICAgIGlmIChyZXF1ZXN0LmhlYWRlckZpZWxkcy5jb250YWlucygiQXV0aG9yaXphdGlvbiIp
KSB7CisgICAgICAgIGlmIChhdXRvIGNyZWRlbnRpYWwgPSBwYXJzZUF1dGhlbnRpY2F0aW9uQ3Jl
ZGVudGlhbCgiQmFzaWMiLCByZXF1ZXN0LmhlYWRlckZpZWxkcy5nZXQoIkF1dGhvcml6YXRpb24i
KSkpIHsKKyAgICAgICAgICAgIFN0cmluZyB1c2VyUGFzc3dvcmQgPSBtX2Jhc2ljVXNlck5hbWVQ
YXNzd29yZC5maXJzdCArICI6IiArIG1fYmFzaWNVc2VyTmFtZVBhc3N3b3JkLnNlY29uZDsKKyAg
ICAgICAgICAgIGF1dG8gZW5jb2RlZFVzZXJQYXNzd29yZCA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KHVzZXJQYXNzd29yZC51dGY4KCkuZGF0YSgpLCB1c2VyUGFzc3dvcmQubGVuZ3RoKCkpOworCisg
ICAgICAgICAgICBpZiAoY3JlZGVudGlhbCA9PSBlbmNvZGVkVXNlclBhc3N3b3JkKQorICAgICAg
ICAgICAgICAgIGF1dGhvcml6ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIFN0cmlu
ZyByZXNwb25zZVN0cmluZzsKKyAgICBpZiAoYXV0aG9yaXplZCkKKyAgICAgICAgcmVzcG9uc2VT
dHJpbmcgPSBtX3BhdGhSZXNwb25zZU1hcEZvckJhc2ljQXV0aGVudGljYXRpb24uZ2V0KHJlcXVl
c3QucGF0aCkuc2VyaWFsaXplKCk7CisgICAgZWxzZQorICAgICAgICByZXNwb25zZVN0cmluZyA9
IG1fcGF0aFJlc3BvbnNlTWFwLmdldChyZXF1ZXN0LnBhdGgpLnNlcmlhbGl6ZSgpOworCisgICAg
Y29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlU3RyaW5nLnV0ZjgoKS5kYXRhKCksIFtjb25uZWN0aW9u
ID0gV1RGTW92ZShjb25uZWN0aW9uKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGNvbm5lY3Rpb24u
Y2xvc2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c3RhcnQoKQor
eworICAgIG1fbGlzdGVuZXIucmVnaXN0ZXJIYW5kbGVyKFsmXSAoR2VuZXJpY0Nvbm5lY3Rpb24m
JiBjb25uZWN0aW9uKSB7CisgICAgICAgIHRoaXMtPnJlY2VpdmVIVFRQUmVxdWVzdChXVEZNb3Zl
KGNvbm5lY3Rpb24pKTsKKyAgICB9KTsKKworICAgIG1fbGlzdGVuZXIuc3RhcnQoKTsKK30KKwor
dm9pZCBHZW5lcmljSFRUUFNlcnZlcjo6c3RvcCgpCit7CisgICAgbV9saXN0ZW5lci5jYW5jZWwo
KTsKK30KKworR2VuZXJpY0hUVFBSZXF1ZXN0IEdlbmVyaWNIVFRQU2VydmVyOjpwYXJzZUhUVFBS
ZXF1ZXN0KFZlY3Rvcjx1aW50OF90PiYgcmVxdWVzdFZlY3RvcikKK3sKKyAgICBjb25zdCBTdHJp
bmcgc2VwYXJhdG9yKCJcclxuXHJcbiIpOworCisgICAgR2VuZXJpY0hUVFBSZXF1ZXN0IHJlcXVl
c3Q7CisgICAgU3RyaW5nIHJlcXVlc3RTdHJpbmcocmVxdWVzdFZlY3Rvci5kYXRhKCkpOworICAg
IGF1dG8gaGVhZGVyQm9keVNlcGFyYXRvciA9IHJlcXVlc3RTdHJpbmcuZmluZChzZXBhcmF0b3Ip
OworCisgICAgaWYgKGhlYWRlckJvZHlTZXBhcmF0b3IgPT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybiByZXF1ZXN0OworCisgICAgYXV0byBoZWFkZXJTdHJpbmcgPSByZXF1ZXN0U3RyaW5nLnN1
YnN0cmluZygwLCBoZWFkZXJCb2R5U2VwYXJhdG9yKTsKKyAgICBhdXRvIGJvZHlTdHJpbmcgPSBy
ZXF1ZXN0U3RyaW5nLnN1YnN0cmluZyhoZWFkZXJCb2R5U2VwYXJhdG9yICsgc2VwYXJhdG9yLmxl
bmd0aCgpKTsKKworICAgIGF1dG8gaGVhZGVyTGluZXMgPSBoZWFkZXJTdHJpbmcuc3BsaXQoIlxy
XG4iKTsKKyAgICBhdXRvIGZpcnN0RWxlbWVudHMgPSBoZWFkZXJMaW5lc1swXS5zcGxpdCgiICIp
OworICAgIGlmIChmaXJzdEVsZW1lbnRzLnNpemUoKSA+PSAyKQorICAgICAgICByZXF1ZXN0LnBh
dGggPSBmaXJzdEVsZW1lbnRzWzFdOworCisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBoZWFk
ZXJMaW5lcy5zaXplKCk7IGkrKykgeworICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVy
TGluZXNbaV0uc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKGhlYWRlclZhbHVlLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJGaWVsZHMuc2V0KGhlYWRlclZhbHVlWzBdLCBo
ZWFkZXJWYWx1ZVsxXSk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3QuaGVhZGVyRmllbGRzLmNv
bnRhaW5zKCJDb250ZW50LUxlbmd0aCIpKSB7CisgICAgICAgIGludCBjb250ZW50TGVuZ3RoID0g
YXRvaShyZXF1ZXN0LmhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIEFTU0VSVChjb250ZW50TGVuZ3RoID49IDApOworICAgICAgICBpZiAo
Ym9keVN0cmluZy5zaXplSW5CeXRlcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb250ZW50TGVu
Z3RoKSkKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgICAgICByZXF1ZXN0LmJvZHkg
PSBib2R5U3RyaW5nOworICAgIH0KKworICAgIHJlcXVlc3QuY29tcGxldGUgPSB0cnVlOworICAg
IHJldHVybiByZXF1ZXN0OworfQorCit1aW50MTZfdCBHZW5lcmljSFRUUFNlcnZlcjo6cG9ydCgp
Cit7CisgICAgcmV0dXJuIG1fbGlzdGVuZXIucG9ydCgpOworfQorCitVUkwgR2VuZXJpY0hUVFBT
ZXJ2ZXI6OnVybChTdHJpbmcgcGF0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZzsK
KworICAgIHN3aXRjaCAobV9saXN0ZW5lci5wcm90b2NvbCgpKSB7CisgICAgY2FzZSBHZW5lcmlj
TGlzdGVuZXI6OlByb3RvY29sOjpIdHRwczoKKyAgICAgICAgdXJsU3RyaW5nLmFwcGVuZCgiaHR0
cHM6Ly8xMjcuMC4wLjEvIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2VuZXJpY0xpc3Rl
bmVyOjpQcm90b2NvbDo6SHR0cDoKKyAgICBkZWZhdWx0OgorICAgICAgICB1cmxTdHJpbmcuYXBw
ZW5kKCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIH0KKworICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCisgICAgICAgIHVybFN0cmluZy5hcHBlbmQocGF0aCk7CisKKyAgICBVUkwgc2VydmVyVVJM
KFVSTCgpLCB1cmxTdHJpbmcudG9TdHJpbmcoKSk7CisgICAgc2VydmVyVVJMLnNldFBvcnQobV9s
aXN0ZW5lci5wb3J0KCkpOworCisgICAgcmV0dXJuIHNlcnZlclVSTDsKK30KKworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NWJjOWMzYzkwOTlm
OGQ2MzBkNDllZjJmNzdhNWVhMTg1MThjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL0dlbmVyaWNIVFRQU2VydmVyLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR2VuZXJpY0Nvbm5lY3Rpb24uaCIKKwor
I2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworc3RydWN0IEdlbmVyaWNIVFRQ
UmVzcG9uc2UgeworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBib2R5KQor
ICAgICAgICA6IGJvZHkoYm9keSkgeyB9CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcywgU3RyaW5nJiYgYm9keSkKKyAgICAgICAg
OiBoZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMpKQorICAgICAgICAsIGJvZHkoV1RG
TW92ZShib2R5KSkgeyB9CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZSh1bnNpZ25lZCBzdGF0dXND
b2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcyA9IHsgfSwgU3RyaW5n
JiYgYm9keSA9IHsgfSkKKyAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCisgICAgICAg
ICwgaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKKyAgICAgICAgLCBib2R5KFdU
Rk1vdmUoYm9keSkpIHsgfQorCisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShjb25zdCBHZW5lcmlj
SFRUUFJlc3BvbnNlJikgPSBkZWZhdWx0OworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UoR2VuZXJp
Y0hUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZSgpID0g
ZGVmYXVsdDsKKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oY29uc3QgR2VuZXJp
Y0hUVFBSZXNwb25zZSYpID0gZGVmYXVsdDsKKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlJiBvcGVy
YXRvcj0oR2VuZXJpY0hUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7CisKKyAgICB1bnNpZ25lZCBz
dGF0dXNDb2RlIHsgMjAwIH07CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmll
bGRzOworICAgIFN0cmluZyBib2R5OworCisgICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNvbnN0Owor
fTsKKworc3RydWN0IEdlbmVyaWNIVFRQUmVxdWVzdCB7CisgICAgU3RyaW5nIHBhdGg7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmllbGRzOworICAgIFN0cmluZyBib2R5Owor
ICAgIGJvb2wgY29tcGxldGUgeyBmYWxzZSB9OworfTsKKworY2xhc3MgR2VuZXJpY0hUVFBTZXJ2
ZXIgeworcHVibGljOgorICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB1
aW50MTZfdCBwb3J0KCk7CisgICAgVVJMIHVybChTdHJpbmcgcGF0aCA9IHsgfSk7CisKKyAgICB2
b2lkIHNldFByb3RvY29sKEdlbmVyaWNMaXN0ZW5lcjo6UHJvdG9jb2wgcHJvdG9jb2wpCisgICAg
eworICAgICAgICBtX2xpc3RlbmVyLnNldFByb3RvY29sKHByb3RvY29sKTsKKyAgICB9CisgICAg
dm9pZCBzZXRJZGVudGl0eShzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY1ByaXZhdGVLZXk+JiYgcHJp
dmF0ZUtleSwgc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4mJiBjZXJ0aWZpY2F0
ZSkKKyAgICB7CisgICAgICAgIG1fbGlzdGVuZXIuc2V0SWRlbnRpdHkoV1RGTW92ZShwcml2YXRl
S2V5KSwgV1RGTW92ZShjZXJ0aWZpY2F0ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0SFRUUFJl
c3BvbnNlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgR2VuZXJpY0hU
VFBSZXNwb25zZT4+KTsKKyAgICB2b2lkIHNldEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVudGlj
YXRpb24oU3RyaW5nIHBhdGgsIFN0cmluZyB1c2VyTmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBHZW5l
cmljSFRUUFJlc3BvbnNlIHVuYXV0aG9yaXplZFJlc3BvbnNlLCBHZW5lcmljSFRUUFJlc3BvbnNl
IGF1dGhvcml6ZWRSZXNwb25zZSk7Citwcml2YXRlOgorICAgIHN0YXRpYyBHZW5lcmljSFRUUFJl
cXVlc3QgcGFyc2VIVFRQUmVxdWVzdChWZWN0b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIHJlY2Vp
dmVIVFRQUmVxdWVzdChHZW5lcmljQ29ubmVjdGlvbiYmLCBWZWN0b3I8dWludDhfdD4mJik7Cisg
ICAgdm9pZCBzZW5kSFRUUFJlc3BvbnNlKEdlbmVyaWNDb25uZWN0aW9uJiYsIEdlbmVyaWNIVFRQ
UmVxdWVzdCYmKTsKKworICAgIGJvb2wgYmFzaWNBdXRoZW50aWNhdGlvblJlcXVpcmVkKEdlbmVy
aWNIVFRQUmVxdWVzdCYpOworICAgIHZvaWQgc2VuZEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVu
dGljYXRpb24oR2VuZXJpY0Nvbm5lY3Rpb24mJiwgR2VuZXJpY0hUVFBSZXF1ZXN0JiYpOworCisg
ICAgR2VuZXJpY0xpc3RlbmVyIG1fbGlzdGVuZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdlbmVy
aWNIVFRQUmVzcG9uc2U+IG1fcGF0aFJlc3BvbnNlTWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBH
ZW5lcmljSFRUUFJlc3BvbnNlPiBtX3BhdGhSZXNwb25zZU1hcEZvckJhc2ljQXV0aGVudGljYXRp
b247CisgICAgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBtX2Jhc2ljVXNlck5hbWVQYXNzd29y
ZDsKK307CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2Nr
ZXQuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
YzU2MmRiYjIyNmY5OTU5NjlkNmU5YzZhYTRhYWZlOTczNmEwMWZhCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNwcmFnbWEgb25jZQorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRl
IDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNl
IFNvY2tldCB7CisKKyNpZiBPUyhXSU5ET1dTKQordXNpbmcgU29ja2V0ID0gU09DS0VUOwordXNp
bmcgc29ja2xlbl90ID0gaW50OworY29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gSU5W
QUxJRF9TT0NLRVQ7CisjZWxzZQordXNpbmcgU29ja2V0ID0gaW50OworI2RlZmluZSBTT0NLRVRf
RVJST1IgLTEKK2NvbnN0ZXhwciBTb2NrZXQgSW52YWxpZFNvY2tldCA9IFNPQ0tFVF9FUlJPUjsK
KyNlbmRpZgorCitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9j
b2wpOworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCk7CitTb2NrZXQgYWNjZXB0KFNvY2tldCk7
CitpbnQgc2h1dGRvd24oU29ja2V0KTsKK2ludCBjbG9zZShTb2NrZXQpOworaW50IHJlYWQoU29j
a2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CitpbnQgd3JpdGUoU29ja2V0LCBjb25z
dCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CisKK30gLy8gbmFtZXNwYWNlIFNvY2tldAor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lYLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1Tb2NrZXRQT1NJWC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM5YTQ1ZWJjOTA3N2Q0YzNjYjg2MmYzN2Vj
OGQ0MWRiZWIxNTY3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1Tb2NrZXRQT1NJWC5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisKK1NvY2tldCBzb2NrZXQo
aW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKyAgICByZXR1cm4gOjpzb2Nr
ZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9CisKK2Jvb2wgaXNWYWxpZFNvY2tldChTb2Nr
ZXQgc29ja2V0KQoreworICAgIHJldHVybiBzb2NrZXQgPj0gMDsKK30KKworU29ja2V0IGFjY2Vw
dChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OmFjY2VwdChzb2NrZXQsIG51bGxwdHIs
IG51bGxwdHIpOworfQorCitpbnQgc2h1dGRvd24oU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1
cm4gOjpzaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7Cit9CisKK2ludCBjbG9zZShTb2NrZXQg
c29ja2V0KQoreworICAgIHJldHVybiA6OmNsb3NlKHNvY2tldCk7Cit9CisKK2ludCByZWFkKFNv
Y2tldCBzb2NrZXQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6
OnJlYWQoc29ja2V0LCBidWZmZXIsIGNvdW50KTsKK30KKworCitpbnQgd3JpdGUoU29ja2V0IHNv
Y2tldCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6
d3JpdGUoc29ja2V0LCBidWZmZXIsIGNvdW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgU29ja2V0
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdp
bi5jbWFrZQppbmRleCA2N2U1Y2Y0MjQzODNhNzE0M2IxMjU3NTJkNzNiMzNkNzdkZjZjNzcyLi44
YjY2MzI5MjBlODdjYjE2MDA1ZjIxNWQwNGNkYTdlM2FjODBlZTcwIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEyMyw3ICsxMjMsMTAgQEAgaWYgKEVOQUJMRV9XRUJL
SVQpCiAKICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKICAgICAgICAgJHt0ZXN0
X21haW5fU09VUkNFU30KKyAgICAgICAgR2VuZXJpY0Nvbm5lY3Rpb25QT1NJWC5jcHAKKyAgICAg
ICAgR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwCiAKKyAgICAgICAgd2luL1BsYXRmb3JtU29ja2V0V2lu
LmNwcAogICAgICAgICB3aW4vUGxhdGZvcm1VdGlsaXRpZXNXaW4uY3BwCiAgICAgICAgIHdpbi9Q
bGF0Zm9ybVdlYlZpZXdXaW4uY3BwCiAgICAgICAgIHdpbi9VdGlsaXRpZXNXaW4uY3BwCkBAIC0x
MzEsNiArMTM0LDggQEAgaWYgKEVOQUJMRV9XRUJLSVQpCiAKICAgICBpZiAoJHtXVEZfUExBVEZP
Uk1fV0lOX0NBSVJPfSkKICAgICAgICAgbGlzdChBUFBFTkQgVGVzdFdlYktpdF9TT1VSQ0VTCisg
ICAgICAgICAgICBUZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAKKwogICAgICAgICAgICAgVGVz
dHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVzLmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzNiYjA2NTQwYjFhNGU0ODk2ZjNlZDM4NmExMGQ4
ZmYwZDJkYTM2Yi4uMjEzY2U5NzE5ZjViMzczZWVjMDI4YjAxNmI1YTlkNzRjZDUzNjBmMSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk1LDYgKzk1LDggQEAKIAkJMTFDMjU5OEQyMUZBNjMy
NDAwNEM5RTIzIC8qIGFzeW5jLXNjcmlwdC1sb2FkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTFDMjU5OEMyMUZBNjE4RDAwNEM5RTIz
IC8qIGFzeW5jLXNjcmlwdC1sb2FkLmh0bWwgKi87IH07CiAJCTE0M0RERTk4MjBDOTAxOEIwMDdG
NzZGQSAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzRGNTVEMDIwNEQ0NzFDMDAyOTQ4QzYgLyogU2VjdXJpdHku
ZnJhbWV3b3JrICovOyB9OwogCQkxNENDNDJFNjI0QjhEOEZBMDBFNjRGNDggLyogSlNSdW5Mb29w
VGltZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NENDNDJFNTI0QjhEOEZBMDBFNjRGNDggLyogSlNSdW5Mb29wVGltZXIubW0gKi87IH07CisJCTE2
NUNCMjBGMjZBMUI2NUYwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjVDQjIwRTI2QTFCNjVGMDA5
RDhBQjEgLyogR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwICovOyB9OworCQkxNjVDQjIxMjI2QTFCNzY3
MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2NUNCMjExMjZBMUI3NjcwMDlEOEFCMSAvKiBH
ZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tICovOyB9OwogCQkxQTAyQzg3MDEyNUQ0Q0ZEMDBFM0Y0
QkQgLyogZmluZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi87IH07
CiAJCTFBMzUyNEFFMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTM1MjRBQzFENjNBNEZCMDAzMTcyOUIg
LyogU2NvcGUuY3BwICovOyB9OwogCQkxQTRGODFDRjFCREZGRDUzMDA0RTY3MkUgLyogUmVtb3Rl
T2JqZWN0UmVnaXN0cnlQbHVnSW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTRGODFDRDFCREZGRDUzMDA0RTY3MkUgLyogUmVtb3RlT2JqZWN0UmVn
aXN0cnlQbHVnSW4ubW0gKi87IH07CkBAIC0xODUzLDYgKzE4NTUsMTAgQEAKIAkJMTQ0RDQwRUMy
MjFCNDZBNzAwNEI0NzRGIC8qIFVVSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVVVJRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Q0M0MkU1
MjRCOEQ4RkEwMEU2NEY0OCAvKiBKU1J1bkxvb3BUaW1lci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNjVDQjIwRDI2QTFCNjFFMDA5RDhBQjEgLyogR2VuZXJpY0hUVFBTZXJ2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY0hUVFBTZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTY1Q0IyMEUyNkExQjY1RjAwOUQ4QUIxIC8qIEdl
bmVyaWNIVFRQU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdlbmVyaWNIVFRQU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTY1
Q0IyMTAyNkExQjZGNjAwOUQ4QUIxIC8qIEdlbmVyaWNDb25uZWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE2NUNCMjExMjZBMUI3NjcwMDlEOEFCMSAvKiBHZW5lcmljQ29ubmVj
dGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gR2Vu
ZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbTsgcGF0aCA9IGNvY29hL0dlbmVyaWNDb25uZWN0aW9uQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUz
RjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAv
KiBGaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTM1MjRBOTFENjI3QkQ0MDAzMTcyOUIg
LyogRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbGV0ZWRBZGRy
ZXNzT2ZPcGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI2NSw2ICsz
MjcxLDkgQEAKIAkJCQlCQzEzMUE5RTExNzEzMTdDMDBCNjk3MjcgLyogY29uZmlnLmggKi8sCiAJ
CQkJN0M2QkJEOEIxOUNFQTYzMDAwQzFGNUUwIC8qIENvdW50ZXJzLmNwcCAqLywKIAkJCQk3QzZC
QkQ4QTE5Q0VBNTQzMDBDMUY1RTAgLyogQ291bnRlcnMuaCAqLywKKwkJCQkxNjVDQjIxMDI2QTFC
NkY2MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb24uaCAqLywKKwkJCQkxNjVDQjIwRTI2QTFC
NjVGMDA5RDhBQjEgLyogR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwICovLAorCQkJCTE2NUNCMjBEMjZB
MUI2MUUwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5oICovLAogCQkJCUMwQURCRTdBMTJG
Q0E0RDAwMEQyQzEyOSAvKiBKYXZhU2NyaXB0VGVzdC5jcHAgKi8sCiAJCQkJQzBBREJFN0IxMkZD
QTREMDAwRDJDMTI5IC8qIEphdmFTY3JpcHRUZXN0LmggKi8sCiAJCQkJQkM1NzVCQkYxMjZGNTc1
MjAwNkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCAqLywKQEAgLTMzMDQsNiArMzMxMyw3
IEBACiAJCQkJRjQ2MTI4QjQyMTFDODYxQTAwRDlGQURCIC8qIERyYWdBbmREcm9wU2ltdWxhdG9y
LmggKi8sCiAJCQkJRjQ0RDA2NDgxRjM5NjJFMzAwMUEwRTI5IC8qIEVkaXRpbmdUZXN0SGFybmVz
cy5oICovLAogCQkJCUY0NEQwNjQ5MUYzOTYyRTMwMDFBMEUyOSAvKiBFZGl0aW5nVGVzdEhhcm5l
c3MubW0gKi8sCisJCQkJMTY1Q0IyMTEyNkExQjc2NzAwOUQ4QUIxIC8qIEdlbmVyaWNDb25uZWN0
aW9uQ29jb2EubW0gKi8sCiAJCQkJNUM3QzI0RkIyMzdDOTcyMzAwNTk5QzkxIC8qIEhUVFBTZXJ2
ZXIuaCAqLywKIAkJCQk1QzdDMjRGQTIzN0M5NzIzMDA1OTlDOTEgLyogSFRUUFNlcnZlci5tbSAq
LywKIAkJCQlGNDRBNTMwRDIxQjg5NzY5MDBEQkI5OUMgLyogSW5zdGFuY2VNZXRob2RTd2l6emxl
ci5oICovLApAQCAtNTU0Niw2ICs1NTU2LDggQEAKIAkJCQlDRERDN0M2OTI1RkZGNkQwMDAyMjQy
NzggLyogRnVsbHNjcmVlblJlbW92ZU5vZGVCZWZvcmVFbnRlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEQkZDQzQ1MUE5RkY0NTMwMEE3QjY5MSAvKiBGdWxsc2NyZWVuWm9vbUluaXRpYWxGcmFt
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzREI3OTY5MUVGNjNCM0MwMEJGQTVFNSAvKiBGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNjVDQjIxMjI2QTFCNzY3MDA5RDhBQjEgLyog
R2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTE2NUNCMjBGMjZB
MUI2NUYwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0VGODFBNDExQUU2MDA0NDdDNEMgLyogR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjMxRUZGRjYxRTdCNUU4RDAwRDJFQkI4IC8qIEdlb2xvY2F0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFRTExQTQxMUE5QTAwNDQ3QzRDIC8qIEdldEJhY2tpbmdTY2Fs
ZUZhY3Rvci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9IVFRQU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTk4ZTViNWMzNmEyM2JjYjZhZWIz
ZjNiNjkyZjJlOTc3YjgyYmYzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisKKyNpbmNsdWRlICJHZW5lcmljQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIkdlbmVyaWNIVFRQU2VydmVyLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlIDxX
ZWJLaXQvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0F1
dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NlcnRp
ZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLQ3JlZGVudGlhbC5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1Byb3RlY3Rp
b25TcGFjZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShDVVJM
KQorI2lmIEhBVkUoU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dL
UHJvdGVjdGlvblNwYWNlQ3VybC5oPgorI2VuZGlmCisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgeworI2lmIFBMQVRGT1JNKFdJTikKKworc3RhdGljIHN0ZDo6d3N0cmluZyBjcmVhdGVTdHJp
bmcoV0tTdHJpbmdSZWYgd2tTdHJpbmcpCit7CisgICAgc2l6ZV90IG1heFNpemUgPSBXS1N0cmlu
Z0dldExlbmd0aCh3a1N0cmluZyk7CisKKyAgICBzdGQ6OnZlY3RvcjxXS0NoYXI+IHdrQ2hhckJ1
ZmZlcihtYXhTaXplKTsKKyAgICBzaXplX3QgYWN0dWFsTGVuZ3RoID0gV0tTdHJpbmdHZXRDaGFy
YWN0ZXJzKHdrU3RyaW5nLCB3a0NoYXJCdWZmZXIuZGF0YSgpLCBtYXhTaXplKTsKKyAgICByZXR1
cm4gc3RkOjp3c3RyaW5nKHdrQ2hhckJ1ZmZlci5kYXRhKCksIGFjdHVhbExlbmd0aCk7Cit9CisK
K2NsYXNzIENlcnRpZmljYXRlQ2hhaW4geworcHVibGljOgorICAgIHZvaWQgY2xlYXIoKQorICAg
IHsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpbnQgc2l6
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZXJ0aWZpY2F0ZXMuc2l6ZSgpOworICAgIH0K
KworICAgIHZvaWQgcHVzaF9iYWNrKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlRGF0
YSwgc3RkOjp2ZWN0b3I8dWludDhfdD4gcHVibGljS2V5KQorICAgIHsKKyAgICAgICAgbV9jZXJ0
aWZpY2F0ZXMucHVzaF9iYWNrKGNlcnRpZmljYXRlRGF0YSk7CisgICAgICAgIG1fcHVibGljS2V5
cy5wdXNoX2JhY2socHVibGljS2V5KTsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90
PiBnZXRDZXJ0aWZpY2F0ZShpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZXJ0
aWZpY2F0ZXNbaW5kZXhdOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGdldFB1
YmxpY0tleShpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wdWJsaWNLZXlzW2lu
ZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8dWlu
dDhfdD4+IG1fY2VydGlmaWNhdGVzOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPHVpbnQ4
X3Q+PiBtX3B1YmxpY0tleXM7Cit9OworCitzdGF0aWMgc3RkOjp2ZWN0b3I8dWludDhfdD4gZ2V0
UHVibGljS2V5KHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlKQoreworI2lmIEhBVkUo
U1NMKQorICAgIEJJTyogbWVtID0gQklPX25ld19tZW1fYnVmKGNlcnRpZmljYXRlLmRhdGEoKSwg
Y2VydGlmaWNhdGUuc2l6ZSgpKTsKKyAgICBpZiAoIW1lbSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFg1MDkqIHg1MDkgPSBQRU1fcmVhZF9iaW9fWDUwOShtZW0sIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIpOworICAgIEVWUF9QS0VZKiBwdWJsaWNLZXkgPSBYNTA5X2dldF9wdWJrZXko
eDUwOSk7CisgICAgQklPKiBwZW1CSU8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBQRU1f
d3JpdGVfYmlvX1BVQktFWShwZW1CSU8sIHB1YmxpY0tleSk7CisgICAgQklPX2ZsdXNoKHBlbUJJ
Tyk7CisKKyAgICBCVUZfTUVNKiBidWZtZW07CisgICAgQklPX2dldF9tZW1fcHRyKHBlbUJJTywg
JmJ1Zm1lbSk7CisKKyAgICByZXR1cm4gc3RkOjp2ZWN0b3I8dWludDhfdD4oYnVmbWVtLT5kYXRh
LCBidWZtZW0tPmRhdGEgKyBidWZtZW0tPmxlbmd0aCk7CisjZWxzZQorICAgIHJldHVybiB7IH07
CisjZW5kaWYKK30KKworY2xhc3MgU2VydmVyVGVzdGVyIHsKK3B1YmxpYzoKKyAgICBTZXJ2ZXJU
ZXN0ZXIoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVh
dGVXaXRoQ29uZmlndXJhdGlvbihudWxscHRyKSk7CisgICAgICAgIG1fd2ViVmlldyA9IG1ha2VV
bmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFBsYXRmb3JtV2ViVmlldz4obV9jb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVu
dDsKKyAgICAgICAgbWVtc2V0KCZuYXZpZ2F0aW9uQ2xpZW50LCAwLCBzaXplb2YobmF2aWdhdGlv
bkNsaWVudCkpOworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmJhc2UudmVyc2lvbiA9IDA7Cisg
ICAgICAgIG5hdmlnYXRpb25DbGllbnQuYmFzZS5jbGllbnRJbmZvID0gdGhpczsKKyAgICAgICAg
bmF2aWdhdGlvbkNsaWVudC5kaWRGaW5pc2hOYXZpZ2F0aW9uID0gW10gKFdLUGFnZVJlZiwgV0tO
YXZpZ2F0aW9uUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAg
ICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgdGVzdGVyLT5tX2Rp
ZEZhaWxMb2FkID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmluaXNoTG9hZCA9
IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5kaWRGYWlsTmF2
aWdhdGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tFcnJvclJlZiBlcnJv
clJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICBT
ZXJ2ZXJUZXN0ZXIqIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nh
c3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKworICAgICAgICAgICAgdGVzdGVyLT5tX2Vycm9yQ29k
ZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3JSZWYpOworICAgICAgICAgICAgdGVzdGVyLT5t
X2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24gPSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0Vycm9y
Q29weUxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yUmVmKSkuZ2V0KCkpOworICAgICAgICAgICAg
dGVzdGVyLT5tX2RpZEZhaWxMb2FkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50
LmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBbXSAoV0tQYWdlUmVmLCBXS05hdmlnYXRp
b25SZWYsIFdLRXJyb3JSZWYgZXJyb3JSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykgeworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxT
ZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAg
ICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShlcnJvclJlZik7Cisg
ICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0
cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9jYWxpemVkRGVzY3JpcHRpb24oZXJyb3JSZWYpKS5n
ZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFpbExvYWQgPSB0cnVlOworICAgICAg
ICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0cnVlOworICAgICAgICB9OworCisgICAg
ICAgIG5hdmlnYXRpb25DbGllbnQuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
W10gKFdLUGFnZVJlZiwgV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIGF1dG8gcHJvdGVjdGlvblNwYWNl
ID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldFByb3RlY3Rpb25TcGFjZShjaGFsbGVuZ2Up
OworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkxpc3RlbmVyID0gV0tBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoY2hhbGxlbmdlKTsKKyAgICAgICAgICAgIGF1dG8g
YXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9u
U2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisKKyAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGlv
blNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRy
dXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICAgICAgICAgIFNlcnZlclRlc3Rlciog
dGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpOworICAgICAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRSZWNlaXZlU2VydmVyVHJ1
c3RFdmFsdWF0aW9uUmVxdWVzdCA9IHRydWU7CisjaWYgVVNFKENVUkwpCisgICAgICAgICAgICAg
ICAgYXV0byBjZXJ0aWZpY2F0ZUluZm8gPSBhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUNl
cnRpZmljYXRlSW5mbyhwcm90ZWN0aW9uU3BhY2UpKTsKKyAgICAgICAgICAgICAgICB0ZXN0ZXIt
Pm1fdmVyaWZpY2F0aW9uRXJyb3IgPSBXS0NlcnRpZmljYXRlSW5mb0dldFZlcmlmaWNhdGlvbkVy
cm9yKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX3Zl
cmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gPSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0NlcnRp
ZmljYXRlSW5mb0NvcHlWZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uKGNlcnRpZmljYXRlSW5m
by5nZXQoKSkpLmdldCgpKTsKKworICAgICAgICAgICAgICAgIHRlc3Rlci0+bV9jZXJ0aWZpY2F0
ZUNoYWluLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBXS0Nl
cnRpZmljYXRlSW5mb0dldENlcnRpZmljYXRlQ2hhaW5TaXplKGNlcnRpZmljYXRlSW5mby5nZXQo
KSk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRvcHRX
SyhXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0SW5kZXgoY2VydGlmaWNhdGVJbmZv
LmdldCgpLCBpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IFdL
RGF0YUdldEJ5dGVzKGNlcnRpZmljYXRlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVEYXRhKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KHB0
ciwgcHRyICsgV0tEYXRhR2V0U2l6ZShjZXJ0aWZpY2F0ZS5nZXQoKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdGVyLT5tX2NlcnRpZmljYXRlQ2hhaW4ucHVzaF9iYWNrKGNlcnRpZmljYXRl
RGF0YSwgZ2V0UHVibGljS2V5KGNlcnRpZmljYXRlRGF0YSkpOworICAgICAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXItPm1faWdub3JlQ2VydEVycm9yKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJhY2NlcHQgc2VydmVyIHRydXN0IikpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiIikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3JlZGVudGlhbCA9IGFkb3B0
V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dL
Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAgICAgICAgICBX
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0
ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50
aWFsKGRlY2lzaW9uTGlzdGVuZXIsIG51bGxwdHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChh
dXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZUhUVFBCYXNpYykgeworICAgICAgICAgICAgICAgIGlmIChXS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlR2V0UHJldmlvdXNGYWlsdXJlQ291bnQoY2hhbGxlbmdlKSkKKyAgICAgICAgICAgICAg
ICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJDYW5jZWwoZGVjaXNpb25MaXN0
ZW5lcik7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNlcnZl
clRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2
b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHVzZXJuYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0ZXItPm1fdXNlcm5hbWUu
Y19zdHIoKSkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0ZXItPm1fcGFzc3dvcmQuY19zdHIoKSkp
OworICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVk
ZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlh
bFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAgICAgICAgICBXS0F1dGhlbnRp
Y2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgd2tD
cmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgV0tQYWdlUG9saWN5Q2xpZW50VjEgcGFnZVBvbGljeUNsaWVudDsK
KyAgICAgICAgbWVtc2V0KCZwYWdlUG9saWN5Q2xpZW50LCAwLCBzaXplb2YoV0tQYWdlUG9saWN5
Q2xpZW50VjEpKTsKKyAgICAgICAgcGFnZVBvbGljeUNsaWVudC5iYXNlLnZlcnNpb24gPSAxOwor
ICAgICAgICBwYWdlUG9saWN5Q2xpZW50LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7CisgICAgICAg
IHBhZ2VQb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UgPSBbXSAoV0tQYWdlUmVm
IHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFdLVVJM
UmVxdWVzdFJlZiByZXF1ZXN0LCBib29sIGNhblNob3dNSU1FVHlwZSwgV0tGcmFtZVBvbGljeUxp
c3RlbmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pIHsKKyAgICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8
U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAg
ICAgdGVzdGVyLT5tX3N0YXR1c0NvZGUgPSBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVz
cG9uc2UpOworICAgICAgICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsK
KyAgICAgICAgfTsKKworICAgICAgICBXS1BhZ2VTdGF0ZUNsaWVudFYwIHBhZ2VTdGF0ZUNsaWVu
dDsKKyAgICAgICAgbWVtc2V0KCZwYWdlU3RhdGVDbGllbnQsIDAsIHNpemVvZihwYWdlU3RhdGVD
bGllbnQpKTsKKyAgICAgICAgcGFnZVN0YXRlQ2xpZW50LmJhc2UudmVyc2lvbiA9IDA7CisgICAg
ICAgIHBhZ2VTdGF0ZUNsaWVudC5iYXNlLmNsaWVudEluZm8gPSB0aGlzOworICAgICAgICBwYWdl
U3RhdGVDbGllbnQuZGlkQ2hhbmdlVGl0bGUgPSBbXSAoY29uc3Qgdm9pZCogY2xpZW50SW5mbykg
eworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJU
ZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0
ZXItPm1fZGlkQ2hhbmdlVGl0bGUgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFdLUGFn
ZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KG1fd2ViVmlldy0+cGFnZSgpLCAmbmF2aWdhdGlvbkNs
aWVudC5iYXNlKTsKKyAgICAgICAgV0tQYWdlU2V0UGFnZVBvbGljeUNsaWVudChtX3dlYlZpZXct
PnBhZ2UoKSwgKFdLUGFnZVBvbGljeUNsaWVudEJhc2UqKSZwYWdlUG9saWN5Q2xpZW50KTsKKyAg
ICAgICAgV0tQYWdlU2V0UGFnZVN0YXRlQ2xpZW50KG1fd2ViVmlldy0+cGFnZSgpLCAoV0tQYWdl
U3RhdGVDbGllbnRCYXNlKikmcGFnZVN0YXRlQ2xpZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFVzZXJuYW1lUGFzc3dvcmQoc3RkOjpzdHJpbmcgdXNlcm5hbWUsIHN0ZDo6c3RyaW5nIHBhc3N3
b3JkKQorICAgIHsKKyAgICAgICAgbV91c2VybmFtZSA9IHVzZXJuYW1lOworICAgICAgICBtX3Bh
c3N3b3JkID0gcGFzc3dvcmQ7CisgICAgfQorCisgICAgYm9vbCBsb2FkKFN0cmluZyB1cmwsIGJv
b2wgaWdub3JlQ2VydEVycm9yID0gZmFsc2UpCisgICAgeworICAgICAgICBtX2lnbm9yZUNlcnRF
cnJvciA9IGlnbm9yZUNlcnRFcnJvcjsKKyAgICAgICAgbV9kaWRGaW5pc2hMb2FkID0gZmFsc2U7
CisgICAgICAgIG1fZGlkRmFpbExvYWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaWRSZWNlaXZlU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCA9IGZhbHNlOworICAgICAgICBtX3N0YXR1c0NvZGUg
PSAwOworICAgICAgICBtX2Vycm9yQ29kZSA9IDA7CisgICAgICAgIG1fdmVyaWZpY2F0aW9uRXJy
b3IgPSAwOworICAgICAgICBtX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24uY2xlYXIoKTsKKyAg
ICAgICAgbV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uLmNsZWFyKCk7CisgICAgICAgIG1f
Y2VydGlmaWNhdGVDaGFpbi5jbGVhcigpOworCisgICAgICAgIGF1dG8gdXJsUmVmID0gYWRvcHRX
SyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmwudXRmOCgpLmRhdGEoKSkpOworICAgICAg
ICBXS1BhZ2VMb2FkVVJMKG1fd2ViVmlldy0+cGFnZSgpLCB1cmxSZWYuZ2V0KCkpOworICAgICAg
ICBVdGlsOjpydW4oJm1fZGlkRmluaXNoTG9hZCk7CisKKyAgICAgICAgcmV0dXJuICFtX2RpZEZh
aWxMb2FkOworICAgIH0KKworICAgIGJvb2wgZGlkRmFpbExvYWQoKSB7IHJldHVybiBtX2RpZEZh
aWxMb2FkOyB9CisgICAgYm9vbCBkaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dCgpIHsgcmV0dXJuIG1fZGlkUmVjZWl2ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3Q7IH0K
KyAgICBpbnQgZXJyb3JDb2RlKCkgeyByZXR1cm4gbV9lcnJvckNvZGU7IH0KKyAgICBpbnQgdmVy
aWZpY2F0aW9uRXJyb3IoKSB7IHJldHVybiBtX3ZlcmlmaWNhdGlvbkVycm9yOyB9CisgICAgc3Rk
Ojp3c3RyaW5nIGxvY2FsaXplZEVycm9yRGVzY3JpcHRpb24oKSB7IHJldHVybiBtX2xvY2FsaXpl
ZEVycm9yRGVzY3JpcHRpb247IH0KKyAgICBzdGQ6OndzdHJpbmcgdmVyaWZpY2F0aW9uRXJyb3JE
ZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbjsgfQor
CisgICAgaW50IHN0YXR1c0NvZGUoKSB7IHJldHVybiBtX3N0YXR1c0NvZGU7IH0KKyAgICBDZXJ0
aWZpY2F0ZUNoYWluIGdldENlcnRpZmljYXRlQ2hhaW4oKSB7IHJldHVybiBtX2NlcnRpZmljYXRl
Q2hhaW47IH0KKworICAgIHN0ZDo6d3N0cmluZyB0aXRsZSgpCisgICAgeworICAgICAgICBpZiAo
IW1fZGlkRmluaXNoTG9hZCB8fCBtX2RpZEZhaWxMb2FkKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6d3N0cmluZygpOworCisgICAgICAgIFV0aWw6OnJ1bigmbV9kaWRDaGFuZ2VUaXRsZSk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0ZyYW1lQ29weVRpdGxlKFdLUGFn
ZUdldE1haW5GcmFtZShtX3dlYlZpZXctPnBhZ2UoKSkpKS5nZXQoKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgbV9pZ25vcmVDZXJ0RXJyb3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV9k
aWRGaW5pc2hMb2FkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGlkRmFpbExvYWQgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2RpZENoYW5nZVRpdGxlIHsgZmFsc2UgfTsKKworICAgIGludCBt
X3N0YXR1c0NvZGUgeyAwIH07CisgICAgaW50IG1fZXJyb3JDb2RlIHsgMCB9OworICAgIGludCBt
X3ZlcmlmaWNhdGlvbkVycm9yIHsgMCB9OworICAgIHN0ZDo6d3N0cmluZyBtX2xvY2FsaXplZEVy
cm9yRGVzY3JpcHRpb247CisgICAgc3RkOjp3c3RyaW5nIG1fdmVyaWZpY2F0aW9uRXJyb3JEZXNj
cmlwdGlvbjsKKworICAgIHN0ZDo6c3RyaW5nIG1fdXNlcm5hbWU7CisgICAgc3RkOjpzdHJpbmcg
bV9wYXNzd29yZDsKKworICAgIENlcnRpZmljYXRlQ2hhaW4gbV9jZXJ0aWZpY2F0ZUNoYWluOwor
CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRleHQ7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtV2ViVmlldz4gbV93ZWJWaWV3OworfTsKKyNlbmRpZgorCitzdHJ1Y3Qg
Q2VydGlmaWNhdGVQcml2YXRlS2V5IHsKKyAgICBHZW5lcmljUHJpdmF0ZUtleTo6S2V5VHlwZSBr
ZXlUeXBlOworICAgIGludCBiaXRMZW5ndGg7CisgICAgU3RyaW5nIGNlcnRpZmljYXRlUEVNOwor
ICAgIFN0cmluZyBwcml2YXRlS2V5UEVNOworICAgIFN0cmluZyBwdWJsaWNLZXlQRU07Cit9Owor
CisKK0NlcnRpZmljYXRlUHJpdmF0ZUtleSBjZXJ0aWZpY2F0ZVByaXZhdGVLZXlSU0EoKQorewor
ICAgIC8vIFRoaXMgcHJpdmF0ZSBrZXkgYW5kIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlIHdlcmUg
Z2VuZXJhdGVkIGJ5IG9wZW5zc2wgY29tbWFuZCBiZWxvdy4KKyAgICAvLworICAgIC8vIG9wZW5z
c2wgcmVxIC14NTA5IC1ub2RlcyAtZGF5cyAzNjUwIC1uZXdrZXkgcnNhOjEwMjQgIFwKKyAgICAv
LyAgICAgICAgIC1zdWJqICIvQz1KUC9TVD1Ub2t5by9PPVNlbGYvQ049bG9jYWxob3N0IiAta2V5
b3V0IHByaXZhdGUua2V5IC1wdWJrZXkgLW91dCBzZXJ2ZXIuY3J0CisKKyAgICByZXR1cm4gewor
ICAgICAgICBHZW5lcmljUHJpdmF0ZUtleTo6S2V5VHlwZTo6UlNBVHlwZSwKKyAgICAgICAgMTAy
NCwKKyAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIgorICAgICAgICAiTUlJ
Q1RqQ0NBYmVnQXdJQkFnSUpBS0gyVHVkUStoVTdNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1FQXhDekFK
QmdOVlxuIgorICAgICAgICAiQkFZVEFrcFFNUTR3REFZRFZRUUlEQVZVYjJ0NWJ6RU5NQXNHQTFV
RUNnd0VVMlZzWmpFU01CQUdBMVVFQXd3SlxuIgorICAgICAgICAiYkc5allXeG9iM04wTUI0WERU
SXhNRGd5TXpBek16UTBPRm9YRFRNeE1EZ3lNVEF6TXpRME9Gb3dRREVMTUFrR1xuIgorICAgICAg
ICAiQTFVRUJoTUNTbEF4RGpBTUJnTlZCQWdNQlZSdmEzbHZNUTB3Q3dZRFZRUUtEQVJUWld4bU1S
SXdFQVlEVlFRRFxuIgorICAgICAgICAiREFsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y05B
UUVCQlFBRGdZMEFNSUdKQW9HQkFLNENsb0xLZnJWUFxuIgorICAgICAgICAiZ0dhNzUxMTRQMVgz
bHMzdXR2RkVldURsdTAzVlVJQ2N3TjBnZS9zQ29uM2kyL0xKZ1VvWTFMTEJxdHBBSko2elxuIgor
ICAgICAgICAiN3dodFNWajBOdzUxU1FSSDBnTlc3YlprVTRJWitYNlE4ZlN6Zko2cnZ4VkZ6MURh
ejZyK3FVZ3A4VnpoUW50dlxuIgorICAgICAgICAiQ3MvU3pHcit4Y1Vpek5QUUt0S0ZrV3RrdHFj
ZnRQUmpBZ01CQUFHalVEQk9NQjBHQTFVZERnUVdCQlM5U09uS1xuIgorICAgICAgICAiOUZPZ0FN
TWRPYUw4M2RISFJkZTJzREFmQmdOVkhTTUVHREFXZ0JTOVNPbks5Rk9nQU1NZE9hTDgzZEhIUmRl
MlxuIgorICAgICAgICAic0RBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0
R0JBR1dTbTBCSGorRTVWbU9FSWZOd1xuIgorICAgICAgICAiUlNPbHhBdGxsUGluSVZieGVCMjNR
azhKaEJGc29OeTQyeDFuZnI2MXFrQ0l3OVpySjFzdU1pRjdxVGZlVXNuK1xuIgorICAgICAgICAi
TFlYSk1NbGUzK1NTb1NYUDdIWXYzZThnRzgvQ2M3czdKbnpwL1hoV0ovNWNaYjM4ak9Fc2lVRTEw
Z1UyLzU5dlxuIgorICAgICAgICAiNmpleWFpWm5ETi83Tys1bEhnSVRaNERjXG4iCisgICAgICAg
ICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iLAorCisgICAgICAgICItLS0tLUJFR0lOIFBS
SVZBVEUgS0VZLS0tLS1cbiIKKyAgICAgICAgIk1JSUNkUUlCQURBTkJna3Foa2lHOXcwQkFRRUZB
QVNDQWw4d2dnSmJBZ0VBQW9HQkFLNENsb0xLZnJWUGdHYTdcbiIKKyAgICAgICAgIjUxMTRQMVgz
bHMzdXR2RkVldURsdTAzVlVJQ2N3TjBnZS9zQ29uM2kyL0xKZ1VvWTFMTEJxdHBBSko2ejd3aHRc
biIKKyAgICAgICAgIlNWajBOdzUxU1FSSDBnTlc3YlprVTRJWitYNlE4ZlN6Zko2cnZ4VkZ6MURh
ejZyK3FVZ3A4VnpoUW50dkNzL1NcbiIKKyAgICAgICAgInpHcit4Y1Vpek5QUUt0S0ZrV3RrdHFj
ZnRQUmpBZ01CQUFFQ2dZQldnK0xoVkZ4N09QUFdJRWFBS25FVEJPNXRcbiIKKyAgICAgICAgInBP
cEFPcFA5alRyN0Q3dmV0aEVONEVERUpDTTJBN3pua1ZnK3h1bTVscUNqc3BDQ2QyTzVCTjBhNVJF
WnhPRDFcbiIKKyAgICAgICAgIjA1d1lsekROQy8vRWRJUHpFbXlHaVBaanJ2N1ZXVUQ0TE55ZDRt
bitvNU1tMms4Wi9KRlhGY2NoSTRnWDZldHNcbiIKKyAgICAgICAgIlVQZ1lNby9ZWUc2QlhtMG5B
UUpCQU9CdDZqejdVbU9TUUJjSGdlVTVuUDV0T3l0TUhHd2JjY2RUU1BBWWZBN2pcbiIKKyAgICAg
ICAgIm9oQ281Z0F2bVV5QWdRYjc0RFBmcTFycHRTZ0dIL3B0M3JFSW5IVHFOWEVDUVFER2ZQMVlj
bWhrZTB1V1MwNU1cbiIKKyAgICAgICAgImNTRXhPYXU1WFZscUs3NTFFZHh3amY0N3N3azhwN3I0
Qi9uZFVDUGY0UFNObTRleDNNa1VWMmtjUkJXWDZGcmtcbiIKKyAgICAgICAgIlFFMFRBa0I0OW1V
bzV5Q1o4RXJBM3RnQkw1TlJncGhBbHU0K3luQUJ5ZjduQVp0ai93YnJ5Y3psenNIbWZPQ09cbiIK
KyAgICAgICAgIlhoV1NmL3lBckxScVZSckpSSXloaUkyamFsVFJBa0JlaGlONFBYT3RkbkgycndJ
b3NTOW5hOWwxdXhqYjBOMHdcbiIKKyAgICAgICAgImowTDFid21Ga0t0emNVVSszVDJHd2FWejlv
TS85TE5ZWnBaejAzVEErME4xUmpnU3Z2UjFBa0JrUnhDaU5NNVJcbiIKKyAgICAgICAgInBUS2xv
QXVUMksrajNKb3ptV09kd0VhT0FhVmxCVDZaaWw4RW1yRUIvYTZBUm9hUXRJQkZ3aG1GZzdkcDhC
d0xcbiIKKyAgICAgICAgImsrL3ArR2dPRHA5cFxuIgorICAgICAgICAiLS0tLS1FTkQgUFJJVkFU
RSBLRVktLS0tLVxuIiwKKworICAgICAgICAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbiIK
KyAgICAgICAgIk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ3VBcGFDeW42
MVQ0Qm11K2RkZUQ5Vjk1Yk5cbiIKKyAgICAgICAgIjdyYnhSSHJnNWJ0TjFWQ0FuTURkSUh2N0Fx
Sjk0dHZ5eVlGS0dOU3l3YXJhUUNTZXMrOEliVWxZOURjT2RVa0VcbiIKKyAgICAgICAgIlI5SURW
dTIyWkZPQ0dmbCtrUEgwczN5ZXE3OFZSYzlRMnMrcS9xbElLZkZjNFVKN2J3clAwc3hxL3NYRklz
elRcbiIKKyAgICAgICAgIjBDclNoWkZyWkxhbkg3VDBZd0lEQVFBQlxuIgorICAgICAgICAiLS0t
LS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCisgICAgfTsKK30KKworCisjaWYgUExBVEZPUk0oV0lO
KQorVEVTVChIVFRQU2VydmVyLCBTaW1wbGVIVFRQKQoreworICAgIEdlbmVyaWNIVFRQU2VydmVy
IHNlcnZlcjsKKyAgICBzZXJ2ZXIuc2V0UHJvdG9jb2woR2VuZXJpY0xpc3RlbmVyOjpQcm90b2Nv
bDo6SHR0cCk7CisgICAgc2VydmVyLnNldEhUVFBSZXNwb25zZXMoe3siLyIsIHsKKyAgICAgICAg
MjAwLAorICAgICAgICB7IH0sCisgICAgICAgICI8aHRtbD4gPGhlYWQ+PHRpdGxlPlNpbXBsZSBI
VFRQIFNlcnZlcjwvdGl0bGU+PC9oZWFkPiA8Ym9keT5IVFRQIGh0dHAgc2VydmVyIHJvb3Q8L2Jv
ZHk+IDwvaHRtbD4iCisgICAgfX19KTsKKyAgICBzZXJ2ZXIuc3RhcnQoKTsKKworICAgIFNlcnZl
clRlc3RlciBsb2FkZXI7CisgICAgU3RyaW5nIHRvcFVSTCA9IHNlcnZlci51cmwoKS5zdHJpbmco
KTsKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh0b3BVUkwpKTsKKyAgICBFWFBFQ1RfRVEo
bG9hZGVyLnRpdGxlKCksIEwiU2ltcGxlIEhUVFAgU2VydmVyIik7CisgICAgRVhQRUNUX0VRKGxv
YWRlci5zdGF0dXNDb2RlKCksIDIwMCk7CisKKyAgICBTdHJpbmcgd3JvbmdVUkwgPSBzZXJ2ZXIu
dXJsKCJub3QtZm91bmQuaHRtbCIpLnN0cmluZygpOworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5s
b2FkKHdyb25nVVJMKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDQwNCk7
CisKKyAgICBzZXJ2ZXIuc3RvcCgpOworfQorCisjaWYgSEFWRShTU0wpCitURVNUKEhUVFBTZXJ2
ZXIsIFNpbXBsZUhUVFBTKQoreworICAgIGF1dG8gY2VydEtleSA9IGNlcnRpZmljYXRlUHJpdmF0
ZUtleVJTQSgpOworICAgIGF1dG8gY2VydERhdGEgPSBHZW5lcmljQ2VydGlmaWNhdGU6OmNyZWF0
ZUZyb21QRU0oY2VydEtleS5jZXJ0aWZpY2F0ZVBFTSk7CisgICAgYXV0byBrZXlEYXRhID0gR2Vu
ZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0oY2VydEtleS5wcml2YXRlS2V5UEVNLCBjZXJ0
S2V5LmtleVR5cGUsIGNlcnRLZXkuYml0TGVuZ3RoKTsKKworICAgIEdlbmVyaWNIVFRQU2VydmVy
IHNlcnZlcjsKKyAgICBzZXJ2ZXIuc2V0UHJvdG9jb2woR2VuZXJpY0xpc3RlbmVyOjpQcm90b2Nv
bDo6SHR0cHMpOworICAgIHNlcnZlci5zZXRIVFRQUmVzcG9uc2VzKHt7Ii8iLCB7CisgICAgICAg
IDIwMCwKKyAgICAgICAgeyB9LAorICAgICAgICAiPGh0bWw+IDxoZWFkPjx0aXRsZT5TaW1wbGUg
SFRUUFMgU2VydmVyPC90aXRsZT48L2hlYWQ+IDxib2R5PkhUVFBTIGh0dHBzIHNlcnZlciByb290
PC9ib2R5PiA8L2h0bWw+IgorICAgIH19fSk7CisKKyAgICBzZXJ2ZXIuc2V0SWRlbnRpdHkoV1RG
TW92ZShrZXlEYXRhKSwgV1RGTW92ZShjZXJ0RGF0YSkpOworICAgIHNlcnZlci5zdGFydCgpOwor
CisgICAgU2VydmVyVGVzdGVyIGxvYWRlcjsKKyAgICBTdHJpbmcgdG9wVVJMID0gc2VydmVyLnVy
bCgpLnN0cmluZygpOworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5sb2FkKHRvcFVSTCwgdHJ1ZSkp
OworICAgIEVYUEVDVF9FUShsb2FkZXIudGl0bGUoKSwgTCJTaW1wbGUgSFRUUFMgU2VydmVyIik7
CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDIwMCk7CisKKyAgICBhdXRvIGNl
cnRpZmljYXRlQ2hhaW4gPSBsb2FkZXIuZ2V0Q2VydGlmaWNhdGVDaGFpbigpOworICAgIEVYUEVD
VF9FUShjZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSwgMSk7CisKKyAgICBTdHJpbmcgY2VydGlmaWNh
dGUoY2VydGlmaWNhdGVDaGFpbi5nZXRDZXJ0aWZpY2F0ZSgwKS5kYXRhKCksIGNlcnRpZmljYXRl
Q2hhaW4uZ2V0Q2VydGlmaWNhdGUoMCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2VydGlmaWNh
dGUsIGNlcnRLZXkuY2VydGlmaWNhdGVQRU0pOworCisgICAgU3RyaW5nIHB1YmtleShjZXJ0aWZp
Y2F0ZUNoYWluLmdldFB1YmxpY0tleSgwKS5kYXRhKCksIGNlcnRpZmljYXRlQ2hhaW4uZ2V0UHVi
bGljS2V5KDApLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHB1YmtleSwgY2VydEtleS5wdWJsaWNL
ZXlQRU0pOworCisgICAgc2VydmVyLnN0b3AoKTsKK30KKyNlbmRpZgorCitURVNUKEhUVFBTZXJ2
ZXIsIEJhc2ljQXV0aGVudGljYXRpb24pCit7CisgICAgR2VuZXJpY0hUVFBTZXJ2ZXIgc2VydmVy
OworICAgIHNlcnZlci5zZXRQcm90b2NvbChHZW5lcmljTGlzdGVuZXI6OlByb3RvY29sOjpIdHRw
KTsKKyAgICBzZXJ2ZXIuc2V0SFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlvbigiL2Jh
c2ljLmh0bWwiLCAiVVNFUk5BTUUiLCAiUEFTU1dPUkQiLCB7CisgICAgICAgIDQwMSwKKyAgICAg
ICAge3siV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWxtPVwic2VjcmV0IGFyZWFcIiJ9fSwK
KyAgICAgICAgIjxodG1sPiA8aGVhZD48dGl0bGU+YmFzaWMgdW5hdXRob3JpemVkPC90aXRsZT48
L2hlYWQ+IDxib2R5PjxoMT51bmF1dGhvcml6ZWQgY29udGVudDwvaDE+PC9ib2R5PiA8L2h0bWw+
IgorICAgIH0sIHsKKyAgICAgICAgMjAwLAorICAgICAgICB7IH0sCisgICAgICAgICI8aHRtbD4g
PGhlYWQ+PHRpdGxlPmJhc2ljIGF1dGhvcml6ZWQ8L3RpdGxlPjwvaGVhZD4gPGJvZHk+PGgxPmF1
dGhvcml6ZWQgPC9oMT48L2JvZHk+IDwvaHRtbD4iCisgICAgfSk7CisgICAgc2VydmVyLnN0YXJ0
KCk7CisKKyAgICBTZXJ2ZXJUZXN0ZXIgbG9hZGVyOworICAgIFN0cmluZyB0YXJnZXRVUkwgPSBz
ZXJ2ZXIudXJsKCJiYXNpYy5odG1sIikuc3RyaW5nKCk7CisKKyAgICBsb2FkZXIuc2V0VXNlcm5h
bWVQYXNzd29yZCgiYmFkLXVzZXIiLCAiYmFkLXBhc3N3b3JkIik7CisgICAgRVhQRUNUX0ZBTFNF
KGxvYWRlci5sb2FkKHRhcmdldFVSTCkpOworICAgIEVYUEVDVF9ORShsb2FkZXIuc3RhdHVzQ29k
ZSgpLCAyMDApOworCisgICAgbG9hZGVyLnNldFVzZXJuYW1lUGFzc3dvcmQoIlVTRVJOQU1FIiwg
IlBBU1NXT1JEIik7CisgICAgRVhQRUNUX1RSVUUobG9hZGVyLmxvYWQodGFyZ2V0VVJMKSk7Cisg
ICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDIwMCk7CisgICAgRVhQRUNUX0VRKGxv
YWRlci50aXRsZSgpLCBMImJhc2ljIGF1dGhvcml6ZWQiKTsKKworICAgIHNlcnZlci5zdG9wKCk7
Cit9CisKKyNlbmRpZgorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MjE3YzY2MTlhZDA5NmQyMmYwN2UyY2E5YjFlZTZmNzdlZGUyN2VjCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9HZW5lcmljQ29ubmVjdGlvbkNv
Y29hLm1tCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIkdlbmVyaWNDb25uZWN0aW9uLmgiCisKKyNpbXBvcnQgIkdlbmVyaWNIVFRQ
U2VydmVyLmgiCisjaW1wb3J0ICJVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPHdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oPgorI2ltcG9ydCA8
d3RmL3RleHQvQmFzZTY0Lmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGV4dHJhY3RQRU1EYXRhKGNvbnN0IFN0
cmluZyBwZW0sIGNvbnN0IFN0cmluZyBkZWxpbWl0ZXJCZWdpbiwgY29uc3QgU3RyaW5nIGRlbGlt
aXRlckVuZCkKK3sKKyAgICBhdXRvIGJlZ2luUG9zaXRpb24gPSBwZW0uZmluZChkZWxpbWl0ZXJC
ZWdpbik7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IHBlbS5maW5kKGRlbGltaXRlckVuZCk7CisK
KyAgICBTdHJpbmcgYmFzZTY0U3RyaW5nOworICAgIGlmIChiZWdpblBvc2l0aW9uICE9IG5vdEZv
dW5kICYmIGVuZFBvc2l0aW9uICE9IG5vdEZvdW5kKQorICAgICAgICBiYXNlNjRTdHJpbmcgPSBw
ZW0uc3Vic3RyaW5nKGJlZ2luUG9zaXRpb24gKyBkZWxpbWl0ZXJCZWdpbi5sZW5ndGgoKSwgZW5k
UG9zaXRpb24gLSBiZWdpblBvc2l0aW9uIC0gZGVsaW1pdGVyQmVnaW4ubGVuZ3RoKCkpOworICAg
IGVsc2UKKyAgICAgICAgYmFzZTY0U3RyaW5nID0gcGVtOworCisgICAgcmV0dXJuIGJhc2U2NERl
Y29kZShiYXNlNjRTdHJpbmcsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4gR2VuZXJp
Y0NlcnRpZmljYXRlOjpjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZyBwZW0pCit7CisgICAgY29u
c3QgU3RyaW5nIGNlcnRCZWdpbiA9ICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0iOworICAg
IGNvbnN0IFN0cmluZyBjZXJ0RW5kID0gIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0iOworCisg
ICAgYXV0byBwZW1Cb2R5ID0gZXh0cmFjdFBFTURhdGEocGVtLCBjZXJ0QmVnaW4sIGNlcnRFbmQp
OworICAgIGlmICghcGVtQm9keSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGNlcnRpZmljYXRlID0gV1RGOjptYWtlVW5pcXVlPEdlbmVyaWNDZXJ0aWZpY2F0ZT4oKTsKKyAg
ICBOU0RhdGEgKmNlcnRpZmljYXRlRGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpwZW1Cb2R5
LT5kYXRhKCkgbGVuZ3RoOnBlbUJvZHktPnNpemUoKV07CisgICAgY2VydGlmaWNhdGUtPmNlcnRp
ZmljYXRlID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIChf
X2JyaWRnZSBDRkRhdGFSZWYpY2VydGlmaWNhdGVEYXRhKSk7CisKKyAgICByZXR1cm4gY2VydGlm
aWNhdGU7Cit9CisKK0dlbmVyaWNDZXJ0aWZpY2F0ZTo6R2VuZXJpY0NlcnRpZmljYXRlKCkKK3sK
K30KKworR2VuZXJpY0NlcnRpZmljYXRlOjp+R2VuZXJpY0NlcnRpZmljYXRlKCkKK3sKK30KKwor
c3RhdGljIFJldGFpblB0cjxTZWNLZXlSZWY+IGdlbmVyYXRlUlNBS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiBwZW1Cb2R5LCBpbnQgYml0TGVuZ3RoKQoreworICAgIE5TRGljdGlvbmFyeSogb3B0
aW9ucyA9IEB7CisgICAgICAgIChpZClrU2VjQXR0cktleVR5cGU6IChpZClrU2VjQXR0cktleVR5
cGVSU0EsCisgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFz
c1ByaXZhdGUsCisgICAgICAgIChpZClrU2VjQXR0cktleVNpemVJbkJpdHM6IFtOU051bWJlciBu
dW1iZXJXaXRoSW50OmJpdExlbmd0aF0KKyAgICB9OworICAgIE5TRGF0YSAqZW5jb2RlZFByaXZh
dGVLZXkgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6cGVtQm9keS5kYXRhKCkgbGVuZ3RoOnBlbUJv
ZHkuc2l6ZSgpXTsKKworICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOworICAgIGNvbnN0
IE5TVUludGVnZXIgaGVhZGVyTGVuZ3RoID0gMjY7CisgICAgcmV0dXJuIGFkb3B0Q0YoU2VjS2V5
Q3JlYXRlV2l0aERhdGEoKF9fYnJpZGdlIENGRGF0YVJlZilbZW5jb2RlZFByaXZhdGVLZXkgc3Vi
ZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZShoZWFkZXJMZW5ndGgsIGVuY29kZWRQcml2YXRlS2V5
Lmxlbmd0aCAtIGhlYWRlckxlbmd0aCldLCAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKW9wdGlv
bnMsICZlcnJvcikpOworfQorCitzdGF0aWMgUmV0YWluUHRyPFNlY0tleVJlZj4gZ2VuZXJhdGVF
Q0tleShjb25zdCBWZWN0b3I8dWludDhfdD4gcGVtQm9keSwgaW50IGJpdExlbmd0aCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxHZW5lcmljUHJpdmF0ZUtleT4gR2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21Q
RU0oY29uc3QgU3RyaW5nIHBlbSwgY29uc3QgS2V5VHlwZSBrZXlUeXBlLCBjb25zdCBpbnQgYml0
TGVuZ3RoKQoreworICAgIGNvbnN0IFN0cmluZyBrZXlCZWdpbiA9ICItLS0tLUJFR0lOIFBSSVZB
VEUgS0VZLS0tLS0iOworICAgIGNvbnN0IFN0cmluZyBrZXlFbmQgPSAiLS0tLS1FTkQgUFJJVkFU
RSBLRVktLS0tLSI7CisKKyAgICBhdXRvIHBlbUJvZHkgPSBleHRyYWN0UEVNRGF0YShwZW0sIGtl
eUJlZ2luLCBrZXlFbmQpOworICAgIGlmICghcGVtQm9keSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHVuaXF1ZUtleSA9IFdURjo6bWFrZVVuaXF1ZTxHZW5lcmljUHJpdmF0
ZUtleT4oKTsKKyAgICBzd2l0Y2ggKGtleVR5cGUpIHsKKyAgICBjYXNlIEtleVR5cGU6OlJTQVR5
cGU6CisgICAgICAgIHVuaXF1ZUtleS0+a2V5ID0gZ2VuZXJhdGVSU0FLZXkoKnBlbUJvZHksIGJp
dExlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5VHlwZTo6RUNUeXBlOgorICAg
ICAgICB1bmlxdWVLZXktPmtleSA9IGdlbmVyYXRlRUNLZXkoKnBlbUJvZHksIGJpdExlbmd0aCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB1bmlxdWVLZXk7Cit9CisKK0dl
bmVyaWNQcml2YXRlS2V5OjpHZW5lcmljUHJpdmF0ZUtleSgpCit7Cit9CisKK0dlbmVyaWNQcml2
YXRlS2V5Ojp+R2VuZXJpY1ByaXZhdGVLZXkoKQoreworfQorCisKK3N0YXRpYyBkaXNwYXRjaF9k
YXRhX3QgZGF0YUZyb21TdHJpbmcoU3RyaW5nJiYgcykKK3sKKyAgICBhdXRvIGltcGwgPSBzLnJl
bGVhc2VJbXBsKCk7CisgICAgQVNTRVJUKGltcGwtPmlzOEJpdCgpKTsKKyAgICByZXR1cm4gZGlz
cGF0Y2hfZGF0YV9jcmVhdGUoaW1wbC0+Y2hhcmFjdGVyczgoKSwgaW1wbC0+bGVuZ3RoKCksIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICh2b2lkKWltcGw7CisgICAgfSk7
Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gdmVjdG9yRnJvbURhdGEoZGlzcGF0Y2hfZGF0
YV90IGNvbnRlbnQpCit7CisgICAgQVNTRVJUKGNvbnRlbnQpOworICAgIF9fYmxvY2sgVmVjdG9y
PHVpbnQ4X3Q+IHJlcXVlc3Q7CisgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBeYm9v
bChkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkgeworICAgICAgICByZXF1ZXN0LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVm
ZmVyKSwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIHJldHVybiBy
ZXF1ZXN0OworfQorCitHZW5lcmljQ29ubmVjdGlvbjo6R2VuZXJpY0Nvbm5lY3Rpb24obndfY29u
bmVjdGlvbl90IGNvbm5lY3Rpb24pCisgICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKK3sK
KyAgICBtX2luaXRpYWxpemVkICA9IHRydWU7Cit9CisKK0dlbmVyaWNDb25uZWN0aW9uOjp+R2Vu
ZXJpY0Nvbm5lY3Rpb24oKQoreworfQorCitib29sIEdlbmVyaWNDb25uZWN0aW9uOjppc1ZhbGlk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbml0aWFsaXplZDsKK30KKwordm9pZCBHZW5lcmlj
Q29ubmVjdGlvbjo6c2VuZChTdHJpbmcmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0Cit7CisgICAgbndfY29ubmVjdGlvbl9zZW5k
KG1fY29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21TdHJpbmcoV1RGTW92ZShtZXNzYWdlKSksIE5X
X0NPTk5FQ1RJT05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsCisgICAgICAgIG1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
bndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBBU1NFUlQoIWVycm9yKTsK
KyAgICAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KS5nZXQoKSk7Cit9CisKK3ZvaWQgR2VuZXJpY0Nv
bm5lY3Rpb246OnJlY2VpdmVCeXRlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50
OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBud19jb25uZWN0aW9uX3JlY2Vp
dmUobV9jb25uZWN0aW9uLmdldCgpLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksCisgICAgICAgIG1ha2VCbG9ja1B0cihbY29ubmVjdGlvbiA9ICp0aGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShkaXNwYXRjaF9kYXRhX3Qg
Y29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QsIGJvb2wsIG53X2Vycm9yX3QgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFjb250ZW50KQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIodmVjdG9yRnJvbURhdGEoY29udGVudCkpOworICAgICAgICB9KS5nZXQoKSk7Cit9
CisKK3ZvaWQgR2VuZXJpY0Nvbm5lY3Rpb246OmNsb3NlKCkKK3sKKyAgICBpZiAoIW1faW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fY29u
bmVjdGlvbi5nZXQoKSk7CisgICAgbV9pbml0aWFsaXplZCA9IGZhbHNlOworfQorCisKK0dlbmVy
aWNMaXN0ZW5lcjo6R2VuZXJpY0xpc3RlbmVyKCkKK3sKK30KKworR2VuZXJpY0xpc3RlbmVyOjp+
R2VuZXJpY0xpc3RlbmVyKCkKK3sKK30KKwordWludDE2X3QgR2VuZXJpY0xpc3RlbmVyOjpwb3J0
KCkKK3sKKyAgICByZXR1cm4gbndfbGlzdGVuZXJfZ2V0X3BvcnQobV9saXN0ZW5lci5nZXQoKSk7
Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVyOjpyZWdpc3RlckhhbmRsZXIoRnVuY3Rpb248dm9p
ZChHZW5lcmljQ29ubmVjdGlvbiYmKT4mJiBoYW5kbGVyKQoreworICAgIG1fY29ubmVjdGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lkIEdlbmVyaWNMaXN0ZW5lcjo6c3Rh
cnQoKQoreworICAgIGF1dG8gY29uZmlndXJlVExTID0gbWFrZUJsb2NrUHRyKE5XX1BBUkFNRVRF
UlNfRElTQUJMRV9QUk9UT0NPTCk7CisKKyAgICBpZiAobV9jZXJ0aWZpY2F0ZSAmJiBtX3ByaXZh
dGVLZXkpIHsKKyAgICAgICAgYXV0byBuZXdJZGVudGl0eSA9IGNyZWF0ZUlkZW50aXR5KCptX2Nl
cnRpZmljYXRlLCAqbV9wcml2YXRlS2V5KTsKKyAgICAgICAgY29uZmlndXJlVExTID0gbWFrZUJs
b2NrUHRyKFtpZGVudGl0eSA9IFdURk1vdmUobmV3SWRlbnRpdHkpXSAobndfcHJvdG9jb2xfb3B0
aW9uc190IHByb3RvY29sT3B0aW9ucykgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIG9wdGlv
bnMgPSBhZG9wdE5TKG53X3Rsc19jb3B5X3NlY19wcm90b2NvbF9vcHRpb25zKHByb3RvY29sT3B0
aW9ucykpOworICAgICAgICAgICAgYXV0byBpZGVudGl0eTEgPSBhZG9wdE5TKHNlY19pZGVudGl0
eV9jcmVhdGUoaWRlbnRpdHkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHNlY19wcm90b2NvbF9vcHRp
b25zX3NldF9sb2NhbF9pZGVudGl0eShvcHRpb25zLmdldCgpLCBpZGVudGl0eTEuZ2V0KCkpOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGNvbmZpZ3VyZVRMUy5nZXQoKSwgTldfUEFSQU1FVEVSU19ERUZB
VUxUX0NPTkZJR1VSQVRJT04pOworICAgIG1fbGlzdGVuZXIgPSBhZG9wdE5TKG53X2xpc3RlbmVy
X2NyZWF0ZShwYXJhbWV0ZXJzKSk7CisgICAgbndfbGlzdGVuZXJfc2V0X3F1ZXVlKG1fbGlzdGVu
ZXIuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOworCisgICAgX19ibG9jayBib29s
IGxpc3RlbmVyUmVhZHkgPSBmYWxzZTsKKyAgICBud19saXN0ZW5lcl9zZXRfc3RhdGVfY2hhbmdl
ZF9oYW5kbGVyKG1fbGlzdGVuZXIuZ2V0KCksIF4obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwg
bndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBpZiAoc3RhdGUgPT0gbndfbGlzdGVuZXJfc3Rh
dGVfcmVhZHkpCisgICAgICAgICAgICBsaXN0ZW5lclJlYWR5ID0gdHJ1ZTsKKyAgICB9KTsKKwor
ICAgIG53X2xpc3RlbmVyX3NldF9uZXdfY29ubmVjdGlvbl9oYW5kbGVyKG1fbGlzdGVuZXIuZ2V0
KCksCisgICAgICAgIG1ha2VCbG9ja1B0cihbJl0gKG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rp
b24pIHsKKyAgICAgICAgICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG53Q29ubmVjdGlvbiwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CisgICAgICAgICAgICBud19jb25uZWN0aW9uX3N0
YXJ0KG53Q29ubmVjdGlvbik7CisKKyAgICAgICAgICAgIEdlbmVyaWNDb25uZWN0aW9uIHJlc3Bv
bnNlQ29ubmVjdGlvbihud0Nvbm5lY3Rpb24pOworICAgICAgICAgICAgaWYgKHRoaXMtPm1fY29u
bmVjdGlvbkhhbmRsZXIpCisgICAgICAgICAgICAgICAgdGhpcy0+bV9jb25uZWN0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3BvbnNlQ29ubmVjdGlvbikpOworICAgICAgICB9KS5nZXQoKSk7CisKKyAg
ICBud19saXN0ZW5lcl9zdGFydChtX2xpc3RlbmVyLmdldCgpKTsKKyAgICBVdGlsOjpydW4oJmxp
c3RlbmVyUmVhZHkpOworfQorCit2b2lkIEdlbmVyaWNMaXN0ZW5lcjo6Y2FuY2VsKCkKK3sKKyAg
ICBpZiAoIW1fbGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKworICAgIF9fYmxvY2sgYm9vbCBj
YW5jZWxsZWQgPSBmYWxzZTsKKyAgICBud19saXN0ZW5lcl9zZXRfc3RhdGVfY2hhbmdlZF9oYW5k
bGVyKG1fbGlzdGVuZXIuZ2V0KCksIF4obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJy
b3JfdCBlcnJvcikgeworICAgICAgICBpZiAoc3RhdGUgPT0gbndfbGlzdGVuZXJfc3RhdGVfY2Fu
Y2VsbGVkKQorICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBud19s
aXN0ZW5lcl9jYW5jZWwobV9saXN0ZW5lci5nZXQoKSk7CisgICAgVXRpbDo6cnVuKCZjYW5jZWxs
ZWQpOworICAgIG1fbGlzdGVuZXIgPSBudWxscHRyOworfQorCitSZXRhaW5QdHI8U2VjSWRlbnRp
dHlSZWY+IEdlbmVyaWNMaXN0ZW5lcjo6Y3JlYXRlSWRlbnRpdHkoR2VuZXJpY0NlcnRpZmljYXRl
JiBjZXJ0aWZpY2F0ZSwgR2VuZXJpY1ByaXZhdGVLZXkmIHByaXZhdGVLZXkpCit7CisgICAgcmV0
dXJuIGFkb3B0Q0YoU2VjSWRlbnRpdHlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2VydGlm
aWNhdGUuY2VydGlmaWNhdGUuZ2V0KCksIHByaXZhdGVLZXkua2V5LmdldCgpKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41Y2RiZDBkOTEwMjg3NGNjZThlMWE5NDY1NjFlM2JjY2M3YWFkMGQyCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU29ja2V0LmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisKK3N0YXRpYyB2b2lkIGluaXRp
YWxpemUoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworCisgICAgc3RkOjpj
YWxsX29uY2UoZmxhZywgW10geworICAgICAgICBXU0FEQVRBIGRhdGE7CisgICAgICAgIFdTQVN0
YXJ0dXAoTUFLRVdPUkQoMiwgMCksICZkYXRhKTsKKyAgICB9KTsKK30KKworU29ja2V0IHNvY2tl
dChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIGluaXRpYWxpemUo
KTsKKyAgICByZXR1cm4gOjpzb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9CisKK2Jv
b2wgaXNWYWxpZFNvY2tldChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiBzb2NrZXQgIT0g
SU5WQUxJRF9TT0NLRVQ7Cit9CisKK1NvY2tldCBhY2NlcHQoU29ja2V0IHNvY2tldCkKK3sKKyAg
ICByZXR1cm4gOjphY2NlcHQoc29ja2V0LCBudWxscHRyLCBudWxscHRyKTsKK30KKworaW50IHNo
dXRkb3duKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6c2h1dGRvd24oc29ja2V0LCBT
RF9CT1RIKTsKK30KKworaW50IGNsb3NlKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6
Y2xvc2Vzb2NrZXQoc29ja2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNvY2tldCwgdm9pZCog
YnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6cmVjdihzb2NrZXQsIHN0YXRp
Y19jYXN0PGNoYXIqPihidWZmZXIpLCBjb3VudCwgMCk7Cit9CisKK2ludCB3cml0ZShTb2NrZXQg
c29ja2V0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4g
OjpzZW5kKHNvY2tldCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50LCAw
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436989</attachid>
            <date>2021-08-31 20:15:21 -0700</date>
            <delta_ts>2022-02-01 17:46:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20210901121439.patch</filename>
            <type>text/plain</type>
            <size>100182</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2VkMDQ0NTNjOWZjM2UzMmQzNmU4OWYxMjRlMTc1OTg4
YjU5M2QxMS4uYzBhMjFiOGZkN2E3YzJlNmM5NzY5OTAzMDM2MWEyN2JmMzY4NzYxNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
NCBAQAorMjAyMS0wOC0zMSAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1bW1h
cnkgb2YgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBHZW5lcmljSFRUUFNlcnZlcjogVGhl
IHNlcnZlci4gSXQgdXNlcyBDb25uZWN0aW9uIHdoaWNoIGlzIGFic3RyYWN0ZWQgc29ja2V0Lgor
ICAgICAgICAgICAgR2VuZXJpY0Nvbm5lY3Rpb246IEFic3RyYWN0ZWQgZW5kcG9pbnQgb2YgY29u
bmVjdGlvbi4gSXQgY2FuIGhhbmRsZSBUTFMgY29ubmVjdGlvbi4KKyAgICAgICAgICAgIFBsYXRm
b3JtU29ja2V0OiBBIHRoaW4gbGF5ZXIgdG8gcmVtb3ZlIGRpZmZlcmVuY2VzIGJldHdlZW4gdW5p
eCBzb2NrZXQgYW5kIHdpbnNvY2syLgorCisgICAgICAgIFRlc3RzOiBUZXN0cy9XZWJLaXQvSFRU
UFNlcnZlci5jcHAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6Cisg
ICAgICAgIChXaW5Qb3J0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGVsZXRlcjxYNTA5Pjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkZWxldGVyPEVWUF9QS0VZPjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnByb3Rv
Y29sKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6c2V0UHJvdG9j
b2wpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpzZXRJZGVudGl0
eSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjppbml0aWFsaXplU1NMTGlicmFyeSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ2VydGlmaWNhdGU6OmNyZWF0ZUZyb21QRU0p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21Q
RU0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6aXNTb2NrZXRSZWFkeSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjppc1NvY2tldFJlYWR5UmVhZGluZyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjppc1NvY2tldFJlYWR5V3JpdGluZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5l
cmljQ29ubmVjdGlvbjo6R2VuZXJpY0Nvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6R2VuZXJpY0Nvbm5lY3Rpb246On5HZW5lcmljQ29ubmVjdGlvbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6c2VuZEJ5dGVzUHJvY2Vzcyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6c2VuZCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzUHJvY2Vzcyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjpjbG9zZSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlvbjo6YWNjZXB0U1NMQ29ubmVjdGlv
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OkdlbmVyaWNMaXN0
ZW5lcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6On5HZW5lcmlj
TGlzdGVuZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjppc1Zh
bGlkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6cG9ydCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnN0YXJ0KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6Y2FuY2VsKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmcpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBSZXF1ZXN0UmVzcG9uc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnN0YXR1c1RleHQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6YXBwZW5kVVRGOFRvVmVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVy
aWNIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkdlbmVyaWNIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZSBjb25zdCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9HZW5lcmljSFRUUFJlcXVlc3RSZXNwb25zZS5oOiBBZGRlZC4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQUmVzcG9uc2U6OkdlbmVyaWNIVFRQUmVzcG9uc2UpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzZXRIVFRQUmVzcG9uc2Vz
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzZXRIVFRQUmVz
cG9uc2VGb3JCYXNpY0F1dGhlbnRpY2F0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Okdl
bmVyaWNIVFRQU2VydmVyOjpyZWNlaXZlSFRUUFJlcXVlc3QpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OnNlbmRIVFRQUmVzcG9uc2UpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY0hUVFBTZXJ2ZXI6OmJhc2ljQXV0aGVudGljYXRpb25SZXF1aXJl
ZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwYXJzZUF1dGhlbnRpY2F0aW9uQ3JlZGVudGlh
bCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6c2VuZEhUVFBS
ZXNwb25zZUZvckJhc2ljQXV0aGVudGljYXRpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
R2VuZXJpY0hUVFBTZXJ2ZXI6OnN0YXJ0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVy
aWNIVFRQU2VydmVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQ
U2VydmVyOjpwYXJzZUhUVFBSZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVy
aWNIVFRQU2VydmVyOjpwb3J0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQ
U2VydmVyOjp1cmwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIu
aDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6dXJs
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNIVFRQU2VydmVyOjpzZXRQcm90b2Nv
bCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljSFRUUFNlcnZlcjo6c2V0SWRlbnRp
dHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaDogQWRkZWQuCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lYLmNwcDogQWRkZWQuCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNvY2tldCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjpzaHV0ZG93
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2Nr
ZXQ6OndyaXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0hUVFBTZXJ2ZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZVN0cmluZyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpDZXJ0aWZpY2F0ZUNoYWluOjpjbGVhcik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDZXJ0aWZpY2F0ZUNoYWluOjpzaXplKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkNlcnRpZmljYXRlQ2hhaW46OnB1c2hfYmFjayk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpDZXJ0aWZpY2F0ZUNoYWluOjpnZXRDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpDZXJ0aWZpY2F0ZUNoYWluOjpnZXRQdWJsaWNLZXkpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Z2V0UHVibGljS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRl
c3Rlcjo6U2VydmVyVGVzdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rl
cjo6c2V0VXNlcm5hbWVQYXNzd29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJU
ZXN0ZXI6OmxvYWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpkaWRG
YWlsTG9hZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmRpZFJlY2Vp
dmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlNlcnZlclRlc3Rlcjo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZl
clRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2Vy
dmVyVGVzdGVyOjpsb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNlcnZlclRlc3Rlcjo6dmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnN0YXR1c0NvZGUpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpnZXRDZXJ0aWZpY2F0ZUNoYWluKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dGl0bGUpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Y2VydGlmaWNhdGVQcml2YXRlS2V5UlNBKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hh
bGxlbmdlLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0dlbmVy
aWNDb25uZWN0aW9uQ29jb2EubW06IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZXh0
cmFjdFBFTURhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0NlcnRpZmljYXRl
OjpjcmVhdGVGcm9tUEVNKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlUlNBS2V5
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlRUNLZXkpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6ZGF0YUZyb21TdHJpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
ZGF0YUZyb21WZWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dmVjdG9yRnJvbURhdGEp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246OkdlbmVyaWNDb25u
ZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNDb25uZWN0aW9uOjp+R2Vu
ZXJpY0Nvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rp
b246OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5l
Y3Rpb246OnNlbmQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0Nvbm5lY3Rpb246
OnJlY2VpdmVCeXRlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljQ29ubmVjdGlv
bjo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjpHZW5l
cmljTGlzdGVuZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R2VuZXJpY0xpc3RlbmVyOjp+
R2VuZXJpY0xpc3RlbmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5l
cjo6cG9ydCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnJlZ2lz
dGVySGFuZGxlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHZW5lcmljTGlzdGVuZXI6OnN0
YXJ0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6Y2FuY2VsKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdlbmVyaWNMaXN0ZW5lcjo6Y3JlYXRlSWRlbnRpdHkp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6SFRUUFNlcnZlcik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpIVFRQUmVzcG9uc2U6OkhUVFBSZXNwb25zZSk6IERlbGV0ZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6SFRUUFNlcnZlcjo6UmVxdWVzdERhdGE6OlJlcXVlc3REYXRhKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhUVFBTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6SFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnN0YXR1c1RleHQpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YXBwZW5k
VVRGOFRvVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNw
b25zZTo6Ym9keUZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
SFRUUFJlc3BvbnNlOjpzZXJpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpTb2NrZXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0
Ojpzb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojppc1ZhbGlkU29ja2V0
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6YWNjZXB0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNvY2tldDo6c2h1dGRvd24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U29ja2V0OjpjbG9zZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnJlYWQpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojp3cml0ZSk6CisKIDIwMjEtMDgtMjEgIERh
bmllbCBLb2xlc2EgIDxka29sZXNhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIERvIG5v
dCBhc3N1bWUgbG9nIHN1Y2Nlc3MgaW4gYXBwbHktYnVpbGQtcmV2aXNpb24tdG8tZmlsZXMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CmluZGV4IGU4NWE0MmU0Nzg1N2VlOGExY2U0N2U1MDFk
NWJkZTc1MWNlOWQ2ZGYuLjg1Y2VkNjZiODE3ODU3MjMwOWE5OWQxMTY5MzM4ZTRlZmE2MDMyY2Ug
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQpAQCAtMTk4LDcgKzE5OCw3IEBAIGNsYXNz
IFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgX3BhdGhfdG9fZGVmYXVsdF9pbWFnZV9kaWZm
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnSW1hZ2VEaWZmLmV4ZScp
CiAKLSAgICBBUElfVEVTVF9CSU5BUllfTkFNRVMgPSBbJ1Rlc3RXVEYuZXhlJywgJ1Rlc3RXZWJD
b3JlLmV4ZScsICdUZXN0V2ViS2l0TGVnYWN5LmV4ZSddCisgICAgQVBJX1RFU1RfQklOQVJZX05B
TUVTID0gWydUZXN0V1RGLmV4ZScsICdUZXN0V2ViQ29yZS5leGUnLCAnVGVzdFdlYktpdExlZ2Fj
eS5leGUnLCAnVGVzdFdlYktpdC5leGUnXQogCiAgICAgZGVmIHBhdGhfdG9fYXBpX3Rlc3RfYmlu
YXJpZXMoc2VsZik6CiAgICAgICAgIHJldHVybiB7YmluYXJ5LnNwbGl0KCcuJylbMF06IHNlbGYu
X2J1aWxkX3BhdGgoYmluYXJ5KSBmb3IgYmluYXJ5IGluIHNlbGYuQVBJX1RFU1RfQklOQVJZX05B
TUVTfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5o
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx
ZjIyMzgwMTU3NTZiNDZhOWFmNzY0ZjJiOTk0ZTZhODg5ZDkxYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uLmgKQEAgLTAsMCArMSwxNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pICYm
IEhBVkUoU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSA8b3BlbnNz
bC9zc2wuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVk
ZSA8TmV0d29yay9OZXR3b3JrLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlm
CisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKyNlbmRp
ZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisjaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZF
KFNTTCkKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVsZXRlcjsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgZGVsZXRlcjxYNTA5PiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFg1MDkqIHg1MDkpCisg
ICAgeworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgZGVsZXRlcjxFVlBfUEtFWT4geworICAgIHZvaWQgb3BlcmF0b3IoKShFVlBfUEtFWSog
a2V5KQorICAgIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShrZXkpOworICAgIH0KK307CisKK25h
bWVzcGFjZSBzc2wgewordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHVuaXF1ZV9wdHIgPSBz
dGQ6OnVuaXF1ZV9wdHI8VCwgZGVsZXRlcjxUPj47Cit9CisjZW5kaWYKKworCitjbGFzcyBHZW5l
cmljQ29ubmVjdGlvbjsKK2NsYXNzIEdlbmVyaWNMaXN0ZW5lcjsKKworc3RydWN0IEdlbmVyaWND
ZXJ0aWZpY2F0ZSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0NlcnRpZmljYXRlPiBjcmVhdGVGcm9tUEVNKGNv
bnN0IFN0cmluZyk7CisKKyNpZiBQTEFURk9STShXSU4pICYmIEhBVkUoU1NMKQorICAgIHNzbDo6
dW5pcXVlX3B0cjxYNTA5PiB4NTA5OworI2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWlu
UHRyPFNlY0NlcnRpZmljYXRlUmVmPiBjZXJ0aWZpY2F0ZTsKKyNlbmRpZgorfTsKKworc3RydWN0
IEdlbmVyaWNQcml2YXRlS2V5IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7
CisgICAgZW51bSBjbGFzcyBLZXlUeXBlIHsgUlNBVHlwZSwgRUNUeXBlIH07CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0ZUtleT4gY3JlYXRlRnJvbVBFTShjb25zdCBT
dHJpbmcsIGNvbnN0IEtleVR5cGUsIGNvbnN0IGludCk7CisKKyNpZiBQTEFURk9STShXSU4pICYm
IEhBVkUoU1NMKQorICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4ga2V5OworI2VsaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPFNlY0tleVJlZj4ga2V5OworI2VuZGlmCit9Owor
CisKK2NsYXNzIEdlbmVyaWNDb25uZWN0aW9uIHsKKyAgICBmcmllbmQgY2xhc3MgR2VuZXJpY0xp
c3RlbmVyOworcHVibGljOgorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHZW5lcmljQ29ubmVjdGlv
bigpOworI2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgR2VuZXJpY0Nvbm5lY3Rpb24obndfY29u
bmVjdGlvbl90KTsKKyNlbmRpZgorICAgIH5HZW5lcmljQ29ubmVjdGlvbigpOworCisgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdm9pZCBzZW5kKFZlY3Rvcjx1aW50OF90PiYmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBudWxscHRyLCBpbnQgPSAwKTsKKyAgICB2b2lkIHNl
bmQoU3RyaW5nJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpOworICAg
IHZvaWQgcmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+
JiYpPiYmKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oV0lO
KSAmJiBIQVZFKFNTTCkKKyAgICBib29sIGFjY2VwdFNTTENvbm5lY3Rpb24oRVZQX1BLRVkqLCBY
NTA5Kik7CisgICAgc3RhdGljIHZvaWQgc2VuZEJ5dGVzUHJvY2VzcyhHZW5lcmljQ29ubmVjdGlv
biYmLCBWZWN0b3I8dWludDhfdD4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gbnVs
bHB0ciwgaW50ID0gMCk7CisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZUJ5dGVzUHJvY2VzcyhHZW5l
cmljQ29ubmVjdGlvbiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYm
KT4mJik7CisKKyAgICBTU0wqIG1fc3NsIHsgbnVsbHB0ciB9OworICAgIFNvY2tldDo6U29ja2V0
IG1fc29ja2V0IHsgU29ja2V0OjpJbnZhbGlkU29ja2V0IH07CisKKyNlbGlmIFBMQVRGT1JNKENP
Q09BKQorICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKKyAgICBi
b29sIG1faW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworCisjZW5kaWYKK307CisKKworY2xhc3MgR2Vu
ZXJpY0xpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFByb3RvY29sIDogdWludDhf
dCB7IEh0dHAsIEh0dHBzLCBIdHRwc1dpdGhMZWdhY3lUTFMgfTsKKworICAgIEdlbmVyaWNMaXN0
ZW5lcigpOworICAgIH5HZW5lcmljTGlzdGVuZXIoKTsKKworICAgIFByb3RvY29sIHByb3RvY29s
KCkgeyByZXR1cm4gbV9wcm90b2NvbDsgfQorICAgIHZvaWQgc2V0UHJvdG9jb2woUHJvdG9jb2wg
cHJvdG9jb2wpIHsgbV9wcm90b2NvbCA9IHByb3RvY29sOyB9CisgICAgdm9pZCBzZXRJZGVudGl0
eShzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY1ByaXZhdGVLZXk+JiYgcHJpdmF0ZUtleSwgc3RkOjp1
bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4mJiBjZXJ0aWZpY2F0ZSkKKyAgICB7CisgICAg
ICAgIG1fcHJpdmF0ZUtleSA9IFdURk1vdmUocHJpdmF0ZUtleSk7CisgICAgICAgIG1fY2VydGlm
aWNhdGUgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKTsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWQo
KTsKKyAgICB1aW50MTZfdCBwb3J0KCk7CisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgY2Fu
Y2VsKCk7CisgICAgdm9pZCByZWdpc3RlckhhbmRsZXIoRnVuY3Rpb248dm9pZChHZW5lcmljQ29u
bmVjdGlvbiYmKT4mJik7CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZChHZW5lcmljQ29u
bmVjdGlvbiYmKT4gbV9jb25uZWN0aW9uSGFuZGxlcjsKKworICAgIFByb3RvY29sIG1fcHJvdG9j
b2wgeyBQcm90b2NvbDo6SHR0cCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0
ZUtleT4gbV9wcml2YXRlS2V5IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5l
cmljQ2VydGlmaWNhdGU+IG1fY2VydGlmaWNhdGUgeyBudWxscHRyIH07CisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hMaXN0ZW5pbmcoR2VuZXJpY0xpc3RlbmVy
Kik7CisKKyAgICBTb2NrZXQ6OlNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IFNvY2tldDo6SW52
YWxpZFNvY2tldCB9OworICAgIHVpbnQxNl90IG1fcG9ydDsKKyAgICBib29sIG1fbGlzdGVuaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fbGlzdGVuaW5nU3RvcHBlZCB7IGZhbHNlIH07CisjZWxp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMgUmV0YWluUHRyPFNlY0lkZW50aXR5UmVmPiBj
cmVhdGVJZGVudGl0eShHZW5lcmljQ2VydGlmaWNhdGUmLCBHZW5lcmljUHJpdmF0ZUtleSYpOwor
ICAgIFJldGFpblB0cjxud19saXN0ZW5lcl90PiBtX2xpc3RlbmVyOworI2VuZGlmCit9OworCisK
K30gLy8gbmFtZXNwYWNkZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL0dlbmVyaWNDb25uZWN0aW9uUE9TSVguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9H
ZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjlhNTViMjBlZTI0ZGRhN2Yz
M2QzNjU2MDczOWNiZWI4MmIxNGViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9HZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcApAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VuZXJpY0Nvbm5lY3Rp
b24uaCIKKworI2luY2x1ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorCisKK3N0YXRpYyBjb25zdCBmbG9hdCBQb2xsaW5nSW50ZXJ2YWxJ
blNlY29uZHMgPSAwLjAyOyAvLyAyMG1zCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
I2lmIEhBVkUoU1NMKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKQoreworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzc2xJbml0aWFsaXplZDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShzc2xJbml0aWFsaXplZCwgW10geworICAgICAgICBTU0xfbGlicmFyeV9pbml0KCk7CisgICAg
fSk7Cit9CisjZW5kaWYKKworc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNDZXJ0aWZpY2F0ZT4gR2Vu
ZXJpY0NlcnRpZmljYXRlOjpjcmVhdGVGcm9tUEVNKGNvbnN0IFN0cmluZyBwZW0pCit7CisjaWYg
SEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKyAgICBhdXRvIHBlbUxhdGlu
ID0gcGVtLmxhdGluMSgpOworICAgIGF1dG8gY2VydGlmaWNhdGUgPSBXVEY6Om1ha2VVbmlxdWU8
R2VuZXJpY0NlcnRpZmljYXRlPigpOworCisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYo
cGVtTGF0aW4uZGF0YSgpLCBwZW1MYXRpbi5sZW5ndGgoKSk7CisgICAgaWYgKG1lbSkgeworICAg
ICAgICBjZXJ0aWZpY2F0ZS0+eDUwOSA9IHNzbDo6dW5pcXVlX3B0cjxYNTA5PihQRU1fcmVhZF9i
aW9fWDUwOShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgQklPX2Zy
ZWUobWVtKTsKKyAgICB9CisgICAgcmV0dXJuIGNlcnRpZmljYXRlOworI2Vsc2UKKyAgICByZXR1
cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCisKK3N0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0
ZUtleT4gR2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0oY29uc3QgU3RyaW5nIHBlbSwg
Y29uc3QgS2V5VHlwZSwgY29uc3QgaW50KQoreworI2lmIEhBVkUoU1NMKQorICAgIGluaXRpYWxp
emVTU0xMaWJyYXJ5KCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gIFdURjo6bWFrZVVuaXF1ZTxH
ZW5lcmljUHJpdmF0ZUtleT4oKTsKKyAgICBhdXRvIHBlbUxhdGluID0gcGVtLmxhdGluMSgpOwor
CisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYocGVtTGF0aW4uZGF0YSgpLCBwZW1MYXRp
bi5sZW5ndGgoKSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBwcml2YXRlS2V5LT5rZXkgPSBz
c2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+KFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KG1lbSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBCSU9fZnJlZShtZW0pOworICAgIH0K
KyAgICByZXR1cm4gcHJpdmF0ZUtleTsKKyNlbHNlCisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5k
aWYKK30KKworc3RhdGljIGJvb2wgaXNTb2NrZXRSZWFkeShTb2NrZXQ6OlNvY2tldCByZWFkU29j
a2V0LCBTb2NrZXQ6OlNvY2tldCB3cml0ZVNvY2tldCkKK3sKKyAgICBjb25zdCBpbnQgdGltZW91
dEluVXNlYyA9IDEqMTAwMDsgLy8gMSBtaWxsaXNlY29uZAorICAgIGZkX3NldCBmZHNldFJlYWQs
IGZkc2V0V3JpdGU7CisKKyAgICBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KHJlYWRTb2NrZXQp
KSB7CisgICAgICAgIEZEX1pFUk8oJmZkc2V0UmVhZCk7CisgICAgICAgIEZEX1NFVChyZWFkU29j
a2V0LCAmZmRzZXRSZWFkKTsKKyAgICB9CisgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldCh3
cml0ZVNvY2tldCkpIHsKKyAgICAgICAgRkRfWkVSTygmZmRzZXRXcml0ZSk7CisgICAgICAgIEZE
X1NFVCh3cml0ZVNvY2tldCwgJmZkc2V0V3JpdGUpOworICAgIH0KKworICAgIHN0cnVjdCB0aW1l
dmFsIHRpbWVvdXQ7CisgICAgdGltZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQudHZfdXNl
YyA9IHRpbWVvdXRJblVzZWM7CisKKyAgICBpbnQgZmRNYXggPSAocmVhZFNvY2tldCA+IHdyaXRl
U29ja2V0KSA/IHJlYWRTb2NrZXQgOiB3cml0ZVNvY2tldDsKKyAgICBhdXRvIHJjID0gOjpzZWxl
Y3QoZmRNYXggKyAxLAorICAgICAgICBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQocmVhZFNvY2tldCkg
PyAmZmRzZXRSZWFkIDogbnVsbHB0ciwKKyAgICAgICAgU29ja2V0Ojppc1ZhbGlkU29ja2V0KHdy
aXRlU29ja2V0KSA/ICZmZHNldFdyaXRlIDogbnVsbHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAg
ICAgICAgJnRpbWVvdXQpOworICAgIHJldHVybiByYyA+IDA7Cit9CisKK3N0YXRpYyBib29sIGlz
U29ja2V0UmVhZHlSZWFkaW5nKFNvY2tldDo6U29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4g
aXNTb2NrZXRSZWFkeShzb2NrZXQsIFNvY2tldDo6SW52YWxpZFNvY2tldCk7Cit9CisKK3N0YXRp
YyBib29sIGlzU29ja2V0UmVhZHlXcml0aW5nKFNvY2tldDo6U29ja2V0IHNvY2tldCkKK3sKKyAg
ICByZXR1cm4gaXNTb2NrZXRSZWFkeShTb2NrZXQ6OkludmFsaWRTb2NrZXQsIHNvY2tldCk7Cit9
CisKKworR2VuZXJpY0Nvbm5lY3Rpb246OkdlbmVyaWNDb25uZWN0aW9uKCkKK3sKK30KKworR2Vu
ZXJpY0Nvbm5lY3Rpb246On5HZW5lcmljQ29ubmVjdGlvbigpCit7Cit9CisKK2Jvb2wgR2VuZXJp
Y0Nvbm5lY3Rpb246OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBTb2NrZXQ6OmlzVmFs
aWRTb2NrZXQobV9zb2NrZXQpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9uOjpzZW5kQnl0
ZXNQcm9jZXNzKEdlbmVyaWNDb25uZWN0aW9uJiYgY29ubmVjdGlvbiwgVmVjdG9yPHVpbnQ4X3Q+
JiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
LCBpbnQgc2VudFRvdGFsKQoreworICAgIGRvIHsKKyAgICAgICAgaWYgKCFpc1NvY2tldFJlYWR5
V3JpdGluZyhjb25uZWN0aW9uLm1fc29ja2V0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGludCBzZW50OworICAgICAgICB1aW50OF90KiBwdHIgPSBtZXNzYWdlLmRhdGEoKSArIHNl
bnRUb3RhbDsKKyNpZiBIQVZFKFNTTCkKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24ubV9zc2wpCisg
ICAgICAgICAgICBzZW50ID0gU1NMX3dyaXRlKGNvbm5lY3Rpb24ubV9zc2wsIHB0ciwgbWVzc2Fn
ZS5zaXplKCkgLSBzZW50VG90YWwpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAg
IHNlbnQgPSBTb2NrZXQ6OndyaXRlKGNvbm5lY3Rpb24ubV9zb2NrZXQsIHB0ciwgbWVzc2FnZS5z
aXplKCkgLSBzZW50VG90YWwpOworCisgICAgICAgIEFTU0VSVChzZW50ID49IDApOworICAgICAg
ICBpZiAoc2VudCA8IDAgfHwgc2VudFRvdGFsICsgc2VudCA+PSBtZXNzYWdlLnNpemUoKSkgewor
ICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBzZW50VG90YWwgKz0gc2VudDsKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICBXVEY6OlJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICBTZWNvbmRzKFBvbGxpbmdJbnRl
cnZhbEluU2Vjb25kcyksCisgICAgICAgIFtjb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9u
KSwgbWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIHNlbnRUb3RhbF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBzZW5kQnl0ZXNQcm9jZXNzKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzZW50VG90YWwpOworICAgICAgICB9CisgICAg
KTsKK30KKwordm9pZCBHZW5lcmljQ29ubmVjdGlvbjo6c2VuZChWZWN0b3I8dWludDhfdD4mJiBt
ZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIGlu
dCBzZW50VG90YWwpCit7CisgICAgaWYgKCFTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9zb2NrZXQp
KSB7CisgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kQnl0ZXNQcm9j
ZXNzKFdURk1vdmUoKnRoaXMpLCBXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgMCk7Cit9CisKK3ZvaWQgR2VuZXJpY0Nvbm5lY3Rpb246OnNlbmQoU3RyaW5nJiYg
bWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlVmVjdG9yOworICAgIG1lc3NhZ2VWZWN0b3Iu
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UudXRmOCgpLmRh
dGEoKSksICBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7CisKKyAgICBzZW5kKFdURk1vdmUobWVz
c2FnZVZlY3RvciksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBHZW5l
cmljQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzUHJvY2VzcyhHZW5lcmljQ29ubmVjdGlvbiYmIGNv
bm5lY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaXNTb2NrZXRSZWFkeVJlYWRpbmcoY29ubmVj
dGlvbi5tX3NvY2tldCkpIHsKKyAgICAgICAgV1RGOjpSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hB
ZnRlcigKKyAgICAgICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAg
ICAgICAgICAgIFtjb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgcmVjZWl2ZUJ5dGVzUHJvY2VzcyhXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IDQwOTY7CisK
KyAgICB1aW50OF90IGJ1ZmZlcltidWZmZXJTaXplXTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0OworICAgIGludCBieXRlc1JlYWQgPSAtMTsKKyNpZiBIQVZFKFNTTCkKKyAgICBpZiAoY29u
bmVjdGlvbi5tX3NzbCAmJiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQoY29ubmVjdGlvbi5tX3NvY2tl
dCkpCisgICAgICAgIGJ5dGVzUmVhZCA9IFNTTF9yZWFkKGNvbm5lY3Rpb24ubV9zc2wsIGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoU29ja2V0
Ojppc1ZhbGlkU29ja2V0KGNvbm5lY3Rpb24ubV9zb2NrZXQpKQorICAgICAgICAgICAgYnl0ZXNS
ZWFkID0gU29ja2V0OjpyZWFkKGNvbm5lY3Rpb24ubV9zb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlcikpOworCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnVmZmVyLCBieXRlc1JlYWQpOworICAgIGVsc2UKKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgp
OworCisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9uOjpyZWNlaXZl
Qnl0ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgcmVjZWl2ZUJ5dGVzUHJvY2VzcyhXVEZNb3ZlKCp0aGlzKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9u
OjpjbG9zZSgpCit7CisgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldChtX3NvY2tldCkpIHsK
KyAgICAgICAgU29ja2V0OjpzaHV0ZG93bihtX3NvY2tldCk7CisgICAgICAgIFNvY2tldDo6Y2xv
c2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsK
KyAgICB9Cit9CisKKyNpZiBIQVZFKFNTTCkKK2Jvb2wgR2VuZXJpY0Nvbm5lY3Rpb246OmFjY2Vw
dFNTTENvbm5lY3Rpb24oRVZQX1BLRVkqIHByaXZhdGVLZXksIFg1MDkqIHg1MDkpCit7CisgICAg
aW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKworICAgIFNTTF9DVFgqIGNvbnRleHQgPSBTU0xfQ1RY
X25ldyhUTFNfbWV0aG9kKCkpOworCisgICAgaW50IGNlcnRJbnQsIGtleUludDsKKyAgICBpZiAo
eDUwOSkKKyAgICAgICAgY2VydEludCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGNvbnRleHQs
IHg1MDkpOworICAgIGlmIChwcml2YXRlS2V5KQorICAgICAgICBrZXlJbnQgPSBTU0xfQ1RYX3Vz
ZV9Qcml2YXRlS2V5KGNvbnRleHQsIHByaXZhdGVLZXkpOworCisgICAgbV9zc2wgPSBTU0xfbmV3
KGNvbnRleHQpOworICAgIFNTTF9zZXRfZmQobV9zc2wsIG1fc29ja2V0KTsKKyAgICBib29sIGFj
Y2VwdGVkID0gU1NMX2FjY2VwdChtX3NzbCkgPiAwOworICAgIFNTTF9DVFhfZnJlZShjb250ZXh0
KTsKKworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RkOjpvcHRp
b25hbDwgc3RkOjpwYWlyPFNvY2tldDo6U29ja2V0LCB1aW50MTZfdD4gPiBjcmVhdGVMaXN0ZW5p
bmdTb2NrZXQoKQoreworICAgIGNvbnN0IGludCBCYWNrbG9nID0gODsKKyAgICBhdXRvIGxpc3Rl
bmluZ1NvY2tldCA9IFNvY2tldDo6c29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAg
ICBpZiAoIVNvY2tldDo6aXNWYWxpZFNvY2tldChsaXN0ZW5pbmdTb2NrZXQpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgLy8gUG9ydHMgNDkxNTItNjU1MzUgYXJlIHVuYWxs
b2NhdGVkIHBvcnRzLiBUcnkgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGZyZWUuCisgICAgZm9y
ICh1aW50MTZfdCBwb3J0ID0gNDkxNTI7IHBvcnQgPD0gNjU1MzU7IHBvcnQrKykgeworICAgICAg
ICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKKyAgICAgICAgbWVtc2V0KCZuYW1lLCAwLCBzaXpl
b2YobmFtZSkpOworICAgICAgICBuYW1lLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBu
YW1lLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIG5hbWUuc2luX2FkZHIuc19hZGRy
ID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIGlmIChiaW5kKGxpc3RlbmluZ1NvY2tldCwg
cmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6ZW9mKG5hbWUpKSA8IDApIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgcG9ydCBpcyBidXN5LiBUcnkgdGhlIG5leHQgcG9ydC4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICg6Omxpc3RlbihsaXN0
ZW5pbmdTb2NrZXQsIEJhY2tsb2cpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgICAgU29j
a2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsaXN0ZW5p
bmdTb2NrZXQsIHBvcnQpOyAvLyBTdWNjZXNzZnVsbHkgc2V0IHVwIGxpc3RlbmluZyBwb3J0Lgor
ICAgIH0KKworICAgIC8vIENvdWxkbid0IGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQuCisgICAgU29j
a2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKK0dlbmVyaWNMaXN0ZW5lcjo6R2VuZXJpY0xpc3RlbmVyKCkKK3sKK30KKworR2VuZXJpY0xp
c3RlbmVyOjp+R2VuZXJpY0xpc3RlbmVyKCkKK3sKKyAgICBjYW5jZWwoKTsKK30KKworYm9vbCBH
ZW5lcmljTGlzdGVuZXI6OmlzVmFsaWQoKQoreworICAgIHJldHVybiBTb2NrZXQ6OmlzVmFsaWRT
b2NrZXQobV9saXN0ZW5pbmdTb2NrZXQpOworfQorCit1aW50MTZfdCBHZW5lcmljTGlzdGVuZXI6
OnBvcnQoKQoreworICAgIHJldHVybiBtX3BvcnQ7Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVy
OjpzdGFydCgpCit7CisgICAgaWYgKG1fbGlzdGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHNvY2tldF9wb3J0ID0gY3JlYXRlTGlzdGVuaW5nU29ja2V0KCk7CisgICAgaWYgKCFz
b2NrZXRfcG9ydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBz
b2NrZXRfcG9ydC0+Zmlyc3Q7CisgICAgbV9wb3J0ID0gc29ja2V0X3BvcnQtPnNlY29uZDsKKyAg
ICBtX2xpc3RlbmluZ1N0b3BwZWQgPSBmYWxzZTsKKyAgICBtX2xpc3RlbmluZyA9IHRydWU7Cisg
ICAgZGlzcGF0Y2hMaXN0ZW5pbmcodGhpcyk7Cit9CisKK3ZvaWQgR2VuZXJpY0xpc3RlbmVyOjpj
YW5jZWwoKQoreworICAgIGlmICghbV9saXN0ZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbGlzdGVuaW5nU3RvcHBlZCA9IGZhbHNlOworICAgIG1fbGlzdGVuaW5nID0gZmFsc2U7Cisg
ICAgVXRpbDo6cnVuKCZtX2xpc3RlbmluZ1N0b3BwZWQpOworfQorCit2b2lkIEdlbmVyaWNMaXN0
ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoR2VuZXJpY0Nvbm5lY3Rpb24mJik+
JiYgaGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25IYW5kbGVyID0gV1RGTW92ZShoYW5kbGVy
KTsKK30KKwordm9pZCBHZW5lcmljTGlzdGVuZXI6OmRpc3BhdGNoTGlzdGVuaW5nKEdlbmVyaWNM
aXN0ZW5lciogc2VsZikKK3sKKyAgICBpZiAoaXNTb2NrZXRSZWFkeVJlYWRpbmcoc2VsZi0+bV9s
aXN0ZW5pbmdTb2NrZXQpKSB7CisgICAgICAgIEdlbmVyaWNDb25uZWN0aW9uIHJlc3BvbnNlQ29u
bmVjdGlvbjsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgICAgIG1lbXNl
dCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgaW50IGxlbiA9IHNpemVvZihhZGRy
KTsKKyAgICAgICAgcmVzcG9uc2VDb25uZWN0aW9uLm1fc29ja2V0ID0gOjphY2NlcHQoc2VsZi0+
bV9saXN0ZW5pbmdTb2NrZXQsIChzb2NrYWRkciopJmFkZHIsICZsZW4pOworCisgICAgICAgIGJv
b2wgYWNjZXB0ZWQgPSByZXNwb25zZUNvbm5lY3Rpb24uaXNWYWxpZCgpOworI2lmIEhBVkUoU1NM
KQorICAgICAgICBib29sIHNzbENvbm5lY3Rpb24gPSBzZWxmLT5tX3Byb3RvY29sID09IEdlbmVy
aWNMaXN0ZW5lcjo6UHJvdG9jb2w6Okh0dHBzICYmIHNlbGYtPm1fcHJpdmF0ZUtleSAmJiBzZWxm
LT5tX2NlcnRpZmljYXRlOworICAgICAgICBpZiAoYWNjZXB0ZWQgJiYgc3NsQ29ubmVjdGlvbikK
KyAgICAgICAgICAgIGFjY2VwdGVkID0gcmVzcG9uc2VDb25uZWN0aW9uLmFjY2VwdFNTTENvbm5l
Y3Rpb24oc2VsZi0+bV9wcml2YXRlS2V5LT5rZXkuZ2V0KCksIHNlbGYtPm1fY2VydGlmaWNhdGUt
Png1MDkuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGlmIChhY2NlcHRlZCAmJiBzZWxmLT5tX2Nv
bm5lY3Rpb25IYW5kbGVyKSB7CisgICAgICAgICAgICBXVEY6OlJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaEFmdGVyKAorICAgICAgICAgICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNv
bmRzKSwKKyAgICAgICAgICAgICAgICBbJiwgc2VsZiwgcmVzcG9uc2VDb25uZWN0aW9uID0gV1RG
TW92ZShyZXNwb25zZUNvbm5lY3Rpb24pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi0+bV9jb25uZWN0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlQ29ubmVjdGlvbikp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcmVzcG9uc2VDb25uZWN0aW9uLmNsb3NlKCk7CisgICAgfQorCisgICAgaWYgKHNl
bGYtPm1fbGlzdGVuaW5nICYmIHNlbGYtPmlzVmFsaWQoKSkgeworICAgICAgICBXVEY6OlJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAgICAgU2Vjb25kcyhQb2xsaW5nSW50
ZXJ2YWxJblNlY29uZHMpLAorICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgIGRp
c3BhdGNoTGlzdGVuaW5nKHNlbGYpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFNvY2tldDo6Y2xvc2Uoc2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQpOwor
ICAgICAgICBzZWxmLT5tX2xpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsK
KyAgICAgICAgc2VsZi0+bV9saXN0ZW5pbmdTdG9wcGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvR2VuZXJpY0hUVFBSZXF1ZXN0UmVzcG9uc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9H
ZW5lcmljSFRUUFJlcXVlc3RSZXNwb25zZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFkMDhhOTg4NjY1NmU4
YWFjZGE1Y2NhZWIwZDE5MjRkYmIwOTljOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvR2VuZXJpY0hUVFBSZXF1ZXN0UmVzcG9uc2UuY3BwCkBAIC0wLDAgKzEsOTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZW5lcmljSFRU
UFJlcXVlc3RSZXNwb25zZS5oIgorCisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyBTdHJpbmcgc3RhdHVzVGV4dCh1
bnNpZ25lZCBzdGF0dXNDb2RlKQoreworICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgeworICAgIGNh
c2UgMTAxOgorICAgICAgICByZXR1cm4gIlN3aXRjaGluZyBQcm90b2NvbHMiX3M7CisgICAgY2Fz
ZSAyMDA6CisgICAgICAgIHJldHVybiAiT0siX3M7CisgICAgY2FzZSAzMDE6CisgICAgICAgIHJl
dHVybiAiTW92ZWQgUGVybWFuZW50bHkiX3M7CisgICAgY2FzZSA0MDE6CisgICAgICAgIHJldHVy
biAiVW5hdXRob3JpemVkIl9zOworICAgIGNhc2UgNDA0OgorICAgICAgICByZXR1cm4gIk5vdCBG
b3VuZCJfczsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kVVRGOFRvVmVjdG9yKFZlY3Rvcjx1aW50OF90PiYg
dmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBhdXRvIHV0ZjggPSBzdHJpbmcu
dXRmOCgpOworICAgIHZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEdl
bmVyaWNIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVVRGOFRvVmVjdG9yKHZl
Y3Rvciwgc3RyaW5nKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCitWZWN0b3I8dWludDhfdD4g
R2VuZXJpY0hUVFBSZXNwb25zZTo6c2VyaWFsaXplKEluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1
ZGVDb250ZW50TGVuZ3RoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2U7Cisg
ICAgcmVzcG9uc2UuYXBwZW5kKCJIVFRQLzEuMSAiKTsKKyAgICByZXNwb25zZS5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIoc3RhdHVzQ29kZSkpOworICAgIHJlc3BvbnNlLmFwcGVuZCgiICIpOworICAg
IHJlc3BvbnNlLmFwcGVuZChzdGF0dXNUZXh0KHN0YXR1c0NvZGUpKTsKKyAgICByZXNwb25zZS5h
cHBlbmQoIlxyXG4iKTsKKworICAgIGZvciAoYXV0byBrZXkgOiBoZWFkZXJGaWVsZHMua2V5cygp
KSB7CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChrZXkpOworICAgICAgICByZXNwb25zZS5hcHBl
bmQoIjoiKTsKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGhlYWRlckZpZWxkcy5nZXQoa2V5KSk7
CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgiXHJcbiIpOworICAgIH0KKworICAgIGlmIChpbmNs
dWRlQ29udGVudExlbmd0aCA9PSBJbmNsdWRlQ29udGVudExlbmd0aDo6WWVzKSB7CisgICAgICAg
IHJlc3BvbnNlLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6Iik7CisgICAgICAgIHJlc3BvbnNlLmFw
cGVuZChTdHJpbmc6Om51bWJlcihib2R5LnNpemVJbkJ5dGVzKCkpKTsKKyAgICB9CisKKyAgICBy
ZXNwb25zZS5hcHBlbmQoIlxyXG5cclxuIik7CisKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9u
c2VWZWN0b3I7CisgICAgYXBwZW5kVVRGOFRvVmVjdG9yKHJlc3BvbnNlVmVjdG9yLCByZXNwb25z
ZS50b1N0cmluZygpKTsKKyAgICByZXNwb25zZVZlY3Rvci5hcHBlbmRWZWN0b3IoYm9keSk7Cisg
ICAgcmV0dXJuIHJlc3BvbnNlVmVjdG9yOworfQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL0dlbmVyaWNIVFRQUmVxdWVzdFJlc3BvbnNlLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0dlbmVyaWNIVFRQUmVxdWVzdFJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUwNTAxNTI0N2Fk
YTc1ZjA0NjlmMzdjOTE1ODc3ZWE1MzkwMTU1ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBSZXF1ZXN0UmVzcG9uc2UuaApAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CitzdHJ1Y3QgR2VuZXJpY0hUVFBSZXNw
b25zZSB7CisgICAgZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9Owor
CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShWZWN0b3I8dWludDhfdD4mJiBib2R5KQorICAgICAg
ICA6IGJvZHkoV1RGTW92ZShib2R5KSkgeyB9CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShjb25z
dCBTdHJpbmcmIGJvZHkpCisgICAgICAgIDogYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9
CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRl
ckZpZWxkcywgU3RyaW5nJiYgYm9keSkKKyAgICAgICAgOiBoZWFkZXJGaWVsZHMoV1RGTW92ZSho
ZWFkZXJGaWVsZHMpKQorICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQor
ICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIFN0cmluZyYmIGJvZHkgPSB7IH0pCisg
ICAgICAgIDogc3RhdHVzQ29kZShzdGF0dXNDb2RlKQorICAgICAgICAsIGhlYWRlckZpZWxkcyhX
VEZNb3ZlKGhlYWRlckZpZWxkcykpCisgICAgICAgICwgYm9keShib2R5RnJvbVN0cmluZyhib2R5
KSkgeyB9CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZShUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1p
bmF0ZUNvbm5lY3Rpb24pCisgICAgICAgIDogdGVybWluYXRlQ29ubmVjdGlvbih0ZXJtaW5hdGVD
b25uZWN0aW9uKSB7IH0KKworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UoY29uc3QgR2VuZXJpY0hU
VFBSZXNwb25zZSYpID0gZGVmYXVsdDsKKyAgICBHZW5lcmljSFRUUFJlc3BvbnNlKEdlbmVyaWNI
VFRQUmVzcG9uc2UmJikgPSBkZWZhdWx0OworICAgIEdlbmVyaWNIVFRQUmVzcG9uc2UoKSA9IGRl
ZmF1bHQ7CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZSYgb3BlcmF0b3I9KGNvbnN0IEdlbmVyaWNI
VFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7CisgICAgR2VuZXJpY0hUVFBSZXNwb25zZSYgb3BlcmF0
b3I9KEdlbmVyaWNIVFRQUmVzcG9uc2UmJikgPSBkZWZhdWx0OworCisgICAgc3RhdGljIFZlY3Rv
cjx1aW50OF90PiBib2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIHVuc2lnbmVk
IHN0YXR1c0NvZGUgeyAyMDAgfTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJG
aWVsZHM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJvZHk7CisgICAgVGVybWluYXRlQ29ubmVjdGlv
biB0ZXJtaW5hdGVDb25uZWN0aW9uIHsgVGVybWluYXRlQ29ubmVjdGlvbjo6Tm8gfTsKKworICAg
IGVudW0gY2xhc3MgSW5jbHVkZUNvbnRlbnRMZW5ndGggOiBib29sIHsgTm8sIFllcyB9OworICAg
IFZlY3Rvcjx1aW50OF90PiBzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJbmNsdWRl
Q29udGVudExlbmd0aDo6WWVzKSBjb25zdDsKK307CisKK3N0cnVjdCBHZW5lcmljSFRUUFJlcXVl
c3QgeworICAgIFN0cmluZyBwYXRoOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRl
ckZpZWxkczsKKyAgICBTdHJpbmcgYm9keTsKKyAgICBib29sIGNvbXBsZXRlIHsgZmFsc2UgfTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljSFRUUFNlcnZlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzEwYWJkM2VlMmZkNTRmYjI0ZmE2OTIyNmVkNmRhMzY5MjA5NGRhNQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwCkBAIC0w
LDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR2VuZXJpY0hUVFBTZXJ2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjb25zdCBHZW5lcmljSFRUUFJlc3Bv
bnNlIFJlc3BvbnNlTm90Rm91bmQgPSB7CisgICAgNDA0LAorICAgIHsgfSwKKyAgICAiPGh0bWw+
PGhlYWQ+PHRpdGxlPjQwNCBOb3QgRm91bmQ8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5Pjxo
MT5GaWxlIG5vdCBmb3VuZDwvaDE+PC9ib2R5PjwvaHRtbD4iCit9OworCisKK3ZvaWQgR2VuZXJp
Y0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZXMoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6
cGFpcjxTdHJpbmcsIEdlbmVyaWNIVFRQUmVzcG9uc2U+PiBwYXRoUmVzcG9uc2VMaXN0KQorewor
ICAgIGZvciAoYXV0byYgcGFpciA6IHBhdGhSZXNwb25zZUxpc3QpCisgICAgICAgIG1fcGF0aFJl
c3BvbnNlTWFwLnNldChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7Cit9CisKK3ZvaWQgR2VuZXJp
Y0hUVFBTZXJ2ZXI6OnNldEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVudGljYXRpb24oU3RyaW5n
IHBhdGgsIFN0cmluZyB1c2VyTmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBHZW5lcmljSFRUUFJlc3Bv
bnNlIHVuYXV0aG9yaXplZFJlc3BvbnNlLCBHZW5lcmljSFRUUFJlc3BvbnNlIGF1dGhvcml6ZWRS
ZXNwb25zZSkKK3sKKyAgICBtX3BhdGhSZXNwb25zZU1hcC5zZXQocGF0aCwgdW5hdXRob3JpemVk
UmVzcG9uc2UpOworICAgIG1fcGF0aFJlc3BvbnNlTWFwRm9yQmFzaWNBdXRoZW50aWNhdGlvbi5z
ZXQocGF0aCwgYXV0aG9yaXplZFJlc3BvbnNlKTsKKworICAgIG1fYmFzaWNVc2VyTmFtZVBhc3N3
b3JkID0ge3VzZXJOYW1lLCBwYXNzd29yZH07Cit9CisKK3ZvaWQgR2VuZXJpY0hUVFBTZXJ2ZXI6
OnJlY2VpdmVIVFRQUmVxdWVzdChHZW5lcmljQ29ubmVjdGlvbiYmIGNvbm5lY3Rpb24sIFZlY3Rv
cjx1aW50OF90PiYmIGJ1ZmZlciA9IHsgfSkKK3sKKyAgICBjb25uZWN0aW9uLnJlY2VpdmVCeXRl
cyhbJiwgdGhpcywgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpLCBjb25uZWN0aW9uID0gV1RGTW92
ZShjb25uZWN0aW9uKV0gKFZlY3Rvcjx1aW50OF90PiYmIHJlY2VpdmVCdWZmZXIpIG11dGFibGUg
eworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKChyZWNlaXZlQnVmZmVyKSk7CisKKyAgICAg
ICAgYXV0byByZXF1ZXN0ID0gcGFyc2VIVFRQUmVxdWVzdChidWZmZXIpOworICAgICAgICBpZiAo
IWNvbm5lY3Rpb24uaXNWYWxpZCgpIHx8IHJlcXVlc3QuY29tcGxldGUpIHsKKyAgICAgICAgICAg
IGlmIChiYXNpY0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQocmVxdWVzdCkpCisgICAgICAgICAgICAg
ICAgc2VuZEhUVFBSZXNwb25zZUZvckJhc2ljQXV0aGVudGljYXRpb24oV1RGTW92ZShjb25uZWN0
aW9uKSwgV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2VuZEhUVFBSZXNwb25zZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKHJlcXVlc3Qp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWNlaXZlSFRUUFJlcXVlc3QoV1RGTW92
ZShjb25uZWN0aW9uKSwgV1RGTW92ZShidWZmZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBHZW5l
cmljSFRUUFNlcnZlcjo6c2VuZEhUVFBSZXNwb25zZShHZW5lcmljQ29ubmVjdGlvbiYmIGNvbm5l
Y3Rpb24sIEdlbmVyaWNIVFRQUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHJlc3BvbnNlVmVjdG9yOworICAgIGlmIChtX3BhdGhSZXNwb25zZU1hcC5jb250YWlucyhy
ZXF1ZXN0LnBhdGgpKQorICAgICAgICByZXNwb25zZVZlY3RvciA9IG1fcGF0aFJlc3BvbnNlTWFw
LmdldChyZXF1ZXN0LnBhdGgpLnNlcmlhbGl6ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmVzcG9u
c2VWZWN0b3IgPSBSZXNwb25zZU5vdEZvdW5kLnNlcmlhbGl6ZSgpOworCisgICAgY29ubmVjdGlv
bi5zZW5kKFdURk1vdmUocmVzcG9uc2VWZWN0b3IpLCBbY29ubmVjdGlvbiA9IFdURk1vdmUoY29u
bmVjdGlvbildICgpIG11dGFibGUgeworICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7CisgICAg
fSk7Cit9CisKK2Jvb2wgR2VuZXJpY0hUVFBTZXJ2ZXI6OmJhc2ljQXV0aGVudGljYXRpb25SZXF1
aXJlZChHZW5lcmljSFRUUFJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIG1fcGF0aFJl
c3BvbnNlTWFwLmNvbnRhaW5zKHJlcXVlc3QucGF0aCkgJiYgbV9wYXRoUmVzcG9uc2VNYXBGb3JC
YXNpY0F1dGhlbnRpY2F0aW9uLmNvbnRhaW5zKHJlcXVlc3QucGF0aCk7Cit9CisKK3N0YXRpYyBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gcGFyc2VBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwoU3RyaW5n
IHR5cGUsIFN0cmluZyBoZWFkZXJMaW5lKQoreworICAgIGF1dG8gZm91bmQgPSBoZWFkZXJMaW5l
LmZpbmQodHlwZSk7CisgICAgaWYgKGZvdW5kID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgYXV0byB2YWx1ZSA9IGhlYWRlckxpbmUuc3Vic3RyaW5nKGZv
dW5kICsgdHlwZS5sZW5ndGgoKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIHdoaWxl
IChpbmRleCA8IHZhbHVlLmxlbmd0aCgpICYmIHZhbHVlW2luZGV4XSA9PSB1JyAnKQorICAgICAg
ICBpbmRleCsrOworCisgICAgaWYgKGluZGV4ID09IHZhbHVlLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpbmRleCk7
Cit9CisKK3ZvaWQgR2VuZXJpY0hUVFBTZXJ2ZXI6OnNlbmRIVFRQUmVzcG9uc2VGb3JCYXNpY0F1
dGhlbnRpY2F0aW9uKEdlbmVyaWNDb25uZWN0aW9uJiYgY29ubmVjdGlvbiwgR2VuZXJpY0hUVFBS
ZXF1ZXN0JiYgcmVxdWVzdCkKK3sKKyAgICBib29sIGF1dGhvcml6ZWQgPSBmYWxzZTsKKyAgICBp
ZiAocmVxdWVzdC5oZWFkZXJGaWVsZHMuY29udGFpbnMoIkF1dGhvcml6YXRpb24iKSkgeworICAg
ICAgICBpZiAoYXV0byBjcmVkZW50aWFsID0gcGFyc2VBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwo
IkJhc2ljIiwgcmVxdWVzdC5oZWFkZXJGaWVsZHMuZ2V0KCJBdXRob3JpemF0aW9uIikpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgdXNlclBhc3N3b3JkID0gbV9iYXNpY1VzZXJOYW1lUGFzc3dvcmQu
Zmlyc3QgKyAiOiIgKyBtX2Jhc2ljVXNlck5hbWVQYXNzd29yZC5zZWNvbmQ7CisgICAgICAgICAg
ICBhdXRvIGVuY29kZWRVc2VyUGFzc3dvcmQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyh1c2VyUGFz
c3dvcmQudXRmOCgpLmRhdGEoKSwgdXNlclBhc3N3b3JkLmxlbmd0aCgpKTsKKworICAgICAgICAg
ICAgaWYgKGNyZWRlbnRpYWwgPT0gZW5jb2RlZFVzZXJQYXNzd29yZCkKKyAgICAgICAgICAgICAg
ICBhdXRob3JpemVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZWN0b3I8dWludDhf
dD4gcmVzcG9uc2VWZWN0b3I7CisgICAgaWYgKGF1dGhvcml6ZWQpCisgICAgICAgIHJlc3BvbnNl
VmVjdG9yID0gbV9wYXRoUmVzcG9uc2VNYXBGb3JCYXNpY0F1dGhlbnRpY2F0aW9uLmdldChyZXF1
ZXN0LnBhdGgpLnNlcmlhbGl6ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmVzcG9uc2VWZWN0b3Ig
PSBtX3BhdGhSZXNwb25zZU1hcC5nZXQocmVxdWVzdC5wYXRoKS5zZXJpYWxpemUoKTsKKworICAg
IGNvbm5lY3Rpb24uc2VuZChXVEZNb3ZlKHJlc3BvbnNlVmVjdG9yKSwgW2Nvbm5lY3Rpb24gPSBX
VEZNb3ZlKGNvbm5lY3Rpb24pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY29ubmVjdGlvbi5jbG9z
ZSgpOworICAgIH0pOworfQorCit2b2lkIEdlbmVyaWNIVFRQU2VydmVyOjpzdGFydCgpCit7Cisg
ICAgbV9saXN0ZW5lci5yZWdpc3RlckhhbmRsZXIoWyZdIChHZW5lcmljQ29ubmVjdGlvbiYmIGNv
bm5lY3Rpb24pIHsKKyAgICAgICAgdGhpcy0+cmVjZWl2ZUhUVFBSZXF1ZXN0KFdURk1vdmUoY29u
bmVjdGlvbikpOworICAgIH0pOworCisgICAgbV9saXN0ZW5lci5zdGFydCgpOworfQorCit2b2lk
IEdlbmVyaWNIVFRQU2VydmVyOjpzdG9wKCkKK3sKKyAgICBtX2xpc3RlbmVyLmNhbmNlbCgpOwor
fQorCitHZW5lcmljSFRUUFJlcXVlc3QgR2VuZXJpY0hUVFBTZXJ2ZXI6OnBhcnNlSFRUUFJlcXVl
c3QoVmVjdG9yPHVpbnQ4X3Q+JiByZXF1ZXN0VmVjdG9yKQoreworICAgIGNvbnN0IFN0cmluZyBz
ZXBhcmF0b3IoIlxyXG5cclxuIik7CisKKyAgICBHZW5lcmljSFRUUFJlcXVlc3QgcmVxdWVzdDsK
KyAgICBTdHJpbmcgcmVxdWVzdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdFZlY3Rv
ci5kYXRhKCksIHJlcXVlc3RWZWN0b3Iuc2l6ZSgpKTsKKyAgICBhdXRvIGhlYWRlckJvZHlTZXBh
cmF0b3IgPSByZXF1ZXN0U3RyaW5nLmZpbmQoc2VwYXJhdG9yKTsKKworICAgIGlmIChoZWFkZXJC
b2R5U2VwYXJhdG9yID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gcmVxdWVzdDsKKworICAg
IGF1dG8gaGVhZGVyU3RyaW5nID0gcmVxdWVzdFN0cmluZy5zdWJzdHJpbmcoMCwgaGVhZGVyQm9k
eVNlcGFyYXRvcik7CisgICAgYXV0byBib2R5U3RyaW5nID0gcmVxdWVzdFN0cmluZy5zdWJzdHJp
bmcoaGVhZGVyQm9keVNlcGFyYXRvciArIHNlcGFyYXRvci5sZW5ndGgoKSk7CisKKyAgICBhdXRv
IGhlYWRlckxpbmVzID0gaGVhZGVyU3RyaW5nLnNwbGl0KCJcclxuIik7CisgICAgYXV0byBmaXJz
dEVsZW1lbnRzID0gaGVhZGVyTGluZXNbMF0uc3BsaXQoIiAiKTsKKyAgICBpZiAoZmlyc3RFbGVt
ZW50cy5zaXplKCkgPj0gMikKKyAgICAgICAgcmVxdWVzdC5wYXRoID0gZmlyc3RFbGVtZW50c1sx
XTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgaGVhZGVyTGluZXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9IGhlYWRlckxpbmVzW2ldLnNwbGl0KCI6Iik7
CisgICAgICAgIGlmIChoZWFkZXJWYWx1ZS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgIHJlcXVl
c3QuaGVhZGVyRmllbGRzLnNldChoZWFkZXJWYWx1ZVswXSwgaGVhZGVyVmFsdWVbMV0pOworICAg
IH0KKworICAgIGlmIChyZXF1ZXN0LmhlYWRlckZpZWxkcy5jb250YWlucygiQ29udGVudC1MZW5n
dGgiKSkgeworICAgICAgICBpbnQgY29udGVudExlbmd0aCA9IGF0b2kocmVxdWVzdC5oZWFkZXJG
aWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBBU1NF
UlQoY29udGVudExlbmd0aCA+PSAwKTsKKyAgICAgICAgaWYgKGJvZHlTdHJpbmcuc2l6ZUluQnl0
ZXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29udGVudExlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVxdWVzdDsKKyAgICAgICAgcmVxdWVzdC5ib2R5ID0gYm9keVN0cmluZzsKKyAgICB9
CisKKyAgICByZXF1ZXN0LmNvbXBsZXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30K
KwordWludDE2X3QgR2VuZXJpY0hUVFBTZXJ2ZXI6OnBvcnQoKQoreworICAgIHJldHVybiBtX2xp
c3RlbmVyLnBvcnQoKTsKK30KKworVVJMIEdlbmVyaWNIVFRQU2VydmVyOjp1cmwoU3RyaW5nIHBh
dGgpCit7CisgICAgU3RyaW5nQnVpbGRlciB1cmxTdHJpbmc7CisKKyAgICBzd2l0Y2ggKG1fbGlz
dGVuZXIucHJvdG9jb2woKSkgeworICAgIGNhc2UgR2VuZXJpY0xpc3RlbmVyOjpQcm90b2NvbDo6
SHR0cHM6CisgICAgICAgIHVybFN0cmluZy5hcHBlbmQoImh0dHBzOi8vMTI3LjAuMC4xLyIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlbmVyaWNMaXN0ZW5lcjo6UHJvdG9jb2w6Okh0dHA6
CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXJsU3RyaW5nLmFwcGVuZCgiaHR0cDovLzEyNy4wLjAu
MS8iKTsKKyAgICB9CisKKyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICB1cmxTdHJp
bmcuYXBwZW5kKHBhdGgpOworCisgICAgVVJMIHNlcnZlclVSTChVUkwoKSwgdXJsU3RyaW5nLnRv
U3RyaW5nKCkpOworICAgIHNlcnZlclVSTC5zZXRQb3J0KG1fbGlzdGVuZXIucG9ydCgpKTsKKwor
ICAgIHJldHVybiBzZXJ2ZXJVUkw7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvR2VuZXJpY0hUVFBTZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR2VuZXJpY0hU
VFBTZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzUxMzE4ZDExMGZiYTM0NTUxMWEwMDYxNGRjNDhmNzdl
NDllY2YzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HZW5lcmljSFRU
UFNlcnZlci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiR2VuZXJpY0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJHZW5lcmljSFRUUFJl
cXVlc3RSZXNwb25zZS5oIgorCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRl
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBHZW5lcmljSFRUUFNlcnZlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHVpbnQxNl90
IHBvcnQoKTsKKyAgICBVUkwgdXJsKFN0cmluZyBwYXRoID0geyB9KTsKKworICAgIHZvaWQgc2V0
UHJvdG9jb2woR2VuZXJpY0xpc3RlbmVyOjpQcm90b2NvbCBwcm90b2NvbCkKKyAgICB7CisgICAg
ICAgIG1fbGlzdGVuZXIuc2V0UHJvdG9jb2wocHJvdG9jb2wpOworICAgIH0KKyAgICB2b2lkIHNl
dElkZW50aXR5KHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljUHJpdmF0ZUtleT4mJiBwcml2YXRlS2V5
LCBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0NlcnRpZmljYXRlPiYmIGNlcnRpZmljYXRlKQorICAg
IHsKKyAgICAgICAgbV9saXN0ZW5lci5zZXRJZGVudGl0eShXVEZNb3ZlKHByaXZhdGVLZXkpLCBX
VEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRIVFRQUmVzcG9uc2Vz
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBHZW5lcmljSFRUUFJlc3Bv
bnNlPj4pOworICAgIHZvaWQgc2V0SFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlvbihT
dHJpbmcgcGF0aCwgU3RyaW5nIHVzZXJOYW1lLCBTdHJpbmcgcGFzc3dvcmQsIEdlbmVyaWNIVFRQ
UmVzcG9uc2UgdW5hdXRob3JpemVkUmVzcG9uc2UsIEdlbmVyaWNIVFRQUmVzcG9uc2UgYXV0aG9y
aXplZFJlc3BvbnNlKTsKK3ByaXZhdGU6CisgICAgc3RhdGljIEdlbmVyaWNIVFRQUmVxdWVzdCBw
YXJzZUhUVFBSZXF1ZXN0KFZlY3Rvcjx1aW50OF90PiYpOworICAgIHZvaWQgcmVjZWl2ZUhUVFBS
ZXF1ZXN0KEdlbmVyaWNDb25uZWN0aW9uJiYsIFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICB2b2lk
IHNlbmRIVFRQUmVzcG9uc2UoR2VuZXJpY0Nvbm5lY3Rpb24mJiwgR2VuZXJpY0hUVFBSZXF1ZXN0
JiYpOworCisgICAgYm9vbCBiYXNpY0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQoR2VuZXJpY0hUVFBS
ZXF1ZXN0Jik7CisgICAgdm9pZCBzZW5kSFRUUFJlc3BvbnNlRm9yQmFzaWNBdXRoZW50aWNhdGlv
bihHZW5lcmljQ29ubmVjdGlvbiYmLCBHZW5lcmljSFRUUFJlcXVlc3QmJik7CisKKyAgICBHZW5l
cmljTGlzdGVuZXIgbV9saXN0ZW5lcjsKKyAgICBIYXNoTWFwPFN0cmluZywgR2VuZXJpY0hUVFBS
ZXNwb25zZT4gbV9wYXRoUmVzcG9uc2VNYXA7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdlbmVyaWNI
VFRQUmVzcG9uc2U+IG1fcGF0aFJlc3BvbnNlTWFwRm9yQmFzaWNBdXRoZW50aWNhdGlvbjsKKyAg
ICBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IG1fYmFzaWNVc2VyTmFtZVBhc3N3b3JkOworfTsK
KworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjNTYyZGJi
MjI2Zjk5NTk2OWQ2ZTljNmFhNGFhZmU5NzM2YTAxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI3ByYWdtYSBvbmNlCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNv
Y2syLmg+CisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0
IHsKKworI2lmIE9TKFdJTkRPV1MpCit1c2luZyBTb2NrZXQgPSBTT0NLRVQ7Cit1c2luZyBzb2Nr
bGVuX3QgPSBpbnQ7Citjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2NrZXQgPSBJTlZBTElEX1NP
Q0tFVDsKKyNlbHNlCit1c2luZyBTb2NrZXQgPSBpbnQ7CisjZGVmaW5lIFNPQ0tFVF9FUlJPUiAt
MQorY29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gU09DS0VUX0VSUk9SOworI2VuZGlm
CisKK1NvY2tldCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7Citi
b29sIGlzVmFsaWRTb2NrZXQoU29ja2V0KTsKK1NvY2tldCBhY2NlcHQoU29ja2V0KTsKK2ludCBz
aHV0ZG93bihTb2NrZXQpOworaW50IGNsb3NlKFNvY2tldCk7CitpbnQgcmVhZChTb2NrZXQsIHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKK2ludCB3cml0ZShTb2NrZXQsIGNvbnN0IHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtU29ja2V0UE9TSVguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tl
dFBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlhNDVlYmM5MDc3ZDRjM2NiODYyZjM3ZWM4ZDQxZGJl
YjE1NjcwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNv
Y2tldFBPU0lYLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKworU29ja2V0IHNvY2tldChpbnQgZG9t
YWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIHJldHVybiA6OnNvY2tldChkb21h
aW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCBzb2Nr
ZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCA+PSAwOworfQorCitTb2NrZXQgYWNjZXB0KFNvY2tl
dCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6YWNjZXB0KHNvY2tldCwgbnVsbHB0ciwgbnVsbHB0
cik7Cit9CisKK2ludCBzaHV0ZG93bihTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OnNo
dXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKK30KKworaW50IGNsb3NlKFNvY2tldCBzb2NrZXQp
Cit7CisgICAgcmV0dXJuIDo6Y2xvc2Uoc29ja2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNv
Y2tldCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6cmVhZChz
b2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCisKK2ludCB3cml0ZShTb2NrZXQgc29ja2V0LCBj
b25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjp3cml0ZShz
b2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBTb2NrZXQKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XaW4uY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtl
CmluZGV4IDY3ZTVjZjQyNDM4M2E3MTQzYjEyNTc1MmQ3M2IzM2Q3N2RmNmM3NzIuLjg5ZWJhZDQ3
YjcwMjFmMzk1MTBkZGYyZDM3Mjg5MThjZWY3ZDA2MDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdpbi5jbWFrZQpAQCAtMTIzLDcgKzEyMywxMSBAQCBpZiAoRU5BQkxFX1dFQktJVCkKIAog
ICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJLaXRfU09VUkNFUwogICAgICAgICAke3Rlc3RfbWFpbl9T
T1VSQ0VTfQorICAgICAgICBHZW5lcmljQ29ubmVjdGlvblBPU0lYLmNwcAorICAgICAgICBHZW5l
cmljSFRUUFJlcXVlc3RSZXNwb25zZS5jcHAKKyAgICAgICAgR2VuZXJpY0hUVFBTZXJ2ZXIuY3Bw
CiAKKyAgICAgICAgd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcAogICAgICAgICB3aW4vUGxhdGZv
cm1VdGlsaXRpZXNXaW4uY3BwCiAgICAgICAgIHdpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCiAg
ICAgICAgIHdpbi9VdGlsaXRpZXNXaW4uY3BwCkBAIC0xMzEsNiArMTM1LDggQEAgaWYgKEVOQUJM
RV9XRUJLSVQpCiAKICAgICBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAgICAg
bGlzdChBUFBFTkQgVGVzdFdlYktpdF9TT1VSQ0VTCisgICAgICAgICAgICBUZXN0cy9XZWJLaXQv
SFRUUFNlcnZlci5jcHAKKwogICAgICAgICAgICAgVGVzdHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNh
dGVzLmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzNiYjA2NTQwYjFhNGU0ODk2ZjNlZDM4NmExMGQ4ZmYwZDJkYTM2Yi4uYTZjNDE1MDgxMzFj
YTExM2EzZDZlNjMyNDliNjk2NWQ4YjgwZWM5NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTk1LDYgKzk1LDkgQEAKIAkJMTFDMjU5OEQyMUZBNjMyNDAwNEM5RTIzIC8qIGFzeW5jLXNjcmlw
dC1sb2FkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTFDMjU5OEMyMUZBNjE4RDAwNEM5RTIzIC8qIGFzeW5jLXNjcmlwdC1sb2FkLmh0
bWwgKi87IH07CiAJCTE0M0RERTk4MjBDOTAxOEIwMDdGNzZGQSAvKiBTZWN1cml0eS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzRG
NTVEMDIwNEQ0NzFDMDAyOTQ4QzYgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9OwogCQkxNEND
NDJFNjI0QjhEOEZBMDBFNjRGNDggLyogSlNSdW5Mb29wVGltZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENDNDJFNTI0QjhEOEZBMDBFNjRGNDgg
LyogSlNSdW5Mb29wVGltZXIubW0gKi87IH07CisJCTE2NUNCMjBGMjZBMUI2NUYwMDlEOEFCMSAv
KiBHZW5lcmljSFRUUFNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNjVDQjIwRTI2QTFCNjVGMDA5RDhBQjEgLyogR2VuZXJpY0hUVFBTZXJ2
ZXIuY3BwICovOyB9OworCQkxNjVDQjIxMjI2QTFCNzY3MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5l
Y3Rpb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE2NUNCMjExMjZBMUI3NjcwMDlEOEFCMSAvKiBHZW5lcmljQ29ubmVjdGlvbkNvY29hLm1t
ICovOyB9OworCQkxNkI2REUyNzI2RERENUIxMDA0NThEMTUgLyogR2VuZXJpY0hUVFBSZXF1ZXN0
UmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTZCNkRFMjYyNkRERDVCMTAwNDU4RDE1IC8qIEdlbmVyaWNIVFRQUmVxdWVzdFJlc3BvbnNl
LmNwcCAqLzsgfTsKIAkJMUEwMkM4NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0
QjEyNUQ0QTVFMDBFM0Y0QkQgLyogZmluZC5odG1sICovOyB9OwogCQkxQTM1MjRBRTFENjNBNEZC
MDAzMTcyOUIgLyogU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEzNTI0QUMxRDYzQTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCAqLzsgfTsK
IAkJMUE0RjgxQ0YxQkRGRkQ1MzAwNEU2NzJFIC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0lu
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0Rjgx
Q0QxQkRGRkQ1MzAwNEU2NzJFIC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tICovOyB9
OwpAQCAtMTg1Myw2ICsxODU2LDEyIEBACiAJCTE0NEQ0MEVDMjIxQjQ2QTcwMDRCNDc0RiAvKiBV
VUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVVSUQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENDNDJFNTI0QjhEOEZBMDBFNjRGNDggLyog
SlNSdW5Mb29wVGltZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBKU1J1bkxvb3BUaW1lci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0Ix
MTIxNUU0NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhdHVyYXRlZEFyaXRobWV0aWNP
cGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTY1Q0IyMEQyNkEx
QjYxRTAwOUQ4QUIxIC8qIEdlbmVyaWNIVFRQU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdlbmVyaWNIVFRQU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE2NUNCMjBFMjZBMUI2NUYwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljSFRUUFNlcnZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE2NUNCMjEwMjZBMUI2RjYwMDlEOEFC
MSAvKiBHZW5lcmljQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHZW5lcmljQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNjVD
QjIxMTI2QTFCNzY3MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEdlbmVyaWNDb25uZWN0aW9uQ29jb2Eu
bW07IHBhdGggPSBjb2NvYS9HZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxNkI2REUyNTI2RERENTg2MDA0NThEMTUgLyogR2VuZXJpY0hUVFBS
ZXF1ZXN0UmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJp
Y0hUVFBSZXF1ZXN0UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTZC
NkRFMjYyNkRERDVCMTAwNDU4RDE1IC8qIEdlbmVyaWNIVFRQUmVxdWVzdFJlc3BvbnNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlbmVyaWNIVFRQUmVxdWVzdFJl
c3BvbnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwMkM4NEIxMjVENEE1
RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGZpbmQu
aHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwMkM4NEUxMjVENEE4NDAwRTNG
NEJEIC8qIEZpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMzUyNEE5MUQ2MjdCRDQwMDMx
NzI5QiAvKiBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsZXRl
ZEFkZHJlc3NPZk9wZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjY1
LDYgKzMyNzQsMTEgQEAKIAkJCQlCQzEzMUE5RTExNzEzMTdDMDBCNjk3MjcgLyogY29uZmlnLmgg
Ki8sCiAJCQkJN0M2QkJEOEIxOUNFQTYzMDAwQzFGNUUwIC8qIENvdW50ZXJzLmNwcCAqLywKIAkJ
CQk3QzZCQkQ4QTE5Q0VBNTQzMDBDMUY1RTAgLyogQ291bnRlcnMuaCAqLywKKwkJCQkxNjVDQjIx
MDI2QTFCNkY2MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb24uaCAqLywKKwkJCQkxNjVDQjIw
RTI2QTFCNjVGMDA5RDhBQjEgLyogR2VuZXJpY0hUVFBTZXJ2ZXIuY3BwICovLAorCQkJCTE2NUNC
MjBEMjZBMUI2MUUwMDlEOEFCMSAvKiBHZW5lcmljSFRUUFNlcnZlci5oICovLAorCQkJCTE2QjZE
RTI2MjZEREQ1QjEwMDQ1OEQxNSAvKiBHZW5lcmljSFRUUFJlcXVlc3RSZXNwb25zZS5jcHAgKi8s
CisJCQkJMTZCNkRFMjUyNkRERDU4NjAwNDU4RDE1IC8qIEdlbmVyaWNIVFRQUmVxdWVzdFJlc3Bv
bnNlLmggKi8sCiAJCQkJQzBBREJFN0ExMkZDQTREMDAwRDJDMTI5IC8qIEphdmFTY3JpcHRUZXN0
LmNwcCAqLywKIAkJCQlDMEFEQkU3QjEyRkNBNEQwMDBEMkMxMjkgLyogSmF2YVNjcmlwdFRlc3Qu
aCAqLywKIAkJCQlCQzU3NUJCRjEyNkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMu
Y3BwICovLApAQCAtMzMwNCw2ICszMzE4LDcgQEAKIAkJCQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZB
REIgLyogRHJhZ0FuZERyb3BTaW11bGF0b3IuaCAqLywKIAkJCQlGNDREMDY0ODFGMzk2MkUzMDAx
QTBFMjkgLyogRWRpdGluZ1Rlc3RIYXJuZXNzLmggKi8sCiAJCQkJRjQ0RDA2NDkxRjM5NjJFMzAw
MUEwRTI5IC8qIEVkaXRpbmdUZXN0SGFybmVzcy5tbSAqLywKKwkJCQkxNjVDQjIxMTI2QTFCNzY3
MDA5RDhBQjEgLyogR2VuZXJpY0Nvbm5lY3Rpb25Db2NvYS5tbSAqLywKIAkJCQk1QzdDMjRGQjIz
N0M5NzIzMDA1OTlDOTEgLyogSFRUUFNlcnZlci5oICovLAogCQkJCTVDN0MyNEZBMjM3Qzk3MjMw
MDU5OUM5MSAvKiBIVFRQU2VydmVyLm1tICovLAogCQkJCUY0NEE1MzBEMjFCODk3NjkwMERCQjk5
QyAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmggKi8sCkBAIC01NDAyLDYgKzU0MTcsNyBAQAog
CQkJCUExM0VCQkIxMUI4NzQzODAwMDA5NzExMCAvKiBCdW5kbGVQYXJhbWV0ZXJzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzdBNzA5QUUxRTNFQThCMDAwQ0E1OTY5IC8qIEJ1bmRsZVJhbmdlSGFu
ZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFREMxQTQxMUE5MjAwNDQ3QzRDIC8qIENh
bGN1bGF0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTZCNkRFMjcyNkRERDVCMTAw
NDU4RDE1IC8qIEdlbmVyaWNIVFRQUmVxdWVzdFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFDMkI4MTgwMUM4OTFFN0MwMEE1NTI5RiAvKiBDYW5jZWxGb250U3VicmVzb3VyY2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCNjFBNDExQTdFMDA0NDdDNEMgLyogQ2FuY2VsTG9h
ZEZyb21SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMDQx
MUQwQTYzRjIwMEZFQkNGMyAvKiBDYW5kaWRhdGVUZXN0cy5tbSBpbiBTb3VyY2VzICovLApAQCAt
NTg3OCw2ICs1ODk0LDcgQEAKIAkJCQk3Qzg4MkUwQTFDODBDNzY0MDA2QkY3MzEgLyogVXNlckNv
bnRlbnRXb3JsZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0I5OTIxMUQzQjQxRjYwMDM5MjJG
NiAvKiBVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTVBQTQyRjIyNTkxMjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVw
ZGF0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTE2NUNCMjBGMjZBMUI2NUYwMDlEOEFCMSAvKiBH
ZW5lcmljSFRUUFNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxNzFBNDExQUU2
MDA0NDdDNEMgLyogVXNlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OTlDMzQ5MUVC
QTJEN0IwMDNCNzUzMiAvKiBVc2VyTWVkaWFEaXNhYmxlZC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTA3RjRFOTJFMjBBRjU5RTIwMDJFMzgwMyAvKiBVc2VyTWVkaWFTaW11bGF0ZUZhaWxlZFNhbmRi
b3gubW0gaW4gU291cmNlcyAqLywKQEAgLTU5MjQsNiArNTk0MSw3IEBACiAJCQkJN0NDRTdFRDkx
QTQxMUE3RTAwNDQ3QzRDIC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDRDMkZCRTIyNUU3NTkyQzAwQUJDNzJGIC8qIFdLQXBwSGlnaGxpZ2h0cy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTJFNUM3NzA3MUZBNzAxMzYwMDU5MzJDMyAvKiBXS0F0dGFj
aG1lbnRUZXN0cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTE2NUNCMjEyMjZBMUI3NjcwMDlEOEFC
MSAvKiBHZW5lcmljQ29ubmVjdGlvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUY4MzU3
MUIxRDNGRkIyMzAwRTM5NjdCIC8qIFdLQmFja0ZvcndhcmRMaXN0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NDRTdGMkUxQTQxMUIxMDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBU
ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMkYxQTQxMUIxMDAwNDQ3QzRDIC8qIFdL
QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlVGVzdC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9IVFRQU2VydmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMDg1ZTA5Yjk0ZjQyZDQ1MDA5MTM5MDEyMTNmYmZmNjQ0NmE1NTA5Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvSFRUUFNlcnZlci5jcHAKQEAg
LTAsMCArMSw0NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisK
KyNpbmNsdWRlICJHZW5lcmljQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkdlbmVyaWNIVFRQU2Vy
dmVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oPgor
I2luY2x1ZGUgPFdlYktpdC9XS0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYktpdC9X
S0NvbnRleHRQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ3JlZGVudGlhbC5oPgorI2lu
Y2x1ZGUgPFdlYktpdC9XS1Byb3RlY3Rpb25TcGFjZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworI2lmIFVTRShDVVJMKQorI2lmIEhBVkUoU1NMKQorI2luY2x1ZGUgPG9wZW5z
c2wvc3NsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm9DdXJs
Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNlQ3VybC5oPgorI2VuZGlmCisK
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworI2lmIFBMQVRGT1JNKFdJTikKKworc3RhdGlj
IHN0ZDo6d3N0cmluZyBjcmVhdGVTdHJpbmcoV0tTdHJpbmdSZWYgd2tTdHJpbmcpCit7CisgICAg
c2l6ZV90IG1heFNpemUgPSBXS1N0cmluZ0dldExlbmd0aCh3a1N0cmluZyk7CisKKyAgICBzdGQ6
OnZlY3RvcjxXS0NoYXI+IHdrQ2hhckJ1ZmZlcihtYXhTaXplKTsKKyAgICBzaXplX3QgYWN0dWFs
TGVuZ3RoID0gV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKHdrU3RyaW5nLCB3a0NoYXJCdWZmZXIuZGF0
YSgpLCBtYXhTaXplKTsKKyAgICByZXR1cm4gc3RkOjp3c3RyaW5nKHdrQ2hhckJ1ZmZlci5kYXRh
KCksIGFjdHVhbExlbmd0aCk7Cit9CisKK2NsYXNzIENlcnRpZmljYXRlQ2hhaW4geworcHVibGlj
OgorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZXMuY2xlYXIo
KTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZXJ0
aWZpY2F0ZXMuc2l6ZSgpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9iYWNrKHN0ZDo6dmVjdG9y
PHVpbnQ4X3Q+IGNlcnRpZmljYXRlRGF0YSwgc3RkOjp2ZWN0b3I8dWludDhfdD4gcHVibGljS2V5
KQorICAgIHsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZXMucHVzaF9iYWNrKGNlcnRpZmljYXRlRGF0
YSk7CisgICAgICAgIG1fcHVibGljS2V5cy5wdXNoX2JhY2socHVibGljS2V5KTsKKyAgICB9CisK
KyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBnZXRDZXJ0aWZpY2F0ZShpbnQgaW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9jZXJ0aWZpY2F0ZXNbaW5kZXhdOworICAgIH0KKworICAgIHN0
ZDo6dmVjdG9yPHVpbnQ4X3Q+IGdldFB1YmxpY0tleShpbnQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9wdWJsaWNLZXlzW2luZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjp2ZWN0b3I8dWludDhfdD4+IG1fY2VydGlmaWNhdGVzOworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+PiBtX3B1YmxpY0tleXM7Cit9OworCitzdGF0aWMg
c3RkOjp2ZWN0b3I8dWludDhfdD4gZ2V0UHVibGljS2V5KHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGNl
cnRpZmljYXRlKQoreworI2lmIEhBVkUoU1NMKQorICAgIEJJTyogbWVtID0gQklPX25ld19tZW1f
YnVmKGNlcnRpZmljYXRlLmRhdGEoKSwgY2VydGlmaWNhdGUuc2l6ZSgpKTsKKyAgICBpZiAoIW1l
bSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFg1MDkqIHg1MDkgPSBQRU1fcmVhZF9iaW9f
WDUwOShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAgIEVWUF9QS0VZKiBwdWJs
aWNLZXkgPSBYNTA5X2dldF9wdWJrZXkoeDUwOSk7CisgICAgQklPKiBwZW1CSU8gPSBCSU9fbmV3
KEJJT19zX21lbSgpKTsKKyAgICBQRU1fd3JpdGVfYmlvX1BVQktFWShwZW1CSU8sIHB1YmxpY0tl
eSk7CisgICAgQklPX2ZsdXNoKHBlbUJJTyk7CisKKyAgICBCVUZfTUVNKiBidWZtZW07CisgICAg
QklPX2dldF9tZW1fcHRyKHBlbUJJTywgJmJ1Zm1lbSk7CisKKyAgICByZXR1cm4gc3RkOjp2ZWN0
b3I8dWludDhfdD4oYnVmbWVtLT5kYXRhLCBidWZtZW0tPmRhdGEgKyBidWZtZW0tPmxlbmd0aCk7
CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworY2xhc3MgU2VydmVyVGVzdGVy
IHsKK3B1YmxpYzoKKyAgICBTZXJ2ZXJUZXN0ZXIoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0
ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihudWxscHRyKSk7Cisg
ICAgICAgIG1fd2ViVmlldyA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFBsYXRm
b3JtV2ViVmlldz4obV9jb250ZXh0LmdldCgpKTsKKworICAgICAgICBXS1BhZ2VOYXZpZ2F0aW9u
Q2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZuYXZpZ2F0aW9uQ2xp
ZW50LCAwLCBzaXplb2YobmF2aWdhdGlvbkNsaWVudCkpOworICAgICAgICBuYXZpZ2F0aW9uQ2xp
ZW50LmJhc2UudmVyc2lvbiA9IDA7CisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuYmFzZS5jbGll
bnRJbmZvID0gdGhpczsKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5kaWRGaW5pc2hOYXZpZ2F0
aW9uID0gW10gKFdLUGFnZVJlZiwgV0tOYXZpZ2F0aW9uUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3Rh
dGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
ICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZhaWxMb2FkID0gZmFsc2U7CisgICAgICAgICAgICB0
ZXN0ZXItPm1fZGlkRmluaXNoTG9hZCA9IHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2
aWdhdGlvbkNsaWVudC5kaWRGYWlsTmF2aWdhdGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdh
dGlvblJlZiwgV0tFcnJvclJlZiBlcnJvclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKSB7CisgICAgICAgICAgICBTZXJ2ZXJUZXN0ZXIqIHRlc3RlciA9IHN0YXRpY19jYXN0
PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKworICAgICAg
ICAgICAgdGVzdGVyLT5tX2Vycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3JSZWYp
OworICAgICAgICAgICAgdGVzdGVyLT5tX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24gPSBjcmVh
dGVTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weUxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yUmVm
KSkuZ2V0KCkpOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZhaWxMb2FkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHRlc3Rlci0+bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBb
XSAoV0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLRXJyb3JSZWYgZXJyb3JSZWYsIFdLVHlw
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgU2VydmVyVGVzdGVy
KiB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihj
bGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tFcnJvckdl
dEVycm9yQ29kZShlcnJvclJlZik7CisgICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxpemVkRXJy
b3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9jYWxpemVk
RGVzY3JpcHRpb24oZXJyb3JSZWYpKS5nZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlk
RmFpbExvYWQgPSB0cnVlOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0
cnVlOworICAgICAgICB9OworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gW10gKFdLUGFnZVJlZiwgV0tBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAg
ICAgIGF1dG8gcHJvdGVjdGlvblNwYWNlID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldFBy
b3RlY3Rpb25TcGFjZShjaGFsbGVuZ2UpOworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkxpc3Rl
bmVyID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoY2hhbGxl
bmdlKTsKKyAgICAgICAgICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rp
b25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisKKyAgICAg
ICAgICAgIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAg
ICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgICAgIHRlc3Rl
ci0+bV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCA9IHRydWU7CisjaWYg
VVNFKENVUkwpCisgICAgICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm8gPSBhZG9wdFdL
KFdLUHJvdGVjdGlvblNwYWNlQ29weUNlcnRpZmljYXRlSW5mbyhwcm90ZWN0aW9uU3BhY2UpKTsK
KyAgICAgICAgICAgICAgICB0ZXN0ZXItPm1fdmVyaWZpY2F0aW9uRXJyb3IgPSBXS0NlcnRpZmlj
YXRlSW5mb0dldFZlcmlmaWNhdGlvbkVycm9yKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgdGVzdGVyLT5tX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gPSBjcmVh
dGVTdHJpbmcoYWRvcHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlWZXJpZmljYXRpb25FcnJvckRl
c2NyaXB0aW9uKGNlcnRpZmljYXRlSW5mby5nZXQoKSkpLmdldCgpKTsKKworICAgICAgICAgICAg
ICAgIHRlc3Rlci0+bV9jZXJ0aWZpY2F0ZUNoYWluLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBXS0NlcnRpZmljYXRlSW5mb0dldENlcnRpZmljYXRlQ2hhaW5T
aXplKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGNlcnRpZmljYXRlID0gYWRvcHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0
ZUF0SW5kZXgoY2VydGlmaWNhdGVJbmZvLmdldCgpLCBpKSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ciA9IFdLRGF0YUdldEJ5dGVzKGNlcnRpZmljYXRlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVEYXRh
KHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KHB0ciwgcHRyICsgV0tEYXRhR2V0U2l6ZShjZXJ0aWZpY2F0
ZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2NlcnRpZmljYXRlQ2hh
aW4ucHVzaF9iYWNrKGNlcnRpZmljYXRlRGF0YSwgZ2V0UHVibGljS2V5KGNlcnRpZmljYXRlRGF0
YSkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmICh0ZXN0
ZXItPm1faWdub3JlQ2VydEVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2NlcHQgc2VydmVy
IHRydXN0IikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgICAgICAgICBh
dXRvIHdrQ3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdl
dCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikp
OworICAgICAgICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVz
ZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRl
Y2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIG51bGxwdHIpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYykgeworICAgICAgICAgICAgICAg
IGlmIChXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJldmlvdXNGYWlsdXJlQ291bnQoY2hh
bGxlbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlz
dGVuZXJDYW5jZWwoZGVjaXNpb25MaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIFNlcnZlclRlc3RlciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2Vy
dmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHVzZXJuYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyh0ZXN0ZXItPm1fdXNlcm5hbWUuY19zdHIoKSkpOworICAgICAgICAgICAgICAgICAgICBh
dXRvIHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0
ZXItPm1fcGFzc3dvcmQuY19zdHIoKSkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3Jl
ZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNz
d29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAg
ICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRp
YWwoZGVjaXNpb25MaXN0ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgV0tQYWdlUG9saWN5Q2xp
ZW50VjEgcGFnZVBvbGljeUNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZwYWdlUG9saWN5Q2xpZW50
LCAwLCBzaXplb2YoV0tQYWdlUG9saWN5Q2xpZW50VjEpKTsKKyAgICAgICAgcGFnZVBvbGljeUNs
aWVudC5iYXNlLnZlcnNpb24gPSAxOworICAgICAgICBwYWdlUG9saWN5Q2xpZW50LmJhc2UuY2xp
ZW50SW5mbyA9IHRoaXM7CisgICAgICAgIHBhZ2VQb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9y
UmVzcG9uc2UgPSBbXSAoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVVJMUmVz
cG9uc2VSZWYgcmVzcG9uc2UsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBib29sIGNhblNob3dN
SU1FVHlwZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNl
ckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIFNlcnZlclRlc3Rl
ciogdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4o
Y2xpZW50SW5mbykpOworICAgICAgICAgICAgdGVzdGVyLT5tX3N0YXR1c0NvZGUgPSBXS1VSTFJl
c3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpOworICAgICAgICAgICAgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBXS1BhZ2VTdGF0
ZUNsaWVudFYwIHBhZ2VTdGF0ZUNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZwYWdlU3RhdGVDbGll
bnQsIDAsIHNpemVvZihwYWdlU3RhdGVDbGllbnQpKTsKKyAgICAgICAgcGFnZVN0YXRlQ2xpZW50
LmJhc2UudmVyc2lvbiA9IDA7CisgICAgICAgIHBhZ2VTdGF0ZUNsaWVudC5iYXNlLmNsaWVudElu
Zm8gPSB0aGlzOworICAgICAgICBwYWdlU3RhdGVDbGllbnQuZGlkQ2hhbmdlVGl0bGUgPSBbXSAo
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgU2VydmVyVGVzdGVyKiB0ZXN0
ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJ
bmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkQ2hhbmdlVGl0bGUgPSB0cnVlOworICAg
ICAgICB9OworCisgICAgICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KG1fd2ViVmll
dy0+cGFnZSgpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKyAgICAgICAgV0tQYWdlU2V0UGFn
ZVBvbGljeUNsaWVudChtX3dlYlZpZXctPnBhZ2UoKSwgKFdLUGFnZVBvbGljeUNsaWVudEJhc2Uq
KSZwYWdlUG9saWN5Q2xpZW50KTsKKyAgICAgICAgV0tQYWdlU2V0UGFnZVN0YXRlQ2xpZW50KG1f
d2ViVmlldy0+cGFnZSgpLCAoV0tQYWdlU3RhdGVDbGllbnRCYXNlKikmcGFnZVN0YXRlQ2xpZW50
KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFVzZXJuYW1lUGFzc3dvcmQoc3RkOjpzdHJpbmcgdXNl
cm5hbWUsIHN0ZDo6c3RyaW5nIHBhc3N3b3JkKQorICAgIHsKKyAgICAgICAgbV91c2VybmFtZSA9
IHVzZXJuYW1lOworICAgICAgICBtX3Bhc3N3b3JkID0gcGFzc3dvcmQ7CisgICAgfQorCisgICAg
Ym9vbCBsb2FkKFN0cmluZyB1cmwsIGJvb2wgaWdub3JlQ2VydEVycm9yID0gZmFsc2UpCisgICAg
eworICAgICAgICBtX2lnbm9yZUNlcnRFcnJvciA9IGlnbm9yZUNlcnRFcnJvcjsKKyAgICAgICAg
bV9kaWRGaW5pc2hMb2FkID0gZmFsc2U7CisgICAgICAgIG1fZGlkRmFpbExvYWQgPSBmYWxzZTsK
KyAgICAgICAgbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCA9IGZhbHNl
OworICAgICAgICBtX3N0YXR1c0NvZGUgPSAwOworICAgICAgICBtX2Vycm9yQ29kZSA9IDA7Cisg
ICAgICAgIG1fdmVyaWZpY2F0aW9uRXJyb3IgPSAwOworICAgICAgICBtX2xvY2FsaXplZEVycm9y
RGVzY3JpcHRpb24uY2xlYXIoKTsKKyAgICAgICAgbV92ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0
aW9uLmNsZWFyKCk7CisgICAgICAgIG1fY2VydGlmaWNhdGVDaGFpbi5jbGVhcigpOworCisgICAg
ICAgIGF1dG8gdXJsUmVmID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmwu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICBXS1BhZ2VMb2FkVVJMKG1fd2ViVmlldy0+cGFnZSgp
LCB1cmxSZWYuZ2V0KCkpOworICAgICAgICBVdGlsOjpydW4oJm1fZGlkRmluaXNoTG9hZCk7CisK
KyAgICAgICAgcmV0dXJuICFtX2RpZEZhaWxMb2FkOworICAgIH0KKworICAgIGJvb2wgZGlkRmFp
bExvYWQoKSB7IHJldHVybiBtX2RpZEZhaWxMb2FkOyB9CisgICAgYm9vbCBkaWRSZWNlaXZlU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCgpIHsgcmV0dXJuIG1fZGlkUmVjZWl2ZVNlcnZlclRy
dXN0RXZhbHVhdGlvblJlcXVlc3Q7IH0KKyAgICBpbnQgZXJyb3JDb2RlKCkgeyByZXR1cm4gbV9l
cnJvckNvZGU7IH0KKyAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3IoKSB7IHJldHVybiBtX3Zlcmlm
aWNhdGlvbkVycm9yOyB9CisgICAgc3RkOjp3c3RyaW5nIGxvY2FsaXplZEVycm9yRGVzY3JpcHRp
b24oKSB7IHJldHVybiBtX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb247IH0KKyAgICBzdGQ6Ondz
dHJpbmcgdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fdmVyaWZpY2F0
aW9uRXJyb3JEZXNjcmlwdGlvbjsgfQorCisgICAgaW50IHN0YXR1c0NvZGUoKSB7IHJldHVybiBt
X3N0YXR1c0NvZGU7IH0KKyAgICBDZXJ0aWZpY2F0ZUNoYWluIGdldENlcnRpZmljYXRlQ2hhaW4o
KSB7IHJldHVybiBtX2NlcnRpZmljYXRlQ2hhaW47IH0KKworICAgIHN0ZDo6d3N0cmluZyB0aXRs
ZSgpCisgICAgeworICAgICAgICBpZiAoIW1fZGlkRmluaXNoTG9hZCB8fCBtX2RpZEZhaWxMb2Fk
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6d3N0cmluZygpOworCisgICAgICAgIFV0aWw6OnJ1
bigmbV9kaWRDaGFuZ2VUaXRsZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmcoYWRvcHRX
SyhXS0ZyYW1lQ29weVRpdGxlKFdLUGFnZUdldE1haW5GcmFtZShtX3dlYlZpZXctPnBhZ2UoKSkp
KS5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pZ25vcmVDZXJ0RXJyb3Ig
eyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRGaW5pc2hMb2FkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZGlkRmFpbExvYWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRSZWNlaXZlU2VydmVyVHJ1
c3RFdmFsdWF0aW9uUmVxdWVzdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZENoYW5nZVRpdGxl
IHsgZmFsc2UgfTsKKworICAgIGludCBtX3N0YXR1c0NvZGUgeyAwIH07CisgICAgaW50IG1fZXJy
b3JDb2RlIHsgMCB9OworICAgIGludCBtX3ZlcmlmaWNhdGlvbkVycm9yIHsgMCB9OworICAgIHN0
ZDo6d3N0cmluZyBtX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb247CisgICAgc3RkOjp3c3RyaW5n
IG1fdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbjsKKworICAgIHN0ZDo6c3RyaW5nIG1fdXNl
cm5hbWU7CisgICAgc3RkOjpzdHJpbmcgbV9wYXNzd29yZDsKKworICAgIENlcnRpZmljYXRlQ2hh
aW4gbV9jZXJ0aWZpY2F0ZUNoYWluOworCisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBt
X2NvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtV2ViVmlldz4gbV93ZWJWaWV3
OworfTsKKyNlbmRpZgorCitzdHJ1Y3QgQ2VydGlmaWNhdGVQcml2YXRlS2V5IHsKKyAgICBHZW5l
cmljUHJpdmF0ZUtleTo6S2V5VHlwZSBrZXlUeXBlOworICAgIGludCBiaXRMZW5ndGg7CisgICAg
U3RyaW5nIGNlcnRpZmljYXRlUEVNOworICAgIFN0cmluZyBwcml2YXRlS2V5UEVNOworICAgIFN0
cmluZyBwdWJsaWNLZXlQRU07Cit9OworCisKK0NlcnRpZmljYXRlUHJpdmF0ZUtleSBjZXJ0aWZp
Y2F0ZVByaXZhdGVLZXlSU0EoKQoreworICAgIC8vIFRoaXMgcHJpdmF0ZSBrZXkgYW5kIHNlbGYg
c2lnbmVkIGNlcnRpZmljYXRlIHdlcmUgZ2VuZXJhdGVkIGJ5IG9wZW5zc2wgY29tbWFuZCBiZWxv
dy4KKyAgICAvLworICAgIC8vIG9wZW5zc2wgcmVxIC14NTA5IC1ub2RlcyAtZGF5cyAzNjUwIC1u
ZXdrZXkgcnNhOjEwMjQgIFwKKyAgICAvLyAgICAgICAgIC1zdWJqICIvQz1KUC9TVD1Ub2t5by9P
PVNlbGYvQ049bG9jYWxob3N0IiAta2V5b3V0IHByaXZhdGUua2V5IC1wdWJrZXkgLW91dCBzZXJ2
ZXIuY3J0CisKKyAgICByZXR1cm4geworICAgICAgICBHZW5lcmljUHJpdmF0ZUtleTo6S2V5VHlw
ZTo6UlNBVHlwZSwKKyAgICAgICAgMTAyNCwKKyAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNB
VEUtLS0tLVxuIgorICAgICAgICAiTUlJQ1RqQ0NBYmVnQXdJQkFnSUpBS0gyVHVkUStoVTdNQTBH
Q1NxR1NJYjNEUUVCQ3dVQU1FQXhDekFKQmdOVlxuIgorICAgICAgICAiQkFZVEFrcFFNUTR3REFZ
RFZRUUlEQVZVYjJ0NWJ6RU5NQXNHQTFVRUNnd0VVMlZzWmpFU01CQUdBMVVFQXd3SlxuIgorICAg
ICAgICAiYkc5allXeG9iM04wTUI0WERUSXhNRGd5TXpBek16UTBPRm9YRFRNeE1EZ3lNVEF6TXpR
ME9Gb3dRREVMTUFrR1xuIgorICAgICAgICAiQTFVRUJoTUNTbEF4RGpBTUJnTlZCQWdNQlZSdmEz
bHZNUTB3Q3dZRFZRUUtEQVJUWld4bU1SSXdFQVlEVlFRRFxuIgorICAgICAgICAiREFsc2IyTmhi
R2h2YzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFLNENsb0xLZnJWUFxu
IgorICAgICAgICAiZ0dhNzUxMTRQMVgzbHMzdXR2RkVldURsdTAzVlVJQ2N3TjBnZS9zQ29uM2ky
L0xKZ1VvWTFMTEJxdHBBSko2elxuIgorICAgICAgICAiN3dodFNWajBOdzUxU1FSSDBnTlc3Ylpr
VTRJWitYNlE4ZlN6Zko2cnZ4VkZ6MURhejZyK3FVZ3A4VnpoUW50dlxuIgorICAgICAgICAiQ3Mv
U3pHcit4Y1Vpek5QUUt0S0ZrV3RrdHFjZnRQUmpBZ01CQUFHalVEQk9NQjBHQTFVZERnUVdCQlM5
U09uS1xuIgorICAgICAgICAiOUZPZ0FNTWRPYUw4M2RISFJkZTJzREFmQmdOVkhTTUVHREFXZ0JT
OVNPbks5Rk9nQU1NZE9hTDgzZEhIUmRlMlxuIgorICAgICAgICAic0RBTUJnTlZIUk1FQlRBREFR
SC9NQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0R0JBR1dTbTBCSGorRTVWbU9FSWZOd1xuIgorICAgICAg
ICAiUlNPbHhBdGxsUGluSVZieGVCMjNRazhKaEJGc29OeTQyeDFuZnI2MXFrQ0l3OVpySjFzdU1p
RjdxVGZlVXNuK1xuIgorICAgICAgICAiTFlYSk1NbGUzK1NTb1NYUDdIWXYzZThnRzgvQ2M3czdK
bnpwL1hoV0ovNWNaYjM4ak9Fc2lVRTEwZ1UyLzU5dlxuIgorICAgICAgICAiNmpleWFpWm5ETi83
Tys1bEhnSVRaNERjXG4iCisgICAgICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iLAor
CisgICAgICAgICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIKKyAgICAgICAgIk1JSUNk
UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQWw4d2dnSmJBZ0VBQW9HQkFLNENsb0xLZnJWUGdH
YTdcbiIKKyAgICAgICAgIjUxMTRQMVgzbHMzdXR2RkVldURsdTAzVlVJQ2N3TjBnZS9zQ29uM2ky
L0xKZ1VvWTFMTEJxdHBBSko2ejd3aHRcbiIKKyAgICAgICAgIlNWajBOdzUxU1FSSDBnTlc3Ylpr
VTRJWitYNlE4ZlN6Zko2cnZ4VkZ6MURhejZyK3FVZ3A4VnpoUW50dkNzL1NcbiIKKyAgICAgICAg
InpHcit4Y1Vpek5QUUt0S0ZrV3RrdHFjZnRQUmpBZ01CQUFFQ2dZQldnK0xoVkZ4N09QUFdJRWFB
S25FVEJPNXRcbiIKKyAgICAgICAgInBPcEFPcFA5alRyN0Q3dmV0aEVONEVERUpDTTJBN3pua1Zn
K3h1bTVscUNqc3BDQ2QyTzVCTjBhNVJFWnhPRDFcbiIKKyAgICAgICAgIjA1d1lsekROQy8vRWRJ
UHpFbXlHaVBaanJ2N1ZXVUQ0TE55ZDRtbitvNU1tMms4Wi9KRlhGY2NoSTRnWDZldHNcbiIKKyAg
ICAgICAgIlVQZ1lNby9ZWUc2QlhtMG5BUUpCQU9CdDZqejdVbU9TUUJjSGdlVTVuUDV0T3l0TUhH
d2JjY2RUU1BBWWZBN2pcbiIKKyAgICAgICAgIm9oQ281Z0F2bVV5QWdRYjc0RFBmcTFycHRTZ0dI
L3B0M3JFSW5IVHFOWEVDUVFER2ZQMVljbWhrZTB1V1MwNU1cbiIKKyAgICAgICAgImNTRXhPYXU1
WFZscUs3NTFFZHh3amY0N3N3azhwN3I0Qi9uZFVDUGY0UFNObTRleDNNa1VWMmtjUkJXWDZGcmtc
biIKKyAgICAgICAgIlFFMFRBa0I0OW1VbzV5Q1o4RXJBM3RnQkw1TlJncGhBbHU0K3luQUJ5Zjdu
QVp0ai93YnJ5Y3psenNIbWZPQ09cbiIKKyAgICAgICAgIlhoV1NmL3lBckxScVZSckpSSXloaUky
amFsVFJBa0JlaGlONFBYT3RkbkgycndJb3NTOW5hOWwxdXhqYjBOMHdcbiIKKyAgICAgICAgImow
TDFid21Ga0t0emNVVSszVDJHd2FWejlvTS85TE5ZWnBaejAzVEErME4xUmpnU3Z2UjFBa0JrUnhD
aU5NNVJcbiIKKyAgICAgICAgInBUS2xvQXVUMksrajNKb3ptV09kd0VhT0FhVmxCVDZaaWw4RW1y
RUIvYTZBUm9hUXRJQkZ3aG1GZzdkcDhCd0xcbiIKKyAgICAgICAgImsrL3ArR2dPRHA5cFxuIgor
ICAgICAgICAiLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIiwKKworICAgICAgICAiLS0tLS1C
RUdJTiBQVUJMSUMgS0VZLS0tLS1cbiIKKyAgICAgICAgIk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFV
QUE0R05BRENCaVFLQmdRQ3VBcGFDeW42MVQ0Qm11K2RkZUQ5Vjk1Yk5cbiIKKyAgICAgICAgIjdy
YnhSSHJnNWJ0TjFWQ0FuTURkSUh2N0FxSjk0dHZ5eVlGS0dOU3l3YXJhUUNTZXMrOEliVWxZOURj
T2RVa0VcbiIKKyAgICAgICAgIlI5SURWdTIyWkZPQ0dmbCtrUEgwczN5ZXE3OFZSYzlRMnMrcS9x
bElLZkZjNFVKN2J3clAwc3hxL3NYRklzelRcbiIKKyAgICAgICAgIjBDclNoWkZyWkxhbkg3VDBZ
d0lEQVFBQlxuIgorICAgICAgICAiLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCisgICAgfTsK
K30KKworCisjaWYgUExBVEZPUk0oV0lOKQorVEVTVChIVFRQU2VydmVyLCBTaW1wbGVIVFRQKQor
eworICAgIEdlbmVyaWNIVFRQU2VydmVyIHNlcnZlcjsKKyAgICBzZXJ2ZXIuc2V0UHJvdG9jb2wo
R2VuZXJpY0xpc3RlbmVyOjpQcm90b2NvbDo6SHR0cCk7CisgICAgc2VydmVyLnNldEhUVFBSZXNw
b25zZXMoe3siLyIsIHsKKyAgICAgICAgMjAwLAorICAgICAgICB7IH0sCisgICAgICAgICI8aHRt
bD4gPGhlYWQ+PHRpdGxlPlNpbXBsZSBIVFRQIFNlcnZlcjwvdGl0bGU+PC9oZWFkPiA8Ym9keT5I
VFRQIGh0dHAgc2VydmVyIHJvb3Q8L2JvZHk+IDwvaHRtbD4iCisgICAgfX19KTsKKyAgICBzZXJ2
ZXIuc3RhcnQoKTsKKworICAgIFNlcnZlclRlc3RlciBsb2FkZXI7CisgICAgU3RyaW5nIHRvcFVS
TCA9IHNlcnZlci51cmwoKS5zdHJpbmcoKTsKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh0
b3BVUkwpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRpdGxlKCksIEwiU2ltcGxlIEhUVFAgU2Vy
dmVyIik7CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDIwMCk7CisKKyAgICBT
dHJpbmcgd3JvbmdVUkwgPSBzZXJ2ZXIudXJsKCJub3QtZm91bmQuaHRtbCIpLnN0cmluZygpOwor
ICAgIEVYUEVDVF9UUlVFKGxvYWRlci5sb2FkKHdyb25nVVJMKSk7CisgICAgRVhQRUNUX0VRKGxv
YWRlci5zdGF0dXNDb2RlKCksIDQwNCk7CisKKyAgICBzZXJ2ZXIuc3RvcCgpOworfQorCisjaWYg
SEFWRShTU0wpCitURVNUKEhUVFBTZXJ2ZXIsIFNpbXBsZUhUVFBTKQoreworICAgIGF1dG8gY2Vy
dEtleSA9IGNlcnRpZmljYXRlUHJpdmF0ZUtleVJTQSgpOworICAgIGF1dG8gY2VydERhdGEgPSBH
ZW5lcmljQ2VydGlmaWNhdGU6OmNyZWF0ZUZyb21QRU0oY2VydEtleS5jZXJ0aWZpY2F0ZVBFTSk7
CisgICAgYXV0byBrZXlEYXRhID0gR2VuZXJpY1ByaXZhdGVLZXk6OmNyZWF0ZUZyb21QRU0oY2Vy
dEtleS5wcml2YXRlS2V5UEVNLCBjZXJ0S2V5LmtleVR5cGUsIGNlcnRLZXkuYml0TGVuZ3RoKTsK
KworICAgIEdlbmVyaWNIVFRQU2VydmVyIHNlcnZlcjsKKyAgICBzZXJ2ZXIuc2V0UHJvdG9jb2wo
R2VuZXJpY0xpc3RlbmVyOjpQcm90b2NvbDo6SHR0cHMpOworICAgIHNlcnZlci5zZXRIVFRQUmVz
cG9uc2VzKHt7Ii8iLCB7CisgICAgICAgIDIwMCwKKyAgICAgICAgeyB9LAorICAgICAgICAiPGh0
bWw+IDxoZWFkPjx0aXRsZT5TaW1wbGUgSFRUUFMgU2VydmVyPC90aXRsZT48L2hlYWQ+IDxib2R5
PkhUVFBTIGh0dHBzIHNlcnZlciByb290PC9ib2R5PiA8L2h0bWw+IgorICAgIH19fSk7CisKKyAg
ICBzZXJ2ZXIuc2V0SWRlbnRpdHkoV1RGTW92ZShrZXlEYXRhKSwgV1RGTW92ZShjZXJ0RGF0YSkp
OworICAgIHNlcnZlci5zdGFydCgpOworCisgICAgU2VydmVyVGVzdGVyIGxvYWRlcjsKKyAgICBT
dHJpbmcgdG9wVVJMID0gc2VydmVyLnVybCgpLnN0cmluZygpOworICAgIEVYUEVDVF9UUlVFKGxv
YWRlci5sb2FkKHRvcFVSTCwgdHJ1ZSkpOworICAgIEVYUEVDVF9FUShsb2FkZXIudGl0bGUoKSwg
TCJTaW1wbGUgSFRUUFMgU2VydmVyIik7CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2Rl
KCksIDIwMCk7CisKKyAgICBhdXRvIGNlcnRpZmljYXRlQ2hhaW4gPSBsb2FkZXIuZ2V0Q2VydGlm
aWNhdGVDaGFpbigpOworICAgIEVYUEVDVF9FUShjZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSwgMSk7
CisKKyAgICBTdHJpbmcgY2VydGlmaWNhdGUoY2VydGlmaWNhdGVDaGFpbi5nZXRDZXJ0aWZpY2F0
ZSgwKS5kYXRhKCksIGNlcnRpZmljYXRlQ2hhaW4uZ2V0Q2VydGlmaWNhdGUoMCkuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoY2VydGlmaWNhdGUsIGNlcnRLZXkuY2VydGlmaWNhdGVQRU0pOworCisg
ICAgU3RyaW5nIHB1YmtleShjZXJ0aWZpY2F0ZUNoYWluLmdldFB1YmxpY0tleSgwKS5kYXRhKCks
IGNlcnRpZmljYXRlQ2hhaW4uZ2V0UHVibGljS2V5KDApLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
KHB1YmtleSwgY2VydEtleS5wdWJsaWNLZXlQRU0pOworCisgICAgc2VydmVyLnN0b3AoKTsKK30K
KyNlbmRpZgorCitURVNUKEhUVFBTZXJ2ZXIsIEJhc2ljQXV0aGVudGljYXRpb24pCit7CisgICAg
R2VuZXJpY0hUVFBTZXJ2ZXIgc2VydmVyOworICAgIHNlcnZlci5zZXRQcm90b2NvbChHZW5lcmlj
TGlzdGVuZXI6OlByb3RvY29sOjpIdHRwKTsKKyAgICBzZXJ2ZXIuc2V0SFRUUFJlc3BvbnNlRm9y
QmFzaWNBdXRoZW50aWNhdGlvbigiL2Jhc2ljLmh0bWwiLCAiVVNFUk5BTUUiLCAiUEFTU1dPUkQi
LCB7CisgICAgICAgIDQwMSwKKyAgICAgICAge3siV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyBy
ZWxtPVwic2VjcmV0IGFyZWFcIiJ9fSwKKyAgICAgICAgIjxodG1sPiA8aGVhZD48dGl0bGU+YmFz
aWMgdW5hdXRob3JpemVkPC90aXRsZT48L2hlYWQ+IDxib2R5PjxoMT51bmF1dGhvcml6ZWQgY29u
dGVudDwvaDE+PC9ib2R5PiA8L2h0bWw+IgorICAgIH0sIHsKKyAgICAgICAgMjAwLAorICAgICAg
ICB7IH0sCisgICAgICAgICI8aHRtbD4gPGhlYWQ+PHRpdGxlPmJhc2ljIGF1dGhvcml6ZWQ8L3Rp
dGxlPjwvaGVhZD4gPGJvZHk+PGgxPmF1dGhvcml6ZWQgPC9oMT48L2JvZHk+IDwvaHRtbD4iCisg
ICAgfSk7CisgICAgc2VydmVyLnN0YXJ0KCk7CisKKyAgICBTZXJ2ZXJUZXN0ZXIgbG9hZGVyOwor
ICAgIFN0cmluZyB0YXJnZXRVUkwgPSBzZXJ2ZXIudXJsKCJiYXNpYy5odG1sIikuc3RyaW5nKCk7
CisKKyAgICBsb2FkZXIuc2V0VXNlcm5hbWVQYXNzd29yZCgiYmFkLXVzZXIiLCAiYmFkLXBhc3N3
b3JkIik7CisgICAgRVhQRUNUX0ZBTFNFKGxvYWRlci5sb2FkKHRhcmdldFVSTCkpOworICAgIEVY
UEVDVF9ORShsb2FkZXIuc3RhdHVzQ29kZSgpLCAyMDApOworCisgICAgbG9hZGVyLnNldFVzZXJu
YW1lUGFzc3dvcmQoIlVTRVJOQU1FIiwgIlBBU1NXT1JEIik7CisgICAgRVhQRUNUX1RSVUUobG9h
ZGVyLmxvYWQodGFyZ2V0VVJMKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCks
IDIwMCk7CisgICAgRVhQRUNUX0VRKGxvYWRlci50aXRsZSgpLCBMImJhc2ljIGF1dGhvcml6ZWQi
KTsKKworICAgIHNlcnZlci5zdG9wKCk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0NoYWxsZW5nZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvQ2hhbGxlbmdlLm1tCmluZGV4IGE1Nzk3M2YyYjA5NTVhNmQ5MmJjOTAwM2RkNzY4YThkNWYy
OWRkZmYuLjZlYmYzMmUyZjUzOTIyYWUzODhjYzcyYWRjOTAxNWFiNjAwNmQxNDYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCkBA
IC01NzcsNyArNTc3LDcgQEAgVEVTVChXZWJLaXQsIEZhc3RTZXJ2ZXJUcnVzdCkKIAogVEVTVChX
ZWJLaXQsIEVycm9yU2VjdXJlQ29kaW5nKQogewotICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHt7ICIv
IiwgeyBIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246OlllcyB9fX0pOworICAgIEhU
VFBTZXJ2ZXIgc2VydmVyKHt7ICIvIiwgeyBHZW5lcmljSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVD
b25uZWN0aW9uOjpZZXMgfX19KTsKICAgICBhdXRvIHdlYlZpZXcgPSBbW1dLV2ViVmlldyBuZXdd
IGF1dG9yZWxlYXNlXTsKICAgICBhdXRvIGRlbGVnYXRlID0gW1tUZXN0TmF2aWdhdGlvbkRlbGVn
YXRlIG5ld10gYXV0b3JlbGVhc2VdOwogICAgIHdlYlZpZXcubmF2aWdhdGlvbkRlbGVnYXRlID0g
ZGVsZWdhdGU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL01lZGlhTG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTWVkaWFMb2FkaW5nLm1tCmluZGV4IDhmOGFiMjBhM2I5ODkxMjVkYjgwMTAxZDFjMzA3ZDRm
NjhkM2QxMzguLjY0OGY2MjIyZjY4NzUzNGI3OWUyYTA4MzdhYjkyNjI0ZmUzNTZkMmEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5n
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2Fk
aW5nLm1tCkBAIC0xNjIsNyArMTYyLDcgQEAgVEVTVChNZWRpYUxvYWRpbmcsIFJhbmdlUmVxdWVz
dFN5bnRoZXNpc1dpdGhvdXRDb250ZW50TGVuZ3RoKQogICAgIEZ1bmN0aW9uPHZvaWQoQ29ubmVj
dGlvbik+IHJlc3BvbmRUb1JlcXVlc3RzOwogICAgIHJlc3BvbmRUb1JlcXVlc3RzID0gWyZdIChD
b25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgICAgICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJl
cXVlc3QoWyYsIGNvbm5lY3Rpb25dIChWZWN0b3I8Y2hhcj4mJiByZXF1ZXN0KSB7Ci0gICAgICAg
ICAgICBhdXRvIHNlbmRSZXNwb25zZSA9IFsmLCBjb25uZWN0aW9uXSAoSFRUUFJlc3BvbnNlIHJl
c3BvbnNlLCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50
TGVuZ3RoKSB7CisgICAgICAgICAgICBhdXRvIHNlbmRSZXNwb25zZSA9IFsmLCBjb25uZWN0aW9u
XSAoR2VuZXJpY0hUVFBSZXNwb25zZSByZXNwb25zZSwgR2VuZXJpY0hUVFBSZXNwb25zZTo6SW5j
bHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5ndGgpIHsKICAgICAgICAgICAgICAg
ICBjb25uZWN0aW9uLnNlbmQocmVzcG9uc2Uuc2VyaWFsaXplKGluY2x1ZGVDb250ZW50TGVuZ3Ro
KSwgWyYsIGNvbm5lY3Rpb25dIHsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZFRvUmVxdWVz
dHMoY29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xNzAsOSArMTcwLDkgQEAg
VEVTVChNZWRpYUxvYWRpbmcsIFJhbmdlUmVxdWVzdFN5bnRoZXNpc1dpdGhvdXRDb250ZW50TGVu
Z3RoKQogICAgICAgICAgICAgdG90YWxSZXF1ZXN0cysrOwogICAgICAgICAgICAgYXV0byBwYXRo
ID0gSFRUUFNlcnZlcjo6cGFyc2VQYXRoKHJlcXVlc3QpOwogICAgICAgICAgICAgaWYgKHBhdGgg
PT0gIi8iKQotICAgICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7IHZpZGVvUGxheVRlc3RIVE1M
IH0sIEhUVFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Olllcyk7CisgICAgICAgICAg
ICAgICAgc2VuZFJlc3BvbnNlKHsgdmlkZW9QbGF5VGVzdEhUTUwgfSwgR2VuZXJpY0hUVFBSZXNw
b25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Olllcyk7CiAgICAgICAgICAgICBlbHNlIGlmIChw
YXRoID09ICIvdmlkZW8ubXA0IikKLSAgICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UodGVzdFZp
ZGVvQnl0ZXMoKSwgSFRUUFJlc3BvbnNlOjpJbmNsdWRlQ29udGVudExlbmd0aDo6Tm8pOworICAg
ICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh0ZXN0VmlkZW9CeXRlcygpLCBHZW5lcmljSFRUUFJl
c3BvbnNlOjpJbmNsdWRlQ29udGVudExlbmd0aDo6Tm8pOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIEFTU0VSVChwYXRoLmlzTnVsbCgpKTsKICAgICAgICAgfSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0dlbmVyaWNDb25uZWN0aW9uQ29jb2EubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0dlbmVyaWNDb25uZWN0aW9uQ29jb2EubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTIzNmVlMzI2ZGY2MTkzMDIxNWVkMjY1NWYzZjJjYWRiMTBiNGM0MAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvR2VuZXJpY0Nvbm5lY3Rpb25D
b2NvYS5tbQpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJHZW5lcmljQ29ubmVjdGlvbi5oIgorCisjaW1wb3J0ICJHZW5lcmljSFRU
UFNlcnZlci5oIgorI2ltcG9ydCAiVXRpbGl0aWVzLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tQdHIu
aD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2Vj
dXJpdHlTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBl
eHRyYWN0UEVNRGF0YShjb25zdCBTdHJpbmcgcGVtLCBjb25zdCBTdHJpbmcgZGVsaW1pdGVyQmVn
aW4sIGNvbnN0IFN0cmluZyBkZWxpbWl0ZXJFbmQpCit7CisgICAgYXV0byBiZWdpblBvc2l0aW9u
ID0gcGVtLmZpbmQoZGVsaW1pdGVyQmVnaW4pOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBwZW0u
ZmluZChkZWxpbWl0ZXJFbmQpOworCisgICAgU3RyaW5nIGJhc2U2NFN0cmluZzsKKyAgICBpZiAo
YmVnaW5Qb3NpdGlvbiAhPSBub3RGb3VuZCAmJiBlbmRQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAg
ICAgICAgYmFzZTY0U3RyaW5nID0gcGVtLnN1YnN0cmluZyhiZWdpblBvc2l0aW9uICsgZGVsaW1p
dGVyQmVnaW4ubGVuZ3RoKCksIGVuZFBvc2l0aW9uIC0gYmVnaW5Qb3NpdGlvbiAtIGRlbGltaXRl
ckJlZ2luLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGJhc2U2NFN0cmluZyA9IHBlbTsK
KworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYmFzZTY0U3RyaW5nLCBCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHZW5l
cmljQ2VydGlmaWNhdGU+IEdlbmVyaWNDZXJ0aWZpY2F0ZTo6Y3JlYXRlRnJvbVBFTShjb25zdCBT
dHJpbmcgcGVtKQoreworICAgIGNvbnN0IFN0cmluZyBjZXJ0QmVnaW4gPSAiLS0tLS1CRUdJTiBD
RVJUSUZJQ0FURS0tLS0tIjsKKyAgICBjb25zdCBTdHJpbmcgY2VydEVuZCA9ICItLS0tLUVORCBD
RVJUSUZJQ0FURS0tLS0tIjsKKworICAgIGF1dG8gcGVtQm9keSA9IGV4dHJhY3RQRU1EYXRhKHBl
bSwgY2VydEJlZ2luLCBjZXJ0RW5kKTsKKyAgICBpZiAoIXBlbUJvZHkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHZW5l
cmljQ2VydGlmaWNhdGU+KCk7CisgICAgTlNEYXRhICpjZXJ0aWZpY2F0ZURhdGEgPSBbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6cGVtQm9keS0+ZGF0YSgpIGxlbmd0aDpwZW1Cb2R5LT5zaXplKCldOwor
ICAgIGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVh
dGVXaXRoRGF0YShudWxscHRyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWNlcnRpZmljYXRlRGF0YSkp
OworCisgICAgcmV0dXJuIGNlcnRpZmljYXRlOworfQorCitzdGF0aWMgUmV0YWluUHRyPFNlY0tl
eVJlZj4gZ2VuZXJhdGVSU0FLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHBlbUJvZHksIGludCBi
aXRMZW5ndGgpCit7CisgICAgTlNEaWN0aW9uYXJ5KiBvcHRpb25zID0gQHsKKyAgICAgICAgKGlk
KWtTZWNBdHRyS2V5VHlwZTogKGlkKWtTZWNBdHRyS2V5VHlwZVJTQSwKKyAgICAgICAgKGlkKWtT
ZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwKKyAgICAgICAgKGlk
KWtTZWNBdHRyS2V5U2l6ZUluQml0czogW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Yml0TGVuZ3Ro
XQorICAgIH07CisgICAgTlNEYXRhICplbmNvZGVkUHJpdmF0ZUtleSA9IFtOU0RhdGEgZGF0YVdp
dGhCeXRlczpwZW1Cb2R5LmRhdGEoKSBsZW5ndGg6cGVtQm9keS5zaXplKCldOworCisgICAgQ0ZF
cnJvclJlZiBlcnJvciA9IG51bGxwdHI7CisgICAgY29uc3QgTlNVSW50ZWdlciBoZWFkZXJMZW5n
dGggPSAyNjsKKyAgICByZXR1cm4gYWRvcHRDRihTZWNLZXlDcmVhdGVXaXRoRGF0YSgoX19icmlk
Z2UgQ0ZEYXRhUmVmKVtlbmNvZGVkUHJpdmF0ZUtleSBzdWJkYXRhV2l0aFJhbmdlOk5TTWFrZVJh
bmdlKGhlYWRlckxlbmd0aCwgZW5jb2RlZFByaXZhdGVLZXkubGVuZ3RoIC0gaGVhZGVyTGVuZ3Ro
KV0sIChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpb3B0aW9ucywgJmVycm9yKSk7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8U2VjS2V5UmVmPiBnZW5lcmF0ZUVDS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiBwZW1Cb2R5LCBpbnQgYml0TGVuZ3RoKQoreworICAgIC8vIG5vdCBpbXBsZW1lbnRlZC4K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNQcml2YXRl
S2V5PiBHZW5lcmljUHJpdmF0ZUtleTo6Y3JlYXRlRnJvbVBFTShjb25zdCBTdHJpbmcgcGVtLCBj
b25zdCBLZXlUeXBlIGtleVR5cGUsIGNvbnN0IGludCBiaXRMZW5ndGgpCit7CisgICAgY29uc3Qg
U3RyaW5nIGtleUJlZ2luID0gIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLSI7CisgICAgY29u
c3QgU3RyaW5nIGtleUVuZCA9ICItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tIjsKKworICAgIGF1
dG8gcGVtQm9keSA9IGV4dHJhY3RQRU1EYXRhKHBlbSwga2V5QmVnaW4sIGtleUVuZCk7CisgICAg
aWYgKCFwZW1Cb2R5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gdW5pcXVl
S2V5ID0gV1RGOjptYWtlVW5pcXVlPEdlbmVyaWNQcml2YXRlS2V5PigpOworICAgIHN3aXRjaCAo
a2V5VHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6UlNBVHlwZToKKyAgICAgICAgdW5pcXVlS2V5
LT5rZXkgPSBnZW5lcmF0ZVJTQUtleSgqcGVtQm9keSwgYml0TGVuZ3RoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBLZXlUeXBlOjpFQ1R5cGU6CisgICAgICAgIHVuaXF1ZUtleS0+a2V5ID0g
Z2VuZXJhdGVFQ0tleSgqcGVtQm9keSwgYml0TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIHVuaXF1ZUtleTsKK30KKworCisjaWYgMAorc3RhdGljIGRpc3BhdGNo
X2RhdGFfdCBkYXRhRnJvbVN0cmluZyhTdHJpbmcmJiBzKQoreworICAgIGF1dG8gaW1wbCA9IHMu
cmVsZWFzZUltcGwoKTsKKyAgICBBU1NFUlQoaW1wbC0+aXM4Qml0KCkpOworICAgIHJldHVybiBk
aXNwYXRjaF9kYXRhX2NyZWF0ZShpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBsLT5sZW5ndGgoKSwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgKHZvaWQpaW1wbDsKKyAgICB9
KTsKK30KKyNlbmRpZgorCitzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZy
b21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sKKyAgICBhdXRvIGJ1ZmZlclNpemUgPSB2
LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRy
KCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwg
YnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgZmFzdEZy
ZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvckZyb21EYXRhKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50KQoreworICAgIEFTU0VSVChjb250
ZW50KTsKKyAgICBfX2Jsb2NrIFZlY3Rvcjx1aW50OF90PiByZXF1ZXN0OworICAgIGRpc3BhdGNo
X2RhdGFfYXBwbHkoY29udGVudCwgXmJvb2woZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0
IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmVxdWVzdC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworR2VuZXJpY0Nvbm5lY3Rpb246
OkdlbmVyaWNDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQorICAgIDogbV9j
b25uZWN0aW9uKGNvbm5lY3Rpb24pCit7CisgICAgbV9pbml0aWFsaXplZCAgPSB0cnVlOworfQor
CitHZW5lcmljQ29ubmVjdGlvbjo6fkdlbmVyaWNDb25uZWN0aW9uKCkKK3sKK30KKworYm9vbCBH
ZW5lcmljQ29ubmVjdGlvbjo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlh
bGl6ZWQ7Cit9CisKK3ZvaWQgR2VuZXJpY0Nvbm5lY3Rpb246OnNlbmQoVmVjdG9yPHVpbnQ4X3Q+
JiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
LCBpbnQpCit7CisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fY29ubmVjdGlvbi5nZXQoKSwgZGF0
YUZyb21WZWN0b3IoV1RGTW92ZShtZXNzYWdlKSkuZ2V0KCksIE5XX0NPTk5FQ1RJT05fREVGQVVM
VF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsCisgICAgICAgIG1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0obndfZXJyb3JfdCBlcnJvcikg
bXV0YWJsZSB7CisgICAgICAgICAgICBBU1NFUlQoIWVycm9yKTsKKyAgICAgICAgICAgIGlmIChj
b21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICB9KS5nZXQoKSk7Cit9CisKK3ZvaWQgR2VuZXJpY0Nvbm5lY3Rpb246OnNlbmQoU3Ry
aW5nJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlVmVjdG9yOworICAgIG1lc3NhZ2VW
ZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UudXRm
OCgpLmRhdGEoKSksICBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7CisKKyAgICBzZW5kKFdURk1v
dmUobWVzc2FnZVZlY3RvciksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9p
ZCBHZW5lcmljQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG53X2Nvbm5l
Y3Rpb25fcmVjZWl2ZShtX2Nvbm5lY3Rpb24uZ2V0KCksIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgbWFrZUJsb2NrUHRyKFtjb25uZWN0aW9uID0gKnRo
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGRpc3Bh
dGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCwgYm9vbCwgbndfZXJyb3Jf
dCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWNvbnRlbnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisKKyAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHZlY3RvckZyb21EYXRhKGNvbnRlbnQpKTsKKyAgICAgICAg
fSkuZ2V0KCkpOworfQorCit2b2lkIEdlbmVyaWNDb25uZWN0aW9uOjpjbG9zZSgpCit7CisgICAg
aWYgKCFtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBud19jb25uZWN0aW9u
X2NhbmNlbChtX2Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsK
K30KKworCitHZW5lcmljTGlzdGVuZXI6OkdlbmVyaWNMaXN0ZW5lcigpCit7Cit9CisKK0dlbmVy
aWNMaXN0ZW5lcjo6fkdlbmVyaWNMaXN0ZW5lcigpCit7Cit9CisKK3VpbnQxNl90IEdlbmVyaWNM
aXN0ZW5lcjo6cG9ydCgpCit7CisgICAgcmV0dXJuIG53X2xpc3RlbmVyX2dldF9wb3J0KG1fbGlz
dGVuZXIuZ2V0KCkpOworfQorCit2b2lkIEdlbmVyaWNMaXN0ZW5lcjo6cmVnaXN0ZXJIYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoR2VuZXJpY0Nvbm5lY3Rpb24mJik+JiYgaGFuZGxlcikKK3sKKyAgICBt
X2Nvbm5lY3Rpb25IYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKK30KKwordm9pZCBHZW5lcmlj
TGlzdGVuZXI6OnN0YXJ0KCkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyZVRMUyA9IG1ha2VCbG9ja1B0
cihOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wpOworCisgICAgaWYgKG1fY2VydGlmaWNh
dGUgJiYgbV9wcml2YXRlS2V5KSB7CisgICAgICAgIGF1dG8gbmV3SWRlbnRpdHkgPSBjcmVhdGVJ
ZGVudGl0eSgqbV9jZXJ0aWZpY2F0ZSwgKm1fcHJpdmF0ZUtleSk7CisgICAgICAgIGNvbmZpZ3Vy
ZVRMUyA9IG1ha2VCbG9ja1B0cihbaWRlbnRpdHkgPSBXVEZNb3ZlKG5ld0lkZW50aXR5KV0gKG53
X3Byb3RvY29sX29wdGlvbnNfdCBwcm90b2NvbE9wdGlvbnMpIG11dGFibGUgeworICAgICAgICAg
ICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud190bHNfY29weV9zZWNfcHJvdG9jb2xfb3B0aW9u
cyhwcm90b2NvbE9wdGlvbnMpKTsKKyAgICAgICAgICAgIGF1dG8gaWRlbnRpdHkxID0gYWRvcHRO
UyhzZWNfaWRlbnRpdHlfY3JlYXRlKGlkZW50aXR5LmdldCgpKSk7CisgICAgICAgICAgICBzZWNf
cHJvdG9jb2xfb3B0aW9uc19zZXRfbG9jYWxfaWRlbnRpdHkob3B0aW9ucy5nZXQoKSwgaWRlbnRp
dHkxLmdldCgpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgYXV0byBwYXJhbWV0ZXJzID0g
bndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3RjcChjb25maWd1cmVUTFMuZ2V0KCksIE5XX1BB
UkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKTsKKyAgICBtX2xpc3RlbmVyID0gYWRvcHRO
Uyhud19saXN0ZW5lcl9jcmVhdGUocGFyYW1ldGVycykpOworICAgIG53X2xpc3RlbmVyX3NldF9x
dWV1ZShtX2xpc3RlbmVyLmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKKworICAg
IF9fYmxvY2sgYm9vbCBsaXN0ZW5lclJlYWR5ID0gZmFsc2U7CisgICAgbndfbGlzdGVuZXJfc2V0
X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX2xpc3RlbmVyLmdldCgpLCBeKG53X2xpc3RlbmVyX3N0
YXRlX3Qgc3RhdGUsIG53X2Vycm9yX3QgZXJyb3IpIHsKKyAgICAgICAgaWYgKHN0YXRlID09IG53
X2xpc3RlbmVyX3N0YXRlX3JlYWR5KQorICAgICAgICAgICAgbGlzdGVuZXJSZWFkeSA9IHRydWU7
CisgICAgfSk7CisKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rpb25faGFuZGxlciht
X2xpc3RlbmVyLmdldCgpLAorICAgICAgICBtYWtlQmxvY2tQdHIoWyZdIChud19jb25uZWN0aW9u
X3QgbndDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBud19jb25uZWN0aW9uX3NldF9xdWV1ZShu
d0Nvbm5lY3Rpb24sIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOworICAgICAgICAgICAgbndf
Y29ubmVjdGlvbl9zdGFydChud0Nvbm5lY3Rpb24pOworCisgICAgICAgICAgICBHZW5lcmljQ29u
bmVjdGlvbiByZXNwb25zZUNvbm5lY3Rpb24obndDb25uZWN0aW9uKTsKKyAgICAgICAgICAgIGlm
ICh0aGlzLT5tX2Nvbm5lY3Rpb25IYW5kbGVyKQorICAgICAgICAgICAgICAgIHRoaXMtPm1fY29u
bmVjdGlvbkhhbmRsZXIoV1RGTW92ZShyZXNwb25zZUNvbm5lY3Rpb24pKTsKKyAgICAgICAgfSku
Z2V0KCkpOworCisgICAgbndfbGlzdGVuZXJfc3RhcnQobV9saXN0ZW5lci5nZXQoKSk7CisgICAg
VXRpbDo6cnVuKCZsaXN0ZW5lclJlYWR5KTsKK30KKwordm9pZCBHZW5lcmljTGlzdGVuZXI6OmNh
bmNlbCgpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBf
X2Jsb2NrIGJvb2wgY2FuY2VsbGVkID0gZmFsc2U7CisgICAgbndfbGlzdGVuZXJfc2V0X3N0YXRl
X2NoYW5nZWRfaGFuZGxlcihtX2xpc3RlbmVyLmdldCgpLCBeKG53X2xpc3RlbmVyX3N0YXRlX3Qg
c3RhdGUsIG53X2Vycm9yX3QgZXJyb3IpIHsKKyAgICAgICAgaWYgKHN0YXRlID09IG53X2xpc3Rl
bmVyX3N0YXRlX2NhbmNlbGxlZCkKKyAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7CisgICAg
fSk7CisgICAgbndfbGlzdGVuZXJfY2FuY2VsKG1fbGlzdGVuZXIuZ2V0KCkpOworICAgIFV0aWw6
OnJ1bigmY2FuY2VsbGVkKTsKKyAgICBtX2xpc3RlbmVyID0gbnVsbHB0cjsKK30KKworUmV0YWlu
UHRyPFNlY0lkZW50aXR5UmVmPiBHZW5lcmljTGlzdGVuZXI6OmNyZWF0ZUlkZW50aXR5KEdlbmVy
aWNDZXJ0aWZpY2F0ZSYgY2VydGlmaWNhdGUsIEdlbmVyaWNQcml2YXRlS2V5JiBwcml2YXRlS2V5
KQoreworICAgIHJldHVybiBhZG9wdENGKFNlY0lkZW50aXR5Q3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGNlcnRpZmljYXRlLmNlcnRpZmljYXRlLmdldCgpLCBwcml2YXRlS2V5LmtleS5nZXQo
KSkpOworfQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBT
ZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCmluZGV4IGY0
ODI2MGYxNjQ1MmIzMzYzNDQ0ZjEyNDgxNTkxMjFlNjc1ZmNjY2IuLjFlZDM2YTIxM2M0OWM1ODUw
MGEyMTczNTUwM2Q5MzhlOGRkNTcwOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvSFRUUFNlcnZlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0ICJHZW5l
cmljSFRUUFNlcnZlci5oIgorCiAjaW1wb3J0IDxOZXR3b3JrL05ldHdvcmsuaD4KICNpbXBvcnQg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KQEAgLTMy
LDEwICszNCwxMCBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogY2xhc3Mg
Q29ubmVjdGlvbjsKLXN0cnVjdCBIVFRQUmVzcG9uc2U7CiAKIGNsYXNzIEhUVFBTZXJ2ZXIgewog
cHVibGljOgpAQCAtNDMsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBQcm90b2Nv
bCA6IHVpbnQ4X3QgeyBIdHRwLCBIdHRwcywgSHR0cHNXaXRoTGVnYWN5VExTLCBIdHRwMiB9Owog
ICAgIHVzaW5nIENlcnRpZmljYXRlVmVyaWZpZXIgPSBGdW5jdGlvbjx2b2lkKHNlY19wcm90b2Nv
bF9tZXRhZGF0YV90LCBzZWNfdHJ1c3RfdCwgc2VjX3Byb3RvY29sX3ZlcmlmeV9jb21wbGV0ZV90
KT47CiAKLSAgICBIVFRQU2VydmVyKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3Ry
aW5nLCBIVFRQUmVzcG9uc2U+PiwgUHJvdG9jb2wgPSBQcm90b2NvbDo6SHR0cCwgQ2VydGlmaWNh
dGVWZXJpZmllciYmID0gbnVsbHB0ciwgUmV0YWluUHRyPFNlY0lkZW50aXR5UmVmPiYmID0gbnVs
bHB0ciwgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCA9IHsgfSk7CisgICAgSFRUUFNlcnZl
cihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgR2VuZXJpY0hUVFBSZXNw
b25zZT4+LCBQcm90b2NvbCA9IFByb3RvY29sOjpIdHRwLCBDZXJ0aWZpY2F0ZVZlcmlmaWVyJiYg
PSBudWxscHRyLCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYgPSBudWxscHRyLCBzdGQ6Om9w
dGlvbmFsPHVpbnQxNl90PiBwb3J0ID0geyB9KTsKICAgICBIVFRQU2VydmVyKEZ1bmN0aW9uPHZv
aWQoQ29ubmVjdGlvbik+JiYsIFByb3RvY29sID0gUHJvdG9jb2w6Okh0dHApOwogICAgIH5IVFRQ
U2VydmVyKCk7CiAgICAgdWludDE2X3QgcG9ydCgpIGNvbnN0OwpAQCAtODMsMzkgKzg1LDYgQEAg
cHJpdmF0ZToKICAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CiB9
OwogCi1zdHJ1Y3QgSFRUUFJlc3BvbnNlIHsKLSAgICBlbnVtIGNsYXNzIFRlcm1pbmF0ZUNvbm5l
Y3Rpb24geyBObywgWWVzIH07Ci0KLSAgICBIVFRQUmVzcG9uc2UoVmVjdG9yPHVpbnQ4X3Q+JiYg
Ym9keSkKLSAgICAgICAgOiBib2R5KFdURk1vdmUoYm9keSkpIHsgfQotICAgIEhUVFBSZXNwb25z
ZShjb25zdCBTdHJpbmcmIGJvZHkpCi0gICAgICAgIDogYm9keShib2R5RnJvbVN0cmluZyhib2R5
KSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVy
RmllbGRzLCBjb25zdCBTdHJpbmcmIGJvZHkpCi0gICAgICAgIDogaGVhZGVyRmllbGRzKFdURk1v
dmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7
IH0KLSAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIGNvbnN0IFN0cmluZyYgYm9keSA9IHsgfSkK
LSAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCi0gICAgICAgICwgaGVhZGVyRmllbGRz
KFdURk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJv
ZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UoVGVybWluYXRlQ29ubmVjdGlvbiB0ZXJtaW5hdGVD
b25uZWN0aW9uKQotICAgICAgICA6IHRlcm1pbmF0ZUNvbm5lY3Rpb24odGVybWluYXRlQ29ubmVj
dGlvbikgeyB9Ci0KLSAgICBIVFRQUmVzcG9uc2UoY29uc3QgSFRUUFJlc3BvbnNlJikgPSBkZWZh
dWx0OwotICAgIEhUVFBSZXNwb25zZShIVFRQUmVzcG9uc2UmJikgPSBkZWZhdWx0OwotICAgIEhU
VFBSZXNwb25zZSgpID0gZGVmYXVsdDsKLSAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShjb25z
dCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7Ci0gICAgSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0o
SFRUUFJlc3BvbnNlJiYpID0gZGVmYXVsdDsKLQotICAgIGVudW0gY2xhc3MgSW5jbHVkZUNvbnRl
bnRMZW5ndGggOiBib29sIHsgTm8sIFllcyB9OwotICAgIFZlY3Rvcjx1aW50OF90PiBzZXJpYWxp
emUoSW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJbmNsdWRlQ29udGVudExlbmd0aDo6WWVzKTsKLSAg
ICBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7IDIwMCB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8dWludDhfdD4gYm9keTsKLSAgICBUZXJt
aW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24geyBUZXJtaW5hdGVDb25uZWN0aW9u
OjpObyB9OwotfTsKLQogbmFtZXNwYWNlIEgyIHsKIAogLy8gaHR0cHM6Ly9odHRwMi5naXRodWIu
aW8vaHR0cDItc3BlYy8jcmZjLnNlY3Rpb24uNC4xCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW0KaW5kZXggMWJmOGY2Mjg3ZTg5ZjEyZDcwMDEyZGJhMmU3MDhiYzJhMzA4ZWQ3
NC4uZDZjZmUxZjI5MDcxMTI3OGQ5MDQwY2UyZTBiZWViZTI5MDEwZjc4NyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKKyBiR2Vu
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtMzksMTYgKzM5
LDE2IEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0cnVjdCBIVFRQU2VydmVyOjpS
ZXF1ZXN0RGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXF1ZXN0RGF0YSwgV1RG
OjpEZXN0cnVjdGlvblRocmVhZDo6TWFpblJ1bkxvb3A+IHsKLSAgICBSZXF1ZXN0RGF0YShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9u
c2VzKQotICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWly
PFN0cmluZywgSFRUUFJlc3BvbnNlPj4gbGlzdCkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywg
SFRUUFJlc3BvbnNlPiBtYXA7CisgICAgUmVxdWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0
PHN0ZDo6cGFpcjxTdHJpbmcsIEdlbmVyaWNIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMpCisgICAg
OiByZXF1ZXN0TWFwKFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBH
ZW5lcmljSFRUUFJlc3BvbnNlPj4gbGlzdCkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgR2Vu
ZXJpY0hUVFBSZXNwb25zZT4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBsaXN0KQog
ICAgICAgICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CiAgICAgICAgIHJl
dHVybiBtYXA7CiAgICAgfShyZXNwb25zZXMpKSB7IH0KICAgICAKICAgICBzaXplX3QgcmVxdWVz
dENvdW50IHsgMCB9OwotICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IHJl
cXVlc3RNYXA7CisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIEdlbmVyaWNIVFRQUmVzcG9uc2U+
IHJlcXVlc3RNYXA7CiAgICAgVmVjdG9yPENvbm5lY3Rpb24+IGNvbm5lY3Rpb25zOwogfTsKIApA
QCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgSFRUUFNlcnZlcjo6Y2FuY2VsKCkKICAgICAgICAgY29u
bmVjdGlvbi5jYW5jZWwoKTsKIH0KIAotSFRUUFNlcnZlcjo6SFRUUFNlcnZlcihzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2VzLCBQ
cm90b2NvbCBwcm90b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYmIHZlcmlmaWVyLCBSZXRhaW5Q
dHI8U2VjSWRlbnRpdHlSZWY+JiYgaWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBv
cnQpCitIVFRQU2VydmVyOjpIVFRQU2VydmVyKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBh
aXI8U3RyaW5nLCBHZW5lcmljSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2VzLCBQcm90b2NvbCBwcm90
b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYmIHZlcmlmaWVyLCBSZXRhaW5QdHI8U2VjSWRlbnRp
dHlSZWY+JiYgaWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpCiAgICAgOiBt
X3JlcXVlc3REYXRhKGFkb3B0UmVmKCpuZXcgUmVxdWVzdERhdGEocmVzcG9uc2VzKSkpCiAgICAg
LCBtX2xpc3RlbmVyKGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRlKGxpc3RlbmVyUGFyYW1ldGVy
cyhwcm90b2NvbCwgV1RGTW92ZSh2ZXJpZmllciksIFdURk1vdmUoaWRlbnRpdHkpLCBwb3J0KS5n
ZXQoKSkpKQogICAgICwgbV9wcm90b2NvbChwcm90b2NvbCkKQEAgLTE3MSwyMiArMTcxLDYgQEAg
c2l6ZV90IEhUVFBTZXJ2ZXI6OnRvdGFsUmVxdWVzdHMoKSBjb25zdAogICAgIHJldHVybiBtX3Jl
cXVlc3REYXRhLT5yZXF1ZXN0Q291bnQ7CiB9CiAKLXN0YXRpYyBTdHJpbmcgc3RhdHVzVGV4dCh1
bnNpZ25lZCBzdGF0dXNDb2RlKQotewotICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgewotICAgIGNh
c2UgMTAxOgotICAgICAgICByZXR1cm4gIlN3aXRjaGluZyBQcm90b2NvbHMiX3M7Ci0gICAgY2Fz
ZSAyMDA6Ci0gICAgICAgIHJldHVybiAiT0siX3M7Ci0gICAgY2FzZSAzMDE6Ci0gICAgICAgIHJl
dHVybiAiTW92ZWQgUGVybWFuZW50bHkiX3M7Ci0gICAgY2FzZSA0MDQ6Ci0gICAgICAgIHJldHVy
biAiTm90IEZvdW5kIl9zOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCiBzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZy
b21TdHJpbmcoU3RyaW5nJiYgcykKIHsKICAgICBhdXRvIGltcGwgPSBzLnJlbGVhc2VJbXBsKCk7
CkBAIC0yMTYsMTIgKzIwMCw2IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gdmVjdG9yRnJvbURh
dGEoZGlzcGF0Y2hfZGF0YV90IGNvbnRlbnQpCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKLXN0
YXRpYyB2b2lkIGFwcGVuZFVURjhUb1ZlY3RvcihWZWN0b3I8dWludDhfdD4mIHZlY3RvciwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsKLSAg
ICB2ZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0ZjguZGF0
YSgpKSwgdXRmOC5sZW5ndGgoKSk7Ci19Ci0KIFN0cmluZyBIVFRQU2VydmVyOjpwYXJzZVBhdGgo
Y29uc3QgVmVjdG9yPGNoYXI+JiByZXF1ZXN0KQogewogICAgIGlmICghcmVxdWVzdC5zaXplKCkp
CkBAIC0yNTIsNyArMjMwLDcgQEAgdm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyhD
b25uZWN0aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWUKICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShyZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRoKSwg
IlRoaXMgSFRUUFNlcnZlciBkb2VzIG5vdCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVxdWVz
dCBmb3IgJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9uc2Ug
PSByZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7Ci0gICAgICAgIGlmIChyZXNwb25z
ZS50ZXJtaW5hdGVDb25uZWN0aW9uID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlv
bjo6WWVzKQorICAgICAgICBpZiAocmVzcG9uc2UudGVybWluYXRlQ29ubmVjdGlvbiA9PSBHZW5l
cmljSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMpCiAgICAgICAgICAgICBy
ZXR1cm4gY29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQo
cmVzcG9uc2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gewpAQCAtMzQ3
LDExICszMjUsMTEgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbm5lY3Rpb25IYW5kbGUKICAgICAgICAgICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOwogICAg
ICAgICB9OwogCi0gICAgICAgIGNvbm5lY3Rpb24uc2VuZChIVFRQUmVzcG9uc2UoMTAxLCB7Cisg
ICAgICAgIGNvbm5lY3Rpb24uc2VuZChHZW5lcmljSFRUUFJlc3BvbnNlKDEwMSwgewogICAgICAg
ICAgICAgeyAiVXBncmFkZSIsICJ3ZWJzb2NrZXQiIH0sCiAgICAgICAgICAgICB7ICJDb25uZWN0
aW9uIiwgIlVwZ3JhZGUiIH0sCiAgICAgICAgICAgICB7ICJTZWMtV2ViU29ja2V0LUFjY2VwdCIs
IHdlYlNvY2tldEFjY2VwdFZhbHVlKHJlcXVlc3QpIH0KLSAgICAgICAgfSkuc2VyaWFsaXplKEhU
VFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Ok5vKSwgV1RGTW92ZShjb25uZWN0aW9u
SGFuZGxlcikpOworICAgICAgICB9KS5zZXJpYWxpemUoR2VuZXJpY0hUVFBSZXNwb25zZTo6SW5j
bHVkZUNvbnRlbnRMZW5ndGg6Ok5vKSwgV1RGTW92ZShjb25uZWN0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQogCkBAIC0zNzMsMjkgKzM1MSw2IEBAIHZvaWQgQ29ubmVjdGlvbjo6Y2FuY2VsKCkK
ICAgICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOwogfQogCi1WZWN0b3I8dWludDhfdD4gSFRUUFJl
c3BvbnNlOjpib2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGFwcGVuZFVURjhUb1ZlY3Rvcih2ZWN0b3IsIHN0cmlu
Zyk7Ci0gICAgcmV0dXJuIHZlY3RvcjsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25z
ZTo6c2VyaWFsaXplKEluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50TGVuZ3RoKQot
ewotICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOwotICAgIHJlc3BvbnNlQnVpbGRl
ci5hcHBlbmQoIkhUVFAvMS4xICIsIHN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChzdGF0dXND
b2RlKSwgIlxyXG4iKTsKLSAgICBpZiAoaW5jbHVkZUNvbnRlbnRMZW5ndGggPT0gSW5jbHVkZUNv
bnRlbnRMZW5ndGg6OlllcykKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVu
dC1MZW5ndGg6ICIsIGJvZHkuc2l6ZSgpLCAiXHJcbiIpOwotICAgIGZvciAoYXV0byYgcGFpciA6
IGhlYWRlckZpZWxkcykKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwg
IjogIiwgcGFpci52YWx1ZSwgIlxyXG4iKTsKLSAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJc
clxuIik7Ci0gICAgCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzVG9TZW5kOwotICAgIGFwcGVu
ZFVURjhUb1ZlY3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCkpOwot
ICAgIGJ5dGVzVG9TZW5kLmFwcGVuZFZlY3Rvcihib2R5KTsKLSAgICByZXR1cm4gYnl0ZXNUb1Nl
bmQ7Ci19Ci0KIHZvaWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFtZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewogICAgIGF1
dG8gZnJhbWVUeXBlID0gZnJhbWUudHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4v
UGxhdGZvcm1Tb2NrZXRXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZGJkMGQ5MTAyODc0Y2NlOGUxYTk0
NjU2MWUzYmNjYzdhYWQwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKwor
I2luY2x1ZGUgPG11dGV4PgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2Ug
U29ja2V0IHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCit7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGZsYWc7CisKKyAgICBzdGQ6OmNhbGxfb25jZShmbGFnLCBbXSB7CisgICAgICAg
IFdTQURBVEEgZGF0YTsKKyAgICAgICAgV1NBU3RhcnR1cChNQUtFV09SRCgyLCAwKSwgJmRhdGEp
OworICAgIH0pOworfQorCitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQg
cHJvdG9jb2wpCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAgIHJldHVybiA6OnNvY2tldChkb21h
aW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCBzb2Nr
ZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCAhPSBJTlZBTElEX1NPQ0tFVDsKK30KKworU29ja2V0
IGFjY2VwdChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OmFjY2VwdChzb2NrZXQsIG51
bGxwdHIsIG51bGxwdHIpOworfQorCitpbnQgc2h1dGRvd24oU29ja2V0IHNvY2tldCkKK3sKKyAg
ICByZXR1cm4gOjpzaHV0ZG93bihzb2NrZXQsIFNEX0JPVEgpOworfQorCitpbnQgY2xvc2UoU29j
a2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpjbG9zZXNvY2tldChzb2NrZXQpOworfQorCitp
bnQgcmVhZChTb2NrZXQgc29ja2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAg
ICByZXR1cm4gOjpyZWN2KHNvY2tldCwgc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIGNvdW50
LCAwKTsKK30KKworaW50IHdyaXRlKFNvY2tldCBzb2NrZXQsIGNvbnN0IHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnNlbmQoc29ja2V0LCBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBTb2Nr
ZXQKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450596</attachid>
            <date>2022-02-01 17:46:48 -0800</date>
            <delta_ts>2022-02-03 03:56:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20220202104607.patch</filename>
            <type>text/plain</type>
            <size>64312</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4OTE3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmZjNTY2Zjc0ZTFhMmQwZWQ1NWVlMDQ5YmNhZGQzMjUy
MzkzZmM2OC4uYWNiMGUxODAzY2YxNmE0MTI0NDk1ZTQzZjhlZDM3ZWNiNGZkYzMxYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
MCBAQAorMjAyMi0wMi0wMSAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudGVkIENvbm5lY3Rpb24gYW5kIEhUVFBTZXJ2ZXIgY2xhc3NlcyB3aGljaCBhcmUgZGVjbGFy
ZWQgaW4gY29jb2EvSFRUUFNlcnZlci5oCisgICAgICAgIFRoZSBpbnRlcmZhY2VzIGFyZSBhbG9t
b3N0IHRoZSBzYW1lLCBidXQgSFRUUFNlcnZlciBjb25zdHJ1Y3RvciBhbmQgYSBDb25uZWN0aW9u
OjpzZW5kIGZ1bmN0aW9uIHZhcnkuCisgICAgICAgIFRoaXMgaXMgYmVjYXVzZSB3aW5jYWlybyBw
b3J0IGRvZXMgbm90IGhhdmUgU2VjSWRlbnRpdHlSZWYgYW5kIGRpc3BhdGNoX2RhdGFfdCB0eXBl
cy4KKworICAgICAgICBUZXN0czogVGVzdHMvV2ViS2l0L1NpbXBsZUhUVFBTZXJ2ZXIuY3BwCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmRlbGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6ZGVsZXRlcjxFVlBfUEtFWT46Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eTo6cHJpdmF0ZUtleSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5Ojp4NTA5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHk6OnNldFByaXZhdGVLZXkpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eTo6c2V0WDUwOSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTZWN1cml0eUlkZW50aXR5Ojppc1ZhbGlkKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OmNlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OnByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6cHVibGljS2V5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6OkNvbm5lY3Rpb25FbnRpdHkpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0eTo6fkNvbm5lY3Rpb25FbnRpdHkpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0eTo6c29ja2V0KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6OnNzbCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXJQT1NJWC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6aW5pdGlhbGl6ZVNTTExpYnJhcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6U2VjdXJpdHlJZGVudGl0eVBFTTo6U2VjdXJpdHlJZGVudGl0eVBFTSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjppZGVudGl0eSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uRW50aXR5OjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpDb25uZWN0aW9uTGlzdGVuZXIpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjp+Q29ubmVjdGlvbkxpc3RlbmVy
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6aXNWYWxpZCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OnBvcnQgY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpzdGFydCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OnN0b3ApOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpyZWdpc3RlckhhbmRsZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpzZXRTZWN1cml0eUlk
ZW50aXR5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6aXNT
ZWN1cmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjphY2Nl
cHRTU0xDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0
ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmcpOgorICAgICAgICAoY2VydGlmaWNhdGVQcml2YXRlS2V5
RGVmYXVsdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnNvY2tldCBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpzc2wgY29uc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6c2VuZEJ5dGVzUHJvY2Vzcyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpzZW5kIGNvbnN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb246OnJlY2VpdmVCeXRlc1Byb2Nlc3MpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnJlY2VpdmVIVFRQUmVxdWVzdCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp0ZXJtaW5hdGUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L0hUVFBTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6OlJlcXVlc3REYXRhOjpSZXF1ZXN0RGF0YSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpIVFRQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6On5IVFRQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnBhcnNlQXV0aGVudGlj
YXRpb25DcmVkZW50aWFsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJl
c3BvbmRUb1JlcXVlc3RzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBv
cnQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6c2NoZW1lIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnVybCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhPSyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpIVFRQU2VydmVyOjp0b3RhbFJlcXVlc3RzIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBhcnNlUGF0aCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFwcGVuZFVURjhUb1Zl
Y3Rvcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXF1ZXN0OjpwYXJzZUhUVFBSZXF1
ZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0Lmg6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvU2ltcGxlSFRUUFNlcnZlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlU3RyaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNlcnZlclRlc3Rlcjo6U2VydmVyVGVzdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlNlcnZlclRlc3Rlcjo6c2V0VXNlcm5hbWVQYXNzd29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpTZXJ2ZXJUZXN0ZXI6OmxvYWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVy
VGVzdGVyOjpkaWRGYWlsTG9hZCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2
ZXJUZXN0ZXI6OmRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0IGNvbnN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6c3RhdHVzQ29kZSBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmVycm9yQ29kZSBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnZlcmlmaWNhdGlvbkVycm9y
IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6bG9jYWxpemVk
RXJyb3JEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJU
ZXN0ZXI6OnZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpjZXJ0aWZpY2F0ZUNoYWluKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dGl0bGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmg6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp1cmwpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbjo6Q29ubmVjdGlvbik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNvY2tldDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6
OnNvY2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U29ja2V0OjpzaHV0ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
b2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OndyaXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNvY2tldDo6aXNTb2NrZXRSZWFkeSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
b2NrZXQ6OmlzU29ja2V0UmVhZHlSZWFkaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNv
Y2tldDo6aXNTb2NrZXRSZWFkeVdyaXRpbmcpOgorCiAyMDIyLTAyLTAxICBKb25hdGhhbiBCZWRh
cmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVdTXSBGaXggaW5maW5hdGUgcmV0
cnkgb24gUFIgd2l0aCByZWQgVG9UIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9D
b25uZWN0aW9uTGlzdGVuZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3Rl
bmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjkwNDY1NGM2OGQ1NjQxZTQ2MGY3NmQ3YTVmODI4ZWE3ZGI1ZDcw
NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3Rl
bmVyLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCisjaWYgSEFWRShTU0wpCisjaW5jbHVkZSA8
b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgSEFWRShTU0wpCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsKKyAgICAg
ICAgWDUwOV9mcmVlKHg1MDkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8RVZQX1BLRVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoRVZQX1BLRVkqIGtleSkKKyAgICB7
CisgICAgICAgIEVWUF9QS0VZX2ZyZWUoa2V5KTsKKyAgICB9Cit9OworI2Vsc2UKK3VzaW5nIFNT
TCA9IHZvaWQ7CitzdHJ1Y3QgWDUwOSB7IH07CitzdHJ1Y3QgRVZQX1BLRVkgeyB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KSB7IH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8RVZQX1BLRVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCko
RVZQX1BLRVkqIGtleSkgeyB9Cit9OworI2VuZGlmCisKK25hbWVzcGFjZSBzc2wgewordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHVuaXF1ZV9wdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VCwgZGVs
ZXRlcjxUPj47Cit9CisKK2NsYXNzIFNlY3VyaXR5SWRlbnRpdHkgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4mIHBy
aXZhdGVLZXkoKSB7IHJldHVybiBtX3ByaXZhdGVLZXk7IH0KKyAgICBzc2w6OnVuaXF1ZV9wdHI8
WDUwOT4mIHg1MDkoKSB7IHJldHVybiBtX3g1MDk7IH0KKworICAgIHZvaWQgc2V0UHJpdmF0ZUtl
eShzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+JiYgcHJpdmF0ZUtleSkgeyBtX3ByaXZhdGVLZXkg
PSBXVEZNb3ZlKHByaXZhdGVLZXkpOyB9CisgICAgdm9pZCBzZXRYNTA5KHNzbDo6dW5pcXVlX3B0
cjxYNTA5PiYmIHg1MDkpIHsgbV94NTA5ID0gV1RGTW92ZSh4NTA5KTsgfQorCisgICAgYm9vbCBp
c1ZhbGlkKCkgeyByZXR1cm4gbV9wcml2YXRlS2V5ICYmIG1feDUwOTsgfQorcHJpdmF0ZToKKyAg
ICBzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+IG1fcHJpdmF0ZUtleSB7IG51bGxwdHIgfTsKKyAg
ICBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4gbV94NTA5IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3Mg
U2VjdXJpdHlJZGVudGl0eVBFTSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBLZXlUeXBlIHsg
TnVsbFR5cGUsIFJTQVR5cGUsIEVDVHlwZSB9OworCisgICAgU2VjdXJpdHlJZGVudGl0eVBFTShL
ZXlUeXBlLCBpbnQgYml0TGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBT
dHJpbmcmIHByaXZhdGVLZXksIGNvbnN0IFN0cmluZyYgcHVibGljS2V5KTsKKyAgICBTZWN1cml0
eUlkZW50aXR5UEVNKGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+IGlkZW50aXR5KCk7CisKKyAgICBTdHJpbmcgY2VydGlm
aWNhdGUoKSB7IHJldHVybiBtX2NlcnRpZmljYXRlOyB9CisgICAgU3RyaW5nIHByaXZhdGVLZXko
KSB7IHJldHVybiBtX3ByaXZhdGVLZXk7IH0KKyAgICBTdHJpbmcgcHVibGljS2V5KCkgeyByZXR1
cm4gbV9wdWJsaWNLZXk7IH0KK3ByaXZhdGU6CisgICAgS2V5VHlwZSBtX2tleVR5cGUgeyBLZXlU
eXBlOjpOdWxsVHlwZSB9OworICAgIGludCBtX2JpdExlbmd0aCB7IDAgfTsKKyAgICBTdHJpbmcg
bV9jZXJ0aWZpY2F0ZTsKKyAgICBTdHJpbmcgbV9wcml2YXRlS2V5OworICAgIFN0cmluZyBtX3B1
YmxpY0tleTsKK307CisKK2NsYXNzIENvbm5lY3Rpb25FbnRpdHkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDb25uZWN0aW9uRW50aXR5PiB7CitwdWJsaWM6CisgICAgQ29ubmVjdGlvbkVudGl0eShTb2Nr
ZXQ6OlNvY2tldCBzb2NrZXQsIFNTTCogc3NsKQorICAgICAgICA6IG1fc29ja2V0KHNvY2tldCkK
KyAgICAgICAgLCBtX3NzbChzc2wpIHsgfQorICAgIH5Db25uZWN0aW9uRW50aXR5KCkgeyBjYW5j
ZWwoKTsgfQorCisgICAgU29ja2V0OjpTb2NrZXQgc29ja2V0KCkgeyByZXR1cm4gbV9zb2NrZXQ7
IH0KKyAgICBTU0wqIHNzbCgpIHsgcmV0dXJuIG1fc3NsOyB9CisKKyAgICB2b2lkIGNhbmNlbCgp
OworcHJpdmF0ZToKKyAgICBTb2NrZXQ6OlNvY2tldCBtX3NvY2tldCB7IFNvY2tldDo6SW52YWxp
ZFNvY2tldCB9OworICAgIFNTTCogbV9zc2wgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBDb25u
ZWN0aW9uTGlzdGVuZXIgeworcHVibGljOgorICAgIENvbm5lY3Rpb25MaXN0ZW5lcigpOworICAg
IH5Db25uZWN0aW9uTGlzdGVuZXIoKTsKKworICAgIHVpbnQxNl90IHBvcnQoKSBjb25zdDsKKyAg
ICBib29sIGlzVmFsaWQoKTsKKyAgICBib29sIGlzU2VjdXJlKCk7CisKKyAgICB2b2lkIHNldFNl
Y3VyaXR5SWRlbnRpdHkoc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYpOworICAg
IHZvaWQgcmVnaXN0ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoU29ja2V0OjpTb2NrZXQmJiwgU1NM
Kik+JiYpOworICAgIHZvaWQgc3RhcnQodWludDE2X3QgdGFyZ2V0UG9ydCA9IDApOworICAgIHZv
aWQgc3RvcCgpOworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0JiYs
IFNTTCopPiBtX2Nvbm5lY3Rpb25IYW5kbGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZWN1cml0
eUlkZW50aXR5PiBtX3NlY3VyaXR5SWRlbnRpdHkgeyBudWxscHRyIH07CisKKyAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9uTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMg
U1NMKiBhY2NlcHRTU0xDb25uZWN0aW9uKFNvY2tldDo6U29ja2V0LCBTZWN1cml0eUlkZW50aXR5
Jik7CisKKyAgICBTb2NrZXQ6OlNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IFNvY2tldDo6SW52
YWxpZFNvY2tldCB9OworICAgIHVpbnQxNl90IG1fcG9ydDsKKyAgICBib29sIG1fbGlzdGVuaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fbGlzdGVuaW5nU3RvcHBlZCB7IGZhbHNlIH07Cit9Owor
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBP
U0lYLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyUE9TSVguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlNWExNWZiYTYzODkxMTBlYzE4MDE4YTEzZWU1MDlkNTNiM2Q0NTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBP
U0lYLmNwcApAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbkxpc3RlbmVyLmgiCisKKyNpbmNsdWRlICJVdGls
aXRpZXMuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kcyA9
IDAuMDI7IC8vIDIwbXMKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgSEFWRShT
U0wpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplU1NMTGlicmFyeSgpCit7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIHNzbEluaXRpYWxpemVkOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNzbEluaXRp
YWxpemVkLCBbXSB7CisgICAgICAgIFNTTF9saWJyYXJ5X2luaXQoKTsKKyAgICB9KTsKK30KKyNl
bmRpZgorCitTZWN1cml0eUlkZW50aXR5UEVNOjpTZWN1cml0eUlkZW50aXR5UEVNKEtleVR5cGUg
a2V5VHlwZSwgaW50IGJpdExlbmd0aCwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBwcml2YXRlS2V5LCBjb25zdCBTdHJpbmcmIHB1YmxpY0tleSkKKyAgICA6IG1fa2V5
VHlwZShrZXlUeXBlKQorICAgICwgbV9iaXRMZW5ndGgoYml0TGVuZ3RoKQorICAgICwgbV9jZXJ0
aWZpY2F0ZShjZXJ0aWZpY2F0ZSkKKyAgICAsIG1fcHJpdmF0ZUtleShwcml2YXRlS2V5KQorICAg
ICwgbV9wdWJsaWNLZXkocHVibGljS2V5KQoreworfQorCitTZWN1cml0eUlkZW50aXR5UEVNOjpT
ZWN1cml0eUlkZW50aXR5UEVNKGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUpCit7CisjaWYgSEFW
RShTU0wpCisgICAgYXV0byBjZXJ0aWZpY2F0ZUxhdGluID0gY2VydGlmaWNhdGUubGF0aW4xKCk7
CisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYoY2VydGlmaWNhdGVMYXRpbi5kYXRhKCks
IGNlcnRpZmljYXRlTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmICghbWVtKQorICAgICAgICByZXR1
cm47CisKKyAgICBCSU8qIHBlbUJJTyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlmICgh
cGVtQklPKSB7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBYNTA5KiB4NTA5ID0gUEVNX3JlYWRfYmlvX1g1MDkobWVtLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBFVlBfUEtFWSogcHVibGljS2V5ID0gWDUwOV9nZXRfcHVia2V5
KHg1MDkpOworCisgICAgUEVNX3dyaXRlX2Jpb19QVUJLRVkocGVtQklPLCBwdWJsaWNLZXkpOwor
ICAgIEJJT19mbHVzaChwZW1CSU8pOworCisgICAgQlVGX01FTSogYnVmbWVtOworICAgIEJJT19n
ZXRfbWVtX3B0cihwZW1CSU8sICZidWZtZW0pOworCisgICAgbV9jZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlOworICAgIG1fcHVibGljS2V5ID0gU3RyaW5nKGJ1Zm1lbS0+ZGF0YSwgYnVmbWVtLT5s
ZW5ndGgpOworCisgICAgaWYgKHB1YmxpY0tleSkKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwdWJs
aWNLZXkpOworICAgIGlmICh4NTA5KQorICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgQklP
X2ZyZWUocGVtQklPKTsKKyAgICBCSU9fZnJlZShtZW0pOworI2VuZGlmCit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxTZWN1cml0eUlkZW50aXR5PiBTZWN1cml0eUlkZW50aXR5UEVNOjppZGVudGl0eSgp
Cit7CisjaWYgSEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKworICAgIGF1
dG8gaWRlbnRpdHkgPSBtYWtlVW5pcXVlPFNlY3VyaXR5SWRlbnRpdHk+KCk7CisKKyAgICBhdXRv
IHBlbUxhdGluID0gbV9wcml2YXRlS2V5LmxhdGluMSgpOworICAgIEJJTyogbWVtID0gQklPX25l
d19tZW1fYnVmKHBlbUxhdGluLmRhdGEoKSwgcGVtTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmICht
ZW0pIHsKKyAgICAgICAgaWRlbnRpdHktPnNldFByaXZhdGVLZXkoc3NsOjp1bmlxdWVfcHRyPEVW
UF9QS0VZPihQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpKSk7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgfSBlbHNlCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcGVtTGF0aW4gPSBtX2NlcnRpZmljYXRlLmxhdGluMSgpOwor
ICAgIG1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1MYXRpbi5kYXRhKCksIHBlbUxhdGluLmxlbmd0
aCgpKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIGlkZW50aXR5LT5zZXRYNTA5KHNzbDo6dW5p
cXVlX3B0cjxYNTA5PihQRU1fcmVhZF9iaW9fWDUwOShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpKSk7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgfSBlbHNlCisgICAgICAgIG51
bGxwdHI7CisKKyAgICByZXR1cm4gaWRlbnRpdHk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRy
OworI2VuZGlmCit9CisKK3ZvaWQgQ29ubmVjdGlvbkVudGl0eTo6Y2FuY2VsKCkKK3sKKyNpZiBI
QVZFKFNTTCkKKyAgICBpZiAobV9zc2wpIHsKKyAgICAgICAgU1NMX2ZyZWUobV9zc2wpOworICAg
ICAgICBtX3NzbCA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCisgICAgaWYgKFNvY2tldDo6aXNW
YWxpZFNvY2tldChtX3NvY2tldCkpIHsKKyAgICAgICAgU29ja2V0OjpzaHV0ZG93bihtX3NvY2tl
dCk7CisgICAgICAgIFNvY2tldDo6Y2xvc2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9
IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PCBzdGQ6OnBhaXI8U29ja2V0OjpTb2NrZXQsIHVpbnQxNl90PiA+IGNyZWF0ZUxpc3RlbmluZ1Nv
Y2tldCh1aW50MTZfdCB0YXJnZXRQb3J0KQoreworICAgIGNvbnN0IGludCBCYWNrbG9nID0gODsK
KyAgICBhdXRvIGxpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6c29ja2V0KFBGX0lORVQsIFNPQ0tf
U1RSRUFNLCAwKTsKKyAgICBpZiAoIVNvY2tldDo6aXNWYWxpZFNvY2tldChsaXN0ZW5pbmdTb2Nr
ZXQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgdWludDE2X3Qgc3RhcnRQ
b3J0ID0gNDkxNTI7CisgICAgdWludDE2X3QgZW5kUG9ydCA9IDY1NTM1OworICAgIGlmICh0YXJn
ZXRQb3J0KQorICAgICAgICBzdGFydFBvcnQgPSBlbmRQb3J0ID0gdGFyZ2V0UG9ydDsKKyAgICAv
LyBQb3J0cyA0OTE1Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMuIFRyeSB1bnRpbCB3ZSBm
aW5kIG9uZSB0aGF0J3MgZnJlZS4KKyAgICBmb3IgKHVpbnQxNl90IHBvcnQgPSBzdGFydFBvcnQ7
IHBvcnQgPD0gZW5kUG9ydDsgcG9ydCsrKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBu
YW1lOworICAgICAgICBtZW1zZXQoJm5hbWUsIDAsIHNpemVvZihuYW1lKSk7CisgICAgICAgIG5h
bWUuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG5hbWUuc2luX3BvcnQgPSBodG9ucyhw
b3J0KTsKKyAgICAgICAgbmFtZS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsK
KyAgICAgICAgaWYgKGJpbmQobGlzdGVuaW5nU29ja2V0LCByZWludGVycHJldF9jYXN0PHNvY2th
ZGRyKj4oJm5hbWUpLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgICAgICAgICAgLy8gVGhpcyBw
b3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4dCBwb3J0LgorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKDo6bGlzdGVuKGxpc3RlbmluZ1NvY2tldCwgQmFja2xvZykg
PT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1Nv
Y2tldCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxpc3RlbmluZ1NvY2tldCwgcG9ydCk7IC8vIFN1
Y2Nlc3NmdWxseSBzZXQgdXAgbGlzdGVuaW5nIHBvcnQuCisgICAgfQorCisgICAgLy8gQ291bGRu
J3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KKyAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1Nv
Y2tldCk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworQ29ubmVjdGlvbkxpc3RlbmVy
OjpDb25uZWN0aW9uTGlzdGVuZXIoKQoreworfQorCitDb25uZWN0aW9uTGlzdGVuZXI6On5Db25u
ZWN0aW9uTGlzdGVuZXIoKQoreworICAgIHN0b3AoKTsKK30KKworYm9vbCBDb25uZWN0aW9uTGlz
dGVuZXI6OmlzVmFsaWQoKQoreworICAgIHJldHVybiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9s
aXN0ZW5pbmdTb2NrZXQpOworfQorCit1aW50MTZfdCBDb25uZWN0aW9uTGlzdGVuZXI6OnBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BvcnQ7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3Rl
bmVyOjpzdGFydCh1aW50MTZfdCB0YXJnZXRQb3J0KQoreworICAgIGlmIChtX2xpc3RlbmluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzb2NrZXRfcG9ydCA9IGNyZWF0ZUxpc3Rlbmlu
Z1NvY2tldCh0YXJnZXRQb3J0KTsKKyAgICBpZiAoIXNvY2tldF9wb3J0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IHNvY2tldF9wb3J0LT5maXJzdDsKKyAgICBt
X3BvcnQgPSBzb2NrZXRfcG9ydC0+c2Vjb25kOworICAgIG1fbGlzdGVuaW5nU3RvcHBlZCA9IGZh
bHNlOworICAgIG1fbGlzdGVuaW5nID0gdHJ1ZTsKKyAgICBkaXNwYXRjaExpc3RlbmluZyh0aGlz
KTsKK30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnN0b3AoKQoreworICAgIGlmICghbV9s
aXN0ZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGlzdGVuaW5nU3RvcHBlZCA9IGZh
bHNlOworICAgIG1fbGlzdGVuaW5nID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZtX2xpc3Rlbmlu
Z1N0b3BwZWQpOworICAgIFNvY2tldDo6Y2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOworfQorCit2
b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoU29j
a2V0OjpTb2NrZXQmJiwgU1NMKik+JiYgaGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25IYW5k
bGVyID0gV1RGTW92ZShoYW5kbGVyKTsKK30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnNl
dFNlY3VyaXR5SWRlbnRpdHkoc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYgaWRl
bnRpdHkpCit7CisgICAgbV9zZWN1cml0eUlkZW50aXR5ID0gV1RGTW92ZShpZGVudGl0eSk7Cit9
CisKK2Jvb2wgQ29ubmVjdGlvbkxpc3RlbmVyOjppc1NlY3VyZSgpCit7CisgICAgaWYgKG1fc2Vj
dXJpdHlJZGVudGl0eSAmJiBtX3NlY3VyaXR5SWRlbnRpdHktPmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1NTTCogQ29ubmVjdGlvbkxp
c3RlbmVyOjphY2NlcHRTU0xDb25uZWN0aW9uKFNvY2tldDo6U29ja2V0IHNvY2tldCwgU2VjdXJp
dHlJZGVudGl0eSYgaWRlbnRpdHkpCit7CisjaWYgSEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNT
TExpYnJhcnkoKTsKKyAgICBTU0xfQ1RYKiBjb250ZXh0ID0gU1NMX0NUWF9uZXcoVExTX21ldGhv
ZCgpKTsKKworICAgIGludCBjZXJ0SW50LCBrZXlJbnQ7CisgICAgaWYgKGlkZW50aXR5Lng1MDko
KSkKKyAgICAgICAgY2VydEludCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGNvbnRleHQsIGlk
ZW50aXR5Lng1MDkoKS5nZXQoKSk7CisgICAgaWYgKGlkZW50aXR5LnByaXZhdGVLZXkoKSkKKyAg
ICAgICAga2V5SW50ID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleShjb250ZXh0LCBpZGVudGl0eS5w
cml2YXRlS2V5KCkuZ2V0KCkpOworCisgICAgU1NMKiBzc2wgPSBTU0xfbmV3KGNvbnRleHQpOwor
ICAgIGlmIChzc2wpIHsKKyAgICAgICAgU1NMX3NldF9mZChzc2wsIHNvY2tldCk7CisgICAgICAg
IGlmIChTU0xfYWNjZXB0KHNzbCkgPD0gMCkgeworICAgICAgICAgICAgU1NMX2ZyZWUoc3NsKTsK
KyAgICAgICAgICAgIHNzbCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTU0xf
Q1RYX2ZyZWUoY29udGV4dCk7CisgICAgcmV0dXJuIHNzbDsKKyNlbmRpZgorICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmco
Q29ubmVjdGlvbkxpc3RlbmVyKiBzZWxmKQoreworICAgIGlmIChTb2NrZXQ6OmlzU29ja2V0UmVh
ZHlSZWFkaW5nKHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0KSkgeworICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHJfaW4gYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOwor
ICAgICAgICBpbnQgbGVuID0gc2l6ZW9mKGFkZHIpOworICAgICAgICBTb2NrZXQ6OlNvY2tldCBy
ZXNwb25zZVNvY2tldCA9IDo6YWNjZXB0KHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0LCAoc29ja2Fk
ZHIqKSZhZGRyLCAmbGVuKTsKKyAgICAgICAgU1NMKiBzc2wgPSBudWxscHRyOworCisgICAgICAg
IGJvb2wgYWNjZXB0ZWQgPSBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQocmVzcG9uc2VTb2NrZXQpOwor
I2lmIEhBVkUoU1NMKQorICAgICAgICBpZiAoYWNjZXB0ZWQgJiYgc2VsZi0+bV9zZWN1cml0eUlk
ZW50aXR5ICYmIHNlbGYtPmlzU2VjdXJlKCkpIHsKKyAgICAgICAgICAgIHNzbCA9IHNlbGYtPmFj
Y2VwdFNTTENvbm5lY3Rpb24ocmVzcG9uc2VTb2NrZXQsICpzZWxmLT5tX3NlY3VyaXR5SWRlbnRp
dHkpOworICAgICAgICAgICAgaWYgKCFzc2wpCisgICAgICAgICAgICAgICAgYWNjZXB0ZWQgPSBm
YWxzZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChhY2NlcHRlZCAmJiBzZWxmLT5t
X2Nvbm5lY3Rpb25IYW5kbGVyKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2hBZnRlcigKKyAgICAgICAgICAgICAgICBTZWNvbmRzKFBvbGxpbmdJbnRlcnZhbEluU2Vjb25k
cyksCisgICAgICAgICAgICAgICAgW3NlbGYsIHJlc3BvbnNlU29ja2V0ID0gV1RGTW92ZShyZXNw
b25zZVNvY2tldCksIHNzbF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYt
Pm1fY29ubmVjdGlvbkhhbmRsZXIoV1RGTW92ZShyZXNwb25zZVNvY2tldCksIHNzbCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBTb2NrZXQ6OmNsb3NlKHJlc3BvbnNlU29ja2V0KTsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+
bV9saXN0ZW5pbmcgJiYgc2VsZi0+aXNWYWxpZCgpKSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAgICAgU2Vjb25kcyhQb2xsaW5nSW50ZXJ2YWxJblNl
Y29uZHMpLAorICAgICAgICAgICAgW3NlbGZdKCkgeworICAgICAgICAgICAgICAgIGRpc3BhdGNo
TGlzdGVuaW5nKHNlbGYpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZSB7
CisgICAgICAgIFNvY2tldDo6Y2xvc2Uoc2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAg
ICBzZWxmLT5tX2xpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICAg
ICAgc2VsZi0+bV9saXN0ZW5pbmdTdG9wcGVkID0gdHJ1ZTsKKyAgICB9Cit9Cit9CisKK1Rlc3RX
ZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU0gY2VydGlmaWNhdGVQcml2YXRlS2V5RGVmYXVs
dCgpCit7CisgICAgcmV0dXJuIFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU0oCisg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OktleVR5cGU6OlJTQVR5
cGUsCisgICAgICAgIDEwMjQsCisgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1c
biIKKyAgICAgICAgIk1JSUNUakNDQWJlZ0F3SUJBZ0lKQUtIMlR1ZFEraFU3TUEwR0NTcUdTSWIz
RFFFQkN3VUFNRUF4Q3pBSkJnTlZcbiIKKyAgICAgICAgIkJBWVRBa3BRTVE0d0RBWURWUVFJREFW
VWIydDViekVOTUFzR0ExVUVDZ3dFVTJWc1pqRVNNQkFHQTFVRUF3d0pcbiIKKyAgICAgICAgImJH
OWpZV3hvYjNOME1CNFhEVEl4TURneU16QXpNelEwT0ZvWERUTXhNRGd5TVRBek16UTBPRm93UURF
TE1Ba0dcbiIKKyAgICAgICAgIkExVUVCaE1DU2xBeERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3
WURWUVFLREFSVFpXeG1NUkl3RUFZRFZRUURcbiIKKyAgICAgICAgIkRBbHNiMk5oYkdodmMzUXdn
Wjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBSzRDbG9MS2ZyVlBcbiIKKyAgICAg
ICAgImdHYTc1MTE0UDFYM2xzM3V0dkZFZXVEbHUwM1ZVSUNjd04wZ2Uvc0NvbjNpMi9MSmdVb1kx
TExCcXRwQUpKNnpcbiIKKyAgICAgICAgIjd3aHRTVmowTnc1MVNRUkgwZ05XN2Jaa1U0SVorWDZR
OGZTemZKNnJ2eFZGejFEYXo2citxVWdwOFZ6aFFudHZcbiIKKyAgICAgICAgIkNzL1N6R3IreGNV
aXpOUFFLdEtGa1d0a3RxY2Z0UFJqQWdNQkFBR2pVREJPTUIwR0ExVWREZ1FXQkJTOVNPbktcbiIK
KyAgICAgICAgIjlGT2dBTU1kT2FMODNkSEhSZGUyc0RBZkJnTlZIU01FR0RBV2dCUzlTT25LOUZP
Z0FNTWRPYUw4M2RISFJkZTJcbiIKKyAgICAgICAgInNEQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NT
cUdTSWIzRFFFQkN3VUFBNEdCQUdXU20wQkhqK0U1Vm1PRUlmTndcbiIKKyAgICAgICAgIlJTT2x4
QXRsbFBpbklWYnhlQjIzUWs4SmhCRnNvTnk0MngxbmZyNjFxa0NJdzlackoxc3VNaUY3cVRmZVVz
bitcbiIKKyAgICAgICAgIkxZWEpNTWxlMytTU29TWFA3SFl2M2U4Z0c4L0NjN3M3Sm56cC9YaFdK
LzVjWmIzOGpPRXNpVUUxMGdVMi81OXZcbiIKKyAgICAgICAgIjZqZXlhaVpuRE4vN08rNWxIZ0lU
WjREY1xuIgorICAgICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIiwKKworICAgICAg
ICAiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG4iCisgICAgICAgICJNSUlDZFFJQkFEQU5C
Z2txaGtpRzl3MEJBUUVGQUFTQ0FsOHdnZ0piQWdFQUFvR0JBSzRDbG9MS2ZyVlBnR2E3XG4iCisg
ICAgICAgICI1MTE0UDFYM2xzM3V0dkZFZXVEbHUwM1ZVSUNjd04wZ2Uvc0NvbjNpMi9MSmdVb1kx
TExCcXRwQUpKNno3d2h0XG4iCisgICAgICAgICJTVmowTnc1MVNRUkgwZ05XN2Jaa1U0SVorWDZR
OGZTemZKNnJ2eFZGejFEYXo2citxVWdwOFZ6aFFudHZDcy9TXG4iCisgICAgICAgICJ6R3IreGNV
aXpOUFFLdEtGa1d0a3RxY2Z0UFJqQWdNQkFBRUNnWUJXZytMaFZGeDdPUFBXSUVhQUtuRVRCTzV0
XG4iCisgICAgICAgICJwT3BBT3BQOWpUcjdEN3ZldGhFTjRFREVKQ00yQTd6bmtWZyt4dW01bHFD
anNwQ0NkMk81Qk4wYTVSRVp4T0QxXG4iCisgICAgICAgICIwNXdZbHpETkMvL0VkSVB6RW15R2lQ
WmpydjdWV1VENExOeWQ0bW4rbzVNbTJrOFovSkZYRmNjaEk0Z1g2ZXRzXG4iCisgICAgICAgICJV
UGdZTW8vWVlHNkJYbTBuQVFKQkFPQnQ2ano3VW1PU1FCY0hnZVU1blA1dE95dE1IR3diY2NkVFNQ
QVlmQTdqXG4iCisgICAgICAgICJvaENvNWdBdm1VeUFnUWI3NERQZnExcnB0U2dHSC9wdDNyRUlu
SFRxTlhFQ1FRREdmUDFZY21oa2UwdVdTMDVNXG4iCisgICAgICAgICJjU0V4T2F1NVhWbHFLNzUx
RWR4d2pmNDdzd2s4cDdyNEIvbmRVQ1BmNFBTTm00ZXgzTWtVVjJrY1JCV1g2RnJrXG4iCisgICAg
ICAgICJRRTBUQWtCNDltVW81eUNaOEVyQTN0Z0JMNU5SZ3BoQWx1NCt5bkFCeWY3bkFadGovd2Jy
eWN6bHpzSG1mT0NPXG4iCisgICAgICAgICJYaFdTZi95QXJMUnFWUnJKUkl5aGlJMmphbFRSQWtC
ZWhpTjRQWE90ZG5IMnJ3SW9zUzluYTlsMXV4amIwTjB3XG4iCisgICAgICAgICJqMEwxYndtRmtL
dHpjVVUrM1QyR3dhVno5b00vOUxOWVpwWnowM1RBKzBOMVJqZ1N2dlIxQWtCa1J4Q2lOTTVSXG4i
CisgICAgICAgICJwVEtsb0F1VDJLK2ozSm96bVdPZHdFYU9BYVZsQlQ2WmlsOEVtckVCL2E2QVJv
YVF0SUJGd2htRmc3ZHA4QndMXG4iCisgICAgICAgICJrKy9wK0dnT0RwOXBcbiIKKyAgICAgICAg
Ii0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIsCisKKyAgICAgICAgIi0tLS0tQkVHSU4gUFVC
TElDIEtFWS0tLS0tXG4iCisgICAgICAgICJNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURD
QmlRS0JnUUN1QXBhQ3luNjFUNEJtdStkZGVEOVY5NWJOXG4iCisgICAgICAgICI3cmJ4UkhyZzVi
dE4xVkNBbk1EZElIdjdBcUo5NHR2eXlZRktHTlN5d2FyYVFDU2VzKzhJYlVsWTlEY09kVWtFXG4i
CisgICAgICAgICJSOUlEVnUyMlpGT0NHZmwra1BIMHMzeWVxNzhWUmM5UTJzK3EvcWxJS2ZGYzRV
Sjdid3JQMHN4cS9zWEZJc3pUXG4iCisgICAgICAgICIwQ3JTaFpGclpMYW5IN1QwWXdJREFRQUJc
biIKKyAgICAgICAgIi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgorICAgICAgICApOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzOGJmMjAx
ODhiN2FlODk1ODk0ZTY3YzE4MjlmZDU4ODRjOGE2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25QT1NJWC5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiY29jb2EvSFRUUFNlcnZlci5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQg
UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzID0gMC4wMjsgLy8gMjBtcworCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKK1NvY2tldDo6U29ja2V0IENvbm5lY3Rpb246OnNvY2tldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybiBTb2NrZXQ6OkludmFs
aWRTb2NrZXQ7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi0+c29ja2V0KCk7Cit9CisKK1NTTCog
Q29ubmVjdGlvbjo6c3NsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi0+c3NsKCk7Cit9CisK
K3ZvaWQgQ29ubmVjdGlvbjo6c2VuZEJ5dGVzUHJvY2Vzcyhjb25zdCBDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBWZWN0b3I8dWludDhfdD4mJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIGludCBzZW50VG90YWwpCit7CisgICAgaWYgKCFTb2Nr
ZXQ6OmlzVmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGRvIHsKKyAgICAgICAgaWYgKCFTb2NrZXQ6OmlzU29ja2V0UmVhZHlXcml0aW5nKGNv
bm5lY3Rpb24uc29ja2V0KCkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHNl
bnQ7CisgICAgICAgIHVpbnQ4X3QqIHB0ciA9IG1lc3NhZ2UuZGF0YSgpICsgc2VudFRvdGFsOwor
I2lmIEhBVkUoU1NMKQorICAgICAgICBpZiAoY29ubmVjdGlvbi5zc2woKSAmJiBTb2NrZXQ6Omlz
VmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgICAgICBzZW50ID0gU1NM
X3dyaXRlKGNvbm5lY3Rpb24uc3NsKCksIHB0ciwgbWVzc2FnZS5zaXplKCkgLSBzZW50VG90YWwp
OworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGlmIChTb2NrZXQ6OmlzVmFsaWRT
b2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgICAgICAgICAgc2VudCA9IFNvY2tl
dDo6d3JpdGUoY29ubmVjdGlvbi5zb2NrZXQoKSwgcHRyLCBtZXNzYWdlLnNpemUoKSAtIHNlbnRU
b3RhbCk7CisKKyAgICAgICAgQVNTRVJUKHNlbnQgPj0gMCk7CisgICAgICAgIGlmIChzZW50IDwg
MCB8fCBzZW50VG90YWwgKyBzZW50ID49IG1lc3NhZ2Uuc2l6ZSgpKSB7CisgICAgICAgICAgICBp
ZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goCisgICAgICAgICAgICAgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHNlbnRUb3RhbCArPSBzZW50OworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICBTZWNvbmRzKFBvbGxpbmdJ
bnRlcnZhbEluU2Vjb25kcyksCisgICAgICAgIFtjb25uZWN0aW9uLCBtZXNzYWdlID0gV1RGTW92
ZShtZXNzYWdlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgc2VudFRvdGFsXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHNlbmRCeXRlc1Byb2Nlc3Mo
Y29ubmVjdGlvbiwgV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHNlbnRUb3RhbCk7CisgICAgICAgIH0KKyAgICApOworfQorCit2b2lkIENvbm5lY3Rpb246OnNl
bmQoU3RyaW5nJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlVmVjdG9yOwor
ICAgIG1lc3NhZ2VWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1lc3NhZ2UudXRmOCgpLmRhdGEoKSksICBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7CisKKyAg
ICBzZW5kKFdURk1vdmUobWVzc2FnZVZlY3RvciksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpzZW5kKFZlY3Rvcjx1aW50OF90PiYmIG1lc3NhZ2Us
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sK
KyAgICBzZW5kQnl0ZXNQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgMCk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVz
UHJvY2Vzcyhjb25zdCBDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAo
IVNvY2tldDo6aXNWYWxpZFNvY2tldChjb25uZWN0aW9uLnNvY2tldCgpKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghU29ja2V0Ojppc1NvY2tldFJlYWR5UmVhZGluZyhjb25uZWN0aW9uLnNv
Y2tldCgpKSkgeworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hBZnRlcigKKyAgICAg
ICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAgICAgICAgICAgIFtj
b25uZWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICByZWNlaXZlQnl0ZXNQcm9jZXNzKGNvbm5l
Y3Rpb24sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBidWZmZXJT
aXplID0gNDA5NjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGJ1ZmZlclNpemUpOworICAg
IGludCBieXRlc1JlYWQgPSAtMTsKKyNpZiBIQVZFKFNTTCkKKyAgICBpZiAoY29ubmVjdGlvbi5z
c2woKSAmJiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAg
ICAgIGJ5dGVzUmVhZCA9IFNTTF9yZWFkKGNvbm5lY3Rpb24uc3NsKCksIHJlc3VsdC5kYXRhKCks
IGJ1ZmZlclNpemUpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoU29ja2V0Ojppc1Zh
bGlkU29ja2V0KGNvbm5lY3Rpb24uc29ja2V0KCkpKQorICAgICAgICAgICAgYnl0ZXNSZWFkID0g
U29ja2V0OjpyZWFkKGNvbm5lY3Rpb24uc29ja2V0KCksIHJlc3VsdC5kYXRhKCksIGJ1ZmZlclNp
emUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApCisgICAgICAgIHJlc3VsdC5zaHJpbmsoYnl0
ZXNSZWFkKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5jbGVhcigpOworCisgICAgaWYgKGNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaCgKKyAg
ICAgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldICgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CisgICAgfQorfQorCit2b2lkIENvbm5lY3Rpb246OnJlY2VpdmVCeXRlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlciwg
c2l6ZV90IG1pbmltdW1TaXplKSBjb25zdAoreworICAgIHJlY2VpdmVCeXRlc1Byb2Nlc3MoKnRo
aXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpy
ZWNlaXZlSFRUUFJlcXVlc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Y2hhcj4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIsIFZlY3RvcjxjaGFyPiYmIGJ1ZmZlcikgY29uc3QKK3sKKyAg
ICByZWNlaXZlQnl0ZXMoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oVmVjdG9yPHVpbnQ4X3Q+JiYg
cmVjZWl2ZWRCdWZmZXIpIG11dGFibGUgeworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKHJl
Y2VpdmVkQnVmZmVyKTsKKworICAgICAgICBhdXRvIHJlcXVlc3QgPSBIVFRQUmVxdWVzdDo6cGFy
c2VIVFRQUmVxdWVzdChyZWNlaXZlZEJ1ZmZlcik7CisgICAgICAgIGlmIChyZXF1ZXN0LmNvbXBs
ZXRlKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShidWZmZXIpKTsKKyAg
ICAgICAgZWxzZSBpZiAoIXJlY2VpdmVkQnVmZmVyLnNpemUoKSkKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMtPnJlY2Vp
dmVIVFRQUmVxdWVzdChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShidWZmZXIp
KTsKKyAgICB9KTsKK30KKwordm9pZCBDb25uZWN0aW9uOjp0ZXJtaW5hdGUoKQoreworICAgIGlm
IChtX2Nvbm5lY3Rpb24pCisgICAgICAgIG1fY29ubmVjdGlvbi0+Y2FuY2VsKCk7Cit9CisKK3Zv
aWQgQ29ubmVjdGlvbjo6Y2FuY2VsKCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9I
VFRQU2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjMxZGUyMTY2OTgxOTY3YzZjZjhmMTQzZDIyY2RkOTUwNjZlNjY4MgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSwz
MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb2Nv
YS9IVFRQU2VydmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisKK25h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RydWN0IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRh
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhLCAg
V1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpblJ1bkxvb3A+IHsKKyAgICBSZXF1ZXN0RGF0YSgp
IHsgfQorICAgIFJlcXVlc3REYXRhKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3Ry
aW5nLCBIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMpCisgICAgICAgIDogcmVxdWVzdE1hcChbXShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gbGlz
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFJl
c3BvbnNlPiBtYXA7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbGlzdCkKKyAg
ICAgICAgICAgICAgICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgICAgIH0ocmVzcG9uc2VzKSkKKyAgICB7
CisgICAgfQorCisgICAgc2l6ZV90IHJlcXVlc3RDb3VudCB7IDAgfTsKKyAgICBjb25zdCBIYXNo
TWFwPFN0cmluZywgSFRUUFJlc3BvbnNlPiByZXF1ZXN0TWFwOworICAgIFZlY3RvcjxDb25uZWN0
aW9uPiBjb25uZWN0aW9uczsKK307CisKK2NvbnN0IEhUVFBSZXNwb25zZSBSZXNwb25zZU5vdEZv
dW5kID0geworICAgIDQwNCwKKyAgICB7IH0sCisgICAgIjxodG1sPjxoZWFkPjx0aXRsZT40MDQg
Tm90IEZvdW5kPC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48aDE+RmlsZSBub3QgZm91bmQ8
L2gxPjwvYm9keT48L2h0bWw+IgorfTsKKworSFRUUFNlcnZlcjo6SFRUUFNlcnZlcihzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2Vz
LCBQcm90b2NvbCBwcm90b2NvbCwgc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYg
aWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpCisgICAgOiBtX3JlcXVlc3RE
YXRhKCBhZG9wdFJlZigqbmV3IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhKHJlc3BvbnNlcykpICkK
KyAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wpCit7CisgICAgbV9saXN0ZW5lci5yZWdpc3Rlckhh
bmRsZXIoW3RoaXNdIChTb2NrZXQ6OlNvY2tldCYmIHNvY2tldCwgU1NMKiBzc2wpIHsKKyAgICAg
ICAgYXV0byBjb25uZWN0aW9uID0gQ29ubmVjdGlvbihhZG9wdFJlZihuZXcgQ29ubmVjdGlvbkVu
dGl0eShzb2NrZXQsIHNzbCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0RGF0YS0+Y29ubmVjdGlvbnMu
YXBwZW5kKGNvbm5lY3Rpb24pOworICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9u
LCBtX3JlcXVlc3REYXRhKTsKKyAgICB9KTsKKworICAgIGlmIChwcm90b2NvbCA9PSBQcm90b2Nv
bDo6SHR0cHMpIHsKKyAgICAgICAgaWYgKGlkZW50aXR5KQorICAgICAgICAgICAgbV9saXN0ZW5l
ci5zZXRTZWN1cml0eUlkZW50aXR5KFdURk1vdmUoaWRlbnRpdHkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9saXN0ZW5lci5zZXRTZWN1cml0eUlkZW50aXR5KGNlcnRpZmljYXRlUHJp
dmF0ZUtleURlZmF1bHQoKS5pZGVudGl0eSgpKTsKKyAgICB9CisgICAgbV9saXN0ZW5lci5zdGFy
dChwb3J0ID8gKnBvcnQgOiAwKTsKK30KKworSFRUUFNlcnZlcjo6SFRUUFNlcnZlcihGdW5jdGlv
bjx2b2lkKENvbm5lY3Rpb24pPiYmIGNvbm5lY3Rpb25IYW5kbGVyLCBQcm90b2NvbCBwcm90b2Nv
bCkKKyAgICA6IG1fcmVxdWVzdERhdGEoIGFkb3B0UmVmKCpuZXcgSFRUUFNlcnZlcjo6UmVxdWVz
dERhdGEoKSkgKQorICAgICwgbV9wcm90b2NvbChwcm90b2NvbCkKK3sKKyAgICBtX2xpc3RlbmVy
LnJlZ2lzdGVySGFuZGxlcihbdGhpcywgY29ubmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbm5l
Y3Rpb25IYW5kbGVyKV0gKFNvY2tldDo6U29ja2V0JiYgc29ja2V0LCBTU0wqIHNzbCkgeworICAg
ICAgICBhdXRvIGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uKG5ldyBDb25uZWN0aW9uRW50aXR5KHNv
Y2tldCwgc3NsKSk7CisgICAgICAgIG1fcmVxdWVzdERhdGEtPmNvbm5lY3Rpb25zLmFwcGVuZChj
b25uZWN0aW9uKTsKKyAgICAgICAgY29ubmVjdGlvbkhhbmRsZXIoQ29ubmVjdGlvbihjb25uZWN0
aW9uKSk7CisgICAgfSk7CisKKyAgICBpZiAocHJvdG9jb2wgPT0gUHJvdG9jb2w6Okh0dHBzKQor
ICAgICAgICBtX2xpc3RlbmVyLnNldFNlY3VyaXR5SWRlbnRpdHkoY2VydGlmaWNhdGVQcml2YXRl
S2V5RGVmYXVsdCgpLmlkZW50aXR5KCkpOworICAgIG1fbGlzdGVuZXIuc3RhcnQoKTsKK30KKwor
SFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIoKQoreworICAgIGNhbmNlbCgpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50aWFsKFN0cmlu
ZyB0eXBlLCBTdHJpbmcgaGVhZGVyTGluZSkKK3sKKyAgICBhdXRvIGZvdW5kID0gaGVhZGVyTGlu
ZS5maW5kKHR5cGUpOworICAgIGlmIChmb3VuZCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdmFsdWUgPSBoZWFkZXJMaW5lLnN1YnN0cmluZyhm
b3VuZCArIHR5cGUubGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGls
ZSAoaW5kZXggPCB2YWx1ZS5sZW5ndGgoKSAmJiB2YWx1ZVtpbmRleF0gPT0gdScgJykKKyAgICAg
ICAgaW5kZXgrKzsKKworICAgIGlmIChpbmRleCA9PSB2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaW5kZXgp
OworfQorCit2b2lkIEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29u
bmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKK3sKKyAgICBjb25uZWN0aW9u
LnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIChWZWN0b3I8Y2hh
cj4mJiByZXF1ZXN0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RDb3VudCsrOwor
ICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBhdGgocmVxdWVzdCk7CisKKyAgICAgICAgSFRUUFJl
c3BvbnNlIHJlc3BvbnNlOworICAgICAgICBpZiAocmVxdWVzdERhdGEtPnJlcXVlc3RNYXAuY29u
dGFpbnMocGF0aCkpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3REYXRhLT5yZXF1ZXN0
TWFwLmdldChwYXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzcG9uc2UgPSBSZXNw
b25zZU5vdEZvdW5kOworCisgICAgICAgIGlmIChyZXNwb25zZS50ZXJtaW5hdGVDb25uZWN0aW9u
ID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzKQorICAgICAgICAgICAg
Y29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKKworICAgICAgICBjb25uZWN0aW9uLnNlbmQocmVzcG9u
c2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSA9IFdURk1vdmUocmVxdWVz
dERhdGEpXSAoKSB7CisgICAgICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9uLCBy
ZXF1ZXN0RGF0YSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit1aW50MTZfdCBIVFRQU2Vy
dmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0ZW5lci5wb3J0KCk7Cit9CisK
K2NvbnN0IGNoYXIqIEhUVFBTZXJ2ZXI6OnNjaGVtZSgpIGNvbnN0Cit7CisgICAgY29uc3QgY2hh
ciogc2NoZW1lID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKG1fcHJvdG9jb2wpIHsKKyAgICBjYXNl
IFByb3RvY29sOjpIdHRwOgorICAgICAgICBzY2hlbWUgPSAiaHR0cCI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzOgorICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzV2l0
aExlZ2FjeVRMUzoKKyAgICBjYXNlIFByb3RvY29sOjpIdHRwMjoKKyAgICAgICAgc2NoZW1lID0g
Imh0dHBzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6SHR0cHNQcm94eToK
KyAgICBjYXNlIFByb3RvY29sOjpIdHRwc1Byb3h5V2l0aEF1dGhlbnRpY2F0aW9uOgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gc2NoZW1l
OworfQorCisKK1VSTCBIVFRQU2VydmVyOjp1cmwoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nOworICAgIHVybFN0cmluZy5hcHBlbmQoc2NoZW1lKCkp
OworICAgIHVybFN0cmluZy5hcHBlbmQoIjovLzEyNy4wLjAuMS8iKTsKKworICAgIGlmICghcGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHVybFN0cmluZy5hcHBlbmQocGF0aCk7CisKKyAgICBVUkwg
c2VydmVyVVJMKFVSTCgpLCB1cmxTdHJpbmcudG9TdHJpbmcoKSk7CisgICAgc2VydmVyVVJMLnNl
dFBvcnQobV9saXN0ZW5lci5wb3J0KCkpOworCisgICAgcmV0dXJuIHNlcnZlclVSTDsKK30KKwor
dm9pZCBIVFRQU2VydmVyOjpjYW5jZWwoKQoreworICAgIG1fbGlzdGVuZXIuc3RvcCgpOworCisg
ICAgZm9yIChhdXRvIGNvbm5lY3Rpb24gOiBzdGQ6OmV4Y2hhbmdlKG1fcmVxdWVzdERhdGEtPmNv
bm5lY3Rpb25zLCB7IH0pKQorICAgICAgICBjb25uZWN0aW9uLmNhbmNlbCgpOworfQorCit2b2lk
IEhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoT0soQ29ubmVjdGlvbiBjb25uZWN0aW9uKQoreworICAg
IGNvbm5lY3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uXSAoVmVjdG9yPGNoYXI+
JiYpIHsKKyAgICAgICAgY29ubmVjdGlvbi5zZW5kKAorICAgICAgICAgICAgIkhUVFAvMS4xIDIw
MCBPS1xyXG4iCisgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6IDEzXHJcblxyXG4iCisgICAg
ICAgICAgICAiSGVsbG8sIFdvcmxkISIKKyAgICAgICAgKTsKKyAgICB9KTsKK30KKworc2l6ZV90
IEhUVFBTZXJ2ZXI6OnRvdGFsUmVxdWVzdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcXVl
c3REYXRhLT5yZXF1ZXN0Q291bnQ7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhD
aGFsbGVuZ2VUaGVuT0soQ29ubmVjdGlvbikKK3sKK30KKworU3RyaW5nIEhUVFBTZXJ2ZXI6OnBh
cnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3RCdWZmZXIpCit7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlcXVlc3RCdWZmZXJVOChyZXF1ZXN0QnVmZmVyLnNpemUoKSk7CisgICAgc3Rk
Ojp0cmFuc2Zvcm0ocmVxdWVzdEJ1ZmZlci5iZWdpbigpLCByZXF1ZXN0QnVmZmVyLmVuZCgpLCBy
ZXF1ZXN0QnVmZmVyVTguYmVnaW4oKSwgW10gKGNoYXIgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4oYyk7IH0pOworCisgICAgYXV0byByZXF1ZXN0ID0gSFRUUFJlcXVlc3Q6OnBhcnNl
SFRUUFJlcXVlc3QocmVxdWVzdEJ1ZmZlclU4KTsKKyAgICBpZiAoIXJlcXVlc3QuY29tcGxldGUp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gcmVxdWVzdC5wYXRoOworfQorCisK
K3N0YXRpYyBTdHJpbmcgc3RhdHVzVGV4dCh1bnNpZ25lZCBzdGF0dXNDb2RlKQoreworICAgIHN3
aXRjaCAoc3RhdHVzQ29kZSkgeworICAgIGNhc2UgMTAxOgorICAgICAgICByZXR1cm4gIlN3aXRj
aGluZyBQcm90b2NvbHMiX3M7CisgICAgY2FzZSAyMDA6CisgICAgICAgIHJldHVybiAiT0siX3M7
CisgICAgY2FzZSAzMDE6CisgICAgICAgIHJldHVybiAiTW92ZWQgUGVybWFuZW50bHkiX3M7Cisg
ICAgY2FzZSA0MDE6CisgICAgICAgIHJldHVybiAiVW5hdXRob3JpemVkIl9zOworICAgIGNhc2Ug
NDA0OgorICAgICAgICByZXR1cm4gIk5vdCBGb3VuZCJfczsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kVVRG
OFRvVmVjdG9yKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBhdXRvIHV0ZjggPSBzdHJpbmcudXRmOCgpOworICAgIHZlY3Rvci5hcHBlbmQocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgp
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6Ym9keUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKKyAgICBh
cHBlbmRVVEY4VG9WZWN0b3IodmVjdG9yLCBzdHJpbmcpOworICAgIHJldHVybiB2ZWN0b3I7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZShJbmNsdWRlQ29udGVu
dExlbmd0aCBpbmNsdWRlQ29udGVudExlbmd0aCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3BvbnNlOworICAgIHJlc3BvbnNlLmFwcGVuZCgiSFRUUC8xLjEgIik7CisgICAgcmVzcG9u
c2UuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHN0YXR1c0NvZGUpKTsKKyAgICByZXNwb25zZS5hcHBl
bmQoIiAiKTsKKyAgICByZXNwb25zZS5hcHBlbmQoc3RhdHVzVGV4dChzdGF0dXNDb2RlKSk7Cisg
ICAgcmVzcG9uc2UuYXBwZW5kKCJcclxuIik7CisKKyAgICBmb3IgKGF1dG8ga2V5IDogaGVhZGVy
RmllbGRzLmtleXMoKSkgeworICAgICAgICByZXNwb25zZS5hcHBlbmQoa2V5KTsKKyAgICAgICAg
cmVzcG9uc2UuYXBwZW5kKCI6Iik7CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChoZWFkZXJGaWVs
ZHMuZ2V0KGtleSkpOworICAgICAgICByZXNwb25zZS5hcHBlbmQoIlxyXG4iKTsKKyAgICB9CisK
KyAgICBpZiAoaW5jbHVkZUNvbnRlbnRMZW5ndGggPT0gSW5jbHVkZUNvbnRlbnRMZW5ndGg6Olll
cykgeworICAgICAgICByZXNwb25zZS5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiIpOworICAgICAg
ICByZXNwb25zZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYm9keS5zaXplSW5CeXRlcygpKSk7Cisg
ICAgfQorCisgICAgcmVzcG9uc2UuYXBwZW5kKCJcclxuXHJcbiIpOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3BvbnNlVmVjdG9yOworICAgIGFwcGVuZFVURjhUb1ZlY3RvcihyZXNwb25zZVZl
Y3RvciwgcmVzcG9uc2UudG9TdHJpbmcoKSk7CisgICAgcmVzcG9uc2VWZWN0b3IuYXBwZW5kVmVj
dG9yKGJvZHkpOworICAgIHJldHVybiByZXNwb25zZVZlY3RvcjsKK30KKworSFRUUFJlcXVlc3Qg
SFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3QoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXF1
ZXN0VmVjdG9yKQoreworICAgIGNvbnN0IFN0cmluZyBzZXBhcmF0b3IoIlxyXG5cclxuIik7CisK
KyAgICBIVFRQUmVxdWVzdCByZXF1ZXN0OworICAgIFN0cmluZyByZXF1ZXN0U3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChyZXF1ZXN0VmVjdG9yLmRhdGEoKSwgcmVxdWVzdFZlY3Rvci5zaXplKCkp
OworICAgIGF1dG8gaGVhZGVyQm9keVNlcGFyYXRvciA9IHJlcXVlc3RTdHJpbmcuZmluZChzZXBh
cmF0b3IpOworCisgICAgaWYgKGhlYWRlckJvZHlTZXBhcmF0b3IgPT0gbm90Rm91bmQpCisgICAg
ICAgIHJldHVybiByZXF1ZXN0OworCisgICAgYXV0byBoZWFkZXJTdHJpbmcgPSByZXF1ZXN0U3Ry
aW5nLnN1YnN0cmluZygwLCBoZWFkZXJCb2R5U2VwYXJhdG9yKTsKKyAgICBhdXRvIGJvZHlTdHJp
bmcgPSByZXF1ZXN0U3RyaW5nLnN1YnN0cmluZyhoZWFkZXJCb2R5U2VwYXJhdG9yICsgc2VwYXJh
dG9yLmxlbmd0aCgpKTsKKworICAgIGF1dG8gaGVhZGVyTGluZXMgPSBoZWFkZXJTdHJpbmcuc3Bs
aXQoIlxyXG4iKTsKKyAgICBhdXRvIGZpcnN0RWxlbWVudHMgPSBoZWFkZXJMaW5lc1swXS5zcGxp
dCgiICIpOworICAgIGlmIChmaXJzdEVsZW1lbnRzLnNpemUoKSA+PSAyKQorICAgICAgICByZXF1
ZXN0LnBhdGggPSBmaXJzdEVsZW1lbnRzWzFdOworCisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBoZWFkZXJMaW5lcy5zaXplKCk7IGkrKykgeworICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0g
aGVhZGVyTGluZXNbaV0uc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKGhlYWRlclZhbHVlLnNpemUo
KSA9PSAyKQorICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJGaWVsZHMuc2V0KGhlYWRlclZhbHVl
WzBdLCBoZWFkZXJWYWx1ZVsxXSk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3QuaGVhZGVyRmll
bGRzLmNvbnRhaW5zKCJDb250ZW50LUxlbmd0aCIpKSB7CisgICAgICAgIGludCBjb250ZW50TGVu
Z3RoID0gYXRvaShyZXF1ZXN0LmhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIEFTU0VSVChjb250ZW50TGVuZ3RoID49IDApOworICAgICAg
ICBpZiAoYm9keVN0cmluZy5zaXplSW5CeXRlcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb250
ZW50TGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgICAgICByZXF1ZXN0
LmJvZHkgPSBib2R5U3RyaW5nOworICAgIH0KKworICAgIHJlcXVlc3QuY29tcGxldGUgPSB0cnVl
OworICAgIHJldHVybiByZXF1ZXN0OworfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVNvY2tldC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tl
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY5MmZlNTE5YzBkZTE5NzMxYzMyNTczMmQ2YWJjM2I2ZDZiMTU0ODkK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIE9T
KFdJTkRPV1MpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5l
dC9pbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKK25hbWVzcGFjZSBTb2NrZXQgeworCisjaWYgT1MoV0lORE9XUykKK3VzaW5nIFNv
Y2tldCA9IFNPQ0tFVDsKK3VzaW5nIHNvY2tsZW5fdCA9IGludDsKK2NvbnN0ZXhwciBTb2NrZXQg
SW52YWxpZFNvY2tldCA9IElOVkFMSURfU09DS0VUOworI2Vsc2UKK3VzaW5nIFNvY2tldCA9IGlu
dDsKKyNkZWZpbmUgU09DS0VUX0VSUk9SIC0xCitjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2Nr
ZXQgPSBTT0NLRVRfRVJST1I7CisjZW5kaWYKKworU29ja2V0IHNvY2tldChpbnQgZG9tYWluLCBp
bnQgdHlwZSwgaW50IHByb3RvY29sKTsKK2Jvb2wgaXNWYWxpZFNvY2tldChTb2NrZXQpOworU29j
a2V0IGFjY2VwdChTb2NrZXQpOworaW50IHNodXRkb3duKFNvY2tldCk7CitpbnQgY2xvc2UoU29j
a2V0KTsKK2ludCByZWFkKFNvY2tldCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpOworaW50
IHdyaXRlKFNvY2tldCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpOworCitib29s
IGlzU29ja2V0UmVhZHkoU29ja2V0IHJlYWRTb2NrZXQsIFNvY2tldCB3cml0ZVNvY2tldCk7Citi
b29sIGlzU29ja2V0UmVhZHlSZWFkaW5nKFNvY2tldCk7Citib29sIGlzU29ja2V0UmVhZHlXcml0
aW5nKFNvY2tldCk7CisKK30gLy8gbmFtZXNwYWNlIFNvY2tldAorfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5j
bWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMzM4M2Ji
M2UwMTQ0Yjg3NTRjMDljNzRkNzI2M2ZjZTQyMjk4ZmVkNi4uNjUyMTZkNDdiNmI2ZGExNTM2NTY1
OWMwOTYyOGMxMjU0NzI1M2NlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdpbi5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtl
CkBAIC0xMjQsOCArMTI0LDEyIEBAIGlmIChFTkFCTEVfV0VCS0lUKQogICAgIGxpc3QoQVBQRU5E
IFRlc3RXZWJLaXRfU09VUkNFUwogICAgICAgICAke3Rlc3RfbWFpbl9TT1VSQ0VTfQogCisgICAg
ICAgIENvbm5lY3Rpb25MaXN0ZW5lclBPU0lYLmNwcAorICAgICAgICBDb25uZWN0aW9uUE9TSVgu
Y3BwCisgICAgICAgIEhUVFBTZXJ2ZXIuY3BwCiAgICAgICAgIFRlc3RzL1dlYktpdC9Db29raWVT
dG9yYWdlRmlsZS5jcHAKIAorICAgICAgICB3aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCiAgICAg
ICAgIHdpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAKICAgICAgICAgd2luL1BsYXRmb3JtV2Vi
Vmlld1dpbi5jcHAKICAgICAgICAgd2luL1V0aWxpdGllc1dpbi5jcHAKQEAgLTEzMyw2ICsxMzcs
OCBAQCBpZiAoRU5BQkxFX1dFQktJVCkKIAogICAgIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJ
Uk99KQogICAgICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKKyAgICAgICAgICAg
IFRlc3RzL1dlYktpdC9TaW1wbGVIVFRQU2VydmVyLmNwcAorCiAgICAgICAgICAgICBUZXN0cy9X
ZWJLaXQvY3VybC9DZXJ0aWZpY2F0ZXMuY3BwCiAgICAgICAgICkKICAgICBlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvU2ltcGxlSFRUUFNlcnZl
ci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9TaW1wbGVIVFRQU2VydmVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNmJiODZiOTk1ZDA1MTE4Yjk4NDE0Y2I3NzExOWE1YWQ4YjE1ZmQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvU2lt
cGxlSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvY29hL0hUVFBTZXJ2ZXIuaCIKKworI2luY2x1
ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisj
aW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQvV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxXZWJL
aXQvV0tDZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0
ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NyZWRlbnRpYWwuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V0tQcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNp
ZiBVU0UoQ1VSTCkKKyNpZiBIQVZFKFNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2Vu
ZGlmCisjaW5jbHVkZSA8V2ViS2l0L1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5oPgorI2luY2x1ZGUg
PFdlYktpdC9XS1Byb3RlY3Rpb25TcGFjZUN1cmwuaD4KKyNlbmRpZgorCisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHN0ZDo6d3N0cmluZyBjcmVhdGVTdHJpbmcoV0tTdHJp
bmdSZWYgd2tTdHJpbmcpCit7CisgICAgc2l6ZV90IG1heFNpemUgPSBXS1N0cmluZ0dldExlbmd0
aCh3a1N0cmluZyk7CisKKyAgICBzdGQ6OnZlY3RvcjxXS0NoYXI+IHdrQ2hhckJ1ZmZlcihtYXhT
aXplKTsKKyAgICBzaXplX3QgYWN0dWFsTGVuZ3RoID0gV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKHdr
U3RyaW5nLCB3a0NoYXJCdWZmZXIuZGF0YSgpLCBtYXhTaXplKTsKKyAgICByZXR1cm4gc3RkOjp3
c3RyaW5nKHdrQ2hhckJ1ZmZlci5kYXRhKCksIGFjdHVhbExlbmd0aCk7Cit9CisKK2NsYXNzIFNl
cnZlclRlc3RlciB7CitwdWJsaWM6CisgICAgU2VydmVyVGVzdGVyKCkKKyAgICB7CisgICAgICAg
IG1fY29udGV4dCA9IGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24obnVs
bHB0cikpOworICAgICAgICBtX3dlYlZpZXcgPSBtYWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4o
bV9jb250ZXh0LmdldCgpKTsKKworICAgICAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2
aWdhdGlvbkNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZuYXZpZ2F0aW9uQ2xpZW50LCAwLCBzaXpl
b2YobmF2aWdhdGlvbkNsaWVudCkpOworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmJhc2UudmVy
c2lvbiA9IDA7CisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuYmFzZS5jbGllbnRJbmZvID0gdGhp
czsKKworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZENvbW1pdE5hdmlnYXRpb24gPSBbXSAo
V0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykgeworICAgICAgICAgICAgYXV0byB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0
ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXIt
Pm1fZGlkQ2hhbmdlVGl0bGUgPSBmYWxzZTsKKyAgICAgICAgfTsKKworICAgICAgICBuYXZpZ2F0
aW9uQ2xpZW50LmRpZEZpbmlzaE5hdmlnYXRpb24gPSBbXSAoV0tQYWdlUmVmLCBXS05hdmlnYXRp
b25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAg
YXV0byB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQq
PihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFpbExvYWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAg
fTsKKworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZEZhaWxOYXZpZ2F0aW9uID0gW10gKFdL
UGFnZVJlZiwgV0tOYXZpZ2F0aW9uUmVmLCBXS0Vycm9yUmVmIGVycm9yUmVmLCBXS1R5cGVSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIGF1dG8gdGVzdGVyID0gc3Rh
dGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
ICAgICAgICAgICAgdGVzdGVyLT5tX2Vycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJy
b3JSZWYpOworICAgICAgICAgICAgdGVzdGVyLT5tX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb24g
PSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weUxvY2FsaXplZERlc2NyaXB0aW9uKGVy
cm9yUmVmKSkuZ2V0KCkpOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZhaWxMb2FkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICAgICAg
fTsKKworICAgICAgICBuYXZpZ2F0aW9uQ2xpZW50LmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRp
b24gPSBbXSAoV0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLRXJyb3JSZWYgZXJyb3JSZWYs
IFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgYXV0byB0
ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tFcnJvckdldEVy
cm9yQ29kZShlcnJvclJlZik7CisgICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxpemVkRXJyb3JE
ZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9jYWxpemVkRGVz
Y3JpcHRpb24oZXJyb3JSZWYpKS5nZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFp
bExvYWQgPSB0cnVlOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0cnVl
OworICAgICAgICB9OworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlID0gW10gKFdLUGFnZVJlZiwgV0tBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAg
IGF1dG8gcHJvdGVjdGlvblNwYWNlID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldFByb3Rl
Y3Rpb25TcGFjZShjaGFsbGVuZ2UpOworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkxpc3RlbmVy
ID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoY2hhbGxlbmdl
KTsKKyAgICAgICAgICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rpb25T
cGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisKKyAgICAgICAg
ICAgIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICAg
ICAgICAgIGF1dG8gdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRSZWNl
aXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCA9IHRydWU7CisjaWYgVVNFKENVUkwpCisg
ICAgICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm8gPSBhZG9wdFdLKFdLUHJvdGVjdGlv
blNwYWNlQ29weUNlcnRpZmljYXRlSW5mbyhwcm90ZWN0aW9uU3BhY2UpKTsKKyAgICAgICAgICAg
ICAgICB0ZXN0ZXItPm1fdmVyaWZpY2F0aW9uRXJyb3IgPSBXS0NlcnRpZmljYXRlSW5mb0dldFZl
cmlmaWNhdGlvbkVycm9yKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAgICAgICAgICAgICAg
dGVzdGVyLT5tX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gPSBjcmVhdGVTdHJpbmcoYWRv
cHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlWZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9uKGNl
cnRpZmljYXRlSW5mby5nZXQoKSkpLmdldCgpKTsKKworICAgICAgICAgICAgICAgIHRlc3Rlci0+
bV9jZXJ0aWZpY2F0ZUNoYWluLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBXS0NlcnRpZmljYXRlSW5mb0dldENlcnRpZmljYXRlQ2hhaW5TaXplKGNlcnRpZmlj
YXRlSW5mby5nZXQoKSk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlID0gYWRvcHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0SW5kZXgoY2Vy
dGlmaWNhdGVJbmZvLmdldCgpLCBpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHB0ciA9IFdLRGF0YUdldEJ5dGVzKGNlcnRpZmljYXRlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdGVyLT5tX2NlcnRpZmljYXRlQ2hhaW4ucHVzaF9iYWNrKFN0cmluZyhwdHIs
IFdLRGF0YUdldFNpemUoY2VydGlmaWNhdGUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHRlc3Rlci0+bV9hbGxvd0FueVNTTENlcnRpZmlj
YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2NlcHQgc2VydmVyIHRydXN0IikpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3JlZGVudGlhbCA9
IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQo
KSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAgICAg
ICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNp
b25MaXN0ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VD
cmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIG51bGxwdHIpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBCYXNpYykgeworICAgICAgICAgICAgICAgIGlmIChXS0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlR2V0UHJldmlvdXNGYWlsdXJlQ291bnQoY2hhbGxlbmdlKSkKKyAgICAgICAg
ICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJDYW5jZWwoZGVjaXNp
b25MaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHVzZXJuYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0ZXItPm1fdXNlcm5hbWUuY19z
dHIoKSkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0ZXItPm1fcGFzc3dvcmQuY19zdHIoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIHdrQ3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50
aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBl
cnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0
aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgd2tDcmVk
ZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRp
YWwoZGVjaXNpb25MaXN0ZW5lciwgbnVsbHB0cik7CisgICAgICAgIH07CisKKyAgICAgICAgV0tQ
YWdlUG9saWN5Q2xpZW50VjEgcGFnZVBvbGljeUNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZwYWdl
UG9saWN5Q2xpZW50LCAwLCBzaXplb2YocGFnZVBvbGljeUNsaWVudCkpOworICAgICAgICBwYWdl
UG9saWN5Q2xpZW50LmJhc2UudmVyc2lvbiA9IDE7CisgICAgICAgIHBhZ2VQb2xpY3lDbGllbnQu
YmFzZS5jbGllbnRJbmZvID0gdGhpczsKKyAgICAgICAgcGFnZVBvbGljeUNsaWVudC5kZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZSA9IFtdIChXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVVJMUmVzcG9u
c2VSZWYgcmVzcG9uc2UsIFdLVVJMUmVxdWVzdFJlZiwgYm9vbCwgV0tGcmFtZVBvbGljeUxpc3Rl
bmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAg
ICAgICAgICAgIGF1dG8gdGVzdGVyID0gc3RhdGljX2Nhc3Q8U2VydmVyVGVzdGVyKj4oY29uc3Rf
Y2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgICAgICAgICAgdGVzdGVyLT5tX3N0YXR1c0Nv
ZGUgPSBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpOworICAgICAgICAgICAg
V0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBXS1BhZ2VTdGF0ZUNsaWVudFYwIHBhZ2VTdGF0ZUNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZw
YWdlU3RhdGVDbGllbnQsIDAsIHNpemVvZihwYWdlU3RhdGVDbGllbnQpKTsKKyAgICAgICAgcGFn
ZVN0YXRlQ2xpZW50LmJhc2UudmVyc2lvbiA9IDA7CisgICAgICAgIHBhZ2VTdGF0ZUNsaWVudC5i
YXNlLmNsaWVudEluZm8gPSB0aGlzOworICAgICAgICBwYWdlU3RhdGVDbGllbnQuZGlkQ2hhbmdl
VGl0bGUgPSBbXSAoY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgYXV0byB0
ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkQ2hhbmdlVGl0bGUgPSB0cnVlOwor
ICAgICAgICB9OworCisgICAgICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KG1fd2Vi
Vmlldy0+cGFnZSgpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKyAgICAgICAgV0tQYWdlU2V0
UGFnZVBvbGljeUNsaWVudChtX3dlYlZpZXctPnBhZ2UoKSwgJnBhZ2VQb2xpY3lDbGllbnQuYmFz
ZSk7CisgICAgICAgIFdLUGFnZVNldFBhZ2VTdGF0ZUNsaWVudChtX3dlYlZpZXctPnBhZ2UoKSwg
JnBhZ2VTdGF0ZUNsaWVudC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFVzZXJuYW1lUGFz
c3dvcmQoc3RkOjpzdHJpbmcgdXNlcm5hbWUsIHN0ZDo6c3RyaW5nIHBhc3N3b3JkKQorICAgIHsK
KyAgICAgICAgbV91c2VybmFtZSA9IHVzZXJuYW1lOworICAgICAgICBtX3Bhc3N3b3JkID0gcGFz
c3dvcmQ7CisgICAgfQorCisgICAgYm9vbCBsb2FkKFN0cmluZyB1cmwsIGJvb2wgYWxsb3dBbnlT
U0xDZXJ0aWZpY2F0ZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgbV9hbGxvd0FueVNTTENlcnRp
ZmljYXRlID0gYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZTsKKyAgICAgICAgbV9kaWRGaW5pc2hMb2Fk
ID0gZmFsc2U7CisgICAgICAgIG1fZGlkRmFpbExvYWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaWRS
ZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCA9IGZhbHNlOworICAgICAgICBtX2Rp
ZENoYW5nZVRpdGxlID0gZmFsc2U7CisgICAgICAgIG1fc3RhdHVzQ29kZSA9IDA7CisgICAgICAg
IG1fZXJyb3JDb2RlID0gMDsKKyAgICAgICAgbV92ZXJpZmljYXRpb25FcnJvciA9IDA7CisgICAg
ICAgIG1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlvbi5jbGVhcigpOworICAgICAgICBtX3Zlcmlm
aWNhdGlvbkVycm9yRGVzY3JpcHRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZUNo
YWluLmNsZWFyKCk7CisKKyAgICAgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLVVJMQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHVybC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFdLUGFnZUxvYWRV
UkwobV93ZWJWaWV3LT5wYWdlKCksIHVybFJlZi5nZXQoKSk7CisgICAgICAgIFV0aWw6OnJ1bigm
bV9kaWRGaW5pc2hMb2FkKTsKKworICAgICAgICByZXR1cm4gIW1fZGlkRmFpbExvYWQ7CisgICAg
fQorCisgICAgYm9vbCBkaWRGYWlsTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkRmFpbExvYWQ7
IH0KKyAgICBib29sIGRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KCkgY29u
c3QgeyByZXR1cm4gbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdDsgfQor
ICAgIGludCBzdGF0dXNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNDb2RlOyB9CisgICAg
aW50IGVycm9yQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDb2RlOyB9CisgICAgaW50IHZl
cmlmaWNhdGlvbkVycm9yKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmljYXRpb25FcnJvcjsgfQor
ICAgIHN0ZDo6d3N0cmluZyBsb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uOyB9CisgICAgc3RkOjp3c3RyaW5nIHZlcmlm
aWNhdGlvbkVycm9yRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWNhdGlvbkVy
cm9yRGVzY3JpcHRpb247IH0KKyAgICBzdGQ6OnZlY3RvcjxTZWN1cml0eUlkZW50aXR5UEVNPiYg
Y2VydGlmaWNhdGVDaGFpbigpIHsgcmV0dXJuIG1fY2VydGlmaWNhdGVDaGFpbjsgfQorICAgIHN0
ZDo6d3N0cmluZyB0aXRsZSgpCisgICAgeworICAgICAgICBpZiAoIW1fZGlkRmluaXNoTG9hZCB8
fCBtX2RpZEZhaWxMb2FkKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6d3N0cmluZygpOworCisg
ICAgICAgIFV0aWw6OnJ1bigmbV9kaWRDaGFuZ2VUaXRsZSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVTdHJpbmcoYWRvcHRXSyhXS0ZyYW1lQ29weVRpdGxlKFdLUGFnZUdldE1haW5GcmFtZShtX3dl
YlZpZXctPnBhZ2UoKSkpKS5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9h
bGxvd0FueVNTTENlcnRpZmljYXRlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGlkRmluaXNoTG9h
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZEZhaWxMb2FkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZGlkUmVjZWl2ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3QgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9kaWRDaGFuZ2VUaXRsZSB7IGZhbHNlIH07CisKKyAgICBpbnQgbV9zdGF0dXNDb2Rl
IHsgMCB9OworICAgIGludCBtX2Vycm9yQ29kZSB7IDAgfTsKKyAgICBpbnQgbV92ZXJpZmljYXRp
b25FcnJvciB7IDAgfTsKKyAgICBzdGQ6OndzdHJpbmcgbV9sb2NhbGl6ZWRFcnJvckRlc2NyaXB0
aW9uOworICAgIHN0ZDo6d3N0cmluZyBtX3ZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb247CisK
KyAgICBzdGQ6OnN0cmluZyBtX3VzZXJuYW1lOworICAgIHN0ZDo6c3RyaW5nIG1fcGFzc3dvcmQ7
CisKKyAgICBzdGQ6OnZlY3RvcjxTZWN1cml0eUlkZW50aXR5UEVNPiBtX2NlcnRpZmljYXRlQ2hh
aW47CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3PiBtX3dlYlZpZXc7Cit9OworCitURVNUKEhUVFBT
ZXJ2ZXIsIFNpbXBsZUhUVFApCit7CisgICAgSFRUUFNlcnZlciBzZXJ2ZXIoeworICAgICAgICB7
ICIvIiwgeworICAgICAgICAgICAgMjAwLAorICAgICAgICAgICAgeyB9LAorICAgICAgICAgICAg
IjxodG1sPiA8aGVhZD48dGl0bGU+U2ltcGxlIEhUVFAgU2VydmVyPC90aXRsZT48L2hlYWQ+IDxi
b2R5PkhUVFAgaHR0cCBzZXJ2ZXIgcm9vdDwvYm9keT4gPC9odG1sPiIKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworCisgICAgU2VydmVyVGVzdGVyIGxvYWRlcjsKKyAgICBTdHJp
bmcgdG9wVVJMID0gc2VydmVyLnVybCgpLnN0cmluZygpOworCisgICAgRVhQRUNUX1RSVUUobG9h
ZGVyLmxvYWQodG9wVVJMKSk7CisgICAgRVhQRUNUX0VRKGxvYWRlci50aXRsZSgpLCBMIlNpbXBs
ZSBIVFRQIFNlcnZlciIpOworICAgIEVYUEVDVF9FUShsb2FkZXIuc3RhdHVzQ29kZSgpLCAyMDAp
OworfQorCisjaWYgSEFWRShTU0wpCitURVNUKEhUVFBTZXJ2ZXIsIFNpbXBsZUhUVFBTKQorewor
ICAgIGF1dG8gY2VydEtleVBFTSA9IGNlcnRpZmljYXRlUHJpdmF0ZUtleURlZmF1bHQoKTsKKwor
ICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHsKKyAgICAgICAgeyAiLyIsIHsKKyAgICAgICAgICAgIDIw
MCwKKyAgICAgICAgICAgIHsgfSwKKyAgICAgICAgICAgICI8aHRtbD4gPGhlYWQ+PHRpdGxlPlNp
bXBsZSBIVFRQUyBTZXJ2ZXI8L3RpdGxlPjwvaGVhZD4gPGJvZHk+SFRUUFMgaHR0cHMgc2VydmVy
IHJvb3Q8L2JvZHk+IDwvaHRtbD4iCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LCBI
VFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cHMsIGNlcnRLZXlQRU0uaWRlbnRpdHkoKSk7CisKKyAg
ICBTZXJ2ZXJUZXN0ZXIgbG9hZGVyOworICAgIFN0cmluZyB0b3BVUkwgPSBzZXJ2ZXIudXJsKCku
c3RyaW5nKCk7CisKKyAgICBFWFBFQ1RfVFJVRShsb2FkZXIubG9hZCh0b3BVUkwsIHRydWUpKTsK
KyAgICBFWFBFQ1RfRVEobG9hZGVyLnRpdGxlKCksIEwiU2ltcGxlIEhUVFBTIFNlcnZlciIpOwor
ICAgIEVYUEVDVF9FUShsb2FkZXIuc3RhdHVzQ29kZSgpLCAyMDApOworCisgICAgYXV0byBjZXJ0
aWZpY2F0ZUNoYWluID0gbG9hZGVyLmNlcnRpZmljYXRlQ2hhaW4oKTsKKyAgICBFWFBFQ1RfVFJV
RShsb2FkZXIuZGlkUmVjZWl2ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3QoKSk7CisgICAg
RVhQRUNUX0VRKGNlcnRpZmljYXRlQ2hhaW4uc2l6ZSgpLCAxKTsKKworICAgIGF1dG8gaWRlbnRp
dHkgPSBjZXJ0aWZpY2F0ZUNoYWluWzBdOworICAgIEVYUEVDVF9FUShjZXJ0S2V5UEVNLmNlcnRp
ZmljYXRlKCksIGlkZW50aXR5LmNlcnRpZmljYXRlKCkpOworICAgIEVYUEVDVF9FUShjZXJ0S2V5
UEVNLnB1YmxpY0tleSgpLCBpZGVudGl0eS5wdWJsaWNLZXkoKSk7Cit9CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9IVFRQU2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2
ZXIuaAppbmRleCA3NWQyODJlYTllNDBkMjExNWFmMTk0OGFkM2Y4ZWI4ZmM2MzdjY2Q0Li4wM2Ex
ZTRjODU2YzVhNWVkYWIyMDg0MjU3MGJkMTAxMWI2OGY1YTU0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL0hUVFBTZXJ2ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2lmIFBMQVRGT1JNKENPQ09BKQogI2ltcG9ydCA8TmV0d29yay9OZXR3b3JrLmg+CiAjaW1wb3J0
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0z
Myw2ICszNCw5IEBACiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIE9CSkNfQ0xB
U1MgTlNVUkxSZXF1ZXN0OworI2VsaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIkNvbm5lY3Rp
b25MaXN0ZW5lci5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAt
NDQsMTQgKzQ4LDIyIEBAIGNsYXNzIEhUVFBTZXJ2ZXIgewogcHVibGljOgogICAgIHN0cnVjdCBS
ZXF1ZXN0RGF0YTsKICAgICBlbnVtIGNsYXNzIFByb3RvY29sIDogdWludDhfdCB7IEh0dHAsIEh0
dHBzLCBIdHRwc1dpdGhMZWdhY3lUTFMsIEh0dHAyLCBIdHRwc1Byb3h5LCBIdHRwc1Byb3h5V2l0
aEF1dGhlbnRpY2F0aW9uIH07CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdXNpbmcgQ2VydGlm
aWNhdGVWZXJpZmllciA9IEZ1bmN0aW9uPHZvaWQoc2VjX3Byb3RvY29sX21ldGFkYXRhX3QsIHNl
Y190cnVzdF90LCBzZWNfcHJvdG9jb2xfdmVyaWZ5X2NvbXBsZXRlX3QpPjsKIAogICAgIEhUVFBT
ZXJ2ZXIoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25z
ZT4+LCBQcm90b2NvbCA9IFByb3RvY29sOjpIdHRwLCBDZXJ0aWZpY2F0ZVZlcmlmaWVyJiYgPSBu
dWxscHRyLCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYgPSBudWxscHRyLCBzdGQ6Om9wdGlv
bmFsPHVpbnQxNl90PiBwb3J0ID0geyB9KTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBIVFRQ
U2VydmVyKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9u
c2U+PiwgUHJvdG9jb2wgPSBQcm90b2NvbDo6SHR0cCwgc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5
SWRlbnRpdHk+JiYgPSBudWxscHRyLCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0ID0gc3Rk
OjpudWxsb3B0KTsKKyNlbmRpZgogICAgIEhUVFBTZXJ2ZXIoRnVuY3Rpb248dm9pZChDb25uZWN0
aW9uKT4mJiwgUHJvdG9jb2wgPSBQcm90b2NvbDo6SHR0cCk7CiAgICAgfkhUVFBTZXJ2ZXIoKTsK
ICAgICB1aW50MTZfdCBwb3J0KCkgY29uc3Q7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTlNV
UkxSZXF1ZXN0ICpyZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGF0aCA9ICIvIl9zdHIpIGNvbnN0Owog
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdFdpdGhMb2NhbGhvc3QoY29uc3QgU3RyaW5nJiBwYXRo
ID0gIi8iX3N0cikgY29uc3Q7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgVVJMIHVybChjb25z
dCBTdHJpbmcmIHBhdGggPSB7IH0pOworI2VuZGlmCiAgICAgc2l6ZV90IHRvdGFsUmVxdWVzdHMo
KSBjb25zdDsKICAgICB2b2lkIGNhbmNlbCgpOwogCkBAIC02NSwxMiArNzcsMTggQEAgcHVibGlj
OgogICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gdGVzdENlcnRpZmljYXRlKCk7CiAKIHByaXZh
dGU6CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIFJldGFpblB0cjxud19wYXJhbWV0
ZXJzX3Q+IGxpc3RlbmVyUGFyYW1ldGVycyhQcm90b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYm
LCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBv
cnQpOworI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgcmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlv
biwgUmVmPFJlcXVlc3REYXRhPik7CiAgICAgY29uc3QgY2hhciogc2NoZW1lKCkgY29uc3Q7CiAK
ICAgICBSZWY8UmVxdWVzdERhdGE+IG1fcmVxdWVzdERhdGE7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgUmV0YWluUHRyPG53X2xpc3RlbmVyX3Q+IG1fbGlzdGVuZXI7CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgQ29ubmVjdGlvbkxpc3RlbmVyIG1fbGlzdGVuZXI7CisjZW5kaWYKICAgICBQ
cm90b2NvbCBtX3Byb3RvY29sIHsgUHJvdG9jb2w6Okh0dHAgfTsKIH07CiAKQEAgLTc4LDE5ICs5
NiwzNCBAQCBjbGFzcyBDb25uZWN0aW9uIHsKIHB1YmxpYzoKICAgICB2b2lkIHNlbmQoU3RyaW5n
JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0OwogICAgIHZv
aWQgc2VuZChWZWN0b3I8dWludDhfdD4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0g
bnVsbHB0cikgY29uc3Q7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBzZW5kKFJldGFp
blB0cjxkaXNwYXRjaF9kYXRhX3Q+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51
bGxwdHIpIGNvbnN0OworI2VuZGlmCiAgICAgdm9pZCByZWNlaXZlQnl0ZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYsIHNpemVfdCBtaW5pbXVtU2l6ZSA9IDEp
IGNvbnN0OwogICAgIHZvaWQgcmVjZWl2ZUhUVFBSZXF1ZXN0KENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPGNoYXI+JiYpPiYmLCBWZWN0b3I8Y2hhcj4mJiBidWZmZXIgPSB7IH0pIGNvbnN0
OwogICAgIHZvaWQgd2ViU29ja2V0SGFuZHNoYWtlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiA9IHsgfSk7CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKICAgICB2b2lkIGNhbmNlbCgpOworI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBTb2NrZXQ6OlNvY2tldCBzb2NrZXQoKSBjb25zdDsKKyAgICBT
U0wqIHNzbCgpIGNvbnN0OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhU
VFBTZXJ2ZXI7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ29ubmVjdGlvbihud19jb25uZWN0
aW9uX3QgY29ubmVjdGlvbikKICAgICAgICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikgeyB9
CiAKICAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CisjZWxpZiBQ
TEFURk9STShXSU4pCisgICAgQ29ubmVjdGlvbihSZWZQdHI8Q29ubmVjdGlvbkVudGl0eT4mJiBj
b25uZWN0aW9uKQorICAgICAgICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKGNvbm5lY3Rpb24pKSB7
IH0KKyAgICBSZWZQdHI8Q29ubmVjdGlvbkVudGl0eT4gbV9jb25uZWN0aW9uIHsgbnVsbHB0ciB9
OworCisgICAgc3RhdGljIHZvaWQgc2VuZEJ5dGVzUHJvY2Vzcyhjb25zdCBDb25uZWN0aW9uJiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIs
IGludCBzZW50VG90YWwgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCByZWNlaXZlQnl0ZXNQcm9jZXNz
KGNvbnN0IENvbm5lY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90
PiYmKT4mJik7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBIVFRQUmVzcG9uc2UgewpAQCAtMTI2LDYg
KzE1OSwxNyBAQCBzdHJ1Y3QgSFRUUFJlc3BvbnNlIHsKICAgICBUZXJtaW5hdGVDb25uZWN0aW9u
IHRlcm1pbmF0ZUNvbm5lY3Rpb24geyBUZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9OwogfTsKIAor
I2lmIFBMQVRGT1JNKFdJTikKK3N0cnVjdCBIVFRQUmVxdWVzdCB7CisgICAgc3RhdGljIEhUVFBS
ZXF1ZXN0IHBhcnNlSFRUUFJlcXVlc3QoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpOwor
CisgICAgU3RyaW5nIHBhdGg7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmll
bGRzOworICAgIFN0cmluZyBib2R5OworICAgIGJvb2wgY29tcGxldGUgeyBmYWxzZSB9OworfTsK
KyNlbmRpZgorCiBuYW1lc3BhY2UgSDIgewogCiAvLyBodHRwczovL2h0dHAyLmdpdGh1Yi5pby9o
dHRwMi1zcGVjLyNyZmMuc2VjdGlvbi40LjEKQEAgLTE4Myw2ICsyMjcsMTAgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCisjaWYgUExBVEZPUk0oQ09DT0EpCiBS
ZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+IHRlc3RDZXJ0aWZpY2F0ZSgpOwogUmV0YWluUHRy
PFNlY0lkZW50aXR5UmVmPiB0ZXN0SWRlbnRpdHkoKTsKIFJldGFpblB0cjxTZWNJZGVudGl0eVJl
Zj4gdGVzdElkZW50aXR5MigpOworI2VsaWYgUExBVEZPUk0oV0lOKQorVGVzdFdlYktpdEFQSTo6
U2VjdXJpdHlJZGVudGl0eVBFTSBjZXJ0aWZpY2F0ZVByaXZhdGVLZXlEZWZhdWx0KCk7CisjZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2lu
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NGNjY2M2NjllYWEwOGFkY2ZiNTgxNWIzMzI2ZGYyMWFiMTVkMzk0Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3Bw
CkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCisjaW5jbHVkZSA8bXV0ZXg+CisKK25hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKK25hbWVzcGFjZSBTb2NrZXQgeworCitzdGF0aWMgdm9pZCBp
bml0aWFsaXplKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZmxhZzsKKworICAgIHN0
ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdIHsKKyAgICAgICAgV1NBREFUQSBkYXRhOworICAgICAgICBX
U0FTdGFydHVwKE1BS0VXT1JEKDIsIDApLCAmZGF0YSk7CisgICAgfSk7Cit9CisKK1NvY2tldCBz
b2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKyAgICBpbml0aWFs
aXplKCk7CisgICAgcmV0dXJuIDo6c29ja2V0KGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wpOworfQor
Citib29sIGlzVmFsaWRTb2NrZXQoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gc29ja2V0
ICE9IElOVkFMSURfU09DS0VUOworfQorCitTb2NrZXQgYWNjZXB0KFNvY2tldCBzb2NrZXQpCit7
CisgICAgcmV0dXJuIDo6YWNjZXB0KHNvY2tldCwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK2lu
dCBzaHV0ZG93bihTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OnNodXRkb3duKHNvY2tl
dCwgU0RfQk9USCk7Cit9CisKK2ludCBjbG9zZShTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVy
biA6OmNsb3Nlc29ja2V0KHNvY2tldCk7Cit9CisKK2ludCByZWFkKFNvY2tldCBzb2NrZXQsIHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnJlY3Yoc29ja2V0LCBz
dGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQorCitpbnQgd3JpdGUoU29j
a2V0IHNvY2tldCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0
dXJuIDo6c2VuZChzb2NrZXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3Vu
dCwgMCk7Cit9CisKKworYm9vbCBpc1NvY2tldFJlYWR5KFNvY2tldCByZWFkU29ja2V0LCBTb2Nr
ZXQgd3JpdGVTb2NrZXQpCit7CisgICAgZmRfc2V0IGZkc2V0UmVhZCwgZmRzZXRXcml0ZTsKKyAg
ICBGRF9aRVJPKCZmZHNldFJlYWQpOworICAgIEZEX1pFUk8oJmZkc2V0V3JpdGUpOworCisgICAg
aWYgKGlzVmFsaWRTb2NrZXQocmVhZFNvY2tldCkpCisgICAgICAgIEZEX1NFVChyZWFkU29ja2V0
LCAmZmRzZXRSZWFkKTsKKyAgICBpZiAoaXNWYWxpZFNvY2tldCh3cml0ZVNvY2tldCkpCisgICAg
ICAgIEZEX1NFVCh3cml0ZVNvY2tldCwgJmZkc2V0V3JpdGUpOworCisgICAgc3RydWN0IHRpbWV2
YWwgdGltZW91dDsKKyAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgdGltZW91dC50dl91c2Vj
ID0gMDsKKworICAgIGF1dG8gcmMgPSA6OnNlbGVjdCgwLCAmZmRzZXRSZWFkLCAmZmRzZXRXcml0
ZSwgbnVsbHB0ciwgJnRpbWVvdXQpOworICAgIHJldHVybiByYyA+IDA7Cit9CisKK2Jvb2wgaXNT
b2NrZXRSZWFkeVJlYWRpbmcoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gaXNTb2NrZXRS
ZWFkeShzb2NrZXQsIEludmFsaWRTb2NrZXQpOworfQorCitib29sIGlzU29ja2V0UmVhZHlXcml0
aW5nKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIGlzU29ja2V0UmVhZHkoSW52YWxpZFNv
Y2tldCwgc29ja2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450757</attachid>
            <date>2022-02-03 03:56:05 -0800</date>
            <delta_ts>2022-02-16 02:29:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20220203205515.patch</filename>
            <type>text/plain</type>
            <size>64086</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4OTE3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmZjNTY2Zjc0ZTFhMmQwZWQ1NWVlMDQ5YmNhZGQzMjUy
MzkzZmM2OC4uYjgxNzMwZWU0MzcwZDllNjY3Zjc3ZTM3YzRlM2RlNzIwYTc0OTQ4ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
MCBAQAorMjAyMi0wMi0wMyAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudGVkIENvbm5lY3Rpb24gYW5kIEhUVFBTZXJ2ZXIgY2xhc3NlcyB3aGljaCBhcmUgZGVjbGFy
ZWQgaW4gY29jb2EvSFRUUFNlcnZlci5oCisgICAgICAgIFRoZSBpbnRlcmZhY2VzIGFyZSBhbG9t
b3N0IHRoZSBzYW1lLCBidXQgSFRUUFNlcnZlciBjb25zdHJ1Y3RvciBhbmQgYSBDb25uZWN0aW9u
OjpzZW5kIGZ1bmN0aW9uIHZhcnkuCisgICAgICAgIFRoaXMgaXMgYmVjYXVzZSB3aW5jYWlybyBw
b3J0IGRvZXMgbm90IGhhdmUgU2VjSWRlbnRpdHlSZWYgYW5kIGRpc3BhdGNoX2RhdGFfdCB0eXBl
cy4KKworICAgICAgICBUZXN0czogVGVzdHMvV2ViS2l0L1NpbXBsZUhUVFBTZXJ2ZXIuY3BwCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmRlbGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6ZGVsZXRlcjxFVlBfUEtFWT46Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eTo6cHJpdmF0ZUtleSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5Ojp4NTA5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHk6OnNldFByaXZhdGVLZXkpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eTo6c2V0WDUwOSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTZWN1cml0eUlkZW50aXR5Ojppc1ZhbGlkKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OmNlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OnByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6cHVibGljS2V5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6OkNvbm5lY3Rpb25FbnRpdHkpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0eTo6fkNvbm5lY3Rpb25FbnRpdHkpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0eTo6c29ja2V0KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6OnNzbCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXJQT1NJWC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6aW5pdGlhbGl6ZVNTTExpYnJhcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6U2VjdXJpdHlJZGVudGl0eVBFTTo6U2VjdXJpdHlJZGVudGl0eVBFTSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjppZGVudGl0eSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uRW50aXR5OjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpDb25uZWN0aW9uTGlzdGVuZXIpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjp+Q29ubmVjdGlvbkxpc3RlbmVy
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6aXNWYWxpZCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OnBvcnQgY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpzdGFydCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OnN0b3ApOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpyZWdpc3RlckhhbmRsZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpzZXRTZWN1cml0eUlk
ZW50aXR5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6aXNT
ZWN1cmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjphY2Nl
cHRTU0xDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0
ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmcpOgorICAgICAgICAoY2VydGlmaWNhdGVQcml2YXRlS2V5
RGVmYXVsdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnNvY2tldCBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpzc2wgY29uc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6c2VuZEJ5dGVzUHJvY2Vzcyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpzZW5kIGNvbnN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb246OnJlY2VpdmVCeXRlc1Byb2Nlc3MpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OnJlY2VpdmVIVFRQUmVxdWVzdCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp0ZXJtaW5hdGUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L0hUVFBTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6OlJlcXVlc3REYXRhOjpSZXF1ZXN0RGF0YSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpIVFRQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6On5IVFRQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnBhcnNlQXV0aGVudGlj
YXRpb25DcmVkZW50aWFsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJl
c3BvbmRUb1JlcXVlc3RzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBv
cnQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6c2NoZW1lIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnVybCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhPSyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpIVFRQU2VydmVyOjp0b3RhbFJlcXVlc3RzIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBhcnNlUGF0aCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFwcGVuZFVURjhUb1Zl
Y3Rvcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXF1ZXN0OjpwYXJzZUhUVFBSZXF1
ZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0Lmg6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvU2ltcGxlSFRUUFNlcnZlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlU3RyaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNlcnZlclRlc3Rlcjo6U2VydmVyVGVzdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlNlcnZlclRlc3Rlcjo6c2V0VXNlcm5hbWVQYXNzd29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpTZXJ2ZXJUZXN0ZXI6OmxvYWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VydmVy
VGVzdGVyOjpkaWRGYWlsTG9hZCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2
ZXJUZXN0ZXI6OmRpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0IGNvbnN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6c3RhdHVzQ29kZSBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OmVycm9yQ29kZSBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJUZXN0ZXI6OnZlcmlmaWNhdGlvbkVycm9y
IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6bG9jYWxpemVk
RXJyb3JEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZXJ2ZXJU
ZXN0ZXI6OnZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U2VydmVyVGVzdGVyOjpjZXJ0aWZpY2F0ZUNoYWluKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNlcnZlclRlc3Rlcjo6dGl0bGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmg6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp1cmwpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbjo6Q29ubmVjdGlvbik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlNvY2tldDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6
OnNvY2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U29ja2V0OjpzaHV0ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
b2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OndyaXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNvY2tldDo6aXNTb2NrZXRSZWFkeSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpT
b2NrZXQ6OmlzU29ja2V0UmVhZHlSZWFkaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNv
Y2tldDo6aXNTb2NrZXRSZWFkeVdyaXRpbmcpOgorCiAyMDIyLTAyLTAxICBKb25hdGhhbiBCZWRh
cmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVdTXSBGaXggaW5maW5hdGUgcmV0
cnkgb24gUFIgd2l0aCByZWQgVG9UIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9D
b25uZWN0aW9uTGlzdGVuZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3Rl
bmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjkwNDY1NGM2OGQ1NjQxZTQ2MGY3NmQ3YTVmODI4ZWE3ZGI1ZDcw
NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3Rl
bmVyLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCisjaWYgSEFWRShTU0wpCisjaW5jbHVkZSA8
b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgSEFWRShTU0wpCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsKKyAgICAg
ICAgWDUwOV9mcmVlKHg1MDkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8RVZQX1BLRVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoRVZQX1BLRVkqIGtleSkKKyAgICB7
CisgICAgICAgIEVWUF9QS0VZX2ZyZWUoa2V5KTsKKyAgICB9Cit9OworI2Vsc2UKK3VzaW5nIFNT
TCA9IHZvaWQ7CitzdHJ1Y3QgWDUwOSB7IH07CitzdHJ1Y3QgRVZQX1BLRVkgeyB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0
ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KSB7IH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8RVZQX1BLRVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCko
RVZQX1BLRVkqIGtleSkgeyB9Cit9OworI2VuZGlmCisKK25hbWVzcGFjZSBzc2wgewordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHVuaXF1ZV9wdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VCwgZGVs
ZXRlcjxUPj47Cit9CisKK2NsYXNzIFNlY3VyaXR5SWRlbnRpdHkgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4mIHBy
aXZhdGVLZXkoKSB7IHJldHVybiBtX3ByaXZhdGVLZXk7IH0KKyAgICBzc2w6OnVuaXF1ZV9wdHI8
WDUwOT4mIHg1MDkoKSB7IHJldHVybiBtX3g1MDk7IH0KKworICAgIHZvaWQgc2V0UHJpdmF0ZUtl
eShzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+JiYgcHJpdmF0ZUtleSkgeyBtX3ByaXZhdGVLZXkg
PSBXVEZNb3ZlKHByaXZhdGVLZXkpOyB9CisgICAgdm9pZCBzZXRYNTA5KHNzbDo6dW5pcXVlX3B0
cjxYNTA5PiYmIHg1MDkpIHsgbV94NTA5ID0gV1RGTW92ZSh4NTA5KTsgfQorCisgICAgYm9vbCBp
c1ZhbGlkKCkgeyByZXR1cm4gbV9wcml2YXRlS2V5ICYmIG1feDUwOTsgfQorcHJpdmF0ZToKKyAg
ICBzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+IG1fcHJpdmF0ZUtleSB7IG51bGxwdHIgfTsKKyAg
ICBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4gbV94NTA5IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3Mg
U2VjdXJpdHlJZGVudGl0eVBFTSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBLZXlUeXBlIHsg
TnVsbFR5cGUsIFJTQVR5cGUsIEVDVHlwZSB9OworCisgICAgU2VjdXJpdHlJZGVudGl0eVBFTShL
ZXlUeXBlLCBpbnQgYml0TGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBT
dHJpbmcmIHByaXZhdGVLZXksIGNvbnN0IFN0cmluZyYgcHVibGljS2V5KTsKKyAgICBTZWN1cml0
eUlkZW50aXR5UEVNKGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+IGlkZW50aXR5KCk7CisKKyAgICBTdHJpbmcgY2VydGlm
aWNhdGUoKSB7IHJldHVybiBtX2NlcnRpZmljYXRlOyB9CisgICAgU3RyaW5nIHByaXZhdGVLZXko
KSB7IHJldHVybiBtX3ByaXZhdGVLZXk7IH0KKyAgICBTdHJpbmcgcHVibGljS2V5KCkgeyByZXR1
cm4gbV9wdWJsaWNLZXk7IH0KK3ByaXZhdGU6CisgICAgS2V5VHlwZSBtX2tleVR5cGUgeyBLZXlU
eXBlOjpOdWxsVHlwZSB9OworICAgIGludCBtX2JpdExlbmd0aCB7IDAgfTsKKyAgICBTdHJpbmcg
bV9jZXJ0aWZpY2F0ZTsKKyAgICBTdHJpbmcgbV9wcml2YXRlS2V5OworICAgIFN0cmluZyBtX3B1
YmxpY0tleTsKK307CisKK2NsYXNzIENvbm5lY3Rpb25FbnRpdHkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDb25uZWN0aW9uRW50aXR5PiB7CitwdWJsaWM6CisgICAgQ29ubmVjdGlvbkVudGl0eShTb2Nr
ZXQ6OlNvY2tldCBzb2NrZXQsIFNTTCogc3NsKQorICAgICAgICA6IG1fc29ja2V0KHNvY2tldCkK
KyAgICAgICAgLCBtX3NzbChzc2wpIHsgfQorICAgIH5Db25uZWN0aW9uRW50aXR5KCkgeyBjYW5j
ZWwoKTsgfQorCisgICAgU29ja2V0OjpTb2NrZXQgc29ja2V0KCkgeyByZXR1cm4gbV9zb2NrZXQ7
IH0KKyAgICBTU0wqIHNzbCgpIHsgcmV0dXJuIG1fc3NsOyB9CisKKyAgICB2b2lkIGNhbmNlbCgp
OworcHJpdmF0ZToKKyAgICBTb2NrZXQ6OlNvY2tldCBtX3NvY2tldCB7IFNvY2tldDo6SW52YWxp
ZFNvY2tldCB9OworICAgIFNTTCogbV9zc2wgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBDb25u
ZWN0aW9uTGlzdGVuZXIgeworcHVibGljOgorICAgIENvbm5lY3Rpb25MaXN0ZW5lcigpOworICAg
IH5Db25uZWN0aW9uTGlzdGVuZXIoKTsKKworICAgIHVpbnQxNl90IHBvcnQoKSBjb25zdDsKKyAg
ICBib29sIGlzVmFsaWQoKTsKKyAgICBib29sIGlzU2VjdXJlKCk7CisKKyAgICB2b2lkIHNldFNl
Y3VyaXR5SWRlbnRpdHkoc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYpOworICAg
IHZvaWQgcmVnaXN0ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoU29ja2V0OjpTb2NrZXQmJiwgU1NM
Kik+JiYpOworICAgIHZvaWQgc3RhcnQodWludDE2X3QgdGFyZ2V0UG9ydCA9IDApOworICAgIHZv
aWQgc3RvcCgpOworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0JiYs
IFNTTCopPiBtX2Nvbm5lY3Rpb25IYW5kbGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZWN1cml0
eUlkZW50aXR5PiBtX3NlY3VyaXR5SWRlbnRpdHkgeyBudWxscHRyIH07CisKKyAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9uTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMg
U1NMKiBhY2NlcHRTU0xDb25uZWN0aW9uKFNvY2tldDo6U29ja2V0LCBTZWN1cml0eUlkZW50aXR5
Jik7CisKKyAgICBTb2NrZXQ6OlNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IFNvY2tldDo6SW52
YWxpZFNvY2tldCB9OworICAgIHVpbnQxNl90IG1fcG9ydDsKKyAgICBib29sIG1fbGlzdGVuaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fbGlzdGVuaW5nU3RvcHBlZCB7IGZhbHNlIH07Cit9Owor
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBP
U0lYLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyUE9TSVguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlNWExNWZiYTYzODkxMTBlYzE4MDE4YTEzZWU1MDlkNTNiM2Q0NTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBP
U0lYLmNwcApAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbkxpc3RlbmVyLmgiCisKKyNpbmNsdWRlICJVdGls
aXRpZXMuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kcyA9
IDAuMDI7IC8vIDIwbXMKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgSEFWRShT
U0wpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplU1NMTGlicmFyeSgpCit7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIHNzbEluaXRpYWxpemVkOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNzbEluaXRp
YWxpemVkLCBbXSB7CisgICAgICAgIFNTTF9saWJyYXJ5X2luaXQoKTsKKyAgICB9KTsKK30KKyNl
bmRpZgorCitTZWN1cml0eUlkZW50aXR5UEVNOjpTZWN1cml0eUlkZW50aXR5UEVNKEtleVR5cGUg
a2V5VHlwZSwgaW50IGJpdExlbmd0aCwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBwcml2YXRlS2V5LCBjb25zdCBTdHJpbmcmIHB1YmxpY0tleSkKKyAgICA6IG1fa2V5
VHlwZShrZXlUeXBlKQorICAgICwgbV9iaXRMZW5ndGgoYml0TGVuZ3RoKQorICAgICwgbV9jZXJ0
aWZpY2F0ZShjZXJ0aWZpY2F0ZSkKKyAgICAsIG1fcHJpdmF0ZUtleShwcml2YXRlS2V5KQorICAg
ICwgbV9wdWJsaWNLZXkocHVibGljS2V5KQoreworfQorCitTZWN1cml0eUlkZW50aXR5UEVNOjpT
ZWN1cml0eUlkZW50aXR5UEVNKGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUpCit7CisjaWYgSEFW
RShTU0wpCisgICAgYXV0byBjZXJ0aWZpY2F0ZUxhdGluID0gY2VydGlmaWNhdGUubGF0aW4xKCk7
CisgICAgQklPKiBtZW0gPSBCSU9fbmV3X21lbV9idWYoY2VydGlmaWNhdGVMYXRpbi5kYXRhKCks
IGNlcnRpZmljYXRlTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmICghbWVtKQorICAgICAgICByZXR1
cm47CisKKyAgICBCSU8qIHBlbUJJTyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlmICgh
cGVtQklPKSB7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBYNTA5KiB4NTA5ID0gUEVNX3JlYWRfYmlvX1g1MDkobWVtLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBFVlBfUEtFWSogcHVibGljS2V5ID0gWDUwOV9nZXRfcHVia2V5
KHg1MDkpOworCisgICAgUEVNX3dyaXRlX2Jpb19QVUJLRVkocGVtQklPLCBwdWJsaWNLZXkpOwor
ICAgIEJJT19mbHVzaChwZW1CSU8pOworCisgICAgQlVGX01FTSogYnVmbWVtOworICAgIEJJT19n
ZXRfbWVtX3B0cihwZW1CSU8sICZidWZtZW0pOworCisgICAgbV9jZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlOworICAgIG1fcHVibGljS2V5ID0gU3RyaW5nKGJ1Zm1lbS0+ZGF0YSwgYnVmbWVtLT5s
ZW5ndGgpOworCisgICAgaWYgKHB1YmxpY0tleSkKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwdWJs
aWNLZXkpOworICAgIGlmICh4NTA5KQorICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgQklP
X2ZyZWUocGVtQklPKTsKKyAgICBCSU9fZnJlZShtZW0pOworI2VuZGlmCit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxTZWN1cml0eUlkZW50aXR5PiBTZWN1cml0eUlkZW50aXR5UEVNOjppZGVudGl0eSgp
Cit7CisjaWYgSEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKworICAgIGF1
dG8gaWRlbnRpdHkgPSBtYWtlVW5pcXVlPFNlY3VyaXR5SWRlbnRpdHk+KCk7CisKKyAgICBhdXRv
IHBlbUxhdGluID0gbV9wcml2YXRlS2V5LmxhdGluMSgpOworICAgIEJJTyogbWVtID0gQklPX25l
d19tZW1fYnVmKHBlbUxhdGluLmRhdGEoKSwgcGVtTGF0aW4ubGVuZ3RoKCkpOworICAgIGlmICht
ZW0pIHsKKyAgICAgICAgaWRlbnRpdHktPnNldFByaXZhdGVLZXkoc3NsOjp1bmlxdWVfcHRyPEVW
UF9QS0VZPihQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpKSk7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgfSBlbHNlCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcGVtTGF0aW4gPSBtX2NlcnRpZmljYXRlLmxhdGluMSgpOwor
ICAgIG1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1MYXRpbi5kYXRhKCksIHBlbUxhdGluLmxlbmd0
aCgpKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIGlkZW50aXR5LT5zZXRYNTA5KHNzbDo6dW5p
cXVlX3B0cjxYNTA5PihQRU1fcmVhZF9iaW9fWDUwOShtZW0sIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpKSk7CisgICAgICAgIEJJT19mcmVlKG1lbSk7CisgICAgfSBlbHNlCisgICAgICAgIG51
bGxwdHI7CisKKyAgICByZXR1cm4gaWRlbnRpdHk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRy
OworI2VuZGlmCit9CisKK3ZvaWQgQ29ubmVjdGlvbkVudGl0eTo6Y2FuY2VsKCkKK3sKKyNpZiBI
QVZFKFNTTCkKKyAgICBpZiAobV9zc2wpIHsKKyAgICAgICAgU1NMX2ZyZWUobV9zc2wpOworICAg
ICAgICBtX3NzbCA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCisgICAgaWYgKFNvY2tldDo6aXNW
YWxpZFNvY2tldChtX3NvY2tldCkpIHsKKyAgICAgICAgU29ja2V0OjpzaHV0ZG93bihtX3NvY2tl
dCk7CisgICAgICAgIFNvY2tldDo6Y2xvc2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9
IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PCBzdGQ6OnBhaXI8U29ja2V0OjpTb2NrZXQsIHVpbnQxNl90PiA+IGNyZWF0ZUxpc3RlbmluZ1Nv
Y2tldCh1aW50MTZfdCB0YXJnZXRQb3J0KQoreworICAgIGNvbnN0IGludCBCYWNrbG9nID0gODsK
KyAgICBhdXRvIGxpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6c29ja2V0KFBGX0lORVQsIFNPQ0tf
U1RSRUFNLCAwKTsKKyAgICBpZiAoIVNvY2tldDo6aXNWYWxpZFNvY2tldChsaXN0ZW5pbmdTb2Nr
ZXQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgdWludDE2X3Qgc3RhcnRQ
b3J0ID0gNDkxNTI7CisgICAgdWludDE2X3QgZW5kUG9ydCA9IDY1NTM1OworICAgIGlmICh0YXJn
ZXRQb3J0KQorICAgICAgICBzdGFydFBvcnQgPSBlbmRQb3J0ID0gdGFyZ2V0UG9ydDsKKyAgICAv
LyBQb3J0cyA0OTE1Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMuIFRyeSB1bnRpbCB3ZSBm
aW5kIG9uZSB0aGF0J3MgZnJlZS4KKyAgICBmb3IgKHVpbnQxNl90IHBvcnQgPSBzdGFydFBvcnQ7
IHBvcnQgPD0gZW5kUG9ydDsgcG9ydCsrKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBu
YW1lOworICAgICAgICBtZW1zZXQoJm5hbWUsIDAsIHNpemVvZihuYW1lKSk7CisgICAgICAgIG5h
bWUuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG5hbWUuc2luX3BvcnQgPSBodG9ucyhw
b3J0KTsKKyAgICAgICAgbmFtZS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsK
KyAgICAgICAgaWYgKGJpbmQobGlzdGVuaW5nU29ja2V0LCByZWludGVycHJldF9jYXN0PHNvY2th
ZGRyKj4oJm5hbWUpLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgICAgICAgICAgLy8gVGhpcyBw
b3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4dCBwb3J0LgorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKDo6bGlzdGVuKGxpc3RlbmluZ1NvY2tldCwgQmFja2xvZykg
PT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1Nv
Y2tldCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxpc3RlbmluZ1NvY2tldCwgcG9ydCk7IC8vIFN1
Y2Nlc3NmdWxseSBzZXQgdXAgbGlzdGVuaW5nIHBvcnQuCisgICAgfQorCisgICAgLy8gQ291bGRu
J3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KKyAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1Nv
Y2tldCk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworQ29ubmVjdGlvbkxpc3RlbmVy
OjpDb25uZWN0aW9uTGlzdGVuZXIoKQoreworfQorCitDb25uZWN0aW9uTGlzdGVuZXI6On5Db25u
ZWN0aW9uTGlzdGVuZXIoKQoreworICAgIHN0b3AoKTsKK30KKworYm9vbCBDb25uZWN0aW9uTGlz
dGVuZXI6OmlzVmFsaWQoKQoreworICAgIHJldHVybiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQobV9s
aXN0ZW5pbmdTb2NrZXQpOworfQorCit1aW50MTZfdCBDb25uZWN0aW9uTGlzdGVuZXI6OnBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BvcnQ7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3Rl
bmVyOjpzdGFydCh1aW50MTZfdCB0YXJnZXRQb3J0KQoreworICAgIGlmIChtX2xpc3RlbmluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzb2NrZXRfcG9ydCA9IGNyZWF0ZUxpc3Rlbmlu
Z1NvY2tldCh0YXJnZXRQb3J0KTsKKyAgICBpZiAoIXNvY2tldF9wb3J0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IHNvY2tldF9wb3J0LT5maXJzdDsKKyAgICBt
X3BvcnQgPSBzb2NrZXRfcG9ydC0+c2Vjb25kOworICAgIG1fbGlzdGVuaW5nU3RvcHBlZCA9IGZh
bHNlOworICAgIG1fbGlzdGVuaW5nID0gdHJ1ZTsKKyAgICBkaXNwYXRjaExpc3RlbmluZyh0aGlz
KTsKK30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnN0b3AoKQoreworICAgIGlmICghbV9s
aXN0ZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGlzdGVuaW5nU3RvcHBlZCA9IGZh
bHNlOworICAgIG1fbGlzdGVuaW5nID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZtX2xpc3Rlbmlu
Z1N0b3BwZWQpOworICAgIFNvY2tldDo6Y2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOworfQorCit2
b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoU29j
a2V0OjpTb2NrZXQmJiwgU1NMKik+JiYgaGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25IYW5k
bGVyID0gV1RGTW92ZShoYW5kbGVyKTsKK30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnNl
dFNlY3VyaXR5SWRlbnRpdHkoc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYgaWRl
bnRpdHkpCit7CisgICAgbV9zZWN1cml0eUlkZW50aXR5ID0gV1RGTW92ZShpZGVudGl0eSk7Cit9
CisKK2Jvb2wgQ29ubmVjdGlvbkxpc3RlbmVyOjppc1NlY3VyZSgpCit7CisgICAgaWYgKG1fc2Vj
dXJpdHlJZGVudGl0eSAmJiBtX3NlY3VyaXR5SWRlbnRpdHktPmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1NTTCogQ29ubmVjdGlvbkxp
c3RlbmVyOjphY2NlcHRTU0xDb25uZWN0aW9uKFNvY2tldDo6U29ja2V0IHNvY2tldCwgU2VjdXJp
dHlJZGVudGl0eSYgaWRlbnRpdHkpCit7CisjaWYgSEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNT
TExpYnJhcnkoKTsKKyAgICBTU0xfQ1RYKiBjb250ZXh0ID0gU1NMX0NUWF9uZXcoVExTX21ldGhv
ZCgpKTsKKworICAgIGludCBjZXJ0SW50LCBrZXlJbnQ7CisgICAgaWYgKGlkZW50aXR5Lng1MDko
KSkKKyAgICAgICAgY2VydEludCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGNvbnRleHQsIGlk
ZW50aXR5Lng1MDkoKS5nZXQoKSk7CisgICAgaWYgKGlkZW50aXR5LnByaXZhdGVLZXkoKSkKKyAg
ICAgICAga2V5SW50ID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleShjb250ZXh0LCBpZGVudGl0eS5w
cml2YXRlS2V5KCkuZ2V0KCkpOworCisgICAgU1NMKiBzc2wgPSBTU0xfbmV3KGNvbnRleHQpOwor
ICAgIGlmIChzc2wpIHsKKyAgICAgICAgU1NMX3NldF9mZChzc2wsIHNvY2tldCk7CisgICAgICAg
IGlmIChTU0xfYWNjZXB0KHNzbCkgPD0gMCkgeworICAgICAgICAgICAgU1NMX2ZyZWUoc3NsKTsK
KyAgICAgICAgICAgIHNzbCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTU0xf
Q1RYX2ZyZWUoY29udGV4dCk7CisgICAgcmV0dXJuIHNzbDsKKyNlbmRpZgorICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmco
Q29ubmVjdGlvbkxpc3RlbmVyKiBzZWxmKQoreworICAgIGlmIChTb2NrZXQ6OmlzU29ja2V0UmVh
ZHlSZWFkaW5nKHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0KSkgeworICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHJfaW4gYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOwor
ICAgICAgICBpbnQgbGVuID0gc2l6ZW9mKGFkZHIpOworICAgICAgICBTb2NrZXQ6OlNvY2tldCBy
ZXNwb25zZVNvY2tldCA9IDo6YWNjZXB0KHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0LCAoc29ja2Fk
ZHIqKSZhZGRyLCAmbGVuKTsKKyAgICAgICAgU1NMKiBzc2wgPSBudWxscHRyOworCisgICAgICAg
IGJvb2wgYWNjZXB0ZWQgPSBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQocmVzcG9uc2VTb2NrZXQpOwor
I2lmIEhBVkUoU1NMKQorICAgICAgICBpZiAoYWNjZXB0ZWQgJiYgc2VsZi0+bV9zZWN1cml0eUlk
ZW50aXR5ICYmIHNlbGYtPmlzU2VjdXJlKCkpIHsKKyAgICAgICAgICAgIHNzbCA9IHNlbGYtPmFj
Y2VwdFNTTENvbm5lY3Rpb24ocmVzcG9uc2VTb2NrZXQsICpzZWxmLT5tX3NlY3VyaXR5SWRlbnRp
dHkpOworICAgICAgICAgICAgaWYgKCFzc2wpCisgICAgICAgICAgICAgICAgYWNjZXB0ZWQgPSBm
YWxzZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChhY2NlcHRlZCAmJiBzZWxmLT5t
X2Nvbm5lY3Rpb25IYW5kbGVyKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2hBZnRlcigKKyAgICAgICAgICAgICAgICBTZWNvbmRzKFBvbGxpbmdJbnRlcnZhbEluU2Vjb25k
cyksCisgICAgICAgICAgICAgICAgW3NlbGYsIHJlc3BvbnNlU29ja2V0ID0gV1RGTW92ZShyZXNw
b25zZVNvY2tldCksIHNzbF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYt
Pm1fY29ubmVjdGlvbkhhbmRsZXIoV1RGTW92ZShyZXNwb25zZVNvY2tldCksIHNzbCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBTb2NrZXQ6OmNsb3NlKHJlc3BvbnNlU29ja2V0KTsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+
bV9saXN0ZW5pbmcgJiYgc2VsZi0+aXNWYWxpZCgpKSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAgICAgU2Vjb25kcyhQb2xsaW5nSW50ZXJ2YWxJblNl
Y29uZHMpLAorICAgICAgICAgICAgW3NlbGZdKCkgeworICAgICAgICAgICAgICAgIGRpc3BhdGNo
TGlzdGVuaW5nKHNlbGYpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZSB7
CisgICAgICAgIFNvY2tldDo6Y2xvc2Uoc2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAg
ICBzZWxmLT5tX2xpc3RlbmluZ1NvY2tldCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICAg
ICAgc2VsZi0+bV9saXN0ZW5pbmdTdG9wcGVkID0gdHJ1ZTsKKyAgICB9Cit9Cit9CisKK1Rlc3RX
ZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU0gY2VydGlmaWNhdGVQcml2YXRlS2V5RGVmYXVs
dCgpCit7CisgICAgcmV0dXJuIFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU0oCisg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OktleVR5cGU6OlJTQVR5
cGUsCisgICAgICAgIDEwMjQsCisgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1c
biIKKyAgICAgICAgIk1JSUNUakNDQWJlZ0F3SUJBZ0lKQUtIMlR1ZFEraFU3TUEwR0NTcUdTSWIz
RFFFQkN3VUFNRUF4Q3pBSkJnTlZcbiIKKyAgICAgICAgIkJBWVRBa3BRTVE0d0RBWURWUVFJREFW
VWIydDViekVOTUFzR0ExVUVDZ3dFVTJWc1pqRVNNQkFHQTFVRUF3d0pcbiIKKyAgICAgICAgImJH
OWpZV3hvYjNOME1CNFhEVEl4TURneU16QXpNelEwT0ZvWERUTXhNRGd5TVRBek16UTBPRm93UURF
TE1Ba0dcbiIKKyAgICAgICAgIkExVUVCaE1DU2xBeERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3
WURWUVFLREFSVFpXeG1NUkl3RUFZRFZRUURcbiIKKyAgICAgICAgIkRBbHNiMk5oYkdodmMzUXdn
Wjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBSzRDbG9MS2ZyVlBcbiIKKyAgICAg
ICAgImdHYTc1MTE0UDFYM2xzM3V0dkZFZXVEbHUwM1ZVSUNjd04wZ2Uvc0NvbjNpMi9MSmdVb1kx
TExCcXRwQUpKNnpcbiIKKyAgICAgICAgIjd3aHRTVmowTnc1MVNRUkgwZ05XN2Jaa1U0SVorWDZR
OGZTemZKNnJ2eFZGejFEYXo2citxVWdwOFZ6aFFudHZcbiIKKyAgICAgICAgIkNzL1N6R3IreGNV
aXpOUFFLdEtGa1d0a3RxY2Z0UFJqQWdNQkFBR2pVREJPTUIwR0ExVWREZ1FXQkJTOVNPbktcbiIK
KyAgICAgICAgIjlGT2dBTU1kT2FMODNkSEhSZGUyc0RBZkJnTlZIU01FR0RBV2dCUzlTT25LOUZP
Z0FNTWRPYUw4M2RISFJkZTJcbiIKKyAgICAgICAgInNEQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NT
cUdTSWIzRFFFQkN3VUFBNEdCQUdXU20wQkhqK0U1Vm1PRUlmTndcbiIKKyAgICAgICAgIlJTT2x4
QXRsbFBpbklWYnhlQjIzUWs4SmhCRnNvTnk0MngxbmZyNjFxa0NJdzlackoxc3VNaUY3cVRmZVVz
bitcbiIKKyAgICAgICAgIkxZWEpNTWxlMytTU29TWFA3SFl2M2U4Z0c4L0NjN3M3Sm56cC9YaFdK
LzVjWmIzOGpPRXNpVUUxMGdVMi81OXZcbiIKKyAgICAgICAgIjZqZXlhaVpuRE4vN08rNWxIZ0lU
WjREY1xuIgorICAgICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIiwKKworICAgICAg
ICAiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG4iCisgICAgICAgICJNSUlDZFFJQkFEQU5C
Z2txaGtpRzl3MEJBUUVGQUFTQ0FsOHdnZ0piQWdFQUFvR0JBSzRDbG9MS2ZyVlBnR2E3XG4iCisg
ICAgICAgICI1MTE0UDFYM2xzM3V0dkZFZXVEbHUwM1ZVSUNjd04wZ2Uvc0NvbjNpMi9MSmdVb1kx
TExCcXRwQUpKNno3d2h0XG4iCisgICAgICAgICJTVmowTnc1MVNRUkgwZ05XN2Jaa1U0SVorWDZR
OGZTemZKNnJ2eFZGejFEYXo2citxVWdwOFZ6aFFudHZDcy9TXG4iCisgICAgICAgICJ6R3IreGNV
aXpOUFFLdEtGa1d0a3RxY2Z0UFJqQWdNQkFBRUNnWUJXZytMaFZGeDdPUFBXSUVhQUtuRVRCTzV0
XG4iCisgICAgICAgICJwT3BBT3BQOWpUcjdEN3ZldGhFTjRFREVKQ00yQTd6bmtWZyt4dW01bHFD
anNwQ0NkMk81Qk4wYTVSRVp4T0QxXG4iCisgICAgICAgICIwNXdZbHpETkMvL0VkSVB6RW15R2lQ
WmpydjdWV1VENExOeWQ0bW4rbzVNbTJrOFovSkZYRmNjaEk0Z1g2ZXRzXG4iCisgICAgICAgICJV
UGdZTW8vWVlHNkJYbTBuQVFKQkFPQnQ2ano3VW1PU1FCY0hnZVU1blA1dE95dE1IR3diY2NkVFNQ
QVlmQTdqXG4iCisgICAgICAgICJvaENvNWdBdm1VeUFnUWI3NERQZnExcnB0U2dHSC9wdDNyRUlu
SFRxTlhFQ1FRREdmUDFZY21oa2UwdVdTMDVNXG4iCisgICAgICAgICJjU0V4T2F1NVhWbHFLNzUx
RWR4d2pmNDdzd2s4cDdyNEIvbmRVQ1BmNFBTTm00ZXgzTWtVVjJrY1JCV1g2RnJrXG4iCisgICAg
ICAgICJRRTBUQWtCNDltVW81eUNaOEVyQTN0Z0JMNU5SZ3BoQWx1NCt5bkFCeWY3bkFadGovd2Jy
eWN6bHpzSG1mT0NPXG4iCisgICAgICAgICJYaFdTZi95QXJMUnFWUnJKUkl5aGlJMmphbFRSQWtC
ZWhpTjRQWE90ZG5IMnJ3SW9zUzluYTlsMXV4amIwTjB3XG4iCisgICAgICAgICJqMEwxYndtRmtL
dHpjVVUrM1QyR3dhVno5b00vOUxOWVpwWnowM1RBKzBOMVJqZ1N2dlIxQWtCa1J4Q2lOTTVSXG4i
CisgICAgICAgICJwVEtsb0F1VDJLK2ozSm96bVdPZHdFYU9BYVZsQlQ2WmlsOEVtckVCL2E2QVJv
YVF0SUJGd2htRmc3ZHA4QndMXG4iCisgICAgICAgICJrKy9wK0dnT0RwOXBcbiIKKyAgICAgICAg
Ii0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIsCisKKyAgICAgICAgIi0tLS0tQkVHSU4gUFVC
TElDIEtFWS0tLS0tXG4iCisgICAgICAgICJNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURD
QmlRS0JnUUN1QXBhQ3luNjFUNEJtdStkZGVEOVY5NWJOXG4iCisgICAgICAgICI3cmJ4UkhyZzVi
dE4xVkNBbk1EZElIdjdBcUo5NHR2eXlZRktHTlN5d2FyYVFDU2VzKzhJYlVsWTlEY09kVWtFXG4i
CisgICAgICAgICJSOUlEVnUyMlpGT0NHZmwra1BIMHMzeWVxNzhWUmM5UTJzK3EvcWxJS2ZGYzRV
Sjdid3JQMHN4cS9zWEZJc3pUXG4iCisgICAgICAgICIwQ3JTaFpGclpMYW5IN1QwWXdJREFRQUJc
biIKKyAgICAgICAgIi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgorICAgICAgICApOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzOGJmMjAx
ODhiN2FlODk1ODk0ZTY3YzE4MjlmZDU4ODRjOGE2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25QT1NJWC5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiY29jb2EvSFRUUFNlcnZlci5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQg
UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzID0gMC4wMjsgLy8gMjBtcworCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKK1NvY2tldDo6U29ja2V0IENvbm5lY3Rpb246OnNvY2tldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybiBTb2NrZXQ6OkludmFs
aWRTb2NrZXQ7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi0+c29ja2V0KCk7Cit9CisKK1NTTCog
Q29ubmVjdGlvbjo6c3NsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi0+c3NsKCk7Cit9CisK
K3ZvaWQgQ29ubmVjdGlvbjo6c2VuZEJ5dGVzUHJvY2Vzcyhjb25zdCBDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBWZWN0b3I8dWludDhfdD4mJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIGludCBzZW50VG90YWwpCit7CisgICAgaWYgKCFTb2Nr
ZXQ6OmlzVmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGRvIHsKKyAgICAgICAgaWYgKCFTb2NrZXQ6OmlzU29ja2V0UmVhZHlXcml0aW5nKGNv
bm5lY3Rpb24uc29ja2V0KCkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHNl
bnQ7CisgICAgICAgIHVpbnQ4X3QqIHB0ciA9IG1lc3NhZ2UuZGF0YSgpICsgc2VudFRvdGFsOwor
I2lmIEhBVkUoU1NMKQorICAgICAgICBpZiAoY29ubmVjdGlvbi5zc2woKSAmJiBTb2NrZXQ6Omlz
VmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgICAgICBzZW50ID0gU1NM
X3dyaXRlKGNvbm5lY3Rpb24uc3NsKCksIHB0ciwgbWVzc2FnZS5zaXplKCkgLSBzZW50VG90YWwp
OworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGlmIChTb2NrZXQ6OmlzVmFsaWRT
b2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAgICAgICAgICAgICAgc2VudCA9IFNvY2tl
dDo6d3JpdGUoY29ubmVjdGlvbi5zb2NrZXQoKSwgcHRyLCBtZXNzYWdlLnNpemUoKSAtIHNlbnRU
b3RhbCk7CisKKyAgICAgICAgQVNTRVJUKHNlbnQgPj0gMCk7CisgICAgICAgIGlmIChzZW50IDwg
MCB8fCBzZW50VG90YWwgKyBzZW50ID49IG1lc3NhZ2Uuc2l6ZSgpKSB7CisgICAgICAgICAgICBp
ZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goCisgICAgICAgICAgICAgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHNlbnRUb3RhbCArPSBzZW50OworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICBTZWNvbmRzKFBvbGxpbmdJ
bnRlcnZhbEluU2Vjb25kcyksCisgICAgICAgIFtjb25uZWN0aW9uLCBtZXNzYWdlID0gV1RGTW92
ZShtZXNzYWdlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgc2VudFRvdGFsXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHNlbmRCeXRlc1Byb2Nlc3Mo
Y29ubmVjdGlvbiwgV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHNlbnRUb3RhbCk7CisgICAgICAgIH0KKyAgICApOworfQorCit2b2lkIENvbm5lY3Rpb246OnNl
bmQoU3RyaW5nJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlVmVjdG9yOwor
ICAgIG1lc3NhZ2VWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1lc3NhZ2UudXRmOCgpLmRhdGEoKSksICBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7CisKKyAg
ICBzZW5kKFdURk1vdmUobWVzc2FnZVZlY3RvciksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpzZW5kKFZlY3Rvcjx1aW50OF90PiYmIG1lc3NhZ2Us
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sK
KyAgICBzZW5kQnl0ZXNQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgMCk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVjZWl2ZUJ5dGVz
UHJvY2Vzcyhjb25zdCBDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAo
IVNvY2tldDo6aXNWYWxpZFNvY2tldChjb25uZWN0aW9uLnNvY2tldCgpKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghU29ja2V0Ojppc1NvY2tldFJlYWR5UmVhZGluZyhjb25uZWN0aW9uLnNv
Y2tldCgpKSkgeworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hBZnRlcigKKyAgICAg
ICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAgICAgICAgICAgIFtj
b25uZWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICByZWNlaXZlQnl0ZXNQcm9jZXNzKGNvbm5l
Y3Rpb24sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBidWZmZXJT
aXplID0gNDA5NjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGJ1ZmZlclNpemUpOworICAg
IGludCBieXRlc1JlYWQgPSAtMTsKKyNpZiBIQVZFKFNTTCkKKyAgICBpZiAoY29ubmVjdGlvbi5z
c2woKSAmJiBTb2NrZXQ6OmlzVmFsaWRTb2NrZXQoY29ubmVjdGlvbi5zb2NrZXQoKSkpCisgICAg
ICAgIGJ5dGVzUmVhZCA9IFNTTF9yZWFkKGNvbm5lY3Rpb24uc3NsKCksIHJlc3VsdC5kYXRhKCks
IGJ1ZmZlclNpemUpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoU29ja2V0Ojppc1Zh
bGlkU29ja2V0KGNvbm5lY3Rpb24uc29ja2V0KCkpKQorICAgICAgICAgICAgYnl0ZXNSZWFkID0g
U29ja2V0OjpyZWFkKGNvbm5lY3Rpb24uc29ja2V0KCksIHJlc3VsdC5kYXRhKCksIGJ1ZmZlclNp
emUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApCisgICAgICAgIHJlc3VsdC5zaHJpbmsoYnl0
ZXNSZWFkKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5jbGVhcigpOworCisgICAgaWYgKGNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaCgKKyAg
ICAgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldICgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CisgICAgfQorfQorCit2b2lkIENvbm5lY3Rpb246OnJlY2VpdmVCeXRlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlciwg
c2l6ZV90IG1pbmltdW1TaXplKSBjb25zdAoreworICAgIHJlY2VpdmVCeXRlc1Byb2Nlc3MoKnRo
aXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpy
ZWNlaXZlSFRUUFJlcXVlc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Y2hhcj4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIsIFZlY3RvcjxjaGFyPiYmIGJ1ZmZlcikgY29uc3QKK3sKKyAg
ICByZWNlaXZlQnl0ZXMoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oVmVjdG9yPHVpbnQ4X3Q+JiYg
cmVjZWl2ZWRCdWZmZXIpIG11dGFibGUgeworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKHJl
Y2VpdmVkQnVmZmVyKTsKKworICAgICAgICBhdXRvIHJlcXVlc3QgPSBIVFRQUmVxdWVzdDo6cGFy
c2VIVFRQUmVxdWVzdChyZWNlaXZlZEJ1ZmZlcik7CisgICAgICAgIGlmIChyZXF1ZXN0LmNvbXBs
ZXRlKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShidWZmZXIpKTsKKyAg
ICAgICAgZWxzZSBpZiAoIXJlY2VpdmVkQnVmZmVyLnNpemUoKSkKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMtPnJlY2Vp
dmVIVFRQUmVxdWVzdChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShidWZmZXIp
KTsKKyAgICB9KTsKK30KKwordm9pZCBDb25uZWN0aW9uOjp0ZXJtaW5hdGUoKQoreworICAgIGlm
IChtX2Nvbm5lY3Rpb24pCisgICAgICAgIG1fY29ubmVjdGlvbi0+Y2FuY2VsKCk7Cit9CisKK3Zv
aWQgQ29ubmVjdGlvbjo6Y2FuY2VsKCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9I
VFRQU2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2U2MTkyN2M4ZGRiMjQyMTJhZDY5YTA0ZDU5OWNlZjk4NDlhZjY2MQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSwz
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb2Nv
YS9IVFRQU2VydmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisKK25h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RydWN0IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRh
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhLCAg
V1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpblJ1bkxvb3A+IHsKKyAgICBSZXF1ZXN0RGF0YSgp
IHsgfQorICAgIFJlcXVlc3REYXRhKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3Ry
aW5nLCBIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMpCisgICAgICAgIDogcmVxdWVzdE1hcChbXShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gbGlz
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFJl
c3BvbnNlPiBtYXA7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbGlzdCkKKyAg
ICAgICAgICAgICAgICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgICAgIH0ocmVzcG9uc2VzKSkKKyAgICB7
CisgICAgfQorCisgICAgc2l6ZV90IHJlcXVlc3RDb3VudCB7IDAgfTsKKyAgICBjb25zdCBIYXNo
TWFwPFN0cmluZywgSFRUUFJlc3BvbnNlPiByZXF1ZXN0TWFwOworICAgIFZlY3RvcjxDb25uZWN0
aW9uPiBjb25uZWN0aW9uczsKK307CisKK2NvbnN0IEhUVFBSZXNwb25zZSBSZXNwb25zZU5vdEZv
dW5kID0geworICAgIDQwNCwKKyAgICB7IH0sCisgICAgIjxodG1sPjxoZWFkPjx0aXRsZT40MDQg
Tm90IEZvdW5kPC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48aDE+RmlsZSBub3QgZm91bmQ8
L2gxPjwvYm9keT48L2h0bWw+IgorfTsKKworSFRUUFNlcnZlcjo6SFRUUFNlcnZlcihzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2Vz
LCBQcm90b2NvbCBwcm90b2NvbCwgc3RkOjp1bmlxdWVfcHRyPFNlY3VyaXR5SWRlbnRpdHk+JiYg
aWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpCisgICAgOiBtX3JlcXVlc3RE
YXRhKCBhZG9wdFJlZigqbmV3IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhKHJlc3BvbnNlcykpICkK
KyAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wpCit7CisgICAgbV9saXN0ZW5lci5yZWdpc3Rlckhh
bmRsZXIoW3RoaXNdIChTb2NrZXQ6OlNvY2tldCYmIHNvY2tldCwgU1NMKiBzc2wpIHsKKyAgICAg
ICAgYXV0byBjb25uZWN0aW9uID0gQ29ubmVjdGlvbihhZG9wdFJlZihuZXcgQ29ubmVjdGlvbkVu
dGl0eShzb2NrZXQsIHNzbCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0RGF0YS0+Y29ubmVjdGlvbnMu
YXBwZW5kKGNvbm5lY3Rpb24pOworICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9u
LCBtX3JlcXVlc3REYXRhKTsKKyAgICB9KTsKKworICAgIGlmIChwcm90b2NvbCA9PSBQcm90b2Nv
bDo6SHR0cHMpIHsKKyAgICAgICAgaWYgKGlkZW50aXR5KQorICAgICAgICAgICAgbV9saXN0ZW5l
ci5zZXRTZWN1cml0eUlkZW50aXR5KFdURk1vdmUoaWRlbnRpdHkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9saXN0ZW5lci5zZXRTZWN1cml0eUlkZW50aXR5KGNlcnRpZmljYXRlUHJp
dmF0ZUtleURlZmF1bHQoKS5pZGVudGl0eSgpKTsKKyAgICB9CisgICAgbV9saXN0ZW5lci5zdGFy
dChwb3J0ID8gKnBvcnQgOiAwKTsKK30KKworSFRUUFNlcnZlcjo6SFRUUFNlcnZlcihGdW5jdGlv
bjx2b2lkKENvbm5lY3Rpb24pPiYmIGNvbm5lY3Rpb25IYW5kbGVyLCBQcm90b2NvbCBwcm90b2Nv
bCkKKyAgICA6IG1fcmVxdWVzdERhdGEoIGFkb3B0UmVmKCpuZXcgSFRUUFNlcnZlcjo6UmVxdWVz
dERhdGEoKSkgKQorICAgICwgbV9wcm90b2NvbChwcm90b2NvbCkKK3sKKyAgICBtX2xpc3RlbmVy
LnJlZ2lzdGVySGFuZGxlcihbdGhpcywgY29ubmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbm5l
Y3Rpb25IYW5kbGVyKV0gKFNvY2tldDo6U29ja2V0JiYgc29ja2V0LCBTU0wqIHNzbCkgeworICAg
ICAgICBhdXRvIGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uKG5ldyBDb25uZWN0aW9uRW50aXR5KHNv
Y2tldCwgc3NsKSk7CisgICAgICAgIG1fcmVxdWVzdERhdGEtPmNvbm5lY3Rpb25zLmFwcGVuZChj
b25uZWN0aW9uKTsKKyAgICAgICAgY29ubmVjdGlvbkhhbmRsZXIoQ29ubmVjdGlvbihjb25uZWN0
aW9uKSk7CisgICAgfSk7CisKKyAgICBpZiAocHJvdG9jb2wgPT0gUHJvdG9jb2w6Okh0dHBzKQor
ICAgICAgICBtX2xpc3RlbmVyLnNldFNlY3VyaXR5SWRlbnRpdHkoY2VydGlmaWNhdGVQcml2YXRl
S2V5RGVmYXVsdCgpLmlkZW50aXR5KCkpOworICAgIG1fbGlzdGVuZXIuc3RhcnQoKTsKK30KKwor
SFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIoKQoreworICAgIGNhbmNlbCgpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50aWFsKFN0cmlu
ZyB0eXBlLCBTdHJpbmcgaGVhZGVyTGluZSkKK3sKKyAgICBhdXRvIGZvdW5kID0gaGVhZGVyTGlu
ZS5maW5kKHR5cGUpOworICAgIGlmIChmb3VuZCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdmFsdWUgPSBoZWFkZXJMaW5lLnN1YnN0cmluZyhm
b3VuZCArIHR5cGUubGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGls
ZSAoaW5kZXggPCB2YWx1ZS5sZW5ndGgoKSAmJiB2YWx1ZVtpbmRleF0gPT0gdScgJykKKyAgICAg
ICAgaW5kZXgrKzsKKworICAgIGlmIChpbmRleCA9PSB2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaW5kZXgp
OworfQorCit2b2lkIEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29u
bmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKK3sKKyAgICBjb25uZWN0aW9u
LnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIChWZWN0b3I8Y2hh
cj4mJiByZXF1ZXN0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RDb3VudCsrOwor
ICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBhdGgocmVxdWVzdCk7CisKKyAgICAgICAgSFRUUFJl
c3BvbnNlIHJlc3BvbnNlOworICAgICAgICBpZiAocmVxdWVzdERhdGEtPnJlcXVlc3RNYXAuY29u
dGFpbnMocGF0aCkpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3REYXRhLT5yZXF1ZXN0
TWFwLmdldChwYXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzcG9uc2UgPSBSZXNw
b25zZU5vdEZvdW5kOworCisgICAgICAgIGlmIChyZXNwb25zZS50ZXJtaW5hdGVDb25uZWN0aW9u
ID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzKQorICAgICAgICAgICAg
Y29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKKworICAgICAgICBjb25uZWN0aW9uLnNlbmQocmVzcG9u
c2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSA9IFdURk1vdmUocmVxdWVz
dERhdGEpXSAoKSB7CisgICAgICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9uLCBy
ZXF1ZXN0RGF0YSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit1aW50MTZfdCBIVFRQU2Vy
dmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0ZW5lci5wb3J0KCk7Cit9CisK
K2NvbnN0IGNoYXIqIEhUVFBTZXJ2ZXI6OnNjaGVtZSgpIGNvbnN0Cit7CisgICAgY29uc3QgY2hh
ciogc2NoZW1lID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKG1fcHJvdG9jb2wpIHsKKyAgICBjYXNl
IFByb3RvY29sOjpIdHRwOgorICAgICAgICBzY2hlbWUgPSAiaHR0cCI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzOgorICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzV2l0
aExlZ2FjeVRMUzoKKyAgICBjYXNlIFByb3RvY29sOjpIdHRwMjoKKyAgICAgICAgc2NoZW1lID0g
Imh0dHBzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6SHR0cHNQcm94eToK
KyAgICBjYXNlIFByb3RvY29sOjpIdHRwc1Byb3h5V2l0aEF1dGhlbnRpY2F0aW9uOgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gc2NoZW1l
OworfQorCisKK1VSTCBIVFRQU2VydmVyOjp1cmwoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nOworICAgIHVybFN0cmluZy5hcHBlbmQoc2NoZW1lKCkp
OworICAgIHVybFN0cmluZy5hcHBlbmQoIjovLzEyNy4wLjAuMS8iKTsKKworICAgIGlmICghcGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHVybFN0cmluZy5hcHBlbmQocGF0aCk7CisKKyAgICBVUkwg
c2VydmVyVVJMKFVSTCgpLCB1cmxTdHJpbmcudG9TdHJpbmcoKSk7CisgICAgc2VydmVyVVJMLnNl
dFBvcnQobV9saXN0ZW5lci5wb3J0KCkpOworCisgICAgcmV0dXJuIHNlcnZlclVSTDsKK30KKwor
dm9pZCBIVFRQU2VydmVyOjpjYW5jZWwoKQoreworICAgIG1fbGlzdGVuZXIuc3RvcCgpOworCisg
ICAgZm9yIChhdXRvIGNvbm5lY3Rpb24gOiBzdGQ6OmV4Y2hhbmdlKG1fcmVxdWVzdERhdGEtPmNv
bm5lY3Rpb25zLCB7IH0pKQorICAgICAgICBjb25uZWN0aW9uLmNhbmNlbCgpOworfQorCit2b2lk
IEhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoT0soQ29ubmVjdGlvbiBjb25uZWN0aW9uKQoreworICAg
IGNvbm5lY3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uXSAoVmVjdG9yPGNoYXI+
JiYpIHsKKyAgICAgICAgY29ubmVjdGlvbi5zZW5kKAorICAgICAgICAgICAgIkhUVFAvMS4xIDIw
MCBPS1xyXG4iCisgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6IDEzXHJcblxyXG4iCisgICAg
ICAgICAgICAiSGVsbG8sIFdvcmxkISIKKyAgICAgICAgKTsKKyAgICB9KTsKK30KKworc2l6ZV90
IEhUVFBTZXJ2ZXI6OnRvdGFsUmVxdWVzdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcXVl
c3REYXRhLT5yZXF1ZXN0Q291bnQ7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhD
aGFsbGVuZ2VUaGVuT0soQ29ubmVjdGlvbikKK3sKK30KKworU3RyaW5nIEhUVFBTZXJ2ZXI6OnBh
cnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3RCdWZmZXIpCit7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlcXVlc3RCdWZmZXJVOChyZXF1ZXN0QnVmZmVyLnNpemUoKSk7CisgICAgc3Rk
Ojp0cmFuc2Zvcm0ocmVxdWVzdEJ1ZmZlci5iZWdpbigpLCByZXF1ZXN0QnVmZmVyLmVuZCgpLCBy
ZXF1ZXN0QnVmZmVyVTguYmVnaW4oKSwgW10gKGNoYXIgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4oYyk7IH0pOworCisgICAgYXV0byByZXF1ZXN0ID0gSFRUUFJlcXVlc3Q6OnBhcnNl
SFRUUFJlcXVlc3QocmVxdWVzdEJ1ZmZlclU4KTsKKyAgICBpZiAoIXJlcXVlc3QuY29tcGxldGUp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gcmVxdWVzdC5wYXRoOworfQorCisK
K3N0YXRpYyBTdHJpbmcgc3RhdHVzVGV4dCh1bnNpZ25lZCBzdGF0dXNDb2RlKQoreworICAgIHN3
aXRjaCAoc3RhdHVzQ29kZSkgeworICAgIGNhc2UgMTAxOgorICAgICAgICByZXR1cm4gIlN3aXRj
aGluZyBQcm90b2NvbHMiX3M7CisgICAgY2FzZSAyMDA6CisgICAgICAgIHJldHVybiAiT0siX3M7
CisgICAgY2FzZSAzMDE6CisgICAgICAgIHJldHVybiAiTW92ZWQgUGVybWFuZW50bHkiX3M7Cisg
ICAgY2FzZSA0MDE6CisgICAgICAgIHJldHVybiAiVW5hdXRob3JpemVkIl9zOworICAgIGNhc2Ug
NDA0OgorICAgICAgICByZXR1cm4gIk5vdCBGb3VuZCJfczsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kVVRG
OFRvVmVjdG9yKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBhdXRvIHV0ZjggPSBzdHJpbmcudXRmOCgpOworICAgIHZlY3Rvci5hcHBlbmQocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgp
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6Ym9keUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKKyAgICBh
cHBlbmRVVEY4VG9WZWN0b3IodmVjdG9yLCBzdHJpbmcpOworICAgIHJldHVybiB2ZWN0b3I7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZShJbmNsdWRlQ29udGVu
dExlbmd0aCBpbmNsdWRlQ29udGVudExlbmd0aCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3BvbnNlQnVpbGRlcjsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAi
LCBzdGF0dXNDb2RlLCAnICcsIHN0YXR1c1RleHQoc3RhdHVzQ29kZSksICJcclxuIik7CisgICAg
aWYgKGluY2x1ZGVDb250ZW50TGVuZ3RoID09IEluY2x1ZGVDb250ZW50TGVuZ3RoOjpZZXMpCisg
ICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCBib2R5LnNp
emUoKSwgIlxyXG4iKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBoZWFkZXJGaWVsZHMpCisgICAg
ICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocGFpci5rZXksICI6ICIsIHBhaXIudmFsdWUsICJc
clxuIik7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIAorICAgIFZl
Y3Rvcjx1aW50OF90PiBieXRlc1RvU2VuZDsKKyAgICBhcHBlbmRVVEY4VG9WZWN0b3IoYnl0ZXNU
b1NlbmQsIHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBieXRlc1RvU2VuZC5hcHBl
bmRWZWN0b3IoYm9keSk7CisgICAgcmV0dXJuIGJ5dGVzVG9TZW5kOworfQorCitIVFRQUmVxdWVz
dCBIVFRQUmVxdWVzdDo6cGFyc2VIVFRQUmVxdWVzdChjb25zdCBWZWN0b3I8dWludDhfdD4mIHJl
cXVlc3RWZWN0b3IpCit7CisgICAgY29uc3QgU3RyaW5nIHNlcGFyYXRvcigiXHJcblxyXG4iKTsK
KworICAgIEhUVFBSZXF1ZXN0IHJlcXVlc3Q7CisgICAgU3RyaW5nIHJlcXVlc3RTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KHJlcXVlc3RWZWN0b3IuZGF0YSgpLCByZXF1ZXN0VmVjdG9yLnNpemUo
KSk7CisgICAgYXV0byBoZWFkZXJCb2R5U2VwYXJhdG9yID0gcmVxdWVzdFN0cmluZy5maW5kKHNl
cGFyYXRvcik7CisKKyAgICBpZiAoaGVhZGVyQm9keVNlcGFyYXRvciA9PSBub3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuIHJlcXVlc3Q7CisKKyAgICBhdXRvIGhlYWRlclN0cmluZyA9IHJlcXVlc3RT
dHJpbmcuc3Vic3RyaW5nKDAsIGhlYWRlckJvZHlTZXBhcmF0b3IpOworICAgIGF1dG8gYm9keVN0
cmluZyA9IHJlcXVlc3RTdHJpbmcuc3Vic3RyaW5nKGhlYWRlckJvZHlTZXBhcmF0b3IgKyBzZXBh
cmF0b3IubGVuZ3RoKCkpOworCisgICAgYXV0byBoZWFkZXJMaW5lcyA9IGhlYWRlclN0cmluZy5z
cGxpdCgiXHJcbiIpOworICAgIGF1dG8gZmlyc3RFbGVtZW50cyA9IGhlYWRlckxpbmVzWzBdLnNw
bGl0KCIgIik7CisgICAgaWYgKGZpcnN0RWxlbWVudHMuc2l6ZSgpID49IDIpCisgICAgICAgIHJl
cXVlc3QucGF0aCA9IGZpcnN0RWxlbWVudHNbMV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IGhlYWRlckxpbmVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGF1dG8gaGVhZGVyVmFsdWUg
PSBoZWFkZXJMaW5lc1tpXS5zcGxpdCgiOiIpOworICAgICAgICBpZiAoaGVhZGVyVmFsdWUuc2l6
ZSgpID09IDIpCisgICAgICAgICAgICByZXF1ZXN0LmhlYWRlckZpZWxkcy5zZXQoaGVhZGVyVmFs
dWVbMF0sIGhlYWRlclZhbHVlWzFdKTsKKyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5oZWFkZXJG
aWVsZHMuY29udGFpbnMoIkNvbnRlbnQtTGVuZ3RoIikpIHsKKyAgICAgICAgaW50IGNvbnRlbnRM
ZW5ndGggPSBhdG9pKHJlcXVlc3QuaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUKGNvbnRlbnRMZW5ndGggPj0gMCk7CisgICAg
ICAgIGlmIChib2R5U3RyaW5nLnNpemVJbkJ5dGVzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
bnRlbnRMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgICAgIHJlcXVl
c3QuYm9keSA9IGJvZHlTdHJpbmc7CisgICAgfQorCisgICAgcmVxdWVzdC5jb21wbGV0ZSA9IHRy
dWU7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtU29ja2V0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29j
a2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjkyZmU1MTljMGRlMTk3MzFjMzI1NzMyZDZhYmMzYjZkNmIxNTQ4
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQu
aApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
T1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRp
bmV0L2luLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisKKyNpZiBPUyhXSU5ET1dTKQordXNpbmcg
U29ja2V0ID0gU09DS0VUOwordXNpbmcgc29ja2xlbl90ID0gaW50OworY29uc3RleHByIFNvY2tl
dCBJbnZhbGlkU29ja2V0ID0gSU5WQUxJRF9TT0NLRVQ7CisjZWxzZQordXNpbmcgU29ja2V0ID0g
aW50OworI2RlZmluZSBTT0NLRVRfRVJST1IgLTEKK2NvbnN0ZXhwciBTb2NrZXQgSW52YWxpZFNv
Y2tldCA9IFNPQ0tFVF9FUlJPUjsKKyNlbmRpZgorCitTb2NrZXQgc29ja2V0KGludCBkb21haW4s
IGludCB0eXBlLCBpbnQgcHJvdG9jb2wpOworYm9vbCBpc1ZhbGlkU29ja2V0KFNvY2tldCk7CitT
b2NrZXQgYWNjZXB0KFNvY2tldCk7CitpbnQgc2h1dGRvd24oU29ja2V0KTsKK2ludCBjbG9zZShT
b2NrZXQpOworaW50IHJlYWQoU29ja2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7Citp
bnQgd3JpdGUoU29ja2V0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CisKK2Jv
b2wgaXNTb2NrZXRSZWFkeShTb2NrZXQgcmVhZFNvY2tldCwgU29ja2V0IHdyaXRlU29ja2V0KTsK
K2Jvb2wgaXNTb2NrZXRSZWFkeVJlYWRpbmcoU29ja2V0KTsKK2Jvb2wgaXNTb2NrZXRSZWFkeVdy
aXRpbmcoU29ja2V0KTsKKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2lu
LmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAzMzgz
YmIzZTAxNDRiODc1NGMwOWM3NGQ3MjYzZmNlNDIyOThmZWQ2Li42NTIxNmQ0N2I2YjZkYTE1MzY1
NjU5YzA5NjI4YzEyNTQ3MjUzY2UzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21h
a2UKQEAgLTEyNCw4ICsxMjQsMTIgQEAgaWYgKEVOQUJMRV9XRUJLSVQpCiAgICAgbGlzdChBUFBF
TkQgVGVzdFdlYktpdF9TT1VSQ0VTCiAgICAgICAgICR7dGVzdF9tYWluX1NPVVJDRVN9CiAKKyAg
ICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyUE9TSVguY3BwCisgICAgICAgIENvbm5lY3Rpb25QT1NJ
WC5jcHAKKyAgICAgICAgSFRUUFNlcnZlci5jcHAKICAgICAgICAgVGVzdHMvV2ViS2l0L0Nvb2tp
ZVN0b3JhZ2VGaWxlLmNwcAogCisgICAgICAgIHdpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKICAg
ICAgICAgd2luL1BsYXRmb3JtVXRpbGl0aWVzV2luLmNwcAogICAgICAgICB3aW4vUGxhdGZvcm1X
ZWJWaWV3V2luLmNwcAogICAgICAgICB3aW4vVXRpbGl0aWVzV2luLmNwcApAQCAtMTMzLDYgKzEz
Nyw4IEBAIGlmIChFTkFCTEVfV0VCS0lUKQogCiAgICAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9D
QUlST30pCiAgICAgICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJLaXRfU09VUkNFUworICAgICAgICAg
ICAgVGVzdHMvV2ViS2l0L1NpbXBsZUhUVFBTZXJ2ZXIuY3BwCisKICAgICAgICAgICAgIFRlc3Rz
L1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9TaW1wbGVIVFRQU2Vy
dmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1NpbXBsZUhUVFBTZXJ2
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQ2YmI4NmI5OTVkMDUxMThiOTg0MTRjYjc3MTE5YTVhZDhiMTVm
ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9T
aW1wbGVIVFRQU2VydmVyLmNwcApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29jb2EvSFRUUFNlcnZlci5oIgorCisjaW5j
bHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIK
KyNpbmNsdWRlIDxXZWJLaXQvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2luY2x1ZGUg
PFdlYktpdC9XS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdl
YktpdC9XS0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRQcml2
YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ3JlZGVudGlhbC5oPgorI2luY2x1ZGUgPFdlYktp
dC9XS1Byb3RlY3Rpb25TcGFjZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
I2lmIFVTRShDVVJMKQorI2lmIEhBVkUoU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNlQ3VybC5oPgorI2VuZGlmCisKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgc3RkOjp3c3RyaW5nIGNyZWF0ZVN0cmluZyhXS1N0
cmluZ1JlZiB3a1N0cmluZykKK3sKKyAgICBzaXplX3QgbWF4U2l6ZSA9IFdLU3RyaW5nR2V0TGVu
Z3RoKHdrU3RyaW5nKTsKKworICAgIHN0ZDo6dmVjdG9yPFdLQ2hhcj4gd2tDaGFyQnVmZmVyKG1h
eFNpemUpOworICAgIHNpemVfdCBhY3R1YWxMZW5ndGggPSBXS1N0cmluZ0dldENoYXJhY3RlcnMo
d2tTdHJpbmcsIHdrQ2hhckJ1ZmZlci5kYXRhKCksIG1heFNpemUpOworICAgIHJldHVybiBzdGQ6
OndzdHJpbmcod2tDaGFyQnVmZmVyLmRhdGEoKSwgYWN0dWFsTGVuZ3RoKTsKK30KKworY2xhc3Mg
U2VydmVyVGVzdGVyIHsKK3B1YmxpYzoKKyAgICBTZXJ2ZXJUZXN0ZXIoKQorICAgIHsKKyAgICAg
ICAgbV9jb250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihu
dWxscHRyKSk7CisgICAgICAgIG1fd2ViVmlldyA9IG1ha2VVbmlxdWU8UGxhdGZvcm1XZWJWaWV3
PihtX2NvbnRleHQuZ2V0KCkpOworCisgICAgICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBu
YXZpZ2F0aW9uQ2xpZW50OworICAgICAgICBtZW1zZXQoJm5hdmlnYXRpb25DbGllbnQsIDAsIHNp
emVvZihuYXZpZ2F0aW9uQ2xpZW50KSk7CisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuYmFzZS52
ZXJzaW9uID0gMDsKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5iYXNlLmNsaWVudEluZm8gPSB0
aGlzOworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkQ29tbWl0TmF2aWdhdGlvbiA9IFtd
IChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKSB7CisgICAgICAgICAgICBhdXRvIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRl
c3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rl
ci0+bV9kaWRDaGFuZ2VUaXRsZSA9IGZhbHNlOworICAgICAgICB9OworCisgICAgICAgIG5hdmln
YXRpb25DbGllbnQuZGlkRmluaXNoTmF2aWdhdGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdh
dGlvblJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAg
ICBhdXRvIHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRGYWlsTG9hZCA9IGZh
bHNlOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0cnVlOworICAgICAg
ICB9OworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkRmFpbE5hdmlnYXRpb24gPSBbXSAo
V0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLRXJyb3JSZWYgZXJyb3JSZWYsIFdLVHlwZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgYXV0byB0ZXN0ZXIgPSBz
dGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7
CisgICAgICAgICAgICB0ZXN0ZXItPm1fZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShl
cnJvclJlZik7CisgICAgICAgICAgICB0ZXN0ZXItPm1fbG9jYWxpemVkRXJyb3JEZXNjcmlwdGlv
biA9IGNyZWF0ZVN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5TG9jYWxpemVkRGVzY3JpcHRpb24o
ZXJyb3JSZWYpKS5nZXQoKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmFpbExvYWQgPSB0
cnVlOworICAgICAgICAgICAgdGVzdGVyLT5tX2RpZEZpbmlzaExvYWQgPSB0cnVlOworICAgICAg
ICB9OworCisgICAgICAgIG5hdmlnYXRpb25DbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdh
dGlvbiA9IFtdIChXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tFcnJvclJlZiBlcnJvclJl
ZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICBhdXRv
IHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9lcnJvckNvZGUgPSBXS0Vycm9yR2V0
RXJyb3JDb2RlKGVycm9yUmVmKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9sb2NhbGl6ZWRFcnJv
ckRlc2NyaXB0aW9uID0gY3JlYXRlU3RyaW5nKGFkb3B0V0soV0tFcnJvckNvcHlMb2NhbGl6ZWRE
ZXNjcmlwdGlvbihlcnJvclJlZikpLmdldCgpKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRG
YWlsTG9hZCA9IHRydWU7CisgICAgICAgICAgICB0ZXN0ZXItPm1fZGlkRmluaXNoTG9hZCA9IHRy
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgbmF2aWdhdGlvbkNsaWVudC5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgPSBbXSAoV0tQYWdlUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAg
ICAgYXV0byBwcm90ZWN0aW9uU3BhY2UgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJv
dGVjdGlvblNwYWNlKGNoYWxsZW5nZSk7CisgICAgICAgICAgICBhdXRvIGRlY2lzaW9uTGlzdGVu
ZXIgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0RGVjaXNpb25MaXN0ZW5lcihjaGFsbGVu
Z2UpOworICAgICAgICAgICAgYXV0byBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFdLUHJvdGVjdGlv
blNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTsKKworICAgICAg
ICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAg
ICAgICAgICAgYXV0byB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICAgICAgdGVzdGVyLT5tX2RpZFJl
Y2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gdHJ1ZTsKKyNpZiBVU0UoQ1VSTCkK
KyAgICAgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlSW5mbyA9IGFkb3B0V0soV0tQcm90ZWN0
aW9uU3BhY2VDb3B5Q2VydGlmaWNhdGVJbmZvKHByb3RlY3Rpb25TcGFjZSkpOworICAgICAgICAg
ICAgICAgIHRlc3Rlci0+bV92ZXJpZmljYXRpb25FcnJvciA9IFdLQ2VydGlmaWNhdGVJbmZvR2V0
VmVyaWZpY2F0aW9uRXJyb3IoY2VydGlmaWNhdGVJbmZvLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB0ZXN0ZXItPm1fdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbiA9IGNyZWF0ZVN0cmluZyhh
ZG9wdFdLKFdLQ2VydGlmaWNhdGVJbmZvQ29weVZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24o
Y2VydGlmaWNhdGVJbmZvLmdldCgpKSkuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgdGVzdGVy
LT5tX2NlcnRpZmljYXRlQ2hhaW4uY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IFdLQ2VydGlmaWNhdGVJbmZvR2V0Q2VydGlmaWNhdGVDaGFpblNpemUoY2VydGlm
aWNhdGVJbmZvLmdldCgpKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2VydGlm
aWNhdGUgPSBhZG9wdFdLKFdLQ2VydGlmaWNhdGVJbmZvQ29weUNlcnRpZmljYXRlQXRJbmRleChj
ZXJ0aWZpY2F0ZUluZm8uZ2V0KCksIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu
dDhfdCogcHRyID0gV0tEYXRhR2V0Qnl0ZXMoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICB0ZXN0ZXItPm1fY2VydGlmaWNhdGVDaGFpbi5wdXNoX2JhY2soU3RyaW5nKHB0
ciwgV0tEYXRhR2V0U2l6ZShjZXJ0aWZpY2F0ZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAodGVzdGVyLT5tX2FsbG93QW55U1NMQ2VydGlm
aWNhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB1c2VybmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd2tDcmVkZW50aWFs
ID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdl
dCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgICAgICAgICAg
ICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNp
c2lvbkxpc3RlbmVyLCB3a0NyZWRlbnRpYWwuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVz
ZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgbnVsbHB0cik7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lSFRUUEJhc2ljKSB7CisgICAgICAgICAgICAgICAgaWYgKFdLQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VHZXRQcmV2aW91c0ZhaWx1cmVDb3VudChjaGFsbGVuZ2UpKQorICAgICAg
ICAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lckNhbmNlbChkZWNp
c2lvbkxpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdXNlcm5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRlc3Rlci0+bV91c2VybmFtZS5j
X3N0cigpKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcGFzc3dvcmQgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRlc3Rlci0+bV9wYXNzd29yZC5jX3N0cigpKSk7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd2tDcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRl
bnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFs
UGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgIFdLQXV0aGVudGlj
YXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCB3a0Ny
ZWRlbnRpYWwuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVu
dGlhbChkZWNpc2lvbkxpc3RlbmVyLCBudWxscHRyKTsKKyAgICAgICAgfTsKKworICAgICAgICBX
S1BhZ2VQb2xpY3lDbGllbnRWMSBwYWdlUG9saWN5Q2xpZW50OworICAgICAgICBtZW1zZXQoJnBh
Z2VQb2xpY3lDbGllbnQsIDAsIHNpemVvZihwYWdlUG9saWN5Q2xpZW50KSk7CisgICAgICAgIHBh
Z2VQb2xpY3lDbGllbnQuYmFzZS52ZXJzaW9uID0gMTsKKyAgICAgICAgcGFnZVBvbGljeUNsaWVu
dC5iYXNlLmNsaWVudEluZm8gPSB0aGlzOworICAgICAgICBwYWdlUG9saWN5Q2xpZW50LmRlY2lk
ZVBvbGljeUZvclJlc3BvbnNlID0gW10gKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tVUkxSZXNw
b25zZVJlZiByZXNwb25zZSwgV0tVUkxSZXF1ZXN0UmVmLCBib29sLCBXS0ZyYW1lUG9saWN5TGlz
dGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewor
ICAgICAgICAgICAgYXV0byB0ZXN0ZXIgPSBzdGF0aWNfY2FzdDxTZXJ2ZXJUZXN0ZXIqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgICAgICB0ZXN0ZXItPm1fc3RhdHVz
Q29kZSA9IFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSk7CisgICAgICAgICAg
ICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOworICAgICAgICB9OworCisgICAg
ICAgIFdLUGFnZVN0YXRlQ2xpZW50VjAgcGFnZVN0YXRlQ2xpZW50OworICAgICAgICBtZW1zZXQo
JnBhZ2VTdGF0ZUNsaWVudCwgMCwgc2l6ZW9mKHBhZ2VTdGF0ZUNsaWVudCkpOworICAgICAgICBw
YWdlU3RhdGVDbGllbnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICAgICAgcGFnZVN0YXRlQ2xpZW50
LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7CisgICAgICAgIHBhZ2VTdGF0ZUNsaWVudC5kaWRDaGFu
Z2VUaXRsZSA9IFtdIChjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICBhdXRv
IHRlc3RlciA9IHN0YXRpY19jYXN0PFNlcnZlclRlc3Rlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKKyAgICAgICAgICAgIHRlc3Rlci0+bV9kaWRDaGFuZ2VUaXRsZSA9IHRydWU7
CisgICAgICAgIH07CisKKyAgICAgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQobV93
ZWJWaWV3LT5wYWdlKCksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworICAgICAgICBXS1BhZ2VT
ZXRQYWdlUG9saWN5Q2xpZW50KG1fd2ViVmlldy0+cGFnZSgpLCAmcGFnZVBvbGljeUNsaWVudC5i
YXNlKTsKKyAgICAgICAgV0tQYWdlU2V0UGFnZVN0YXRlQ2xpZW50KG1fd2ViVmlldy0+cGFnZSgp
LCAmcGFnZVN0YXRlQ2xpZW50LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc2V0VXNlcm5hbWVQ
YXNzd29yZChzdGQ6OnN0cmluZyB1c2VybmFtZSwgc3RkOjpzdHJpbmcgcGFzc3dvcmQpCisgICAg
eworICAgICAgICBtX3VzZXJuYW1lID0gdXNlcm5hbWU7CisgICAgICAgIG1fcGFzc3dvcmQgPSBw
YXNzd29yZDsKKyAgICB9CisKKyAgICBib29sIGxvYWQoU3RyaW5nIHVybCwgYm9vbCBhbGxvd0Fu
eVNTTENlcnRpZmljYXRlID0gZmFsc2UpCisgICAgeworICAgICAgICBtX2FsbG93QW55U1NMQ2Vy
dGlmaWNhdGUgPSBhbGxvd0FueVNTTENlcnRpZmljYXRlOworICAgICAgICBtX2RpZEZpbmlzaExv
YWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaWRGYWlsTG9hZCA9IGZhbHNlOworICAgICAgICBtX2Rp
ZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gZmFsc2U7CisgICAgICAgIG1f
ZGlkQ2hhbmdlVGl0bGUgPSBmYWxzZTsKKyAgICAgICAgbV9zdGF0dXNDb2RlID0gMDsKKyAgICAg
ICAgbV9lcnJvckNvZGUgPSAwOworICAgICAgICBtX3ZlcmlmaWNhdGlvbkVycm9yID0gMDsKKyAg
ICAgICAgbV9sb2NhbGl6ZWRFcnJvckRlc2NyaXB0aW9uLmNsZWFyKCk7CisgICAgICAgIG1fdmVy
aWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbi5jbGVhcigpOworICAgICAgICBtX2NlcnRpZmljYXRl
Q2hhaW4uY2xlYXIoKTsKKworICAgICAgICBhdXRvIHVybFJlZiA9IGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoVVRGOENTdHJpbmcodXJsLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgV0tQYWdlTG9h
ZFVSTChtX3dlYlZpZXctPnBhZ2UoKSwgdXJsUmVmLmdldCgpKTsKKyAgICAgICAgVXRpbDo6cnVu
KCZtX2RpZEZpbmlzaExvYWQpOworCisgICAgICAgIHJldHVybiAhbV9kaWRGYWlsTG9hZDsKKyAg
ICB9CisKKyAgICBib29sIGRpZEZhaWxMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9kaWRGYWlsTG9h
ZDsgfQorICAgIGJvb2wgZGlkUmVjZWl2ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX2RpZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0OyB9
CisgICAgaW50IHN0YXR1c0NvZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c0NvZGU7IH0KKyAg
ICBpbnQgZXJyb3JDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvckNvZGU7IH0KKyAgICBpbnQg
dmVyaWZpY2F0aW9uRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWNhdGlvbkVycm9yOyB9
CisgICAgc3RkOjp3c3RyaW5nIGxvY2FsaXplZEVycm9yRGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsaXplZEVycm9yRGVzY3JpcHRpb247IH0KKyAgICBzdGQ6OndzdHJpbmcgdmVy
aWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyaWZpY2F0aW9u
RXJyb3JEZXNjcmlwdGlvbjsgfQorICAgIHN0ZDo6dmVjdG9yPFNlY3VyaXR5SWRlbnRpdHlQRU0+
JiBjZXJ0aWZpY2F0ZUNoYWluKCkgeyByZXR1cm4gbV9jZXJ0aWZpY2F0ZUNoYWluOyB9CisgICAg
c3RkOjp3c3RyaW5nIHRpdGxlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRGaW5pc2hMb2Fk
IHx8IG1fZGlkRmFpbExvYWQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjp3c3RyaW5nKCk7CisK
KyAgICAgICAgVXRpbDo6cnVuKCZtX2RpZENoYW5nZVRpdGxlKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVN0cmluZyhhZG9wdFdLKFdLRnJhbWVDb3B5VGl0bGUoV0tQYWdlR2V0TWFpbkZyYW1lKG1f
d2ViVmlldy0+cGFnZSgpKSkpLmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBt
X2FsbG93QW55U1NMQ2VydGlmaWNhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRGaW5pc2hM
b2FkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGlkRmFpbExvYWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2RpZENoYW5nZVRpdGxlIHsgZmFsc2UgfTsKKworICAgIGludCBtX3N0YXR1c0Nv
ZGUgeyAwIH07CisgICAgaW50IG1fZXJyb3JDb2RlIHsgMCB9OworICAgIGludCBtX3ZlcmlmaWNh
dGlvbkVycm9yIHsgMCB9OworICAgIHN0ZDo6d3N0cmluZyBtX2xvY2FsaXplZEVycm9yRGVzY3Jp
cHRpb247CisgICAgc3RkOjp3c3RyaW5nIG1fdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbjsK
KworICAgIHN0ZDo6c3RyaW5nIG1fdXNlcm5hbWU7CisgICAgc3RkOjpzdHJpbmcgbV9wYXNzd29y
ZDsKKworICAgIHN0ZDo6dmVjdG9yPFNlY3VyaXR5SWRlbnRpdHlQRU0+IG1fY2VydGlmaWNhdGVD
aGFpbjsKKworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVdlYlZpZXc+IG1fd2ViVmlldzsKK307CisKK1RFU1QoSFRU
UFNlcnZlciwgU2ltcGxlSFRUUCkKK3sKKyAgICBIVFRQU2VydmVyIHNlcnZlcih7CisgICAgICAg
IHsgIi8iLCB7CisgICAgICAgICAgICAyMDAsCisgICAgICAgICAgICB7IH0sCisgICAgICAgICAg
ICAiPGh0bWw+IDxoZWFkPjx0aXRsZT5TaW1wbGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPjwvaGVhZD4g
PGJvZHk+SFRUUCBodHRwIHNlcnZlciByb290PC9ib2R5PiA8L2h0bWw+IgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICBTZXJ2ZXJUZXN0ZXIgbG9hZGVyOworICAgIFN0
cmluZyB0b3BVUkwgPSBzZXJ2ZXIudXJsKCkuc3RyaW5nKCk7CisKKyAgICBFWFBFQ1RfVFJVRShs
b2FkZXIubG9hZCh0b3BVUkwpKTsKKyAgICBFWFBFQ1RfRVEobG9hZGVyLnRpdGxlKCksIEwiU2lt
cGxlIEhUVFAgU2VydmVyIik7CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDIw
MCk7Cit9CisKKyNpZiBIQVZFKFNTTCkKK1RFU1QoSFRUUFNlcnZlciwgU2ltcGxlSFRUUFMpCit7
CisgICAgYXV0byBjZXJ0S2V5UEVNID0gY2VydGlmaWNhdGVQcml2YXRlS2V5RGVmYXVsdCgpOwor
CisgICAgSFRUUFNlcnZlciBzZXJ2ZXIoeworICAgICAgICB7ICIvIiwgeworICAgICAgICAgICAg
MjAwLAorICAgICAgICAgICAgeyB9LAorICAgICAgICAgICAgIjxodG1sPiA8aGVhZD48dGl0bGU+
U2ltcGxlIEhUVFBTIFNlcnZlcjwvdGl0bGU+PC9oZWFkPiA8Ym9keT5IVFRQUyBodHRwcyBzZXJ2
ZXIgcm9vdDwvYm9keT4gPC9odG1sPiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0s
IEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwcywgY2VydEtleVBFTS5pZGVudGl0eSgpKTsKKwor
ICAgIFNlcnZlclRlc3RlciBsb2FkZXI7CisgICAgU3RyaW5nIHRvcFVSTCA9IHNlcnZlci51cmwo
KS5zdHJpbmcoKTsKKworICAgIEVYUEVDVF9UUlVFKGxvYWRlci5sb2FkKHRvcFVSTCwgdHJ1ZSkp
OworICAgIEVYUEVDVF9FUShsb2FkZXIudGl0bGUoKSwgTCJTaW1wbGUgSFRUUFMgU2VydmVyIik7
CisgICAgRVhQRUNUX0VRKGxvYWRlci5zdGF0dXNDb2RlKCksIDIwMCk7CisKKyAgICBhdXRvIGNl
cnRpZmljYXRlQ2hhaW4gPSBsb2FkZXIuY2VydGlmaWNhdGVDaGFpbigpOworICAgIEVYUEVDVF9U
UlVFKGxvYWRlci5kaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdCgpKTsKKyAg
ICBFWFBFQ1RfRVEoY2VydGlmaWNhdGVDaGFpbi5zaXplKCksIDEpOworCisgICAgYXV0byBpZGVu
dGl0eSA9IGNlcnRpZmljYXRlQ2hhaW5bMF07CisgICAgRVhQRUNUX0VRKGNlcnRLZXlQRU0uY2Vy
dGlmaWNhdGUoKSwgaWRlbnRpdHkuY2VydGlmaWNhdGUoKSk7CisgICAgRVhQRUNUX0VRKGNlcnRL
ZXlQRU0ucHVibGljS2V5KCksIGlkZW50aXR5LnB1YmxpY0tleSgpKTsKK30KKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5oCmluZGV4IDc1ZDI4MmVhOWU0MGQyMTE1YWYxOTQ4YWQzZjhlYjhmYzYzN2NjZDQuLjAz
YTFlNGM4NTZjNWE1ZWRhYjIwODQyNTcwYmQxMDExYjY4ZjVhNTQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW1wb3J0IDxOZXR3b3JrL05ldHdvcmsuaD4KICNpbXBv
cnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KQEAg
LTMzLDYgKzM0LDkgQEAKICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogT0JKQ19D
TEFTUyBOU1VSTFJlcXVlc3Q7CisjZWxpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiQ29ubmVj
dGlvbkxpc3RlbmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCkBA
IC00NCwxNCArNDgsMjIgQEAgY2xhc3MgSFRUUFNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0
IFJlcXVlc3REYXRhOwogICAgIGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1aW50OF90IHsgSHR0cCwg
SHR0cHMsIEh0dHBzV2l0aExlZ2FjeVRMUywgSHR0cDIsIEh0dHBzUHJveHksIEh0dHBzUHJveHlX
aXRoQXV0aGVudGljYXRpb24gfTsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICB1c2luZyBDZXJ0
aWZpY2F0ZVZlcmlmaWVyID0gRnVuY3Rpb248dm9pZChzZWNfcHJvdG9jb2xfbWV0YWRhdGFfdCwg
c2VjX3RydXN0X3QsIHNlY19wcm90b2NvbF92ZXJpZnlfY29tcGxldGVfdCk+OwogCiAgICAgSFRU
UFNlcnZlcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3Bv
bnNlPj4sIFByb3RvY29sID0gUHJvdG9jb2w6Okh0dHAsIENlcnRpZmljYXRlVmVyaWZpZXImJiA9
IG51bGxwdHIsIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4mJiA9IG51bGxwdHIsIHN0ZDo6b3B0
aW9uYWw8dWludDE2X3Q+IHBvcnQgPSB7IH0pOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIEhU
VFBTZXJ2ZXIoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNw
b25zZT4+LCBQcm90b2NvbCA9IFByb3RvY29sOjpIdHRwLCBzdGQ6OnVuaXF1ZV9wdHI8U2VjdXJp
dHlJZGVudGl0eT4mJiA9IG51bGxwdHIsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQgPSBz
dGQ6Om51bGxvcHQpOworI2VuZGlmCiAgICAgSFRUUFNlcnZlcihGdW5jdGlvbjx2b2lkKENvbm5l
Y3Rpb24pPiYmLCBQcm90b2NvbCA9IFByb3RvY29sOjpIdHRwKTsKICAgICB+SFRUUFNlcnZlcigp
OwogICAgIHVpbnQxNl90IHBvcnQoKSBjb25zdDsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBO
U1VSTFJlcXVlc3QgKnJlcXVlc3QoY29uc3QgU3RyaW5nJiBwYXRoID0gIi8iX3N0cikgY29uc3Q7
CiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0V2l0aExvY2FsaG9zdChjb25zdCBTdHJpbmcmIHBh
dGggPSAiLyJfc3RyKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBVUkwgdXJsKGNv
bnN0IFN0cmluZyYgcGF0aCA9IHsgfSk7CisjZW5kaWYKICAgICBzaXplX3QgdG90YWxSZXF1ZXN0
cygpIGNvbnN0OwogICAgIHZvaWQgY2FuY2VsKCk7CiAKQEAgLTY1LDEyICs3NywxOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB0ZXN0Q2VydGlmaWNhdGUoKTsKIAogcHJp
dmF0ZToKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgUmV0YWluUHRyPG53X3BhcmFt
ZXRlcnNfdD4gbGlzdGVuZXJQYXJhbWV0ZXJzKFByb3RvY29sLCBDZXJ0aWZpY2F0ZVZlcmlmaWVy
JiYsIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4mJiwgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4g
cG9ydCk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0
aW9uLCBSZWY8UmVxdWVzdERhdGE+KTsKICAgICBjb25zdCBjaGFyKiBzY2hlbWUoKSBjb25zdDsK
IAogICAgIFJlZjxSZXF1ZXN0RGF0YT4gbV9yZXF1ZXN0RGF0YTsKKyNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9saXN0ZW5lcjsKKyNlbGlmIFBMQVRG
T1JNKFdJTikKKyAgICBDb25uZWN0aW9uTGlzdGVuZXIgbV9saXN0ZW5lcjsKKyNlbmRpZgogICAg
IFByb3RvY29sIG1fcHJvdG9jb2wgeyBQcm90b2NvbDo6SHR0cCB9OwogfTsKIApAQCAtNzgsMTkg
Kzk2LDM0IEBAIGNsYXNzIENvbm5lY3Rpb24gewogcHVibGljOgogICAgIHZvaWQgc2VuZChTdHJp
bmcmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gbnVsbHB0cikgY29uc3Q7CiAgICAg
dm9pZCBzZW5kKFZlY3Rvcjx1aW50OF90PiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
PSBudWxscHRyKSBjb25zdDsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHNlbmQoUmV0
YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0g
bnVsbHB0cikgY29uc3Q7CisjZW5kaWYKICAgICB2b2lkIHJlY2VpdmVCeXRlcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiwgc2l6ZV90IG1pbmltdW1TaXplID0g
MSkgY29uc3Q7CiAgICAgdm9pZCByZWNlaXZlSFRUUFJlcXVlc3QoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8Y2hhcj4mJik+JiYsIFZlY3RvcjxjaGFyPiYmIGJ1ZmZlciA9IHsgfSkgY29u
c3Q7CiAgICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmID0geyB9KTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogICAgIHZvaWQgY2FuY2VsKCk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIFNvY2tldDo6U29ja2V0IHNvY2tldCgpIGNvbnN0OworICAg
IFNTTCogc3NsKCkgY29uc3Q7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SFRUUFNlcnZlcjsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBDb25uZWN0aW9uKG53X2Nvbm5l
Y3Rpb25fdCBjb25uZWN0aW9uKQogICAgICAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKSB7
IH0KIAogICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyAgICBDb25uZWN0aW9uKFJlZlB0cjxDb25uZWN0aW9uRW50aXR5PiYm
IGNvbm5lY3Rpb24pCisgICAgICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikp
IHsgfQorICAgIFJlZlB0cjxDb25uZWN0aW9uRW50aXR5PiBtX2Nvbm5lY3Rpb24geyBudWxscHRy
IH07CisKKyAgICBzdGF0aWMgdm9pZCBzZW5kQnl0ZXNQcm9jZXNzKGNvbnN0IENvbm5lY3Rpb24m
LCBWZWN0b3I8dWludDhfdD4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gbnVsbHB0
ciwgaW50IHNlbnRUb3RhbCA9IDApOworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVCeXRlc1Byb2Nl
c3MoY29uc3QgQ29ubmVjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4
X3Q+JiYpPiYmKTsKKyNlbmRpZgogfTsKIAogc3RydWN0IEhUVFBSZXNwb25zZSB7CkBAIC0xMjYs
NiArMTU5LDE3IEBAIHN0cnVjdCBIVFRQUmVzcG9uc2UgewogICAgIFRlcm1pbmF0ZUNvbm5lY3Rp
b24gdGVybWluYXRlQ29ubmVjdGlvbiB7IFRlcm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07CiB9Owog
CisjaWYgUExBVEZPUk0oV0lOKQorc3RydWN0IEhUVFBSZXF1ZXN0IHsKKyAgICBzdGF0aWMgSFRU
UFJlcXVlc3QgcGFyc2VIVFRQUmVxdWVzdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcik7
CisKKyAgICBTdHJpbmcgcGF0aDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJG
aWVsZHM7CisgICAgU3RyaW5nIGJvZHk7CisgICAgYm9vbCBjb21wbGV0ZSB7IGZhbHNlIH07Cit9
OworI2VuZGlmCisKIG5hbWVzcGFjZSBIMiB7CiAKIC8vIGh0dHBzOi8vaHR0cDIuZ2l0aHViLmlv
L2h0dHAyLXNwZWMvI3JmYy5zZWN0aW9uLjQuMQpAQCAtMTgzLDYgKzIyNywxMCBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKKyNpZiBQTEFURk9STShDT0NPQSkK
IFJldGFpblB0cjxTZWNDZXJ0aWZpY2F0ZVJlZj4gdGVzdENlcnRpZmljYXRlKCk7CiBSZXRhaW5Q
dHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eSgpOwogUmV0YWluUHRyPFNlY0lkZW50aXR5
UmVmPiB0ZXN0SWRlbnRpdHkyKCk7CisjZWxpZiBQTEFURk9STShXSU4pCitUZXN0V2ViS2l0QVBJ
OjpTZWN1cml0eUlkZW50aXR5UEVNIGNlcnRpZmljYXRlUHJpdmF0ZUtleURlZmF1bHQoKTsKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRX
aW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk0Y2NjYzY2OWVhYTA4YWRjZmI1ODE1YjMzMjZkZjIxYWIxNWQzOTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5j
cHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU29ja2V0LmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKworbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisKK3N0YXRpYyB2b2lk
IGluaXRpYWxpemUoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworCisgICAg
c3RkOjpjYWxsX29uY2UoZmxhZywgW10geworICAgICAgICBXU0FEQVRBIGRhdGE7CisgICAgICAg
IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMCksICZkYXRhKTsKKyAgICB9KTsKK30KKworU29ja2V0
IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIGluaXRp
YWxpemUoKTsKKyAgICByZXR1cm4gOjpzb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9
CisKK2Jvb2wgaXNWYWxpZFNvY2tldChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiBzb2Nr
ZXQgIT0gSU5WQUxJRF9TT0NLRVQ7Cit9CisKK1NvY2tldCBhY2NlcHQoU29ja2V0IHNvY2tldCkK
K3sKKyAgICByZXR1cm4gOjphY2NlcHQoc29ja2V0LCBudWxscHRyLCBudWxscHRyKTsKK30KKwor
aW50IHNodXRkb3duKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6c2h1dGRvd24oc29j
a2V0LCBTRF9CT1RIKTsKK30KKworaW50IGNsb3NlKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0
dXJuIDo6Y2xvc2Vzb2NrZXQoc29ja2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNvY2tldCwg
dm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAgcmV0dXJuIDo6cmVjdihzb2NrZXQs
IHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXIpLCBjb3VudCwgMCk7Cit9CisKK2ludCB3cml0ZShT
b2NrZXQgc29ja2V0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICBy
ZXR1cm4gOjpzZW5kKHNvY2tldCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNv
dW50LCAwKTsKK30KKworCitib29sIGlzU29ja2V0UmVhZHkoU29ja2V0IHJlYWRTb2NrZXQsIFNv
Y2tldCB3cml0ZVNvY2tldCkKK3sKKyAgICBmZF9zZXQgZmRzZXRSZWFkLCBmZHNldFdyaXRlOwor
ICAgIEZEX1pFUk8oJmZkc2V0UmVhZCk7CisgICAgRkRfWkVSTygmZmRzZXRXcml0ZSk7CisKKyAg
ICBpZiAoaXNWYWxpZFNvY2tldChyZWFkU29ja2V0KSkKKyAgICAgICAgRkRfU0VUKHJlYWRTb2Nr
ZXQsICZmZHNldFJlYWQpOworICAgIGlmIChpc1ZhbGlkU29ja2V0KHdyaXRlU29ja2V0KSkKKyAg
ICAgICAgRkRfU0VUKHdyaXRlU29ja2V0LCAmZmRzZXRXcml0ZSk7CisKKyAgICBzdHJ1Y3QgdGlt
ZXZhbCB0aW1lb3V0OworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3Vz
ZWMgPSAwOworCisgICAgYXV0byByYyA9IDo6c2VsZWN0KDAsICZmZHNldFJlYWQsICZmZHNldFdy
aXRlLCBudWxscHRyLCAmdGltZW91dCk7CisgICAgcmV0dXJuIHJjID4gMDsKK30KKworYm9vbCBp
c1NvY2tldFJlYWR5UmVhZGluZyhTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiBpc1NvY2tl
dFJlYWR5KHNvY2tldCwgSW52YWxpZFNvY2tldCk7Cit9CisKK2Jvb2wgaXNTb2NrZXRSZWFkeVdy
aXRpbmcoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gaXNTb2NrZXRSZWFkeShJbnZhbGlk
U29ja2V0LCBzb2NrZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBTb2NrZXQKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452165</attachid>
            <date>2022-02-16 02:29:31 -0800</date>
            <delta_ts>2022-03-05 12:16:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20220216192931.patch</filename>
            <type>text/plain</type>
            <size>63665</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5ODc5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTdkNjJkZjUyM2MwNDE1ZGM5OWFmMzZiNmI2MWM0NDQz
ZDgyMWYwMi4uOTdlODU3NjYxMDdmZGMxZTg4NTBmNTM1YWJlNWI3MmZjNmI2YzdjMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDIyLTAyLTE2ICBUYWthc2hpIEtvbW9yaSAgPHhUYWthc2hpLktvbW9yaUBqcC5zb255
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgSFRUUFNlcnZlciBmb3IgQVBJIHRlc3RzIGluIGMr
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1Mzc5
CisKKyAgICAgICAgSW1wbGVtZW50ZWQgQ29ubmVjdGlvbiBhbmQgSFRUUFNlcnZlciBjbGFzc2Vz
IHdoaWNoIGFyZSBkZWNsYXJlZCBpbiBjb2NvYS9IVFRQU2VydmVyLmgKKyAgICAgICAgVGhlIGlu
dGVyZmFjZXMgYXJlIGFsb21vc3QgdGhlIHNhbWUsIGJ1dCBIVFRQU2VydmVyIGNvbnN0cnVjdG9y
IGFuZCBhIENvbm5lY3Rpb246OnNlbmQgZnVuY3Rpb24gdmFyeS4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHdpbmNhaXJvIHBvcnQgZG9lcyBub3QgaGF2ZSBkaXNwYXRjaF9kYXRhX3QgdHlwZS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6ZGVsZXRlcjxYNTA5Pjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpkZWxldGVyPEVWUF9QS0VZPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpkZWxldGVyPEJJTz46Om9wZXJhdG9yKCkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2Vj
SWRlbnRpdHlSZWY6OnByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjSWRl
bnRpdHlSZWY6Ong1MDkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY6
OnNldFByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY6
OnNldFg1MDkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY6OmlzVmFs
aWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6Y2VydGlm
aWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6cHJp
dmF0ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjpw
dWJsaWNLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0eTo6Q29u
bmVjdGlvbkVudGl0eSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uRW50aXR5
Ojp+Q29ubmVjdGlvbkVudGl0eSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9u
RW50aXR5Ojpzb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkVudGl0
eTo6c3NsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBPU0lY
LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjppbml0aWFsaXplU1NMTGlicmFy
eSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjpTZWN1cml0
eUlkZW50aXR5UEVNKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQ
RU06OmlkZW50aXR5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQ
RU06OnVwZGF0ZUNlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5
SWRlbnRpdHlQRU06OnVwZGF0ZVByaXZhdGVLZXkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Q29ubmVjdGlvbkVudGl0eTo6Y2FuY2VsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5l
Y3Rpb25MaXN0ZW5lcjo6Q29ubmVjdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6fkNvbm5lY3Rpb25MaXN0ZW5lcik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OmlzVmFsaWQpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6c3RhcnQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6c2V0U2VjSWRlbnRpdHlSZWYpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjppc1NlY3VyZSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uTGlzdGVuZXI6OmFjY2VwdFNTTENvbm5lY3Rpb24p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjpkaXNwYXRjaExp
c3RlbmluZyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRCeXRlc1Byb2Nlc3MpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6c2VuZCBjb25zdCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpyZWNlaXZlQnl0ZXNQcm9jZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkNvbm5lY3Rpb246OnJlY2VpdmVCeXRlcyBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpDb25uZWN0aW9uOjpyZWNlaXZlSFRUUFJlcXVlc3QgY29uc3QpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Q29ubmVjdGlvbjo6dGVybWluYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkNvbm5lY3Rpb246OmNhbmNlbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9IVFRQU2VydmVy
LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpSZXF1ZXN0
RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6
SFRUUFNlcnZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp+SFRUUFNl
cnZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwYXJzZUF1dGhlbnRpY2F0aW9uQ3JlZGVu
dGlhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1
ZXN0cyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpwb3J0IGNvbnN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnNjaGVtZSBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp1cmwgY29uc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6Y2FuY2VsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoT0spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRU
UFNlcnZlcjo6dG90YWxSZXF1ZXN0cyBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpyZXNwb25kV2l0aENoYWxsZW5nZVRoZW5PSyk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpIVFRQU2VydmVyOjpwYXJzZVBhdGgpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
c3RhdHVzVGV4dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphcHBlbmRVVEY4VG9WZWN0b3Ip
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpib2R5RnJvbVN0cmluZyk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZSBjb25zdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVxdWVzdDo6cGFyc2VIVFRQUmVxdWVzdCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp0ZXN0Q2VydGlmaWNhdGUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkpOgorICAg
ICAgICAodGVzdElkZW50aXR5KToKKyAgICAgICAgKHRlc3RJZGVudGl0eTIpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29h
L0hUVFBTZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnVybCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjpDb25uZWN0aW9uKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlNvY2tldDo6c29ja2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tl
dDo6aXNWYWxpZFNvY2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmFjY2Vw
dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNodXRkb3duKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
U29ja2V0OjpyZWFkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6d3JpdGUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojppc1NvY2tldFJlYWR5KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aXNTb2NrZXRSZWFkeVJlYWRpbmcpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U29ja2V0Ojppc1NvY2tldFJlYWR5V3JpdGluZyk6CisKIDIwMjItMDIt
MTUgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgTWlncmF0ZSBJ
bmRleGVkREIgYW5kIExvY2FsU3RvcmFnZSBkYXRhIHRvIEdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lci5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTZh
NzBkMGVjYWJmNDliM2RkMGMzMWIyYmYyYzQzM2Q2ZmZjMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXIuaApAQCAtMCwwICsxLDE3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBsYXRmb3JtU29j
a2V0LmgiCisKKyNpZiBIQVZFKFNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorI2lu
Y2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKKyNpZiBIQVZFKFNTTCkKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3Qg
ZGVsZXRlcjsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgZGVsZXRlcjxYNTA5PiB7CisgICAgdm9pZCBv
cGVyYXRvcigpKFg1MDkqIHg1MDkpCisgICAgeworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgZGVsZXRlcjxFVlBfUEtFWT4geworICAgIHZv
aWQgb3BlcmF0b3IoKShFVlBfUEtFWSoga2V5KQorICAgIHsKKyAgICAgICAgRVZQX1BLRVlfZnJl
ZShrZXkpOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBkZWxldGVyPEJJTz4gewor
ICAgIHZvaWQgb3BlcmF0b3IoKShCSU8qIGJpbykKKyAgICB7CisgICAgICAgIEJJT19mcmVlKGJp
byk7CisgICAgfQorfTsKKyNlbHNlCit1c2luZyBTU0wgPSB2b2lkOworc3RydWN0IFg1MDkgeyB9
Oworc3RydWN0IEVWUF9QS0VZIHsgfTsKK3N0cnVjdCBCSU8geyB9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8WDUwOT4g
eworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KSB7IH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IGRlbGV0ZXI8RVZQX1BLRVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoRVZQX1BLRVkq
IGtleSkgeyB9Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVsZXRlcjxCSU8+IHsKKyAgICB2
b2lkIG9wZXJhdG9yKCkoQklPKiBiaW8pIHsgfQorfTsKKyNlbmRpZgorCituYW1lc3BhY2Ugc3Ns
IHsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyB1bmlxdWVfcHRyID0gc3RkOjp1bmlxdWVf
cHRyPFQsIGRlbGV0ZXI8VD4+OworfQorCitjbGFzcyBTZWNJZGVudGl0eVJlZiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3NsOjp1bmlxdWVfcHRyPEVWUF9Q
S0VZPiYgcHJpdmF0ZUtleSgpIHsgcmV0dXJuIG1fcHJpdmF0ZUtleTsgfQorICAgIHNzbDo6dW5p
cXVlX3B0cjxYNTA5PiYgeDUwOSgpIHsgcmV0dXJuIG1feDUwOTsgfQorCisgICAgdm9pZCBzZXRQ
cml2YXRlS2V5KHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4mJiBwcml2YXRlS2V5KSB7IG1fcHJp
dmF0ZUtleSA9IFdURk1vdmUocHJpdmF0ZUtleSk7IH0KKyAgICB2b2lkIHNldFg1MDkoc3NsOjp1
bmlxdWVfcHRyPFg1MDk+JiYgeDUwOSkgeyBtX3g1MDkgPSBXVEZNb3ZlKHg1MDkpOyB9CisKKyAg
ICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3ByaXZhdGVLZXkgJiYgbV94NTA5OyB9Citwcml2
YXRlOgorICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4gbV9wcml2YXRlS2V5IHsgbnVsbHB0
ciB9OworICAgIHNzbDo6dW5pcXVlX3B0cjxYNTA5PiBtX3g1MDkgeyBudWxscHRyIH07Cit9Owor
CitjbGFzcyBTZWN1cml0eUlkZW50aXR5UEVNIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtl
eVR5cGUgeyBOdWxsVHlwZSwgUlNBVHlwZSwgRUNUeXBlIH07CisKKyAgICBTZWN1cml0eUlkZW50
aXR5UEVNKEtleVR5cGUsIGludCBiaXRMZW5ndGgsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUs
IGNvbnN0IFN0cmluZyYgcHJpdmF0ZUtleSk7CisgICAgU2VjdXJpdHlJZGVudGl0eVBFTShLZXlU
eXBlLCBpbnQgYml0TGVuZ3RoLCBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGUsIFZlY3Rvcjx1
aW50OF90PiBwcml2YXRlS2V5KTsKKyAgICBTZWN1cml0eUlkZW50aXR5UEVNKGNvbnN0IFN0cmlu
ZyYgY2VydGlmaWNhdGUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNlY0lkZW50aXR5UmVmPiBp
ZGVudGl0eSgpOworCisgICAgU3RyaW5nIGNlcnRpZmljYXRlKCkgeyByZXR1cm4gbV9jZXJ0aWZp
Y2F0ZTsgfQorICAgIFN0cmluZyBwcml2YXRlS2V5KCkgeyByZXR1cm4gbV9wcml2YXRlS2V5OyB9
CisgICAgU3RyaW5nIHB1YmxpY0tleSgpIHsgcmV0dXJuIG1fcHVibGljS2V5OyB9Citwcml2YXRl
OgorICAgIHZvaWQgdXBkYXRlQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCB1
cGRhdGVQcml2YXRlS2V5KGNvbnN0IFN0cmluZyYpOworCisgICAgS2V5VHlwZSBtX2tleVR5cGUg
eyBLZXlUeXBlOjpOdWxsVHlwZSB9OworICAgIGludCBtX2JpdExlbmd0aCB7IDAgfTsKKyAgICBT
dHJpbmcgbV9jZXJ0aWZpY2F0ZTsKKyAgICBTdHJpbmcgbV9wcml2YXRlS2V5OworICAgIFN0cmlu
ZyBtX3B1YmxpY0tleTsKK307CisKK2NsYXNzIENvbm5lY3Rpb25FbnRpdHkgOiBwdWJsaWMgUmVm
Q291bnRlZDxDb25uZWN0aW9uRW50aXR5PiB7CitwdWJsaWM6CisgICAgQ29ubmVjdGlvbkVudGl0
eShTb2NrZXQ6OlNvY2tldCBzb2NrZXQsIFNTTCogc3NsKQorICAgICAgICA6IG1fc29ja2V0KHNv
Y2tldCkKKyAgICAgICAgLCBtX3NzbChzc2wpIHsgfQorICAgIH5Db25uZWN0aW9uRW50aXR5KCkg
eyBjYW5jZWwoKTsgfQorCisgICAgU29ja2V0OjpTb2NrZXQgc29ja2V0KCkgeyByZXR1cm4gbV9z
b2NrZXQ7IH0KKyAgICBTU0wqIHNzbCgpIHsgcmV0dXJuIG1fc3NsOyB9CisKKyAgICB2b2lkIGNh
bmNlbCgpOworcHJpdmF0ZToKKyAgICBTb2NrZXQ6OlNvY2tldCBtX3NvY2tldCB7IFNvY2tldDo6
SW52YWxpZFNvY2tldCB9OworICAgIFNTTCogbV9zc2wgeyBudWxscHRyIH07Cit9OworCitjbGFz
cyBDb25uZWN0aW9uTGlzdGVuZXIgeworcHVibGljOgorICAgIENvbm5lY3Rpb25MaXN0ZW5lcigp
OworICAgIH5Db25uZWN0aW9uTGlzdGVuZXIoKTsKKworICAgIHVpbnQxNl90IHBvcnQoKSBjb25z
dDsKKyAgICBib29sIGlzVmFsaWQoKTsKKyAgICBib29sIGlzU2VjdXJlKCk7CisKKyAgICB2b2lk
IHNldFNlY0lkZW50aXR5UmVmKHN0ZDo6dW5pcXVlX3B0cjxTZWNJZGVudGl0eVJlZj4mJik7Cisg
ICAgdm9pZCByZWdpc3RlckhhbmRsZXIoRnVuY3Rpb248dm9pZChTb2NrZXQ6OlNvY2tldCYmLCBT
U0wqKT4mJik7CisgICAgdm9pZCBzdGFydCh1aW50MTZfdCB0YXJnZXRQb3J0ID0gMCk7CisgICAg
dm9pZCBzdG9wKCk7Citwcml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoU29ja2V0OjpTb2NrZXQm
JiwgU1NMKik+IG1fY29ubmVjdGlvbkhhbmRsZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNlY0lk
ZW50aXR5UmVmPiBtX3NlY3VyaXR5SWRlbnRpdHkgeyBudWxscHRyIH07CisKKyAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9uTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMg
U1NMKiBhY2NlcHRTU0xDb25uZWN0aW9uKFNvY2tldDo6U29ja2V0LCBTZWNJZGVudGl0eVJlZiYp
OworCisgICAgU29ja2V0OjpTb2NrZXQgbV9saXN0ZW5pbmdTb2NrZXQgeyBTb2NrZXQ6OkludmFs
aWRTb2NrZXQgfTsKKyAgICB1aW50MTZfdCBtX3BvcnQ7CisgICAgYm9vbCBtX2xpc3RlbmluZyB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2xpc3RlbmluZ1N0b3BwZWQgeyBmYWxzZSB9OworfTsKKwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXJQT1NJ
WC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lclBPU0lYLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMjQ1YWM2ZmU2ZDhjYzhiOTQ4YTE0MmNkNzc0YTcwMmE1YzkxMWY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXJQT1NJ
WC5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb25MaXN0ZW5lci5oIgorCisjaW5jbHVkZSAiVXRpbGl0
aWVzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK3N0YXRpYyBjb25zdCBmbG9hdCBQb2xsaW5nSW50ZXJ2YWxJ
blNlY29uZHMgPSAwLjAyOyAvLyAyMG1zCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
I2lmIEhBVkUoU1NMKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKQoreworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzc2xJbml0aWFsaXplZDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShzc2xJbml0aWFsaXplZCwgW10geworICAgICAgICBTU0xfbGlicmFyeV9pbml0KCk7CisgICAg
fSk7Cit9CisjZW5kaWYKKworU2VjdXJpdHlJZGVudGl0eVBFTTo6U2VjdXJpdHlJZGVudGl0eVBF
TShLZXlUeXBlIGtleVR5cGUsIGludCBiaXRMZW5ndGgsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNh
dGUsIGNvbnN0IFN0cmluZyYgcHJpdmF0ZUtleSkKKyAgICA6IG1fa2V5VHlwZShrZXlUeXBlKQor
ICAgICwgbV9iaXRMZW5ndGgoYml0TGVuZ3RoKQoreworICAgIHVwZGF0ZUNlcnRpZmljYXRlKGNl
cnRpZmljYXRlKTsKKyAgICB1cGRhdGVQcml2YXRlS2V5KHByaXZhdGVLZXkpOworfQorCitTZWN1
cml0eUlkZW50aXR5UEVNOjpTZWN1cml0eUlkZW50aXR5UEVNKEtleVR5cGUga2V5VHlwZSwgaW50
IGJpdExlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlLCBWZWN0b3I8dWludDhfdD4g
cHJpdmF0ZUtleSkKKyAgICA6IG1fa2V5VHlwZShrZXlUeXBlKQorICAgICwgbV9iaXRMZW5ndGgo
Yml0TGVuZ3RoKQoreworICAgIFN0cmluZ0J1aWxkZXIgcHJpdmF0ZUtleVBFTTsKKyAgICBwcml2
YXRlS2V5UEVNLmFwcGVuZCgiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG4iKTsKKyAgICBw
cml2YXRlS2V5UEVNLmFwcGVuZChiYXNlNjRFbmNvZGVUb1N0cmluZyhwcml2YXRlS2V5LmRhdGEo
KSwgcHJpdmF0ZUtleS5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6SW5zZXJ0TEZzKSwgIlxu
Iik7CisgICAgcHJpdmF0ZUtleVBFTS5hcHBlbmQoIi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1c
biIpOworCisgICAgU3RyaW5nQnVpbGRlciBjZXJ0aWZpY2F0ZVBFTTsKKyAgICBjZXJ0aWZpY2F0
ZVBFTS5hcHBlbmQoIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIik7CisgICAgY2VydGlm
aWNhdGVQRU0uYXBwZW5kKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNlcnRpZmljYXRlLmRhdGEoKSwg
Y2VydGlmaWNhdGUuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6Okluc2VydExGcyksICJcbiIp
OworICAgIGNlcnRpZmljYXRlUEVNLmFwcGVuZCgiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxu
Iik7CisKKyAgICB1cGRhdGVDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZVBFTS50b1N0cmluZygpKTsK
KyAgICB1cGRhdGVQcml2YXRlS2V5KHByaXZhdGVLZXlQRU0udG9TdHJpbmcoKSk7Cit9CisKK1Nl
Y3VyaXR5SWRlbnRpdHlQRU06OlNlY3VyaXR5SWRlbnRpdHlQRU0oY29uc3QgU3RyaW5nJiBjZXJ0
aWZpY2F0ZSkKK3sKKyAgICB1cGRhdGVDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxTZWNJZGVudGl0eVJlZj4gU2VjdXJpdHlJZGVudGl0eVBFTTo6aWRlbnRp
dHkoKQoreworI2lmIEhBVkUoU1NMKQorICAgIGluaXRpYWxpemVTU0xMaWJyYXJ5KCk7CisKKyAg
ICBhdXRvIGlkZW50aXR5ID0gbWFrZVVuaXF1ZTxTZWNJZGVudGl0eVJlZj4oKTsKKyAgICBhdXRv
IHBlbUxhdGluID0gbV9wcml2YXRlS2V5LmxhdGluMSgpOworICAgIGF1dG8gYmlvUHJpdmF0ZUtl
eSA9IHNzbDo6dW5pcXVlX3B0cjxCSU8+KEJJT19uZXdfbWVtX2J1ZihwZW1MYXRpbi5kYXRhKCks
IHBlbUxhdGluLmxlbmd0aCgpKSk7CisgICAgaWYgKCFiaW9Qcml2YXRlS2V5KQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZGVudGl0eS0+c2V0UHJpdmF0ZUtleShzc2w6OnVuaXF1ZV9w
dHI8RVZQX1BLRVk+KFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGJpb1ByaXZhdGVLZXkuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKSk7CisKKyAgICBwZW1MYXRpbiA9IG1fY2VydGlm
aWNhdGUubGF0aW4xKCk7CisgICAgYXV0byBiaW9DZXJ0aWZpY2F0ZT0gc3NsOjp1bmlxdWVfcHRy
PEJJTz4oQklPX25ld19tZW1fYnVmKHBlbUxhdGluLmRhdGEoKSwgcGVtTGF0aW4ubGVuZ3RoKCkp
KTsKKyAgICBpZiAoIWJpb0NlcnRpZmljYXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZGVudGl0eS0+c2V0WDUwOShzc2w6OnVuaXF1ZV9wdHI8WDUwOT4oUEVNX3JlYWRfYmlvX1g1
MDkoYmlvQ2VydGlmaWNhdGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKSk7CisK
KyAgICByZXR1cm4gaWRlbnRpdHk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlm
Cit9CisKK3ZvaWQgU2VjdXJpdHlJZGVudGl0eVBFTTo6dXBkYXRlQ2VydGlmaWNhdGUoY29uc3Qg
U3RyaW5nJiBjZXJ0aWZpY2F0ZVBFTSkKK3sKKyNpZiBIQVZFKFNTTCkKKyAgICBpbml0aWFsaXpl
U1NMTGlicmFyeSgpOworICAgIGF1dG8gY2VydGlmaWNhdGVQRU1MYXRpbiA9IGNlcnRpZmljYXRl
UEVNLmxhdGluMSgpOworICAgIGF1dG8gYmlvQ2VydGlmaWNhdGUgPSBzc2w6OnVuaXF1ZV9wdHI8
QklPPihCSU9fbmV3X21lbV9idWYoY2VydGlmaWNhdGVQRU1MYXRpbi5kYXRhKCksIGNlcnRpZmlj
YXRlUEVNTGF0aW4ubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWJpb0NlcnRpZmljYXRlKQorICAgICAg
ICByZXR1cm47CisgICAgYXV0byB4NTA5ID0gc3NsOjp1bmlxdWVfcHRyPFg1MDk+KFBFTV9yZWFk
X2Jpb19YNTA5KGJpb0NlcnRpZmljYXRlLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
KSk7CisgICAgaWYgKCF4NTA5KQorICAgICAgICByZXR1cm47CisgICAgYXV0byBiaW9DZXJ0aWZp
Y2F0ZVBFTSA9IHNzbDo6dW5pcXVlX3B0cjxCSU8+KEJJT19uZXcoQklPX3NfbWVtKCkpKTsKKyAg
ICBpZiAoIWJpb0NlcnRpZmljYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFQRU1fd3Jp
dGVfYmlvX1g1MDkoYmlvQ2VydGlmaWNhdGVQRU0uZ2V0KCksIHg1MDkuZ2V0KCkpKQorICAgICAg
ICByZXR1cm47CisgICAgQlVGX01FTSogbWVtOworICAgIEJJT19nZXRfbWVtX3B0cihiaW9DZXJ0
aWZpY2F0ZVBFTS5nZXQoKSwgJm1lbSk7CisgICAgbV9jZXJ0aWZpY2F0ZSA9IFN0cmluZyhtZW0t
PmRhdGEsIG1lbS0+bGVuZ3RoKTsKKworICAgIGF1dG8gcHVibGljS2V5ID0gc3NsOjp1bmlxdWVf
cHRyPEVWUF9QS0VZPihYNTA5X2dldF9wdWJrZXkoeDUwOS5nZXQoKSkpOworICAgIGlmICghcHVi
bGljS2V5KQorICAgICAgICByZXR1cm47CisgICAgYXV0byBiaW9QdWJsaWNLZXlQRU0gPSBzc2w6
OnVuaXF1ZV9wdHI8QklPPihCSU9fbmV3KEJJT19zX21lbSgpKSk7CisgICAgaWYgKCFiaW9QdWJs
aWNLZXlQRU0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fUFVCS0VZ
KGJpb1B1YmxpY0tleVBFTS5nZXQoKSwgcHVibGljS2V5LmdldCgpKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEJJT19mbHVzaChiaW9QdWJsaWNLZXlQRU0uZ2V0KCkpOworICAgIEJJT19nZXRfbWVt
X3B0cihiaW9QdWJsaWNLZXlQRU0uZ2V0KCksICZtZW0pOworICAgIG1fcHVibGljS2V5ID0gU3Ry
aW5nKG1lbS0+ZGF0YSwgbWVtLT5sZW5ndGgpOworI2VuZGlmCit9CisKK3ZvaWQgU2VjdXJpdHlJ
ZGVudGl0eVBFTTo6dXBkYXRlUHJpdmF0ZUtleShjb25zdCBTdHJpbmcmIHByaXZhdGVLZXlQRU0p
Cit7CisjaWYgSEFWRShTU0wpCisgICAgaW5pdGlhbGl6ZVNTTExpYnJhcnkoKTsKKworICAgIGF1
dG8gcHJpdmF0ZUtleVBFTUxhdGluID0gcHJpdmF0ZUtleVBFTS5sYXRpbjEoKTsKKyAgICBhdXRv
IGJpb1ByaXZhdGVLZXkgPSBzc2w6OnVuaXF1ZV9wdHI8QklPPihCSU9fbmV3X21lbV9idWYocHJp
dmF0ZUtleVBFTUxhdGluLmRhdGEoKSwgcHJpdmF0ZUtleVBFTUxhdGluLmxlbmd0aCgpKSk7Cisg
ICAgaWYgKCFiaW9Qcml2YXRlS2V5KQorICAgICAgICByZXR1cm47CisgICAgYXV0byBwcml2YXRl
S2V5ID0gc3NsOjp1bmlxdWVfcHRyPEVWUF9QS0VZPihQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShi
aW9Qcml2YXRlS2V5LmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgaWYg
KCFwcml2YXRlS2V5KQorICAgICAgICByZXR1cm47CisgICAgYXV0byBiaW9Qcml2YXRlS2V5UEVN
ID0gc3NsOjp1bmlxdWVfcHRyPEJJTz4oQklPX25ldyhCSU9fc19tZW0oKSkpOworICAgIGlmICgh
YmlvUHJpdmF0ZUtleVBFTSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFQRU1fd3JpdGVf
YmlvX1ByaXZhdGVLZXkoYmlvUHJpdmF0ZUtleVBFTS5nZXQoKSwgcHJpdmF0ZUtleS5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0ciwgMCwgMCwgbnVsbHB0cikpCisgICAgICAgIHJldHVybjsKKyAgICBC
VUZfTUVNKiBtZW07CisgICAgQklPX2dldF9tZW1fcHRyKGJpb1ByaXZhdGVLZXlQRU0uZ2V0KCks
ICZtZW0pOworICAgIG1fcHJpdmF0ZUtleSA9IFN0cmluZyhtZW0tPmRhdGEsIG1lbS0+bGVuZ3Ro
KTsKKworICAgIGF1dG8gYmlvUHVibGljS2V5UEVNID0gc3NsOjp1bmlxdWVfcHRyPEJJTz4oQklP
X25ldyhCSU9fc19tZW0oKSkpOworICAgIGlmICghYmlvUHVibGljS2V5UEVNKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1BVQktFWShiaW9QdWJsaWNLZXlQRU0uZ2V0
KCksIHByaXZhdGVLZXkuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisgICAgQklPX2dldF9tZW1f
cHRyKGJpb1B1YmxpY0tleVBFTS5nZXQoKSwgJm1lbSk7CisgICAgbV9wdWJsaWNLZXkgPSBTdHJp
bmcobWVtLT5kYXRhLCBtZW0tPmxlbmd0aCk7CisjZW5kaWYKK30KKwordm9pZCBDb25uZWN0aW9u
RW50aXR5OjpjYW5jZWwoKQoreworI2lmIEhBVkUoU1NMKQorICAgIGlmIChtX3NzbCkgeworICAg
ICAgICBTU0xfZnJlZShtX3NzbCk7CisgICAgICAgIG1fc3NsID0gbnVsbHB0cjsKKyAgICB9Cisj
ZW5kaWYKKyAgICBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KG1fc29ja2V0KSkgeworICAgICAg
ICBTb2NrZXQ6OnNodXRkb3duKG1fc29ja2V0KTsKKyAgICAgICAgU29ja2V0OjpjbG9zZShtX3Nv
Y2tldCk7CisgICAgICAgIG1fc29ja2V0ID0gU29ja2V0OjpJbnZhbGlkU29ja2V0OworICAgIH0K
K30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8IHN0ZDo6cGFpcjxTb2NrZXQ6OlNvY2tldCwgdWlu
dDE2X3Q+ID4gY3JlYXRlTGlzdGVuaW5nU29ja2V0KHVpbnQxNl90IHRhcmdldFBvcnQpCit7Cisg
ICAgY29uc3QgaW50IEJhY2tsb2cgPSA4OworICAgIGF1dG8gbGlzdGVuaW5nU29ja2V0ID0gU29j
a2V0Ojpzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmICghU29ja2V0Ojpp
c1ZhbGlkU29ja2V0KGxpc3RlbmluZ1NvY2tldCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICB1aW50MTZfdCBzdGFydFBvcnQgPSA0OTE1MjsKKyAgICB1aW50MTZfdCBlbmRQ
b3J0ID0gNjU1MzU7CisgICAgaWYgKHRhcmdldFBvcnQpCisgICAgICAgIHN0YXJ0UG9ydCA9IGVu
ZFBvcnQgPSB0YXJnZXRQb3J0OworICAgIC8vIFBvcnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFsbG9j
YXRlZCBwb3J0cy4gVHJ5IHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBmcmVlLgorICAgIGZvciAo
dWludDE2X3QgcG9ydCA9IHN0YXJ0UG9ydDsgcG9ydCA8PSBlbmRQb3J0OyBwb3J0KyspIHsKKyAg
ICAgICAgc3RydWN0IHNvY2thZGRyX2luIG5hbWU7CisgICAgICAgIG1lbXNldCgmbmFtZSwgMCwg
c2l6ZW9mKG5hbWUpKTsKKyAgICAgICAgbmFtZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAg
ICAgbmFtZS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgICBuYW1lLnNpbl9hZGRyLnNf
YWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgICAgICBpZiAoYmluZChsaXN0ZW5pbmdTb2Nr
ZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPigmbmFtZSksIHNpemVvZihuYW1lKSkgPCAw
KSB7CisgICAgICAgICAgICAvLyBUaGlzIHBvcnQgaXMgYnVzeS4gVHJ5IHRoZSBuZXh0IHBvcnQu
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoOjpsaXN0ZW4o
bGlzdGVuaW5nU29ja2V0LCBCYWNrbG9nKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICAg
IFNvY2tldDo6Y2xvc2UobGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGlz
dGVuaW5nU29ja2V0LCBwb3J0KTsgLy8gU3VjY2Vzc2Z1bGx5IHNldCB1cCBsaXN0ZW5pbmcgcG9y
dC4KKyAgICB9CisKKyAgICAvLyBDb3VsZG4ndCBmaW5kIGFuIGF2YWlsYWJsZSBwb3J0LgorICAg
IFNvY2tldDo6Y2xvc2UobGlzdGVuaW5nU29ja2V0KTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworfQorCitDb25uZWN0aW9uTGlzdGVuZXI6OkNvbm5lY3Rpb25MaXN0ZW5lcigpCit7Cit9CisK
K0Nvbm5lY3Rpb25MaXN0ZW5lcjo6fkNvbm5lY3Rpb25MaXN0ZW5lcigpCit7CisgICAgc3RvcCgp
OworfQorCitib29sIENvbm5lY3Rpb25MaXN0ZW5lcjo6aXNWYWxpZCgpCit7CisgICAgcmV0dXJu
IFNvY2tldDo6aXNWYWxpZFNvY2tldChtX2xpc3RlbmluZ1NvY2tldCk7Cit9CisKK3VpbnQxNl90
IENvbm5lY3Rpb25MaXN0ZW5lcjo6cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcG9ydDsK
K30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnN0YXJ0KHVpbnQxNl90IHRhcmdldFBvcnQp
Cit7CisgICAgaWYgKG1fbGlzdGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNv
Y2tldF9wb3J0ID0gY3JlYXRlTGlzdGVuaW5nU29ja2V0KHRhcmdldFBvcnQpOworICAgIGlmICgh
c29ja2V0X3BvcnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0g
c29ja2V0X3BvcnQtPmZpcnN0OworICAgIG1fcG9ydCA9IHNvY2tldF9wb3J0LT5zZWNvbmQ7Cisg
ICAgbV9saXN0ZW5pbmdTdG9wcGVkID0gZmFsc2U7CisgICAgbV9saXN0ZW5pbmcgPSB0cnVlOwor
ICAgIGRpc3BhdGNoTGlzdGVuaW5nKHRoaXMpOworfQorCit2b2lkIENvbm5lY3Rpb25MaXN0ZW5l
cjo6c3RvcCgpCit7CisgICAgaWYgKCFtX2xpc3RlbmluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9saXN0ZW5pbmdTdG9wcGVkID0gZmFsc2U7CisgICAgbV9saXN0ZW5pbmcgPSBmYWxzZTsK
KyAgICBVdGlsOjpydW4oJm1fbGlzdGVuaW5nU3RvcHBlZCk7CisgICAgU29ja2V0OjpjbG9zZSht
X2xpc3RlbmluZ1NvY2tldCk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3RlbmVyOjpyZWdpc3Rl
ckhhbmRsZXIoRnVuY3Rpb248dm9pZChTb2NrZXQ6OlNvY2tldCYmLCBTU0wqKT4mJiBoYW5kbGVy
KQoreworICAgIG1fY29ubmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2
b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6c2V0U2VjSWRlbnRpdHlSZWYoc3RkOjp1bmlxdWVfcHRy
PFNlY0lkZW50aXR5UmVmPiYmIGlkZW50aXR5KQoreworICAgIG1fc2VjdXJpdHlJZGVudGl0eSA9
IFdURk1vdmUoaWRlbnRpdHkpOworfQorCitib29sIENvbm5lY3Rpb25MaXN0ZW5lcjo6aXNTZWN1
cmUoKQoreworICAgIGlmIChtX3NlY3VyaXR5SWRlbnRpdHkgJiYgbV9zZWN1cml0eUlkZW50aXR5
LT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitTU0wqIENvbm5lY3Rpb25MaXN0ZW5lcjo6YWNjZXB0U1NMQ29ubmVjdGlvbihTb2NrZXQ6
OlNvY2tldCBzb2NrZXQsIFNlY0lkZW50aXR5UmVmJiBpZGVudGl0eSkKK3sKKyNpZiBIQVZFKFNT
TCkKKyAgICBpbml0aWFsaXplU1NMTGlicmFyeSgpOworICAgIFNTTF9DVFgqIGNvbnRleHQgPSBT
U0xfQ1RYX25ldyhUTFNfbWV0aG9kKCkpOworCisgICAgaW50IGNlcnRJbnQsIGtleUludDsKKyAg
ICBpZiAoaWRlbnRpdHkueDUwOSgpKQorICAgICAgICBjZXJ0SW50ID0gU1NMX0NUWF91c2VfY2Vy
dGlmaWNhdGUoY29udGV4dCwgaWRlbnRpdHkueDUwOSgpLmdldCgpKTsKKyAgICBpZiAoaWRlbnRp
dHkucHJpdmF0ZUtleSgpKQorICAgICAgICBrZXlJbnQgPSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5
KGNvbnRleHQsIGlkZW50aXR5LnByaXZhdGVLZXkoKS5nZXQoKSk7CisKKyAgICBTU0wqIHNzbCA9
IFNTTF9uZXcoY29udGV4dCk7CisgICAgaWYgKHNzbCkgeworICAgICAgICBTU0xfc2V0X2ZkKHNz
bCwgc29ja2V0KTsKKyAgICAgICAgaWYgKFNTTF9hY2NlcHQoc3NsKSA8PSAwKSB7CisgICAgICAg
ICAgICBTU0xfZnJlZShzc2wpOworICAgICAgICAgICAgc3NsID0gbnVsbHB0cjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFNTTF9DVFhfZnJlZShjb250ZXh0KTsKKyAgICByZXR1cm4gc3NsOwor
I2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3RlbmVy
OjpkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9uTGlzdGVuZXIqIHNlbGYpCit7CisgICAgaWYg
KFNvY2tldDo6aXNTb2NrZXRSZWFkeVJlYWRpbmcoc2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQpKSB7
CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIs
IDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGludCBsZW4gPSBzaXplb2YoYWRkcik7CisgICAg
ICAgIFNvY2tldDo6U29ja2V0IHJlc3BvbnNlU29ja2V0ID0gOjphY2NlcHQoc2VsZi0+bV9saXN0
ZW5pbmdTb2NrZXQsIChzb2NrYWRkciopJmFkZHIsICZsZW4pOworICAgICAgICBTU0wqIHNzbCA9
IG51bGxwdHI7CisKKyAgICAgICAgYm9vbCBhY2NlcHRlZCA9IFNvY2tldDo6aXNWYWxpZFNvY2tl
dChyZXNwb25zZVNvY2tldCk7CisjaWYgSEFWRShTU0wpCisgICAgICAgIGlmIChhY2NlcHRlZCAm
JiBzZWxmLT5tX3NlY3VyaXR5SWRlbnRpdHkgJiYgc2VsZi0+aXNTZWN1cmUoKSkgeworICAgICAg
ICAgICAgc3NsID0gc2VsZi0+YWNjZXB0U1NMQ29ubmVjdGlvbihyZXNwb25zZVNvY2tldCwgKnNl
bGYtPm1fc2VjdXJpdHlJZGVudGl0eSk7CisgICAgICAgICAgICBpZiAoIXNzbCkKKyAgICAgICAg
ICAgICAgICBhY2NlcHRlZCA9IGZhbHNlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYg
KGFjY2VwdGVkICYmIHNlbGYtPm1fY29ubmVjdGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAgICAgICAgIFNlY29uZHMoUG9s
bGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAgICAgICAgICAgICAgICBbc2VsZiwgcmVzcG9uc2VT
b2NrZXQgPSBXVEZNb3ZlKHJlc3BvbnNlU29ja2V0KSwgc3NsXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi0+bV9jb25uZWN0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNl
U29ja2V0KSwgc3NsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIFNvY2tldDo6Y2xvc2UocmVzcG9uc2VTb2NrZXQpOworICAg
IH0KKworICAgIGlmIChzZWxmLT5tX2xpc3RlbmluZyAmJiBzZWxmLT5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoCisgICAgICAgICAgICBTZWNvbmRz
KFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kcyksCisgICAgICAgICAgICBbc2VsZl0oKSB7CisgICAg
ICAgICAgICAgICAgZGlzcGF0Y2hMaXN0ZW5pbmcoc2VsZik7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU29ja2V0OjpjbG9zZShzZWxmLT5tX2xpc3Rl
bmluZ1NvY2tldCk7CisgICAgICAgIHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0ID0gU29ja2V0OjpJ
bnZhbGlkU29ja2V0OworICAgICAgICBzZWxmLT5tX2xpc3RlbmluZ1N0b3BwZWQgPSB0cnVlOwor
ICAgIH0KK30KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvblBP
U0lYLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvblBPU0lYLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xMDY0NjYyNzQyN2Y1NDJlMTM2ZTg0NDEwY2U5ZGZhZDg1MGM2OTA2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwCkBAIC0wLDAg
KzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvY29hL0hUVFBTZXJ2ZXIuaCIKKworc3RhdGlj
IGNvbnN0IGZsb2F0IFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kcyA9IDAuMDI7IC8vIDIwbXMKKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgdm9pZCBzZW5kQnl0ZXNQcm9jZXNz
KFJlZlB0cjxDb25uZWN0aW9uRW50aXR5PiBjb25uZWN0aW9uRW50aXR5LCBWZWN0b3I8dWludDhf
dD4mJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIsIGludCBzZW50VG90YWwpCit7CisgICAgU29ja2V0OjpTb2NrZXQgc29ja2V0ID0gY29ubmVj
dGlvbkVudGl0eSA/IGNvbm5lY3Rpb25FbnRpdHktPnNvY2tldCgpIDogU29ja2V0OjpJbnZhbGlk
U29ja2V0OworICAgIFNTTCogc3NsID0gY29ubmVjdGlvbkVudGl0eSA/IGNvbm5lY3Rpb25FbnRp
dHktPnNzbCgpIDogbnVsbHB0cjsKKworICAgIGlmICghU29ja2V0Ojppc1ZhbGlkU29ja2V0KHNv
Y2tldCkpCisgICAgICAgIHJldHVybjsKKyAgICBkbyB7CisgICAgICAgIGlmICghU29ja2V0Ojpp
c1NvY2tldFJlYWR5V3JpdGluZyhzb2NrZXQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaW50IHNlbnQ7CisgICAgICAgIHVpbnQ4X3QqIHB0ciA9IG1lc3NhZ2UuZGF0YSgpICsgc2Vu
dFRvdGFsOworI2lmIEhBVkUoU1NMKQorICAgICAgICBpZiAoc3NsICYmIFNvY2tldDo6aXNWYWxp
ZFNvY2tldChzb2NrZXQpKQorICAgICAgICAgICAgc2VudCA9IFNTTF93cml0ZShzc2wsIHB0ciwg
bWVzc2FnZS5zaXplKCkgLSBzZW50VG90YWwpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAg
ICAgICAgIGlmIChTb2NrZXQ6OmlzVmFsaWRTb2NrZXQoc29ja2V0KSkKKyAgICAgICAgICAgICAg
ICBzZW50ID0gU29ja2V0Ojp3cml0ZShzb2NrZXQsIHB0ciwgbWVzc2FnZS5zaXplKCkgLSBzZW50
VG90YWwpOworCisgICAgICAgIEFTU0VSVChzZW50ID49IDApOworICAgICAgICBpZiAoc2VudCA8
IDAgfHwgc2VudFRvdGFsICsgc2VudCA+PSBtZXNzYWdlLnNpemUoKSkgeworICAgICAgICAgICAg
aWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKAorICAgICAgICAgICAgICAgICAgICBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBzZW50VG90YWwgKz0gc2VudDsKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hBZnRlcigKKyAgICAgICAgU2Vjb25kcyhQb2xsaW5n
SW50ZXJ2YWxJblNlY29uZHMpLAorICAgICAgICBbY29ubmVjdGlvbkVudGl0eSwgbWVzc2FnZSA9
IFdURk1vdmUobWVzc2FnZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIHNlbnRUb3RhbF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzZW5kQnl0ZXNQ
cm9jZXNzKGNvbm5lY3Rpb25FbnRpdHksIFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBzZW50VG90YWwpOworICAgICAgICB9CisgICAgKTsKK30KKwordm9pZCBD
b25uZWN0aW9uOjpzZW5kKFN0cmluZyYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gbWVz
c2FnZVZlY3RvcjsKKyAgICBtZXNzYWdlVmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpLCAgbWVzc2FnZS51dGY4KCkubGVu
Z3RoKCkpOworCisgICAgc2VuZChXVEZNb3ZlKG1lc3NhZ2VWZWN0b3IpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6c2VuZChWZWN0b3I8dWludDhf
dD4mJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIGNvbnN0Cit7CisgICAgc2VuZEJ5dGVzUHJvY2VzcyhtX2Nvbm5lY3Rpb24sIFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCAwKTsKK30KKworc3RhdGljIHZv
aWQgcmVjZWl2ZUJ5dGVzUHJvY2VzcyhSZWZQdHI8Q29ubmVjdGlvbkVudGl0eT4gY29ubmVjdGlv
bkVudGl0eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgU29ja2V0OjpTb2NrZXQgc29ja2V0ID0gY29ubmVjdGlv
bkVudGl0eSA/IGNvbm5lY3Rpb25FbnRpdHktPnNvY2tldCgpIDogU29ja2V0OjpJbnZhbGlkU29j
a2V0OworICAgIFNTTCogc3NsID0gY29ubmVjdGlvbkVudGl0eSA/IGNvbm5lY3Rpb25FbnRpdHkt
PnNzbCgpIDogbnVsbHB0cjsKKworICAgIGlmICghU29ja2V0Ojppc1ZhbGlkU29ja2V0KHNvY2tl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIVNvY2tldDo6aXNTb2NrZXRSZWFkeVJlYWRp
bmcoc29ja2V0KSkgeworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2hBZnRlcigKKyAg
ICAgICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAgICAgICAgICAg
IFtjb25uZWN0aW9uRW50aXR5LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICByZWNlaXZlQnl0ZXNQcm9j
ZXNzKGNvbm5lY3Rpb25FbnRpdHksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0
IHNpemVfdCBidWZmZXJTaXplID0gNDA5NjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGJ1
ZmZlclNpemUpOworICAgIGludCBieXRlc1JlYWQgPSAtMTsKKyNpZiBIQVZFKFNTTCkKKyAgICBp
ZiAoc3NsICYmIFNvY2tldDo6aXNWYWxpZFNvY2tldChzb2NrZXQpKQorICAgICAgICBieXRlc1Jl
YWQgPSBTU0xfcmVhZChzc2wsIHJlc3VsdC5kYXRhKCksIGJ1ZmZlclNpemUpOworICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICBpZiAoU29ja2V0Ojppc1ZhbGlkU29ja2V0KHNvY2tldCkpCisgICAg
ICAgICAgICBieXRlc1JlYWQgPSBTb2NrZXQ6OnJlYWQoc29ja2V0LCByZXN1bHQuZGF0YSgpLCBi
dWZmZXJTaXplKTsKKworICAgIGlmIChieXRlc1JlYWQgPiAwKQorICAgICAgICByZXN1bHQuc2hy
aW5rKGJ5dGVzUmVhZCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQuY2xlYXIoKTsKKworICAg
IGlmIChjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goCisgICAgICAgICAgICBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICAgICAg
fQorICAgICAgICApOworICAgIH0KK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWNlaXZlQnl0ZXMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIsIHNpemVfdCBtaW5pbXVtU2l6ZSkgY29uc3QKK3sKKyAgICByZWNlaXZlQnl0ZXNQcm9j
ZXNzKG1fY29ubmVjdGlvbiwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lk
IENvbm5lY3Rpb246OnJlY2VpdmVIVFRQUmVxdWVzdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxjaGFyPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgVmVjdG9yPGNoYXI+JiYgYnVmZmVy
KSBjb25zdAoreworICAgIHJlY2VpdmVCeXRlcyhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShWZWN0
b3I8dWludDhfdD4mJiByZWNlaXZlZEJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIGJ1ZmZlci5h
cHBlbmRWZWN0b3IocmVjZWl2ZWRCdWZmZXIpOworCisgICAgICAgIGF1dG8gcmVxdWVzdCA9IEhU
VFBSZXF1ZXN0OjpwYXJzZUhUVFBSZXF1ZXN0KHJlY2VpdmVkQnVmZmVyKTsKKyAgICAgICAgaWYg
KHJlcXVlc3QuY29tcGxldGUpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KGJ1ZmZlcikpOworICAgICAgICBlbHNlIGlmICghcmVjZWl2ZWRCdWZmZXIuc2l6ZSgpKQorICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGhpcy0+cmVjZWl2ZUhUVFBSZXF1ZXN0KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBX
VEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pOworfQorCit2b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0
ZSgpCit7CisgICAgaWYgKG1fY29ubmVjdGlvbikKKyAgICAgICAgbV9jb25uZWN0aW9uLT5jYW5j
ZWwoKTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpjYW5jZWwoKQoreworICAgIHRlcm1pbmF0ZSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL0hUVFBTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9IVFRQU2Vy
dmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZDYyNDA3YTQ4OGE2MDNhZjIwNTdjMjMxOTA0YmEzMmQ1MmJk
MDNlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9IVFRQU2VydmVyLmNw
cApAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImNvY29hL0hUVFBTZXJ2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdHJ1Y3QgSFRUUFNlcnZl
cjo6UmVxdWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SFRUUFNlcnZlcjo6
UmVxdWVzdERhdGEsICBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluUnVuTG9vcD4geworICAg
IFJlcXVlc3REYXRhKCkgeyB9CisgICAgUmVxdWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0
PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IHJlc3BvbnNlcykKKyAgICAgICAgOiBy
ZXF1ZXN0TWFwKFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQ
UmVzcG9uc2U+PiBsaXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBIVFRQUmVzcG9uc2U+IG1hcDsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBsaXN0KQorICAgICAgICAgICAgICAgICAgICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBhaXIu
c2Vjb25kKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwOworICAgICAgICAgICAgfShyZXNw
b25zZXMpKQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3QgcmVxdWVzdENvdW50IHsgMCB9Owor
ICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IHJlcXVlc3RNYXA7CisgICAg
VmVjdG9yPENvbm5lY3Rpb24+IGNvbm5lY3Rpb25zOworfTsKKworY29uc3QgSFRUUFJlc3BvbnNl
IFJlc3BvbnNlTm90Rm91bmQgPSB7CisgICAgNDA0LAorICAgIHsgfSwKKyAgICAiPGh0bWw+PGhl
YWQ+PHRpdGxlPjQwNCBOb3QgRm91bmQ8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjxoMT5G
aWxlIG5vdCBmb3VuZDwvaDE+PC9ib2R5PjwvaHRtbD4iCit9OworCitIVFRQU2VydmVyOjpIVFRQ
U2VydmVyKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9u
c2U+PiByZXNwb25zZXMsIFByb3RvY29sIHByb3RvY29sLCBzdGQ6OnVuaXF1ZV9wdHI8U2VjSWRl
bnRpdHlSZWY+JiYgaWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpCisgICAg
OiBtX3JlcXVlc3REYXRhKCBhZG9wdFJlZigqbmV3IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhKHJl
c3BvbnNlcykpICkKKyAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wpCit7CisgICAgbV9saXN0ZW5l
ci5yZWdpc3RlckhhbmRsZXIoW3RoaXNdIChTb2NrZXQ6OlNvY2tldCYmIHNvY2tldCwgU1NMKiBz
c2wpIHsKKyAgICAgICAgYXV0byBjb25uZWN0aW9uID0gQ29ubmVjdGlvbihhZG9wdFJlZihuZXcg
Q29ubmVjdGlvbkVudGl0eShzb2NrZXQsIHNzbCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0RGF0YS0+
Y29ubmVjdGlvbnMuYXBwZW5kKGNvbm5lY3Rpb24pOworICAgICAgICByZXNwb25kVG9SZXF1ZXN0
cyhjb25uZWN0aW9uLCBtX3JlcXVlc3REYXRhKTsKKyAgICB9KTsKKworICAgIGlmIChwcm90b2Nv
bCA9PSBQcm90b2NvbDo6SHR0cHMpIHsKKyAgICAgICAgaWYgKGlkZW50aXR5KQorICAgICAgICAg
ICAgbV9saXN0ZW5lci5zZXRTZWNJZGVudGl0eVJlZihXVEZNb3ZlKGlkZW50aXR5KSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGlzdGVuZXIuc2V0U2VjSWRlbnRpdHlSZWYodGVzdElk
ZW50aXR5KCkpOworICAgIH0KKyAgICBtX2xpc3RlbmVyLnN0YXJ0KHBvcnQgPyAqcG9ydCA6IDAp
OworfQorCitIVFRQU2VydmVyOjpIVFRQU2VydmVyKEZ1bmN0aW9uPHZvaWQoQ29ubmVjdGlvbik+
JiYgY29ubmVjdGlvbkhhbmRsZXIsIFByb3RvY29sIHByb3RvY29sKQorICAgIDogbV9yZXF1ZXN0
RGF0YSggYWRvcHRSZWYoKm5ldyBIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YSgpKSApCisgICAgLCBt
X3Byb3RvY29sKHByb3RvY29sKQoreworICAgIG1fbGlzdGVuZXIucmVnaXN0ZXJIYW5kbGVyKFt0
aGlzLCBjb25uZWN0aW9uSGFuZGxlciA9IFdURk1vdmUoY29ubmVjdGlvbkhhbmRsZXIpXSAoU29j
a2V0OjpTb2NrZXQmJiBzb2NrZXQsIFNTTCogc3NsKSB7CisgICAgICAgIGF1dG8gY29ubmVjdGlv
biA9IENvbm5lY3Rpb24obmV3IENvbm5lY3Rpb25FbnRpdHkoc29ja2V0LCBzc2wpKTsKKyAgICAg
ICAgbV9yZXF1ZXN0RGF0YS0+Y29ubmVjdGlvbnMuYXBwZW5kKGNvbm5lY3Rpb24pOworICAgICAg
ICBjb25uZWN0aW9uSGFuZGxlcihDb25uZWN0aW9uKGNvbm5lY3Rpb24pKTsKKyAgICB9KTsKKwor
ICAgIGlmIChwcm90b2NvbCA9PSBQcm90b2NvbDo6SHR0cHMpCisgICAgICAgIG1fbGlzdGVuZXIu
c2V0U2VjSWRlbnRpdHlSZWYodGVzdElkZW50aXR5KCkpOworICAgIG1fbGlzdGVuZXIuc3RhcnQo
KTsKK30KKworSFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIoKQoreworICAgIGNhbmNlbCgpOworfQor
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHBhcnNlQXV0aGVudGljYXRpb25DcmVkZW50
aWFsKFN0cmluZyB0eXBlLCBTdHJpbmcgaGVhZGVyTGluZSkKK3sKKyAgICBhdXRvIGZvdW5kID0g
aGVhZGVyTGluZS5maW5kKHR5cGUpOworICAgIGlmIChmb3VuZCA9PSBub3RGb3VuZCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdmFsdWUgPSBoZWFkZXJMaW5lLnN1
YnN0cmluZyhmb3VuZCArIHR5cGUubGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
KyAgICB3aGlsZSAoaW5kZXggPCB2YWx1ZS5sZW5ndGgoKSAmJiB2YWx1ZVtpbmRleF0gPT0gdScg
JykKKyAgICAgICAgaW5kZXgrKzsKKworICAgIGlmIChpbmRleCA9PSB2YWx1ZS5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB2YWx1ZS5zdWJzdHJp
bmcoaW5kZXgpOworfQorCit2b2lkIEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5l
Y3Rpb24gY29ubmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKK3sKKyAgICBj
b25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIChW
ZWN0b3I8Y2hhcj4mJiByZXF1ZXN0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0LnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RD
b3VudCsrOworICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBhdGgocmVxdWVzdCk7CisKKyAgICAg
ICAgSFRUUFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICBpZiAocmVxdWVzdERhdGEtPnJlcXVl
c3RNYXAuY29udGFpbnMocGF0aCkpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3REYXRh
LT5yZXF1ZXN0TWFwLmdldChwYXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzcG9u
c2UgPSBSZXNwb25zZU5vdEZvdW5kOworCisgICAgICAgIGlmIChyZXNwb25zZS50ZXJtaW5hdGVD
b25uZWN0aW9uID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzKQorICAg
ICAgICAgICAgY29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKKworICAgICAgICBjb25uZWN0aW9uLnNl
bmQocmVzcG9uc2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSA9IFdURk1v
dmUocmVxdWVzdERhdGEpXSAoKSB7CisgICAgICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25u
ZWN0aW9uLCByZXF1ZXN0RGF0YSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit1aW50MTZf
dCBIVFRQU2VydmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0ZW5lci5wb3J0
KCk7Cit9CisKK2NvbnN0IGNoYXIqIEhUVFBTZXJ2ZXI6OnNjaGVtZSgpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogc2NoZW1lID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKG1fcHJvdG9jb2wpIHsK
KyAgICBjYXNlIFByb3RvY29sOjpIdHRwOgorICAgICAgICBzY2hlbWUgPSAiaHR0cCI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzOgorICAgIGNhc2UgUHJvdG9jb2w6
Okh0dHBzV2l0aExlZ2FjeVRMUzoKKyAgICBjYXNlIFByb3RvY29sOjpIdHRwMjoKKyAgICAgICAg
c2NoZW1lID0gImh0dHBzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6SHR0
cHNQcm94eToKKyAgICBjYXNlIFByb3RvY29sOjpIdHRwc1Byb3h5V2l0aEF1dGhlbnRpY2F0aW9u
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1
cm4gc2NoZW1lOworfQorCitVUkwgSFRUUFNlcnZlcjo6dXJsKGNvbnN0IFN0cmluZyYgcGF0aCkg
Y29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZzsKKyAgICB1cmxTdHJpbmcuYXBw
ZW5kKHNjaGVtZSgpKTsKKyAgICB1cmxTdHJpbmcuYXBwZW5kKCI6Ly8xMjcuMC4wLjEvIik7CisK
KyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICB1cmxTdHJpbmcuYXBwZW5kKHBhdGgp
OworCisgICAgVVJMIHNlcnZlclVSTChVUkwoKSwgdXJsU3RyaW5nLnRvU3RyaW5nKCkpOworICAg
IHNlcnZlclVSTC5zZXRQb3J0KG1fbGlzdGVuZXIucG9ydCgpKTsKKworICAgIHJldHVybiBzZXJ2
ZXJVUkw7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6Y2FuY2VsKCkKK3sKKyAgICBtX2xpc3RlbmVy
LnN0b3AoKTsKKworICAgIGZvciAoYXV0byBjb25uZWN0aW9uIDogc3RkOjpleGNoYW5nZShtX3Jl
cXVlc3REYXRhLT5jb25uZWN0aW9ucywgeyB9KSkKKyAgICAgICAgY29ubmVjdGlvbi5jYW5jZWwo
KTsKK30KKwordm9pZCBIVFRQU2VydmVyOjpyZXNwb25kV2l0aE9LKENvbm5lY3Rpb24gY29ubmVj
dGlvbikKK3sKKyAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlvbl0g
KFZlY3RvcjxjaGFyPiYmKSB7CisgICAgICAgIGNvbm5lY3Rpb24uc2VuZCgKKyAgICAgICAgICAg
ICJIVFRQLzEuMSAyMDAgT0tcclxuIgorICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAxM1xy
XG5cclxuIgorICAgICAgICAgICAgIkhlbGxvLCBXb3JsZCEiCisgICAgICAgICk7CisgICAgfSk7
Cit9CisKK3NpemVfdCBIVFRQU2VydmVyOjp0b3RhbFJlcXVlc3RzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZXF1ZXN0RGF0YS0+cmVxdWVzdENvdW50OworfQorCit2b2lkIEhUVFBTZXJ2ZXI6
OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKENvbm5lY3Rpb24pCit7Cit9CisKK1N0cmluZyBI
VFRQU2VydmVyOjpwYXJzZVBhdGgoY29uc3QgVmVjdG9yPGNoYXI+JiByZXF1ZXN0QnVmZmVyKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiByZXF1ZXN0QnVmZmVyVTgocmVxdWVzdEJ1ZmZlci5zaXpl
KCkpOworICAgIHN0ZDo6dHJhbnNmb3JtKHJlcXVlc3RCdWZmZXIuYmVnaW4oKSwgcmVxdWVzdEJ1
ZmZlci5lbmQoKSwgcmVxdWVzdEJ1ZmZlclU4LmJlZ2luKCksIFtdIChjaGFyIGMpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpOyB9KTsKKworICAgIGF1dG8gcmVxdWVzdCA9IEhUVFBS
ZXF1ZXN0OjpwYXJzZUhUVFBSZXF1ZXN0KHJlcXVlc3RCdWZmZXJVOCk7CisgICAgaWYgKCFyZXF1
ZXN0LmNvbXBsZXRlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHJlcXVlc3Qu
cGF0aDsKK30KKworCitzdGF0aWMgU3RyaW5nIHN0YXR1c1RleHQodW5zaWduZWQgc3RhdHVzQ29k
ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICBjYXNlIDEwMToKKyAgICAgICAg
cmV0dXJuICJTd2l0Y2hpbmcgUHJvdG9jb2xzIl9zOworICAgIGNhc2UgMjAwOgorICAgICAgICBy
ZXR1cm4gIk9LIl9zOworICAgIGNhc2UgMzAxOgorICAgICAgICByZXR1cm4gIk1vdmVkIFBlcm1h
bmVudGx5Il9zOworICAgIGNhc2UgNDAxOgorICAgICAgICByZXR1cm4gIlVuYXV0aG9yaXplZCJf
czsKKyAgICBjYXNlIDQwNDoKKyAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiX3M7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3N0YXRpYyB2
b2lkIGFwcGVuZFVURjhUb1ZlY3RvcihWZWN0b3I8dWludDhfdD4mIHZlY3RvciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsKKyAgICB2ZWN0
b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0ZjguZGF0YSgpKSwg
dXRmOC5sZW5ndGgoKSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OmJvZHlG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3I7CisgICAgYXBwZW5kVVRGOFRvVmVjdG9yKHZlY3Rvciwgc3RyaW5nKTsKKyAgICByZXR1
cm4gdmVjdG9yOworfQorCitWZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpzZXJpYWxpemUo
SW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5ndGgpIGNvbnN0Cit7CisgICAg
U3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVu
ZCgiSFRUUC8xLjEgIiwgc3RhdHVzQ29kZSwgJyAnLCBzdGF0dXNUZXh0KHN0YXR1c0NvZGUpLCAi
XHJcbiIpOworICAgIGlmIChpbmNsdWRlQ29udGVudExlbmd0aCA9PSBJbmNsdWRlQ29udGVudExl
bmd0aDo6WWVzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJDb250ZW50LUxlbmd0
aDogIiwgYm9keS5zaXplKCksICJcclxuIik7CisgICAgZm9yIChhdXRvJiBwYWlyIDogaGVhZGVy
RmllbGRzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIua2V5LCAiOiAiLCBw
YWlyLnZhbHVlLCAiXHJcbiIpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsK
KyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXNUb1NlbmQ7CisgICAgYXBwZW5kVVRGOFRv
VmVjdG9yKGJ5dGVzVG9TZW5kLCByZXNwb25zZUJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgYnl0
ZXNUb1NlbmQuYXBwZW5kVmVjdG9yKGJvZHkpOworICAgIHJldHVybiBieXRlc1RvU2VuZDsKK30K
KworSFRUUFJlcXVlc3QgSFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3QoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiByZXF1ZXN0VmVjdG9yKQoreworICAgIGNvbnN0IFN0cmluZyBzZXBhcmF0b3Io
IlxyXG5cclxuIik7CisKKyAgICBIVFRQUmVxdWVzdCByZXF1ZXN0OworICAgIFN0cmluZyByZXF1
ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0VmVjdG9yLmRhdGEoKSwgcmVxdWVz
dFZlY3Rvci5zaXplKCkpOworICAgIGF1dG8gaGVhZGVyQm9keVNlcGFyYXRvciA9IHJlcXVlc3RT
dHJpbmcuZmluZChzZXBhcmF0b3IpOworCisgICAgaWYgKGhlYWRlckJvZHlTZXBhcmF0b3IgPT0g
bm90Rm91bmQpCisgICAgICAgIHJldHVybiByZXF1ZXN0OworCisgICAgYXV0byBoZWFkZXJTdHJp
bmcgPSByZXF1ZXN0U3RyaW5nLnN1YnN0cmluZygwLCBoZWFkZXJCb2R5U2VwYXJhdG9yKTsKKyAg
ICBhdXRvIGJvZHlTdHJpbmcgPSByZXF1ZXN0U3RyaW5nLnN1YnN0cmluZyhoZWFkZXJCb2R5U2Vw
YXJhdG9yICsgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKworICAgIGF1dG8gaGVhZGVyTGluZXMgPSBo
ZWFkZXJTdHJpbmcuc3BsaXQoIlxyXG4iKTsKKyAgICBhdXRvIGZpcnN0RWxlbWVudHMgPSBoZWFk
ZXJMaW5lc1swXS5zcGxpdCgiICIpOworICAgIGlmIChmaXJzdEVsZW1lbnRzLnNpemUoKSA+PSAy
KQorICAgICAgICByZXF1ZXN0LnBhdGggPSBmaXJzdEVsZW1lbnRzWzFdOworCisgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBoZWFkZXJMaW5lcy5zaXplKCk7IGkrKykgeworICAgICAgICBhdXRv
IGhlYWRlclZhbHVlID0gaGVhZGVyTGluZXNbaV0uc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKGhl
YWRlclZhbHVlLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJGaWVsZHMu
c2V0KGhlYWRlclZhbHVlWzBdLCBoZWFkZXJWYWx1ZVsxXSk7CisgICAgfQorCisgICAgaWYgKHJl
cXVlc3QuaGVhZGVyRmllbGRzLmNvbnRhaW5zKCJDb250ZW50LUxlbmd0aCIpKSB7CisgICAgICAg
IGludCBjb250ZW50TGVuZ3RoID0gYXRvaShyZXF1ZXN0LmhlYWRlckZpZWxkcy5nZXQoIkNvbnRl
bnQtTGVuZ3RoIikudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEFTU0VSVChjb250ZW50TGVuZ3Ro
ID49IDApOworICAgICAgICBpZiAoYm9keVN0cmluZy5zaXplSW5CeXRlcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb250ZW50TGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0Owor
ICAgICAgICByZXF1ZXN0LmJvZHkgPSBib2R5U3RyaW5nOworICAgIH0KKworICAgIHJlcXVlc3Qu
Y29tcGxldGUgPSB0cnVlOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitWZWN0b3I8dWludDhf
dD4gSFRUUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKCkKK3sKKyAgICAvLyBDZXJ0aWZpY2F0ZSBh
bmQgcHJpdmF0ZSBrZXkgd2VyZSBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGlzIGNvbW1hbmQ6Cisg
ICAgLy8gb3BlbnNzbCByZXEgLXg1MDkgLW5ld2tleSByc2E6NDA5NiAta2V5b3V0IGtleS5wZW0g
LW91dCBjZXJ0LnBlbSAtZGF5cyAzNjUgLW5vZGVzCisgICAgLy8gYW5kIGVudGVyaW5nIHRoaXMg
aW5mb3JtYXRpb246CisgICAgLyoKKyAgICAgQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKSBb
XTpVUworICAgICBTdGF0ZSBvciBQcm92aW5jZSBOYW1lIChmdWxsIG5hbWUpIFtdOk5ldyBNZXhp
Y28KKyAgICAgTG9jYWxpdHkgTmFtZSAoZWcsIGNpdHkpIFtdOlNhbnRhIEZlCisgICAgIE9yZ2Fu
aXphdGlvbiBOYW1lIChlZywgY29tcGFueSkgW106U2VsZgorICAgICBPcmdhbml6YXRpb25hbCBV
bml0IE5hbWUgKGVnLCBzZWN0aW9uKSBbXTpNeXNlbGYKKyAgICAgQ29tbW9uIE5hbWUgKGVnLCBm
dWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lKSBbXTpNZQorICAgICBFbWFpbCBBZGRyZXNzIFtdOm1l
QGV4YW1wbGUuY29tCisgICAgICovCisgICAgCisgICAgU3RyaW5nIHBlbUVuY29kZWRDZXJ0aWZp
Y2F0ZSgiIgorICAgICJNSUlGZ0RDQ0EyZ0NDUUNLSGlQUlU1TVF1REFOQmdrcWhraUc5dzBCQVFz
RkFEQ0JnVEVMTUFrR0ExVUVCaE1DIgorICAgICJWVk14RXpBUkJnTlZCQWdNQ2s1bGR5Qk5aWGhw
WTI4eEVUQVBCZ05WQkFjTUNGTmhiblJoSUVabE1RMHdDd1lEIgorICAgICJWUVFLREFSVFpXeG1N
UTh3RFFZRFZRUUxEQVpOZVhObGJHWXhDekFKQmdOVkJBTU1BazFsTVIwd0d3WUpLb1pJIgorICAg
ICJodmNOQVFrQkZnNXRaVUJsZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEF6TWpNd05UVXdNVFJhRncw
eU1EQXpNakl3IgorICAgICJOVFV3TVRSYU1JR0JNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVF
Q0F3S1RtVjNJRTFsZUdsamJ6RVJNQThHIgorICAgICJBMVVFQnd3SVUyRnVkR0VnUm1VeERUQUxC
Z05WQkFvTUJGTmxiR1l4RHpBTkJnTlZCQXNNQmsxNWMyVnNaakVMIgorICAgICJNQWtHQTFVRUF3
d0NUV1V4SFRBYkJna3Foa2lHOXcwQkNRRVdEbTFsUUdWNFlXMXdiR1V1WTI5dE1JSUNJakFOIgor
ICAgICJCZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzcmhONFNQZzhWWS9QdEdE
TktZM1Q5SklTZ2J5IgorICAgICI4WUdNSngwdk8rWVpGWm0zRzNmc1RVc3l2RHlFSHdxcDVhYkNa
UkIvQnkxUHdXa05yZnhuL1hQOFAwMzRKUGxFIgorICAgICI2aXJWaXVBWVFycVVoNms3WlI4Q3BP
TTVHRWNSWmdBVUpHR1F3TmxPa0V3YUhuTUdjOFNzSHVyZ0RQaDVYQnBnIgorICAgICJiRHl0ZDdC
SnVCMU5vSS9LSm1oY2Fqa0F1VjN2YXJTK3VQTG9mUEhOcWUrY0w4aE5ualpRd0hXYXJQNDVrczRl
IgorICAgICJCY09EN3R3cXh1SG5WbS9GV0VycFk4V3M1czFNclBUaFVkRGFoakVNZitZZkRKOUtM
OHkzMDR5UzhKOGZlQ3hZIgorICAgICJmY0g0QnZnTHRKbUJOSEpnajNlTkQvRU1aakpnejJGc0Jq
ckprOGtLRDMxY3crNFdwOFVGNHNrV1hDZjQ2K21OIgorICAgICJPSHAxM1BlU0NaTHlGNFpBSGF6
VVZrbkRQY2MyWU5yV1ZWMWk2bjNUMTVrSTBUNVo3YnN0ZG1BTHVTa0UyY3VKIgorICAgICJTVk5P
NmdSK1pzVlJUbmV1UXh3V1RVME1ORWhBUEZPWDJCaEdQNWVpc2dFVXprbnhNSmRkRkRuOVd4a2x1
MUpoIgorICAgICJna3pBU0EvKzNBbWxyRlpNUGhPaGpFdWwwempnTlI1UkJsMUc4SHo5MkxBeDVV
RURCdGRMZzcxSStJOEF6UU9oIgorICAgICJkNkx0QmVrRUN4QTE2cFNhcHBnNXZjVzlaLzhONlps
c0huWjJGenRBMG5DT2Zsa29POWllak9wY3VGTjRFVllEIgorICAgICJ4SXR3Y3RLdzFMQ2VORC9z
NGttb1JSblhiWDdrOU82Y0kxVVVXTTU5NUdzdTV0UGEzM001QVpGQ2F2MmdPVnVZIgorICAgICJk
anBwUzBIT2ZvNWh2NmNDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZOEVXYUFGRWZ3
N09WK29EIgorICAgICJYVVpTSVlYcTNFSDJFNXAzcTM4QWhJT0xSakJ1Qit1dHl1N1E2cnhNTUh1
dzJUdHNOK3piQVI3eXJqZnNzZUEzIgorICAgICI0VE0xeGU0Tms3TlZOSFJvWlErQzBJcWY5ZnZj
aW9NdlQxdFRybWEwTWhLU2pGUXB4K1B2eUxWYkQ3WWRQODZMIgorICAgICJtZWVoS3FVN2gxcExH
QWlHd2pvYVo5WWJoNkt1cS9NVEFIeTNEOCt3azdCMzZWQnhGNmRpVmxVUFpKWlFXS0p5IgorICAg
ICJNS3k5RzNzemUxWkd0OVdlRTBBTXZrTjJISWVmMEhUS0NVWjNlQnZlY09NaWp4TDBXaFdvNVF5
ZjVrNnlsQ2FVIgorICAgICIyZngrTThEZkRjd0ZvN3RTZ0x4U0szR0NGcHhQZmlEdDZRazhjOXRR
bjVTMWdZM3Q2TEp1d1ZDRndVSVhsTmtCIgorICAgICJKRDcrY1oxWi90Q3JFaHpqM1lDazB1VVU4
Q2lmb1UrNEZHK0hHRlArU1B6dHNZRTA1NW1TajMrRXNoK295b1ZCIgorICAgICJnQkg5MHNFMlQx
aTBlTkk4ZjYxb1Nnd1lGZUhzZjdmQzcxWEVYTEZSK0d3TmRtd3FsbXdsRFpFcFR1N0JvTk4rIgor
ICAgICJxNytUZmsxTVJrSmxMMVBINll1L0lQaFppTmg0dHlJcURPdGxZZnpwNTc3QStPVVUrcTVQ
UFJGUklzcWhlT3h0IgorICAgICJtTmxIeDRVemQ0VTNJVGZtb2dKYXpqcXdZTzJ2aUJaWTRqVVFt
eVpzNzVlSC9qaVVGSFdSc2hhM0Fkblc1TFdhIgorICAgICJHM1BGblliVzh1ckgwTlNKRy9XKy85
REErWTdBYTBjczRUUHB1QkdaME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgorICAgICIzdmpaRDN5
OWtaazdtcmU5WEh3a0k4TWRLNXM9Iik7CisgICAgCisgICAgYXV0byBkZWNvZGVkQ2VydGlmaWNh
dGUgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlKTsKKyAgICByZXR1cm4gV1RG
TW92ZSgqZGVjb2RlZENlcnRpZmljYXRlKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBTZXJ2
ZXI6OnRlc3RQcml2YXRlS2V5KCkKK3sKKyAgICBTdHJpbmcgcGVtRW5jb2RlZFByaXZhdGVLZXko
IiIKKyAgICAiTUlJSlFnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NDU3d3Z2drb0FnRUFBb0lD
QVFEZXVFM2hJK0R4Vmo4KyIKKyAgICAiMFlNMHBqZFAwa2hLQnZMeGdZd25IUzg3NWhrVm1iY2Jk
K3hOU3pLOFBJUWZDcW5scHNKbEVIOEhMVS9CYVEydCIKKyAgICAiL0dmOWMvdy9UZmdrK1VUcUt0
V0s0QmhDdXBTSHFUdGxId0trNHprWVJ4Rm1BQlFrWVpEQTJVNlFUQm9lY3daeiIKKyAgICAieEt3
ZTZ1QU0rSGxjR21Cc1BLMTNzRW00SFUyZ2o4b21hRnhxT1FDNVhlOXF0TDY0OHVoODhjMnA3NXd2
eUUyZSIKKyAgICAiTmxEQWRacXMvam1Temg0Rnc0UHUzQ3JHNGVkV2I4VllTdWxqeGF6bXpVeXM5
T0ZSME5xR01ReC81aDhNbjBvdiIKKyAgICAiekxmVGpKTHdueDk0TEZoOXdmZ0crQXUwbVlFMGNt
Q1BkNDBQOFF4bU1tRFBZV3dHT3NtVHlRb1BmVnpEN2hhbiIKKyAgICAieFFYaXlSWmNKL2pyNlkw
NGVuWGM5NUlKa3ZJWGhrQWRyTlJXU2NNOXh6WmcydFpWWFdMcWZkUFhtUWpSUGxudCIKKyAgICAi
dXkxMllBdTVLUVRaeTRsSlUwN3FCSDVteFZGT2Q2NURIQlpOVFF3MFNFQThVNWZZR0VZL2w2S3lB
UlRPU2ZFdyIKKyAgICAibDEwVU9mMWJHU1c3VW1HQ1RNQklELzdjQ2FXc1ZrdytFNkdNUzZYVE9P
QTFIbEVHWFVid2ZQM1lzREhsUVFNRyIKKyAgICAiMTB1RHZVajRqd0ROQTZGM291MEY2UVFMRURY
cWxKcW1tRG05eGIxbi93M3BtV3dlZG5ZWE8wRFNjSTUrV1NnNyIKKyAgICAiMko2TTZseTRVM2dS
VmdQRWkzQnkwckRVc0o0MFAremlTYWhGR2RkdGZ1VDA3cHdqVlJSWXpuM2theTdtMDlyZiIKKyAg
ICAiY3prQmtVSnEvYUE1VzVoMk9tbExRYzUram1HL3B3SURBUUFCQW9JQ0FHcmEvQ3AvZjBYcXZr
OVNUK1BydDIvcCIKKyAgICAia050TGVEWGNsTFNUY1AwSkNaSHVmUWFGdys3Vm5GTHBxZTRHdkxx
OUJsbGN6OFZPdlF3cmJlL0N3TlcrVnhDOCIKKyAgICAiUk1qZ2UycnFBQ2d3R2hPeDF0ODdsNDZO
a1VRdzdFeTBsQ2xlOGtyK01HZ0dHb1pxck1GZEtJUlVvTXY0bm1RNiIKKyAgICAidG1jMUZIdjVw
TFJlOVErTHA1bllRd0dvWW1ab1VPdWVvT2FPTDA4bTQ5cEdYUWtpTjhwSkRNeFNmTzNKdnRzdSIK
KyAgICAiNGNxSWI2a09RL2RPMUlzMUNUdlVSbGQxSVlMSDdZdVNoaTRaRXgyZzJhYzJVeXZ0Nllt
eHh2TW1BakJTS3BHZCIKKyAgICAibG9pZXBobzMvTnJER1VLZHYzcTlRWXl6ckE4dzlHVDMyTERH
cWdCWEppMXNjQkk4Y0V4a3A2UDRpRGxsaHY3cyIKKyAgICAidlpzc3B2b2JSSmEzTzF6azg2M0xI
WGEyNEpDbnl1emltcWV6WjJPbGg3bDRvbEhvWUQ2VUZDOWpmZDRLY0hSZyIKKyAgICAiMWM0c3lx
dC9uOEFLLzFzMWVCZlM5ZHpiNUNmanQ5TXRLWXNseHZMenExV3dPSU53ejhySVl1UmkwUGNMbTlo
cyIKKyAgICAibCtVMHUvekIzN2VNZ3Y2K2l3RFhrMWZTamJ1WXNFL2JFVFdZa25LR05GRkw1SlNp
S1Y3V0NwbWdOVFRyckU0SyIKKyAgICAiUzhFNmhSOXVQT0Fhb3c3dlBDQ3Q0eExYLzQ4bDJFSTZa
ZXE2cU9wcTFsSjJxY3k4cjR0eXVRZ05STFFNa1pnMSIKKyAgICAiQXhRbDZ2blE4Q3U0aXUrTklo
ZWYweTlaN3FrZk52WmVDajVHbEZCOWMyWWpWOFkybWRXZkpCNHFXSzNaLytNSiIKKyAgICAiUU9U
Q0tSejcvTHhMTkJVZXBSakpBb0lCQVFEM1pzVjV0V1U5WlNLY1ZKOURDN1RaazBQK2xoY2lzWnIw
bkwwdCIKKyAgICAiUFF1UU8rcEh2UEkxTXFSbk5za0hKaHlQbnFWQ2krZHA4OXRLL0l0NTkwVUxs
OG9zNlVDMUZoeXRCUG9UMVlQZCIKKyAgICAiV0dXZXAycE9jN2JWcGk0aXAzMXkrSW1mZ2VaeUp0
TUFUZG1lM2tCUEFPZTVOR0U5R2lnL2w1bnFMeWIwMnNkMSIKKyAgICAiUVc3TzBHZHFMeDNEcEx3
NFNMbGhNZjZhRTB1R1JTOHNmQjA4NWU0REduNTRPMndFVnVTWnFabDVOTkVmMzVSeiIKKyAgICAi
WGdpbTNoK1JXRjFaRlNRempCL3NtTjBaaCt2M0l6N3ZFSjFoMHl3VjZvK0d6dkhrUDlIRTZnTElo
dHlWOE9FdyIKKyAgICAidmx5WWsxR2E3cFVWR1JoOG84T01lNlJSOURRaTdKcUM0ZUk3R2NrbUJ6
YXF6SmNEQW9JQkFRRG1kZTZBVGV3MyIKKyAgICAiSDliUUs2eG5iTUluY3ovQ09wSUlTZGxjRmIy
M0FIR0ViNGI0VmhKRkJOd3hyTkw2dEhLU0ZMZVlaRkxoVGRoeCIKKyAgICAiUGZYeVVMSE5mNW96
ZEVrbDBXcmxlcm9EZG9nYkN5V2c1dUpwOS9RNjhzYndiR3I4Q0FsTzdaSFlUcmp1UWYxSyIKKyAg
ICAiQVM5cENtNzdLUDNrMmQzVWxHK3BlbERqWExvQnppWHEwTmp4SnBNejQ1dnJJeDhyU1d6Rk5q
TUdqWFQzZlhhUyIKKyAgICAiOTYyay8wQVhlaTUvYmZ1aEJ4bG03UG5pMGJRSklXRmtlYVV1R2xy
T2FIRFJ4VWlYMXI5SVpTOXd2NWxrMVB0ZyIKKyAgICAiaWRwYmNXeXcxOGNGR1R2amRLaFJiWkg4
RXNibXptTk5zQ0dkZ0NNcUZrS1lzVzE2UUtvQ2ovTkFvdkkzbjBxbiIKKyAgICAiNlZvUmEwc0dt
VEdOQW9JQkFDbC9tcVpFc0J1eFNESHkyOWdTTVo3QlhnbHBRYTQzSG1mamxyUHM1bkNtTERFbSIK
KyAgICAiVjNabTdUN0c2TWVETkEwL0xqZFFZbHZhWkxGYVZVYjdIQ0RLc0VZQ1JqRlo2U3Q0aHo0
bWRYeitZK1ZON2I0RiIKKyAgICAiR09rVGUrK2lLcC9MWXNKWHRzRDFGRFdiMldJVm83SGMxQUd6
OEkrZ1FKb1NJdVl1VEptTHpTTTArNUpEVU9WMSIKKyAgICAieThkU2JhUC9SdUV2MHFZamtHcVFW
azVlNzBTVXlPektWK1p4Q1RoZEh2Rkxpb3ZUT1RUZ2V2VXpFNzV4eWRmRyIKKyAgICAiZTdvQ210
VHVyemd2bC82OVZ1NVlnaWoxbjRDV1BISGNxNENRVy9ET1o3QmhGR0J3aHJXNzl2b0hKRjhQYndQ
TyIKKyAgICAiKzBEVHVkREdZM25BRDVzVG5GOHpVdU9iWWloSnRmemovdDU5Zk9NQ2dnRUJBSVl1
dUJVQVNiNjJ6UTRidjUvZyIKKyAgICAiVlJNL0tTcGZpOU5EbkVqZlo3eDdoNXpDaXVWZ3gvWmpw
QWxRUk84dnpWMThyb0VPT0t0eDljbkpkOEFFZCtIYyIKKyAgICAibjkzQm9TMWh4MG1oc1ZoKzFU
Ulp3eWp5QlhZSnBxd0Qyd3oxTXoxWE9JUTZFcWJNL3lQS1REMmdmd2c3eU81MyIKKyAgICAicVl4
cnhac1dhZ1ZWY0c5UStBUkJFUmF0VHdMcG9OK2ZjSkx4dWg0ci9DYS9MZXBzeG1Pckt6VGEvTUdL
MUxoVyIKKyAgICAicldnSWsyL29nRVBMU3B0ajJkMVBFRE8rR0F6Rno0VktqaFcxTmxVaDlmR2k2
SUpQTEhMbkJ3M29kYmkwUzhLVCIKKyAgICAiZ0E5WjUrTEJjNWNsb3RBUDVydFFBOFdoL1pDRW9Q
VEtUVEEyYmpXMkhNYXRKY2JHbVIwRnBDUXIzQU0wWTFTTyIKKyAgICAiTWFrQ2dnRUFMcnU2UVo2
WVV3SkpHNDVIMWVxL3JQZERZOHRxcWpKVlZpS29CVnZ6S2ovWGZKWllFVlFpSXc1cCIKKyAgICAi
dW9HaERveUZ1RlVlSWgvZDFKYzJJcnV5Mldqb09raVFZdEl1Z0RISHhScmtMZFFjalBobENUQ0Uv
bW15U0p0KyIKKyAgICAiYmtVYmlISWJROGRKNXlqOFNLcjBiSHpxRXRPeTkvSmVSamtZR0hDNmJW
V3BxNUZBMk1CaGY0ZE5qSjRVRGxuVCIKKyAgICAidnVlUGNUanI3bm5mWTFzenR2ZlZsOUQ4ZG1n
VCtUQm5PT1Y2eVdqMWdtNWJTMUR4UVNMZ05tdEt4Sjh0QWgydSIKKyAgICAiZEVPYnZjcFNoUDIy
SXRPVmpTYW1wUnVBdVJHMjZaZW1FYkdDSTNKNk1xeDN5Nm0rNkh3dWx0c2d0ZHpEZ3JGZSIKKyAg
ICAicUpmVThiYmRidTJwaTQ3WTRGZEpLMEhMZmZsNVJ3PT0iKTsKKworICAgIGF1dG8gZGVjb2Rl
ZFByaXZhdGVLZXkgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIHJl
dHVybiBXVEZNb3ZlKCpkZWNvZGVkUHJpdmF0ZUtleSk7Cit9Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5KCkKK3sKKyAgICBU
ZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNIHNlY3VyaXR5UEVNKFRlc3RXZWJLaXRB
UEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OktleVR5cGU6OlJTQVR5cGUsCisgICAgICAgIDQwOTYs
CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2F0ZSgpLAor
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSgpKTsKKyAg
ICByZXR1cm4gc2VjdXJpdHlQRU0uaWRlbnRpdHkoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyIDxU
ZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigpCit7CisgICAgLy8g
Q2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IHdlcmUgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgdGhp
cyBjb21tYW5kOgorICAgIC8vIG9wZW5zc2wgcmVxIC14NTA5IC1uZXdrZXkgcnNhOjQwOTYgLWtl
eW91dCBrZXkucGVtIC1vdXQgY2VydC5wZW0gLWRheXMgMzY1IC1ub2RlcworICAgIC8vIGFuZCBl
bnRlcmluZyB0aGlzIGluZm9ybWF0aW9uOgorICAgIC8qCisgICAgIENvdW50cnkgTmFtZSAoMiBs
ZXR0ZXIgY29kZSkgW106VVMKKyAgICAgU3RhdGUgb3IgUHJvdmluY2UgTmFtZSAoZnVsbCBuYW1l
KSBbXTpOZXcgTWV4aWNvCisgICAgIExvY2FsaXR5IE5hbWUgKGVnLCBjaXR5KSBbXTpTYW50YSBG
ZQorICAgICBPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkpIFtdOlNlbGYKKyAgICAgT3Jn
YW5pemF0aW9uYWwgVW5pdCBOYW1lIChlZywgc2VjdGlvbikgW106TXlzZWxmCisgICAgIENvbW1v
biBOYW1lIChlZywgZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZSkgW106TWUKKyAgICAgRW1haWwg
QWRkcmVzcyBbXTptZUBleGFtcGxlLmNvbQorICAgICAqLworCisgICAgU3RyaW5nIHBlbUVuY29k
ZWRQcml2YXRlS2V5KCIiCisgICAgIk1JSUpSQUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1M0
d2dna3FBZ0VBQW9JQ0FRRFBrNDJhUlhVdzE4Nm0iCisgICAgIlpDZGhuOVM1QXo0SE5ZMVFtc1M1
Zno4YkQ5NXpRVm1qcnRBcEp5N0ozTmhzQTdvM2xIRTZyRnovU1VMMkpmbkEiCisgICAgImlNbFly
ZmRiaGZQLzl4aUVnKzlFa0VybS9nRTJKSmE5d1dLUVVSelZXem15Qi9PRUhERU1MR2RqZmtRQnZX
RGkiCisgICAgIkd6Qm5vbE1aR0F2N1hDVEpZTzd5Rm9uWXlQVHptRE1lRGJialRWSlNGMnlmZ3Vn
ZjNOMmhSSEl5d1ZnbVVzb3EiCisgICAgInhPQXFaTm9YR2tYTU9ReFVQQzhLUzZKNjIrUWIxTkUw
UWRKNm9PTnlJRWFnUmRZb1haYnNybVB6NHMxM0YyYjciCisgICAgIlFhTGV2dmw2ZW1sSkU0MVNP
WFRGaE84UE4zUWs2dzR6bUhraThBWXdLaGFjQVJOSlBjN25VUGxwVFFSVzRLYWEiCisgICAgIlZT
UEhVM0VicjdxeXR0Uy9VTWlVNFdwN0c2YVp2L1BlbHFZQmNkMjBwWVBrTGMxQ205S1gxSGx3Wjhj
b3BLaEoiCisgICAgImdaUm43MmwrVU1yVzBPNnpwSUtsVXkvZFZWa2lPZmkxRFo0SHpkdG53c0Z2
YzJJTHY4YUFiNWJFcXl0eTlXR1oiCisgICAgInErZ21XalpsL0lKN3JycERIMjh2SktiRFhvWkts
VHdLOTFNMVFPRGxOQ2hpZUJ3N21BSjVFY2hDMDkrb05YRzAiCisgICAgImwxcGl0NmdWVnRxY295
Wml2SkVNM2RvUzluSm01c2NJbFZMK2hPd1F3K09WWTlVV0xYWmVFWFM1QjcwRVp1NjMiCisgICAg
IlEwUTRMK2xxeXBqbWlyMlA2bWZvVTcydXhzY1pJLzV4aEFYbE44MVNBQW43WkhJb2o1N1ptKzhv
cFo2QkhTOEUiCisgICAgImZoZG40NDJEYXA2RFFQQmdtR0lFdVo4d2hTZ21iUUlEQVFBQkFvSUNB
UUNXeEhSNFZmUzlxakhWbHk4bmNFREEiCisgICAgInRNTXIxMUN4K0FmbE43QXRSc1JxOEU5Y1hR
K2lwR3dPZ0pMTk9aUGE1TDJ0UVI0MjZnNXgzTGxmaDdxKzUzU2YiCisgICAgImpGYmlWcVgvTWhq
cXN1ZEVpYjkxaFBQY0ZZY3lqVWVsRENLRzFkR2c1aDBWMjNhb3hFQS9CejlFV3owNE9LV2siCisg
ICAgInQxdVVrYVBDaE41cEJjZlBwbjZNSThNVkZCNy9UOXozOVQyWFNpeXhYK20yUlpHd25kQVoz
YzRyYkYzcFRPRS8iCisgICAgIklIMEx6Vy9RQ3ZxYnZyM2dBTERaS2lWZGtHV0JYalIxWTA0SkFW
Q0FkeUcwL1NGcU5oVElhRDRMUnV3MlgzMnkiCisgICAgIjRSQngzSHFyKzBGK2FZUjloK2liSEFO
dnBGSnY5dWgzdVVvOHUyYzNybVlHaTBEc285MEFBU0hoUE8vRXlpMSsiCisgICAgIi95dm9xeXZ5
TGczV2pQdDJDSVBHUGVnYzJMU1hOUzNCTDZTS1N1aEFieVZaekxmSkt4d0JNaTRXWHdSMGhqdzUi
CisgICAgIm1jNnNxQ1VpRUNvSVBxM1RpT3k3WDNJUERiREI0Z2tNMVkzbG9JcTZXZXh2MnFBMFBZ
anpGWFlwNGtBRWtuK1AiCisgICAgImwrKzI1aUU5WmV2c1lsWVR3bkdCWHphdGV2YTZ1VkxFc3Rk
TjJNb0RjUUVnUU9Jd1hrWnBodHRmZHMrNjlERXciCisgICAgIk93NlRZWitiR1BDTE5lWmliWDdX
M3lreUJjampxcTRhanRQSDBUOWloRWpIM0l1SENvUjV0b0p5VWlnWFpMSVciCisgICAgIkFjemVC
SEh3NnhQS2o2Wk9HVVBwcVVna2wwRW85MXNqUG1qZWtGeVdBREZ2N1JPczc5NkdnY3luZkk2R2ty
dWQiCisgICAgImk4c1BOTzQ2ZkNxYVBlRHovUE8rUFFLQ0FRRUEvWXpUQTI1djdDbFBSVkRjNEpk
WEZZQjJac1lWNGZKenAzS1AiCisgICAgInFTVkVpbzU5K2pEZXBiRXFrSkNteGo4MDNwem9PWFZ2
OEJHcGRTb254UXlkT0FNYkdxb2wrWVNNeTV4cUlSZGkiCisgICAgIjA2S3U3K21hUFRwNG83bUhv
UHRSWnpENVdmRUdNWkdlZGtkRGRoWUpiMCtDaUVGY1NUUkpwZGVIbzJXNTRUcXgiCisgICAgIi94
VzlWcmlxUWk0TzJyTDJOMlBOcCtYcGlnbnFKamQ5U2pBT093ZVlnMlVsbjdiVmp0WFRtSWU1UHJL
Tm83YjEiCisgICAgIkd1WnhSb2Q4RWR0SzltazZLNkJ4TE4zWElMMW9PeldncGZxaEpSVjVaR0lL
WEhQQ3F0NC8vYWFkODFGaENjU1ciCisgICAgIndCakVzQnBwWXREU2FMcXlXc21qMDlBSWR6NUFs
QVN5VXY5a3VXSDlQT05KTUljTTV3S0NBUUVBMFpVQ1k0RnQiCisgICAgIi85MVFxYUF5c211N1VZ
WGw0NDEyN0szNEcyMkpkbXJwaUM1VXV5YjVMd3RGdldiMjBueDNqUjBtY3NJKzJHREciCisgICAg
IkVndXNlWXQ0WmFpUmY0NG9LbXkrM3JhMlF2MmZnRkpjYlRiMHBhMFdLMS9wQnBLWEVMRzlVc1Qy
VjhZZTBUanYiCisgICAgIlBkTEpQMnRqWEhkTmM3OHc0SHFJeXB4cEtFZldjN09zNzdIdVFEdHpq
aTRBMG40ajJKWWxnZERPV1B2NTNleHMiCisgICAgIjNaYmdsWC9BVjJYcnBzdHVQMS9tcVNwb3ps
R2FIeHNxTVhNYlFiUS9RR29sTGdRSlI3ZzluUjltYk81dVJTM2MiCisgICAgInZsWm1IalpRakJF
NTJFVUtBVUwrZlRkdFhTUStPRlNhQ3JvK3VJeENMaUtyWmFKOStXMWxFREdOSWprN1lJU2kiCisg
ICAgInU3M0E1SHh1eUVrVGl3S0NBUUJVU3lrc0R0OHV5RjBPVWwvY1d2UWN0ZVNuTGx2QURuYmN5
SDF5WW0xekV3UlciCisgICAgIjFVQndIWUpsSlhJTW5wN1pFNWt3NFJZaDNmMVVjbnRlUzE5SmE5
N3E4bjVGZ2dlOCtYZGZJUU0rRU92UDN2M2siCisgICAgIk5UZytWa1A5QlJCL0dnME1GZEZWVVhB
NUttQUhOalJVeVQ1QVJscUVDOW9nUkpOWGcwNVV6c3EyWDJmZkdPMmgiCisgICAgInF1Wk5Wd244
U0RYckI4aW9sN3M4a1Y0WjkvZ0RML2RJVjZ3MmVQWnUwaS9TbWV6QUoyUm5kVC92ZllWVFNWKzYi
CisgICAgIklBbS8raVBZdFRKckZDV2RRTnNTTkRZQWVGNXlrYjBWM25KTFlrRHB4WkhJcGtnRXlK
MVdQZ0ZRUSt2QUVFZlIiCisgICAgIkRsT2xkY3d0MnJPWWk2VUUzN0ZnaEY4MHNLdXY1aC9teWps
ZTVNY3BBb0lCQVFDdGRJWGxsTmxWU2ZYWWJaMkgiCisgICAgInpXSGF0dGJzM2NmdldveGRKdXI5
OXI0UTEwZUpIVmhlZHhYaEM3Wjd2a2V6b3N5UGJmUlZZTUtOYk52eVBGd0kiCisgICAgInh0cWts
eUxtK2RsK3VmbGV1RW1xQ29BMFk2ZFc5MG5CM0Q4Z0VYSzFmbVVTZTdEbU5ES05ObkhLMlFsMlU0
cUkiCisgICAgIm5MU2RkejhjaWsxc1lzY2xiMDh0c3ljTnVsVlZFOTh2YlNPQkVxVFlQR3dPWktK
alF5Z3BZK00yQWdrZHNmMmUiCisgICAgIlY5d1F6NDBQSm0vZzBoaXJxUjNGWU5ZcTF2bFlCN1hS
dWdmTGJjdkFiOXVPanM1V21YN3FBbXNQbkxJbmp3eGEiCisgICAgIjRHYmZkMFF3aHlIWXdHYmpE
M3Z2WXhXYWkwb2RzdmVTOTE2alh6aWpsc1p1QUpTdUhtL21FZUFkUVk3RGk3aWsiCisgICAgIlN0
YkJBb0lCQVFEcGNlUWhjbGFpTGZjeVlyTDBrajUxSzhudExEZnFPV0lIRXBRMk9sOFA0bkptU0F0
VXFLM3AiCisgICAgIkJERW1WVHlic2l3SGQ3c2xUakdkYVo1akhLdlRORjBmY0FlODUzSVlvbDFG
VHlENnRWMTNrdWticTg4R2greHkiCisgICAgIm1pSzFUWHRMbFdOMDZyNDNhblFxWnlSYnU1SW9I
bUhBeWJwazRTdHEyOXdPU0JvWmR5YXJRV2tsb3lpWUpLZFgiCisgICAgIm9EZGtLRjhjd29CZUFl
aVJMa1Q0NXN0Uk5rbEJnNFZsZ0NGRUxQT2NXWU1GT29Ta1FnMTlWUy9WYUhpNDh0K3oiCisgICAg
IjY2OEJuMVUzVTlkL2lOQ1hGTTc4aUtxb0pDQm9VUnlpcm1HL3RJNmdmSmlMbjA1VHo2bll6MzFZ
NDBGbTFTd2ciCisgICAgImhnT3kvVGRKTy9Oam1USEJncElUUDZsdjY5UXZhVjl6Iik7CisKKyAg
ICBTdHJpbmcgcGVtRW5jb2RlZENlcnRpZmljYXRlKCIiCisgICAgIk1JSUZnRENDQTJnQ0NRRCtR
WTFKUm5NM0lqQU5CZ2txaGtpRzl3MEJBUXNGQURDQmdURUxNQWtHQTFVRUJoTUMiCisgICAgIlZW
TXhFekFSQmdOVkJBZ01DazVsZHlCTlpYaHBZMjh4RVRBUEJnTlZCQWNNQ0ZOaGJuUmhJRVpsTVEw
d0N3WUQiCisgICAgIlZRUUtEQVJUWld4bU1ROHdEUVlEVlFRTERBWk5lWE5sYkdZeEN6QUpCZ05W
QkFNTUFrMWxNUjB3R3dZSktvWkkiCisgICAgImh2Y05BUWtCRmc1dFpVQmxlR0Z0Y0d4bExtTnZi
VEFlRncweU1EQTNNekV3T0RVMk1EWmFGdzB5TVRBM016RXciCisgICAgIk9EVTJNRFphTUlHQk1R
c3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQXdLVG1WM0lFMWxlR2xqYnpFUk1BOEciCisgICAg
IkExVUVCd3dJVTJGdWRHRWdSbVV4RFRBTEJnTlZCQW9NQkZObGJHWXhEekFOQmdOVkJBc01CazE1
YzJWc1pqRUwiCisgICAgIk1Ba0dBMVVFQXd3Q1RXVXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtMWxR
R1Y0WVcxd2JHVXVZMjl0TUlJQ0lqQU4iCisgICAgIkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1J
SUNDZ0tDQWdFQXo1T05ta1YxTU5mT3BtUW5ZWi9VdVFNK0J6V04iCisgICAgIlVKckV1WDgvR3cv
ZWMwRlpvNjdRS1NjdXlkelliQU82TjVSeE9xeGMvMGxDOWlYNXdJakpXSzMzVzRYei8vY1kiCisg
ICAgImhJUHZSSkJLNXY0Qk5pU1d2Y0Zpa0ZFYzFWczVzZ2Z6aEJ3eERDeG5ZMzVFQWIxZzRoc3da
NkpUR1JnTCsxd2siCisgICAgInlXRHU4aGFKMk1qMDg1Z3pIZzIyNDAxU1VoZHNuNExvSDl6ZG9V
UnlNc0ZZSmxMS0tzVGdLbVRhRnhwRnpEa00iCisgICAgIlZEd3ZDa3VpZXR2a0c5VFJORUhTZXFE
amNpQkdvRVhXS0YyVzdLNWo4K0xOZHhkbSswR2kzcjc1ZW5wcFNST04iCisgICAgIlVqbDB4WVR2
RHpkMEpPc09NNWg1SXZBR01Db1duQUVUU1QzTzUxRDVhVTBFVnVDbW1sVWp4MU54RzYrNnNyYlUi
CisgICAgInYxRElsT0ZxZXh1bW1iL3ozcGFtQVhIZHRLV0Q1QzNOUXB2U2w5UjVjR2ZIS0tTb1NZ
R1VaKzlwZmxESzF0RHUiCisgICAgInM2U0NwVk12M1ZWWklqbjR0UTJlQjgzYlo4TEJiM05pQzcv
R2dHK1d4S3NyY3ZWaG1hdm9KbG8yWmZ5Q2U2NjYiCisgICAgIlF4OXZMeVNtdzE2R1NwVThDdmRU
TlVEZzVUUW9ZbmdjTzVnQ2VSSElRdFBmcURWeHRKZGFZcmVvRlZiYW5LTW0iCisgICAgIllyeVJE
TjNhRXZaeVp1YkhDSlZTL29Uc0VNUGpsV1BWRmkxMlhoRjB1UWU5QkdidXQwTkVPQy9wYXNxWTVv
cTkiCisgICAgImorcG42Rk85cnNiSEdTUCtjWVFGNVRmTlVnQUorMlJ5S0krZTJadnZLS1dlZ1Iw
dkJINFhaK09OZzJxZWcwRHciCisgICAgIllKaGlCTG1mTUlVb0ptMENBd0VBQVRBTkJna3Foa2lH
OXcwQkFRc0ZBQU9DQWdFQW5INXNkQlJUeVpFaUk5YnQiCisgICAgInVteFNrT3NrOTNWK0N4a1hs
NzR2bTJzamxrM0plM1VCRmsrUVlPOVJjYkFzTTVPbHN1OHB6QW5VSkFNaHZRWlAiCisgICAgInhV
MkN6RkFaZE5pTDFDWUV3UEtYQzdiR3dmVnJWb0lkTEhrSWh1SE9PLzVHL0thendUVE5yZmlnRXFB
T05ybnIiCisgICAgIlNIU2ZhV0t5NmpwSkZSTUgyOGxsTUZLNUV2NFVTZkRoS1pYT0IwYmxwclg5
UmgyTkRnYWhoTktoV2xSQk8zL2ciCisgICAgIkwxeVcxWU9ZQ01ka1YyZE9vWkV6WTRlQkczNG1D
Z1M3MkVJOE9KWUJQVktHdFRYRDZjUHp1ZjVyVzh1ZUh2RUEiCisgICAgIkR6ZUJyNUU4OFVwTHZG
UEdma0tkelNIL0tPVVhVV0xXOWxtTFZQWHJMNUpmdmMxdGFWWGh2ZVVOSVIydm4vSUQiCisgICAg
IkxQeGxTQktENDRXaTk4OU1kZWhaYkk3Ly9yUDlTOGVaWlBLb3RVVXg4OWVwakNSc2pta0djTnNq
UWVuVFY1QjkiCisgICAgImx5cnNiaDk5dmlmUjhXc1pwNUYxYUVjbVBkV01NWk01cFpMUGsrT0R2
VGNkcW5iY1VING1LVmd5cThDTTl0aVkiCisgICAgIjQ2aXpob3UzR1NLejNYMWVZcFliWkhGNTJk
eG1PVWR2cFNvcWZtbE1GMUVndjk0Y3JEMXhoOWFzZGpnMkRuWGMiCisgICAgIjk0OFl4UGFGam9P
R2Q2WW5jK2Z2OXBKempUanhpbWJJaVdtMnI2eXQyajloQXVLSlhwTk9JYTRvSU1BSUdqQ2kiCisg
ICAgIkpBSDJueEtHdXF0QUsyaFdiQUN1NjFSVDVnQXFBdi9oQjlKWW5jMk9pUTJWbWpZa09rMkdF
ZElqbjB4U2dYN1ciCisgICAgIm1JL2hIYnhLTUczUmt2OXExQ3grV0IvdjF0OD0iKTsKKworICAg
IGF1dG8gcHJpdmF0ZUtleUJ5dGVzID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5
KTsKKyAgICBhdXRvIGNlcnRpZmljYXRlQnl0ZXMgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENl
cnRpZmljYXRlKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNIHNlY3Vy
aXR5UEVNKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OktleVR5cGU6OlJTQVR5
cGUsCisgICAgICAgIDQwOTYsCisgICAgICAgICpjZXJ0aWZpY2F0ZUJ5dGVzLAorICAgICAgICAq
cHJpdmF0ZUtleUJ5dGVzKTsKKyAgICByZXR1cm4gc2VjdXJpdHlQRU0uaWRlbnRpdHkoKTsKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTJmZTUxOWMwZGUx
OTczMWMzMjU3MzJkNmFiYzNiNmQ2YjE1NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+CisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsK
KworI2lmIE9TKFdJTkRPV1MpCit1c2luZyBTb2NrZXQgPSBTT0NLRVQ7Cit1c2luZyBzb2NrbGVu
X3QgPSBpbnQ7Citjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2NrZXQgPSBJTlZBTElEX1NPQ0tF
VDsKKyNlbHNlCit1c2luZyBTb2NrZXQgPSBpbnQ7CisjZGVmaW5lIFNPQ0tFVF9FUlJPUiAtMQor
Y29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gU09DS0VUX0VSUk9SOworI2VuZGlmCisK
K1NvY2tldCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7Citib29s
IGlzVmFsaWRTb2NrZXQoU29ja2V0KTsKK1NvY2tldCBhY2NlcHQoU29ja2V0KTsKK2ludCBzaHV0
ZG93bihTb2NrZXQpOworaW50IGNsb3NlKFNvY2tldCk7CitpbnQgcmVhZChTb2NrZXQsIHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKK2ludCB3cml0ZShTb2NrZXQsIGNvbnN0IHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGNvdW50KTsKKworYm9vbCBpc1NvY2tldFJlYWR5KFNvY2tldCByZWFkU29j
a2V0LCBTb2NrZXQgd3JpdGVTb2NrZXQpOworYm9vbCBpc1NvY2tldFJlYWR5UmVhZGluZyhTb2Nr
ZXQpOworYm9vbCBpc1NvY2tldFJlYWR5V3JpdGluZyhTb2NrZXQpOworCit9IC8vIG5hbWVzcGFj
ZSBTb2NrZXQKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2luLmNtYWtlCmluZGV4IDMzODNiYjNlMDE0NGI4NzU0YzA5Yzc0ZDcyNjNmY2U0MjI5
OGZlZDYuLjY5NjAxZTc4MGEyNzU3MTIyYTI3NjkyOTUwYmM4MWQyY2JkZGM1OTcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTI0LDggKzEyNCwxMiBAQCBpZiAoRU5B
QkxFX1dFQktJVCkKICAgICBsaXN0KEFQUEVORCBUZXN0V2ViS2l0X1NPVVJDRVMKICAgICAgICAg
JHt0ZXN0X21haW5fU09VUkNFU30KIAorICAgICAgICBDb25uZWN0aW9uTGlzdGVuZXJQT1NJWC5j
cHAKKyAgICAgICAgQ29ubmVjdGlvblBPU0lYLmNwcAorICAgICAgICBIVFRQU2VydmVyLmNwcAog
ICAgICAgICBUZXN0cy9XZWJLaXQvQ29va2llU3RvcmFnZUZpbGUuY3BwCiAKKyAgICAgICAgd2lu
L1BsYXRmb3JtU29ja2V0V2luLmNwcAogICAgICAgICB3aW4vUGxhdGZvcm1VdGlsaXRpZXNXaW4u
Y3BwCiAgICAgICAgIHdpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCiAgICAgICAgIHdpbi9VdGls
aXRpZXNXaW4uY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBT
ZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCmluZGV4IDc1
ZDI4MmVhOWU0MGQyMTE1YWYxOTQ4YWQzZjhlYjhmYzYzN2NjZDQuLjExOTYwNmUyZjA2M2NiYzYz
YjEyOTliMjY4YWE1ZWQzMzNhOTU5ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvSFRUUFNlcnZlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgUExBVEZPUk0o
Q09DT0EpCiAjaW1wb3J0IDxOZXR3b3JrL05ldHdvcmsuaD4KICNpbXBvcnQgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KQEAgLTMzLDYgKzM0LDkgQEAK
ICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogT0JKQ19DTEFTUyBOU1VSTFJlcXVl
c3Q7CisjZWxpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiQ29ubmVjdGlvbkxpc3RlbmVyLmgi
CisjZW5kaWYKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCkBAIC00NCwxNCArNDgsMjEg
QEAgY2xhc3MgSFRUUFNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJlcXVlc3REYXRhOwog
ICAgIGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1aW50OF90IHsgSHR0cCwgSHR0cHMsIEh0dHBzV2l0
aExlZ2FjeVRMUywgSHR0cDIsIEh0dHBzUHJveHksIEh0dHBzUHJveHlXaXRoQXV0aGVudGljYXRp
b24gfTsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICB1c2luZyBDZXJ0aWZpY2F0ZVZlcmlmaWVy
ID0gRnVuY3Rpb248dm9pZChzZWNfcHJvdG9jb2xfbWV0YWRhdGFfdCwgc2VjX3RydXN0X3QsIHNl
Y19wcm90b2NvbF92ZXJpZnlfY29tcGxldGVfdCk+OwogCiAgICAgSFRUUFNlcnZlcihzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4sIFByb3RvY29s
ID0gUHJvdG9jb2w6Okh0dHAsIENlcnRpZmljYXRlVmVyaWZpZXImJiA9IG51bGxwdHIsIFJldGFp
blB0cjxTZWNJZGVudGl0eVJlZj4mJiA9IG51bGxwdHIsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
IHBvcnQgPSB7IH0pOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIEhUVFBTZXJ2ZXIoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+LCBQcm90b2Nv
bCA9IFByb3RvY29sOjpIdHRwLCBzdGQ6OnVuaXF1ZV9wdHI8U2VjSWRlbnRpdHlSZWY+JiYgPSBu
dWxscHRyLCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0ID0gc3RkOjpudWxsb3B0KTsKKyNl
bmRpZgogICAgIEhUVFBTZXJ2ZXIoRnVuY3Rpb248dm9pZChDb25uZWN0aW9uKT4mJiwgUHJvdG9j
b2wgPSBQcm90b2NvbDo6SHR0cCk7CiAgICAgfkhUVFBTZXJ2ZXIoKTsKKyAgICBVUkwgdXJsKGNv
bnN0IFN0cmluZyYgcGF0aCA9IHsgfSkgY29uc3Q7CiAgICAgdWludDE2X3QgcG9ydCgpIGNvbnN0
OworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdChjb25zdCBT
dHJpbmcmIHBhdGggPSAiLyJfc3RyKSBjb25zdDsKICAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3RX
aXRoTG9jYWxob3N0KGNvbnN0IFN0cmluZyYgcGF0aCA9ICIvIl9zdHIpIGNvbnN0OworI2VuZGlm
CiAgICAgc2l6ZV90IHRvdGFsUmVxdWVzdHMoKSBjb25zdDsKICAgICB2b2lkIGNhbmNlbCgpOwog
CkBAIC02NSwxMiArNzYsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4g
dGVzdENlcnRpZmljYXRlKCk7CiAKIHByaXZhdGU6CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
c3RhdGljIFJldGFpblB0cjxud19wYXJhbWV0ZXJzX3Q+IGxpc3RlbmVyUGFyYW1ldGVycyhQcm90
b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYmLCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYs
IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpOworI2VuZGlmCiAgICAgc3RhdGljIHZvaWQg
cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPik7CiAgICAgY29u
c3QgY2hhciogc2NoZW1lKCkgY29uc3Q7CiAKICAgICBSZWY8UmVxdWVzdERhdGE+IG1fcmVxdWVz
dERhdGE7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPG53X2xpc3RlbmVyX3Q+
IG1fbGlzdGVuZXI7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgQ29ubmVjdGlvbkxpc3RlbmVy
IG1fbGlzdGVuZXI7CisjZW5kaWYKICAgICBQcm90b2NvbCBtX3Byb3RvY29sIHsgUHJvdG9jb2w6
Okh0dHAgfTsKIH07CiAKQEAgLTc4LDcgKzk1LDkgQEAgY2xhc3MgQ29ubmVjdGlvbiB7CiBwdWJs
aWM6CiAgICAgdm9pZCBzZW5kKFN0cmluZyYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
PSBudWxscHRyKSBjb25zdDsKICAgICB2b2lkIHNlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0OworI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZvaWQgc2VuZChSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0YV90PiYmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBudWxscHRyKSBjb25zdDsKKyNlbmRpZgogICAgIHZvaWQg
cmVjZWl2ZUJ5dGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
LCBzaXplX3QgbWluaW11bVNpemUgPSAxKSBjb25zdDsKICAgICB2b2lkIHJlY2VpdmVIVFRQUmVx
dWVzdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxjaGFyPiYmKT4mJiwgVmVjdG9yPGNo
YXI+JiYgYnVmZmVyID0geyB9KSBjb25zdDsKICAgICB2b2lkIHdlYlNvY2tldEhhbmRzaGFrZShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSB7IH0pOwpAQCAtODcsMTAgKzEwNiwxNyBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhUVFBTZXJ2ZXI7CisjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgQ29ubmVjdGlvbihud19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikK
ICAgICAgICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikgeyB9CiAKICAgICBSZXRhaW5QdHI8
bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CisjZWxpZiBQTEFURk9STShXSU4pCisgICAg
Q29ubmVjdGlvbihSZWZQdHI8Q29ubmVjdGlvbkVudGl0eT4mJiBjb25uZWN0aW9uKQorICAgICAg
ICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKGNvbm5lY3Rpb24pKSB7IH0KKworICAgIFJlZlB0cjxD
b25uZWN0aW9uRW50aXR5PiBtX2Nvbm5lY3Rpb24geyBudWxscHRyIH07CisjZW5kaWYKIH07CiAK
IHN0cnVjdCBIVFRQUmVzcG9uc2UgewpAQCAtMTI2LDYgKzE1MiwxNyBAQCBzdHJ1Y3QgSFRUUFJl
c3BvbnNlIHsKICAgICBUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24geyBU
ZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9OwogfTsKIAorI2lmIFBMQVRGT1JNKFdJTikKK3N0cnVj
dCBIVFRQUmVxdWVzdCB7CisgICAgc3RhdGljIEhUVFBSZXF1ZXN0IHBhcnNlSFRUUFJlcXVlc3Qo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpOworCisgICAgU3RyaW5nIHBhdGg7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmllbGRzOworICAgIFN0cmluZyBib2R5Owor
ICAgIGJvb2wgY29tcGxldGUgeyBmYWxzZSB9OworfTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgSDIg
ewogCiAvLyBodHRwczovL2h0dHAyLmdpdGh1Yi5pby9odHRwMi1zcGVjLyNyZmMuc2VjdGlvbi40
LjEKQEAgLTE4Myw2ICsyMjAsMTEgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQogCisjaWYgUExBVEZPUk0oQ09DT0EpCiBSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVS
ZWY+IHRlc3RDZXJ0aWZpY2F0ZSgpOwogUmV0YWluUHRyPFNlY0lkZW50aXR5UmVmPiB0ZXN0SWRl
bnRpdHkoKTsKIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigpOworI2Vs
aWYgUExBVEZPUk0oV0lOKQorc3RkOjp1bmlxdWVfcHRyPFRlc3RXZWJLaXRBUEk6OlNlY0lkZW50
aXR5UmVmPiB0ZXN0SWRlbnRpdHkoKTsKK3N0ZDo6dW5pcXVlX3B0cjxUZXN0V2ViS2l0QVBJOjpT
ZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigpOworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRjY2NjNjY5ZWFh
MDhhZGNmYjU4MTViMzMyNmRmMjFhYjE1ZDM5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNwcApAQCAtMCwwICsxLDExMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
b2NrZXQuaCIKKworI2luY2x1ZGUgPG11dGV4PgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CituYW1lc3BhY2UgU29ja2V0IHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCit7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIGZsYWc7CisKKyAgICBzdGQ6OmNhbGxfb25jZShmbGFnLCBb
XSB7CisgICAgICAgIFdTQURBVEEgZGF0YTsKKyAgICAgICAgV1NBU3RhcnR1cChNQUtFV09SRCgy
LCAwKSwgJmRhdGEpOworICAgIH0pOworfQorCitTb2NrZXQgc29ja2V0KGludCBkb21haW4sIGlu
dCB0eXBlLCBpbnQgcHJvdG9jb2wpCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAgIHJldHVybiA6
OnNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1ZhbGlkU29ja2V0
KFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCAhPSBJTlZBTElEX1NPQ0tFVDsK
K30KKworU29ja2V0IGFjY2VwdChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiA6OmFjY2Vw
dChzb2NrZXQsIG51bGxwdHIsIG51bGxwdHIpOworfQorCitpbnQgc2h1dGRvd24oU29ja2V0IHNv
Y2tldCkKK3sKKyAgICByZXR1cm4gOjpzaHV0ZG93bihzb2NrZXQsIFNEX0JPVEgpOworfQorCitp
bnQgY2xvc2UoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpjbG9zZXNvY2tldChzb2Nr
ZXQpOworfQorCitpbnQgcmVhZChTb2NrZXQgc29ja2V0LCB2b2lkKiBidWZmZXIsIHNpemVfdCBj
b3VudCkKK3sKKyAgICByZXR1cm4gOjpyZWN2KHNvY2tldCwgc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1
ZmZlciksIGNvdW50LCAwKTsKK30KKworaW50IHdyaXRlKFNvY2tldCBzb2NrZXQsIGNvbnN0IHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnNlbmQoc29ja2V0LCBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQorCisKK2Jvb2wg
aXNTb2NrZXRSZWFkeShTb2NrZXQgcmVhZFNvY2tldCwgU29ja2V0IHdyaXRlU29ja2V0KQorewor
ICAgIGZkX3NldCBmZHNldFJlYWQsIGZkc2V0V3JpdGU7CisgICAgRkRfWkVSTygmZmRzZXRSZWFk
KTsKKyAgICBGRF9aRVJPKCZmZHNldFdyaXRlKTsKKworICAgIGlmIChpc1ZhbGlkU29ja2V0KHJl
YWRTb2NrZXQpKQorICAgICAgICBGRF9TRVQocmVhZFNvY2tldCwgJmZkc2V0UmVhZCk7CisgICAg
aWYgKGlzVmFsaWRTb2NrZXQod3JpdGVTb2NrZXQpKQorICAgICAgICBGRF9TRVQod3JpdGVTb2Nr
ZXQsICZmZHNldFdyaXRlKTsKKworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgdGlt
ZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICBhdXRvIHJj
ID0gOjpzZWxlY3QoMCwgJmZkc2V0UmVhZCwgJmZkc2V0V3JpdGUsIG51bGxwdHIsICZ0aW1lb3V0
KTsKKyAgICByZXR1cm4gcmMgPiAwOworfQorCitib29sIGlzU29ja2V0UmVhZHlSZWFkaW5nKFNv
Y2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIGlzU29ja2V0UmVhZHkoc29ja2V0LCBJbnZhbGlk
U29ja2V0KTsKK30KKworYm9vbCBpc1NvY2tldFJlYWR5V3JpdGluZyhTb2NrZXQgc29ja2V0KQor
eworICAgIHJldHVybiBpc1NvY2tldFJlYWR5KEludmFsaWRTb2NrZXQsIHNvY2tldCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFNvY2tldAorfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453917</attachid>
            <date>2022-03-05 12:16:19 -0800</date>
            <delta_ts>2022-03-07 15:26:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215379-20220306051558.patch</filename>
            <type>text/plain</type>
            <size>100367</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGJjYmNmNDUxN2JmYWJkNDExM2QzZDIyNWQ1MTY3YzMx
YjUzOTA5NC4uOTA2Mjk3MmYyNjE3OWRiNTI0MTc1NWY4NWIxNzI1OWUzMTdmMDQxNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
MSBAQAorMjAyMi0wMy0wNSAgVGFrYXNoaSBLb21vcmkgIDx4VGFrYXNoaS5Lb21vcmlAanAuc29u
eS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEhUVFBTZXJ2ZXIgZm9yIEFQSSB0ZXN0cyBpbiBj
KysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM3
OQorCisgICAgICAgIEltcGxlbWVudGVkIENvbm5lY3Rpb24gYW5kIEhUVFBTZXJ2ZXIgY2xhc3Nl
cyB3aGljaCBhcmUgZGVjbGFyZWQgaW4gSFRUUFNlcnZlci5oCisgICAgICAgIFRoZSBpbnRlcmZh
Y2VzIGFyZSBhbG9tb3N0IHRoZSBzYW1lLCBidXQgSFRUUFNlcnZlciBjb25zdHJ1Y3RvciBhbmQg
YSBDb25uZWN0aW9uOjpzZW5kIGZ1bmN0aW9uIHZhcnkuCisgICAgICAgIFRoaXMgaXMgYmVjYXVz
ZSB3aW5jYWlybyBwb3J0IGRvZXMgbm90IGhhdmUgZGlzcGF0Y2hfZGF0YV90IHR5cGUuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL0Nvbm5lY3Rpb25MaXN0ZW5lci5oOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmRlbGV0ZXI8U1NMPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkZWxl
dGVyPFg1MDk+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRlbGV0ZXI8
RVZQX1BLRVk+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRlbGV0ZXI8
QklPPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJl
Zjo6cHJpdmF0ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZjo6
eDUwOSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZjo6c2V0UHJpdmF0
ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZjo6c2V0WDUwOSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZjo6aXNWYWxpZCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjpjZXJ0aWZpY2F0ZSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjpwcml2YXRlS2V5KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OnB1YmxpY0tleSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uRW50aXR5OjpDb25uZWN0aW9uRW50
aXR5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6On5Db25uZWN0
aW9uRW50aXR5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25FbnRpdHk6OnNv
Y2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uRW50aXR5Ojpzc2wpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyUE9TSVguY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmluaXRpYWxpemVTU0xMaWJyYXJ5KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlNlY3VyaXR5SWRlbnRpdHlQRU06OlNlY3VyaXR5SWRlbnRpdHlQ
RU0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6aWRlbnRp
dHkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTTo6dXBkYXRl
Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBF
TTo6dXBkYXRlUHJpdmF0ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9u
RW50aXR5OjpjYW5jZWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlTGlzdGVuaW5n
U29ja2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6Q29u
bmVjdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0
ZW5lcjo6fkNvbm5lY3Rpb25MaXN0ZW5lcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25u
ZWN0aW9uTGlzdGVuZXI6OmlzVmFsaWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVj
dGlvbkxpc3RlbmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5l
Y3Rpb25MaXN0ZW5lcjo6c3RhcnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlv
bkxpc3RlbmVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0
ZW5lcjo6cmVnaXN0ZXJIYW5kbGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rp
b25MaXN0ZW5lcjo6cmVnaXN0ZXJWZXJpZmllcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
b25uZWN0aW9uTGlzdGVuZXI6OnNldFNlY0lkZW50aXR5UmVmKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6aXNTZWN1cmUpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Q29ubmVjdGlvbkxpc3RlbmVyOjphY2NlcHRTU0xDb25uZWN0aW9uKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb25MaXN0ZW5lcjo6ZGlzcGF0Y2hMaXN0ZW5pbmcpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ29ubmVjdGlvblBPU0lYLmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kQnl0ZXNQcm9jZXNzKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkNvbm5lY3Rpb246OnNlbmQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
cmVjZWl2ZUJ5dGVzUHJvY2Vzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9u
OjpyZWNlaXZlQnl0ZXMgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlv
bjo6cmVjZWl2ZUhUVFBSZXF1ZXN0IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNv
bm5lY3Rpb246OnRlcm1pbmF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9u
OjpjYW5jZWwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHA6IEFkZGVk
LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6SFRUUFNlcnZlcik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjptX3Byb3RvY29sKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkhUVFBTZXJ2ZXI6On5IVFRQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBT
ZXJ2ZXI6OnBvcnQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6
Y2FuY2VsKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1Jl
cXVlc3RzKToKKyAgICAgICAgKHRlc3RJZGVudGl0eSk6CisgICAgICAgICh0ZXN0SWRlbnRpdHky
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0hUVFBTZXJ2ZXIuaDogUmVuYW1lZCBmcm9tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlcjo6SFRUUFNlcnZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
b25uZWN0aW9uOjpDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6OlJlcXVlc3REYXRhOjpSZXF1ZXN0RGF0YSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9I
VFRQU2VydmVyQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzdGF0
dXNUZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFwcGVuZFVURjhUb1ZlY3Rvcik6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp1cmwgY29uc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6dG90YWxSZXF1ZXN0cyBjb25zdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjphZGRSZXNwb25zZSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpyZXNwb25kV2l0aE9LKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnN0cm5zdHIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNl
cnZlcjo6cGFyc2VQYXRoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBh
cnNlQm9keSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpzY2hlbWUgY29u
c3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplIGNvbnN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6Ym9keUZyb21TdHJpbmcpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaDogQWRkZWQuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YTo6UmVxdWVzdERhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OmFkZFJl
c3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJl
c3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoT0spOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6SFRUUFNlcnZlcjo6dG90YWxSZXF1ZXN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpzdGF0dXNUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OmFwcGVuZFVURjhUb1ZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpIVFRQU2VydmVyOjpwYXJzZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6SFRUUFNlcnZlcjo6cGFyc2VCb2R5KTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnNjaGVtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2F0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjp0ZXN0UHJp
dmF0ZUtleSk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1T
b2NrZXRXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNvY2tldCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29j
a2V0OjpzaHV0ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmNsb3NlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpTb2NrZXQ6OndyaXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6
aXNTb2NrZXRSZWFkeSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzU29ja2V0
UmVhZHlSZWFkaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aXNTb2NrZXRS
ZWFkeVdyaXRpbmcpOgorCiAyMDIyLTAzLTA0ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBudWxsIGNoZWNrIGZvciBwYXRoIGluIG1ha2VBbGxEaXJlY3Rv
cmllcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25uZWN0aW9uTGlzdGVuZXIu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDM0YTlkN2RjN2FhOWZiN2FlM2Q5NGU1OWEyMTkzNWUwZjc2MTQzZgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29ubmVjdGlvbkxpc3RlbmVyLmgKQEAgLTAsMCArMSwx
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVNvY2tldC5oIgorCisjaWYgSEFWRShTU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K
KyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworI2lmIEhBVkUo
U1NMKQordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBkZWxldGVyOworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBkZWxldGVyPFNTTD4geworICAgIHZvaWQgb3BlcmF0b3IoKShTU0wqIHNzbCkKKyAgICB7
CisgICAgICAgIFNTTF9mcmVlKHNzbCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
ZGVsZXRlcjxYNTA5PiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFg1MDkqIHg1MDkpCisgICAgewor
ICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
ZGVsZXRlcjxFVlBfUEtFWT4geworICAgIHZvaWQgb3BlcmF0b3IoKShFVlBfUEtFWSoga2V5KQor
ICAgIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShrZXkpOworICAgIH0KK307CisKK3RlbXBsYXRl
IDw+IHN0cnVjdCBkZWxldGVyPEJJTz4geworICAgIHZvaWQgb3BlcmF0b3IoKShCSU8qIGJpbykK
KyAgICB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfQorfTsKKyNlbHNlCit1c2luZyBT
U0wgPSB2b2lkOworc3RydWN0IFg1MDkgeyB9Oworc3RydWN0IEVWUF9QS0VZIHsgfTsKK3N0cnVj
dCBCSU8geyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7CisKK3RlbXBs
YXRlPD4gc3RydWN0IGRlbGV0ZXI8U1NMPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFNTTCopIHsg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgZGVsZXRlcjxYNTA5PiB7CisgICAgdm9pZCBvcGVy
YXRvcigpKFg1MDkqKSB7IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8RVZQX1BL
RVk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoRVZQX1BLRVkqKSB7IH0KK307CisKK3RlbXBsYXRl
IDw+IHN0cnVjdCBkZWxldGVyPEJJTz4geworICAgIHZvaWQgb3BlcmF0b3IoKShCSU8qKSB7IH0K
K307CisjZW5kaWYKKworbmFtZXNwYWNlIHNzbCB7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNp
bmcgdW5pcXVlX3B0ciA9IHN0ZDo6dW5pcXVlX3B0cjxULCBkZWxldGVyPFQ+PjsKK30KKworY2xh
c3MgU2VjSWRlbnRpdHlSZWYgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4mIHByaXZhdGVLZXkoKSB7IHJldHVybiBt
X3ByaXZhdGVLZXk7IH0KKyAgICBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4mIHg1MDkoKSB7IHJldHVy
biBtX3g1MDk7IH0KKworICAgIHZvaWQgc2V0UHJpdmF0ZUtleShzc2w6OnVuaXF1ZV9wdHI8RVZQ
X1BLRVk+JiYgcHJpdmF0ZUtleSkgeyBtX3ByaXZhdGVLZXkgPSBXVEZNb3ZlKHByaXZhdGVLZXkp
OyB9CisgICAgdm9pZCBzZXRYNTA5KHNzbDo6dW5pcXVlX3B0cjxYNTA5PiYmIHg1MDkpIHsgbV94
NTA5ID0gV1RGTW92ZSh4NTA5KTsgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV9w
cml2YXRlS2V5ICYmIG1feDUwOTsgfQorcHJpdmF0ZToKKyAgICBzc2w6OnVuaXF1ZV9wdHI8RVZQ
X1BLRVk+IG1fcHJpdmF0ZUtleTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8WDUwOT4gbV94NTA5Owor
fTsKKworY2xhc3MgU2VjdXJpdHlJZGVudGl0eVBFTSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFz
cyBLZXlUeXBlIHsgTnVsbFR5cGUsIFJTQVR5cGUsIEVDVHlwZSB9OworCisgICAgU2VjdXJpdHlJ
ZGVudGl0eVBFTShLZXlUeXBlLCBpbnQgYml0TGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNlcnRpZmlj
YXRlLCBjb25zdCBTdHJpbmcmIHByaXZhdGVLZXkpOworICAgIFNlY3VyaXR5SWRlbnRpdHlQRU0o
S2V5VHlwZSwgaW50IGJpdExlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlLCBWZWN0
b3I8dWludDhfdD4gcHJpdmF0ZUtleSk7CisgICAgU2VjdXJpdHlJZGVudGl0eVBFTShjb25zdCBT
dHJpbmcmIGNlcnRpZmljYXRlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZWNJZGVudGl0eVJl
Zj4gaWRlbnRpdHkoKTsKKworICAgIFN0cmluZyBjZXJ0aWZpY2F0ZSgpIHsgcmV0dXJuIG1fY2Vy
dGlmaWNhdGU7IH0KKyAgICBTdHJpbmcgcHJpdmF0ZUtleSgpIHsgcmV0dXJuIG1fcHJpdmF0ZUtl
eTsgfQorICAgIFN0cmluZyBwdWJsaWNLZXkoKSB7IHJldHVybiBtX3B1YmxpY0tleTsgfQorcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZUNlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgdXBkYXRlUHJpdmF0ZUtleShjb25zdCBTdHJpbmcmKTsKKworICAgIEtleVR5cGUgbV9rZXlU
eXBlIHsgS2V5VHlwZTo6TnVsbFR5cGUgfTsKKyAgICBpbnQgbV9iaXRMZW5ndGggeyAwIH07Cisg
ICAgU3RyaW5nIG1fY2VydGlmaWNhdGU7CisgICAgU3RyaW5nIG1fcHJpdmF0ZUtleTsKKyAgICBT
dHJpbmcgbV9wdWJsaWNLZXk7Cit9OworCitjbGFzcyBDb25uZWN0aW9uRW50aXR5IDogcHVibGlj
IFJlZkNvdW50ZWQ8Q29ubmVjdGlvbkVudGl0eT4geworcHVibGljOgorICAgIENvbm5lY3Rpb25F
bnRpdHkoU29ja2V0OjpTb2NrZXQgc29ja2V0LCBzc2w6OnVuaXF1ZV9wdHI8U1NMPiBzc2wpCisg
ICAgICAgIDogbV9zb2NrZXQoc29ja2V0KQorICAgICAgICAsIG1fc3NsKFdURk1vdmUoc3NsKSkg
eyB9CisgICAgfkNvbm5lY3Rpb25FbnRpdHkoKSB7IGNhbmNlbCgpOyB9CisKKyAgICBTb2NrZXQ6
OlNvY2tldCBzb2NrZXQoKSB7IHJldHVybiBtX3NvY2tldDsgfQorICAgIFNTTCogc3NsKCkgeyBy
ZXR1cm4gbV9zc2wuZ2V0KCk7IH0KKworICAgIHZvaWQgY2FuY2VsKCk7Citwcml2YXRlOgorICAg
IFNvY2tldDo6U29ja2V0IG1fc29ja2V0IHsgU29ja2V0OjpJbnZhbGlkU29ja2V0IH07CisgICAg
c3NsOjp1bmlxdWVfcHRyPFNTTD4gbV9zc2w7Cit9OworCitjbGFzcyBDb25uZWN0aW9uTGlzdGVu
ZXIgeworcHVibGljOgorICAgIHVzaW5nIENlcnRpZmljYXRlVmVyaWZpZXIgPSBpbnQgKCopKGlu
dCBwcmV2ZXJpZnlfb2ssIFg1MDlfU1RPUkVfQ1RYKik7CisgICAgQ29ubmVjdGlvbkxpc3RlbmVy
KCk7CisgICAgfkNvbm5lY3Rpb25MaXN0ZW5lcigpOworCisgICAgdWludDE2X3QgcG9ydCgpIGNv
bnN0OworICAgIGJvb2wgaXNWYWxpZCgpOworICAgIGJvb2wgaXNTZWN1cmUoKTsKKworICAgIHZv
aWQgc2V0U2VjSWRlbnRpdHlSZWYoc3RkOjp1bmlxdWVfcHRyPFNlY0lkZW50aXR5UmVmPiYmKTsK
KyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlcihGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0JiYs
IHNzbDo6dW5pcXVlX3B0cjxTU0w+JiYpPiYmKTsKKyAgICB2b2lkIHJlZ2lzdGVyVmVyaWZpZXIo
Q2VydGlmaWNhdGVWZXJpZmllciYmKTsKKyAgICB2b2lkIHN0YXJ0KHVpbnQxNl90IHRhcmdldFBv
cnQgPSAwKTsKKyAgICB2b2lkIHN0b3AoKTsKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZChT
b2NrZXQ6OlNvY2tldCYmLCBzc2w6OnVuaXF1ZV9wdHI8U1NMPiYmKT4gbV9jb25uZWN0aW9uSGFu
ZGxlcjsKKyAgICBDZXJ0aWZpY2F0ZVZlcmlmaWVyIG1fdmVyaWZpZXIgeyBudWxscHRyIH07Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNlY0lkZW50aXR5UmVmPiBtX3NlY3VyaXR5SWRlbnRpdHkgeyBu
dWxscHRyIH07CisKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9u
TGlzdGVuZXIqKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8U1NMPiBhY2NlcHRTU0xDb25uZWN0aW9u
KFNvY2tldDo6U29ja2V0LCBTZWNJZGVudGl0eVJlZiYpOworCisgICAgU29ja2V0OjpTb2NrZXQg
bV9saXN0ZW5pbmdTb2NrZXQgeyBTb2NrZXQ6OkludmFsaWRTb2NrZXQgfTsKKyAgICB1aW50MTZf
dCBtX3BvcnQgeyAwIH07CisgICAgYm9vbCBtX2xpc3RlbmluZyB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2xpc3RlbmluZ1N0b3BwZWQgeyBmYWxzZSB9OworfTsKKworc3RydWN0IEhUVFBSZXF1ZXN0
IHsKKyAgICBzdGF0aWMgSFRUUFJlcXVlc3QgcGFyc2VIVFRQUmVxdWVzdChjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlcik7CisKKyAgICBTdHJpbmcgcGF0aDsKKyAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBoZWFkZXJGaWVsZHM7CisgICAgU3RyaW5nIGJvZHk7CisgICAgYm9vbCBjb21w
bGV0ZSB7IGZhbHNlIH07Cit9OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9D
b25uZWN0aW9uTGlzdGVuZXJQT1NJWC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nvbm5lY3Rp
b25MaXN0ZW5lclBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmMzMDY1ZGIyYmQ1OGMyNTljYWNjM2Qy
NGYzY2IxNDcyYjdmOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9D
b25uZWN0aW9uTGlzdGVuZXJQT1NJWC5jcHAKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb25MaXN0ZW5lci5o
IgorCisjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3N0YXRpYyBjb25zdCBm
bG9hdCBQb2xsaW5nSW50ZXJ2YWxJblNlY29uZHMgPSAwLjAyOyAvLyAyMG1zCisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKworI2lmIEhBVkUoU1NMKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZVNTTExpYnJhcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzc2xJbml0aWFsaXpl
ZDsKKyAgICBzdGQ6OmNhbGxfb25jZShzc2xJbml0aWFsaXplZCwgW10geworICAgICAgICBTU0xf
bGlicmFyeV9pbml0KCk7CisgICAgfSk7Cit9CisjZW5kaWYKKworU2VjdXJpdHlJZGVudGl0eVBF
TTo6U2VjdXJpdHlJZGVudGl0eVBFTShLZXlUeXBlIGtleVR5cGUsIGludCBiaXRMZW5ndGgsIGNv
bnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgcHJpdmF0ZUtleSkKKyAgICA6
IG1fa2V5VHlwZShrZXlUeXBlKQorICAgICwgbV9iaXRMZW5ndGgoYml0TGVuZ3RoKQoreworICAg
IHVwZGF0ZUNlcnRpZmljYXRlKGNlcnRpZmljYXRlKTsKKyAgICB1cGRhdGVQcml2YXRlS2V5KHBy
aXZhdGVLZXkpOworfQorCitTZWN1cml0eUlkZW50aXR5UEVNOjpTZWN1cml0eUlkZW50aXR5UEVN
KEtleVR5cGUga2V5VHlwZSwgaW50IGJpdExlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmlj
YXRlLCBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleSkKKyAgICA6IG1fa2V5VHlwZShrZXlUeXBl
KQorICAgICwgbV9iaXRMZW5ndGgoYml0TGVuZ3RoKQoreworICAgIFN0cmluZ0J1aWxkZXIgcHJp
dmF0ZUtleVBFTTsKKyAgICBwcml2YXRlS2V5UEVNLmFwcGVuZCgiLS0tLS1CRUdJTiBQUklWQVRF
IEtFWS0tLS0tXG4iKTsKKyAgICBwcml2YXRlS2V5UEVNLmFwcGVuZChiYXNlNjRFbmNvZGVUb1N0
cmluZyhwcml2YXRlS2V5LmRhdGEoKSwgcHJpdmF0ZUtleS5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6SW5zZXJ0TEZzKSwgIlxuIik7CisgICAgcHJpdmF0ZUtleVBFTS5hcHBlbmQoIi0tLS0t
RU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIpOworCisgICAgU3RyaW5nQnVpbGRlciBjZXJ0aWZpY2F0
ZVBFTTsKKyAgICBjZXJ0aWZpY2F0ZVBFTS5hcHBlbmQoIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUt
LS0tLVxuIik7CisgICAgY2VydGlmaWNhdGVQRU0uYXBwZW5kKGJhc2U2NEVuY29kZVRvU3RyaW5n
KGNlcnRpZmljYXRlLmRhdGEoKSwgY2VydGlmaWNhdGUuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6Okluc2VydExGcyksICJcbiIpOworICAgIGNlcnRpZmljYXRlUEVNLmFwcGVuZCgiLS0tLS1F
TkQgQ0VSVElGSUNBVEUtLS0tLVxuIik7CisKKyAgICB1cGRhdGVDZXJ0aWZpY2F0ZShjZXJ0aWZp
Y2F0ZVBFTS50b1N0cmluZygpKTsKKyAgICB1cGRhdGVQcml2YXRlS2V5KHByaXZhdGVLZXlQRU0u
dG9TdHJpbmcoKSk7Cit9CisKK1NlY3VyaXR5SWRlbnRpdHlQRU06OlNlY3VyaXR5SWRlbnRpdHlQ
RU0oY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSkKK3sKKyAgICB1cGRhdGVDZXJ0aWZpY2F0ZShj
ZXJ0aWZpY2F0ZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxTZWNJZGVudGl0eVJlZj4gU2VjdXJp
dHlJZGVudGl0eVBFTTo6aWRlbnRpdHkoKQoreworI2lmIEhBVkUoU1NMKQorICAgIGluaXRpYWxp
emVTU0xMaWJyYXJ5KCk7CisKKyAgICBhdXRvIGlkZW50aXR5ID0gbWFrZVVuaXF1ZTxTZWNJZGVu
dGl0eVJlZj4oKTsKKyAgICBhdXRvIHBlbUxhdGluID0gbV9wcml2YXRlS2V5LmxhdGluMSgpOwor
ICAgIGF1dG8gYmlvUHJpdmF0ZUtleSA9IHNzbDo6dW5pcXVlX3B0cjxCSU8+KEJJT19uZXdfbWVt
X2J1ZihwZW1MYXRpbi5kYXRhKCksIHBlbUxhdGluLmxlbmd0aCgpKSk7CisgICAgaWYgKCFiaW9Q
cml2YXRlS2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZGVudGl0eS0+c2V0UHJp
dmF0ZUtleShzc2w6OnVuaXF1ZV9wdHI8RVZQX1BLRVk+KFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5
KGJpb1ByaXZhdGVLZXkuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKSk7CisKKyAg
ICBwZW1MYXRpbiA9IG1fY2VydGlmaWNhdGUubGF0aW4xKCk7CisgICAgYXV0byBiaW9DZXJ0aWZp
Y2F0ZT0gc3NsOjp1bmlxdWVfcHRyPEJJTz4oQklPX25ld19tZW1fYnVmKHBlbUxhdGluLmRhdGEo
KSwgcGVtTGF0aW4ubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWJpb0NlcnRpZmljYXRlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZGVudGl0eS0+c2V0WDUwOShzc2w6OnVuaXF1ZV9wdHI8
WDUwOT4oUEVNX3JlYWRfYmlvX1g1MDkoYmlvQ2VydGlmaWNhdGUuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIpKSk7CisKKyAgICByZXR1cm4gaWRlbnRpdHk7CisjZWxzZQorICAgIHJl
dHVybiBudWxscHRyOworI2VuZGlmCit9CisKK3ZvaWQgU2VjdXJpdHlJZGVudGl0eVBFTTo6dXBk
YXRlQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZVBFTSkKK3sKKyNpZiBIQVZF
KFNTTCkKKyAgICBpbml0aWFsaXplU1NMTGlicmFyeSgpOworICAgIGF1dG8gY2VydGlmaWNhdGVQ
RU1MYXRpbiA9IGNlcnRpZmljYXRlUEVNLmxhdGluMSgpOworICAgIGF1dG8gYmlvQ2VydGlmaWNh
dGUgPSBzc2w6OnVuaXF1ZV9wdHI8QklPPihCSU9fbmV3X21lbV9idWYoY2VydGlmaWNhdGVQRU1M
YXRpbi5kYXRhKCksIGNlcnRpZmljYXRlUEVNTGF0aW4ubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWJp
b0NlcnRpZmljYXRlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byB4NTA5ID0gc3NsOjp1bmlx
dWVfcHRyPFg1MDk+KFBFTV9yZWFkX2Jpb19YNTA5KGJpb0NlcnRpZmljYXRlLmdldCgpLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgaWYgKCF4NTA5KQorICAgICAgICByZXR1cm47
CisgICAgYXV0byBiaW9DZXJ0aWZpY2F0ZVBFTSA9IHNzbDo6dW5pcXVlX3B0cjxCSU8+KEJJT19u
ZXcoQklPX3NfbWVtKCkpKTsKKyAgICBpZiAoIWJpb0NlcnRpZmljYXRlKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkoYmlvQ2VydGlmaWNhdGVQRU0uZ2V0KCks
IHg1MDkuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisgICAgQlVGX01FTSogbWVtID0gbnVsbHB0
cjsKKyAgICBCSU9fZ2V0X21lbV9wdHIoYmlvQ2VydGlmaWNhdGVQRU0uZ2V0KCksICZtZW0pOwor
ICAgIG1fY2VydGlmaWNhdGUgPSBTdHJpbmcobWVtLT5kYXRhLCBtZW0tPmxlbmd0aCk7CisKKyAg
ICBhdXRvIHB1YmxpY0tleSA9IHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4oWDUwOV9nZXRfcHVi
a2V5KHg1MDkuZ2V0KCkpKTsKKyAgICBpZiAoIXB1YmxpY0tleSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gYmlvUHVibGljS2V5UEVNID0gc3NsOjp1bmlxdWVfcHRyPEJJTz4oQklPX25ldyhC
SU9fc19tZW0oKSkpOworICAgIGlmICghYmlvUHVibGljS2V5UEVNKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1BVQktFWShiaW9QdWJsaWNLZXlQRU0uZ2V0KCksIHB1
YmxpY0tleS5nZXQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBCSU9fZmx1c2goYmlvUHVibGlj
S2V5UEVNLmdldCgpKTsKKyAgICBCSU9fZ2V0X21lbV9wdHIoYmlvUHVibGljS2V5UEVNLmdldCgp
LCAmbWVtKTsKKyAgICBtX3B1YmxpY0tleSA9IFN0cmluZyhtZW0tPmRhdGEsIG1lbS0+bGVuZ3Ro
KTsKKyNlbmRpZgorfQorCit2b2lkIFNlY3VyaXR5SWRlbnRpdHlQRU06OnVwZGF0ZVByaXZhdGVL
ZXkoY29uc3QgU3RyaW5nJiBwcml2YXRlS2V5UEVNKQoreworI2lmIEhBVkUoU1NMKQorICAgIGlu
aXRpYWxpemVTU0xMaWJyYXJ5KCk7CisKKyAgICBhdXRvIHByaXZhdGVLZXlQRU1MYXRpbiA9IHBy
aXZhdGVLZXlQRU0ubGF0aW4xKCk7CisgICAgYXV0byBiaW9Qcml2YXRlS2V5ID0gc3NsOjp1bmlx
dWVfcHRyPEJJTz4oQklPX25ld19tZW1fYnVmKHByaXZhdGVLZXlQRU1MYXRpbi5kYXRhKCksIHBy
aXZhdGVLZXlQRU1MYXRpbi5sZW5ndGgoKSkpOworICAgIGlmICghYmlvUHJpdmF0ZUtleSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gcHJpdmF0ZUtleSA9IHNzbDo6dW5pcXVlX3B0cjxFVlBf
UEtFWT4oUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoYmlvUHJpdmF0ZUtleS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIGlmICghcHJpdmF0ZUtleSkKKyAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gYmlvUHJpdmF0ZUtleVBFTSA9IHNzbDo6dW5pcXVlX3B0cjxCSU8+KEJJ
T19uZXcoQklPX3NfbWVtKCkpKTsKKyAgICBpZiAoIWJpb1ByaXZhdGVLZXlQRU0pCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KGJpb1ByaXZhdGVL
ZXlQRU0uZ2V0KCksIHByaXZhdGVLZXkuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDAsIDAsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm47CisgICAgQlVGX01FTSogbWVtID0gbnVsbHB0cjsKKyAg
ICBCSU9fZ2V0X21lbV9wdHIoYmlvUHJpdmF0ZUtleVBFTS5nZXQoKSwgJm1lbSk7CisgICAgbV9w
cml2YXRlS2V5ID0gU3RyaW5nKG1lbS0+ZGF0YSwgbWVtLT5sZW5ndGgpOworCisgICAgYXV0byBi
aW9QdWJsaWNLZXlQRU0gPSBzc2w6OnVuaXF1ZV9wdHI8QklPPihCSU9fbmV3KEJJT19zX21lbSgp
KSk7CisgICAgaWYgKCFiaW9QdWJsaWNLZXlQRU0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IVBFTV93cml0ZV9iaW9fUFVCS0VZKGJpb1B1YmxpY0tleVBFTS5nZXQoKSwgcHJpdmF0ZUtleS5n
ZXQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBCSU9fZ2V0X21lbV9wdHIoYmlvUHVibGljS2V5
UEVNLmdldCgpLCAmbWVtKTsKKyAgICBtX3B1YmxpY0tleSA9IFN0cmluZyhtZW0tPmRhdGEsIG1l
bS0+bGVuZ3RoKTsKKyNlbmRpZgorfQorCit2b2lkIENvbm5lY3Rpb25FbnRpdHk6OmNhbmNlbCgp
Cit7CisgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldChtX3NvY2tldCkpIHsKKyAgICAgICAg
U29ja2V0OjpzaHV0ZG93bihtX3NvY2tldCk7CisgICAgICAgIFNvY2tldDo6Y2xvc2UobV9zb2Nr
ZXQpOworICAgICAgICBtX3NvY2tldCA9IFNvY2tldDo6SW52YWxpZFNvY2tldDsKKyAgICB9Cit9
CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTb2NrZXQ6OlNvY2tldCwgdWludDE2
X3Q+PiBjcmVhdGVMaXN0ZW5pbmdTb2NrZXQodWludDE2X3QgdGFyZ2V0UG9ydCkKK3sKKyAgICBj
b25zdCBpbnQgQmFja2xvZyA9IDg7CisgICAgYXV0byBsaXN0ZW5pbmdTb2NrZXQgPSBTb2NrZXQ6
OnNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKCFTb2NrZXQ6OmlzVmFs
aWRTb2NrZXQobGlzdGVuaW5nU29ja2V0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHVpbnQxNl90IHN0YXJ0UG9ydCA9IDQ5MTUyOworICAgIHVpbnQxNl90IGVuZFBvcnQg
PSA2NTUzNTsKKyAgICBpZiAodGFyZ2V0UG9ydCkKKyAgICAgICAgc3RhcnRQb3J0ID0gZW5kUG9y
dCA9IHRhcmdldFBvcnQ7CisgICAgLy8gUG9ydHMgNDkxNTItNjU1MzUgYXJlIHVuYWxsb2NhdGVk
IHBvcnRzLiBUcnkgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGZyZWUuCisgICAgZm9yICh1aW50
MTZfdCBwb3J0ID0gc3RhcnRQb3J0OyBwb3J0IDw9IGVuZFBvcnQ7IHBvcnQrKykgeworICAgICAg
ICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKKyAgICAgICAgbWVtc2V0KCZuYW1lLCAwLCBzaXpl
b2YobmFtZSkpOworICAgICAgICBuYW1lLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBu
YW1lLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIG5hbWUuc2luX2FkZHIuc19hZGRy
ID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIGlmIChiaW5kKGxpc3RlbmluZ1NvY2tldCwg
cmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6ZW9mKG5hbWUpKSA8IDApIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgcG9ydCBpcyBidXN5LiBUcnkgdGhlIG5leHQgcG9ydC4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICg6Omxpc3RlbihsaXN0
ZW5pbmdTb2NrZXQsIEJhY2tsb2cpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgICAgU29j
a2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsaXN0ZW5p
bmdTb2NrZXQsIHBvcnQpOyAvLyBTdWNjZXNzZnVsbHkgc2V0IHVwIGxpc3RlbmluZyBwb3J0Lgor
ICAgIH0KKworICAgIC8vIENvdWxkbid0IGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQuCisgICAgU29j
a2V0OjpjbG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKK0Nvbm5lY3Rpb25MaXN0ZW5lcjo6Q29ubmVjdGlvbkxpc3RlbmVyKCkKK3sKK30KKworQ29u
bmVjdGlvbkxpc3RlbmVyOjp+Q29ubmVjdGlvbkxpc3RlbmVyKCkKK3sKKyAgICBzdG9wKCk7Cit9
CisKK2Jvb2wgQ29ubmVjdGlvbkxpc3RlbmVyOjppc1ZhbGlkKCkKK3sKKyAgICByZXR1cm4gU29j
a2V0Ojppc1ZhbGlkU29ja2V0KG1fbGlzdGVuaW5nU29ja2V0KTsKK30KKwordWludDE2X3QgQ29u
bmVjdGlvbkxpc3RlbmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wb3J0OworfQor
Cit2b2lkIENvbm5lY3Rpb25MaXN0ZW5lcjo6c3RhcnQodWludDE2X3QgdGFyZ2V0UG9ydCkKK3sK
KyAgICBpZiAobV9saXN0ZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc29ja2V0
X3BvcnQgPSBjcmVhdGVMaXN0ZW5pbmdTb2NrZXQodGFyZ2V0UG9ydCk7CisgICAgaWYgKCFzb2Nr
ZXRfcG9ydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBzb2Nr
ZXRfcG9ydC0+Zmlyc3Q7CisgICAgbV9wb3J0ID0gc29ja2V0X3BvcnQtPnNlY29uZDsKKyAgICBt
X2xpc3RlbmluZ1N0b3BwZWQgPSBmYWxzZTsKKyAgICBtX2xpc3RlbmluZyA9IHRydWU7CisgICAg
ZGlzcGF0Y2hMaXN0ZW5pbmcodGhpcyk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3RlbmVyOjpz
dG9wKCkKK3sKKyAgICBpZiAoIW1fbGlzdGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2xpc3RlbmluZ1N0b3BwZWQgPSBmYWxzZTsKKyAgICBtX2xpc3RlbmluZyA9IGZhbHNlOworICAg
IFV0aWw6OnJ1bigmbV9saXN0ZW5pbmdTdG9wcGVkKTsKKyAgICBTb2NrZXQ6OmNsb3NlKG1fbGlz
dGVuaW5nU29ja2V0KTsKK30KKwordm9pZCBDb25uZWN0aW9uTGlzdGVuZXI6OnJlZ2lzdGVySGFu
ZGxlcihGdW5jdGlvbjx2b2lkKFNvY2tldDo6U29ja2V0JiYsIHNzbDo6dW5pcXVlX3B0cjxTU0w+
JiYpPiYmIGhhbmRsZXIpCit7CisgICAgbV9jb25uZWN0aW9uSGFuZGxlciA9IFdURk1vdmUoaGFu
ZGxlcik7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3RlbmVyOjpyZWdpc3RlclZlcmlmaWVyKENl
cnRpZmljYXRlVmVyaWZpZXImJiB2ZXJpZmllcikKK3sKKyAgICBtX3ZlcmlmaWVyID0gV1RGTW92
ZSh2ZXJpZmllcik7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkxpc3RlbmVyOjpzZXRTZWNJZGVudGl0
eVJlZihzdGQ6OnVuaXF1ZV9wdHI8U2VjSWRlbnRpdHlSZWY+JiYgaWRlbnRpdHkpCit7CisgICAg
bV9zZWN1cml0eUlkZW50aXR5ID0gV1RGTW92ZShpZGVudGl0eSk7Cit9CisKK2Jvb2wgQ29ubmVj
dGlvbkxpc3RlbmVyOjppc1NlY3VyZSgpCit7CisgICAgaWYgKG1fc2VjdXJpdHlJZGVudGl0eSAm
JiBtX3NlY3VyaXR5SWRlbnRpdHktPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3NzbDo6dW5pcXVlX3B0cjxTU0w+IENvbm5lY3Rpb25M
aXN0ZW5lcjo6YWNjZXB0U1NMQ29ubmVjdGlvbihTb2NrZXQ6OlNvY2tldCBzb2NrZXQsIFNlY0lk
ZW50aXR5UmVmJiBpZGVudGl0eSkKK3sKKyNpZiBIQVZFKFNTTCkKKyAgICBpbml0aWFsaXplU1NM
TGlicmFyeSgpOworICAgIFNTTF9DVFgqIGNvbnRleHQgPSBTU0xfQ1RYX25ldyhUTFNfbWV0aG9k
KCkpOworICAgIGludCBjZXJ0SW50LCBrZXlJbnQ7CisgICAgaWYgKGlkZW50aXR5Lng1MDkoKSkK
KyAgICAgICAgY2VydEludCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGNvbnRleHQsIGlkZW50
aXR5Lng1MDkoKS5nZXQoKSk7CisgICAgaWYgKGlkZW50aXR5LnByaXZhdGVLZXkoKSkKKyAgICAg
ICAga2V5SW50ID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleShjb250ZXh0LCBpZGVudGl0eS5wcml2
YXRlS2V5KCkuZ2V0KCkpOworCisgICAgU1NMKiBzc2wgPSBTU0xfbmV3KGNvbnRleHQpOworICAg
IGlmIChzc2wpIHsKKyAgICAgICAgaWYgKG1fdmVyaWZpZXIpCisgICAgICAgICAgICBTU0xfc2V0
X3ZlcmlmeShzc2wsIFNTTF9WRVJJRllfUEVFUiB8IFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVS
X0NFUlQsIG1fdmVyaWZpZXIpOworICAgICAgICBTU0xfc2V0X2ZkKHNzbCwgc29ja2V0KTsKKyAg
ICAgICAgaWYgKFNTTF9hY2NlcHQoc3NsKSA8PSAwKSB7CisgICAgICAgICAgICBTU0xfZnJlZShz
c2wpOworICAgICAgICAgICAgc3NsID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICBT
U0xfQ1RYX2ZyZWUoY29udGV4dCk7CisgICAgcmV0dXJuIHNzbDo6dW5pcXVlX3B0cjxTU0w+KHNz
bCk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKK3ZvaWQgQ29ubmVj
dGlvbkxpc3RlbmVyOjpkaXNwYXRjaExpc3RlbmluZyhDb25uZWN0aW9uTGlzdGVuZXIqIHNlbGYp
Cit7CisgICAgaWYgKFNvY2tldDo6aXNTb2NrZXRSZWFkeVJlYWRpbmcoc2VsZi0+bV9saXN0ZW5p
bmdTb2NrZXQpKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBt
ZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGludCBsZW4gPSBzaXplb2Yo
YWRkcik7CisgICAgICAgIFNvY2tldDo6U29ja2V0IHJlc3BvbnNlU29ja2V0ID0gOjphY2NlcHQo
c2VsZi0+bV9saXN0ZW5pbmdTb2NrZXQsIChzb2NrYWRkciopJmFkZHIsICZsZW4pOworICAgICAg
ICBzc2w6OnVuaXF1ZV9wdHI8U1NMPiBzc2w7CisKKyAgICAgICAgYm9vbCBhY2NlcHRlZCA9IFNv
Y2tldDo6aXNWYWxpZFNvY2tldChyZXNwb25zZVNvY2tldCk7CisjaWYgSEFWRShTU0wpCisgICAg
ICAgIGlmIChhY2NlcHRlZCAmJiBzZWxmLT5tX3NlY3VyaXR5SWRlbnRpdHkgJiYgc2VsZi0+aXNT
ZWN1cmUoKSkgeworICAgICAgICAgICAgc3NsID0gc2VsZi0+YWNjZXB0U1NMQ29ubmVjdGlvbihy
ZXNwb25zZVNvY2tldCwgKnNlbGYtPm1fc2VjdXJpdHlJZGVudGl0eSk7CisgICAgICAgICAgICBp
ZiAoIXNzbCkKKyAgICAgICAgICAgICAgICBhY2NlcHRlZCA9IGZhbHNlOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgaWYgKGFjY2VwdGVkICYmIHNlbGYtPm1fY29ubmVjdGlvbkhhbmRsZXIp
IHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAg
ICAgICAgIFNlY29uZHMoUG9sbGluZ0ludGVydmFsSW5TZWNvbmRzKSwKKyAgICAgICAgICAgICAg
ICBbc2VsZiwgcmVzcG9uc2VTb2NrZXQgPSBXVEZNb3ZlKHJlc3BvbnNlU29ja2V0KSwgc3NsID0g
V1RGTW92ZShzc2wpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+bV9j
b25uZWN0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlU29ja2V0KSwgV1RGTW92ZShzc2wpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIFNvY2tldDo6Y2xvc2UocmVzcG9uc2VTb2NrZXQpOworICAgIH0KKworICAgIGlmIChz
ZWxmLT5tX2xpc3RlbmluZyAmJiBzZWxmLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoQWZ0ZXIoCisgICAgICAgICAgICBTZWNvbmRzKFBvbGxpbmdJbnRlcnZh
bEluU2Vjb25kcyksCisgICAgICAgICAgICBbc2VsZl0oKSB7CisgICAgICAgICAgICAgICAgZGlz
cGF0Y2hMaXN0ZW5pbmcoc2VsZik7CisgICAgICAgICAgICB9CisgICAgICAgICk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgU29ja2V0OjpjbG9zZShzZWxmLT5tX2xpc3RlbmluZ1NvY2tldCk7Cisg
ICAgICAgIHNlbGYtPm1fbGlzdGVuaW5nU29ja2V0ID0gU29ja2V0OjpJbnZhbGlkU29ja2V0Owor
ICAgICAgICBzZWxmLT5tX2xpc3RlbmluZ1N0b3BwZWQgPSB0cnVlOworICAgIH0KK30KKworSFRU
UFJlcXVlc3QgSFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3QoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiByZXF1ZXN0VmVjdG9yKQoreworICAgIGNvbnN0IFN0cmluZyBzZXBhcmF0b3IoIlxyXG5c
clxuIik7CisKKyAgICBIVFRQUmVxdWVzdCByZXF1ZXN0OworICAgIFN0cmluZyByZXF1ZXN0U3Ry
aW5nID0gU3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0VmVjdG9yLmRhdGEoKSwgcmVxdWVzdFZlY3Rv
ci5zaXplKCkpOworICAgIGF1dG8gaGVhZGVyQm9keVNlcGFyYXRvciA9IHJlcXVlc3RTdHJpbmcu
ZmluZChzZXBhcmF0b3IpOworCisgICAgaWYgKGhlYWRlckJvZHlTZXBhcmF0b3IgPT0gbm90Rm91
bmQpCisgICAgICAgIHJldHVybiByZXF1ZXN0OworCisgICAgYXV0byBoZWFkZXJTdHJpbmcgPSBy
ZXF1ZXN0U3RyaW5nLnN1YnN0cmluZygwLCBoZWFkZXJCb2R5U2VwYXJhdG9yKTsKKyAgICBhdXRv
IGJvZHlTdHJpbmcgPSByZXF1ZXN0U3RyaW5nLnN1YnN0cmluZyhoZWFkZXJCb2R5U2VwYXJhdG9y
ICsgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKworICAgIGF1dG8gaGVhZGVyTGluZXMgPSBoZWFkZXJT
dHJpbmcuc3BsaXQoIlxyXG4iKTsKKyAgICBhdXRvIGZpcnN0RWxlbWVudHMgPSBoZWFkZXJMaW5l
c1swXS5zcGxpdCgiICIpOworICAgIGlmIChmaXJzdEVsZW1lbnRzLnNpemUoKSA+PSAyKQorICAg
ICAgICByZXF1ZXN0LnBhdGggPSBmaXJzdEVsZW1lbnRzWzFdOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDE7IGkgPCBoZWFkZXJMaW5lcy5zaXplKCk7IGkrKykgeworICAgICAgICBhdXRvIGhlYWRl
clZhbHVlID0gaGVhZGVyTGluZXNbaV0uc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKGhlYWRlclZh
bHVlLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJGaWVsZHMuc2V0KGhl
YWRlclZhbHVlWzBdLCBoZWFkZXJWYWx1ZVsxXSk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3Qu
aGVhZGVyRmllbGRzLmNvbnRhaW5zKCJDb250ZW50LUxlbmd0aCIpKSB7CisgICAgICAgIGludCBj
b250ZW50TGVuZ3RoID0gYXRvaShyZXF1ZXN0LmhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVu
Z3RoIikudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEFTU0VSVChjb250ZW50TGVuZ3RoID49IDAp
OworICAgICAgICBpZiAoYm9keVN0cmluZy5zaXplSW5CeXRlcygpIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb250ZW50TGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgICAg
ICByZXF1ZXN0LmJvZHkgPSBib2R5U3RyaW5nOworICAgIH0KKworICAgIHJlcXVlc3QuY29tcGxl
dGUgPSB0cnVlOworICAgIHJldHVybiByZXF1ZXN0OworfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9Db25uZWN0aW9uUE9TSVguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9D
b25uZWN0aW9uUE9TSVguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZTZiZTk3NTM2MmI0ZTI3NTdkNjRlMjE2
MzA5MjE5YmY0NWVlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Nv
bm5lY3Rpb25QT1NJWC5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSFRUUFNlcnZlci5oIgorI2luY2x1ZGUgIlV0
aWxpdGllcy5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQgUG9sbGluZ0ludGVydmFsSW5TZWNvbmRz
ID0gMC4wMjsgLy8gMjBtcworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyB2
b2lkIHNlbmRCeXRlc1Byb2Nlc3MoUmVmUHRyPENvbm5lY3Rpb25FbnRpdHk+IGNvbm5lY3Rpb25F
bnRpdHksIFZlY3Rvcjx1aW50OF90PiYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlciwgaW50IHNlbnRUb3RhbCkKK3sKKyAgICBTb2NrZXQ6OlNv
Y2tldCBzb2NrZXQgPSBjb25uZWN0aW9uRW50aXR5ID8gY29ubmVjdGlvbkVudGl0eS0+c29ja2V0
KCkgOiBTb2NrZXQ6OkludmFsaWRTb2NrZXQ7CisgICAgU1NMKiBzc2wgPSBjb25uZWN0aW9uRW50
aXR5ID8gY29ubmVjdGlvbkVudGl0eS0+c3NsKCkgOiBudWxscHRyOworCisgICAgaWYgKCFTb2Nr
ZXQ6OmlzVmFsaWRTb2NrZXQoc29ja2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGRvIHsKKyAg
ICAgICAgaWYgKCFTb2NrZXQ6OmlzU29ja2V0UmVhZHlXcml0aW5nKHNvY2tldCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBpbnQgc2VudDsKKyAgICAgICAgdWludDhfdCogcHRyID0g
bWVzc2FnZS5kYXRhKCkgKyBzZW50VG90YWw7CisjaWYgSEFWRShTU0wpCisgICAgICAgIGlmIChz
c2wgJiYgU29ja2V0Ojppc1ZhbGlkU29ja2V0KHNvY2tldCkpCisgICAgICAgICAgICBzZW50ID0g
U1NMX3dyaXRlKHNzbCwgcHRyLCBtZXNzYWdlLnNpemUoKSAtIHNlbnRUb3RhbCk7CisgICAgICAg
IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgaWYgKFNvY2tldDo6aXNWYWxpZFNvY2tldChzb2Nr
ZXQpKQorICAgICAgICAgICAgICAgIHNlbnQgPSBTb2NrZXQ6OndyaXRlKHNvY2tldCwgcHRyLCBt
ZXNzYWdlLnNpemUoKSAtIHNlbnRUb3RhbCk7CisKKyAgICAgICAgQVNTRVJUKHNlbnQgPj0gMCk7
CisgICAgICAgIGlmIChzZW50IDwgMCB8fCBzZW50VG90YWwgKyBzZW50ID49IG1lc3NhZ2Uuc2l6
ZSgpKSB7CisgICAgICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goCisgICAgICAgICAgICAgICAgICAgIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlbnRUb3RhbCArPSBzZW50OworICAgIH0g
d2hpbGUgKGZhbHNlKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaEFmdGVyKAorICAg
ICAgICBTZWNvbmRzKFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kcyksCisgICAgICAgIFtjb25uZWN0
aW9uRW50aXR5LCBtZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VudFRvdGFsXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHNlbmRCeXRlc1Byb2Nlc3MoY29ubmVjdGlvbkVudGl0eSwgV1RGTW92ZShtZXNz
YWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHNlbnRUb3RhbCk7CisgICAgICAgIH0K
KyAgICApOworfQorCit2b2lkIENvbm5lY3Rpb246OnNlbmQoU3RyaW5nJiYgbWVzc2FnZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAoreworICAg
IFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlVmVjdG9yOworICAgIG1lc3NhZ2VWZWN0b3IuYXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UudXRmOCgpLmRhdGEoKSks
ICBtZXNzYWdlLnV0ZjgoKS5sZW5ndGgoKSk7CisKKyAgICBzZW5kKFdURk1vdmUobWVzc2FnZVZl
Y3RvciksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBDb25uZWN0aW9u
OjpzZW5kKFZlY3Rvcjx1aW50OF90PiYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBzZW5kQnl0ZXNQcm9jZXNzKG1f
Y29ubmVjdGlvbiwgV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IDApOworfQorCitzdGF0aWMgdm9pZCByZWNlaXZlQnl0ZXNQcm9jZXNzKFJlZlB0cjxDb25uZWN0
aW9uRW50aXR5PiBjb25uZWN0aW9uRW50aXR5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBTb2NrZXQ6OlNvY2tl
dCBzb2NrZXQgPSBjb25uZWN0aW9uRW50aXR5ID8gY29ubmVjdGlvbkVudGl0eS0+c29ja2V0KCkg
OiBTb2NrZXQ6OkludmFsaWRTb2NrZXQ7CisgICAgU1NMKiBzc2wgPSBjb25uZWN0aW9uRW50aXR5
ID8gY29ubmVjdGlvbkVudGl0eS0+c3NsKCkgOiBudWxscHRyOworCisgICAgaWYgKCFTb2NrZXQ6
OmlzVmFsaWRTb2NrZXQoc29ja2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghU29ja2V0
Ojppc1NvY2tldFJlYWR5UmVhZGluZyhzb2NrZXQpKSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaEFmdGVyKAorICAgICAgICAgICAgU2Vjb25kcyhQb2xsaW5nSW50ZXJ2YWxJblNl
Y29uZHMpLAorICAgICAgICAgICAgW2Nvbm5lY3Rpb25FbnRpdHksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgIHJlY2VpdmVCeXRlc1Byb2Nlc3MoY29ubmVjdGlvbkVudGl0eSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSA0MDk2OworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoYnVmZmVyU2l6ZSk7CisgICAgaW50IGJ5dGVzUmVhZCA9IC0xOwor
I2lmIEhBVkUoU1NMKQorICAgIGlmIChzc2wgJiYgU29ja2V0Ojppc1ZhbGlkU29ja2V0KHNvY2tl
dCkpCisgICAgICAgIGJ5dGVzUmVhZCA9IFNTTF9yZWFkKHNzbCwgcmVzdWx0LmRhdGEoKSwgYnVm
ZmVyU2l6ZSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChTb2NrZXQ6OmlzVmFsaWRT
b2NrZXQoc29ja2V0KSkKKyAgICAgICAgICAgIGJ5dGVzUmVhZCA9IFNvY2tldDo6cmVhZChzb2Nr
ZXQsIHJlc3VsdC5kYXRhKCksIGJ1ZmZlclNpemUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA+IDAp
CisgICAgICAgIHJlc3VsdC5zaHJpbmsoYnl0ZXNSZWFkKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdC5jbGVhcigpOworCisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaCgKKyAgICAgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldICgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVz
dWx0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CisgICAgfQorfQorCit2b2lkIENvbm5l
Y3Rpb246OnJlY2VpdmVCeXRlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgc2l6ZV90IG1pbmltdW1TaXplKSBjb25zdAorewor
ICAgIHJlY2VpdmVCeXRlc1Byb2Nlc3MobV9jb25uZWN0aW9uLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVjZWl2ZUhUVFBSZXF1ZXN0KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPGNoYXI+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBW
ZWN0b3I8Y2hhcj4mJiBidWZmZXIpIGNvbnN0Cit7CisgICAgcmVjZWl2ZUJ5dGVzKFt0aGlzLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBidWZmZXIgPSBX
VEZNb3ZlKGJ1ZmZlcildKFZlY3Rvcjx1aW50OF90PiYmIHJlY2VpdmVkQnVmZmVyKSBtdXRhYmxl
IHsKKyAgICAgICAgYnVmZmVyLmFwcGVuZFZlY3RvcihyZWNlaXZlZEJ1ZmZlcik7CisKKyAgICAg
ICAgYXV0byByZXF1ZXN0ID0gSFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3QocmVjZWl2ZWRC
dWZmZXIpOworICAgICAgICBpZiAocmVxdWVzdC5jb21wbGV0ZSkKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGVsc2UgaWYgKCFyZWNlaXZl
ZEJ1ZmZlci5zaXplKCkpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLT5yZWNlaXZlSFRUUFJlcXVlc3QoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Q29ubmVjdGlvbjo6dGVybWluYXRlKCkKK3sKKyAgICBpZiAobV9jb25uZWN0aW9uKQorICAgICAg
ICBtX2Nvbm5lY3Rpb24tPmNhbmNlbCgpOworfQorCit2b2lkIENvbm5lY3Rpb246OmNhbmNlbCgp
Cit7CisgICAgdGVybWluYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL0hUVFBTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNDlkOTUxMTEwMjk1MGZh
YjdmZTVmNjQ5NGEzNzY2NGU3MjVjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL0hUVFBTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRUUFNlcnZlci5oIgorCisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2Nv
bnN0IEhUVFBSZXNwb25zZSBSZXNwb25zZU5vdEZvdW5kID0geworICAgIDQwNCwKKyAgICB7IH0s
CisgICAgIjxodG1sPjxoZWFkPjx0aXRsZT40MDQgTm90IEZvdW5kPC90aXRsZT48L2hlYWQ+Igor
ICAgICI8Ym9keT48aDE+RmlsZSBub3QgZm91bmQ8L2gxPjwvYm9keT48L2h0bWw+IgorfTsKKwor
SFRUUFNlcnZlcjo6SFRUUFNlcnZlcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0
cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2VzLCBQcm90b2NvbCBwcm90b2NvbCwgQ2VydGlm
aWNhdGVWZXJpZmllciYmIHZlcmlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U2VjSWRlbnRpdHlSZWY+
JiYgaWRlbnRpdHksIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpCisgICAgOiBtX3JlcXVl
c3REYXRhKCBhZG9wdFJlZigqbmV3IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhKHJlc3BvbnNlcykp
ICkKKyAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wpCit7CisgICAgbV9saXN0ZW5lci5yZWdpc3Rl
ckhhbmRsZXIoW3RoaXNdIChTb2NrZXQ6OlNvY2tldCYmIHNvY2tldCwgc3NsOjp1bmlxdWVfcHRy
PFNTTD4mJiBzc2wpIHsKKyAgICAgICAgYXV0byBjb25uZWN0aW9uID0gQ29ubmVjdGlvbihhZG9w
dFJlZihuZXcgQ29ubmVjdGlvbkVudGl0eShzb2NrZXQsIFdURk1vdmUoc3NsKSkpKTsKKyAgICAg
ICAgbV9yZXF1ZXN0RGF0YS0+Y29ubmVjdGlvbnMuYXBwZW5kKGNvbm5lY3Rpb24pOworICAgICAg
ICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9uLCBtX3JlcXVlc3REYXRhKTsKKyAgICB9KTsK
KworICAgIGlmICh2ZXJpZmllcikKKyAgICAgICAgbV9saXN0ZW5lci5yZWdpc3RlclZlcmlmaWVy
KFdURk1vdmUodmVyaWZpZXIpKTsKKworICAgIGlmIChwcm90b2NvbCA9PSBQcm90b2NvbDo6SHR0
cHMpIHsKKyAgICAgICAgaWYgKGlkZW50aXR5KQorICAgICAgICAgICAgbV9saXN0ZW5lci5zZXRT
ZWNJZGVudGl0eVJlZihXVEZNb3ZlKGlkZW50aXR5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fbGlzdGVuZXIuc2V0U2VjSWRlbnRpdHlSZWYodGVzdElkZW50aXR5KCkpOworICAgIH0K
KyAgICBtX2xpc3RlbmVyLnN0YXJ0KHBvcnQgPyAqcG9ydCA6IDApOworfQorCitIVFRQU2VydmVy
OjpIVFRQU2VydmVyKEZ1bmN0aW9uPHZvaWQoQ29ubmVjdGlvbik+JiYgY29ubmVjdGlvbkhhbmRs
ZXIsIFByb3RvY29sIHByb3RvY29sKQorICAgIDogbV9yZXF1ZXN0RGF0YSggYWRvcHRSZWYoKm5l
dyBIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YSh7IH0pKSApCisgICAgLCBtX3Byb3RvY29sKHByb3Rv
Y29sKQoreworICAgIG1fbGlzdGVuZXIucmVnaXN0ZXJIYW5kbGVyKFt0aGlzLCBjb25uZWN0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29ubmVjdGlvbkhhbmRsZXIpXSAoU29ja2V0OjpTb2NrZXQmJiBz
b2NrZXQsIHNzbDo6dW5pcXVlX3B0cjxTU0w+JiYgc3NsKSB7CisgICAgICAgIGF1dG8gY29ubmVj
dGlvbiA9IENvbm5lY3Rpb24obmV3IENvbm5lY3Rpb25FbnRpdHkoc29ja2V0LCBXVEZNb3ZlKHNz
bCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0RGF0YS0+Y29ubmVjdGlvbnMuYXBwZW5kKGNvbm5lY3Rp
b24pOworICAgICAgICBjb25uZWN0aW9uSGFuZGxlcihDb25uZWN0aW9uKGNvbm5lY3Rpb24pKTsK
KyAgICB9KTsKKworICAgIGlmIChwcm90b2NvbCA9PSBQcm90b2NvbDo6SHR0cHMpCisgICAgICAg
IG1fbGlzdGVuZXIuc2V0U2VjSWRlbnRpdHlSZWYodGVzdElkZW50aXR5KCkpOworICAgIG1fbGlz
dGVuZXIuc3RhcnQoKTsKK30KKworSFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIoKQoreworICAgIGNh
bmNlbCgpOworfQorCit1aW50MTZfdCBIVFRQU2VydmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9saXN0ZW5lci5wb3J0KCk7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6Y2FuY2VsKCkK
K3sKKyAgICBtX2xpc3RlbmVyLnN0b3AoKTsKKworICAgIGZvciAoYXV0byBjb25uZWN0aW9uIDog
c3RkOjpleGNoYW5nZShtX3JlcXVlc3REYXRhLT5jb25uZWN0aW9ucywgeyB9KSkKKyAgICAgICAg
Y29ubmVjdGlvbi5jYW5jZWwoKTsKK30KKwordm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1
ZXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEp
Cit7CisgICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoW2Nvbm5lY3Rpb24sIHJlcXVl
c3REYXRhXSAoVmVjdG9yPGNoYXI+JiYgcmVxdWVzdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
cmVxdWVzdC5zaXplKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlcXVlc3REYXRh
LT5yZXF1ZXN0Q291bnQrKzsKKyAgICAgICAgYXV0byBwYXRoID0gcGFyc2VQYXRoKHJlcXVlc3Qp
OworCisgICAgICAgIEhUVFBSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLT5yZXF1ZXN0TWFwLmNvbnRhaW5zKHBhdGgpKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBy
ZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlc3BvbnNlID0gUmVzcG9uc2VOb3RGb3VuZDsKKworICAgICAgICBpZiAocmVzcG9uc2Uu
dGVybWluYXRlQ29ubmVjdGlvbiA9PSBIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246
OlllcykKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udGVybWluYXRlKCk7CisKKyAgICAgICAgY29u
bmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlhbGl6ZSgpLCBbY29ubmVjdGlvbiwgcmVxdWVzdERh
dGEgPSBXVEZNb3ZlKHJlcXVlc3REYXRhKV0gKCkgeworICAgICAgICAgICAgcmVzcG9uZFRvUmVx
dWVzdHMoY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworfQorCitzdGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY+IHRl
c3RJZGVudGl0eSgpCit7CisgICAgVGVzdFdlYktpdEFQSTo6U2VjdXJpdHlJZGVudGl0eVBFTSBz
ZWN1cml0eVBFTShUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50aXR5UEVNOjpLZXlUeXBlOjpS
U0FUeXBlLAorICAgICAgICA0MDk2LAorICAgICAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVy
Ojp0ZXN0Q2VydGlmaWNhdGUoKSwKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6
dGVzdFByaXZhdGVLZXkoKSk7CisgICAgcmV0dXJuIHNlY3VyaXR5UEVNLmlkZW50aXR5KCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0ciA8VGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY+IHRlc3RJ
ZGVudGl0eTIoKQoreworICAgIC8vIENlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSB3ZXJlIGdl
bmVyYXRlZCBieSBydW5uaW5nIHRoaXMgY29tbWFuZDoKKyAgICAvLyBvcGVuc3NsIHJlcSAteDUw
OSAtbmV3a2V5IHJzYTo0MDk2IC1rZXlvdXQga2V5LnBlbSAtb3V0IGNlcnQucGVtIC1kYXlzIDM2
NSAtbm9kZXMKKyAgICAvLyBhbmQgZW50ZXJpbmcgdGhpcyBpbmZvcm1hdGlvbjoKKyAgICAvKgor
ICAgICBDb3VudHJ5IE5hbWUgKDIgbGV0dGVyIGNvZGUpIFtdOlVTCisgICAgIFN0YXRlIG9yIFBy
b3ZpbmNlIE5hbWUgKGZ1bGwgbmFtZSkgW106TmV3IE1leGljbworICAgICBMb2NhbGl0eSBOYW1l
IChlZywgY2l0eSkgW106U2FudGEgRmUKKyAgICAgT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21w
YW55KSBbXTpTZWxmCisgICAgIE9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24p
IFtdOk15c2VsZgorICAgICBDb21tb24gTmFtZSAoZWcsIGZ1bGx5IHF1YWxpZmllZCBob3N0IG5h
bWUpIFtdOk1lCisgICAgIEVtYWlsIEFkZHJlc3MgW106bWVAZXhhbXBsZS5jb20KKyAgICAgKi8K
KworICAgIFN0cmluZyBwZW1FbmNvZGVkUHJpdmF0ZUtleSgiIgorICAgICJNSUlKUkFJQkFEQU5C
Z2txaGtpRzl3MEJBUUVGQUFTQ0NTNHdnZ2txQWdFQUFvSUNBUURQazQyYVJYVXcxODZtIgorICAg
ICJaQ2RobjlTNUF6NEhOWTFRbXNTNWZ6OGJEOTV6UVZtanJ0QXBKeTdKM05oc0E3bzNsSEU2ckZ6
L1NVTDJKZm5BIgorICAgICJpTWxZcmZkYmhmUC85eGlFZys5RWtFcm0vZ0UySkphOXdXS1FVUnpW
V3pteUIvT0VIREVNTEdkamZrUUJ2V0RpIgorICAgICJHekJub2xNWkdBdjdYQ1RKWU83eUZvbll5
UFR6bURNZURiYmpUVkpTRjJ5Zmd1Z2YzTjJoUkhJeXdWZ21Vc29xIgorICAgICJ4T0FxWk5vWEdr
WE1PUXhVUEM4S1M2SjYyK1FiMU5FMFFkSjZvT055SUVhZ1JkWW9YWmJzcm1QejRzMTNGMmI3Igor
ICAgICJRYUxldnZsNmVtbEpFNDFTT1hURmhPOFBOM1FrNnc0em1Ia2k4QVl3S2hhY0FSTkpQYzdu
VVBscFRRUlc0S2FhIgorICAgICJWU1BIVTNFYnI3cXl0dFMvVU1pVTRXcDdHNmFadi9QZWxxWUJj
ZDIwcFlQa0xjMUNtOUtYMUhsd1o4Y29wS2hKIgorICAgICJnWlJuNzJsK1VNclcwTzZ6cElLbFV5
L2RWVmtpT2ZpMURaNEh6ZHRud3NGdmMySUx2OGFBYjViRXF5dHk5V0daIgorICAgICJxK2dtV2pa
bC9JSjdycnBESDI4dkpLYkRYb1pLbFR3SzkxTTFRT0RsTkNoaWVCdzdtQUo1RWNoQzA5K29OWEcw
IgorICAgICJsMXBpdDZnVlZ0cWNveVppdkpFTTNkb1M5bkptNXNjSWxWTCtoT3dRdytPVlk5VVdM
WFplRVhTNUI3MEVadTYzIgorICAgICJRMFE0TCtscXlwam1pcjJQNm1mb1U3MnV4c2NaSS81eGhB
WGxOODFTQUFuN1pISW9qNTdabSs4b3BaNkJIUzhFIgorICAgICJmaGRuNDQyRGFwNkRRUEJnbUdJ
RXVaOHdoU2dtYlFJREFRQUJBb0lDQVFDV3hIUjRWZlM5cWpIVmx5OG5jRURBIgorICAgICJ0TU1y
MTFDeCtBZmxON0F0UnNScThFOWNYUStpcEd3T2dKTE5PWlBhNUwydFFSNDI2ZzV4M0xsZmg3cSs1
M1NmIgorICAgICJqRmJpVnFYL01oanFzdWRFaWI5MWhQUGNGWWN5alVlbERDS0cxZEdnNWgwVjIz
YW94RUEvQno5RVd6MDRPS1drIgorICAgICJ0MXVVa2FQQ2hONXBCY2ZQcG42TUk4TVZGQjcvVDl6
MzlUMlhTaXl4WCttMlJaR3duZEFaM2M0cmJGM3BUT0UvIgorICAgICJJSDBMelcvUUN2cWJ2cjNn
QUxEWktpVmRrR1dCWGpSMVkwNEpBVkNBZHlHMC9TRnFOaFRJYUQ0TFJ1dzJYMzJ5IgorICAgICI0
UkJ4M0hxciswRithWVI5aCtpYkhBTnZwRkp2OXVoM3VVbzh1MmMzcm1ZR2kwRHNvOTBBQVNIaFBP
L0V5aTErIgorICAgICIveXZvcXl2eUxnM1dqUHQyQ0lQR1BlZ2MyTFNYTlMzQkw2U0tTdWhBYnlW
WnpMZkpLeHdCTWk0V1h3UjBoanc1IgorICAgICJtYzZzcUNVaUVDb0lQcTNUaU95N1gzSVBEYkRC
NGdrTTFZM2xvSXE2V2V4djJxQTBQWWp6RlhZcDRrQUVrbitQIgorICAgICJsKysyNWlFOVpldnNZ
bFlUd25HQlh6YXRldmE2dVZMRXN0ZE4yTW9EY1FFZ1FPSXdYa1pwaHR0ZmRzKzY5REV3IgorICAg
ICJPdzZUWVorYkdQQ0xOZVppYlg3VzN5a3lCY2pqcXE0YWp0UEgwVDlpaEVqSDNJdUhDb1I1dG9K
eVVpZ1haTElXIgorICAgICJBY3plQkhIdzZ4UEtqNlpPR1VQcHFVZ2tsMEVvOTFzalBtamVrRnlX
QURGdjdST3M3OTZHZ2N5bmZJNkdrcnVkIgorICAgICJpOHNQTk80NmZDcWFQZUR6L1BPK1BRS0NB
UUVBL1l6VEEyNXY3Q2xQUlZEYzRKZFhGWUIyWnNZVjRmSnpwM0tQIgorICAgICJxU1ZFaW81OStq
RGVwYkVxa0pDbXhqODAzcHpvT1hWdjhCR3BkU29ueFF5ZE9BTWJHcW9sK1lTTXk1eHFJUmRpIgor
ICAgICIwNkt1NyttYVBUcDRvN21Ib1B0Ulp6RDVXZkVHTVpHZWRrZERkaFlKYjArQ2lFRmNTVFJK
cGRlSG8yVzU0VHF4IgorICAgICIveFc5VnJpcVFpNE8yckwyTjJQTnArWHBpZ25xSmpkOVNqQU9P
d2VZZzJVbG43YlZqdFhUbUllNVByS05vN2IxIgorICAgICJHdVp4Um9kOEVkdEs5bWs2SzZCeExO
M1hJTDFvT3pXZ3BmcWhKUlY1WkdJS1hIUENxdDQvL2FhZDgxRmhDY1NXIgorICAgICJ3QmpFc0Jw
cFl0RFNhTHF5V3NtajA5QUlkejVBbEFTeVV2OWt1V0g5UE9OSk1JY001d0tDQVFFQTBaVUNZNEZ0
IgorICAgICIvOTFRcWFBeXNtdTdVWVhsNDQxMjdLMzRHMjJKZG1ycGlDNVV1eWI1THd0RnZXYjIw
bngzalIwbWNzSSsyR0RHIgorICAgICJFZ3VzZVl0NFphaVJmNDRvS215KzNyYTJRdjJmZ0ZKY2JU
YjBwYTBXSzEvcEJwS1hFTEc5VXNUMlY4WWUwVGp2IgorICAgICJQZExKUDJ0alhIZE5jNzh3NEhx
SXlweHBLRWZXYzdPczc3SHVRRHR6amk0QTBuNGoySllsZ2RET1dQdjUzZXhzIgorICAgICIzWmJn
bFgvQVYyWHJwc3R1UDEvbXFTcG96bEdhSHhzcU1YTWJRYlEvUUdvbExnUUpSN2c5blI5bWJPNXVS
UzNjIgorICAgICJ2bFptSGpaUWpCRTUyRVVLQVVMK2ZUZHRYU1ErT0ZTYUNybyt1SXhDTGlLclph
SjkrVzFsRURHTklqazdZSVNpIgorICAgICJ1NzNBNUh4dXlFa1Rpd0tDQVFCVVN5a3NEdDh1eUYw
T1VsL2NXdlFjdGVTbkxsdkFEbmJjeUgxeVltMXpFd1JXIgorICAgICIxVUJ3SFlKbEpYSU1ucDda
RTVrdzRSWWgzZjFVY250ZVMxOUphOTdxOG41RmdnZTgrWGRmSVFNK0VPdlAzdjNrIgorICAgICJO
VGcrVmtQOUJSQi9HZzBNRmRGVlVYQTVLbUFITmpSVXlUNUFSbHFFQzlvZ1JKTlhnMDVVenNxMlgy
ZmZHTzJoIgorICAgICJxdVpOVnduOFNEWHJCOGlvbDdzOGtWNFo5L2dETC9kSVY2dzJlUFp1MGkv
U21lekFKMlJuZFQvdmZZVlRTVis2IgorICAgICJJQW0vK2lQWXRUSnJGQ1dkUU5zU05EWUFlRjV5
a2IwVjNuSkxZa0RweFpISXBrZ0V5SjFXUGdGUVErdkFFRWZSIgorICAgICJEbE9sZGN3dDJyT1lp
NlVFMzdGZ2hGODBzS3V2NWgvbXlqbGU1TWNwQW9JQkFRQ3RkSVhsbE5sVlNmWFliWjJIIgorICAg
ICJ6V0hhdHRiczNjZnZXb3hkSnVyOTlyNFExMGVKSFZoZWR4WGhDN1o3dmtlem9zeVBiZlJWWU1L
TmJOdnlQRndJIgorICAgICJ4dHFrbHlMbStkbCt1ZmxldUVtcUNvQTBZNmRXOTBuQjNEOGdFWEsx
Zm1VU2U3RG1OREtOTm5ISzJRbDJVNHFJIgorICAgICJuTFNkZHo4Y2lrMXNZc2NsYjA4dHN5Y051
bFZWRTk4dmJTT0JFcVRZUEd3T1pLSmpReWdwWStNMkFna2RzZjJlIgorICAgICJWOXdRejQwUEpt
L2cwaGlycVIzRllOWXExdmxZQjdYUnVnZkxiY3ZBYjl1T2pzNVdtWDdxQW1zUG5MSW5qd3hhIgor
ICAgICI0R2JmZDBRd2h5SFl3R2JqRDN2dll4V2FpMG9kc3ZlUzkxNmpYemlqbHNadUFKU3VIbS9t
RWVBZFFZN0RpN2lrIgorICAgICJTdGJCQW9JQkFRRHBjZVFoY2xhaUxmY3lZckwwa2o1MUs4bnRM
RGZxT1dJSEVwUTJPbDhQNG5KbVNBdFVxSzNwIgorICAgICJCREVtVlR5YnNpd0hkN3NsVGpHZGFa
NWpIS3ZUTkYwZmNBZTg1M0lZb2wxRlR5RDZ0VjEza3VrYnE4OEdoK3h5IgorICAgICJtaUsxVFh0
TGxXTjA2cjQzYW5RcVp5UmJ1NUlvSG1IQXlicGs0U3RxMjl3T1NCb1pkeWFyUVdrbG95aVlKS2RY
IgorICAgICJvRGRrS0Y4Y3dvQmVBZWlSTGtUNDVzdFJOa2xCZzRWbGdDRkVMUE9jV1lNRk9vU2tR
ZzE5VlMvVmFIaTQ4dCt6IgorICAgICI2NjhCbjFVM1U5ZC9pTkNYRk03OGlLcW9KQ0JvVVJ5aXJt
Ry90STZnZkppTG4wNVR6Nm5ZejMxWTQwRm0xU3dnIgorICAgICJoZ095L1RkSk8vTmptVEhCZ3BJ
VFA2bHY2OVF2YVY5eiIpOworCisgICAgU3RyaW5nIHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSgiIgor
ICAgICJNSUlGZ0RDQ0EyZ0NDUUQrUVkxSlJuTTNJakFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnVEVM
TUFrR0ExVUVCaE1DIgorICAgICJWVk14RXpBUkJnTlZCQWdNQ2s1bGR5Qk5aWGhwWTI4eEVUQVBC
Z05WQkFjTUNGTmhiblJoSUVabE1RMHdDd1lEIgorICAgICJWUVFLREFSVFpXeG1NUTh3RFFZRFZR
UUxEQVpOZVhObGJHWXhDekFKQmdOVkJBTU1BazFsTVIwd0d3WUpLb1pJIgorICAgICJodmNOQVFr
QkZnNXRaVUJsZUdGdGNHeGxMbU52YlRBZUZ3MHlNREEzTXpFd09EVTJNRFphRncweU1UQTNNekV3
IgorICAgICJPRFUyTURaYU1JR0JNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0F3S1RtVjNJ
RTFsZUdsamJ6RVJNQThHIgorICAgICJBMVVFQnd3SVUyRnVkR0VnUm1VeERUQUxCZ05WQkFvTUJG
TmxiR1l4RHpBTkJnTlZCQXNNQmsxNWMyVnNaakVMIgorICAgICJNQWtHQTFVRUF3d0NUV1V4SFRB
YkJna3Foa2lHOXcwQkNRRVdEbTFsUUdWNFlXMXdiR1V1WTI5dE1JSUNJakFOIgorICAgICJCZ2tx
aGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUF6NU9ObWtWMU1OZk9wbVFuWVovVXVRTStC
eldOIgorICAgICJVSnJFdVg4L0d3L2VjMEZabzY3UUtTY3V5ZHpZYkFPNk41UnhPcXhjLzBsQzlp
WDV3SWpKV0szM1c0WHovL2NZIgorICAgICJoSVB2UkpCSzV2NEJOaVNXdmNGaWtGRWMxVnM1c2dm
emhCd3hEQ3huWTM1RUFiMWc0aHN3WjZKVEdSZ0wrMXdrIgorICAgICJ5V0R1OGhhSjJNajA4NWd6
SGcyMjQwMVNVaGRzbjRMb0g5emRvVVJ5TXNGWUpsTEtLc1RnS21UYUZ4cEZ6RGtNIgorICAgICJW
RHd2Q2t1aWV0dmtHOVRSTkVIU2VxRGpjaUJHb0VYV0tGMlc3SzVqOCtMTmR4ZG0rMEdpM3I3NWVu
cHBTUk9OIgorICAgICJVamwweFlUdkR6ZDBKT3NPTTVoNUl2QUdNQ29XbkFFVFNUM081MUQ1YVUw
RVZ1Q21tbFVqeDFOeEc2KzZzcmJVIgorICAgICJ2MURJbE9GcWV4dW1tYi96M3BhbUFYSGR0S1dE
NUMzTlFwdlNsOVI1Y0dmSEtLU29TWUdVWis5cGZsREsxdER1IgorICAgICJzNlNDcFZNdjNWVlpJ
am40dFEyZUI4M2JaOExCYjNOaUM3L0dnRytXeEtzcmN2VmhtYXZvSmxvMlpmeUNlNjY2IgorICAg
ICJReDl2THlTbXcxNkdTcFU4Q3ZkVE5VRGc1VFFvWW5nY081Z0NlUkhJUXRQZnFEVnh0SmRhWXJl
b0ZWYmFuS01tIgorICAgICJZcnlSRE4zYUV2WnladWJIQ0pWUy9vVHNFTVBqbFdQVkZpMTJYaEYw
dVFlOUJHYnV0ME5FT0MvcGFzcVk1b3E5IgorICAgICJqK3BuNkZPOXJzYkhHU1ArY1lRRjVUZk5V
Z0FKKzJSeUtJK2UyWnZ2S0tXZWdSMHZCSDRYWitPTmcycWVnMER3IgorICAgICJZSmhpQkxtZk1J
VW9KbTBDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFuSDVzZEJSVHlaRWlJOWJ0Igor
ICAgICJ1bXhTa09zazkzVitDeGtYbDc0dm0yc2psazNKZTNVQkZrK1FZTzlSY2JBc001T2xzdThw
ekFuVUpBTWh2UVpQIgorICAgICJ4VTJDekZBWmROaUwxQ1lFd1BLWEM3Ykd3ZlZyVm9JZExIa0lo
dUhPTy81Ry9LYXp3VFROcmZpZ0VxQU9Ocm5yIgorICAgICJTSFNmYVdLeTZqcEpGUk1IMjhsbE1G
SzVFdjRVU2ZEaEtaWE9CMGJscHJYOVJoMk5EZ2FoaE5LaFdsUkJPMy9nIgorICAgICJMMXlXMVlP
WUNNZGtWMmRPb1pFelk0ZUJHMzRtQ2dTNzJFSThPSllCUFZLR3RUWEQ2Y1B6dWY1clc4dWVIdkVB
IgorICAgICJEemVCcjVFODhVcEx2RlBHZmtLZHpTSC9LT1VYVVdMVzlsbUxWUFhyTDVKZnZjMXRh
VlhodmVVTklSMnZuL0lEIgorICAgICJMUHhsU0JLRDQ0V2k5ODlNZGVoWmJJNy8vclA5UzhlWlpQ
S290VVV4ODllcGpDUnNqbWtHY05zalFlblRWNUI5IgorICAgICJseXJzYmg5OXZpZlI4V3NacDVG
MWFFY21QZFdNTVpNNXBaTFBrK09EdlRjZHFuYmNVSDRtS1ZneXE4Q005dGlZIgorICAgICI0Nml6
aG91M0dTS3ozWDFlWXBZYlpIRjUyZHhtT1VkdnBTb3FmbWxNRjFFZ3Y5NGNyRDF4aDlhc2RqZzJE
blhjIgorICAgICI5NDhZeFBhRmpvT0dkNlluYytmdjlwSnpqVGp4aW1iSWlXbTJyNnl0Mmo5aEF1
S0pYcE5PSWE0b0lNQUlHakNpIgorICAgICJKQUgybnhLR3VxdEFLMmhXYkFDdTYxUlQ1Z0FxQXYv
aEI5SlluYzJPaVEyVm1qWWtPazJHRWRJam4weFNnWDdXIgorICAgICJtSS9oSGJ4S01HM1Jrdjlx
MUN4K1dCL3YxdDg9Iik7CisKKyAgICBhdXRvIHByaXZhdGVLZXlCeXRlcyA9IGJhc2U2NERlY29k
ZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAgYXV0byBjZXJ0aWZpY2F0ZUJ5dGVzID0gYmFz
ZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CisgICAgVGVzdFdlYktpdEFQSTo6U2Vj
dXJpdHlJZGVudGl0eVBFTSBzZWN1cml0eVBFTShUZXN0V2ViS2l0QVBJOjpTZWN1cml0eUlkZW50
aXR5UEVNOjpLZXlUeXBlOjpSU0FUeXBlLAorICAgICAgICA0MDk2LAorICAgICAgICAqY2VydGlm
aWNhdGVCeXRlcywKKyAgICAgICAgKnByaXZhdGVLZXlCeXRlcyk7CisgICAgcmV0dXJuIHNlY3Vy
aXR5UEVNLmlkZW50aXR5KCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0hU
VFBTZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY1Mjg4ZTk3ZmFkNDJjZDI1OGFlMTMxODNlYjRkNmRlYzMxMjVjZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0hUVFBTZXJ2ZXIuaApAQCAtMCwwICsxLDIzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW1wb3J0
IDxOZXR3b3JrL05ldHdvcmsuaD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgor
I2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CisjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworT0JKQ19DTEFTUyBOU1VSTFJlcXVl
c3Q7CisjZWxpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiQ29ubmVjdGlvbkxpc3RlbmVyLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBDb25uZWN0aW9u
Oworc3RydWN0IEhUVFBSZXNwb25zZTsKKworY2xhc3MgSFRUUFNlcnZlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RydWN0IFJlcXVlc3REYXRhOworICAg
IGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1aW50OF90IHsgSHR0cCwgSHR0cHMsIEh0dHBzV2l0aExl
Z2FjeVRMUywgSHR0cDIsIEh0dHBzUHJveHksIEh0dHBzUHJveHlXaXRoQXV0aGVudGljYXRpb24g
fTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB1c2luZyBDZXJ0aWZpY2F0ZVZlcmlmaWVyID0g
RnVuY3Rpb248dm9pZChzZWNfcHJvdG9jb2xfbWV0YWRhdGFfdCwgc2VjX3RydXN0X3QsIHNlY19w
cm90b2NvbF92ZXJpZnlfY29tcGxldGVfdCk+OworCisgICAgSFRUUFNlcnZlcihzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4sIFByb3RvY29sID0g
UHJvdG9jb2w6Okh0dHAsIENlcnRpZmljYXRlVmVyaWZpZXImJiA9IG51bGxwdHIsIFJldGFpblB0
cjxTZWNJZGVudGl0eVJlZj4mJiA9IG51bGxwdHIsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBv
cnQgPSB7IH0pOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIHVzaW5nIENlcnRpZmljYXRlVmVy
aWZpZXIgPSBDb25uZWN0aW9uTGlzdGVuZXI6OkNlcnRpZmljYXRlVmVyaWZpZXI7CisKKyAgICBI
VFRQU2VydmVyKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVz
cG9uc2U+PiwgUHJvdG9jb2wgPSBQcm90b2NvbDo6SHR0cCwgQ2VydGlmaWNhdGVWZXJpZmllciYm
ID0gbnVsbHB0ciwgc3RkOjp1bmlxdWVfcHRyPFNlY0lkZW50aXR5UmVmPiYmID0gbnVsbHB0ciwg
c3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCA9IHsgfSk7CisjZW5kaWYKKyAgICBIVFRQU2Vy
dmVyKEZ1bmN0aW9uPHZvaWQoQ29ubmVjdGlvbik+JiYsIFByb3RvY29sID0gUHJvdG9jb2w6Okh0
dHApOworICAgIH5IVFRQU2VydmVyKCk7CisgICAgVVJMIHVybChjb25zdCBTdHJpbmcmIHBhdGgp
IGNvbnN0OworICAgIHVpbnQxNl90IHBvcnQoKSBjb25zdDsKKyAgICBTdHJpbmcgb3JpZ2luKCkg
Y29uc3Q7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0KGNv
bnN0IFN0cmluZyYgcGF0aCA9ICIvIl9zdHIpIGNvbnN0OworICAgIE5TVVJMUmVxdWVzdCAqcmVx
dWVzdFdpdGhMb2NhbGhvc3QoY29uc3QgU3RyaW5nJiBwYXRoID0gIi8iX3N0cikgY29uc3Q7Cisj
ZW5kaWYKKyAgICBzaXplX3QgdG90YWxSZXF1ZXN0cygpIGNvbnN0OworICAgIHZvaWQgY2FuY2Vs
KCk7CisKKyAgICB2b2lkIGFkZFJlc3BvbnNlKFN0cmluZyYmIHBhdGgsIEhUVFBSZXNwb25zZSYm
KTsKKworICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoT0soQ29ubmVjdGlvbik7CisgICAgc3Rh
dGljIHZvaWQgcmVzcG9uZFdpdGhDaGFsbGVuZ2VUaGVuT0soQ29ubmVjdGlvbik7CisgICAgc3Rh
dGljIFN0cmluZyBwYXJzZVBhdGgoY29uc3QgVmVjdG9yPGNoYXI+JiByZXF1ZXN0KTsKKyAgICBz
dGF0aWMgU3RyaW5nIHBhcnNlQm9keShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBzdGF0aWMg
VmVjdG9yPHVpbnQ4X3Q+IHRlc3RQcml2YXRlS2V5KCk7CisgICAgc3RhdGljIFZlY3Rvcjx1aW50
OF90PiB0ZXN0Q2VydGlmaWNhdGUoKTsKKworcHJpdmF0ZToKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBzdGF0aWMgUmV0YWluUHRyPG53X3BhcmFtZXRlcnNfdD4gbGlzdGVuZXJQYXJhbWV0ZXJz
KFByb3RvY29sLCBDZXJ0aWZpY2F0ZVZlcmlmaWVyJiYsIFJldGFpblB0cjxTZWNJZGVudGl0eVJl
Zj4mJiwgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCk7CisjZW5kaWYKKyAgICBzdGF0aWMg
dm9pZCByZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0aW9uLCBSZWY8UmVxdWVzdERhdGE+KTsKKyAg
ICBjb25zdCBjaGFyKiBzY2hlbWUoKSBjb25zdDsKKworICAgIFJlZjxSZXF1ZXN0RGF0YT4gbV9y
ZXF1ZXN0RGF0YTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8bndfbGlzdGVu
ZXJfdD4gbV9saXN0ZW5lcjsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBDb25uZWN0aW9uTGlz
dGVuZXIgbV9saXN0ZW5lcjsKKyNlbmRpZgorICAgIFByb3RvY29sIG1fcHJvdG9jb2wgeyBQcm90
b2NvbDo6SHR0cCB9OworfTsKKworY2xhc3MgQ29ubmVjdGlvbiB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZW5kKFN0cmluZyYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBudWxscHRyKSBj
b25zdDsKKyAgICB2b2lkIHNlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0OworICAgIHZvaWQgc2VuZEFuZFJlcG9ydEVycm9y
KFZlY3Rvcjx1aW50OF90PiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBjb25z
dDsKKyAgICB2b2lkIHJlY2VpdmVCeXRlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1
aW50OF90PiYmKT4mJiwgc2l6ZV90IG1pbmltdW1TaXplID0gMSkgY29uc3Q7CisgICAgdm9pZCBy
ZWNlaXZlSFRUUFJlcXVlc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Y2hhcj4mJik+
JiYsIFZlY3RvcjxjaGFyPiYmIGJ1ZmZlciA9IHsgfSkgY29uc3Q7CisgICAgdm9pZCB3ZWJTb2Nr
ZXRIYW5kc2hha2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0geyB9KTsKKyAgICB2b2lk
IHRlcm1pbmF0ZSgpOworICAgIHZvaWQgY2FuY2VsKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEhUVFBTZXJ2ZXI7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ29ubmVjdGlvbihu
d19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikKKyAgICAgICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVj
dGlvbikgeyB9CisKKyAgICB2b2lkIHNlbmQoUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgY29uc3Q7CisKKyAgICBSZXRhaW5QdHI8
bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CisjZWxpZiBQTEFURk9STShXSU4pCisgICAg
Q29ubmVjdGlvbihSZWZQdHI8Q29ubmVjdGlvbkVudGl0eT4mJiBjb25uZWN0aW9uKQorICAgICAg
ICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKGNvbm5lY3Rpb24pKSB7IH0KKworICAgIFJlZlB0cjxD
b25uZWN0aW9uRW50aXR5PiBtX2Nvbm5lY3Rpb247CisjZW5kaWYKK307CisKK3N0cnVjdCBIVFRQ
UmVzcG9uc2UgeworICAgIGVudW0gY2xhc3MgVGVybWluYXRlQ29ubmVjdGlvbiB7IE5vLCBZZXMg
fTsKKworICAgIEhUVFBSZXNwb25zZShWZWN0b3I8dWludDhfdD4mJiBib2R5KQorICAgICAgICA6
IGJvZHkoV1RGTW92ZShib2R5KSkgeyB9CisgICAgSFRUUFJlc3BvbnNlKGNvbnN0IFN0cmluZyYg
Ym9keSkKKyAgICAgICAgOiBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KKyAgICBIVFRQ
UmVzcG9uc2UoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIGNvbnN0IFN0
cmluZyYgYm9keSkKKyAgICAgICAgOiBoZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMp
KQorICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhUVFBSZXNw
b25zZSh1bnNpZ25lZCBzdGF0dXNDb2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRl
ckZpZWxkcyA9IHsgfSwgY29uc3QgU3RyaW5nJiBib2R5ID0geyB9KQorICAgICAgICA6IHN0YXR1
c0NvZGUoc3RhdHVzQ29kZSkKKyAgICAgICAgLCBoZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJG
aWVsZHMpKQorICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhU
VFBSZXNwb25zZShUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24pCisgICAg
ICAgIDogdGVybWluYXRlQ29ubmVjdGlvbih0ZXJtaW5hdGVDb25uZWN0aW9uKSB7IH0KKworICAg
IEhUVFBSZXNwb25zZShjb25zdCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7CisgICAgSFRUUFJl
c3BvbnNlKEhUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7CisgICAgSFRUUFJlc3BvbnNlKCkgPSBk
ZWZhdWx0OworICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0b3I9KGNvbnN0IEhUVFBSZXNwb25zZSYp
ID0gZGVmYXVsdDsKKyAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShIVFRQUmVzcG9uc2UmJikg
PSBkZWZhdWx0OworCisgICAgZW51bSBjbGFzcyBJbmNsdWRlQ29udGVudExlbmd0aCA6IGJvb2wg
eyBObywgWWVzIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcmlhbGl6ZShJbmNsdWRlQ29udGVu
dExlbmd0aCA9IEluY2x1ZGVDb250ZW50TGVuZ3RoOjpZZXMpIGNvbnN0OworICAgIHN0YXRpYyBW
ZWN0b3I8dWludDhfdD4gYm9keUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKyAgICB1bnNp
Z25lZCBzdGF0dXNDb2RlIHsgMjAwIH07CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVh
ZGVyRmllbGRzOworICAgIFZlY3Rvcjx1aW50OF90PiBib2R5OworICAgIFRlcm1pbmF0ZUNvbm5l
Y3Rpb24gdGVybWluYXRlQ29ubmVjdGlvbiB7IFRlcm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07Cit9
OworCitzdHJ1Y3QgSFRUUFNlcnZlcjo6UmVxdWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UmVxdWVzdERhdGEsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29w
PiB7CisgICAgUmVxdWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJp
bmcsIEhUVFBSZXNwb25zZT4+IHJlc3BvbnNlcykKKyAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IGxpc3QpIHsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBSZXNwb25zZT4gbWFwOworICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBsaXN0KQorICAgICAgICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWly
LnNlY29uZCk7CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfShyZXNwb25zZXMpKSB7IH0KKyAg
ICAKKyAgICBzaXplX3QgcmVxdWVzdENvdW50IHsgMCB9OworICAgIEhhc2hNYXA8U3RyaW5nLCBI
VFRQUmVzcG9uc2U+IHJlcXVlc3RNYXA7CisgICAgVmVjdG9yPENvbm5lY3Rpb24+IGNvbm5lY3Rp
b25zOworfTsKKworbmFtZXNwYWNlIEgyIHsKKworLy8gaHR0cHM6Ly9odHRwMi5naXRodWIuaW8v
aHR0cDItc3BlYy8jcmZjLnNlY3Rpb24uNC4xCitjbGFzcyBGcmFtZSB7CitwdWJsaWM6CisKKyAg
ICAvLyBodHRwczovL2h0dHAyLmdpdGh1Yi5pby9odHRwMi1zcGVjLyNyZmMuc2VjdGlvbi42Cisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIERhdGEgPSAweDAsCisgICAg
ICAgIEhlYWRlcnMgPSAweDEsCisgICAgICAgIFByaW9yaXR5ID0gMHgyLAorICAgICAgICBSU1RT
dHJlYW0gPSAweDMsCisgICAgICAgIFNldHRpbmdzID0gMHg0LAorICAgICAgICBQdXNoUHJvbWlz
ZSA9IDB4NSwKKyAgICAgICAgUGluZyA9IDB4NiwKKyAgICAgICAgR29Bd2F5ID0gMHg3LAorICAg
ICAgICBXaW5kb3dVcGRhdGUgPSAweDgsCisgICAgICAgIENvbnRpbnVhdGlvbiA9IDB4OSwKKyAg
ICB9OworCisgICAgRnJhbWUoVHlwZSB0eXBlLCB1aW50OF90IGZsYWdzLCB1aW50MzJfdCBzdHJl
YW1JRCwgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWQpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisg
ICAgICAgICwgbV9mbGFncyhmbGFncykKKyAgICAgICAgLCBtX3N0cmVhbUlEKHN0cmVhbUlEKQor
ICAgICAgICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKSB7IH0KKworICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVpbnQ4X3QgZmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZsYWdzOyB9CisgICAgdWludDMyX3Qgc3RyZWFtSUQoKSBjb25zdCB7IHJldHVy
biBtX3N0cmVhbUlEOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwYXlsb2FkKCkgY29u
c3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7Cisg
ICAgdWludDhfdCBtX2ZsYWdzOworICAgIHVpbnQzMl90IG1fc3RyZWFtSUQ7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fcGF5bG9hZDsKK307CisKK2NsYXNzIENvbm5lY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxDb25uZWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb25uZWN0aW9u
PiBjcmVhdGUoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbiB0bHNDb25uZWN0aW9uKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IENvbm5lY3Rpb24odGxzQ29ubmVjdGlvbikpOyB9CisgICAgdm9pZCBz
ZW5kKEZyYW1lJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0
OworICAgIHZvaWQgcmVjZWl2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEZyYW1lJiYpPiYmKSBj
b25zdDsKK3ByaXZhdGU6CisgICAgQ29ubmVjdGlvbihUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9u
IHRsc0Nvbm5lY3Rpb24pCisgICAgICAgIDogbV90bHNDb25uZWN0aW9uKHRsc0Nvbm5lY3Rpb24p
IHsgfQorCisgICAgVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbiBtX3Rsc0Nvbm5lY3Rpb247Cisg
ICAgbXV0YWJsZSBib29sIG1fZXhwZWN0Q2xpZW50Q29ubmVjdGlvblByZWZhY2UgeyB0cnVlIH07
CisgICAgbXV0YWJsZSBib29sIG1fc2VuZFNlcnZlckNvbm5lY3Rpb25QcmVmYWNlIHsgdHJ1ZSB9
OworICAgIG11dGFibGUgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVjZWl2ZUJ1ZmZlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEgyCisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2lmIFBM
QVRGT1JNKENPQ09BKQorUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiB0ZXN0Q2VydGlmaWNh
dGUoKTsKK1JldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5KCk7CitSZXRhaW5Q
dHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikK
K3N0ZDo6dW5pcXVlX3B0cjxUZXN0V2ViS2l0QVBJOjpTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50
aXR5KCk7CitzdGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6U2VjSWRlbnRpdHlSZWY+IHRl
c3RJZGVudGl0eTIoKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9I
VFRQU2VydmVyQ29tbW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlckNvbW1v
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjc1NGZkODA2YTZkODJhMGI3MmNkNjZlMjk5M2FhNDA1ZDg4MDZl
YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSFRUUFNlcnZlckNvbW1v
bi5jcHAKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJIVFRQU2VydmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisgICAgCitzdGF0aWMgQVNDSUlMaXRl
cmFsIHN0YXR1c1RleHQodW5zaWduZWQgc3RhdHVzQ29kZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXR1
c0NvZGUpIHsKKyAgICBjYXNlIDEwMToKKyAgICAgICAgcmV0dXJuICJTd2l0Y2hpbmcgUHJvdG9j
b2xzIl9zOworICAgIGNhc2UgMjAwOgorICAgICAgICByZXR1cm4gIk9LIl9zOworICAgIGNhc2Ug
MzAxOgorICAgICAgICByZXR1cm4gIk1vdmVkIFBlcm1hbmVudGx5Il9zOworICAgIGNhc2UgMzAy
OgorICAgICAgICByZXR1cm4gIkZvdW5kIl9zOworICAgIGNhc2UgNDA0OgorICAgICAgICByZXR1
cm4gIk5vdCBGb3VuZCJfczsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuICJVbmtub3duIFN0YXR1cyBDb2RlIl9zOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRV
VEY4VG9WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7CisgICAgdmVjdG9yLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSksIHV0ZjgubGVuZ3Ro
KCkpOworfQorCitVUkwgSFRUUFNlcnZlcjo6dXJsKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QK
K3sKKyAgICBVUkwgc2VydmVyVVJMID0gYWJvdXRCbGFua1VSTCgpOworICAgIHNlcnZlclVSTC5z
ZXRQcm90b2NvbChzY2hlbWUoKSk7CisgICAgc2VydmVyVVJMLnNldEhvc3QoIjEyNy4wLjAuMSIp
OworICAgIHNlcnZlclVSTC5zZXRQb3J0KHBvcnQoKSk7CisgICAgc2VydmVyVVJMLnNldFBhdGgo
cGF0aCk7CisgICAgcmV0dXJuIHNlcnZlclVSTDsKK30KKworc2l6ZV90IEhUVFBTZXJ2ZXI6OnRv
dGFsUmVxdWVzdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcXVlc3REYXRhLT5yZXF1ZXN0
Q291bnQ7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6YWRkUmVzcG9uc2UoU3RyaW5nJiYgcGF0aCwg
SFRUUFJlc3BvbnNlJiYgcmVzcG9uc2UpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVxdWVz
dERhdGEtPnJlcXVlc3RNYXAuY29udGFpbnMocGF0aCkpOworICAgIG1fcmVxdWVzdERhdGEtPnJl
cXVlc3RNYXAuYWRkKFdURk1vdmUocGF0aCksIFdURk1vdmUocmVzcG9uc2UpKTsKK30KKwordm9p
ZCBIVFRQU2VydmVyOjpyZXNwb25kV2l0aE9LKENvbm5lY3Rpb24gY29ubmVjdGlvbikKK3sKKyAg
ICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlvbl0gKFZlY3RvcjxjaGFy
PiYmKSB7CisgICAgICAgIGNvbm5lY3Rpb24uc2VuZCgKKyAgICAgICAgICAgICJIVFRQLzEuMSAy
MDAgT0tcclxuIgorICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAzNFxyXG5cclxuIgorICAg
ICAgICAgICAgIjxzY3JpcHQ+YWxlcnQoJ3N1Y2Nlc3MhJyk8L3NjcmlwdD4iCisgICAgICAgICk7
CisgICAgfSk7Cit9CisKK3ZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhDaGFsbGVuZ2VUaGVu
T0soQ29ubmVjdGlvbiBjb25uZWN0aW9uKQoreworICAgIGNvbm5lY3Rpb24ucmVjZWl2ZUhUVFBS
ZXF1ZXN0KFtjb25uZWN0aW9uXSAoVmVjdG9yPGNoYXI+JiYpIHsKKyAgICAgICAgY29uc3QgY2hh
ciogY2hhbGxlbmdlSGVhZGVyID0KKyAgICAgICAgIkhUVFAvMS4xIDQwMSBVbmF1dGhvcml6ZWRc
clxuIgorICAgICAgICAiRGF0ZTogU2F0LCAyMyBNYXIgMjAxOSAwNjoyOTowMSBHTVRcclxuIgor
ICAgICAgICAiQ29udGVudC1MZW5ndGg6IDBcclxuIgorICAgICAgICAiV1dXLUF1dGhlbnRpY2F0
ZTogQmFzaWMgcmVhbG09XCJ0ZXN0cmVhbG1cIlxyXG5cclxuIjsKKyAgICAgICAgY29ubmVjdGlv
bi5zZW5kKGNoYWxsZW5nZUhlYWRlciwgW2Nvbm5lY3Rpb25dIHsKKyAgICAgICAgICAgIHJlc3Bv
bmRXaXRoT0soY29ubmVjdGlvbik7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisjaWYgUExB
VEZPUk0oV0lOKQorY29uc3QgY2hhciogc3RybnN0cihjb25zdCBjaGFyKiBoZXlzdGFjaywgY29u
c3QgY2hhciogbmVlZGxlLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGNoYXIqIHNlYXJjaFRhcmdl
dCA9IG5ldyBjaGFyW2xlbmd0aCArIDFdOworICAgIHN0cm5jcHkoc2VhcmNoVGFyZ2V0LCBoZXlz
dGFjaywgbGVuZ3RoKTsKKyAgICBzZWFyY2hUYXJnZXRbbGVuZ3RoXSA9ICdcMCc7CisgICAgY29u
c3QgY2hhciogZm91bmQgPSBzdHJzdHIoc2VhcmNoVGFyZ2V0LCBuZWVkbGUpOworICAgIGRlbGV0
ZSBbXSBzZWFyY2hUYXJnZXQ7CisKKyAgICBpZiAoZm91bmQpCisgICAgICAgIHJldHVybiBoZXlz
dGFjayArIChmb3VuZCAtIHNlYXJjaFRhcmdldCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9Cisj
ZW5kaWYKKworU3RyaW5nIEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4m
IHJlcXVlc3QpCit7CisgICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICBjb25zdCBjaGFyKiBnZXRQYXRoUHJlZml4ID0gIkdFVCAiOworICAgIGNvbnN0IGNo
YXIqIHBvc3RQYXRoUHJlZml4ID0gIlBPU1QgIjsKKyAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4
ID0gIiBIVFRQLzEuMVxyXG4iOworICAgIGNvbnN0IGNoYXIqIHBhdGhFbmQgPSBzdHJuc3RyKHJl
cXVlc3QuZGF0YSgpLCBwYXRoU3VmZml4LCByZXF1ZXN0LnNpemUoKSk7CisgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShwYXRoRW5kLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAx
LjEiKTsKKyAgICBzaXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7CisgICAgaWYgKCFtZW1jbXAo
cmVxdWVzdC5kYXRhKCksIGdldFBhdGhQcmVmaXgsIHN0cmxlbihnZXRQYXRoUHJlZml4KSkpCisg
ICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4oZ2V0UGF0aFByZWZpeCk7CisgICAgZWxz
ZSBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgsIHN0cmxlbihwb3N0
UGF0aFByZWZpeCkpKQorICAgICAgICBwYXRoUHJlZml4TGVuZ3RoID0gc3RybGVuKHBvc3RQYXRo
UHJlZml4KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQ
U2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIpOworICAgIHNpemVfdCBwYXRo
TGVuZ3RoID0gcGF0aEVuZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0aFByZWZpeExlbmd0aDsKKyAg
ICByZXR1cm4gU3RyaW5nKHJlcXVlc3QuZGF0YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExl
bmd0aCk7Cit9CisKK1N0cmluZyBIVFRQU2VydmVyOjpwYXJzZUJvZHkoY29uc3QgVmVjdG9yPGNo
YXI+JiByZXF1ZXN0KQoreworICAgIGNvbnN0IGNoYXIqIGhlYWRlckVuZEJ5dGVzID0gIlxyXG5c
clxuIjsKKyAgICBjb25zdCBjaGFyKiBoZWFkZXJFbmQgPSBzdHJuc3RyKHJlcXVlc3QuZGF0YSgp
LCBoZWFkZXJFbmRCeXRlcywgcmVxdWVzdC5zaXplKCkpICsgc3RybGVuKGhlYWRlckVuZEJ5dGVz
KTsKKyAgICBzaXplX3QgaGVhZGVyTGVuZ3RoID0gaGVhZGVyRW5kIC0gcmVxdWVzdC5kYXRhKCk7
CisgICAgcmV0dXJuIFN0cmluZyhoZWFkZXJFbmQsIHJlcXVlc3Quc2l6ZSgpIC0gaGVhZGVyTGVu
Z3RoKTsKK30KKworY29uc3QgY2hhciogSFRUUFNlcnZlcjo6c2NoZW1lKCkgY29uc3QKK3sKKyAg
ICBjb25zdCBjaGFyKiBzY2hlbWUgPSBudWxscHRyOworICAgIHN3aXRjaCAobV9wcm90b2NvbCkg
eworICAgIGNhc2UgUHJvdG9jb2w6Okh0dHA6CisgICAgICAgIHNjaGVtZSA9ICJodHRwIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6SHR0cHM6CisgICAgY2FzZSBQcm90b2Nv
bDo6SHR0cHNXaXRoTGVnYWN5VExTOgorICAgIGNhc2UgUHJvdG9jb2w6Okh0dHAyOgorICAgICAg
ICBzY2hlbWUgPSAiaHR0cHMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3RvY29sOjpI
dHRwc1Byb3h5OgorICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzUHJveHlXaXRoQXV0aGVudGljYXRp
b246CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBzY2hlbWU7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBIVFRQU2VydmVyOjp0ZXN0UHJpdmF0
ZUtleSgpCit7CisgICAgU3RyaW5nIHBlbUVuY29kZWRQcml2YXRlS2V5KCIiCisgICAgIk1JSUpR
Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRGV1RTNoSStEeFZq
OCsiCisgICAgIjBZTTBwamRQMGtoS0J2THhnWXduSFM4NzVoa1ZtYmNiZCt4TlN6SzhQSVFmQ3Fu
bHBzSmxFSDhITFUvQmFRMnQiCisgICAgIi9HZjljL3cvVGZnaytVVHFLdFdLNEJoQ3VwU0hxVHRs
SHdLazR6a1lSeEZtQUJRa1laREEyVTZRVEJvZWN3WnoiCisgICAgInhLd2U2dUFNK0hsY0dtQnNQ
SzEzc0VtNEhVMmdqOG9tYUZ4cU9RQzVYZTlxdEw2NDh1aDg4YzJwNzV3dnlFMmUiCisgICAgIk5s
REFkWnFzL2ptU3poNEZ3NFB1M0NyRzRlZFdiOFZZU3Vsanhhem16VXlzOU9GUjBOcUdNUXgvNWg4
TW4wb3YiCisgICAgInpMZlRqSkx3bng5NExGaDl3ZmdHK0F1MG1ZRTBjbUNQZDQwUDhReG1NbURQ
WVd3R09zbVR5UW9QZlZ6RDdoYW4iCisgICAgInhRWGl5UlpjSi9qcjZZMDRlblhjOTVJSmt2SVho
a0Fkck5SV1NjTTl4elpnMnRaVlhXTHFmZFBYbVFqUlBsbnQiCisgICAgInV5MTJZQXU1S1FUWnk0
bEpVMDdxQkg1bXhWRk9kNjVESEJaTlRRdzBTRUE4VTVmWUdFWS9sNkt5QVJUT1NmRXciCisgICAg
ImwxMFVPZjFiR1NXN1VtR0NUTUJJRC83Y0NhV3NWa3crRTZHTVM2WFRPT0ExSGxFR1hVYndmUDNZ
c0RIbFFRTUciCisgICAgIjEwdUR2VWo0andETkE2RjNvdTBGNlFRTEVEWHFsSnFtbURtOXhiMW4v
dzNwbVd3ZWRuWVhPMERTY0k1K1dTZzciCisgICAgIjJKNk02bHk0VTNnUlZnUEVpM0J5MHJEVXNK
NDBQK3ppU2FoRkdkZHRmdVQwN3B3alZSUll6bjNrYXk3bTA5cmYiCisgICAgImN6a0JrVUpxL2FB
NVc1aDJPbWxMUWM1K2ptRy9wd0lEQVFBQkFvSUNBR3JhL0NwL2YwWHF2azlTVCtQcnQyL3AiCisg
ICAgImtOdExlRFhjbExTVGNQMEpDWkh1ZlFhRncrN1ZuRkxwcWU0R3ZMcTlCbGxjejhWT3ZRd3Ji
ZS9Dd05XK1Z4QzgiCisgICAgIlJNamdlMnJxQUNnd0doT3gxdDg3bDQ2TmtVUXc3RXkwbENsZThr
citNR2dHR29acXJNRmRLSVJVb012NG5tUTYiCisgICAgInRtYzFGSHY1cExSZTlRK0xwNW5ZUXdH
b1ltWm9VT3Vlb09hT0wwOG00OXBHWFFraU44cEpETXhTZk8zSnZ0c3UiCisgICAgIjRjcUliNmtP
US9kTzFJczFDVHZVUmxkMUlZTEg3WXVTaGk0WkV4MmcyYWMyVXl2dDZZbXh4dk1tQWpCU0twR2Qi
CisgICAgImxvaWVwaG8zL05yREdVS2R2M3E5UVl5enJBOHc5R1QzMkxER3FnQlhKaTFzY0JJOGNF
eGtwNlA0aURsbGh2N3MiCisgICAgInZac3Nwdm9iUkphM08xems4NjNMSFhhMjRKQ255dXppbXFl
eloyT2xoN2w0b2xIb1lENlVGQzlqZmQ0S2NIUmciCisgICAgIjFjNHN5cXQvbjhBSy8xczFlQmZT
OWR6YjVDZmp0OU10S1lzbHh2THpxMVd3T0lOd3o4cklZdVJpMFBjTG05aHMiCisgICAgImwrVTB1
L3pCMzdlTWd2Nitpd0RYazFmU2pidVlzRS9iRVRXWWtuS0dORkZMNUpTaUtWN1dDcG1nTlRUcnJF
NEsiCisgICAgIlM4RTZoUjl1UE9BYW93N3ZQQ0N0NHhMWC80OGwyRUk2WmVxNnFPcHExbEoycWN5
OHI0dHl1UWdOUkxRTWtaZzEiCisgICAgIkF4UWw2dm5ROEN1NGl1K05JaGVmMHk5Wjdxa2ZOdlpl
Q2o1R2xGQjljMllqVjhZMm1kV2ZKQjRxV0szWi8rTUoiCisgICAgIlFPVENLUno3L0x4TE5CVWVw
UmpKQW9JQkFRRDNac1Y1dFdVOVpTS2NWSjlEQzdUWmswUCtsaGNpc1pyMG5MMHQiCisgICAgIlBR
dVFPK3BIdlBJMU1xUm5Oc2tISmh5UG5xVkNpK2RwODl0Sy9JdDU5MFVMbDhvczZVQzFGaHl0QlBv
VDFZUGQiCisgICAgIldHV2VwMnBPYzdiVnBpNGlwMzF5K0ltZmdlWnlKdE1BVGRtZTNrQlBBT2U1
TkdFOUdpZy9sNW5xTHliMDJzZDEiCisgICAgIlFXN08wR2RxTHgzRHBMdzRTTGxoTWY2YUUwdUdS
UzhzZkIwODVlNERHbjU0TzJ3RVZ1U1pxWmw1Tk5FZjM1UnoiCisgICAgIlhnaW0zaCtSV0YxWkZT
UXpqQi9zbU4wWmgrdjNJejd2RUoxaDB5d1Y2bytHenZIa1A5SEU2Z0xJaHR5VjhPRXciCisgICAg
InZseVlrMUdhN3BVVkdSaDhvOE9NZTZSUjlEUWk3SnFDNGVJN0dja21CemFxekpjREFvSUJBUURt
ZGU2QVRldzMiCisgICAgIkg5YlFLNnhuYk1JbmN6L0NPcElJU2RsY0ZiMjNBSEdFYjRiNFZoSkZC
Tnd4ck5MNnRIS1NGTGVZWkZMaFRkaHgiCisgICAgIlBmWHlVTEhOZjVvemRFa2wwV3JsZXJvRGRv
Z2JDeVdnNXVKcDkvUTY4c2J3YkdyOENBbE83WkhZVHJqdVFmMUsiCisgICAgIkFTOXBDbTc3S1Az
azJkM1VsRytwZWxEalhMb0J6aVhxME5qeEpwTXo0NXZySXg4clNXekZOak1HalhUM2ZYYVMiCisg
ICAgIjk2MmsvMEFYZWk1L2JmdWhCeGxtN1BuaTBiUUpJV0ZrZWFVdUdsck9hSERSeFVpWDFyOUla
Uzl3djVsazFQdGciCisgICAgImlkcGJjV3l3MThjRkdUdmpkS2hSYlpIOEVzYm16bU5Oc0NHZGdD
TXFGa0tZc1cxNlFLb0NqL05Bb3ZJM24wcW4iCisgICAgIjZWb1JhMHNHbVRHTkFvSUJBQ2wvbXFa
RXNCdXhTREh5MjlnU01aN0JYZ2xwUWE0M0htZmpsclBzNW5DbUxERW0iCisgICAgIlYzWm03VDdH
Nk1lRE5BMC9MamRRWWx2YVpMRmFWVWI3SENES3NFWUNSakZaNlN0NGh6NG1kWHorWStWTjdiNEYi
CisgICAgIkdPa1RlKytpS3AvTFlzSlh0c0QxRkRXYjJXSVZvN0hjMUFHejhJK2dRSm9TSXVZdVRK
bUx6U00wKzVKRFVPVjEiCisgICAgInk4ZFNiYVAvUnVFdjBxWWprR3FRVms1ZTcwU1V5T3pLVita
eENUaGRIdkZMaW92VE9UVGdldlV6RTc1eHlkZkciCisgICAgImU3b0NtdFR1cnpndmwvNjlWdTVZ
Z2lqMW40Q1dQSEhjcTRDUVcvRE9aN0JoRkdCd2hyVzc5dm9ISkY4UGJ3UE8iCisgICAgIiswRFR1
ZERHWTNuQUQ1c1RuRjh6VXVPYllpaEp0ZnpqL3Q1OWZPTUNnZ0VCQUlZdXVCVUFTYjYyelE0YnY1
L2ciCisgICAgIlZSTS9LU3BmaTlORG5FamZaN3g3aDV6Q2l1Vmd4L1pqcEFsUVJPOHZ6VjE4cm9F
T09LdHg5Y25KZDhBRWQrSGMiCisgICAgIm45M0JvUzFoeDBtaHNWaCsxVFJad3lqeUJYWUpwcXdE
Mnd6MU16MVhPSVE2RXFiTS95UEtURDJnZndnN3lPNTMiCisgICAgInFZeHJ4WnNXYWdWVmNHOVEr
QVJCRVJhdFR3THBvTitmY0pMeHVoNHIvQ2EvTGVwc3htT3JLelRhL01HSzFMaFciCisgICAgInJX
Z0lrMi9vZ0VQTFNwdGoyZDFQRURPK0dBekZ6NFZLamhXMU5sVWg5ZkdpNklKUExITG5CdzNvZGJp
MFM4S1QiCisgICAgImdBOVo1K0xCYzVjbG90QVA1cnRRQThXaC9aQ0VvUFRLVFRBMmJqVzJITWF0
SmNiR21SMEZwQ1FyM0FNMFkxU08iCisgICAgIk1ha0NnZ0VBTHJ1NlFaNllVd0pKRzQ1SDFlcS9y
UGREWTh0cXFqSlZWaUtvQlZ2ektqL1hmSlpZRVZRaUl3NXAiCisgICAgInVvR2hEb3lGdUZVZUlo
L2QxSmMySXJ1eTJXam9Pa2lRWXRJdWdESEh4UnJrTGRRY2pQaGxDVENFL21teVNKdCsiCisgICAg
ImJrVWJpSEliUThkSjV5ajhTS3IwYkh6cUV0T3k5L0plUmprWUdIQzZiVldwcTVGQTJNQmhmNGRO
ako0VURsblQiCisgICAgInZ1ZVBjVGpyN25uZlkxc3p0dmZWbDlEOGRtZ1QrVEJuT09WNnlXajFn
bTViUzFEeFFTTGdObXRLeEo4dEFoMnUiCisgICAgImRFT2J2Y3BTaFAyMkl0T1ZqU2FtcFJ1QXVS
RzI2WmVtRWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNndGR6RGdyRmUiCisgICAgInFKZlU4YmJkYnUy
cGk0N1k0RmRKSzBITGZmbDVSdz09Iik7CisKKyAgICBhdXRvIGRlY29kZWRQcml2YXRlS2V5ID0g
YmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5KTsKKyAgICByZXR1cm4gV1RGTW92ZSgq
ZGVjb2RlZFByaXZhdGVLZXkpOworfQorCitWZWN0b3I8dWludDhfdD4gSFRUUFNlcnZlcjo6dGVz
dENlcnRpZmljYXRlKCkKK3sKKyAgICAvLyBDZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgd2Vy
ZSBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGlzIGNvbW1hbmQ6CisgICAgLy8gb3BlbnNzbCByZXEg
LXg1MDkgLW5ld2tleSByc2E6NDA5NiAta2V5b3V0IGtleS5wZW0gLW91dCBjZXJ0LnBlbSAtZGF5
cyAzNjUgLW5vZGVzCisgICAgLy8gYW5kIGVudGVyaW5nIHRoaXMgaW5mb3JtYXRpb246CisgICAg
LyoKKyAgICAgQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKSBbXTpVUworICAgICBTdGF0ZSBv
ciBQcm92aW5jZSBOYW1lIChmdWxsIG5hbWUpIFtdOk5ldyBNZXhpY28KKyAgICAgTG9jYWxpdHkg
TmFtZSAoZWcsIGNpdHkpIFtdOlNhbnRhIEZlCisgICAgIE9yZ2FuaXphdGlvbiBOYW1lIChlZywg
Y29tcGFueSkgW106U2VsZgorICAgICBPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVnLCBzZWN0
aW9uKSBbXTpNeXNlbGYKKyAgICAgQ29tbW9uIE5hbWUgKGVnLCBmdWxseSBxdWFsaWZpZWQgaG9z
dCBuYW1lKSBbXTpNZQorICAgICBFbWFpbCBBZGRyZXNzIFtdOm1lQGV4YW1wbGUuY29tCisgICAg
ICovCisgICAgCisgICAgU3RyaW5nIHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSgiIgorICAgICJNSUlG
Z0RDQ0EyZ0NDUUNLSGlQUlU1TVF1REFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnVEVMTUFrR0ExVUVC
aE1DIgorICAgICJWVk14RXpBUkJnTlZCQWdNQ2s1bGR5Qk5aWGhwWTI4eEVUQVBCZ05WQkFjTUNG
TmhiblJoSUVabE1RMHdDd1lEIgorICAgICJWUVFLREFSVFpXeG1NUTh3RFFZRFZRUUxEQVpOZVhO
bGJHWXhDekFKQmdOVkJBTU1BazFsTVIwd0d3WUpLb1pJIgorICAgICJodmNOQVFrQkZnNXRaVUJs
ZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEF6TWpNd05UVXdNVFJhRncweU1EQXpNakl3IgorICAgICJO
VFV3TVRSYU1JR0JNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0F3S1RtVjNJRTFsZUdsamJ6
RVJNQThHIgorICAgICJBMVVFQnd3SVUyRnVkR0VnUm1VeERUQUxCZ05WQkFvTUJGTmxiR1l4RHpB
TkJnTlZCQXNNQmsxNWMyVnNaakVMIgorICAgICJNQWtHQTFVRUF3d0NUV1V4SFRBYkJna3Foa2lH
OXcwQkNRRVdEbTFsUUdWNFlXMXdiR1V1WTI5dE1JSUNJakFOIgorICAgICJCZ2txaGtpRzl3MEJB
UUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzcmhONFNQZzhWWS9QdEdETktZM1Q5SklTZ2J5IgorICAg
ICI4WUdNSngwdk8rWVpGWm0zRzNmc1RVc3l2RHlFSHdxcDVhYkNaUkIvQnkxUHdXa05yZnhuL1hQ
OFAwMzRKUGxFIgorICAgICI2aXJWaXVBWVFycVVoNms3WlI4Q3BPTTVHRWNSWmdBVUpHR1F3TmxP
a0V3YUhuTUdjOFNzSHVyZ0RQaDVYQnBnIgorICAgICJiRHl0ZDdCSnVCMU5vSS9LSm1oY2Fqa0F1
VjN2YXJTK3VQTG9mUEhOcWUrY0w4aE5ualpRd0hXYXJQNDVrczRlIgorICAgICJCY09EN3R3cXh1
SG5WbS9GV0VycFk4V3M1czFNclBUaFVkRGFoakVNZitZZkRKOUtMOHkzMDR5UzhKOGZlQ3hZIgor
ICAgICJmY0g0QnZnTHRKbUJOSEpnajNlTkQvRU1aakpnejJGc0JqckprOGtLRDMxY3crNFdwOFVG
NHNrV1hDZjQ2K21OIgorICAgICJPSHAxM1BlU0NaTHlGNFpBSGF6VVZrbkRQY2MyWU5yV1ZWMWk2
bjNUMTVrSTBUNVo3YnN0ZG1BTHVTa0UyY3VKIgorICAgICJTVk5PNmdSK1pzVlJUbmV1UXh3V1RV
ME1ORWhBUEZPWDJCaEdQNWVpc2dFVXprbnhNSmRkRkRuOVd4a2x1MUpoIgorICAgICJna3pBU0Ev
KzNBbWxyRlpNUGhPaGpFdWwwempnTlI1UkJsMUc4SHo5MkxBeDVVRURCdGRMZzcxSStJOEF6UU9o
IgorICAgICJkNkx0QmVrRUN4QTE2cFNhcHBnNXZjVzlaLzhONlpsc0huWjJGenRBMG5DT2Zsa29P
OWllak9wY3VGTjRFVllEIgorICAgICJ4SXR3Y3RLdzFMQ2VORC9zNGttb1JSblhiWDdrOU82Y0kx
VVVXTTU5NUdzdTV0UGEzM001QVpGQ2F2MmdPVnVZIgorICAgICJkanBwUzBIT2ZvNWh2NmNDQXdF
QUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZOEVXYUFGRWZ3N09WK29EIgorICAgICJYVVpT
SVlYcTNFSDJFNXAzcTM4QWhJT0xSakJ1Qit1dHl1N1E2cnhNTUh1dzJUdHNOK3piQVI3eXJqZnNz
ZUEzIgorICAgICI0VE0xeGU0Tms3TlZOSFJvWlErQzBJcWY5ZnZjaW9NdlQxdFRybWEwTWhLU2pG
UXB4K1B2eUxWYkQ3WWRQODZMIgorICAgICJtZWVoS3FVN2gxcExHQWlHd2pvYVo5WWJoNkt1cS9N
VEFIeTNEOCt3azdCMzZWQnhGNmRpVmxVUFpKWlFXS0p5IgorICAgICJNS3k5RzNzemUxWkd0OVdl
RTBBTXZrTjJISWVmMEhUS0NVWjNlQnZlY09NaWp4TDBXaFdvNVF5ZjVrNnlsQ2FVIgorICAgICIy
ZngrTThEZkRjd0ZvN3RTZ0x4U0szR0NGcHhQZmlEdDZRazhjOXRRbjVTMWdZM3Q2TEp1d1ZDRndV
SVhsTmtCIgorICAgICJKRDcrY1oxWi90Q3JFaHpqM1lDazB1VVU4Q2lmb1UrNEZHK0hHRlArU1B6
dHNZRTA1NW1TajMrRXNoK295b1ZCIgorICAgICJnQkg5MHNFMlQxaTBlTkk4ZjYxb1Nnd1lGZUhz
ZjdmQzcxWEVYTEZSK0d3TmRtd3FsbXdsRFpFcFR1N0JvTk4rIgorICAgICJxNytUZmsxTVJrSmxM
MVBINll1L0lQaFppTmg0dHlJcURPdGxZZnpwNTc3QStPVVUrcTVQUFJGUklzcWhlT3h0IgorICAg
ICJtTmxIeDRVemQ0VTNJVGZtb2dKYXpqcXdZTzJ2aUJaWTRqVVFteVpzNzVlSC9qaVVGSFdSc2hh
M0Fkblc1TFdhIgorICAgICJHM1BGblliVzh1ckgwTlNKRy9XKy85REErWTdBYTBjczRUUHB1Qkda
ME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgorICAgICIzdmpaRDN5OWtaazdtcmU5WEh3a0k4TWRL
NXM9Iik7CisgICAgCisgICAgYXV0byBkZWNvZGVkQ2VydGlmaWNhdGUgPSBiYXNlNjREZWNvZGUo
cGVtRW5jb2RlZENlcnRpZmljYXRlKTsKKyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZENlcnRp
ZmljYXRlKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6c2VyaWFsaXplKElu
Y2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50TGVuZ3RoKSBjb25zdAoreworICAgIFN0
cmluZ0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQo
IkhUVFAvMS4xICIsIHN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChzdGF0dXNDb2RlKSwgIlxy
XG4iKTsKKyAgICBpZiAoaW5jbHVkZUNvbnRlbnRMZW5ndGggPT0gSW5jbHVkZUNvbnRlbnRMZW5n
dGg6OlllcykKKyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6
ICIsIGJvZHkuc2l6ZSgpLCAiXHJcbiIpOworICAgIGZvciAoYXV0byYgcGFpciA6IGhlYWRlckZp
ZWxkcykKKyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFp
ci52YWx1ZSwgIlxyXG4iKTsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7Cisg
ICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzVG9TZW5kOworICAgIGFwcGVuZFVURjhUb1Zl
Y3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGJ5dGVz
VG9TZW5kLmFwcGVuZFZlY3Rvcihib2R5KTsKKyAgICByZXR1cm4gYnl0ZXNUb1NlbmQ7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVVRG
OFRvVmVjdG9yKHZlY3Rvciwgc3RyaW5nKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmggYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkyZmU1MTljMGRlMTk3
MzFjMzI1NzMyZDZhYmMzYjZkNmIxNTQ4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5zb2NrMi5o
PgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworbmFtZXNwYWNlIFNvY2tldCB7CisK
KyNpZiBPUyhXSU5ET1dTKQordXNpbmcgU29ja2V0ID0gU09DS0VUOwordXNpbmcgc29ja2xlbl90
ID0gaW50OworY29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gSU5WQUxJRF9TT0NLRVQ7
CisjZWxzZQordXNpbmcgU29ja2V0ID0gaW50OworI2RlZmluZSBTT0NLRVRfRVJST1IgLTEKK2Nv
bnN0ZXhwciBTb2NrZXQgSW52YWxpZFNvY2tldCA9IFNPQ0tFVF9FUlJPUjsKKyNlbmRpZgorCitT
b2NrZXQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpOworYm9vbCBp
c1ZhbGlkU29ja2V0KFNvY2tldCk7CitTb2NrZXQgYWNjZXB0KFNvY2tldCk7CitpbnQgc2h1dGRv
d24oU29ja2V0KTsKK2ludCBjbG9zZShTb2NrZXQpOworaW50IHJlYWQoU29ja2V0LCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBjb3VudCk7CitpbnQgd3JpdGUoU29ja2V0LCBjb25zdCB2b2lkKiBidWZm
ZXIsIHNpemVfdCBjb3VudCk7CisKK2Jvb2wgaXNTb2NrZXRSZWFkeShTb2NrZXQgcmVhZFNvY2tl
dCwgU29ja2V0IHdyaXRlU29ja2V0KTsKK2Jvb2wgaXNTb2NrZXRSZWFkeVJlYWRpbmcoU29ja2V0
KTsKK2Jvb2wgaXNTb2NrZXRSZWFkeVdyaXRpbmcoU29ja2V0KTsKKworfSAvLyBuYW1lc3BhY2Ug
U29ja2V0Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdpbi5jbWFrZQppbmRleCAzMzgzYmIzZTAxNDRiODc1NGMwOWM3NGQ3MjYzZmNlNDIyOThm
ZWQ2Li40ODFjZDM2N2Y3M2U3ZTQxNjgzZmMxZmY5ZWZhY2U5ZDA3NWNmMDY5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEyNCw4ICsxMjQsMTMgQEAgaWYgKEVOQUJM
RV9XRUJLSVQpCiAgICAgbGlzdChBUFBFTkQgVGVzdFdlYktpdF9TT1VSQ0VTCiAgICAgICAgICR7
dGVzdF9tYWluX1NPVVJDRVN9CiAKKyAgICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyUE9TSVguY3Bw
CisgICAgICAgIENvbm5lY3Rpb25QT1NJWC5jcHAKKyAgICAgICAgSFRUUFNlcnZlci5jcHAKKyAg
ICAgICAgSFRUUFNlcnZlckNvbW1vbi5jcHAKICAgICAgICAgVGVzdHMvV2ViS2l0L0Nvb2tpZVN0
b3JhZ2VGaWxlLmNwcAogCisgICAgICAgIHdpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKICAgICAg
ICAgd2luL1BsYXRmb3JtVXRpbGl0aWVzV2luLmNwcAogICAgICAgICB3aW4vUGxhdGZvcm1XZWJW
aWV3V2luLmNwcAogICAgICAgICB3aW4vVXRpbGl0aWVzV2luLmNwcApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA4ODk0ZmJkNGZkY2U1ZTY3YjNkNDM3NzJhZGY5YjA2YjM1MDE5NTRkLi4zNmU1
MWI3ZjQ0ZTY1NWQ0ZmVlZjNlMTIzYTc0MjExMjBhODYwZjQ0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtODcsNiArODcsNyBAQAogCQkxMUMyNTk4RDIxRkE2MzI0MDA0QzlFMjMgLyogYXN5
bmMtc2NyaXB0LWxvYWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxMUMyNTk4QzIxRkE2MThEMDA0QzlFMjMgLyogYXN5bmMtc2NyaXB0
LWxvYWQuaHRtbCAqLzsgfTsKIAkJMTQzRERFOTgyMEM5MDE4QjAwN0Y3NkZBIC8qIFNlY3VyaXR5
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3NEY1NUQwMjA0RDQ3MUMwMDI5NDhDNiAvKiBTZWN1cml0eS5mcmFtZXdvcmsgKi87IH07
CiAJCTE0Q0M0MkU2MjRCOEQ4RkEwMEU2NEY0OCAvKiBKU1J1bkxvb3BUaW1lci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0M0MkU1MjRCOEQ4RkEw
MEU2NEY0OCAvKiBKU1J1bkxvb3BUaW1lci5tbSAqLzsgfTsKKwkJMTZGOTJDOUMyN0QzRjZCOTAw
OEJEMDEzIC8qIEhUVFBTZXJ2ZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTZGOTJDOUIyN0QzRjZCOTAwOEJEMDEzIC8qIEhUVFBTZXJ2
ZXJDb21tb24uY3BwICovOyB9OwogCQkxQTAyQzg3MDEyNUQ0Q0ZEMDBFM0Y0QkQgLyogZmluZC5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi87IH07CiAJCTFBMzUyNEFF
MUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTM1MjRBQzFENjNBNEZCMDAzMTcyOUIgLyogU2NvcGUuY3Bw
ICovOyB9OwogCQkxQTRGODFDRjFCREZGRDUzMDA0RTY3MkUgLyogUmVtb3RlT2JqZWN0UmVnaXN0
cnlQbHVnSW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTRGODFDRDFCREZGRDUzMDA0RTY3MkUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlQbHVnSW4u
bW0gKi87IH07CkBAIC0xNzQ2LDYgKzE3NDcsOCBAQAogCQkxNDRENDBFQzIyMUI0NkE3MDA0QjQ3
NEYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVVUlE
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDQzQyRTUyNEI4RDhGQTAwRTY0
RjQ4IC8qIEpTUnVuTG9vcFRpbWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSlNSdW5Mb29wVGltZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYXR1cmF0ZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE2Rjky
QzlBMjdEM0Y2QTcwMDhCRDAxMyAvKiBIVFRQU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUVFBT
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTZGOTJDOUIyN0QzRjZCOTAw
OEJEMDEzIC8qIEhUVFBTZXJ2ZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSFRUUFNlcnZlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQTM1MjRBOTFENjI3QkQ0MDAzMTcyOUIgLyogRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjI3OCw3ICsyMjgxLDYgQEAKIAkJNUM3NTcxNUYyMjEyNDlCRDAw
QjlFNUFDIC8qIEJ1bmRsZVJldGFpblBhZ2VQbHVnSW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBCdW5kbGVSZXRhaW5QYWdlUGx1Z0luLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1Qzc5NjQwRjFFQjAyNjlCMDA3NUQ3NEMgLyogRXZlbnRNb2Rp
ZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRNb2Rp
ZmllcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDMjRGQTIzN0M5NzIz
MDA1OTlDOTEgLyogSFRUUFNlcnZlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IEhUVFBTZXJ2ZXIubW07IHBhdGggPSBjb2NvYS9IVFRQU2VydmVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1QzdDMjRGQjIzN0M5NzIzMDA1OTlDOTEgLyogSFRU
UFNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBIVFRQU2VydmVyLmg7
IHBhdGggPSBjb2NvYS9IVFRQU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDN0M3NENBMUZCNTI4RDQwMDJGOUFCRSAvKiBXZWJWaWV3U2NoZWR1bGVJblJ1bkxvb3AubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWV3U2NoZWR1bGVJ
blJ1bkxvb3AubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOEJDNzk4MjE4Q0Yz
RTkwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyogV2ViR0xQb2xpY3kubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTFBvbGljeS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyODYsNiArMzI4OCw4IEBACiAJCQkJNUNBQkRCRUMy
NzM1Q0I0RDAwQjg4QkNCIC8qIERlcHJlY2F0ZWRHbG9iYWxWYWx1ZXMuY3BwICovLAogCQkJCTVD
QUJEQkVEMjczNUNCNEQwMEI4OEJDQiAvKiBEZXByZWNhdGVkR2xvYmFsVmFsdWVzLmggKi8sCiAJ
CQkJNUNBQkRCRjAyNzM1RERBMTAwQjg4QkNCIC8qIERlcHJlY2F0ZWRHbG9iYWxWYWx1ZXMubW0g
Ki8sCisJCQkJMTZGOTJDOUEyN0QzRjZBNzAwOEJEMDEzIC8qIEhUVFBTZXJ2ZXIuaCAqLywKKwkJ
CQkxNkY5MkM5QjI3RDNGNkI5MDA4QkQwMTMgLyogSFRUUFNlcnZlckNvbW1vbi5jcHAgKi8sCiAJ
CQkJQzBBREJFN0ExMkZDQTREMDAwRDJDMTI5IC8qIEphdmFTY3JpcHRUZXN0LmNwcCAqLywKIAkJ
CQlDMEFEQkU3QjEyRkNBNEQwMDBEMkMxMjkgLyogSmF2YVNjcmlwdFRlc3QuaCAqLywKIAkJCQlC
QzU3NUJCRjEyNkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovLApAQCAt
MzMzMCw3ICszMzM0LDYgQEAKIAkJCQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZBREIgLyogRHJhZ0Fu
ZERyb3BTaW11bGF0b3IuaCAqLywKIAkJCQlGNDREMDY0ODFGMzk2MkUzMDAxQTBFMjkgLyogRWRp
dGluZ1Rlc3RIYXJuZXNzLmggKi8sCiAJCQkJRjQ0RDA2NDkxRjM5NjJFMzAwMUEwRTI5IC8qIEVk
aXRpbmdUZXN0SGFybmVzcy5tbSAqLywKLQkJCQk1QzdDMjRGQjIzN0M5NzIzMDA1OTlDOTEgLyog
SFRUUFNlcnZlci5oICovLAogCQkJCTVDN0MyNEZBMjM3Qzk3MjMwMDU5OUM5MSAvKiBIVFRQU2Vy
dmVyLm1tICovLAogCQkJCUY0MkYwODE3Mjc0NDlGRkQwMDdFMEQ5MCAvKiBJbWFnZUFuYWx5c2lz
VGVzdGluZ1V0aWxpdGllcy5oICovLAogCQkJCUY0MkYwODE2Mjc0NDlGRkQwMDdFMEQ5MCAvKiBJ
bWFnZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy5tbSAqLywKQEAgLTU2NTYsNiArNTY1OSw3IEBA
CiAJCQkJNDZGQTJGRUUyMzg0NkNBNTAwMENDQjBDIC8qIEhUVFBIZWFkZXJNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNkI5QUJFMTIyMDg2OTUyRjAwRDc1REU2IC8qIEhUVFBQYXJzZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDN0MyNEZDMjM3Qzk3NTQwMDU5OUM5MSAvKiBIVFRQU2Vy
dmVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMTZGOTJDOUMyN0QzRjZCOTAwOEJEMDEzIC8qIEhU
VFBTZXJ2ZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0IxODQxN0MyNjczODYwMjAw
RUQ0RjhEIC8qIEltYWdlQnVmZmVyVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ0QTlB
RjcyNjQ5QkJERDAwRTdDQjE2IC8qIEltbWVkaWF0ZUFjdGlvblRlc3RzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0E5NUJERTExRTlCRUM1RjAwODY1NDk4IC8qIEluamVjdGVkQnVuZGxlQXBwbGVF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvSFRUUFNlcnZlci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzODQwOWU0ODMwZmM3MDJjNzY5NzMy
MTRkNzA2ODViMzc3NDg1YmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW1w
b3J0IDxOZXR3b3JrL05ldHdvcmsuaD4KLSNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5o
PgotI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KLSNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+Ci0jaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LU9CSkNfQ0xBU1MgTlNVUkxSZXF1ZXN0OwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0K
LWNsYXNzIENvbm5lY3Rpb247Ci1zdHJ1Y3QgSFRUUFJlc3BvbnNlOwotCi1jbGFzcyBIVFRQU2Vy
dmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdHJ1Y3Qg
UmVxdWVzdERhdGE7Ci0gICAgZW51bSBjbGFzcyBQcm90b2NvbCA6IHVpbnQ4X3QgeyBIdHRwLCBI
dHRwcywgSHR0cHNXaXRoTGVnYWN5VExTLCBIdHRwMiwgSHR0cHNQcm94eSwgSHR0cHNQcm94eVdp
dGhBdXRoZW50aWNhdGlvbiB9OwotICAgIHVzaW5nIENlcnRpZmljYXRlVmVyaWZpZXIgPSBGdW5j
dGlvbjx2b2lkKHNlY19wcm90b2NvbF9tZXRhZGF0YV90LCBzZWNfdHJ1c3RfdCwgc2VjX3Byb3Rv
Y29sX3ZlcmlmeV9jb21wbGV0ZV90KT47Ci0KLSAgICBIVFRQU2VydmVyKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiwgUHJvdG9jb2wgPSBQcm90
b2NvbDo6SHR0cCwgQ2VydGlmaWNhdGVWZXJpZmllciYmID0gbnVsbHB0ciwgUmV0YWluUHRyPFNl
Y0lkZW50aXR5UmVmPiYmID0gbnVsbHB0ciwgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCA9
IHsgfSk7Ci0gICAgSFRUUFNlcnZlcihGdW5jdGlvbjx2b2lkKENvbm5lY3Rpb24pPiYmLCBQcm90
b2NvbCA9IFByb3RvY29sOjpIdHRwKTsKLSAgICB+SFRUUFNlcnZlcigpOwotICAgIHVpbnQxNl90
IHBvcnQoKSBjb25zdDsKLSAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3Q7Ci0gICAgTlNVUkxSZXF1
ZXN0ICpyZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGF0aCA9ICIvIl9zdHIpIGNvbnN0OwotICAgIE5T
VVJMUmVxdWVzdCAqcmVxdWVzdFdpdGhMb2NhbGhvc3QoY29uc3QgU3RyaW5nJiBwYXRoID0gIi8i
X3N0cikgY29uc3Q7Ci0gICAgc2l6ZV90IHRvdGFsUmVxdWVzdHMoKSBjb25zdDsKLSAgICB2b2lk
IGNhbmNlbCgpOwotCi0gICAgdm9pZCBhZGRSZXNwb25zZShTdHJpbmcmJiBwYXRoLCBIVFRQUmVz
cG9uc2UmJik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aE9LKENvbm5lY3Rpb24pOwot
ICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKENvbm5lY3Rpb24pOwot
ICAgIHN0YXRpYyBTdHJpbmcgcGFyc2VQYXRoKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCk7
Ci0gICAgc3RhdGljIFN0cmluZyBwYXJzZUJvZHkoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci0gICAg
c3RhdGljIFZlY3Rvcjx1aW50OF90PiB0ZXN0UHJpdmF0ZUtleSgpOwotICAgIHN0YXRpYyBWZWN0
b3I8dWludDhfdD4gdGVzdENlcnRpZmljYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIFJl
dGFpblB0cjxud19wYXJhbWV0ZXJzX3Q+IGxpc3RlbmVyUGFyYW1ldGVycyhQcm90b2NvbCwgQ2Vy
dGlmaWNhdGVWZXJpZmllciYmLCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYsIHN0ZDo6b3B0
aW9uYWw8dWludDE2X3Q+IHBvcnQpOwotICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRUb1JlcXVlc3Rz
KENvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4pOwotICAgIGNvbnN0IGNoYXIqIHNjaGVtZSgp
IGNvbnN0OwotCi0gICAgUmVmPFJlcXVlc3REYXRhPiBtX3JlcXVlc3REYXRhOwotICAgIFJldGFp
blB0cjxud19saXN0ZW5lcl90PiBtX2xpc3RlbmVyOwotICAgIFByb3RvY29sIG1fcHJvdG9jb2wg
eyBQcm90b2NvbDo6SHR0cCB9OwotfTsKLQotY2xhc3MgQ29ubmVjdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZW5kKFN0cmluZyYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBudWxs
cHRyKSBjb25zdDsKLSAgICB2b2lkIHNlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0OwotICAgIHZvaWQgc2VuZEFuZFJlcG9y
dEVycm9yKFZlY3Rvcjx1aW50OF90PiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KSBjb25zdDsKLSAgICB2b2lkIHJlY2VpdmVCeXRlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3Rvcjx1aW50OF90PiYmKT4mJiwgc2l6ZV90IG1pbmltdW1TaXplID0gMSkgY29uc3Q7Ci0gICAg
dm9pZCByZWNlaXZlSFRUUFJlcXVlc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Y2hh
cj4mJik+JiYsIFZlY3RvcjxjaGFyPiYmIGJ1ZmZlciA9IHsgfSkgY29uc3Q7Ci0gICAgdm9pZCB3
ZWJTb2NrZXRIYW5kc2hha2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0geyB9KTsKLSAg
ICB2b2lkIHRlcm1pbmF0ZSgpOwotICAgIHZvaWQgY2FuY2VsKCk7Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIEhUVFBTZXJ2ZXI7Ci0gICAgQ29ubmVjdGlvbihud19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbikKLSAgICAgICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikgeyB9Ci0KLSAg
ICB2b2lkIHNlbmQoUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJikgY29uc3Q7Ci0KLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90
PiBtX2Nvbm5lY3Rpb247Ci19OwotCi1zdHJ1Y3QgSFRUUFJlc3BvbnNlIHsKLSAgICBlbnVtIGNs
YXNzIFRlcm1pbmF0ZUNvbm5lY3Rpb24geyBObywgWWVzIH07Ci0KLSAgICBIVFRQUmVzcG9uc2Uo
VmVjdG9yPHVpbnQ4X3Q+JiYgYm9keSkKLSAgICAgICAgOiBib2R5KFdURk1vdmUoYm9keSkpIHsg
fQotICAgIEhUVFBSZXNwb25zZShjb25zdCBTdHJpbmcmIGJvZHkpCi0gICAgICAgIDogYm9keShi
b2R5RnJvbVN0cmluZyhib2R5KSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBjb25zdCBTdHJpbmcmIGJvZHkpCi0gICAgICAgIDog
aGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5KGJvZHlG
cm9tU3RyaW5nKGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29k
ZSwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIGNvbnN0IFN0
cmluZyYgYm9keSA9IHsgfSkKLSAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCi0gICAg
ICAgICwgaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5
KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UoVGVybWluYXRlQ29u
bmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9uKQotICAgICAgICA6IHRlcm1pbmF0ZUNvbm5lY3Rp
b24odGVybWluYXRlQ29ubmVjdGlvbikgeyB9Ci0KLSAgICBIVFRQUmVzcG9uc2UoY29uc3QgSFRU
UFJlc3BvbnNlJikgPSBkZWZhdWx0OwotICAgIEhUVFBSZXNwb25zZShIVFRQUmVzcG9uc2UmJikg
PSBkZWZhdWx0OwotICAgIEhUVFBSZXNwb25zZSgpID0gZGVmYXVsdDsKLSAgICBIVFRQUmVzcG9u
c2UmIG9wZXJhdG9yPShjb25zdCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7Ci0gICAgSFRUUFJl
c3BvbnNlJiBvcGVyYXRvcj0oSFRUUFJlc3BvbnNlJiYpID0gZGVmYXVsdDsKLQotICAgIGVudW0g
Y2xhc3MgSW5jbHVkZUNvbnRlbnRMZW5ndGggOiBib29sIHsgTm8sIFllcyB9OwotICAgIFZlY3Rv
cjx1aW50OF90PiBzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJbmNsdWRlQ29udGVu
dExlbmd0aDo6WWVzKSBjb25zdDsKLSAgICBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJvZHlGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7IDIwMCB9
OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8
dWludDhfdD4gYm9keTsKLSAgICBUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rp
b24geyBUZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9OwotfTsKLQotbmFtZXNwYWNlIEgyIHsKLQot
Ly8gaHR0cHM6Ly9odHRwMi5naXRodWIuaW8vaHR0cDItc3BlYy8jcmZjLnNlY3Rpb24uNC4xCi1j
bGFzcyBGcmFtZSB7Ci1wdWJsaWM6Ci0KLSAgICAvLyBodHRwczovL2h0dHAyLmdpdGh1Yi5pby9o
dHRwMi1zcGVjLyNyZmMuc2VjdGlvbi42Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7
Ci0gICAgICAgIERhdGEgPSAweDAsCi0gICAgICAgIEhlYWRlcnMgPSAweDEsCi0gICAgICAgIFBy
aW9yaXR5ID0gMHgyLAotICAgICAgICBSU1RTdHJlYW0gPSAweDMsCi0gICAgICAgIFNldHRpbmdz
ID0gMHg0LAotICAgICAgICBQdXNoUHJvbWlzZSA9IDB4NSwKLSAgICAgICAgUGluZyA9IDB4NiwK
LSAgICAgICAgR29Bd2F5ID0gMHg3LAotICAgICAgICBXaW5kb3dVcGRhdGUgPSAweDgsCi0gICAg
ICAgIENvbnRpbnVhdGlvbiA9IDB4OSwKLSAgICB9OwotCi0gICAgRnJhbWUoVHlwZSB0eXBlLCB1
aW50OF90IGZsYWdzLCB1aW50MzJfdCBzdHJlYW1JRCwgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWQp
Ci0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICwgbV9mbGFncyhmbGFncykKLSAgICAg
ICAgLCBtX3N0cmVhbUlEKHN0cmVhbUlEKQotICAgICAgICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBh
eWxvYWQpKSB7IH0KLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
ICAgIHVpbnQ4X3QgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgdWludDMy
X3Qgc3RyZWFtSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUlEOyB9Ci0gICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgVHlwZSBtX3R5cGU7Ci0gICAgdWludDhfdCBtX2ZsYWdzOwotICAgIHVpbnQz
Ml90IG1fc3RyZWFtSUQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcGF5bG9hZDsKLX07Ci0KLWNs
YXNzIENvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxDb25uZWN0aW9uPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxDb25uZWN0aW9uPiBjcmVhdGUoVGVzdFdlYktpdEFQSTo6Q29ubmVj
dGlvbiB0bHNDb25uZWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENvbm5lY3Rpb24odGxz
Q29ubmVjdGlvbikpOyB9Ci0gICAgdm9pZCBzZW5kKEZyYW1lJiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiA9IG51bGxwdHIpIGNvbnN0OwotICAgIHZvaWQgcmVjZWl2ZShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEZyYW1lJiYpPiYmKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgQ29ubmVjdGlv
bihUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uIHRsc0Nvbm5lY3Rpb24pCi0gICAgICAgIDogbV90
bHNDb25uZWN0aW9uKHRsc0Nvbm5lY3Rpb24pIHsgfQotCi0gICAgVGVzdFdlYktpdEFQSTo6Q29u
bmVjdGlvbiBtX3Rsc0Nvbm5lY3Rpb247Ci0gICAgbXV0YWJsZSBib29sIG1fZXhwZWN0Q2xpZW50
Q29ubmVjdGlvblByZWZhY2UgeyB0cnVlIH07Ci0gICAgbXV0YWJsZSBib29sIG1fc2VuZFNlcnZl
ckNvbm5lY3Rpb25QcmVmYWNlIHsgdHJ1ZSB9OwotICAgIG11dGFibGUgVmVjdG9yPHVpbnQ4X3Q+
IG1fcmVjZWl2ZUJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEgyCi0KLX0gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKLQotUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiB0ZXN0Q2Vy
dGlmaWNhdGUoKTsKLVJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5KCk7Ci1S
ZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5tbQppbmRleCBhZjZhZDRhNzM1MTcwMjlkMjZhN2Y4MzRlYTg1
NzE3MzZkZTQyODE5Li5lNWY3OTg3MDFjYmZhNTM2ODQ1NjU5NTBkNzg3MTBkNDg3NmY5NjE0IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCkBAIC0zNywyMSArMzcsNiBA
QAogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKLQotc3RydWN0IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFJlcXVlc3REYXRhLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluUnVu
TG9vcD4gewotICAgIFJlcXVlc3REYXRhKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8
U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMpCi0gICAgOiByZXF1ZXN0TWFwKFtdKHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiBsaXN0
KSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IG1hcDsKLSAgICAgICAg
Zm9yIChhdXRvJiBwYWlyIDogbGlzdCkKLSAgICAgICAgICAgIG1hcC5hZGQocGFpci5maXJzdCwg
cGFpci5zZWNvbmQpOwotICAgICAgICByZXR1cm4gbWFwOwotICAgIH0ocmVzcG9uc2VzKSkgeyB9
Ci0gICAgCi0gICAgc2l6ZV90IHJlcXVlc3RDb3VudCB7IDAgfTsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgSFRUUFJlc3BvbnNlPiByZXF1ZXN0TWFwOwotICAgIFZlY3RvcjxDb25uZWN0aW9uPiBjb25u
ZWN0aW9uczsKLX07Ci0KIHN0YXRpYyBSZXRhaW5QdHI8bndfcHJvdG9jb2xfZGVmaW5pdGlvbl90
PiBwcm94eURlZmluaXRpb24oSFRUUFNlcnZlcjo6UHJvdG9jb2wgcHJvdG9jb2wpCiB7CiAgICAg
cmV0dXJuIGFkb3B0TlMobndfZnJhbWVyX2NyZWF0ZV9kZWZpbml0aW9uKCJIdHRwc1Byb3h5Iiwg
TldfRlJBTUVSX0NSRUFURV9GTEFHU19ERUZBVUxULCBbcHJvdG9jb2xdIChud19mcmFtZXJfdCBm
cmFtZXIpIC0+IG53X2ZyYW1lcl9zdGFydF9yZXN1bHRfdCB7CkBAIC0yMTYsNjAgKzIwMSw2IEBA
IEhUVFBTZXJ2ZXI6OkhUVFBTZXJ2ZXIoRnVuY3Rpb248dm9pZChDb25uZWN0aW9uKT4mJiBjb25u
ZWN0aW9uSGFuZGxlciwgUHJvdG9jb2wKIAogSFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIoKSA9IGRl
ZmF1bHQ7CiAKLXZvaWQgSFRUUFNlcnZlcjo6YWRkUmVzcG9uc2UoU3RyaW5nJiYgcGF0aCwgSFRU
UFJlc3BvbnNlJiYgcmVzcG9uc2UpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVxdWVzdERh
dGEtPnJlcXVlc3RNYXAuY29udGFpbnMocGF0aCkpOwotICAgIG1fcmVxdWVzdERhdGEtPnJlcXVl
c3RNYXAuYWRkKFdURk1vdmUocGF0aCksIFdURk1vdmUocmVzcG9uc2UpKTsKLX0KLQotdm9pZCBI
VFRQU2VydmVyOjpyZXNwb25kV2l0aENoYWxsZW5nZVRoZW5PSyhDb25uZWN0aW9uIGNvbm5lY3Rp
b24pCi17Ci0gICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoW2Nvbm5lY3Rpb25dIChW
ZWN0b3I8Y2hhcj4mJikgewotICAgICAgICBjb25zdCBjaGFyKiBjaGFsbGVuZ2VIZWFkZXIgPQot
ICAgICAgICAiSFRUUC8xLjEgNDAxIFVuYXV0aG9yaXplZFxyXG4iCi0gICAgICAgICJEYXRlOiBT
YXQsIDIzIE1hciAyMDE5IDA2OjI5OjAxIEdNVFxyXG4iCi0gICAgICAgICJDb250ZW50LUxlbmd0
aDogMFxyXG4iCi0gICAgICAgICJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cInRlc3Ry
ZWFsbVwiXHJcblxyXG4iOwotICAgICAgICBjb25uZWN0aW9uLnNlbmQoY2hhbGxlbmdlSGVhZGVy
LCBbY29ubmVjdGlvbl0gewotICAgICAgICAgICAgcmVzcG9uZFdpdGhPSyhjb25uZWN0aW9uKTsK
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFdpdGhP
SyhDb25uZWN0aW9uIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJl
cXVlc3QoW2Nvbm5lY3Rpb25dIChWZWN0b3I8Y2hhcj4mJikgewotICAgICAgICBjb25uZWN0aW9u
LnNlbmQoCi0gICAgICAgICAgICAiSFRUUC8xLjEgMjAwIE9LXHJcbiIKLSAgICAgICAgICAgICJD
b250ZW50LUxlbmd0aDogMzRcclxuXHJcbiIKLSAgICAgICAgICAgICI8c2NyaXB0PmFsZXJ0KCdz
dWNjZXNzIScpPC9zY3JpcHQ+IgotICAgICAgICApOwotICAgIH0pOwotfQotCi1zaXplX3QgSFRU
UFNlcnZlcjo6dG90YWxSZXF1ZXN0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVxdWVzdERh
dGEtPnJlcXVlc3RDb3VudDsKLX0KLQotc3RhdGljIEFTQ0lJTGl0ZXJhbCBzdGF0dXNUZXh0KHVu
c2lnbmVkIHN0YXR1c0NvZGUpCi17Ci0gICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7Ci0gICAgY2Fz
ZSAxMDE6Ci0gICAgICAgIHJldHVybiAiU3dpdGNoaW5nIFByb3RvY29scyJfczsKLSAgICBjYXNl
IDIwMDoKLSAgICAgICAgcmV0dXJuICJPSyJfczsKLSAgICBjYXNlIDMwMToKLSAgICAgICAgcmV0
dXJuICJNb3ZlZCBQZXJtYW5lbnRseSJfczsKLSAgICBjYXNlIDMwMjoKLSAgICAgICAgcmV0dXJu
ICJGb3VuZCJfczsKLSAgICBjYXNlIDQwNDoKLSAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiX3M7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiVW5rbm93biBT
dGF0dXMgQ29kZSJfczsKLX0KLQogc3RhdGljIFJldGFpblB0cjxkaXNwYXRjaF9kYXRhX3Q+IGRh
dGFGcm9tU3RyaW5nKFN0cmluZyYmIHMpCiB7CiAgICAgYXV0byBpbXBsID0gcy5yZWxlYXNlSW1w
bCgpOwpAQCAtMjk5LDM5ICsyMzAsNiBAQCBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvckZy
b21EYXRhKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50KQogICAgIHJldHVybiByZXF1ZXN0OwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRVVEY4VG9WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3Is
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7
Ci0gICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4
LmRhdGEoKSksIHV0ZjgubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgSFRUUFNlcnZlcjo6cGFyc2VQ
YXRoKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCkKLXsKLSAgICBpZiAoIXJlcXVlc3Quc2l6
ZSgpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXgg
PSAiR0VUICI7Ci0gICAgY29uc3QgY2hhciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAiOwotICAg
IGNvbnN0IGNoYXIqIHBhdGhTdWZmaXggPSAiIEhUVFAvMS4xXHJcbiI7Ci0gICAgY29uc3QgY2hh
ciogcGF0aEVuZCA9IHN0cm5zdHIocmVxdWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Qu
c2l6ZSgpKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhFbmQsICJIVFRQU2VydmVyIGFz
c3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEuMSIpOwotICAgIHNpemVfdCBwYXRoUHJlZml4TGVuZ3Ro
ID0gMDsKLSAgICBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3Ry
bGVuKGdldFBhdGhQcmVmaXgpKSkKLSAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihn
ZXRQYXRoUHJlZml4KTsKLSAgICBlbHNlIGlmICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBwb3N0
UGF0aFByZWZpeCwgc3RybGVuKHBvc3RQYXRoUHJlZml4KSkpCi0gICAgICAgIHBhdGhQcmVmaXhM
ZW5ndGggPSBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
cGF0aFByZWZpeExlbmd0aCwgIkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQ
T1NUIik7Ci0gICAgc2l6ZV90IHBhdGhMZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkg
LSBwYXRoUHJlZml4TGVuZ3RoOwotICAgIHJldHVybiBTdHJpbmcocmVxdWVzdC5kYXRhKCkgKyBw
YXRoUHJlZml4TGVuZ3RoLCBwYXRoTGVuZ3RoKTsKLX0KLQotU3RyaW5nIEhUVFBTZXJ2ZXI6OnBh
cnNlQm9keShjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCi17Ci0gICAgY29uc3QgY2hhciog
aGVhZGVyRW5kQnl0ZXMgPSAiXHJcblxyXG4iOwotICAgIGNvbnN0IGNoYXIqIGhlYWRlckVuZCA9
IHN0cm5zdHIocmVxdWVzdC5kYXRhKCksIGhlYWRlckVuZEJ5dGVzLCByZXF1ZXN0LnNpemUoKSkg
KyBzdHJsZW4oaGVhZGVyRW5kQnl0ZXMpOwotICAgIHNpemVfdCBoZWFkZXJMZW5ndGggPSBoZWFk
ZXJFbmQgLSByZXF1ZXN0LmRhdGEoKTsKLSAgICByZXR1cm4gU3RyaW5nKGhlYWRlckVuZCwgcmVx
dWVzdC5zaXplKCkgLSBoZWFkZXJMZW5ndGgpOwotfQotCiB2b2lkIEhUVFBTZXJ2ZXI6OnJlc3Bv
bmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPiByZXF1
ZXN0RGF0YSkKIHsKICAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVzdChbY29ubmVjdGlv
biwgcmVxdWVzdERhdGFdIChWZWN0b3I8Y2hhcj4mJiByZXF1ZXN0KSBtdXRhYmxlIHsKQEAgLTM1
NywyNSArMjU1LDYgQEAgdWludDE2X3QgSFRUUFNlcnZlcjo6cG9ydCgpIGNvbnN0CiAgICAgcmV0
dXJuIG53X2xpc3RlbmVyX2dldF9wb3J0KG1fbGlzdGVuZXIuZ2V0KCkpOwogfQogCi1jb25zdCBj
aGFyKiBIVFRQU2VydmVyOjpzY2hlbWUoKSBjb25zdAotewotICAgIGNvbnN0IGNoYXIqIHNjaGVt
ZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoIChtX3Byb3RvY29sKSB7Ci0gICAgY2FzZSBQcm90b2Nv
bDo6SHR0cDoKLSAgICAgICAgc2NoZW1lID0gImh0dHAiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFByb3RvY29sOjpIdHRwczoKLSAgICBjYXNlIFByb3RvY29sOjpIdHRwc1dpdGhMZWdhY3lU
TFM6Ci0gICAgY2FzZSBQcm90b2NvbDo6SHR0cDI6Ci0gICAgICAgIHNjaGVtZSA9ICJodHRwcyI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdG9jb2w6Okh0dHBzUHJveHk6Ci0gICAgY2Fz
ZSBQcm90b2NvbDo6SHR0cHNQcm94eVdpdGhBdXRoZW50aWNhdGlvbjoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNjaGVtZTsKLX0KLQog
U3RyaW5nIEhUVFBTZXJ2ZXI6Om9yaWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXM6Ly8xMjcuMC4wLjE6JWQiLCBzY2hlbWUoKSwgcG9ydCgp
XTsKQEAgLTQ5MiwyOSArMzcxLDYgQEAgdm9pZCBDb25uZWN0aW9uOjpjYW5jZWwoKQogICAgIG1f
Y29ubmVjdGlvbiA9IG51bGxwdHI7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6
OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIFZlY3Rvcjx1aW50
OF90PiB2ZWN0b3I7Ci0gICAgYXBwZW5kVVRGOFRvVmVjdG9yKHZlY3Rvciwgc3RyaW5nKTsKLSAg
ICByZXR1cm4gdmVjdG9yOwotfQotCi1WZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpzZXJp
YWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5ndGgpIGNvbnN0Ci17
Ci0gICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7Ci0gICAgcmVzcG9uc2VCdWlsZGVy
LmFwcGVuZCgiSFRUUC8xLjEgIiwgc3RhdHVzQ29kZSwgJyAnLCBzdGF0dXNUZXh0KHN0YXR1c0Nv
ZGUpLCAiXHJcbiIpOwotICAgIGlmIChpbmNsdWRlQ29udGVudExlbmd0aCA9PSBJbmNsdWRlQ29u
dGVudExlbmd0aDo6WWVzKQotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJDb250ZW50
LUxlbmd0aDogIiwgYm9keS5zaXplKCksICJcclxuIik7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDog
aGVhZGVyRmllbGRzKQotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIua2V5LCAi
OiAiLCBwYWlyLnZhbHVlLCAiXHJcbiIpOwotICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIlxy
XG4iKTsKLSAgICAKLSAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXNUb1NlbmQ7Ci0gICAgYXBwZW5k
VVRGOFRvVmVjdG9yKGJ5dGVzVG9TZW5kLCByZXNwb25zZUJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0g
ICAgYnl0ZXNUb1NlbmQuYXBwZW5kVmVjdG9yKGJvZHkpOwotICAgIHJldHVybiBieXRlc1RvU2Vu
ZDsKLX0KLQogdm9pZCBIMjo6Q29ubmVjdGlvbjo6c2VuZChGcmFtZSYmIGZyYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7CiAgICAgYXV0
byBmcmFtZVR5cGUgPSBmcmFtZS50eXBlKCk7CkBAIC01ODgsMTEzICs0NDQsNCBAQCB2b2lkIEgy
OjpDb25uZWN0aW9uOjpyZWNlaXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRnJhbWUmJik+JiYg
Y29tcGxldGlvbkhhbmRsZQogICAgIH0pOwogfQogCi1WZWN0b3I8dWludDhfdD4gSFRUUFNlcnZl
cjo6dGVzdENlcnRpZmljYXRlKCkKLXsKLSAgICAvLyBDZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBr
ZXkgd2VyZSBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGlzIGNvbW1hbmQ6Ci0gICAgLy8gb3BlbnNz
bCByZXEgLXg1MDkgLW5ld2tleSByc2E6NDA5NiAta2V5b3V0IGtleS5wZW0gLW91dCBjZXJ0LnBl
bSAtZGF5cyAzNjUgLW5vZGVzCi0gICAgLy8gYW5kIGVudGVyaW5nIHRoaXMgaW5mb3JtYXRpb246
Ci0gICAgLyoKLSAgICAgQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKSBbXTpVUwotICAgICBT
dGF0ZSBvciBQcm92aW5jZSBOYW1lIChmdWxsIG5hbWUpIFtdOk5ldyBNZXhpY28KLSAgICAgTG9j
YWxpdHkgTmFtZSAoZWcsIGNpdHkpIFtdOlNhbnRhIEZlCi0gICAgIE9yZ2FuaXphdGlvbiBOYW1l
IChlZywgY29tcGFueSkgW106U2VsZgotICAgICBPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVn
LCBzZWN0aW9uKSBbXTpNeXNlbGYKLSAgICAgQ29tbW9uIE5hbWUgKGVnLCBmdWxseSBxdWFsaWZp
ZWQgaG9zdCBuYW1lKSBbXTpNZQotICAgICBFbWFpbCBBZGRyZXNzIFtdOm1lQGV4YW1wbGUuY29t
Ci0gICAgICovCi0gICAgCi0gICAgU3RyaW5nIHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSgiIgotICAg
ICJNSUlGZ0RDQ0EyZ0NDUUNLSGlQUlU1TVF1REFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnVEVMTUFr
R0ExVUVCaE1DIgotICAgICJWVk14RXpBUkJnTlZCQWdNQ2s1bGR5Qk5aWGhwWTI4eEVUQVBCZ05W
QkFjTUNGTmhiblJoSUVabE1RMHdDd1lEIgotICAgICJWUVFLREFSVFpXeG1NUTh3RFFZRFZRUUxE
QVpOZVhObGJHWXhDekFKQmdOVkJBTU1BazFsTVIwd0d3WUpLb1pJIgotICAgICJodmNOQVFrQkZn
NXRaVUJsZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEF6TWpNd05UVXdNVFJhRncweU1EQXpNakl3Igot
ICAgICJOVFV3TVRSYU1JR0JNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0F3S1RtVjNJRTFs
ZUdsamJ6RVJNQThHIgotICAgICJBMVVFQnd3SVUyRnVkR0VnUm1VeERUQUxCZ05WQkFvTUJGTmxi
R1l4RHpBTkJnTlZCQXNNQmsxNWMyVnNaakVMIgotICAgICJNQWtHQTFVRUF3d0NUV1V4SFRBYkJn
a3Foa2lHOXcwQkNRRVdEbTFsUUdWNFlXMXdiR1V1WTI5dE1JSUNJakFOIgotICAgICJCZ2txaGtp
Rzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzcmhONFNQZzhWWS9QdEdETktZM1Q5SklTZ2J5
IgotICAgICI4WUdNSngwdk8rWVpGWm0zRzNmc1RVc3l2RHlFSHdxcDVhYkNaUkIvQnkxUHdXa05y
ZnhuL1hQOFAwMzRKUGxFIgotICAgICI2aXJWaXVBWVFycVVoNms3WlI4Q3BPTTVHRWNSWmdBVUpH
R1F3TmxPa0V3YUhuTUdjOFNzSHVyZ0RQaDVYQnBnIgotICAgICJiRHl0ZDdCSnVCMU5vSS9LSm1o
Y2Fqa0F1VjN2YXJTK3VQTG9mUEhOcWUrY0w4aE5ualpRd0hXYXJQNDVrczRlIgotICAgICJCY09E
N3R3cXh1SG5WbS9GV0VycFk4V3M1czFNclBUaFVkRGFoakVNZitZZkRKOUtMOHkzMDR5UzhKOGZl
Q3hZIgotICAgICJmY0g0QnZnTHRKbUJOSEpnajNlTkQvRU1aakpnejJGc0JqckprOGtLRDMxY3cr
NFdwOFVGNHNrV1hDZjQ2K21OIgotICAgICJPSHAxM1BlU0NaTHlGNFpBSGF6VVZrbkRQY2MyWU5y
V1ZWMWk2bjNUMTVrSTBUNVo3YnN0ZG1BTHVTa0UyY3VKIgotICAgICJTVk5PNmdSK1pzVlJUbmV1
UXh3V1RVME1ORWhBUEZPWDJCaEdQNWVpc2dFVXprbnhNSmRkRkRuOVd4a2x1MUpoIgotICAgICJn
a3pBU0EvKzNBbWxyRlpNUGhPaGpFdWwwempnTlI1UkJsMUc4SHo5MkxBeDVVRURCdGRMZzcxSStJ
OEF6UU9oIgotICAgICJkNkx0QmVrRUN4QTE2cFNhcHBnNXZjVzlaLzhONlpsc0huWjJGenRBMG5D
T2Zsa29POWllak9wY3VGTjRFVllEIgotICAgICJ4SXR3Y3RLdzFMQ2VORC9zNGttb1JSblhiWDdr
OU82Y0kxVVVXTTU5NUdzdTV0UGEzM001QVpGQ2F2MmdPVnVZIgotICAgICJkanBwUzBIT2ZvNWh2
NmNDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZOEVXYUFGRWZ3N09WK29EIgotICAg
ICJYVVpTSVlYcTNFSDJFNXAzcTM4QWhJT0xSakJ1Qit1dHl1N1E2cnhNTUh1dzJUdHNOK3piQVI3
eXJqZnNzZUEzIgotICAgICI0VE0xeGU0Tms3TlZOSFJvWlErQzBJcWY5ZnZjaW9NdlQxdFRybWEw
TWhLU2pGUXB4K1B2eUxWYkQ3WWRQODZMIgotICAgICJtZWVoS3FVN2gxcExHQWlHd2pvYVo5WWJo
Nkt1cS9NVEFIeTNEOCt3azdCMzZWQnhGNmRpVmxVUFpKWlFXS0p5IgotICAgICJNS3k5RzNzemUx
Wkd0OVdlRTBBTXZrTjJISWVmMEhUS0NVWjNlQnZlY09NaWp4TDBXaFdvNVF5ZjVrNnlsQ2FVIgot
ICAgICIyZngrTThEZkRjd0ZvN3RTZ0x4U0szR0NGcHhQZmlEdDZRazhjOXRRbjVTMWdZM3Q2TEp1
d1ZDRndVSVhsTmtCIgotICAgICJKRDcrY1oxWi90Q3JFaHpqM1lDazB1VVU4Q2lmb1UrNEZHK0hH
RlArU1B6dHNZRTA1NW1TajMrRXNoK295b1ZCIgotICAgICJnQkg5MHNFMlQxaTBlTkk4ZjYxb1Nn
d1lGZUhzZjdmQzcxWEVYTEZSK0d3TmRtd3FsbXdsRFpFcFR1N0JvTk4rIgotICAgICJxNytUZmsx
TVJrSmxMMVBINll1L0lQaFppTmg0dHlJcURPdGxZZnpwNTc3QStPVVUrcTVQUFJGUklzcWhlT3h0
IgotICAgICJtTmxIeDRVemQ0VTNJVGZtb2dKYXpqcXdZTzJ2aUJaWTRqVVFteVpzNzVlSC9qaVVG
SFdSc2hhM0Fkblc1TFdhIgotICAgICJHM1BGblliVzh1ckgwTlNKRy9XKy85REErWTdBYTBjczRU
UHB1QkdaME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgotICAgICIzdmpaRDN5OWtaazdtcmU5WEh3
a0k4TWRLNXM9Iik7Ci0gICAgCi0gICAgYXV0byBkZWNvZGVkQ2VydGlmaWNhdGUgPSBiYXNlNjRE
ZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlKTsKLSAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2Rl
ZENlcnRpZmljYXRlKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEhUVFBTZXJ2ZXI6OnRlc3RQcml2
YXRlS2V5KCkKLXsKLSAgICBTdHJpbmcgcGVtRW5jb2RlZFByaXZhdGVLZXkoIiIKLSAgICAiTUlJ
SlFnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NDU3d3Z2drb0FnRUFBb0lDQVFEZXVFM2hJK0R4
Vmo4KyIKLSAgICAiMFlNMHBqZFAwa2hLQnZMeGdZd25IUzg3NWhrVm1iY2JkK3hOU3pLOFBJUWZD
cW5scHNKbEVIOEhMVS9CYVEydCIKLSAgICAiL0dmOWMvdy9UZmdrK1VUcUt0V0s0QmhDdXBTSHFU
dGxId0trNHprWVJ4Rm1BQlFrWVpEQTJVNlFUQm9lY3daeiIKLSAgICAieEt3ZTZ1QU0rSGxjR21C
c1BLMTNzRW00SFUyZ2o4b21hRnhxT1FDNVhlOXF0TDY0OHVoODhjMnA3NXd2eUUyZSIKLSAgICAi
TmxEQWRacXMvam1Temg0Rnc0UHUzQ3JHNGVkV2I4VllTdWxqeGF6bXpVeXM5T0ZSME5xR01ReC81
aDhNbjBvdiIKLSAgICAiekxmVGpKTHdueDk0TEZoOXdmZ0crQXUwbVlFMGNtQ1BkNDBQOFF4bU1t
RFBZV3dHT3NtVHlRb1BmVnpEN2hhbiIKLSAgICAieFFYaXlSWmNKL2pyNlkwNGVuWGM5NUlKa3ZJ
WGhrQWRyTlJXU2NNOXh6WmcydFpWWFdMcWZkUFhtUWpSUGxudCIKLSAgICAidXkxMllBdTVLUVRa
eTRsSlUwN3FCSDVteFZGT2Q2NURIQlpOVFF3MFNFQThVNWZZR0VZL2w2S3lBUlRPU2ZFdyIKLSAg
ICAibDEwVU9mMWJHU1c3VW1HQ1RNQklELzdjQ2FXc1ZrdytFNkdNUzZYVE9PQTFIbEVHWFVid2ZQ
M1lzREhsUVFNRyIKLSAgICAiMTB1RHZVajRqd0ROQTZGM291MEY2UVFMRURYcWxKcW1tRG05eGIx
bi93M3BtV3dlZG5ZWE8wRFNjSTUrV1NnNyIKLSAgICAiMko2TTZseTRVM2dSVmdQRWkzQnkwckRV
c0o0MFAremlTYWhGR2RkdGZ1VDA3cHdqVlJSWXpuM2theTdtMDlyZiIKLSAgICAiY3prQmtVSnEv
YUE1VzVoMk9tbExRYzUram1HL3B3SURBUUFCQW9JQ0FHcmEvQ3AvZjBYcXZrOVNUK1BydDIvcCIK
LSAgICAia050TGVEWGNsTFNUY1AwSkNaSHVmUWFGdys3Vm5GTHBxZTRHdkxxOUJsbGN6OFZPdlF3
cmJlL0N3TlcrVnhDOCIKLSAgICAiUk1qZ2UycnFBQ2d3R2hPeDF0ODdsNDZOa1VRdzdFeTBsQ2xl
OGtyK01HZ0dHb1pxck1GZEtJUlVvTXY0bm1RNiIKLSAgICAidG1jMUZIdjVwTFJlOVErTHA1bllR
d0dvWW1ab1VPdWVvT2FPTDA4bTQ5cEdYUWtpTjhwSkRNeFNmTzNKdnRzdSIKLSAgICAiNGNxSWI2
a09RL2RPMUlzMUNUdlVSbGQxSVlMSDdZdVNoaTRaRXgyZzJhYzJVeXZ0NllteHh2TW1BakJTS3BH
ZCIKLSAgICAibG9pZXBobzMvTnJER1VLZHYzcTlRWXl6ckE4dzlHVDMyTERHcWdCWEppMXNjQkk4
Y0V4a3A2UDRpRGxsaHY3cyIKLSAgICAidlpzc3B2b2JSSmEzTzF6azg2M0xIWGEyNEpDbnl1emlt
cWV6WjJPbGg3bDRvbEhvWUQ2VUZDOWpmZDRLY0hSZyIKLSAgICAiMWM0c3lxdC9uOEFLLzFzMWVC
ZlM5ZHpiNUNmanQ5TXRLWXNseHZMenExV3dPSU53ejhySVl1UmkwUGNMbTlocyIKLSAgICAibCtV
MHUvekIzN2VNZ3Y2K2l3RFhrMWZTamJ1WXNFL2JFVFdZa25LR05GRkw1SlNpS1Y3V0NwbWdOVFRy
ckU0SyIKLSAgICAiUzhFNmhSOXVQT0Fhb3c3dlBDQ3Q0eExYLzQ4bDJFSTZaZXE2cU9wcTFsSjJx
Y3k4cjR0eXVRZ05STFFNa1pnMSIKLSAgICAiQXhRbDZ2blE4Q3U0aXUrTkloZWYweTlaN3FrZk52
WmVDajVHbEZCOWMyWWpWOFkybWRXZkpCNHFXSzNaLytNSiIKLSAgICAiUU9UQ0tSejcvTHhMTkJV
ZXBSakpBb0lCQVFEM1pzVjV0V1U5WlNLY1ZKOURDN1RaazBQK2xoY2lzWnIwbkwwdCIKLSAgICAi
UFF1UU8rcEh2UEkxTXFSbk5za0hKaHlQbnFWQ2krZHA4OXRLL0l0NTkwVUxsOG9zNlVDMUZoeXRC
UG9UMVlQZCIKLSAgICAiV0dXZXAycE9jN2JWcGk0aXAzMXkrSW1mZ2VaeUp0TUFUZG1lM2tCUEFP
ZTVOR0U5R2lnL2w1bnFMeWIwMnNkMSIKLSAgICAiUVc3TzBHZHFMeDNEcEx3NFNMbGhNZjZhRTB1
R1JTOHNmQjA4NWU0REduNTRPMndFVnVTWnFabDVOTkVmMzVSeiIKLSAgICAiWGdpbTNoK1JXRjFa
RlNRempCL3NtTjBaaCt2M0l6N3ZFSjFoMHl3VjZvK0d6dkhrUDlIRTZnTElodHlWOE9FdyIKLSAg
ICAidmx5WWsxR2E3cFVWR1JoOG84T01lNlJSOURRaTdKcUM0ZUk3R2NrbUJ6YXF6SmNEQW9JQkFR
RG1kZTZBVGV3MyIKLSAgICAiSDliUUs2eG5iTUluY3ovQ09wSUlTZGxjRmIyM0FIR0ViNGI0VmhK
RkJOd3hyTkw2dEhLU0ZMZVlaRkxoVGRoeCIKLSAgICAiUGZYeVVMSE5mNW96ZEVrbDBXcmxlcm9E
ZG9nYkN5V2c1dUpwOS9RNjhzYndiR3I4Q0FsTzdaSFlUcmp1UWYxSyIKLSAgICAiQVM5cENtNzdL
UDNrMmQzVWxHK3BlbERqWExvQnppWHEwTmp4SnBNejQ1dnJJeDhyU1d6Rk5qTUdqWFQzZlhhUyIK
LSAgICAiOTYyay8wQVhlaTUvYmZ1aEJ4bG03UG5pMGJRSklXRmtlYVV1R2xyT2FIRFJ4VWlYMXI5
SVpTOXd2NWxrMVB0ZyIKLSAgICAiaWRwYmNXeXcxOGNGR1R2amRLaFJiWkg4RXNibXptTk5zQ0dk
Z0NNcUZrS1lzVzE2UUtvQ2ovTkFvdkkzbjBxbiIKLSAgICAiNlZvUmEwc0dtVEdOQW9JQkFDbC9t
cVpFc0J1eFNESHkyOWdTTVo3QlhnbHBRYTQzSG1mamxyUHM1bkNtTERFbSIKLSAgICAiVjNabTdU
N0c2TWVETkEwL0xqZFFZbHZhWkxGYVZVYjdIQ0RLc0VZQ1JqRlo2U3Q0aHo0bWRYeitZK1ZON2I0
RiIKLSAgICAiR09rVGUrK2lLcC9MWXNKWHRzRDFGRFdiMldJVm83SGMxQUd6OEkrZ1FKb1NJdVl1
VEptTHpTTTArNUpEVU9WMSIKLSAgICAieThkU2JhUC9SdUV2MHFZamtHcVFWazVlNzBTVXlPektW
K1p4Q1RoZEh2Rkxpb3ZUT1RUZ2V2VXpFNzV4eWRmRyIKLSAgICAiZTdvQ210VHVyemd2bC82OVZ1
NVlnaWoxbjRDV1BISGNxNENRVy9ET1o3QmhGR0J3aHJXNzl2b0hKRjhQYndQTyIKLSAgICAiKzBE
VHVkREdZM25BRDVzVG5GOHpVdU9iWWloSnRmemovdDU5Zk9NQ2dnRUJBSVl1dUJVQVNiNjJ6UTRi
djUvZyIKLSAgICAiVlJNL0tTcGZpOU5EbkVqZlo3eDdoNXpDaXVWZ3gvWmpwQWxRUk84dnpWMThy
b0VPT0t0eDljbkpkOEFFZCtIYyIKLSAgICAibjkzQm9TMWh4MG1oc1ZoKzFUUlp3eWp5QlhZSnBx
d0Qyd3oxTXoxWE9JUTZFcWJNL3lQS1REMmdmd2c3eU81MyIKLSAgICAicVl4cnhac1dhZ1ZWY0c5
UStBUkJFUmF0VHdMcG9OK2ZjSkx4dWg0ci9DYS9MZXBzeG1Pckt6VGEvTUdLMUxoVyIKLSAgICAi
cldnSWsyL29nRVBMU3B0ajJkMVBFRE8rR0F6Rno0VktqaFcxTmxVaDlmR2k2SUpQTEhMbkJ3M29k
YmkwUzhLVCIKLSAgICAiZ0E5WjUrTEJjNWNsb3RBUDVydFFBOFdoL1pDRW9QVEtUVEEyYmpXMkhN
YXRKY2JHbVIwRnBDUXIzQU0wWTFTTyIKLSAgICAiTWFrQ2dnRUFMcnU2UVo2WVV3SkpHNDVIMWVx
L3JQZERZOHRxcWpKVlZpS29CVnZ6S2ovWGZKWllFVlFpSXc1cCIKLSAgICAidW9HaERveUZ1RlVl
SWgvZDFKYzJJcnV5Mldqb09raVFZdEl1Z0RISHhScmtMZFFjalBobENUQ0UvbW15U0p0KyIKLSAg
ICAiYmtVYmlISWJROGRKNXlqOFNLcjBiSHpxRXRPeTkvSmVSamtZR0hDNmJWV3BxNUZBMk1CaGY0
ZE5qSjRVRGxuVCIKLSAgICAidnVlUGNUanI3bm5mWTFzenR2ZlZsOUQ4ZG1nVCtUQm5PT1Y2eVdq
MWdtNWJTMUR4UVNMZ05tdEt4Sjh0QWgydSIKLSAgICAiZEVPYnZjcFNoUDIySXRPVmpTYW1wUnVB
dVJHMjZaZW1FYkdDSTNKNk1xeDN5Nm0rNkh3dWx0c2d0ZHpEZ3JGZSIKLSAgICAicUpmVThiYmRi
dTJwaTQ3WTRGZEpLMEhMZmZsNVJ3PT0iKTsKLQotICAgIGF1dG8gZGVjb2RlZFByaXZhdGVLZXkg
PSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOwotICAgIHJldHVybiBXVEZNb3Zl
KCpkZWNvZGVkUHJpdmF0ZUtleSk7Ci19Ci0gICAgCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdp
bi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tldFdpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzM3NDMxOTRjNTdkZDNkNzM4NzY2YTI2ODRlM2ZhOGQ2YTIwNTA0YgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtU29ja2V0V2luLmNw
cApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKworI2luY2x1ZGUgPG11dGV4PgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSTo6U29ja2V0IHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
Cit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGZsYWc7CisKKyAgICBzdGQ6OmNhbGxfb25j
ZShmbGFnLCBbXSB7CisgICAgICAgIFdTQURBVEEgZGF0YTsKKyAgICAgICAgV1NBU3RhcnR1cChN
QUtFV09SRCgyLCAwKSwgJmRhdGEpOworICAgIH0pOworfQorCitTb2NrZXQgc29ja2V0KGludCBk
b21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiA6OnNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1Zh
bGlkU29ja2V0KFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCAhPSBJTlZBTElE
X1NPQ0tFVDsKK30KKworU29ja2V0IGFjY2VwdChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVy
biA6OmFjY2VwdChzb2NrZXQsIG51bGxwdHIsIG51bGxwdHIpOworfQorCitpbnQgc2h1dGRvd24o
U29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpzaHV0ZG93bihzb2NrZXQsIFNEX0JPVEgp
OworfQorCitpbnQgY2xvc2UoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjpjbG9zZXNv
Y2tldChzb2NrZXQpOworfQorCitpbnQgcmVhZChTb2NrZXQgc29ja2V0LCB2b2lkKiBidWZmZXIs
IHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjpyZWN2KHNvY2tldCwgc3RhdGljX2Nhc3Q8
Y2hhcio+KGJ1ZmZlciksIGNvdW50LCAwKTsKK30KKworaW50IHdyaXRlKFNvY2tldCBzb2NrZXQs
IGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiA6OnNlbmQo
c29ja2V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQsIDApOworfQor
CisKK2Jvb2wgaXNTb2NrZXRSZWFkeShTb2NrZXQgcmVhZFNvY2tldCwgU29ja2V0IHdyaXRlU29j
a2V0KQoreworICAgIGZkX3NldCBmZHNldFJlYWQsIGZkc2V0V3JpdGU7CisgICAgRkRfWkVSTygm
ZmRzZXRSZWFkKTsKKyAgICBGRF9aRVJPKCZmZHNldFdyaXRlKTsKKworICAgIGlmIChpc1ZhbGlk
U29ja2V0KHJlYWRTb2NrZXQpKQorICAgICAgICBGRF9TRVQocmVhZFNvY2tldCwgJmZkc2V0UmVh
ZCk7CisgICAgaWYgKGlzVmFsaWRTb2NrZXQod3JpdGVTb2NrZXQpKQorICAgICAgICBGRF9TRVQo
d3JpdGVTb2NrZXQsICZmZHNldFdyaXRlKTsKKworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7
CisgICAgdGltZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAg
ICBhdXRvIHJjID0gOjpzZWxlY3QoMCwgJmZkc2V0UmVhZCwgJmZkc2V0V3JpdGUsIG51bGxwdHIs
ICZ0aW1lb3V0KTsKKyAgICByZXR1cm4gcmMgPiAwOworfQorCitib29sIGlzU29ja2V0UmVhZHlS
ZWFkaW5nKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIGlzU29ja2V0UmVhZHkoc29ja2V0
LCBJbnZhbGlkU29ja2V0KTsKK30KKworYm9vbCBpc1NvY2tldFJlYWR5V3JpdGluZyhTb2NrZXQg
c29ja2V0KQoreworICAgIHJldHVybiBpc1NvY2tldFJlYWR5KEludmFsaWRTb2NrZXQsIHNvY2tl
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEk6OlNvY2tldAo=
</data>
<flag name="review"
          id="481425"
          type_id="1"
          status="-"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="481429"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>