<?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>25348</bug_id>
          
          <creation_ts>2009-04-23 14:13:09 -0700</creation_ts>
          <short_desc>Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.</short_desc>
          <delta_ts>2009-10-29 14:55:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>jens</cc>
    
    <cc>mrowe</cc>
    
    <cc>pkasting</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>118538</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-23 14:13:09 -0700</bug_when>
    <thetext>WTF defines ThreadIdentifier as a platform-independent thread ID. It does it by keeping platform-dependent ThreadMap which maps native thread IDs into sequential integers. The mapping happens &apos;opportunistically&apos;, either when thread is created via WTF or when currentThread() is called first time on a thread that was not created via WTF. The mapping is removed when (and if) WTF::detachThread(threadID) is called.

These mappings may leak and get out of sync because detachThread() is not enforced in any way, on some platforms has empty implementation, and if some code (like destructors of thread-specific data) runs after detachThread is invoked, it creates a new mapping which is never removed. See bug 25138 for particular scenario.

Solution:
Remove ThreadMap and all the mappings. Make ThreadIdentifier a wrapper around platform-specific thread ID which implements comparison operators needed in the code. Fortunately, all platform thread IDs are either integers or opaque pointers so the ThreadIdentifier is easily copyable. This simplifies the code because there is not need to maintain mappings, and makes ThreadIdentifier valid even while running pthread&apos;s thread-specific destructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118540</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-23 14:14:36 -0700</bug_when>
    <thetext>*** Bug 25138 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118545</commentid>
    <comment_count>2</comment_count>
      <attachid>29715</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-23 14:47:44 -0700</bug_when>
    <thetext>Created attachment 29715
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118637</commentid>
    <comment_count>3</comment_count>
      <attachid>29715</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-24 00:06:06 -0700</bug_when>
    <thetext>Comment on attachment 29715
Proposed patch

+// so you can do threadId = 0 to &apos;invalidate&apos; the ThreadIdentifier.

Why not make a function for this?

+// Returns 0 if thread creation failed.
+// The thread name must be a literal since on some platforms it&apos;s passed in to the thread.
+ThreadIdentifier createThread(ThreadFunction, void*, const char* threadName);

Looks like the comment should say &quot;returns an invalid identifier...&quot;

+bool ThreadIdentifier::operator==(const ThreadIdentifier&amp;) const { return false; }
+bool ThreadIdentifier::operator!=(const ThreadIdentifier&amp;) const { return false; }

If there is only one thread, they are all equal - operator== should return true in ThreadingNone.

+        (WebCore::libxmlLoaderThread): use DEFINE_STATIC_LOCAL and accessor function for static thread id.

It&apos;s better to tell why, not what changed (even though is rather obvious in this case, I did have to pause and think).

+static ThreadIdentifier&amp; libxmlLoaderThread() {

The brace should go to the next line.

A major consequence of this change is that ThreadIdentifiers are no longer invalidated automatically - previously, pthreadHandleForIdentifier() would return 0 for a ThreadIdentifier that was created for a destroyed thread. Now there is a danger of using it after a thread is destroyed, if another thread gets the same platform ID in the future. I think that it&apos;s ok - but how did you check that no code relies on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119043</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-27 16:01:33 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 29715 [review])
&gt; +// so you can do threadId = 0 to &apos;invalidate&apos; the ThreadIdentifier.
&gt; 
&gt; Why not make a function for this?

:-) I was hesitating on this one because it&apos;s more changes (threadId is often initialized by 0). In fact, you are right and it&apos;s logical to have invalidate()/isValid() pair, or assignment/check for 0 pair, but not a mix of these two. Removed possibility to assign 0 and added invalidate().

&gt; 
&gt; +// Returns 0 if thread creation failed.
&gt; +// The thread name must be a literal since on some platforms it&apos;s passed in to
&gt; the thread.
&gt; +ThreadIdentifier createThread(ThreadFunction, void*, const char* threadName);
&gt; 
&gt; Looks like the comment should say &quot;returns an invalid identifier...&quot;
&gt; 

Done.

&gt; +bool ThreadIdentifier::operator==(const ThreadIdentifier&amp;) const { return
&gt; false; }
&gt; +bool ThreadIdentifier::operator!=(const ThreadIdentifier&amp;) const { return
&gt; false; }
&gt; 
&gt; If there is only one thread, they are all equal - operator== should return true
&gt; in ThreadingNone.
&gt; 

Done.

&gt; +        (WebCore::libxmlLoaderThread): use DEFINE_STATIC_LOCAL and accessor
&gt; function for static thread id.
&gt; 
&gt; It&apos;s better to tell why, not what changed (even though is rather obvious in
&gt; this case, I did have to pause and think).

Done. 

&gt; 
&gt; +static ThreadIdentifier&amp; libxmlLoaderThread() {
&gt; 
&gt; The brace should go to the next line.
&gt; 

Done.

&gt; A major consequence of this change is that ThreadIdentifiers are no longer
&gt; invalidated automatically - previously, pthreadHandleForIdentifier() would
&gt; return 0 for a ThreadIdentifier that was created for a destroyed thread. Now
&gt; there is a danger of using it after a thread is destroyed, if another thread
&gt; gets the same platform ID in the future. I think that it&apos;s ok - but how did you
&gt; check that no code relies on that?
&gt; 

That&apos;s a good point. I thought how could I verify that code does not de-facto rely on that. It shouldn&apos;t, because OSes typically don&apos;t makes guarantees about reusing handles of any sort, but it could grew to depend on previous implementation. I&apos;ve made comparison operators private, recompiled, and then looked at all the code locations that broke (ActiveDOMObject, SQLiteDatabase, DatabaseTracker, XMLTokenizerLibxml2). They all seem to use a pattern of creating an object on a certain thread, with lifespan enclosed by the thread - and then check incoming APIs that they are happening at the same thread. This particular usage is fine with reusing thread ids. So I am pretty certain that there is no explicit assumption that ids are unique in WebKit itself. Of course, there could be a bug hiding somewhere (including embedders that use the same WTF) that &apos;rely&apos; on uniqueness by accident. But in this case, it could be very hard to ASSERT in some programmatic way - since the difference in behavior may be quite subtle and effect of it could be unexpected. So I&apos;d give it a shot. Please let me know if you have some suggestion here!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119044</commentid>
    <comment_count>5</comment_count>
      <attachid>29832</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-27 16:03:08 -0700</bug_when>
    <thetext>Created attachment 29832
Modified after code review

Modified according to Alexey&apos;s comments ^^^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119067</commentid>
    <comment_count>6</comment_count>
      <attachid>29832</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-28 00:33:14 -0700</bug_when>
    <thetext>Comment on attachment 29832
Modified after code review

+    static ThreadIdentifier create(PlatformThreadIdentifier platformId)
+    {
+        return ThreadIdentifier(platformId);
+    }

This was not in the original patch - and it looks confusing to me. When I saw &quot;return ThreadIdentifier::create(threadHandle)&quot;, I thought the class was now refcounted.

Would marking the constructor as explicit accomplish what you wanted in a simpler way perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119074</commentid>
    <comment_count>7</comment_count>
      <attachid>29836</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-28 01:52:40 -0700</bug_when>
    <thetext>Created attachment 29836
create(..) -&gt; explicit ctor

That&apos;s right, explicit ctor is way better. Updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119081</commentid>
    <comment_count>8</comment_count>
      <attachid>29836</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-28 04:05:58 -0700</bug_when>
    <thetext>Comment on attachment 29836
create(..) -&gt; explicit ctor

+    ThreadIdentifier(const ThreadIdentifier&amp; another)
+        : m_platformId(another.m_platformId)
+    {
+    }

Sorry, I didn&apos;t notice it before - if you are adding a non-default copy constructor, you should also add a matching assignment operator. But since this does the same as default one, I think that it can be simply removed.

You may need to also update MSVC JavaScriptCore exports, now that it&apos;s a separate dll.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119258</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-28 20:37:41 -0700</bug_when>
    <thetext>While building on Windows in order to update .def files, I found a bug in ThreadingWin.cpp (I missed the fact that in Win implementation, we didn&apos;t use sequential counter, rather the ThreadMap was Win32_thread_id -&gt; threadHandle. 
Also an interesting issue - public Safari 4.0 beta apparently uses WTF threading functions, so changing their decorated symbol names (because of ThreadIdentifier parameter/return value is now decorated differently) makes run-safari fail since Safari can&apos;t load WTF threading functions from Webkit.dll. OSX Safari is fine though.

I&apos;m attaching the patch with removed copy constructor and fixes in ThreadingWin.cpp. My plan so far is to make sure layout test run fine on Windows and then check it in. However, I worry about Win Safari not being able to run with nightly builds in case it won&apos;t be able to update. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119259</commentid>
    <comment_count>10</comment_count>
      <attachid>29877</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-28 20:38:31 -0700</bug_when>
    <thetext>Created attachment 29877
Almost ready for landing - needs .def files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119269</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-28 22:38:20 -0700</bug_when>
    <thetext>We shouldn&apos;t break Windows nightly builds, that&apos;s for sure. CC&apos;ing Adam, who may have an idea how to handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119279</commentid>
    <comment_count>12</comment_count>
      <attachid>29877</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-04-29 06:50:36 -0700</bug_when>
    <thetext>Comment on attachment 29877
Almost ready for landing - needs .def files.

&gt;  int waitForThreadCompletion(ThreadIdentifier threadID, void** result)
&gt;  {
&gt; -    ASSERT(threadID);
&gt; +    ASSERT(threadID.isValid());
&gt;      
&gt; -    HANDLE threadHandle = threadHandleForIdentifier(threadID);
&gt; +    unsigned threadIdentifier = threadID.platformId();
&gt; +    HANDLE threadHandle = OpenThread(SYNCHRONIZE, FALSE, threadIdentifier);
&gt;      if (!threadHandle)
&gt;          LOG_ERROR(&quot;ThreadIdentifier %u did not correspond to an active thread when trying to quit&quot;, threadID);

Seems like this isn&apos;t an error condition anymore. It just means that the thread exited before waitForThreadCompletion was called.

I think your ChangeLog should mention these changes to ThreadingWin (closing the handle and the re-opening it later) explicitly. Maybe your changes to the other ports could use more explicit explanations, too (though I haven&apos;t read those changes as carefully).

Can we provide (deprecated) versions of the Threading.h functions that match the old signatures for backwards-compatibility with Safari 4 Public Beta? Seems like we&apos;d just need to have versions that continue to take a PlatformThreadIdentifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120189</commentid>
    <comment_count>13</comment_count>
      <attachid>30078</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-06 18:12:50 -0700</bug_when>
    <thetext>Created attachment 30078
Latest - with Win .def files and deprecated functions.

Thanks a lot for detailed review and advise!
I think I&apos;ve got it right now, but removing Alexey&apos;s r+ and requesting another look since there are additional changes (hope it&apos;s the last!):
- added &apos;deprecated&apos; functions for Windows, which take the PlatformThreadIdetifier. Had to change their names too because otherwise some of them only differ in returning type.
- updated .def files for Windows. Depricated functions are now exported with rename from WebKit.def so they match their old names. Verified that run-safari works fine now.

I think this is ready for another look. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120257</commentid>
    <comment_count>14</comment_count>
      <attachid>30078</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-07 02:03:23 -0700</bug_when>
    <thetext>Comment on attachment 30078
Latest - with Win .def files and deprecated functions.

+        which it uses. Next time Safari 4 builds, it will pick up new functions and the depricated ones

&quot;deprecated&quot;

+// In WebKit.def file, these functions are &apos;renamed&apos; so their name does not have &apos;Depricated&apos; part - this

Ditto.

\ No newline at end of file

Please add one (to three files).

+// Platform-independent wrapper of ThreadId. Assignable and copyable.

There is no such thing as ThreadId.

+// It happens that for all current implementations &apos;0&apos; works fine as &apos;invalid value&apos;.
+// Comparing is delegated to the platform implementations because it needs to
+// compare in a platform-dependent way.

I&apos;m not sure if these comments add anything - e.g., it&apos;s immediately obvious that comparing is implemented differently for different platforms by looking at the code alone. Though it is true that it may be slightly surprising that the only substantial difference from a typedef is a custom operator==.

But I&apos;m still somewhat worried about losing the guarantee that a ThreadIdentifier&apos;s native thread id is null after the thread exits. It is probably worth adding a comment that ThreadIdentifier is only valid for as long as its thread is alive, and after that, platformId may be invalid, or may reference a completely unrelated thread.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120342</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-07 14:35:39 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &quot;deprecated&quot;

Fixed.

&gt; have &apos;Depricated&apos; part - this
&gt; Ditto.

Fixed.

&gt; \ No newline at end of file
&gt; Please add one (to three files).

Fixed.

&gt; +// Platform-independent wrapper of ThreadId. Assignable and copyable.
&gt; 
&gt; There is no such thing as ThreadId.

Replaced with generic &apos;thread id&apos;.

&gt; +// It happens that for all current implementations &apos;0&apos; works fine as &apos;invalid
&gt; value&apos;.
&gt; +// Comparing is delegated to the platform implementations because it needs to
&gt; +// compare in a platform-dependent way.
&gt; 
&gt; I&apos;m not sure if these comments add anything - e.g., it&apos;s immediately obvious
&gt; that comparing is implemented differently for different platforms by looking at
&gt; the code alone. Though it is true that it may be slightly surprising that the
&gt; only substantial difference from a typedef is a custom operator==.
&gt; 
&gt; But I&apos;m still somewhat worried about losing the guarantee that a
&gt; ThreadIdentifier&apos;s native thread id is null after the thread exits. It is
&gt; probably worth adding a comment that ThreadIdentifier is only valid for as long
&gt; as its thread is alive, and after that, platformId may be invalid, or may
&gt; reference a completely unrelated thread.

Removed comment about implementation, added comment about validity scope and possible reference to another thread.

Fixed ChangeLogs, whitespaces in empty lines and committed: http://trac.webkit.org/changeset/43366
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120402</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-05-07 23:28:33 -0700</bug_when>
    <thetext>This caused bug 25640, so I will probably be rolling this change out.  Conveniently, no-one bothered to close this bug when the patch was landed so I don&apos;t have to reopen it to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120405</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-05-07 23:47:53 -0700</bug_when>
    <thetext>I rolled it out in r43392.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120486</commentid>
    <comment_count>18</comment_count>
      <attachid>30147</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-08 16:27:15 -0700</bug_when>
    <thetext>Created attachment 30147
Another attempt. Fixed Safari 4 beta on OSX issue.

Same patch, with fix for Safari 4 beta on OSX issue. 
The fix is in ThreadingPthreads.cpp, at the end - I&apos;ve added a (deprecated) function waitForThreadCompletion that takes uint32_t instead of ThreadIdentifier. It has the same decorated name as before so Safari 4 beta finds the function when it loads it from JavaScriptCore. The other functions, like CurrentThread() happen to have the same decorated names so no deprecated functions for them is needed. 
The new ThreadIdentifier is stored inside Safari 4 as uint32_t, and then we cast it back to pointer. 
Updated JavaScriptCore.exp and JavaScriptCore/ChangeLog accordingly, tested with Safari 4 beta.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120488</commentid>
    <comment_count>19</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-08 16:30:29 -0700</bug_when>
    <thetext>I flipped r? again, however the bulk of the patch is the same, there is an added function with old prototype as described above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120696</commentid>
    <comment_count>20</comment_count>
      <attachid>30147</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-11 11:05:14 -0700</bug_when>
    <thetext>Comment on attachment 30147
Another attempt. Fixed Safari 4 beta on OSX issue.

+// The only way to obtain a valid ThreadIdentifier is from createThread(...) or currentThread() functions.

I&apos;m not a fan of this new comment - it will likely stay there even if we add other ways.

Looks fine, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120706</commentid>
    <comment_count>21</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-11 12:50:23 -0700</bug_when>
    <thetext>Fixed comment and landed: http://trac.webkit.org/changeset/43507</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121173</commentid>
    <comment_count>22</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-13 17:22:01 -0700</bug_when>
    <thetext>The fix was reverted inhttp://trac.webkit.org/changeset/43663

The reason is the crash in nightlies on ppc with Safari 4. Safari 4 uses WTF and change in WTF threading API breaks binary compatibility with the shipped Safari 4 executable. 

No simple workaround was found since Safari loads the same JavaScriptCore.framework as WebCore and some functions only differ in return type which is not a part of decorated name so it&apos;s impossible to surface 2 sets of functions with the same names as was done for Win and x86 OSX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121366</commentid>
    <comment_count>23</comment_count>
      <attachid>30078</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-14 13:02:48 -0700</bug_when>
    <thetext>Comment on attachment 30078
Latest - with Win .def files and deprecated functions.

Removed r+ to get this out of the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121367</commentid>
    <comment_count>24</comment_count>
      <attachid>29836</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-14 13:03:01 -0700</bug_when>
    <thetext>Comment on attachment 29836
create(..) -&gt; explicit ctor

Removed r+ to get this out of the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121897</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-19 06:23:46 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; But I&apos;m still somewhat worried about losing the guarantee that a
&gt; ThreadIdentifier&apos;s native thread id is null after the thread exits.

See also: &lt;http://www.nabble.com/New-FAQ-entry-re-why-pthread_t-is-a-struct-td14358257.html&gt;

&quot;When pthread_t is a simple pointer to a struct some very difficult to debug problems arise from the process of freeing and later allocing thread structs because new pthread_t handles can acquire the identity of previously detached threads. The change to a struct was made, along with some changes to their internal managment, in order to guarantee (for practical applications) that the pthread_t handle will be unique over the  life of the running process.&quot;

Maybe it is really not good to lose this guarantee?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121898</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-19 06:25:34 -0700</bug_when>
    <thetext>At the same time, the same FAQ goes on to mention that many pthreads implementations guarantee pthread_t pointer uniqueness - it would be interesting to know if that&apos;s the case on platforms we care about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121951</commentid>
    <comment_count>27</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-05-19 12:28:52 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; At the same time, the same FAQ goes on to mention that many pthreads
&gt; implementations guarantee pthread_t pointer uniqueness - it would be
&gt; interesting to know if that&apos;s the case on platforms we care about.
&gt; 

I verified that this program:

#include &lt;iostream&gt;

static void* thread_proc(void* arg)
{  return 0; }

int main (int argc, char * const argv[]) {
    pthread_t threadHandle;
    for (int i = 0; i &lt; 10; ++i) {
     pthread_create(&amp;threadHandle, 0, thread_proc, 0);
     std::cout &lt;&lt; threadHandle &lt;&lt; &quot;\n&quot;;
     pthread_join(threadHandle, 0);
    }
    return 0;
}

prints the same number 10 times on x86 Leopard :-)

I agree with the worry that stale thread ids could start matching wrong threads and occasionally cause a hard-to-find threading issue. Hm. Initially, the motivation for this change was the implementation of workers in Chrome+v8 where the mapping schema didn&apos;t work because of thread-specific destructors. I&apos;ll see if it can be fixed other way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121952</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-19 12:39:10 -0700</bug_when>
    <thetext>For me, the best thing about this change was getting rid of a global map protected with a mutex.

&gt; prints the same number 10 times on x86 Leopard :-)

Thanks for checking! That&apos;s definitely a platform we care about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133932</commentid>
    <comment_count>29</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-07-22 15:07:50 -0700</bug_when>
    <thetext>Resolving WONTFIX. While the fix can eliminate a mutex-protected table of ids and some edge issues with maintaining that table, it also makes it possible to recycle thread ids from terminated thread to a new one, which may cause some hard-to-debug issues since code in general relies on comparing ids to make sure the thread is the same one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159040</commentid>
    <comment_count>30</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-10-29 13:33:18 -0700</bug_when>
    <thetext>*** Bug 30922 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159051</commentid>
    <comment_count>31</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-10-29 13:42:12 -0700</bug_when>
    <thetext>Given the incoming duped bug, is it still appropriate to have this be WONTFIX?  Perhaps one of the solutions on that bug would be appropriate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159073</commentid>
    <comment_count>32</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-29 14:12:16 -0700</bug_when>
    <thetext>I think something needs to be done about this. As I said in my duped bug, Chromium is spending about 10% of its garbage-collection time in WTF::currentThread, as a result of the cleanup code for released DOM bindings.

Is pthread_getspecific fast enough to use as a replacement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159077</commentid>
    <comment_count>33</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-29 14:17:17 -0700</bug_when>
    <thetext>The code that you mentioned (v8 GC ensureDeref) was written a while ago to deref DOM objects created in Worker threads - this was before we realized it&apos;s too hard to make v8 running in separate threads and switched to a worker-in-separate-process solution.

I don&apos;t know a scenario today when wrappers for dom objects are created on different threads. It is possible that the code querying currentThread() may be simply deleted (together with perf problem).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159100</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-10-29 14:55:45 -0700</bug_when>
    <thetext>&gt; Is pthread_getspecific fast enough to use as a replacement?

I&apos;m not sure how it could be used - we need to manipulate thread identifiers of other threads, but thread-specific values are unreachable from other threads, as far as I know.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29715</attachid>
            <date>2009-04-23 14:47:44 -0700</date>
            <delta_ts>2009-04-27 16:03:08 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33211</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwNzdmMzZkLi4wYTgxYzg5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMDktMDQtMjMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBXVEY6OlRo
cmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFkIGlkLCBy
ZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6VGhy
ZWFkSWRlbnRpZmllcik6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OmlzVmFsaWQp
OgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpwbGF0Zm9ybUlkKToKKyAgICAgICAg
VGhyZWFkSWRlbnRpZmllciBpcyBub3cgYSBjbGFzcywgY29udGFpbmluZyBhIFBsYXRmb3JtVGhy
ZWFkSWRlbnRpZmllciBhbmQKKyAgICAgICAgbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGFjcm9zcyB0
aGUgY29kZSBvbiB0aHJlYWQgaWRzOiBjb25zdHJ1Y3Rpb24sIGNvbXBhcmlzb25zLAorICAgICAg
ICBjaGVjayBmb3IgJ3ZhbGlkJyBzdGF0ZSBldGMuICcwJyBpcyB1c2VkIGFzIGludmFsaWQgaWQs
IHdoaWNoIGhhcHBlbnMgdG8ganVzdCB3b3JrCisgICAgICAgIHdpdGggYWxsIHBsYXRmb3JtLXNw
ZWNpZmljIHRocmVhZCBpZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgQWxsIHRoZSBmb2xs
b3dpbmcgZmlsZXMgcmVmbGVjdCB0aGUgbmV3IFRocmVhZElkZW50aWZpZXIgZm9yIGVhY2ggcGxh
dGZvcm0uCisgICAgICAgIFdlIHJlbW92ZSBUaHJlYWRNYXAgYW5kIHRocmVhZE1hcE11dGV4IGZy
b20gYWxsIG9mIHRoZW0sIHJlbW92ZSB0aGUgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgcG9wdWxh
dGVkL3NlYXJjaGVkL2NsZWFyZWQgdGhlIG1hcCBhbmQgYWRkIHBsYXRmb3JtLXNwZWNpZmljIGNv
bXBhcmlzb24gb3BlcmF0b3JzCisgICAgICAgIGZvciBUaHJlYWRJZGVudGlmaWVyOgorCisgICAg
ICAgICogd3RmL1RocmVhZGluZ0d0ay5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZp
ZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6
OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9U
aHJlYWRpbmdOb25lLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0pOgorCisg
ICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFk
SWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAg
ICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6CisgICAgICAgIChX
VEY6OmN1cnJlbnRUaHJlYWQpOgorCisgICAgICAgICogd3RmL1RocmVhZGluZ1F0LmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6
OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjppbml0aWFsaXpl
VGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAg
ICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OmN1cnJlbnRU
aHJlYWQpOgorCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6
OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVu
dGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2Fp
dEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKwogMjAwOS0wNC0yMCAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIE1jQ3VsbG91Z2guCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggOTkzZWJlNy4uNGNmOGVjMSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cApAQCAtMjc0LDcgKzI3NCw3IEBAIF9fWk4zV1RGMTFjdXJyZW50
VGltZUV2CiBfX1pOM1dURjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFk
RVBGUHZTMF9FUzBfCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCi1fX1pO
M1dURjEyZGV0YWNoVGhyZWFkRWoKK19fWk4zV1RGMTJkZXRhY2hUaHJlYWRFTlNfMTZUaHJlYWRJ
ZGVudGlmaWVyRQogX19aTjNXVEYxMmlzTWFpblRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVt
YmVyRXYKIF9fWk4zV1RGMTNjdXJyZW50VGhyZWFkRXYKQEAgLTI5NSw3ICsyOTUsNyBAQCBfX1pO
M1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyOWRlY3JlbWVudEV2CiBfX1pOM1dURjIxUmVmQ291
bnRlZExlYWtDb3VudGVyOWluY3JlbWVudEV2CiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3Vu
dGVyQzFFUEtjCiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyRDFFdgotX19aTjNXVEYy
M3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRWpQUHYKK19fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbkVOU18xNlRocmVhZElkZW50aWZpZXJFUFB2CiBfX1pOM1dURjI3cmVsZWFzZUZhc3RN
YWxsb2NGcmVlTWVtb3J5RXYKIF9fWk4zV1RGMjhzZXRNYWluVGhyZWFkQ2FsbGJhY2tzUGF1c2Vk
RWIKIF9fWk4zV1RGMzZsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhFdgpAQCAt
MzU3LDYgKzM1Nyw5IEBAIF9fWk5LM0pTQzhKU09iamVjdDl0b0Jvb2xlYW5FUE5TXzlFeGVjU3Rh
dGVFCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFF
CiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEY4Q29sbGF0b3I3
Y29sbGF0ZUVQS3RtUzJfbQorX19aTkszV1RGMTZUaHJlYWRJZGVudGlmaWVyN2lzVmFsaWRFdgor
X19aTkszV1RGMTZUaHJlYWRJZGVudGlmaWVyZXFFUktTMF8KK19fWk5LM1dURjE2VGhyZWFkSWRl
bnRpZmllcm5lRVJLUzBfCiBfX1pUVk4zSlNDMTJTdHJpbmdPYmplY3RFCiBfX1pUVk4zSlNDMTRK
U0dsb2JhbE9iamVjdEUKIF9fWlRWTjNKU0MxNUpTV3JhcHBlck9iamVjdEUKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmcuaAppbmRleCAwMmZhM2E0Li5hYWUwNzc5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkaW5nLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCkBA
IC04NSwxMiArODUsMTQgQEAKICNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogdHlwZWRlZiBzdHJ1
Y3QgX0dNdXRleCBHTXV0ZXg7CiB0eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0NvbmQ7Cit0eXBlZGVm
IHN0cnVjdCBfR1RocmVhZCBHVGhyZWFkOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKICNp
bmNsdWRlIDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFNdXRleDsKK2Ns
YXNzIFFUaHJlYWQ7CiBjbGFzcyBRV2FpdENvbmRpdGlvbjsKIFFUX0VORF9OQU1FU1BBQ0UKICNl
bmRpZgpAQCAtMTA1LDM0ICsxMDcsMTggQEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotdHlwZWRlZiB2b2lk
KiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7Ci0KLS8vIFJldHVybnMgMCBpZiB0
aHJlYWQgY3JlYXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRl
cmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQu
Ci1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBj
cmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVh
ZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7
Ci0KLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhl
bHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJv
bSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpOwotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLWJv
b2wgaXNNYWluVGhyZWFkKCk7Ci1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRl
bnRpZmllciwgdm9pZCoqKTsKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwot
CiAjaWYgVVNFKFBUSFJFQURTKQogdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRl
eDsKIHR5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxhdGZvcm1Db25kaXRpb247Cit0eXBlZGVmIHB0
aHJlYWRfdCBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShHVEspCiB0
eXBlZGVmIEdPd25QdHI8R011dGV4PiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiBHT3duUHRyPEdD
b25kPiBQbGF0Zm9ybUNvbmRpdGlvbjsKK3R5cGVkZWYgR1RocmVhZCogUGxhdGZvcm1UaHJlYWRJ
ZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQ
QUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7CiB0eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQQUNF
KFFXYWl0Q29uZGl0aW9uKSogUGxhdGZvcm1Db25kaXRpb247Cit0eXBlZGVmIFFUX1BSRVBFTkRf
TkFNRVNQQUNFKFFUaHJlYWQpKiBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAjZWxpZiBQTEFU
Rk9STShXSU5fT1MpCiBzdHJ1Y3QgUGxhdGZvcm1NdXRleCB7CiAgICAgQ1JJVElDQUxfU0VDVElP
TiBtX2ludGVybmFsTXV0ZXg7CkBAIC0xNDksMTEgKzEzNSw2NCBAQCBzdHJ1Y3QgUGxhdGZvcm1D
b25kaXRpb24gewogICAgIGJvb2wgdGltZWRXYWl0KFBsYXRmb3JtTXV0ZXgmLCBEV09SRCBkdXJh
dGlvbk1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzaWduYWwoYm9vbCB1bmJsb2NrQWxsKTsKIH07
Cit0eXBlZGVmIHVuc2lnbmVkIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllcjsKICNlbHNlCiB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ29uZGl0aW9u
OwogI2VuZGlmCiAgICAgCisvLyBQbGF0Zm9ybS1pbmRlcGVuZGVudCB3cmFwcGVyIG9mIFRocmVh
ZElkLiBBc3NpZ25hYmxlIGFuZCBjb3B5YWJsZS4KKy8vIEl0IGhhcHBlbnMgdGhhdCBmb3IgYWxs
IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zICcwJyB3b3JrcyBmaW5lIGFzICdpbnZhbGlkIHZhbHVl
JywKKy8vIHNvIHlvdSBjYW4gZG8gdGhyZWFkSWQgPSAwIHRvICdpbnZhbGlkYXRlJyB0aGUgVGhy
ZWFkSWRlbnRpZmllci4KKy8vIENvbXBhcmluZyBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHBsYXRmb3Jt
IGltcGxlbWVudGF0aW9ucyBiZWNhdXNlIGl0IG5lZWRzIHRvCisvLyBjb21wYXJlIGluIGEgcGxh
dGZvcm0tZGVwZW5kZW50IHdheS4KK2NsYXNzIFRocmVhZElkZW50aWZpZXIgeworcHVibGljOgor
ICAgIFRocmVhZElkZW50aWZpZXIoKQorICAgICAgICA6IG1fcGxhdGZvcm1JZCgwKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFpc1ZhbGlkKCkpOworICAgIH0KKworICAgIFRocmVhZElkZW50aWZp
ZXIoUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIHBsYXRmb3JtSWQpCisgICAgICAgIDogbV9wbGF0
Zm9ybUlkKHBsYXRmb3JtSWQpCisgICAgeworICAgIH0KKworICAgIFRocmVhZElkZW50aWZpZXIo
Y29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikKKyAgICAgICAgOiBtX3BsYXRmb3JtSWQo
YW5vdGhlci5tX3BsYXRmb3JtSWQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0ICB7IHJldHVybiBtX3BsYXRmb3JtSWQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRocmVhZElkZW50aWZpZXImKSBjb25zdDsKKworICAgIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmll
ciBwbGF0Zm9ybUlkKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUlkOyAgfQorCitwcml2YXRl
OgorICAgIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBtX3BsYXRmb3JtSWQ7Cit9OworCit0eXBl
ZGVmIHZvaWQqICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKKworLy8gUmV0dXJu
cyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCisvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBi
ZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhl
IHRocmVhZC4KK1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2
b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKy8vIEludGVybmFsIHBsYXRmb3JtLXNw
ZWNpZmljIGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4KK1RocmVhZElkZW50aWZpZXIgY3Jl
YXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKKworLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9u
LgorLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJl
IHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgordm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKK1RocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVh
ZCgpOworYm9vbCBpc01haW5UaHJlYWQoKTsKK2ludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihU
aHJlYWRJZGVudGlmaWVyLCB2b2lkKiopOwordm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRp
Zmllcik7CisgICAgCiBjbGFzcyBNdXRleCA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBN
dXRleCgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ0d0ay5jcHAg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nR3RrLmNwcAppbmRleCBiNGY0ZGUxLi5hMjRj
Y2FjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nR3RrLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nR3RrLmNwcApAQCAtNDIsMTYgKzQyLDIwIEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4OwotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRp
ZmllcjsKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVu
dGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtSWQgPT0gYW5v
dGhlci5tX3BsYXRmb3JtSWQ7Cit9CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQor
Ym9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXIm
IGFub3RoZXIpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE11dGV4IG11dGV4OwotICAgIHJldHVybiBt
dXRleDsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkICE9IGFub3RoZXIubV9wbGF0Zm9ybUlkOwog
fQogCitzdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4OworCitz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKKwogdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCgpKQpAQCAt
NjAsNyArNjQsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogCiAgICAgaWYgKCFhdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsK
ICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwogICAgICAgICBtYWlu
VGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgaW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKQEAgLTc4LDU0ICs4MSw2IEBAIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljTXV0ZXgoKQogICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
LT51bmxvY2soKTsKIH0KIAotc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgR1RocmVh
ZCo+JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIs
IEdUaHJlYWQqPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50
aWZpZXIgaWRlbnRpZmllckJ5R3RocmVhZEhhbmRsZShHVGhyZWFkKiYgdGhyZWFkKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIEhhc2hNYXA8VGhy
ZWFkSWRlbnRpZmllciwgR1RocmVhZCo+OjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4o
KTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChpLT5zZWNvbmQgPT0gdGhyZWFkKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OwotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxp
c2hJZGVudGlmaWVyRm9yVGhyZWFkKEdUaHJlYWQqJiB0aHJlYWQpCi17Ci0gICAgQVNTRVJUKCFp
ZGVudGlmaWVyQnlHdGhyZWFkSGFuZGxlKHRocmVhZCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRl
bnRpZmllckNvdW50ID0gMTsKLQotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlmaWVyQ291bnQs
IHRocmVhZCk7Ci0KLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7Ci19Ci0KLXN0YXRpYyBH
VGhyZWFkKiB0aHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVh
ZE1hcCgpLmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmll
cihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLQotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotCi0g
ICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0KLQogVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25z
dCBjaGFyKikKIHsKICAgICBHVGhyZWFkKiB0aHJlYWQ7CkBAIC0xMzQsOCArODksNyBAQCBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEID0gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZCh0aHJl
YWQpOwotICAgIHJldHVybiB0aHJlYWRJRDsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcih0
aHJlYWQpOwogfQogCiB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKQEAg
LTE0NCwxNSArOTgsMTQgQEAgdm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciop
CiAKIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
LCB2b2lkKiogcmVzdWx0KQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUKHRo
cmVhZElELmlzVmFsaWQoKSk7CiAKLSAgICBHVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRGb3JJZGVu
dGlmaWVyKHRocmVhZElEKTsKKyAgICBHVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRJRC5wbGF0Zm9y
bUlkKCk7CiAKICAgICB2b2lkKiBqb2luUmVzdWx0ID0gZ190aHJlYWRfam9pbih0aHJlYWQpOwog
ICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBqb2luUmVzdWx0OwogCi0gICAgY2xl
YXJUaHJlYWRGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
MTYyLDEwICsxMTUsNyBAQCB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKQogCiBU
aHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQogewotICAgIEdUaHJlYWQqIGN1cnJlbnRU
aHJlYWQgPSBnX3RocmVhZF9zZWxmKCk7Ci0gICAgaWYgKFRocmVhZElkZW50aWZpZXIgaWQgPSBp
ZGVudGlmaWVyQnlHdGhyZWFkSGFuZGxlKGN1cnJlbnRUaHJlYWQpKQotICAgICAgICByZXR1cm4g
aWQ7Ci0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoY3VycmVudFRocmVh
ZCk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoZ190aHJlYWRfc2VsZigpKTsKIH0KIAog
Ym9vbCBpc01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVh
ZGluZ05vbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ05vbmUuY3BwCmluZGV4
IDI0NDMxZmMuLjg2ZTk2ODEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdOb25lLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nTm9uZS5jcHAKQEAg
LTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK2Jvb2wgVGhyZWFkSWRlbnRpZmll
cjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVu
dGlmaWVyJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogdm9pZCBpbml0aWFsaXplVGhyZWFk
aW5nKCkgeyB9CiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1
bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciopIHsgcmV0dXJuIDA7IH0KIHZvaWQgc2V0VGhyZWFk
TmFtZUludGVybmFsKGNvbnN0IGNoYXIqKSB7IH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCmluZGV4IDFiYjMwMzMuLjZjNDM4M2QgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtNDgsNyArNDgsMTUgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBwdGhyZWFkX3Q+IFRocmVh
ZE1hcDsKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVu
dGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBwdGhyZWFkX2VxdWFsKG1fcGxh
dGZvcm1JZCwgYW5vdGhlci5tX3BsYXRmb3JtSWQpOworfQorCitib29sIFRocmVhZElkZW50aWZp
ZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gIXB0aHJlYWRfZXF1YWwobV9wbGF0Zm9ybUlkLCBhbm90aGVyLm1fcGxhdGZv
cm1JZCk7Cit9CiAKIHN0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0
ZXg7CiAKQEAgLTU2LDE3ICs2NCwxMCBAQCBzdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpY011dGV4Owogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50
aWZpZXI7IC8vIFRoZSB0aHJlYWQgdGhhdCB3YXMgdGhlIGZpcnN0IHRvIGNhbGwgaW5pdGlhbGl6
ZVRocmVhZGluZygpLCB3aGljaCBtdXN0IGJlIHRoZSBtYWluIHRocmVhZC4KICNlbmRpZgogCi1z
dGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011
dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11
dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCk7CiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOwpA
QCAtODYsNTQgKzg3LDYgQEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleCgpCiAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwog
fQogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVGhyZWFkTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMg
VGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRf
dCYgcHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0KLSAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigp
OwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYg
KHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkKLSAgICAgICAgICAgIHJl
dHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUocHRocmVhZF90
JiBwdGhyZWFkSGFuZGxlKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRs
ZShwdGhyZWFkSGFuZGxlKSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAx
OwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgcHRocmVhZEhhbmRsZSk7
Ci0gICAgCi0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgcHRocmVh
ZF90IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIAotICAgIHJldHVy
biB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRh
aW5zKGlkKSk7Ci0gICAgCi0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0KLQogI2lmIFBM
QVRGT1JNKEFORFJPSUQpCiAvLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgdGhyZWFkcyBtdXN0
IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgogc3RydWN0IFRocmVh
ZERhdGEgewpAQCAtMTY2LDcgKzExOSw3IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
SW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVw
IHdpdGggZGF0YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVh
ZEhhbmRsZSk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkSGFuZGxlKTsKIH0K
ICNlbHNlCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQpAQCAtMTc3LDcgKzEzMCw3
IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZSh0aHJlYWRIYW5k
bGUpOworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRsZSk7CiB9CiAjZW5k
aWYKIApAQCAtMTkyLDM1ICsxNDUsMjkgQEAgdm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29u
c3QgY2hhciogdGhyZWFkTmFtZSkKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVh
ZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICAKLSAgICBwdGhyZWFk
X3QgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsK
KyAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKICAK
ICAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCByZXN1bHQp
OwogICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhy
ZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVp
dCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdh
cyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgcHRocmVhZEhhbmRsZSk7
CiAgICAgICAgIAotICAgIGNsZWFyUHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQp
OwogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJU
KHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAgCi0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUg
PSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgcHRocmVhZF90IHB0
aHJlYWRIYW5kbGUgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgCiAgICAgcHRocmVhZF9k
ZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcih0aHJlYWRJRCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgp
CiB7Ci0gICAgcHRocmVhZF90IGN1cnJlbnRUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBp
ZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY3VycmVu
dFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJuIFRocmVhZElk
ZW50aWZpZXIocHRocmVhZF9zZWxmKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUXQuY3BwIGIvSmF2YVNjcmlwdENv
cmUvd3RmL1RocmVhZGluZ1F0LmNwcAppbmRleCAxZmRkMmJiLi45N2RhNWM2IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUXQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmdRdC5jcHAKQEAgLTQxLDYgKzQxLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRp
ZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3Ro
ZXIubV9wbGF0Zm9ybUlkOworfQorCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0o
Y29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybUlkICE9IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQorCiBjbGFzcyBUaHJlYWRQcml2
YXRlIDogcHVibGljIFFUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZFByaXZhdGUoVGhyZWFk
RnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSk7CkBAIC02OSw3MCArNzksMTIgQEAgc3Rh
dGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKIAogc3RhdGljIFRo
cmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7CiAKLXN0YXRpYyBNdXRleCYgdGhy
ZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRpYyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0
ZXg7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiYgdGhy
ZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFk
Kj4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlk
ZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUoUVRocmVhZComIHRocmVhZCkKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBIYXNoTWFwPFRocmVhZElkZW50
aWZpZXIsIFFUaHJlYWQqPjo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAg
Zm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoaS0+c2Vj
b25kID09IHRocmVhZCkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRp
ZmllckZvclRocmVhZChRVGhyZWFkKiYgdGhyZWFkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmll
ckJ5UXRocmVhZEhhbmRsZSh0aHJlYWQpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKLQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJD
b3VudCA9IDE7Ci0KLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCB0aHJlYWQp
OwotCi0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBjbGVh
clRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCku
Y29udGFpbnMoaWQpKTsKLQotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRp
YyBRVGhyZWFkKiB0aHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRo
cmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAg
ICAgaWYgKCFhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFk
TWFwTXV0ZXgoKTsKICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwot
ICAgICAgICBRVGhyZWFkKiBtYWluVGhyZWFkID0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2Uo
KS0+dGhyZWFkKCk7Ci0gICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gaWRlbnRpZmllckJ5
UXRocmVhZEhhbmRsZShtYWluVGhyZWFkKTsKLSAgICAgICAgaWYgKCFtYWluVGhyZWFkSWRlbnRp
ZmllcikKLSAgICAgICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gZXN0YWJsaXNoSWRlbnRp
ZmllckZvclRocmVhZChtYWluVGhyZWFkKTsKKyAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIg
PSBUaHJlYWRJZGVudGlmaWVyKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgp
KTsKICAgICAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICB9CiB9CkBAIC0xNTksNyAr
MTExLDcgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KIAogICAgIFFUaHJlYWQqIHRocmVhZFJl
ZiA9IHN0YXRpY19jYXN0PFFUaHJlYWQqPih0aHJlYWQpOwogCi0gICAgcmV0dXJuIGVzdGFibGlz
aElkZW50aWZpZXJGb3JUaHJlYWQodGhyZWFkUmVmKTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRp
Zmllcih0aHJlYWRSZWYpOwogfQogCiB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBj
aGFyKikKQEAgLTE2OCwxMyArMTIwLDEyIEBAIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNv
bnN0IGNoYXIqKQogCiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAg
IEFTU0VSVCh0aHJlYWRJRC5Jc1ZhbGlkKCkpOwogCi0gICAgUVRocmVhZCogdGhyZWFkID0gdGhy
ZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgUVRocmVhZCogdGhyZWFkID0gdGhyZWFk
SUQucGxhdGZvcm1JZCgpOwogCiAgICAgYm9vbCByZXMgPSB0aHJlYWQtPndhaXQoKTsKIAotICAg
IGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CiAgICAgaWYgKHJlc3VsdCkKICAg
ICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PFRocmVhZFByaXZhdGUqPih0aHJlYWQpLT5nZXRS
ZXR1cm5WYWx1ZSgpOwogCkBAIC0xODcsMTAgKzEzOCw3IEBAIHZvaWQgZGV0YWNoVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIpCiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0g
ICAgUVRocmVhZCogY3VycmVudFRocmVhZCA9IFFUaHJlYWQ6OmN1cnJlbnRUaHJlYWQoKTsKLSAg
ICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUoY3Vy
cmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRl
bnRpZmllckZvclRocmVhZChjdXJyZW50VGhyZWFkKTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRp
ZmllcihRVGhyZWFkOjpjdXJyZW50VGhyZWFkKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgp
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDQxNWJhNTMuLjVkOWUzZTAgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05OCw2ICs5OCwxNiBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAorYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IFRo
cmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1J
ZCA9PSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKworYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpv
cGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKwogLy8gTVNf
VkNfRVhDRVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwg
YWxsIGNvbWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hj
YjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2
RDEzODg7CiAKQEAgLTEzOSwxNyArMTQ5LDEwIEBAIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljTXV0ZXgoKQogCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFk
SWRlbnRpZmllcjsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3Rh
dGljIE11dGV4IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXpl
VGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11dGV4
OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVt
YmVyR2VuZXJhdG9yKCk7CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgICAg
IG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOwpAQCAtMTU3LDMyICsxNjAs
NiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIH0KIH0KIAotc3RhdGljIEhhc2hN
YXA8RFdPUkQsIEhBTkRMRT4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8RFdP
UkQsIEhBTkRMRT4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3Jl
VGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFu
ZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBB
U1NFUlQoIXRocmVhZE1hcCgpLmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCku
YWRkKHRocmVhZElELCB0aHJlYWRIYW5kbGUpOwotfQotCi1zdGF0aWMgSEFORExFIHRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChp
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJl
YWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLSAgICB0aHJlYWRN
YXAoKS5yZW1vdmUoaWQpOwotfQotCiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsK
ICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZv
aWQqIGRhdGEpIDogZnVuY3Rpb24oZnVuY3Rpb24pLCBkYXRhKGRhdGEpIHt9CiAKQEAgLTIwOCw3
ICsxODUsNiBAQCBzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQo
dm9pZCogcGFyYW0pCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVh
ZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
CiB7CiAgICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7Ci0gICAgVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJRCA9IDA7CiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBpbnZvY2F0
aW9uID0gbmV3IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbihlbnRyeVBvaW50LCBkYXRhKTsKICAg
ICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRo
cmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24sIDAsICZ0aHJlYWRJ
ZGVudGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKQEAgLTIxNiw0MyArMTkyLDM4
IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHRocmVhZElEID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4odGhyZWFkSWRlbnRp
Zmllcik7Ci0gICAgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIodGhyZWFkSWRlbnRpZmll
ciwgdGhyZWFkSGFuZGxlKTsKLQotICAgIHJldHVybiB0aHJlYWRJRDsKKyAgICByZXR1cm4gVGhy
ZWFkSWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVyKTsKIH0KIAogaW50IHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0g
ICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKICAg
ICAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0
aHJlYWRJRCk7CisgICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRmb3JtSWQo
KTsKICAgICBpZiAoIXRocmVhZEhhbmRsZSkKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5
aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CiAgCiAgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRG
b3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5SZXN1
bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAl
dSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsK
KyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdhcyBmb3VuZCB0byBiZSBk
ZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSGFuZGxlKTsKIAogICAgIENsb3NlSGFu
ZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRo
cmVhZElEKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVh
ZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Cisg
ICAgQVNTRVJUKHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAgCi0gICAgSEFORExFIHRocmVhZEhh
bmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIEhBTkRMRSB0
aHJlYWRIYW5kbGUgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgaWYgKHRocmVhZEhhbmRs
ZSkKICAgICAgICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBjbGVhclRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogfQogCiBUaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihH
ZXRDdXJyZW50VGhyZWFkSWQoKSk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoR2V0Q3Vy
cmVudFRocmVhZElkKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRhYjhmY2QuLjBiNmEx
NWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDQtMjMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAg
IENoYW5nZSBXVEY6OlRocmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBl
ZCkgdGhyZWFkIGlkLCByZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgIE1vc3Qgb2YgdGhlIGNo
YW5nZSBpcyBpbiBXVEYuCisgICAgICAgIFVubGVzcyBub3RlZCwgYWxsIHRoZSBmb2xsb3dpbmcg
ZmlsZXMgY2hhbmdlZCB0byB1c2UgdGhlIG5ldyBUaHJlYWRJZGVudGlmaWVyOjppc1ZhbGlkKCkK
KyAgICAgICAgbWV0aG9kIGluc3RlYWQgb2YganVzdCBkb2luZyAnaWYobV90aHJlYWRJRCknIGtp
bmQgb2YgY2hlY2tzLCBzaW5jZSBUaHJlYWRJZGVudGlmaWVyCisgICAgICAgIGlzIG5vdyBhIGNs
YXNzIHJhdGhlciB0aGVuIGFuIGludGVnZXIuCisKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVy
TGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaWJ4bWxMb2FkZXJUaHJlYWQpOiB1c2Ug
REVGSU5FX1NUQVRJQ19MT0NBTCBhbmQgYWNjZXNzb3IgZnVuY3Rpb24gZm9yIHN0YXRpYyB0aHJl
YWQgaWQuCisgICAgICAgIChXZWJDb3JlOjptYXRjaEZ1bmMpOiB1c2UgdGhlIG5ldyBhY2Nlc3Nv
ciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Om9wZW5GdW5jKTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVTdHJpbmdQYXJzZXIpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZU1lbW9yeVBhcnNlcik6IGRpdHRvLgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Om9wZW4pOgorICAg
ICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpk
YXRhYmFzZVRocmVhZCk6IHJlbW92ZSBtX3RocmVhZElEIGZyb20gZGVidWcgb3V0cHV0LgorICAg
ICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsU3RvcmFnZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9y
YWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2VUaHJlYWQ6OnNjaGVkdWxlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpzdGFydCk6CisKIDIwMDktMDQtMTcgIEVy
aWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3Bw
IGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKaW5kZXggZjc5YTY4Yy4uMTFm
Mzg4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKKysr
IGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKQEAgLTMyNiwxMyArMzI2LDE3
IEBAIHByaXZhdGU6CiAKIHN0YXRpYyBpbnQgZ2xvYmFsRGVzY3JpcHRvciA9IDA7CiBzdGF0aWMg
RG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIg
bGlieG1sTG9hZGVyVGhyZWFkID0gMDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXImIGxpYnht
bExvYWRlclRocmVhZCgpIHsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZElkZW50aWZp
ZXIsIHN0YXRpY0xpYnhtbExvYWRlclRocmVhZCwgKDApKTsKKyAgICByZXR1cm4gc3RhdGljTGli
eG1sTG9hZGVyVGhyZWFkOworfQogCiBzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikK
IHsKICAgICAvLyBPbmx5IG1hdGNoIGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4
bWwyIGZyb20gd2l0aGluIFhNTFRva2VuaXplciB0byBhdm9pZAogICAgIC8vIGludGVyZmVyaW5n
IHdpdGggY2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJldHVybiBnbG9iYWxE
b2NMb2FkZXIgJiYgY3VycmVudFRocmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZDsKKyAgICBy
ZXR1cm4gZ2xvYmFsRG9jTG9hZGVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJU
aHJlYWQoKTsKIH0KIAogY2xhc3MgT2Zmc2V0QnVmZmVyIHsKQEAgLTM5Myw3ICszOTcsNyBAQCBz
dGF0aWMgYm9vbCBzaG91bGRBbGxvd0V4dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCiBzdGF0
aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQogewogICAgIEFTU0VSVChnbG9iYWxE
b2NMb2FkZXIpOwotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhy
ZWFkKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZCgp
KTsKIAogICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKIApAQCAtNDY2LDcgKzQ3MCw3IEBAIHN0
YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRy
IGhhbmRsZXJzLCB2b2lkKiB1c2VyCiAgICAgICAgIHhtbEluaXRQYXJzZXIoKTsKICAgICAgICAg
eG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywg
Y2xvc2VGdW5jKTsKICAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5j
LCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJU
aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGxpYnhtbExvYWRlclRocmVhZCgpID0g
Y3VycmVudFRocmVhZCgpOwogICAgICAgICBkaWRJbml0ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4
OCw3ICs0OTIsNyBAQCBzdGF0aWMgeG1sUGFyc2VyQ3R4dFB0ciBjcmVhdGVNZW1vcnlQYXJzZXIo
eG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlcgogICAgICAgICB4bWxJbml0UGFy
c2VyKCk7CiAgICAgICAgIHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVu
RnVuYywgcmVhZEZ1bmMsIGNsb3NlRnVuYyk7CiAgICAgICAgIHhtbFJlZ2lzdGVyT3V0cHV0Q2Fs
bGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHdyaXRlRnVuYywgY2xvc2VGdW5jKTsKLSAgICAg
ICAgbGlieG1sTG9hZGVyVGhyZWFkID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBsaWJ4bWxM
b2FkZXJUaHJlYWQoKSA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgZGlkSW5pdCA9IHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggYzk3OTdmMi4u
NjI0ZGY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CisrKyBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMTM1LDExICsx
MzUsMTAgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgpCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5
IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwogICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRo
cmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldl
YkNvcmU6IEljb25EYXRhYmFzZSIpOwotICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNU
aHJlYWQ7CisgICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVhZC5pc1ZhbGlkKCk7
CiAgICAgbV9zeW5jTG9jay51bmxvY2soKTsKLSAgICBpZiAoIW1fc3luY1RocmVhZCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fc3luY1Ro
cmVhZFJ1bm5pbmc7CiB9CiAKIHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcAppbmRleCBkZTlmZmZiLi5lNjVkNWNlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRocmVhZC5jcHAKQEAgLTUxLDEyICs1MSwxMiBAQCBib29sIERhdGFiYXNlVGhyZWFkOjpz
dGFydCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwog
Ci0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkSUQuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoRGF0YWJh
c2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIp
OwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxp
ZCgpOwogfQogCiB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oKQpAQCAt
OTUsNyArOTUsNyBAQCB2b2lkKiBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAg
ICAgICBwb29sLmN5Y2xlKCk7CiAgICAgfQogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0
byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVw
LCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNv
dW50KCkpOworICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCBhbmQg
Y2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAl
aSByZWYocykiLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFk
IHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUg
ZWxzZQogICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3Rv
cmFnZVRocmVhZC5jcHAKaW5kZXggZGE1MGM5MC4uZWE2OWExYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHAKQEAgLTQ3LDEyICs0NywxMCBAQCBib29sIExvY2FsU3RvcmFn
ZVRocmVhZDo6c3RhcnQoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlv
bk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIW1fdGhyZWFkSUQuaXNWYWxpZCgpKQorICAgICAgICBtX3RocmVhZElEID0gY3JlYXRl
VGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkU3RhcnQsIHRoaXMs
ICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWRTdGFydCwgdGhpcywgIldl
YkNvcmU6IExvY2FsU3RvcmFnZSIpOwotCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0
dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwogfQogCiB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6
OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTg3LDI1ICs4NSwyNSBA
QCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZCgpCiAKIHZvaWQg
TG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFn
ZT4gc3RvcmFnZSkKIHsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJ
RCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxpZCgp
KTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJbXBvcnQoc3Rv
cmFnZSkpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVTeW5jKFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxs
ZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90
aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6
OmNyZWF0ZVN5bmMoc3RvcmFnZSkpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2No
ZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewotICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVl
dWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5k
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChhcmVhKSk7CiB9CiAKIHZvaWQgTG9jYWxT
dG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBh
cmVhKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAg
ICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAg
IG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoYXJlYSkpOwogfQog
CkBAIC0xMTUsOCArMTEzLDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSgp
CiAgICAgCiAgICAgLy8gSWRlYWxseSB3ZSdkIG5ldmVyIGJlIGtpbGxpbmcgYSB0aHJlYWQgdGhh
dCB3YXNuJ3QgbGl2ZSwgc28gQVNTRVJUIGl0LgogICAgIC8vIEJ1dCBpZiB3ZSBkbyBpbiBhIHJl
bGVhc2UgYnVpbGQsIG1ha2Ugc3VyZSB0byBub3Qgd2FpdCBvbiBhIGNvbmRpdGlvbiB0aGF0IHdp
bGwgbmV2ZXIgZ2V0IHNpZ25hbGxlZAotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgQVNTRVJUKCFtX3F1ZXVlLmtp
bGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxpZCgpKTsKKyAgICBpZiAoIW1fdGhyZWFkSUQuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBNdXRleExvY2tlciBsb2NrZXIobV90ZXJt
aW5hdGVMb2NrKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3Bw
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggZDEwMjZiMS4uOWFjOGE2
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTgzLDEyICs4MywxMCBAQCBib29sIFdv
cmtlclRocmVhZDo6c3RhcnQoKQogICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5
IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFk
IHN0YXJ0cy4KICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAK
LSAgICBpZiAobV90aHJlYWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3Ro
cmVhZElELmlzVmFsaWQoKSkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAK
LSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
U3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKLQotICAgIHJldHVybiBtX3RocmVhZElE
OworICAgIHJldHVybiBtX3RocmVhZElELmlzVmFsaWQoKTsKIH0KIAogdm9pZCogV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29832</attachid>
            <date>2009-04-27 16:03:08 -0700</date>
            <delta_ts>2009-04-28 01:52:40 -0700</delta_ts>
            <desc>Modified after code review</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>36131</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4Nzc5Yzg5Li41MGM4YzlkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUg
QEAKKzIwMDktMDQtMjcgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBXVEY6OlRo
cmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFkIGlkLCBy
ZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6VGhy
ZWFkSWRlbnRpZmllcik6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OmlzVmFsaWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWRJZGVudGlmaWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRl
bnRpZmllcjo6cGxhdGZvcm1JZCk6CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgaXMgbm93IGEg
Y2xhc3MsIGNvbnRhaW5pbmcgYSBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXIgYW5kCisgICAgICAg
IG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBhY3Jvc3MgdGhlIGNvZGUgb24gdGhyZWFkIGlkczogY29u
c3RydWN0aW9uLCBjb21wYXJpc29ucywKKyAgICAgICAgY2hlY2sgZm9yICd2YWxpZCcgc3RhdGUg
ZXRjLiAnMCcgaXMgdXNlZCBhcyBpbnZhbGlkIGlkLCB3aGljaCBoYXBwZW5zIHRvIGp1c3Qgd29y
aworICAgICAgICB3aXRoIGFsbCBwbGF0Zm9ybS1zcGVjaWZpYyB0aHJlYWQgaWQgaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5nIGZpbGVzIHJlZmxlY3QgdGhlIG5l
dyBUaHJlYWRJZGVudGlmaWVyIGZvciBlYWNoIHBsYXRmb3JtLgorICAgICAgICBXZSByZW1vdmUg
VGhyZWFkTWFwIGFuZCB0aHJlYWRNYXBNdXRleCBmcm9tIGFsbCBvZiB0aGVtLCByZW1vdmUgdGhl
IGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIHBvcHVsYXRlZC9zZWFyY2hlZC9jbGVhcmVkIHRoZSBt
YXAgYW5kIGFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBjb21wYXJpc29uIG9wZXJhdG9ycworICAgICAg
ICBmb3IgVGhyZWFkSWRlbnRpZmllcjoKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmdHdGsuY3Bw
OgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6Cisg
ICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKFdURjo6Y3Vy
cmVudFRocmVhZCk6CisKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nTm9uZS5jcHA6CisgICAgICAg
IChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJl
YWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVy
bmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAo
V1RGOjpkZXRhY2hUaHJlYWQpOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKworICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmdRdC5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZp
ZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6
OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9U
aHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJl
YWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKToKKyAg
ICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6
CisKIDIwMDktMDQtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFdpbmRvd3MgRGVidWcgYnVpbGQgZml4CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXgg
NjU4MDk5NC4uMzNlZWZlNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAtMjc0LDcg
KzI3NCw3IEBAIF9fWk4zV1RGMTFjdXJyZW50VGltZUV2CiBfX1pOM1dURjExZmFzdFJlYWxsb2NF
UHZtCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfCiBfX1pOM1dURjEyY3JlYXRl
VGhyZWFkRVBGUHZTMF9FUzBfUEtjCi1fX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoKK19fWk4zV1RG
MTJkZXRhY2hUaHJlYWRFTlNfMTZUaHJlYWRJZGVudGlmaWVyRQogX19aTjNXVEYxMmlzTWFpblRo
cmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKIF9fWk4zV1RGMTNjdXJyZW50VGhyZWFk
RXYKQEAgLTI5NSw3ICsyOTUsNyBAQCBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyOWRl
Y3JlbWVudEV2CiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyOWluY3JlbWVudEV2CiBf
X1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyQzFFUEtjCiBfX1pOM1dURjIxUmVmQ291bnRl
ZExlYWtDb3VudGVyRDFFdgotX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRWpQUHYK
K19fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkVOU18xNlRocmVhZElkZW50aWZpZXJF
UFB2CiBfX1pOM1dURjI3cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5RXYKIF9fWk4zV1RGMjhz
ZXRNYWluVGhyZWFkQ2FsbGJhY2tzUGF1c2VkRWIKIF9fWk4zV1RGMzZsb2NrQXRvbWljYWxseUlu
aXRpYWxpemVkU3RhdGljTXV0ZXhFdgpAQCAtMzU3LDYgKzM1Nyw5IEBAIF9fWk5LM0pTQzhKU09i
amVjdDl0b0Jvb2xlYW5FUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVh
dGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFkZWxldGVU
YWJsZUV2CiBfX1pOSzNXVEY4Q29sbGF0b3I3Y29sbGF0ZUVQS3RtUzJfbQorX19aTkszV1RGMTZU
aHJlYWRJZGVudGlmaWVyN2lzVmFsaWRFdgorX19aTkszV1RGMTZUaHJlYWRJZGVudGlmaWVyZXFF
UktTMF8KK19fWk5LM1dURjE2VGhyZWFkSWRlbnRpZmllcm5lRVJLUzBfCiBfX1pUVk4zSlNDMTJT
dHJpbmdPYmplY3RFCiBfX1pUVk4zSlNDMTRKU0dsb2JhbE9iamVjdEUKIF9fWlRWTjNKU0MxNUpT
V3JhcHBlck9iamVjdEUKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcu
aCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAwMmZhM2E0Li5mMTMyNmQy
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZy5oCkBAIC04NSwxMiArODUsMTQgQEAKICNpbmNsdWRlIDx3
dGYvR093blB0ci5oPgogdHlwZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7CiB0eXBlZGVmIHN0
cnVjdCBfR0NvbmQgR0NvbmQ7Cit0eXBlZGVmIHN0cnVjdCBfR1RocmVhZCBHVGhyZWFkOwogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9O
QU1FU1BBQ0UKIGNsYXNzIFFNdXRleDsKK2NsYXNzIFFUaHJlYWQ7CiBjbGFzcyBRV2FpdENvbmRp
dGlvbjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgpAQCAtMTA1LDM0ICsxMDcsMTggQEAgUVRf
RU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJl
YWRJZGVudGlmaWVyOwotdHlwZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1
bWVudCk7Ci0KLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgotLy8gVGhl
IHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0
J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVh
ZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBJ
bnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1U
aHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lk
KiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1
cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUg
dGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgc2V0
VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi1UaHJlYWRJZGVu
dGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLWJvb2wgaXNNYWluVGhyZWFkKCk7Ci1pbnQgd2FpdEZv
clRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKLXZvaWQgZGV0YWNo
VGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwotCiAjaWYgVVNFKFBUSFJFQURTKQogdHlwZWRlZiBw
dGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRleDsKIHR5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxh
dGZvcm1Db25kaXRpb247Cit0eXBlZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZElkZW50aWZp
ZXI7CiAjZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIEdPd25QdHI8R011dGV4PiBQbGF0Zm9y
bU11dGV4OwogdHlwZWRlZiBHT3duUHRyPEdDb25kPiBQbGF0Zm9ybUNvbmRpdGlvbjsKK3R5cGVk
ZWYgR1RocmVhZCogUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQp
CiB0eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQQUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7CiB0
eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQQUNFKFFXYWl0Q29uZGl0aW9uKSogUGxhdGZvcm1Db25k
aXRpb247Cit0eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQQUNFKFFUaHJlYWQpKiBQbGF0Zm9ybVRo
cmVhZElkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShXSU5fT1MpCiBzdHJ1Y3QgUGxhdGZvcm1N
dXRleCB7CiAgICAgQ1JJVElDQUxfU0VDVElPTiBtX2ludGVybmFsTXV0ZXg7CkBAIC0xNDksMTEg
KzEzNSw3MCBAQCBzdHJ1Y3QgUGxhdGZvcm1Db25kaXRpb24gewogICAgIGJvb2wgdGltZWRXYWl0
KFBsYXRmb3JtTXV0ZXgmLCBEV09SRCBkdXJhdGlvbk1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBz
aWduYWwoYm9vbCB1bmJsb2NrQWxsKTsKIH07Cit0eXBlZGVmIHVuc2lnbmVkIFBsYXRmb3JtVGhy
ZWFkSWRlbnRpZmllcjsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7CiB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtQ29uZGl0aW9uOwogI2VuZGlmCiAgICAgCisvLyBQbGF0Zm9ybS1p
bmRlcGVuZGVudCB3cmFwcGVyIG9mIFRocmVhZElkLiBBc3NpZ25hYmxlIGFuZCBjb3B5YWJsZS4K
Ky8vIEl0IGhhcHBlbnMgdGhhdCBmb3IgYWxsIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zICcwJyB3
b3JrcyBmaW5lIGFzICdpbnZhbGlkIHZhbHVlJy4KKy8vIENvbXBhcmluZyBpcyBkZWxlZ2F0ZWQg
dG8gdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyBiZWNhdXNlIGl0IG5lZWRzIHRvCisvLyBj
b21wYXJlIGluIGEgcGxhdGZvcm0tZGVwZW5kZW50IHdheS4KK2NsYXNzIFRocmVhZElkZW50aWZp
ZXIgeworcHVibGljOgorICAgIFRocmVhZElkZW50aWZpZXIoKQorICAgICAgICA6IG1fcGxhdGZv
cm1JZCgwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1ZhbGlkKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZShQbGF0Zm9ybVRocmVhZElkZW50aWZpZXIg
cGxhdGZvcm1JZCkKKyAgICB7CisgICAgICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHBsYXRm
b3JtSWQpOworICAgIH0KKworICAgIFRocmVhZElkZW50aWZpZXIoY29uc3QgVGhyZWFkSWRlbnRp
ZmllciYgYW5vdGhlcikKKyAgICAgICAgOiBtX3BsYXRmb3JtSWQoYW5vdGhlci5tX3BsYXRmb3Jt
SWQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0ICB7IHJldHVybiBt
X3BsYXRmb3JtSWQ7IH0KKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fcGxhdGZvcm1JZCA9IDA7
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3Q7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXImKSBjb25zdDsKKwor
ICAgIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBwbGF0Zm9ybUlkKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybUlkOyAgfQorCitwcml2YXRlOgorICAgIFRocmVhZElkZW50aWZpZXIoUGxhdGZv
cm1UaHJlYWRJZGVudGlmaWVyIHBsYXRmb3JtSWQpCisgICAgICAgIDogbV9wbGF0Zm9ybUlkKHBs
YXRmb3JtSWQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICB9CisKKyAg
ICBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXIgbV9wbGF0Zm9ybUlkOworfTsKKwordHlwZWRlZiB2
b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CisKKy8vIFJldHVybnMgaW52
YWxpZCBpZGVudGlmaWVyIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCisvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KK1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVh
ZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKy8vIEludGVybmFs
IHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4KK1RocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKKworLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGlu
aXRpYWxpemF0aW9uLgorLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQg
bmFtZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgordm9pZCBzZXRUaHJlYWRO
YW1lSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKK1RocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpOworYm9vbCBpc01haW5UaHJlYWQoKTsKK2ludCB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyLCB2b2lkKiopOwordm9pZCBkZXRhY2hUaHJlYWQo
VGhyZWFkSWRlbnRpZmllcik7CisgICAgCiBjbGFzcyBNdXRleCA6IE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKICAgICBNdXRleCgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVh
ZGluZ05vbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ05vbmUuY3BwCmluZGV4
IDI0NDMxZmMuLjU3MjBlOGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdOb25lLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nTm9uZS5jcHAKQEAg
LTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK2Jvb2wgVGhyZWFkSWRlbnRpZmll
cjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50
aWZpZXImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmcoKSB7IH0KIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVu
Y3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKikgeyByZXR1cm4gMDsgfQogdm9pZCBzZXRUaHJlYWRO
YW1lSW50ZXJuYWwoY29uc3QgY2hhciopIHsgfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAKaW5kZXggMWJiMzAzMy4uZmJiMWVkNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC00OCw3ICs0OCwxNSBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIHB0aHJlYWRfdD4gVGhyZWFk
TWFwOworYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IFRocmVhZElkZW50
aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwobV9wbGF0
Zm9ybUlkLCBhbm90aGVyLm1fcGxhdGZvcm1JZCk7Cit9CisKK2Jvb2wgVGhyZWFkSWRlbnRpZmll
cjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiAhcHRocmVhZF9lcXVhbChtX3BsYXRmb3JtSWQsIGFub3RoZXIubV9wbGF0Zm9y
bUlkKTsKK30KIAogc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eDsKIApAQCAtNTYsMTcgKzY0LDEwIEBAIHN0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljTXV0ZXg7CiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRp
ZmllcjsgLy8gVGhlIHRocmVhZCB0aGF0IHdhcyB0aGUgZmlyc3QgdG8gY2FsbCBpbml0aWFsaXpl
VGhyZWFkaW5nKCksIHdoaWNoIG11c3QgYmUgdGhlIG1haW4gdGhyZWFkLgogI2VuZGlmCiAKLXN0
YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
TXV0ZXgsIG11dGV4LCAoKSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmcoKQogewogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0
ZXgpIHsKICAgICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0
ZXg7Ci0gICAgICAgIHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5kb21O
dW1iZXJHZW5lcmF0b3IoKTsKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCBQTEFURk9STShDSFJP
TUlVTSkKICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhyZWFkKCk7CkBA
IC04Niw1NCArODcsNiBAQCB2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011
dGV4KCkKICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleC0+dW5sb2NrKCk7CiB9
CiAKLXN0YXRpYyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChUaHJlYWRNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90
JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLQotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7
Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAo
cHRocmVhZF9lcXVhbChpLT5zZWNvbmQsIHB0aHJlYWRIYW5kbGUpKQotICAgICAgICAgICAgcmV0
dXJuIGktPmZpcnN0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGhyZWFk
SWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3Qm
IHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxl
KHB0aHJlYWRIYW5kbGUpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7
Ci0KLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBwdGhyZWFkSGFuZGxlKTsK
LSAgICAKLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7Ci19Ci0KLXN0YXRpYyBwdGhyZWFk
X3QgcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAg
ICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgCi0gICAgcmV0dXJu
IHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyUHRocmVhZEhhbmRs
ZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBs
b2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFp
bnMoaWQpKTsKLSAgICAKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiAjaWYgUExB
VEZPUk0oQU5EUk9JRCkKIC8vIE9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtLCB0aHJlYWRzIG11c3Qg
YmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTSBiZWZvcmUgdGhleSBydW4uCiBzdHJ1Y3QgVGhyZWFk
RGF0YSB7CkBAIC0xNjQsOSArMTE3LDkgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJ
bnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KIAogICAg
IGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRXaXRoUmVnaXN0
cmF0aW9uLCBzdGF0aWNfY2FzdDx2b2lkKj4odGhyZWFkRGF0YSkpKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0
YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIFRocmVhZElkZW50aWZpZXIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAgcmV0dXJuIFRocmVhZElk
ZW50aWZpZXI6OmNyZWF0ZSh0aHJlYWRIYW5kbGUpOwogfQogI2Vsc2UKIFRocmVhZElkZW50aWZp
ZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciopCkBAIC0xNzQsMTAgKzEyNywxMCBAQCBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbgogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAgICAgaWYgKHB0aHJlYWRfY3Jl
YXRlKCZ0aHJlYWRIYW5kbGUsIDAsIGVudHJ5UG9pbnQsIGRhdGEpKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0
YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIFRocmVhZElkZW50aWZpZXIoKTsKICAgICB9CiAKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRl
bnRpZmllckZvclB0aHJlYWRIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICByZXR1cm4gVGhyZWFk
SWRlbnRpZmllcjo6Y3JlYXRlKHRocmVhZEhhbmRsZSk7CiB9CiAjZW5kaWYKIApAQCAtMTkyLDM1
ICsxNDUsMjkgQEAgdm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFk
TmFtZSkKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NF
UlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICAKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRs
ZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICBwdGhyZWFkX3Qg
cHRocmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKICAKICAgICBpbnQgam9pblJl
c3VsdCA9IHB0aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCByZXN1bHQpOwogICAgIGlmIChqb2lu
UmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAl
dSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsK
KyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdhcyBmb3VuZCB0byBiZSBk
ZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgcHRocmVhZEhhbmRsZSk7CiAgICAgICAgIAotICAg
IGNsZWFyUHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJldHVybiBq
b2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUKHRocmVhZElELmlzVmFs
aWQoKSk7CiAgICAgCi0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSB0
aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgCiAgICAgcHRocmVhZF9kZXRhY2gocHRocmVhZEhh
bmRsZSk7Ci0gICAgCi0gICAgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJ
RCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAgcHRocmVh
ZF90IGN1cnJlbnRUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRp
ZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAg
ICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRI
YW5kbGUoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXI6OmNyZWF0
ZShwdGhyZWFkX3NlbGYoKSk7CiB9CiAKIGJvb2wgaXNNYWluVGhyZWFkKCkKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZ1dpbi5jcHAKaW5kZXggNDE1YmE1My4uYzVkN2RhNCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZ1dpbi5jcHAKQEAgLTk4LDYgKzk4LDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmll
ciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIu
bV9wbGF0Zm9ybUlkOworfQorCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29u
c3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybUlkICE9IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQorCiAvLyBNU19WQ19FWENFUFRJT04s
IFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9t
IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4u
CiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAt
MTM5LDE3ICsxNDksMTAgQEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleCgpCiAKIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1haW5UaHJlYWRJZGVudGlmaWVyOwog
Ci1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTXV0ZXggbXV0
ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQog
ewogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpIHsKICAgICAgICAg
YXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0ZXg7Ci0gICAgICAgIHRo
cmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3Io
KTsKICAgICAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICAgICAgbWFpblRocmVhZElk
ZW50aWZpZXIgPSBjdXJyZW50VGhyZWFkKCk7CkBAIC0xNTcsMzIgKzE2MCw2IEBAIHZvaWQgaW5p
dGlhbGl6ZVRocmVhZGluZygpCiAgICAgfQogfQogCi1zdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFO
RExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiBt
YXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVC
eUlkZW50aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCi17Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFk
TWFwKCkuY29udGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQs
IHRocmVhZEhhbmRsZSk7Ci19Ci0KLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRp
ZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQotc3Rh
dGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIg
aWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFT
U0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAgIHRocmVhZE1hcCgpLnJlbW92ZShp
ZCk7Ci19Ci0KIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gewogICAgIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkgOiBm
dW5jdGlvbihmdW5jdGlvbiksIGRhdGEoZGF0YSkge30KIApAQCAtMjA4LDUxICsxODUsNDUgQEAg
c3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFt
KQogVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogewogICAgIHVu
c2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQgPSAwOwogICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IG5ldyBU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24oZW50cnlQb2ludCwgZGF0YSk7CiAgICAgSEFORExFIHRo
cmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJlYWRleCgwLCAw
LCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLCAwLCAmdGhyZWFkSWRlbnRpZmllcikp
OwogICAgIGlmICghdGhyZWFkSGFuZGxlKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwOiAlbGQiLCBlbnRy
eVBvaW50LCBkYXRhLCBlcnJubyk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
VGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAotICAgIHRocmVhZElEID0gc3RhdGljX2Nhc3Q8
VGhyZWFkSWRlbnRpZmllcj4odGhyZWFkSWRlbnRpZmllcik7Ci0gICAgc3RvcmVUaHJlYWRIYW5k
bGVCeUlkZW50aWZpZXIodGhyZWFkSWRlbnRpZmllciwgdGhyZWFkSGFuZGxlKTsKLQotICAgIHJl
dHVybiB0aHJlYWRJRDsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcjo6Y3JlYXRlKHRocmVh
ZElkZW50aWZpZXIpOwogfQogCiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQp
OworICAgIEFTU0VSVCh0aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIAotICAgIEhBTkRMRSB0aHJl
YWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICBIQU5E
TEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSUQucGxhdGZvcm1JZCgpOwogICAgIGlmICghdGhyZWFk
SGFuZGxlKQogICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBj
b3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVh
ZElEKTsKICAKICAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJl
YWRIYW5kbGUsIElORklOSVRFKTsKICAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkK
LSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBk
ZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1Io
IlRocmVhZElkZW50aWZpZXIgJXAgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRv
IHF1aXQiLCB0aHJlYWRIYW5kbGUpOwogCiAgICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsK
LSAgICBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogCiAgICAgcmV0
dXJuIGpvaW5SZXN1bHQ7CiB9CiAKIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQu
aXNWYWxpZCgpKTsKICAgICAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVh
ZElELnBsYXRmb3JtSWQoKTsKICAgICBpZiAodGhyZWFkSGFuZGxlKQogICAgICAgICBDbG9zZUhh
bmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0
aHJlYWRJRCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KEdldEN1cnJlbnRUaHJlYWRJZCgp
KTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcjo6Y3JlYXRlKEdldEN1cnJlbnRUaHJlYWRJ
ZCgpKTsKIH0KIAogYm9vbCBpc01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJl
YWRpbmdHdGsuY3BwCmluZGV4IGI0ZjRkZTEuLmRlNmM0OTggMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9ndGsvVGhyZWFkaW5nR3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYv
Z3RrL1RocmVhZGluZ0d0ay5jcHAKQEAgLTQyLDE2ICs0MiwyMCBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKLQot
c3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7Citib29sIFRocmVh
ZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9ybUlk
OworfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK2Jvb2wgVGhyZWFkSWRlbnRp
Zmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAog
ewotICAgIHN0YXRpYyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7CisgICAgcmV0dXJu
IG1fcGxhdGZvcm1JZCAhPSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKIH0KIAorc3RhdGljIE11dGV4
KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKKworc3RhdGljIFRocmVhZElkZW50
aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7CisKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygp
CiB7CiAgICAgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQoKSkKQEAgLTYwLDcgKzY0LDYgQEAgdm9p
ZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIAogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljTXV0ZXgpIHsKICAgICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgg
PSBuZXcgTXV0ZXg7Ci0gICAgICAgIHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxp
emVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIg
PSBjdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CkBAIC03
OCw2NCArODEsMTUgQEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eCgpCiAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwogfQog
Ci1zdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBHVGhyZWFkKj4mIHRocmVhZE1hcCgp
Ci17Ci0gICAgc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgR1RocmVhZCo+IG1hcDsK
LSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVy
QnlHdGhyZWFkSGFuZGxlKEdUaHJlYWQqJiB0aHJlYWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBH
VGhyZWFkKj46Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBp
ICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPnNlY29uZCA9PSB0
aHJlYWQpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JU
aHJlYWQoR1RocmVhZComIHRocmVhZCkKLXsKLSAgICBBU1NFUlQoIWlkZW50aWZpZXJCeUd0aHJl
YWRIYW5kbGUodGhyZWFkKSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAx
OwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgdGhyZWFkKTsKLQotICAg
IHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKLX0KLQotc3RhdGljIEdUaHJlYWQqIHRocmVhZEZv
cklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsK
LX0KLQotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZp
ZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0g
ICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0KLSAgICB0aHJlYWRNYXAoKS5y
ZW1vdmUoaWQpOwotfQotCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRo
cmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewogICAg
IEdUaHJlYWQqIHRocmVhZDsKICAgICBpZiAoISh0aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUoZW50
cnlQb2ludCwgZGF0YSwgVFJVRSwgMCkpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQb2lu
dCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gVGhyZWFkSWRlbnRp
ZmllcigpOwogICAgIH0KIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBlc3RhYmxp
c2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZCk7Ci0gICAgcmV0dXJuIHRocmVhZElEOworICAg
IHJldHVybiBUaHJlYWRJZGVudGlmaWVyOjpjcmVhdGUodGhyZWFkKTsKIH0KIAogdm9pZCBzZXRU
aHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciopCkBAIC0xNDQsMTUgKzk4LDE0IEBAIHZvaWQg
c2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKQogCiBpbnQgd2FpdEZvclRocmVhZENv
bXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAg
ICBBU1NFUlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJlYWRJRC5pc1ZhbGlkKCkpOwogCi0g
ICAgR1RocmVhZCogdGhyZWFkID0gdGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAg
R1RocmVhZCogdGhyZWFkID0gdGhyZWFkSUQucGxhdGZvcm1JZCgpOwogCiAgICAgdm9pZCogam9p
blJlc3VsdCA9IGdfdGhyZWFkX2pvaW4odGhyZWFkKTsKICAgICBpZiAocmVzdWx0KQogICAgICAg
ICAqcmVzdWx0ID0gam9pblJlc3VsdDsKIAotICAgIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcih0
aHJlYWRJRCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2MiwxMCArMTE1LDcgQEAgdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcikKIAogVGhyZWFkSWRlbnRpZmllciBjdXJyZW50
VGhyZWFkKCkKIHsKLSAgICBHVGhyZWFkKiBjdXJyZW50VGhyZWFkID0gZ190aHJlYWRfc2VsZigp
OwotICAgIGlmIChUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmllckJ5R3RocmVhZEhhbmRs
ZShjdXJyZW50VGhyZWFkKSkKLSAgICAgICAgcmV0dXJuIGlkOwotICAgIHJldHVybiBlc3RhYmxp
c2hJZGVudGlmaWVyRm9yVGhyZWFkKGN1cnJlbnRUaHJlYWQpOworICAgIHJldHVybiBUaHJlYWRJ
ZGVudGlmaWVyOjpjcmVhdGUoZ190aHJlYWRfc2VsZigpKTsKIH0KIAogYm9vbCBpc01haW5UaHJl
YWQoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNwcCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAKaW5kZXggMWZkZDJiYi4uYTVl
MDU0ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCkBAIC00MSw2ICs0MSwx
NiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
cj09KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGxhdGZvcm1JZCA9PSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKworYm9vbCBUaHJlYWRJ
ZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBhbm90aGVyLm1fcGxhdGZvcm1JZDsK
K30KKwogY2xhc3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBRVGhyZWFkIHsKIHB1YmxpYzoKICAg
ICBUaHJlYWRQcml2YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEpOwpA
QCAtNjksNzAgKzc5LDEyIEBAIHN0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljTXV0ZXg7CiAKIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1haW5UaHJlYWRJZGVudGlmaWVy
OwogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTXV0ZXgg
bXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCi1zdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVu
dGlmaWVyLCBRVGhyZWFkKj4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8VGhy
ZWFkSWRlbnRpZmllciwgUVRocmVhZCo+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0
aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKFFUaHJlYWQqJiB0
aHJlYWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0g
ICAgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj46Oml0ZXJhdG9yIGkgPSB0aHJl
YWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGktPnNlY29uZCA9PSB0aHJlYWQpCi0gICAgICAgICAgICByZXR1cm4g
aS0+Zmlyc3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVu
dGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoUVRocmVhZComIHRocmVhZCkKLXsK
LSAgICBBU1NFUlQoIWlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUodGhyZWFkKSk7Ci0KLSAgICBN
dXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFk
SWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlk
ZW50aWZpZXJDb3VudCwgdGhyZWFkKTsKLQotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsK
LX0KLQotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZp
ZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0g
ICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0KLSAgICB0aHJlYWRNYXAoKS5y
ZW1vdmUoaWQpOwotfQotCi1zdGF0aWMgUVRocmVhZCogdGhyZWFkRm9ySWRlbnRpZmllcihUaHJl
YWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLQotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQotCiB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKQogewogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgpIHsKICAgICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcg
TXV0ZXg7Ci0gICAgICAgIHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5k
b21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICAgICAgUVRocmVhZCogbWFpblRocmVhZCA9IFFDb3Jl
QXBwbGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpOwotICAgICAgICBtYWluVGhyZWFkSWRl
bnRpZmllciA9IGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUobWFpblRocmVhZCk7Ci0gICAgICAg
IGlmICghbWFpblRocmVhZElkZW50aWZpZXIpCi0gICAgICAgICAgICBtYWluVGhyZWFkSWRlbnRp
ZmllciA9IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQobWFpblRocmVhZCk7CisgICAgICAg
IG1haW5UaHJlYWRJZGVudGlmaWVyID0gVGhyZWFkSWRlbnRpZmllcjo6Y3JlYXRlKFFDb3JlQXBw
bGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpKTsKICAgICAgICAgaW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKICAgICB9CiB9CkBAIC0xNTMsMTMgKzEwNSwxMyBAQCBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbgogICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBUaHJlYWRQcml2YXRlKGVu
dHJ5UG9pbnQsIGRhdGEpOwogICAgIGlmICghdGhyZWFkKSB7CiAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwg
ZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gVGhy
ZWFkSWRlbnRpZmllcigpOwogICAgIH0KICAgICB0aHJlYWQtPnN0YXJ0KCk7CiAKICAgICBRVGhy
ZWFkKiB0aHJlYWRSZWYgPSBzdGF0aWNfY2FzdDxRVGhyZWFkKj4odGhyZWFkKTsKIAotICAgIHJl
dHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZFJlZik7CisgICAgcmV0dXJu
IFRocmVhZElkZW50aWZpZXI6OmNyZWF0ZSh0aHJlYWRSZWYpOwogfQogCiB2b2lkIHNldFRocmVh
ZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKQEAgLTE2OCwxMyArMTIwLDEyIEBAIHZvaWQgc2V0
VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKQogCiBpbnQgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAgICBB
U1NFUlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJlYWRJRC5Jc1ZhbGlkKCkpOwogCi0gICAg
UVRocmVhZCogdGhyZWFkID0gdGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgUVRo
cmVhZCogdGhyZWFkID0gdGhyZWFkSUQucGxhdGZvcm1JZCgpOwogCiAgICAgYm9vbCByZXMgPSB0
aHJlYWQtPndhaXQoKTsKIAotICAgIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7
CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PFRocmVhZFBy
aXZhdGUqPih0aHJlYWQpLT5nZXRSZXR1cm5WYWx1ZSgpOwogCkBAIC0xODcsMTAgKzEzOCw3IEBA
IHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpCiAKIFRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpCiB7Ci0gICAgUVRocmVhZCogY3VycmVudFRocmVhZCA9IFFUaHJlYWQ6
OmN1cnJlbnRUaHJlYWQoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZp
ZXJCeVF0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAg
ICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChjdXJyZW50VGhyZWFkKTsKKyAg
ICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcjo6Y3JlYXRlKFFUaHJlYWQ6OmN1cnJlbnRUaHJlYWQo
KSk7CiB9CiAKIGJvb2wgaXNNYWluVGhyZWFkKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ3NmZhYS4uODQyOWNhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
NSBAQAorMjAwOS0wNC0yNyAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzNDgKKyAgICAgICAgQ2hhbmdlIFdURjo6
VGhyZWFkSWRlbnRpZmllciB0byBiZSBhbiBhY3R1YWwgKGJ1dCB3cmFwcGVkKSB0aHJlYWQgaWQs
IHJlbW92ZSBUaHJlYWRNYXAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgY2hhbmdlIGlzIGluIFdU
Ri4KKyAgICAgICAgVW5sZXNzIG5vdGVkLCBhbGwgdGhlIGZvbGxvd2luZyBmaWxlcyBjaGFuZ2Vk
IHRvIHVzZSB0aGUgbmV3IFRocmVhZElkZW50aWZpZXI6OmlzVmFsaWQoKQorICAgICAgICBtZXRo
b2QgaW5zdGVhZCBvZiBqdXN0IGRvaW5nICdpZihtX3RocmVhZElEKScga2luZCBvZiBjaGVja3Ms
IHNpbmNlIFRocmVhZElkZW50aWZpZXIKKyAgICAgICAgaXMgbm93IGEgY2xhc3MgcmF0aGVyIHRo
ZW4gYW4gaW50ZWdlci4KKworICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmxpYnhtbExvYWRlclRocmVhZCk6IHVzZSBERUZJTkVfU1RBVElD
X0xPQ0FMIGFuZCBhY2Nlc3NvciBmdW5jdGlvbiBmb3Igc3RhdGljIHRocmVhZCBpZCwKKyAgICAg
ICAgc2luY2Ugbm93IFRocmVhZElkZW50aWZpZXIgbmVlZHMgY29uc3RydWN0aW9uIGFuZCB3ZSBh
dm9pZCBoYXZpbmcgZ2xvYmFsIGluaXRpYWxpemVycy4KKyAgICAgICAgKFdlYkNvcmU6Om1hdGNo
RnVuYyk6IHVzZSB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
b3BlbkZ1bmMpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0cmluZ1BhcnNlcik6
IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWVtb3J5UGFyc2VyKTogZGl0dG8uCisg
ICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKTogcmVtb3ZlIG1fdGhyZWFk
SUQgZnJvbSBkZWJ1ZyBvdXRwdXQuCisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVTeW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OnN0YXJ0KToKKwogMjAwOS0wNC0yNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCmluZGV4IDNiZDZiN2MuLjhjMzIyZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCkBAIC0zMjYsMTMgKzMyNiwxNyBAQCBwcml2YXRlOgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIGludCBnbG9iYWxEZXNjcmlwdG9yID0g
MDsKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGxpYnhtbExvYWRlclRocmVhZCA9IDA7CisKK3N0
YXRpYyBUaHJlYWRJZGVudGlmaWVyJiBsaWJ4bWxMb2FkZXJUaHJlYWQoKSB7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChUaHJlYWRJZGVudGlmaWVyLCBzdGF0aWNMaWJ4bWxMb2FkZXJUaHJlYWQs
ICgpKTsKKyAgICByZXR1cm4gc3RhdGljTGlieG1sTG9hZGVyVGhyZWFkOworfQogCiBzdGF0aWMg
aW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKIHsKICAgICAvLyBPbmx5IG1hdGNoIGxvYWRzIGlu
aXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0aGluIFhNTFRva2VuaXplciB0
byBhdm9pZAogICAgIC8vIGludGVyZmVyaW5nIHdpdGggY2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0
IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM1MwotICAgIHJldHVybiBYTUxUb2tlbml6ZXJTY29wZTo6Y3VycmVudERvY0xvYWRlciAm
JiBjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkOworICAgIHJldHVybiBYTUxU
b2tlbml6ZXJTY29wZTo6Y3VycmVudERvY0xvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gbGli
eG1sTG9hZGVyVGhyZWFkKCk7CiB9CiAKIGNsYXNzIE9mZnNldEJ1ZmZlciB7CkBAIC0zOTMsNyAr
Mzk3LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dFeHRlcm5hbExvYWQoY29uc3QgS1VSTCYg
dXJsKQogc3RhdGljIHZvaWQqIG9wZW5GdW5jKGNvbnN0IGNoYXIqIHVyaSkKIHsKICAgICBBU1NF
UlQoWE1MVG9rZW5pemVyU2NvcGU6OmN1cnJlbnREb2NMb2FkZXIpOwotICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsKKyAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZCgpKTsKIAogICAgIEtVUkwgdXJsKEtVUkwoKSwg
dXJpKTsKIApAQCAtNDYyLDcgKzQ2Niw3IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0
ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyCiAgICAg
ICAgIHhtbEluaXRQYXJzZXIoKTsKICAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyht
YXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKICAgICAgICAgeG1sUmVn
aXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9z
ZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Cisg
ICAgICAgIGxpYnhtbExvYWRlclRocmVhZCgpID0gY3VycmVudFRocmVhZCgpOwogICAgICAgICBk
aWRJbml0ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4NCw3ICs0ODgsNyBAQCBzdGF0aWMgeG1sUGFy
c2VyQ3R4dFB0ciBjcmVhdGVNZW1vcnlQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywg
dm9pZCogdXNlcgogICAgICAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgICAgIHhtbFJlZ2lzdGVy
SW5wdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgcmVhZEZ1bmMsIGNsb3NlRnVuYyk7
CiAgICAgICAgIHhtbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMs
IHdyaXRlRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkID0gY3Vy
cmVudFRocmVhZCgpOworICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQoKSA9IGN1cnJlbnRUaHJl
YWQoKTsKICAgICAgICAgZGlkSW5pdCA9IHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25EYXRhYmFzZS5jcHAKaW5kZXggYzk3OTdmMi4uNjI0ZGY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcApAQCAtMTM1LDExICsxMzUsMTAgQEAgYm9vbCBJY29uRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgLy8gY29tcGxldGVzIGFuZCBt
X3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygp
OwogICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRh
YmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOwotICAg
IG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CisgICAgbV9zeW5jVGhyZWFkUnVu
bmluZyA9IG1fc3luY1RocmVhZC5pc1ZhbGlkKCk7CiAgICAgbV9zeW5jTG9jay51bmxvY2soKTsK
LSAgICBpZiAoIW1fc3luY1RocmVhZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIG1fc3luY1RocmVhZFJ1bm5pbmc7CiB9CiAKIHZvaWQgSWNv
bkRhdGFiYXNlOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAK
aW5kZXggNzAyY2YwMi4uOGRjMWFhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmNwcApAQCAtNDcsNyArNDcsNiBAQCBTUUxpdGVEYXRhYmFzZTo6U1FMaXRlRGF0YWJhc2Uo
KQogICAgIDogbV9kYigwKQogICAgICwgbV9wYWdlU2l6ZSgtMSkKICAgICAsIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9vcGVuaW5nVGhyZWFkKDApCiB7CiB9CiAKQEAg
LTg5LDcgKzg4LDcgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICBtX2Ri
ID0gMDsKICAgICB9CiAKLSAgICBtX29wZW5pbmdUaHJlYWQgPSAwOworICAgIG1fb3BlbmluZ1Ro
cmVhZC5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEZ1bGxzeW5j
KGJvb2wgZnN5bmMpIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFk
LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggZGU5ZmZmYi4u
OGIwZTEwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAor
KysgYi9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC0zNyw3ICszNyw2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgp
Ci0gICAgOiBtX3RocmVhZElEKDApCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTUx
LDEyICs1MCwxMiBAQCBib29sIERhdGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQp
CisgICAgaWYgKG1fdGhyZWFkSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOwogCi0gICAgcmV0dXJuIG1fdGhy
ZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwogfQogCiB2b2lkIERhdGFi
YXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oKQpAQCAtOTUsNyArOTQsNyBAQCB2b2lkKiBE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBwb29sLmN5Y2xlKCk7CiAg
ICAgfQogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFu
ZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFz
ICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkpOworICAgIExPRyhTdG9y
YWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRh
YmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCB0aGlzLCByZWZD
b3VudCgpKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJl
IG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQogICAgIGRldGFjaFRocmVh
ZChtX3RocmVhZElEKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VU
aHJlYWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKaW5kZXgg
ZGE1MGM5MC4uMjk0YTE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZVRocmVhZC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAK
QEAgLTM4LDcgKzM4LDYgQEAgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IExvY2FsU3Rv
cmFnZVRocmVhZDo6Y3JlYXRlKCkKIH0KIAogTG9jYWxTdG9yYWdlVGhyZWFkOjpMb2NhbFN0b3Jh
Z2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQogewogICAgIG1fc2VsZlJlZiA9IHRoaXM7
CiB9CkBAIC00NywxMiArNDYsMTAgQEAgYm9vbCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkK
IHsKICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBp
ZiAobV90aHJlYWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3RocmVhZElE
LmlzVmFsaWQoKSkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChMb2NhbFN0b3Jh
Z2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogTG9jYWxT
dG9yYWdlIik7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKExvY2FsU3RvcmFnZVRo
cmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3Jh
Z2UiKTsKLQotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZElELmlz
VmFsaWQoKTsKIH0KIAogdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJl
YWRTdGFydCh2b2lkKiB0aHJlYWQpCkBAIC03Nyw3ICs3NCw3IEBAIHZvaWQqIExvY2FsU3RvcmFn
ZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkKCkKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFk
IHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUg
ZWxzZQogICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gMDsK
KyAgICBtX3RocmVhZElELmludmFsaWRhdGUoKTsKIAogICAgIC8vIENsZWFyIHRoZSBzZWxmIHJl
ZnB0ciwgcG9zc2libHkgcmVzdWx0aW5nIGluIGRlbGV0aW9uCiAgICAgbV9zZWxmUmVmID0gMDsK
QEAgLTg3LDI1ICs4NCwyNSBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFn
ZVRocmVhZCgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKIHsKLSAgICBBU1NFUlQoIW1fcXVldWUua2ls
bGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1f
dGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNr
OjpjcmVhdGVJbXBvcnQoc3RvcmFnZSkpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6
c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQogewotICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVl
dWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5k
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoc3RvcmFnZSkpOwogfQogCiB2b2lkIExvY2Fs
U3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVh
PiBhcmVhKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsK
KyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwog
ICAgIG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChhcmVhKSk7
CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAm
JiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJ
RC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0
ZVN5bmMoYXJlYSkpOwogfQogCkBAIC0xMTUsOCArMTEyLDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnRlcm1pbmF0ZSgpCiAgICAgCiAgICAgLy8gSWRlYWxseSB3ZSdkIG5ldmVyIGJlIGtp
bGxpbmcgYSB0aHJlYWQgdGhhdCB3YXNuJ3QgbGl2ZSwgc28gQVNTRVJUIGl0LgogICAgIC8vIEJ1
dCBpZiB3ZSBkbyBpbiBhIHJlbGVhc2UgYnVpbGQsIG1ha2Ugc3VyZSB0byBub3Qgd2FpdCBvbiBh
IGNvbmRpdGlvbiB0aGF0IHdpbGwgbmV2ZXIgZ2V0IHNpZ25hbGxlZAotICAgIEFTU0VSVCghbV9x
dWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAg
QVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxpZCgpKTsKKyAgICBp
ZiAoIW1fdGhyZWFkSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV90ZXJtaW5hdGVMb2NrKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5k
ZXggZDEwMjZiMS4uOWIzNDc0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRo
cmVhZC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTY4LDgg
KzY4LDcgQEAgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNv
bnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW4KIH0KIAogV29ya2VyVGhyZWFkOjpXb3Jr
ZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0
UHJveHkpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX3dvcmtlck9iamVjdFByb3h5KHdv
cmtlck9iamVjdFByb3h5KQorICAgIDogbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQ
cm94eSkKICAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNyZWF0
ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCiB7CiB9CkBAIC04MywxMiArODIs
MTAgQEAgYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKICAgICAvLyBNdXRleCBwcm90ZWN0aW9u
IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZElEIGlzIGluaXRpYWxpemVkIHdo
ZW4gdGhlIHRocmVhZCBzdGFydHMuCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0
aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmICghbV90aHJlYWRJRC5pc1ZhbGlkKCkpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVh
dGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6
IFdvcmtlciIpOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7Ci0KLSAgICByZXR1
cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWRJRC5pc1ZhbGlkKCk7CiB9CiAKIHZv
aWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29836</attachid>
            <date>2009-04-28 01:52:40 -0700</date>
            <delta_ts>2009-05-14 13:03:01 -0700</delta_ts>
            <desc>create(..) -&gt; explicit ctor</desc>
            <filename>patch_v3.txt</filename>
            <type>text/plain</type>
            <size>35900</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzN2RlN2YwLi5lYjMyNjkyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMDktMDQtMjcgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBXVEY6OlRo
cmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFkIGlkLCBy
ZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6VGhy
ZWFkSWRlbnRpZmllcik6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OmlzVmFsaWQp
OgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdURjo6VGhyZWFkSWRlbnRpZmllcjo6cGxhdGZvcm1JZCk6CisgICAgICAgIFRocmVhZElkZW50
aWZpZXIgaXMgbm93IGEgY2xhc3MsIGNvbnRhaW5pbmcgYSBQbGF0Zm9ybVRocmVhZElkZW50aWZp
ZXIgYW5kCisgICAgICAgIG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBhY3Jvc3MgdGhlIGNvZGUgb24g
dGhyZWFkIGlkczogY29uc3RydWN0aW9uLCBjb21wYXJpc29ucywKKyAgICAgICAgY2hlY2sgZm9y
ICd2YWxpZCcgc3RhdGUgZXRjLiAnMCcgaXMgdXNlZCBhcyBpbnZhbGlkIGlkLCB3aGljaCBoYXBw
ZW5zIHRvIGp1c3Qgd29yaworICAgICAgICB3aXRoIGFsbCBwbGF0Zm9ybS1zcGVjaWZpYyB0aHJl
YWQgaWQgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5nIGZpbGVz
IHJlZmxlY3QgdGhlIG5ldyBUaHJlYWRJZGVudGlmaWVyIGZvciBlYWNoIHBsYXRmb3JtLgorICAg
ICAgICBXZSByZW1vdmUgVGhyZWFkTWFwIGFuZCB0aHJlYWRNYXBNdXRleCBmcm9tIGFsbCBvZiB0
aGVtLCByZW1vdmUgdGhlIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIHBvcHVsYXRlZC9zZWFyY2hl
ZC9jbGVhcmVkIHRoZSBtYXAgYW5kIGFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBjb21wYXJpc29uIG9w
ZXJhdG9ycworICAgICAgICBmb3IgVGhyZWFkSWRlbnRpZmllcjoKKworICAgICAgICAqIHd0Zi9U
aHJlYWRpbmdHdGsuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJl
YWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKToKKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nTm9u
ZS5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKworICAgICAgICAqIHd0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmNy
ZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRp
b24pOgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOgorICAgICAgICAoV1RGOjpjdXJyZW50
VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmdRdC5jcHA6CisgICAgICAgIChXVEY6
OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVu
dGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2Fp
dEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKwor
ICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVu
dGlmaWVyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKToKKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Y3VycmVudFRocmVhZCk6CisKIDIwMDktMDQtMjcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFj
bG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFr
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDY1ODA5OTQuLjMzZWVmZTQgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTI3NCw3ICsyNzQsNyBAQCBfX1pOM1dURjExY3Vy
cmVudFRpbWVFdgogX19aTjNXVEYxMWZhc3RSZWFsbG9jRVB2bQogX19aTjNXVEYxMmNyZWF0ZVRo
cmVhZEVQRlB2UzBfRVMwXwogX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwX1BLYwot
X19aTjNXVEYxMmRldGFjaFRocmVhZEVqCitfX1pOM1dURjEyZGV0YWNoVGhyZWFkRU5TXzE2VGhy
ZWFkSWRlbnRpZmllckUKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRv
bU51bWJlckV2CiBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CkBAIC0yOTUsNyArMjk1LDcgQEAg
X19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlcjlkZWNyZW1lbnRFdgogX19aTjNXVEYyMVJl
ZkNvdW50ZWRMZWFrQ291bnRlcjlpbmNyZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFr
Q291bnRlckMxRVBLYwogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlckQxRXYKLV9fWk4z
V1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkVqUFB2CitfX1pOM1dURjIzd2FpdEZvclRocmVh
ZENvbXBsZXRpb25FTlNfMTZUaHJlYWRJZGVudGlmaWVyRVBQdgogX19aTjNXVEYyN3JlbGVhc2VG
YXN0TWFsbG9jRnJlZU1lbW9yeUV2CiBfX1pOM1dURjI4c2V0TWFpblRocmVhZENhbGxiYWNrc1Bh
dXNlZEViCiBfX1pOM1dURjM2bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4RXYK
QEAgLTM1Nyw2ICszNTcsOSBAQCBfX1pOSzNKU0M4SlNPYmplY3Q5dG9Cb29sZWFuRVBOU185RXhl
Y1N0YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxE
YXRhRQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGOENvbGxh
dG9yN2NvbGxhdGVFUEt0bVMyX20KK19fWk5LM1dURjE2VGhyZWFkSWRlbnRpZmllcjdpc1ZhbGlk
RXYKK19fWk5LM1dURjE2VGhyZWFkSWRlbnRpZmllcmVxRVJLUzBfCitfX1pOSzNXVEYxNlRocmVh
ZElkZW50aWZpZXJuZUVSS1MwXwogX19aVFZOM0pTQzEyU3RyaW5nT2JqZWN0RQogX19aVFZOM0pT
QzE0SlNHbG9iYWxPYmplY3RFCiBfX1pUVk4zSlNDMTVKU1dyYXBwZXJPYmplY3RFCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmggYi9KYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nLmgKaW5kZXggMDJmYTNhNC4uYjhiNGJmOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvd3RmL1RocmVhZGluZy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcu
aApAQCAtODUsMTIgKzg1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KIHR5cGVkZWYg
c3RydWN0IF9HTXV0ZXggR011dGV4OwogdHlwZWRlZiBzdHJ1Y3QgX0dDb25kIEdDb25kOwordHlw
ZWRlZiBzdHJ1Y3QgX0dUaHJlYWQgR1RocmVhZDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTXV0ZXg7
CitjbGFzcyBRVGhyZWFkOwogY2xhc3MgUVdhaXRDb25kaXRpb247CiBRVF9FTkRfTkFNRVNQQUNF
CiAjZW5kaWYKQEAgLTEwNSwzNCArMTA3LDE4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNw
YWNlIFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYg
dm9pZCogKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwotCi0vLyBSZXR1cm5zIDAg
aWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEg
bGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhy
ZWFkLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQq
LCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lm
aWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOwotCi0vLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0v
LyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0
IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCi12b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7
Ci1ib29sIGlzTWFpblRocmVhZCgpOwotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVh
ZElkZW50aWZpZXIsIHZvaWQqKik7Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVy
KTsKLQogI2lmIFVTRShQVEhSRUFEUykKIHR5cGVkZWYgcHRocmVhZF9tdXRleF90IFBsYXRmb3Jt
TXV0ZXg7CiB0eXBlZGVmIHB0aHJlYWRfY29uZF90IFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRl
ZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oR1RL
KQogdHlwZWRlZiBHT3duUHRyPEdNdXRleD4gUGxhdGZvcm1NdXRleDsKIHR5cGVkZWYgR093blB0
cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247Cit0eXBlZGVmIEdUaHJlYWQqIFBsYXRmb3JtVGhy
ZWFkSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRVF9QUkVQRU5EX05B
TUVTUEFDRShRTXV0ZXgpKiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVT
UEFDRShRV2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBRVF9QUkVQ
RU5EX05BTUVTUEFDRShRVGhyZWFkKSogUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYg
UExBVEZPUk0oV0lOX09TKQogc3RydWN0IFBsYXRmb3JtTXV0ZXggewogICAgIENSSVRJQ0FMX1NF
Q1RJT04gbV9pbnRlcm5hbE11dGV4OwpAQCAtMTQ5LDExICsxMzUsNjUgQEAgc3RydWN0IFBsYXRm
b3JtQ29uZGl0aW9uIHsKICAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQg
ZHVyYXRpb25NaWxsaXNlY29uZHMpOwogICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7
CiB9OwordHlwZWRlZiB1bnNpZ25lZCBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAjZWxzZQog
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRp
dGlvbjsKICNlbmRpZgogICAgIAorLy8gUGxhdGZvcm0taW5kZXBlbmRlbnQgd3JhcHBlciBvZiBU
aHJlYWRJZC4gQXNzaWduYWJsZSBhbmQgY29weWFibGUuCisvLyBJdCBoYXBwZW5zIHRoYXQgZm9y
IGFsbCBjdXJyZW50IGltcGxlbWVudGF0aW9ucyAnMCcgd29ya3MgZmluZSBhcyAnaW52YWxpZCB2
YWx1ZScuCisvLyBDb21wYXJpbmcgaXMgZGVsZWdhdGVkIHRvIHRoZSBwbGF0Zm9ybSBpbXBsZW1l
bnRhdGlvbnMgYmVjYXVzZSBpdCBuZWVkcyB0bworLy8gY29tcGFyZSBpbiBhIHBsYXRmb3JtLWRl
cGVuZGVudCB3YXkuCitjbGFzcyBUaHJlYWRJZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAgICBUaHJl
YWRJZGVudGlmaWVyKCkKKyAgICAgICAgOiBtX3BsYXRmb3JtSWQoMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghaXNWYWxpZCgpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUaHJlYWRJZGVudGlm
aWVyKFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBwbGF0Zm9ybUlkKQorICAgICAgICA6IG1fcGxh
dGZvcm1JZChwbGF0Zm9ybUlkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Cisg
ICAgfQorCisgICAgVGhyZWFkSWRlbnRpZmllcihjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90
aGVyKQorICAgICAgICA6IG1fcGxhdGZvcm1JZChhbm90aGVyLm1fcGxhdGZvcm1JZCkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgIHsgcmV0dXJuIG1fcGxhdGZvcm1J
ZDsgfQorICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9wbGF0Zm9ybUlkID0gMDsgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFRocmVhZElkZW50aWZpZXImKSBjb25zdDsKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYpIGNvbnN0OworCisgICAgUGxhdGZv
cm1UaHJlYWRJZGVudGlmaWVyIHBsYXRmb3JtSWQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
SWQ7ICB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIG1fcGxhdGZv
cm1JZDsKK307CisKK3R5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1l
bnQpOworCisvLyBSZXR1cm5zIGludmFsaWQgaWRlbnRpZmllciBpZiB0aHJlYWQgY3JlYXRpb24g
ZmFpbGVkLgorLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNv
bWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCitUaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUpOworCisvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1w
bGVtZW50YXRpb24uCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVh
ZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKy8vIENhbGxlZCBp
biB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKy8vIEhlbHBmdWwgZm9yIHBsYXRm
b3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRo
cmVhZC4KK3ZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
OworCitUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKK2Jvb2wgaXNNYWluVGhyZWFk
KCk7CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoq
KTsKK3ZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIAogY2xhc3MgTXV0
ZXggOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTXV0ZXgoKTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdOb25lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdOb25lLmNwcAppbmRleCAyNDQzMWZjLi41NzIwZThjIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nTm9uZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZ05vbmUuY3BwCkBAIC0zMiw2ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmll
ciYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0
b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwog
dm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkgeyB9CiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRo
cmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciopIHsgcmV0dXJu
IDA7IH0KIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKSB7IH0KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDFiYjMwMzMuLmE1MDQ4NzEg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtNDgsNyArNDgs
MTUgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVudGlm
aWVyLCBwdGhyZWFkX3Q+IFRocmVhZE1hcDsKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0
b3I9PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBwdGhyZWFkX2VxdWFsKG1fcGxhdGZvcm1JZCwgYW5vdGhlci5tX3BsYXRmb3JtSWQpOworfQor
Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmll
ciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gIXB0aHJlYWRfZXF1YWwobV9wbGF0Zm9y
bUlkLCBhbm90aGVyLm1fcGxhdGZvcm1JZCk7Cit9CiAKIHN0YXRpYyBNdXRleCogYXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAKQEAgLTU2LDE3ICs2NCwxMCBAQCBzdGF0aWMgTXV0
ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4Owogc3RhdGljIFRocmVhZElkZW50
aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7IC8vIFRoZSB0aHJlYWQgdGhhdCB3YXMgdGhlIGZp
cnN0IHRvIGNhbGwgaW5pdGlhbGl6ZVRocmVhZGluZygpLCB3aGljaCBtdXN0IGJlIHRoZSBtYWlu
IHRocmVhZC4KICNlbmRpZgogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRl
eDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAg
ICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAjaWYgIVBMQVRGT1JNKERB
UldJTikgfHwgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVy
ID0gY3VycmVudFRocmVhZCgpOwpAQCAtODYsNTQgKzg3LDYgQEAgdm9pZCB1bmxvY2tBdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljTXV0ZXgtPnVubG9jaygpOwogfQogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkTWFwLCBtYXAsICgpKTsKLSAgICByZXR1
cm4gbWFwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFk
SGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkg
PSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgp
OyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFu
ZGxlKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0
aHJlYWRIYW5kbGUocHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIEFTU0VSVCghaWRl
bnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0KLSAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmll
ciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJD
b3VudCwgcHRocmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsr
OwotfQotCi1zdGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVh
ZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgIAotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQotCi1zdGF0aWMg
dm9pZCBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQp
Ci17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNT
RVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgCi0gICAgdGhyZWFkTWFwKCkucmVt
b3ZlKGlkKTsKLX0KLQogI2lmIFBMQVRGT1JNKEFORFJPSUQpCiAvLyBPbiB0aGUgQW5kcm9pZCBw
bGF0Zm9ybSwgdGhyZWFkcyBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVk0gYmVmb3JlIHRo
ZXkgcnVuLgogc3RydWN0IFRocmVhZERhdGEgewpAQCAtMTY0LDkgKzExNyw5IEBAIFRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uCiAKICAgICBpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwg
MCwgcnVuVGhyZWFkV2l0aFJlZ2lzdHJhdGlvbiwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRocmVhZERh
dGEpKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBl
bnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50LCBkYXRhKTsKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKCk7CiAgICAgfQotICAg
IHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZSh0aHJlYWRIYW5kbGUp
OworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRsZSk7CiB9CiAjZWxzZQog
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKQEAgLTE3NCwxMCArMTI3LDEwIEBAIFRo
cmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQ
b2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKICAgICBp
ZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgMCwgZW50cnlQb2ludCwgZGF0YSkpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9p
bnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAotICAgIHJldHVy
biBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZSh0aHJlYWRIYW5kbGUpOworICAg
IHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRsZSk7CiB9CiAjZW5kaWYKIApAQCAt
MTkyLDM1ICsxNDUsMjkgQEAgdm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciog
dGhyZWFkTmFtZSkKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAg
ICBBU1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICAKLSAgICBwdGhyZWFkX3QgcHRocmVh
ZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICBwdGhy
ZWFkX3QgcHRocmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKICAKICAgICBpbnQg
am9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCByZXN1bHQpOwogICAgIGlm
IChqb2luUmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVh
ZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdhcyBmb3VuZCB0
byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgcHRocmVhZEhhbmRsZSk7CiAgICAgICAg
IAotICAgIGNsZWFyUHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJl
dHVybiBqb2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUKHRocmVhZElE
LmlzVmFsaWQoKSk7CiAgICAgCi0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFk
SGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgcHRocmVhZF90IHB0aHJlYWRIYW5k
bGUgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgCiAgICAgcHRocmVhZF9kZXRhY2gocHRo
cmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0
aHJlYWRJRCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAg
cHRocmVhZF90IGN1cnJlbnRUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFk
SWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkp
Ci0gICAgICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0
aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIo
cHRocmVhZF9zZWxmKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdXaW4uY3BwCmluZGV4IDQxNWJhNTMuLjBhYzQ4YjQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdXaW4uY3BwCkBAIC05OCw2ICs5OCwxNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAor
Ym9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IFRocmVhZElkZW50aWZpZXIm
IGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCA9PSBhbm90aGVyLm1f
cGxhdGZvcm1JZDsKK30KKworYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0
IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1JZCAhPSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9OLCBU
SFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJvbSA8
aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+Lgog
c3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAgLTEz
OSwxNyArMTQ5LDEwIEBAIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0
ZXgoKQogCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKIAot
c3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IG11dGV4
OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsK
ICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7CiAgICAgICAgIGF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0aHJl
YWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7
CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgICAgIG1haW5UaHJlYWRJZGVu
dGlmaWVyID0gY3VycmVudFRocmVhZCgpOwpAQCAtMTU3LDMyICsxNjAsNiBAQCB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKQogICAgIH0KIH0KIAotc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRM
RT4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4gbWFw
OwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3JlVGhyZWFkSGFuZGxlQnlJ
ZGVudGlmaWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFuZGxlKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQoIXRocmVhZE1h
cCgpLmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKHRocmVhZElELCB0
aHJlYWRIYW5kbGUpOwotfQotCi1zdGF0aWMgSEFORExFIHRocmVhZEhhbmRsZUZvcklkZW50aWZp
ZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlk
KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NF
UlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQp
OwotfQotCiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKICAgICBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpIDogZnVu
Y3Rpb24oZnVuY3Rpb24pLCBkYXRhKGRhdGEpIHt9CiAKQEAgLTIwOCw1MSArMTg1LDQ1IEBAIHN0
YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkK
IFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50
cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICAgICB1bnNp
Z25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
ID0gMDsKICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGludm9jYXRpb24gPSBuZXcgVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpOwogICAgIEhBTkRMRSB0aHJl
YWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwg
d3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbiwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsK
ICAgICBpZiAoIXRocmVhZEhhbmRsZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQ
b2ludCwgZGF0YSwgZXJybm8pOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFRo
cmVhZElkZW50aWZpZXIoKTsKICAgICB9CiAKLSAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRo
cmVhZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxl
QnlJZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7Ci0KLSAgICByZXR1
cm4gdGhyZWFkSUQ7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkSWRlbnRpZmll
cik7CiB9CiAKIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElELCB2b2lkKiogcmVzdWx0KQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNT
RVJUKHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9
IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIEhBTkRMRSB0aHJlYWRI
YW5kbGUgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpCiAg
ICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQg
dG8gYW4gYWN0aXZlIHRocmVhZCB3aGVuIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwogIAog
ICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZEhhbmRsZSwg
SU5GSU5JVEUpOwogICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJTEVEKQotICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQg
dHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRl
bnRpZmllciAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRo
cmVhZEhhbmRsZSk7CiAKICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFy
VGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CiAKICAgICByZXR1cm4gam9pblJl
c3VsdDsKIH0KIAogdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkK
IHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJlYWRJRC5pc1ZhbGlkKCkp
OwogICAgIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyKHRocmVhZElEKTsKKyAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSUQucGxhdGZv
cm1JZCgpOwogICAgIGlmICh0aHJlYWRIYW5kbGUpCiAgICAgICAgIENsb3NlSGFuZGxlKHRocmVh
ZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsK
IH0KIAogVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOworICAgIHJl
dHVybiBUaHJlYWRJZGVudGlmaWVyKEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKIH0KIAogYm9vbCBp
c01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRp
bmdHdGsuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwCmluZGV4
IGI0ZjRkZTEuLjZmZjlmOWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvVGhy
ZWFkaW5nR3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5j
cHAKQEAgLTQyLDE2ICs0MiwyMCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIE11dGV4
KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKLQotc3RhdGljIFRocmVhZElkZW50
aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJh
dG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQogCi1zdGF0aWMgTXV0
ZXgmIHRocmVhZE1hcE11dGV4KCkKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShj
b25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAogewotICAgIHN0YXRpYyBNdXRl
eCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBh
bm90aGVyLm1fcGxhdGZvcm1JZDsKIH0KIAorc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElk
ZW50aWZpZXI7CisKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFnX3Ro
cmVhZF9zdXBwb3J0ZWQoKSkKQEAgLTYwLDcgKzY0LDYgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFk
aW5nKCkKIAogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpIHsKICAg
ICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0ZXg7Ci0gICAg
ICAgIHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5l
cmF0b3IoKTsKICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhyZWFkKCk7
CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CkBAIC03OCw2NCArODEsMTUgQEAgdm9p
ZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwogfQogCi1zdGF0aWMgSGFzaE1hcDxU
aHJlYWRJZGVudGlmaWVyLCBHVGhyZWFkKj4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhh
c2hNYXA8VGhyZWFkSWRlbnRpZmllciwgR1RocmVhZCo+IG1hcDsKLSAgICByZXR1cm4gbWFwOwot
fQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlHdGhyZWFkSGFuZGxlKEdU
aHJlYWQqJiB0aHJlYWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotCi0gICAgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBHVGhyZWFkKj46Oml0ZXJhdG9y
IGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVu
ZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPnNlY29uZCA9PSB0aHJlYWQpCi0gICAgICAgICAg
ICByZXR1cm4gaS0+Zmlyc3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoR1RocmVhZComIHRo
cmVhZCkKLXsKLSAgICBBU1NFUlQoIWlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUodGhyZWFkKSk7
Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0
aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFw
KCkuYWRkKGlkZW50aWZpZXJDb3VudCwgdGhyZWFkKTsKLQotICAgIHJldHVybiBpZGVudGlmaWVy
Q291bnQrKzsKLX0KLQotc3RhdGljIEdUaHJlYWQqIHRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFk
SWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQotc3RhdGljIHZvaWQg
Y2xlYXJUaHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVhZE1h
cCgpLmNvbnRhaW5zKGlkKSk7Ci0KLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiBU
aHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5
UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewogICAgIEdUaHJlYWQqIHRocmVhZDsK
ICAgICBpZiAoISh0aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUoZW50cnlQb2ludCwgZGF0YSwgVFJV
RSwgMCkpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQg
ZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAot
ICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhy
ZWFkKHRocmVhZCk7Ci0gICAgcmV0dXJuIHRocmVhZElEOworICAgIHJldHVybiBUaHJlYWRJZGVu
dGlmaWVyKHRocmVhZCk7CiB9CiAKIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNo
YXIqKQpAQCAtMTQ0LDE1ICs5OCwxNCBAQCB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25z
dCBjaGFyKikKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBB
U1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKIAotICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVh
ZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVhZElE
LnBsYXRmb3JtSWQoKTsKIAogICAgIHZvaWQqIGpvaW5SZXN1bHQgPSBnX3RocmVhZF9qb2luKHRo
cmVhZCk7CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IGpvaW5SZXN1bHQ7CiAK
LSAgICBjbGVhclRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJldHVybiAwOwog
fQogCkBAIC0xNjIsMTAgKzExNSw3IEBAIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZp
ZXIpCiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAgR1RocmVhZCog
Y3VycmVudFRocmVhZCA9IGdfdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmll
ciBpZCA9IGlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAg
IHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChjdXJy
ZW50VGhyZWFkKTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcihnX3RocmVhZF9zZWxmKCkp
OwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93
dGYvcXQvVGhyZWFkaW5nUXQuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0
LmNwcAppbmRleCAxZmRkMmJiLi45ZDFiYWQ5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93
dGYvcXQvVGhyZWFkaW5nUXQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRp
bmdRdC5jcHAKQEAgLTQxLDYgKzQxLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRo
cmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9y
bUlkOworfQorCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFk
SWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkICE9
IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQorCiBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGlj
IFFUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZFByaXZhdGUoVGhyZWFkRnVuY3Rpb24gZW50
cnlQb2ludCwgdm9pZCogZGF0YSk7CkBAIC02OSw3MCArNzksMTIgQEAgc3RhdGljIE11dGV4KiBh
dG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKIAogc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgbWFpblRocmVhZElkZW50aWZpZXI7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgo
KQotewotICAgIHN0YXRpYyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXN0
YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiYgdGhyZWFkTWFwKCkKLXsK
LSAgICBzdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj4gbWFwOwotICAg
IHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVF0
aHJlYWRIYW5kbGUoUVRocmVhZComIHRocmVhZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJl
YWQqPjo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0g
dGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoaS0+c2Vjb25kID09IHRocmVh
ZCkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVh
ZChRVGhyZWFkKiYgdGhyZWFkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UXRocmVhZEhh
bmRsZSh0aHJlYWQpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgp
KTsKLQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0K
LSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCB0aHJlYWQpOwotCi0gICAgcmV0
dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEZvcklk
ZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQp
KTsKLQotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyBRVGhyZWFkKiB0
aHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdl
dChpZCk7Ci19Ci0KIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFhdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsK
ICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgICAgICBRVGhy
ZWFkKiBtYWluVGhyZWFkID0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKS0+dGhyZWFkKCk7
Ci0gICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRs
ZShtYWluVGhyZWFkKTsKLSAgICAgICAgaWYgKCFtYWluVGhyZWFkSWRlbnRpZmllcikKLSAgICAg
ICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVh
ZChtYWluVGhyZWFkKTsKKyAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBUaHJlYWRJZGVu
dGlmaWVyKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpKTsKICAgICAgICAg
aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICB9CiB9CkBAIC0xNTMsMTMgKzEwNSwxMyBAQCBU
aHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5
UG9pbnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBU
aHJlYWRQcml2YXRlKGVudHJ5UG9pbnQsIGRhdGEpOwogICAgIGlmICghdGhyZWFkKSB7CiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAg
d2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KICAgICB0aHJlYWQtPnN0YXJ0
KCk7CiAKICAgICBRVGhyZWFkKiB0aHJlYWRSZWYgPSBzdGF0aWNfY2FzdDxRVGhyZWFkKj4odGhy
ZWFkKTsKIAotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZFJl
Zik7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkUmVmKTsKIH0KIAogdm9pZCBz
ZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciopCkBAIC0xNjgsMTMgKzEyMCwxMiBAQCB2
b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKIAogaW50IHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7
Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuSXNWYWxpZCgpKTsK
IAotICAgIFFUaHJlYWQqIHRocmVhZCA9IHRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwor
ICAgIFFUaHJlYWQqIHRocmVhZCA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKIAogICAgIGJvb2wg
cmVzID0gdGhyZWFkLT53YWl0KCk7CiAKLSAgICBjbGVhclRocmVhZEZvcklkZW50aWZpZXIodGhy
ZWFkSUQpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxU
aHJlYWRQcml2YXRlKj4odGhyZWFkKS0+Z2V0UmV0dXJuVmFsdWUoKTsKIApAQCAtMTg3LDEwICsx
MzgsNyBAQCB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKQogCiBUaHJlYWRJZGVu
dGlmaWVyIGN1cnJlbnRUaHJlYWQoKQogewotICAgIFFUaHJlYWQqIGN1cnJlbnRUaHJlYWQgPSBR
VGhyZWFkOjpjdXJyZW50VGhyZWFkKCk7Ci0gICAgaWYgKFRocmVhZElkZW50aWZpZXIgaWQgPSBp
ZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKGN1cnJlbnRUaHJlYWQpKQotICAgICAgICByZXR1cm4g
aWQ7Ci0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoY3VycmVudFRocmVh
ZCk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoUVRocmVhZDo6Y3VycmVudFRocmVhZCgp
KTsKIH0KIAogYm9vbCBpc01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzFlYjE2Li4zODI1MTliIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDA5LTA0LTI3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTM0OAorICAgICAgICBDaGFuZ2UgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIHRvIGJlIGFuIGFjdHVhbCAoYnV0IHdyYXBwZWQpIHRocmVhZCBpZCwg
cmVtb3ZlIFRocmVhZE1hcC4KKworICAgICAgICBNb3N0IG9mIHRoZSBjaGFuZ2UgaXMgaW4gV1RG
LgorICAgICAgICBVbmxlc3Mgbm90ZWQsIGFsbCB0aGUgZm9sbG93aW5nIGZpbGVzIGNoYW5nZWQg
dG8gdXNlIHRoZSBuZXcgVGhyZWFkSWRlbnRpZmllcjo6aXNWYWxpZCgpCisgICAgICAgIG1ldGhv
ZCBpbnN0ZWFkIG9mIGp1c3QgZG9pbmcgJ2lmKG1fdGhyZWFkSUQpJyBraW5kIG9mIGNoZWNrcywg
c2luY2UgVGhyZWFkSWRlbnRpZmllcgorICAgICAgICBpcyBub3cgYSBjbGFzcyByYXRoZXIgdGhl
biBhbiBpbnRlZ2VyLgorCisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bGlieG1sTG9hZGVyVGhyZWFkKTogdXNlIERFRklORV9TVEFUSUNf
TE9DQUwgYW5kIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciBzdGF0aWMgdGhyZWFkIGlkLAorICAgICAg
ICBzaW5jZSBub3cgVGhyZWFkSWRlbnRpZmllciBuZWVkcyBjb25zdHJ1Y3Rpb24gYW5kIHdlIGF2
b2lkIGhhdmluZyBnbG9iYWwgaW5pdGlhbGl6ZXJzLgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hG
dW5jKTogdXNlIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpv
cGVuRnVuYyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3RyaW5nUGFyc2VyKTog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZW1vcnlQYXJzZXIpOiBkaXR0by4KKyAg
ICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbkRhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOiByZW1vdmUgbV90aHJlYWRJ
RCBmcm9tIGRlYnVnIG91dHB1dC4KKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVh
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
c3RhcnQpOgorCiAyMDA5LTA0LTI3ICBFcmljIFJvbWFuICA8ZXJvbWFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxp
YnhtbDIuY3BwCmluZGV4IDNiZDZiN2MuLjhjMzIyZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1hNTFRva2VuaXplckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxp
YnhtbDIuY3BwCkBAIC0zMjYsMTMgKzMyNiwxNyBAQCBwcml2YXRlOgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIGludCBnbG9iYWxEZXNjcmlwdG9yID0gMDsK
LXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGxpYnhtbExvYWRlclRocmVhZCA9IDA7CisKK3N0YXRp
YyBUaHJlYWRJZGVudGlmaWVyJiBsaWJ4bWxMb2FkZXJUaHJlYWQoKSB7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChUaHJlYWRJZGVudGlmaWVyLCBzdGF0aWNMaWJ4bWxMb2FkZXJUaHJlYWQsICgp
KTsKKyAgICByZXR1cm4gc3RhdGljTGlieG1sTG9hZGVyVGhyZWFkOworfQogCiBzdGF0aWMgaW50
IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKIHsKICAgICAvLyBPbmx5IG1hdGNoIGxvYWRzIGluaXRp
YXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0aGluIFhNTFRva2VuaXplciB0byBh
dm9pZAogICAgIC8vIGludGVyZmVyaW5nIHdpdGggY2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFs
c28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzM1MwotICAgIHJldHVybiBYTUxUb2tlbml6ZXJTY29wZTo6Y3VycmVudERvY0xvYWRlciAmJiBj
dXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkOworICAgIHJldHVybiBYTUxUb2tl
bml6ZXJTY29wZTo6Y3VycmVudERvY0xvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1s
TG9hZGVyVGhyZWFkKCk7CiB9CiAKIGNsYXNzIE9mZnNldEJ1ZmZlciB7CkBAIC0zOTMsNyArMzk3
LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dFeHRlcm5hbExvYWQoY29uc3QgS1VSTCYgdXJs
KQogc3RhdGljIHZvaWQqIG9wZW5GdW5jKGNvbnN0IGNoYXIqIHVyaSkKIHsKICAgICBBU1NFUlQo
WE1MVG9rZW5pemVyU2NvcGU6OmN1cnJlbnREb2NMb2FkZXIpOwotICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IGxpYnhtbExvYWRlclRocmVhZCgpKTsKIAogICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJp
KTsKIApAQCAtNDYyLDcgKzQ2Niw3IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZVN0
cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyCiAgICAgICAg
IHhtbEluaXRQYXJzZXIoKTsKICAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRj
aEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKICAgICAgICAgeG1sUmVnaXN0
ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1
bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAg
ICAgIGxpYnhtbExvYWRlclRocmVhZCgpID0gY3VycmVudFRocmVhZCgpOwogICAgICAgICBkaWRJ
bml0ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4NCw3ICs0ODgsNyBAQCBzdGF0aWMgeG1sUGFyc2Vy
Q3R4dFB0ciBjcmVhdGVNZW1vcnlQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9p
ZCogdXNlcgogICAgICAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgICAgIHhtbFJlZ2lzdGVySW5w
dXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgcmVhZEZ1bmMsIGNsb3NlRnVuYyk7CiAg
ICAgICAgIHhtbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHdy
aXRlRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkID0gY3VycmVu
dFRocmVhZCgpOworICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQoKSA9IGN1cnJlbnRUaHJlYWQo
KTsKICAgICAgICAgZGlkSW5pdCA9IHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAKaW5kZXggYzk3OTdmMi4uNjI0ZGY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmNwcApAQCAtMTM1LDExICsxMzUsMTAgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9w
ZW4oY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5
bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwog
ICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFz
ZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOwotICAgIG1f
c3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CisgICAgbV9zeW5jVGhyZWFkUnVubmlu
ZyA9IG1fc3luY1RocmVhZC5pc1ZhbGlkKCk7CiAgICAgbV9zeW5jTG9jay51bmxvY2soKTsKLSAg
ICBpZiAoIW1fc3luY1RocmVhZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1fc3luY1RocmVhZFJ1bm5pbmc7CiB9CiAKIHZvaWQgSWNvbkRh
dGFiYXNlOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5k
ZXggNzAyY2YwMi4uOGRjMWFhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcApAQCAtNDcsNyArNDcsNiBAQCBTUUxpdGVEYXRhYmFzZTo6U1FMaXRlRGF0YWJhc2UoKQog
ICAgIDogbV9kYigwKQogICAgICwgbV9wYWdlU2l6ZSgtMSkKICAgICAsIG1fdHJhbnNhY3Rpb25J
blByb2dyZXNzKGZhbHNlKQotICAgICwgbV9vcGVuaW5nVGhyZWFkKDApCiB7CiB9CiAKQEAgLTg5
LDcgKzg4LDcgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICBtX2RiID0g
MDsKICAgICB9CiAKLSAgICBtX29wZW5pbmdUaHJlYWQgPSAwOworICAgIG1fb3BlbmluZ1RocmVh
ZC5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEZ1bGxzeW5jKGJv
b2wgZnN5bmMpIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNw
cCBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggZGU5ZmZmYi4uOGIw
ZTEwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCi0g
ICAgOiBtX3RocmVhZElEKDApCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTUxLDEy
ICs1MCwxMiBAQCBib29sIERhdGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisg
ICAgaWYgKG1fdGhyZWFkSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFk
U3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFk
SUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwogfQogCiB2b2lkIERhdGFiYXNl
VGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oKQpAQCAtOTUsNyArOTQsNyBAQCB2b2lkKiBEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBwb29sLmN5Y2xlKCk7CiAgICAg
fQogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBj
bGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVp
IHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkpOworICAgIExPRyhTdG9yYWdl
QVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFz
ZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCB0aGlzLCByZWZDb3Vu
dCgpKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5v
IGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQogICAgIGRldGFjaFRocmVhZCht
X3RocmVhZElEKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKaW5kZXggZGE1
MGM5MC4uMjk0YTE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRo
cmVhZC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKQEAg
LTM4LDcgKzM4LDYgQEAgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IExvY2FsU3RvcmFn
ZVRocmVhZDo6Y3JlYXRlKCkKIH0KIAogTG9jYWxTdG9yYWdlVGhyZWFkOjpMb2NhbFN0b3JhZ2VU
aHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQogewogICAgIG1fc2VsZlJlZiA9IHRoaXM7CiB9
CkBAIC00NywxMiArNDYsMTAgQEAgYm9vbCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkKIHsK
ICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAo
bV90aHJlYWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3RocmVhZElELmlz
VmFsaWQoKSkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChMb2NhbFN0b3JhZ2VU
aHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9y
YWdlIik7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKExvY2FsU3RvcmFnZVRocmVh
ZDo6bG9jYWxTdG9yYWdlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2Ui
KTsKLQotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZElELmlzVmFs
aWQoKTsKIH0KIAogdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWRT
dGFydCh2b2lkKiB0aHJlYWQpCkBAIC03Nyw3ICs3NCw3IEBAIHZvaWQqIExvY2FsU3RvcmFnZVRo
cmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkKCkKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNv
IGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxz
ZQogICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gMDsKKyAg
ICBtX3RocmVhZElELmludmFsaWRhdGUoKTsKIAogICAgIC8vIENsZWFyIHRoZSBzZWxmIHJlZnB0
ciwgcG9zc2libHkgcmVzdWx0aW5nIGluIGRlbGV0aW9uCiAgICAgbV9zZWxmUmVmID0gMDsKQEAg
LTg3LDI1ICs4NCwyNSBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRo
cmVhZCgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKIHsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVk
KCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhy
ZWFkSUQuaXNWYWxpZCgpKTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpj
cmVhdGVJbXBvcnQoc3RvcmFnZSkpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2No
ZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQogewotICAgIEFTU0VS
VCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUu
a2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5kKExv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoc3RvcmFnZSkpOwogfQogCiB2b2lkIExvY2FsU3Rv
cmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBh
cmVhKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAg
ICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAg
IG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChhcmVhKSk7CiB9
CiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBhcmVhKQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5p
c1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5
bmMoYXJlYSkpOwogfQogCkBAIC0xMTUsOCArMTEyLDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VUaHJl
YWQ6OnRlcm1pbmF0ZSgpCiAgICAgCiAgICAgLy8gSWRlYWxseSB3ZSdkIG5ldmVyIGJlIGtpbGxp
bmcgYSB0aHJlYWQgdGhhdCB3YXNuJ3QgbGl2ZSwgc28gQVNTRVJUIGl0LgogICAgIC8vIEJ1dCBp
ZiB3ZSBkbyBpbiBhIHJlbGVhc2UgYnVpbGQsIG1ha2Ugc3VyZSB0byBub3Qgd2FpdCBvbiBhIGNv
bmRpdGlvbiB0aGF0IHdpbGwgbmV2ZXIgZ2V0IHNpZ25hbGxlZAotICAgIEFTU0VSVCghbV9xdWV1
ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgQVNT
RVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxpZCgpKTsKKyAgICBpZiAo
IW1fdGhyZWFkSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90ZXJtaW5hdGVMb2NrKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXgg
ZDEwMjZiMS4uOWIzNDc0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTY4LDggKzY4
LDcgQEAgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0
IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW4KIH0KIAogV29ya2VyVGhyZWFkOjpXb3JrZXJU
aHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJv
eHkpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX3dvcmtlck9iamVjdFByb3h5KHdvcmtl
ck9iamVjdFByb3h5KQorICAgIDogbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQcm94
eSkKICAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNyZWF0ZShz
Y3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCiB7CiB9CkBAIC04MywxMiArODIsMTAg
QEAgYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKICAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlz
IG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZElEIGlzIGluaXRpYWxpemVkIHdoZW4g
dGhlIHRocmVhZCBzdGFydHMuCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9u
TXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmICghbV90aHJlYWRJRC5pc1ZhbGlkKCkpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdv
cmtlciIpOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6Ondv
cmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7Ci0KLSAgICByZXR1cm4g
bV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWRJRC5pc1ZhbGlkKCk7CiB9CiAKIHZvaWQq
IFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29877</attachid>
            <date>2009-04-28 20:38:31 -0700</date>
            <delta_ts>2009-05-06 18:12:50 -0700</delta_ts>
            <desc>Almost ready for landing - needs .def files.</desc>
            <filename>threading.txt</filename>
            <type>text/plain</type>
            <size>35910</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlMjM5YjE1Li5hNjhhYTZmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMDktMDQtMjggIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzNDgKKyAgICAgICAgQ2hhbmdlIFdU
Rjo6VGhyZWFkSWRlbnRpZmllciB0byBiZSBhbiBhY3R1YWwgKGJ1dCB3cmFwcGVkKSB0aHJlYWQg
aWQsIHJlbW92ZSBUaHJlYWRNYXAuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6Cisg
ICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVy
OjpUaHJlYWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6aXNW
YWxpZCk6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OmludmFsaWRhdGUpOgorICAg
ICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpwbGF0Zm9ybUlkKToKKyAgICAgICAgVGhyZWFk
SWRlbnRpZmllciBpcyBub3cgYSBjbGFzcywgY29udGFpbmluZyBhIFBsYXRmb3JtVGhyZWFkSWRl
bnRpZmllciBhbmQKKyAgICAgICAgbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGFjcm9zcyB0aGUgY29k
ZSBvbiB0aHJlYWQgaWRzOiBjb25zdHJ1Y3Rpb24sIGNvbXBhcmlzb25zLAorICAgICAgICBjaGVj
ayBmb3IgJ3ZhbGlkJyBzdGF0ZSBldGMuICcwJyBpcyB1c2VkIGFzIGludmFsaWQgaWQsIHdoaWNo
IGhhcHBlbnMgdG8ganVzdCB3b3JrCisgICAgICAgIHdpdGggYWxsIHBsYXRmb3JtLXNwZWNpZmlj
IHRocmVhZCBpZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgQWxsIHRoZSBmb2xsb3dpbmcg
ZmlsZXMgcmVmbGVjdCB0aGUgbmV3IFRocmVhZElkZW50aWZpZXIgZm9yIGVhY2ggcGxhdGZvcm0u
CisgICAgICAgIFdlIHJlbW92ZSBUaHJlYWRNYXAgYW5kIHRocmVhZE1hcE11dGV4IGZyb20gYWxs
IG9mIHRoZW0sIHJlbW92ZSB0aGUgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgcG9wdWxhdGVkL3Nl
YXJjaGVkL2NsZWFyZWQgdGhlIG1hcCBhbmQgYWRkIHBsYXRmb3JtLXNwZWNpZmljIGNvbXBhcmlz
b24gb3BlcmF0b3JzCisgICAgICAgIGZvciBUaHJlYWRJZGVudGlmaWVyOgorCisgICAgICAgICog
d3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVy
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpj
cmVhdGVUaHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisKKyAgICAgICAgKiB3dGYvVGhy
ZWFkaW5nTm9uZS5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKworICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElk
ZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAg
IChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVh
ZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOgorICAgICAgICAoV1RG
OjpjdXJyZW50VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9xdC9UaHJlYWRpbmdRdC5jcHA6Cisg
ICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RG
OjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAg
ICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpjdXJyZW50
VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RG
OjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRl
bnRpZmllcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcp
OgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6Ondh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisKIDIwMDktMDQtMjggIEdhdmluIEJhcnJhY2xv
dWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5
IE1hY2llaiAiSGVucnkgTW9yZ2FuIiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCmluZGV4IDY1ODA5OTQuLmQxYWJlNzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
QEAgLTI3NCw3ICsyNzQsNyBAQCBfX1pOM1dURjExY3VycmVudFRpbWVFdgogX19aTjNXVEYxMWZh
c3RSZWFsbG9jRVB2bQogX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwXwogX19aTjNX
VEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwX1BLYwotX19aTjNXVEYxMmRldGFjaFRocmVhZEVq
CitfX1pOM1dURjEyZGV0YWNoVGhyZWFkRU5TXzE2VGhyZWFkSWRlbnRpZmllckUKIF9fWk4zV1RG
MTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEzY3Vy
cmVudFRocmVhZEV2CkBAIC0yOTUsNyArMjk1LDcgQEAgX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFr
Q291bnRlcjlkZWNyZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlcjlpbmNy
ZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlckMxRVBLYwogX19aTjNXVEYy
MVJlZkNvdW50ZWRMZWFrQ291bnRlckQxRXYKLV9fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbkVqUFB2CitfX1pOM1dURjIzd2FpdEZvclRocmVhZENvbXBsZXRpb25FTlNfMTZUaHJlYWRJ
ZGVudGlmaWVyRVBQdgogX19aTjNXVEYyN3JlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUV2CiBf
X1pOM1dURjI4c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZEViCiBfX1pOM1dURjM2bG9ja0F0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4RXYKQEAgLTM1Nyw2ICszNTcsOCBAQCBfX1pO
SzNKU0M4SlNPYmplY3Q5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOUhhc2hU
YWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTkszSlNDOUhhc2hUYWJs
ZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGOENvbGxhdG9yN2NvbGxhdGVFUEt0bVMyX20KK19f
Wk5LM1dURjE2VGhyZWFkSWRlbnRpZmllcmVxRVJLUzBfCitfX1pOSzNXVEYxNlRocmVhZElkZW50
aWZpZXJuZUVSS1MwXwogX19aVFZOM0pTQzEyU3RyaW5nT2JqZWN0RQogX19aVFZOM0pTQzE0SlNH
bG9iYWxPYmplY3RFCiBfX1pUVk4zSlNDMTVKU1dyYXBwZXJPYmplY3RFCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFk
aW5nLmgKaW5kZXggMDJmYTNhNC4uYzEzYTc3YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZGluZy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaApAQCAt
ODUsMTIgKzg1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KIHR5cGVkZWYgc3RydWN0
IF9HTXV0ZXggR011dGV4OwogdHlwZWRlZiBzdHJ1Y3QgX0dDb25kIEdDb25kOwordHlwZWRlZiBz
dHJ1Y3QgX0dUaHJlYWQgR1RocmVhZDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTXV0ZXg7CitjbGFz
cyBRVGhyZWFkOwogY2xhc3MgUVdhaXRDb25kaXRpb247CiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5k
aWYKQEAgLTEwNSwzNCArMTA3LDE4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYgdm9pZCog
KCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwotCi0vLyBSZXR1cm5zIDAgaWYgdGhy
ZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJh
bCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgot
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKLQotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3Jl
YXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJ
bnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwot
Ci0vLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0vLyBIZWxw
ZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20g
d2l0aGluIHRoZSB0aHJlYWQuCi12b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKTsKLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1ib29s
IGlzTWFpblRocmVhZCgpOwotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50
aWZpZXIsIHZvaWQqKik7Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKLQog
I2lmIFVTRShQVEhSRUFEUykKIHR5cGVkZWYgcHRocmVhZF9tdXRleF90IFBsYXRmb3JtTXV0ZXg7
CiB0eXBlZGVmIHB0aHJlYWRfY29uZF90IFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBwdGhy
ZWFkX3QgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlw
ZWRlZiBHT3duUHRyPEdNdXRleD4gUGxhdGZvcm1NdXRleDsKIHR5cGVkZWYgR093blB0cjxHQ29u
ZD4gUGxhdGZvcm1Db25kaXRpb247Cit0eXBlZGVmIEdUaHJlYWQqIFBsYXRmb3JtVGhyZWFkSWRl
bnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFD
RShRTXV0ZXgpKiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShR
V2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBRVF9QUkVQRU5EX05B
TUVTUEFDRShRVGhyZWFkKSogUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKQogc3RydWN0IFBsYXRmb3JtTXV0ZXggewogICAgIENSSVRJQ0FMX1NFQ1RJT04g
bV9pbnRlcm5hbE11dGV4OwpAQCAtMTQ5LDExICsxMzUsNjAgQEAgc3RydWN0IFBsYXRmb3JtQ29u
ZGl0aW9uIHsKICAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRp
b25NaWxsaXNlY29uZHMpOwogICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7CiB9Owor
dHlwZWRlZiB1bnNpZ25lZCBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAjZWxzZQogdHlwZWRl
ZiB2b2lkKiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsK
ICNlbmRpZgogICAgIAorLy8gUGxhdGZvcm0taW5kZXBlbmRlbnQgd3JhcHBlciBvZiBUaHJlYWRJ
ZC4gQXNzaWduYWJsZSBhbmQgY29weWFibGUuCisvLyBJdCBoYXBwZW5zIHRoYXQgZm9yIGFsbCBj
dXJyZW50IGltcGxlbWVudGF0aW9ucyAnMCcgd29ya3MgZmluZSBhcyAnaW52YWxpZCB2YWx1ZScu
CisvLyBDb21wYXJpbmcgaXMgZGVsZWdhdGVkIHRvIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlv
bnMgYmVjYXVzZSBpdCBuZWVkcyB0bworLy8gY29tcGFyZSBpbiBhIHBsYXRmb3JtLWRlcGVuZGVu
dCB3YXkuCitjbGFzcyBUaHJlYWRJZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRJZGVu
dGlmaWVyKCkKKyAgICAgICAgOiBtX3BsYXRmb3JtSWQoMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghaXNWYWxpZCgpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUaHJlYWRJZGVudGlmaWVyKFBs
YXRmb3JtVGhyZWFkSWRlbnRpZmllciBwbGF0Zm9ybUlkKQorICAgICAgICA6IG1fcGxhdGZvcm1J
ZChwbGF0Zm9ybUlkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgfQor
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgIHsgcmV0dXJuIG1fcGxhdGZvcm1JZDsgfQorICAg
IHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9wbGF0Zm9ybUlkID0gMDsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRocmVhZElkZW50aWZpZXImKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYpIGNvbnN0OworCisgICAgUGxhdGZvcm1UaHJlYWRJ
ZGVudGlmaWVyIHBsYXRmb3JtSWQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtSWQ7ICB9CisK
K3ByaXZhdGU6CisgICAgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIG1fcGxhdGZvcm1JZDsKK307
CisKK3R5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOworCisv
LyBSZXR1cm5zIGludmFsaWQgaWRlbnRpZmllciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgor
Ly8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZv
cm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwor
CisvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRp
b24uCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9u
LCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKy8vIENhbGxlZCBpbiB0aGUgdGhy
ZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKy8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVy
ZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KK3Zv
aWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCitUaHJl
YWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKK2Jvb2wgaXNNYWluVGhyZWFkKCk7CitpbnQg
d2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKK3ZvaWQg
ZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIAogY2xhc3MgTXV0ZXggOiBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTXV0ZXgoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRpbmdOb25lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdO
b25lLmNwcAppbmRleCAyNDQzMWZjLi41NzIwZThjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkaW5nTm9uZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGlu
Z05vbmUuY3BwCkBAIC0zMiw2ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRo
cmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25z
dCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCkgeyB9CiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciopIHsgcmV0dXJuIDA7IH0KIHZv
aWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKSB7IH0KZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS93
dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDFiYjMwMzMuLmE1MDQ4NzEgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtNDgsNyArNDgsMTUgQEAKIAog
bmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBwdGhy
ZWFkX3Q+IFRocmVhZE1hcDsKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25z
dCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBwdGhyZWFk
X2VxdWFsKG1fcGxhdGZvcm1JZCwgYW5vdGhlci5tX3BsYXRmb3JtSWQpOworfQorCitib29sIFRo
cmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gIXB0aHJlYWRfZXF1YWwobV9wbGF0Zm9ybUlkLCBhbm90
aGVyLm1fcGxhdGZvcm1JZCk7Cit9CiAKIHN0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljTXV0ZXg7CiAKQEAgLTU2LDE3ICs2NCwxMCBAQCBzdGF0aWMgTXV0ZXgqIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4Owogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFp
blRocmVhZElkZW50aWZpZXI7IC8vIFRoZSB0aHJlYWQgdGhhdCB3YXMgdGhlIGZpcnN0IHRvIGNh
bGwgaW5pdGlhbGl6ZVRocmVhZGluZygpLCB3aGljaCBtdXN0IGJlIHRoZSBtYWluIHRocmVhZC4K
ICNlbmRpZgogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQog
dm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpY011dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011
dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0
aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwg
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVu
dFRocmVhZCgpOwpAQCAtODYsNTQgKzg3LDYgQEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgt
PnVubG9jaygpOwogfQogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVGhyZWFkTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwot
fQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNv
bnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRN
YXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsK
LSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkKLSAg
ICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5k
bGUocHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5
UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlm
aWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgcHRo
cmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1z
dGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZp
ZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAg
IAotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVh
clB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVh
ZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgCi0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsK
LX0KLQogI2lmIFBMQVRGT1JNKEFORFJPSUQpCiAvLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwg
dGhyZWFkcyBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgog
c3RydWN0IFRocmVhZERhdGEgewpAQCAtMTY0LDkgKzExNyw5IEBAIFRocmVhZElkZW50aWZpZXIg
Y3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uCiAKICAgICBpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgMCwgcnVuVGhy
ZWFkV2l0aFJlZ2lzdHJhdGlvbiwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRocmVhZERhdGEpKSkgewog
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2lu
dCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKCk7CiAgICAgfQotICAgIHJldHVybiBl
c3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZSh0aHJlYWRIYW5kbGUpOworICAgIHJl
dHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRsZSk7CiB9CiAjZWxzZQogVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2
b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKQEAgLTE3NCwxMCArMTI3LDEwIEBAIFRocmVhZElkZW50
aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9p
ZCogZGF0YSwgY29uCiAgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKICAgICBpZiAocHRocmVh
ZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgMCwgZW50cnlQb2ludCwgZGF0YSkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0
aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAotICAgIHJldHVybiBlc3RhYmxp
c2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZSh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiBU
aHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRsZSk7CiB9CiAjZW5kaWYKIApAQCAtMTkyLDM1ICsx
NDUsMjkgQEAgdm9pZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFt
ZSkKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQo
dGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICAKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICBwdGhyZWFkX3QgcHRo
cmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKICAKICAgICBpbnQgam9pblJlc3Vs
dCA9IHB0aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCByZXN1bHQpOwogICAgIGlmIChqb2luUmVz
dWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3
YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdhcyBmb3VuZCB0byBiZSBkZWFk
bG9ja2VkIHRyeWluZyB0byBxdWl0IiwgcHRocmVhZEhhbmRsZSk7CiAgICAgICAgIAotICAgIGNs
ZWFyUHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJldHVybiBqb2lu
UmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUKHRocmVhZElELmlzVmFsaWQo
KSk7CiAgICAgCi0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9y
SWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSB0aHJl
YWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgCiAgICAgcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRs
ZSk7Ci0gICAgCi0gICAgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7
CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAgcHRocmVhZF90
IGN1cnJlbnRUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmll
ciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAg
IHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5k
bGUoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIocHRocmVhZF9z
ZWxmKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCmluZGV4IDQxNWJhNTMuLmQyYWNmMTEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCkBAIC05OCw2ICs5OCwxNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorYm9vbCBUaHJl
YWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCA9PSBhbm90aGVyLm1fcGxhdGZvcm1J
ZDsKK30KKworYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElk
ZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBh
bm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1F
X0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21z
ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNv
bnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAgLTEzOSwxNyArMTQ5
LDEwIEBAIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKQogCiBz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKIAotc3RhdGljIE11
dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IG11dGV4OwotICAgIHJl
dHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAo
IWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJ
bml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRl
eCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAgICAgICAg
IGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0g
Y3VycmVudFRocmVhZCgpOwpAQCAtMTU3LDMyICsxNjAsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJl
YWRpbmcoKQogICAgIH0KIH0KIAotc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4mIHRocmVh
ZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4gbWFwOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVy
KERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQoIXRocmVhZE1hcCgpLmNvbnRh
aW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKHRocmVhZElELCB0aHJlYWRIYW5k
bGUpOwotfQotCi1zdGF0aWMgSEFORExFIHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFk
SWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNs
ZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQodGhyZWFk
TWFwKCkuY29udGFpbnMoaWQpKTsKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiBz
dHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKICAgICBUaHJlYWRGdW5jdGlvbkludm9j
YXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpIDogZnVuY3Rpb24oZnVu
Y3Rpb24pLCBkYXRhKGRhdGEpIHt9CiAKQEAgLTIwOCw1MSArMTg1LDQzIEBAIHN0YXRpYyB1bnNp
Z25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIFRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICAgICB1bnNpZ25lZCB0aHJl
YWRJZGVudGlmaWVyID0gMDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gMDsKICAg
ICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGludm9jYXRpb24gPSBuZXcgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUg
PSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFk
RW50cnlQb2ludCwgaW52b2NhdGlvbiwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKICAgICBpZiAo
IXRocmVhZEhhbmRsZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhy
ZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQb2ludCwgZGF0
YSwgZXJybm8pOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFRocmVhZElkZW50
aWZpZXIoKTsKICAgICB9CisgICAgLy8gQ2xvc2VzIGhhbmRsZSBvbmx5LCBzaW5jZSB3ZSBkb24n
dCBuZWVkIGl0LiBUaGUgbmV3IHRocmVhZCBydW5zIHVudGlsIGl0IGV4aXRzLgorICAgIENsb3Nl
SGFuZGxlKHRocmVhZEhhbmRsZSk7CiAKLSAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVh
ZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJ
ZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7Ci0KLSAgICByZXR1cm4g
dGhyZWFkSUQ7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkSWRlbnRpZmllcik7
CiB9CiAKIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElELCB2b2lkKiogcmVzdWx0KQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJU
KHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIHVuc2lnbmVkIHRocmVhZElk
ZW50aWZpZXIgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CisgICAgSEFORExFIHRocmVhZEhhbmRs
ZSA9IE9wZW5UaHJlYWQoU1lOQ0hST05JWkUsIEZBTFNFLCB0aHJlYWRJZGVudGlmaWVyKTsKICAg
ICBpZiAoIXRocmVhZEhhbmRsZSkKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVy
ICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRv
IHF1aXQiLCB0aHJlYWRJRCk7CiAgCiAgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5n
bGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5SZXN1bHQgPT0g
V0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMg
Zm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVwIHdhcyBmb3VuZCB0byBiZSBkZWFkbG9j
a2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSGFuZGxlKTsKIAogICAgIENsb3NlSGFuZGxlKHRo
cmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElE
KTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRocmVhZChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAgCi0g
ICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFk
SUQpOwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhh
bmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKIH0K
IAogVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOworICAgIHJldHVy
biBUaHJlYWRJZGVudGlmaWVyKEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKIH0KIAogYm9vbCBpc01h
aW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdH
dGsuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwCmluZGV4IGI0
ZjRkZTEuLjZmZjlmOWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvVGhyZWFk
aW5nR3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHAK
QEAgLTQyLDE2ICs0MiwyMCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIE11dGV4KiBh
dG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKLQotc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgbWFpblRocmVhZElkZW50aWZpZXI7Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9y
PT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQogCi1zdGF0aWMgTXV0ZXgm
IHRocmVhZE1hcE11dGV4KCkKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25z
dCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAogewotICAgIHN0YXRpYyBNdXRleCBt
dXRleDsKLSAgICByZXR1cm4gbXV0ZXg7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBhbm90
aGVyLm1fcGxhdGZvcm1JZDsKIH0KIAorc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50
aWZpZXI7CisKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFnX3RocmVh
ZF9zdXBwb3J0ZWQoKSkKQEAgLTYwLDcgKzY0LDYgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5n
KCkKIAogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpIHsKICAgICAg
ICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0ZXg7Ci0gICAgICAg
IHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0
b3IoKTsKICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhyZWFkKCk7CiAg
ICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CkBAIC03OCw2NCArODEsMTUgQEAgdm9pZCB1
bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRvbWljYWxseUlu
aXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwogfQogCi1zdGF0aWMgSGFzaE1hcDxUaHJl
YWRJZGVudGlmaWVyLCBHVGhyZWFkKj4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hN
YXA8VGhyZWFkSWRlbnRpZmllciwgR1RocmVhZCo+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQot
Ci1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlHdGhyZWFkSGFuZGxlKEdUaHJl
YWQqJiB0aHJlYWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkp
OwotCi0gICAgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBHVGhyZWFkKj46Oml0ZXJhdG9yIGkg
PSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgp
OyArK2kpIHsKLSAgICAgICAgaWYgKGktPnNlY29uZCA9PSB0aHJlYWQpCi0gICAgICAgICAgICBy
ZXR1cm4gaS0+Zmlyc3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBUaHJl
YWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoR1RocmVhZComIHRocmVh
ZCkKLXsKLSAgICBBU1NFUlQoIWlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUodGhyZWFkKSk7Ci0K
LSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0aWMg
VGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFwKCku
YWRkKGlkZW50aWZpZXJDb3VudCwgdGhyZWFkKTsKLQotICAgIHJldHVybiBpZGVudGlmaWVyQ291
bnQrKzsKLX0KLQotc3RhdGljIEdUaHJlYWQqIHRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFkSWRl
bnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
Ci0KLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQotc3RhdGljIHZvaWQgY2xl
YXJUaHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVhZE1hcCgp
LmNvbnRhaW5zKGlkKSk7Ci0KLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewogICAgIEdUaHJlYWQqIHRocmVhZDsKICAg
ICBpZiAoISh0aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUoZW50cnlQb2ludCwgZGF0YSwgVFJVRSwg
MCkpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50
cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAotICAg
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFk
KHRocmVhZCk7Ci0gICAgcmV0dXJuIHRocmVhZElEOworICAgIHJldHVybiBUaHJlYWRJZGVudGlm
aWVyKHRocmVhZCk7CiB9CiAKIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIq
KQpAQCAtMTQ0LDE1ICs5OCwxNCBAQCB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBj
aGFyKikKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NF
UlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKIAotICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVhZEZv
cklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVhZElELnBs
YXRmb3JtSWQoKTsKIAogICAgIHZvaWQqIGpvaW5SZXN1bHQgPSBnX3RocmVhZF9qb2luKHRocmVh
ZCk7CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IGpvaW5SZXN1bHQ7CiAKLSAg
ICBjbGVhclRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJldHVybiAwOwogfQog
CkBAIC0xNjIsMTAgKzExNSw3IEBAIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIp
CiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAgR1RocmVhZCogY3Vy
cmVudFRocmVhZCA9IGdfdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBp
ZCA9IGlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAgIHJl
dHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChjdXJyZW50
VGhyZWFkKTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcihnX3RocmVhZF9zZWxmKCkpOwog
fQogCiBib29sIGlzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYv
cXQvVGhyZWFkaW5nUXQuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNw
cAppbmRleCAxZmRkMmJiLi45ZDFiYWQ5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYv
cXQvVGhyZWFkaW5nUXQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdR
dC5jcHAKQEAgLTQxLDYgKzQxLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRocmVh
ZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9ybUlk
OworfQorCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRl
bnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkICE9IGFu
b3RoZXIubV9wbGF0Zm9ybUlkOworfQorCiBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFFU
aHJlYWQgewogcHVibGljOgogICAgIFRocmVhZFByaXZhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQ
b2ludCwgdm9pZCogZGF0YSk7CkBAIC02OSw3MCArNzksMTIgQEAgc3RhdGljIE11dGV4KiBhdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleDsKIAogc3RhdGljIFRocmVhZElkZW50aWZpZXIg
bWFpblRocmVhZElkZW50aWZpZXI7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQot
ewotICAgIHN0YXRpYyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXN0YXRp
YyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiYgdGhyZWFkTWFwKCkKLXsKLSAg
ICBzdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj4gbWFwOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVF0aHJl
YWRIYW5kbGUoUVRocmVhZComIHRocmVhZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQq
Pjo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhy
ZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoaS0+c2Vjb25kID09IHRocmVhZCkK
LSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChR
VGhyZWFkKiYgdGhyZWFkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UXRocmVhZEhhbmRs
ZSh0aHJlYWQpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsK
LQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0KLSAg
ICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCB0aHJlYWQpOwotCi0gICAgcmV0dXJu
IGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEZvcklkZW50
aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsK
LQotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyBRVGhyZWFkKiB0aHJl
YWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChp
ZCk7Ci19Ci0KIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFhdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKICAg
ICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgICAgICBRVGhyZWFk
KiBtYWluVGhyZWFkID0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKS0+dGhyZWFkKCk7Ci0g
ICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZSht
YWluVGhyZWFkKTsKLSAgICAgICAgaWYgKCFtYWluVGhyZWFkSWRlbnRpZmllcikKLSAgICAgICAg
ICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZCht
YWluVGhyZWFkKTsKKyAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBUaHJlYWRJZGVudGlm
aWVyKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpKTsKICAgICAgICAgaW5p
dGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICB9CiB9CkBAIC0xNTMsMTMgKzEwNSwxMyBAQCBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBUaHJl
YWRQcml2YXRlKGVudHJ5UG9pbnQsIGRhdGEpOwogICAgIGlmICghdGhyZWFkKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0
aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KICAgICB0aHJlYWQtPnN0YXJ0KCk7
CiAKICAgICBRVGhyZWFkKiB0aHJlYWRSZWYgPSBzdGF0aWNfY2FzdDxRVGhyZWFkKj4odGhyZWFk
KTsKIAotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZFJlZik7
CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkUmVmKTsKIH0KIAogdm9pZCBzZXRU
aHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciopCkBAIC0xNjgsMTMgKzEyMCwxMiBAQCB2b2lk
IHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKIAogaW50IHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0g
ICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuSXNWYWxpZCgpKTsKIAot
ICAgIFFUaHJlYWQqIHRocmVhZCA9IHRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAg
IFFUaHJlYWQqIHRocmVhZCA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKIAogICAgIGJvb2wgcmVz
ID0gdGhyZWFkLT53YWl0KCk7CiAKLSAgICBjbGVhclRocmVhZEZvcklkZW50aWZpZXIodGhyZWFk
SUQpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxUaHJl
YWRQcml2YXRlKj4odGhyZWFkKS0+Z2V0UmV0dXJuVmFsdWUoKTsKIApAQCAtMTg3LDEwICsxMzgs
NyBAQCB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKQogCiBUaHJlYWRJZGVudGlm
aWVyIGN1cnJlbnRUaHJlYWQoKQogewotICAgIFFUaHJlYWQqIGN1cnJlbnRUaHJlYWQgPSBRVGhy
ZWFkOjpjdXJyZW50VGhyZWFkKCk7Ci0gICAgaWYgKFRocmVhZElkZW50aWZpZXIgaWQgPSBpZGVu
dGlmaWVyQnlRdGhyZWFkSGFuZGxlKGN1cnJlbnRUaHJlYWQpKQotICAgICAgICByZXR1cm4gaWQ7
Ci0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoY3VycmVudFRocmVhZCk7
CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoUVRocmVhZDo6Y3VycmVudFRocmVhZCgpKTsK
IH0KIAogYm9vbCBpc01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNTU3Mzc1Li44MmMzOTcyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBA
CisyMDA5LTA0LTI4ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBXVEY6
OlRocmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFkIGlk
LCByZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgIE1vc3Qgb2YgdGhlIGNoYW5nZSBpcyBpbiBX
VEYuCisgICAgICAgIFVubGVzcyBub3RlZCwgYWxsIHRoZSBmb2xsb3dpbmcgZmlsZXMgY2hhbmdl
ZCB0byB1c2UgdGhlIG5ldyBUaHJlYWRJZGVudGlmaWVyOjppc1ZhbGlkKCkKKyAgICAgICAgbWV0
aG9kIGluc3RlYWQgb2YganVzdCBkb2luZyAnaWYobV90aHJlYWRJRCknIGtpbmQgb2YgY2hlY2tz
LCBzaW5jZSBUaHJlYWRJZGVudGlmaWVyCisgICAgICAgIGlzIG5vdyBhIGNsYXNzIHJhdGhlciB0
aGVuIGFuIGludGVnZXIuCisKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpsaWJ4bWxMb2FkZXJUaHJlYWQpOiB1c2UgREVGSU5FX1NUQVRJ
Q19MT0NBTCBhbmQgYWNjZXNzb3IgZnVuY3Rpb24gZm9yIHN0YXRpYyB0aHJlYWQgaWQsCisgICAg
ICAgIHNpbmNlIG5vdyBUaHJlYWRJZGVudGlmaWVyIG5lZWRzIGNvbnN0cnVjdGlvbiBhbmQgd2Ug
YXZvaWQgaGF2aW5nIGdsb2JhbCBpbml0aWFsaXplcnMuCisgICAgICAgIChXZWJDb3JlOjptYXRj
aEZ1bmMpOiB1c2UgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
Om9wZW5GdW5jKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTdHJpbmdQYXJzZXIp
OiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lbW9yeVBhcnNlcik6IGRpdHRvLgor
ICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6IHJlbW92ZSBtX3RocmVh
ZElEIGZyb20gZGVidWcgb3V0cHV0LgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6c3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyk6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
OjpzdGFydCk6CisKIDIwMDktMDQtMjggIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcAppbmRleCAzYmQ2YjdjLi44YzMyMmQ0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcApAQCAtMzI2LDEzICszMjYsMTcgQEAgcHJpdmF0ZToKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBpbnQgZ2xvYmFsRGVzY3Jp
cHRvciA9IDA7Ci1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBsaWJ4bWxMb2FkZXJUaHJlYWQgPSAw
OworCitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciYgbGlieG1sTG9hZGVyVGhyZWFkKCkgeworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkSWRlbnRpZmllciwgc3RhdGljTGlieG1sTG9hZGVy
VGhyZWFkLCAoKSk7CisgICAgcmV0dXJuIHN0YXRpY0xpYnhtbExvYWRlclRocmVhZDsKK30KIAog
c3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCiB7CiAgICAgLy8gT25seSBtYXRjaCBs
b2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdpdGhpbiBYTUxUb2tl
bml6ZXIgdG8gYXZvaWQKICAgICAvLyBpbnRlcmZlcmluZyB3aXRoIGNsaWVudCBhcHBsaWNhdGlv
bnMgdGhhdCBhbHNvIHVzZSBsaWJ4bWwyLiAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTczNTMKLSAgICByZXR1cm4gWE1MVG9rZW5pemVyU2NvcGU6OmN1cnJlbnREb2NM
b2FkZXIgJiYgY3VycmVudFRocmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZDsKKyAgICByZXR1
cm4gWE1MVG9rZW5pemVyU2NvcGU6OmN1cnJlbnREb2NMb2FkZXIgJiYgY3VycmVudFRocmVhZCgp
ID09IGxpYnhtbExvYWRlclRocmVhZCgpOwogfQogCiBjbGFzcyBPZmZzZXRCdWZmZXIgewpAQCAt
MzkzLDcgKzM5Nyw3IEBAIHN0YXRpYyBib29sIHNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKGNvbnN0
IEtVUkwmIHVybCkKIHN0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCiB7CiAg
ICAgQVNTRVJUKFhNTFRva2VuaXplclNjb3BlOjpjdXJyZW50RG9jTG9hZGVyKTsKLSAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZCk7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQoKSk7CiAKICAgICBLVVJMIHVybChL
VVJMKCksIHVyaSk7CiAKQEAgLTQ2Miw3ICs0NjYsNyBAQCBzdGF0aWMgeG1sUGFyc2VyQ3R4dFB0
ciBjcmVhdGVTdHJpbmdQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNl
cgogICAgICAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgICAgIHhtbFJlZ2lzdGVySW5wdXRDYWxs
YmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgcmVhZEZ1bmMsIGNsb3NlRnVuYyk7CiAgICAgICAg
IHhtbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHdyaXRlRnVu
YywgY2xvc2VGdW5jKTsKLSAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkID0gY3VycmVudFRocmVh
ZCgpOworICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQoKSA9IGN1cnJlbnRUaHJlYWQoKTsKICAg
ICAgICAgZGlkSW5pdCA9IHRydWU7CiAgICAgfQogCkBAIC00ODQsNyArNDg4LDcgQEAgc3RhdGlj
IHhtbFBhcnNlckN0eHRQdHIgY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFu
ZGxlcnMsIHZvaWQqIHVzZXIKICAgICAgICAgeG1sSW5pdFBhcnNlcigpOwogICAgICAgICB4bWxS
ZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9z
ZUZ1bmMpOwogICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9w
ZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7Ci0gICAgICAgIGxpYnhtbExvYWRlclRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkKCkgPSBjdXJy
ZW50VGhyZWFkKCk7CiAgICAgICAgIGRpZEluaXQgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IGM5Nzk3ZjIuLjYyNGRmN2UgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorKysgYi9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTEzNSwxMSArMTM1LDEwIEBAIGJvb2wgSWNvbkRh
dGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQogICAgIC8vIGNvbXBsZXRl
cyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQKICAgICBtX3N5bmNMb2Nr
LmxvY2soKTsKICAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQoSWNvbkRhdGFiYXNlOjpp
Y29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJY29uRGF0YWJhc2Ui
KTsKLSAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhyZWFkOworICAgIG1fc3luY1Ro
cmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQuaXNWYWxpZCgpOwogICAgIG1fc3luY0xvY2sudW5s
b2NrKCk7Ci0gICAgaWYgKCFtX3N5bmNUaHJlYWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtX3N5bmNUaHJlYWRSdW5uaW5nOwogfQogCiB2
b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwCmluZGV4IDcwMmNmMDIuLjhkYzFhYTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAgU1FMaXRlRGF0YWJhc2U6OlNRTGl0ZURh
dGFiYXNlKCkKICAgICA6IG1fZGIoMCkKICAgICAsIG1fcGFnZVNpemUoLTEpCiAgICAgLCBtX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1fb3BlbmluZ1RocmVhZCgwKQogewog
fQogCkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OmNsb3NlKCkKICAgICAg
ICAgbV9kYiA9IDA7CiAgICAgfQogCi0gICAgbV9vcGVuaW5nVGhyZWFkID0gMDsKKyAgICBtX29w
ZW5pbmdUaHJlYWQuaW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpzZXRG
dWxsc3luYyhib29sIGZzeW5jKSAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCmluZGV4IGRl
OWZmZmIuLjhiMGUxMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMzcsNyAr
MzcsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VU
aHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQogewogICAgIG1fc2VsZlJlZiA9IHRoaXM7CiB9
CkBAIC01MSwxMiArNTAsMTIgQEAgYm9vbCBEYXRhYmFzZVRocmVhZDo6c3RhcnQoKQogewogICAg
IE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3Ro
cmVhZElEKQorICAgIGlmIChtX3RocmVhZElELmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVy
biBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZElELmlzVmFsaWQoKTsKIH0KIAogdm9p
ZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKCkKQEAgLTk1LDcgKzk0LDcgQEAg
dm9pZCogRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgcG9vbC5jeWNs
ZSgpOwogICAgIH0KIAotICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVh
ZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVu
dGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgYW5kIGNsZWFyIHRoZSByZWYg
dG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgdGhp
cywgcmVmQ291bnQoKSk7CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3Vy
Y2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKICAgICBkZXRh
Y2hUaHJlYWQobV90aHJlYWRJRCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlVGhyZWFkLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3Bw
CmluZGV4IGRhNTBjOTAuLjI5NGExNTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuY3BwCkBAIC0zOCw3ICszOCw2IEBAIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBM
b2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpCiB9CiAKIExvY2FsU3RvcmFnZVRocmVhZDo6TG9j
YWxTdG9yYWdlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKIHsKICAgICBtX3NlbGZSZWYg
PSB0aGlzOwogfQpAQCAtNDcsMTIgKzQ2LDEwIEBAIGJvb2wgTG9jYWxTdG9yYWdlVGhyZWFkOjpz
dGFydCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwog
Ci0gICAgaWYgKG1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV90
aHJlYWRJRC5pc1ZhbGlkKCkpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoTG9j
YWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6
IExvY2FsU3RvcmFnZSIpOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChMb2NhbFN0
b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogTG9j
YWxTdG9yYWdlIik7Ci0KLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJl
YWRJRC5pc1ZhbGlkKCk7CiB9CiAKIHZvaWQqIExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9y
YWdlVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQpAQCAtNzcsNyArNzQsNyBAQCB2b2lkKiBMb2Nh
bFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZCgpCiAKICAgICAvLyBEZXRhY2ggdGhl
IHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8g
YW55b25lIGVsc2UKICAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJ
RCA9IDA7CisgICAgbV90aHJlYWRJRC5pbnZhbGlkYXRlKCk7CiAKICAgICAvLyBDbGVhciB0aGUg
c2VsZiByZWZwdHIsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBkZWxldGlvbgogICAgIG1fc2VsZlJl
ZiA9IDA7CkBAIC04NywyNSArODQsMjUgQEAgdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2Nh
bFN0b3JhZ2VUaHJlYWQoKQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBv
cnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3F1
ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQo
KSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9y
YWdlVGFzazo6Y3JlYXRlSW1wb3J0KHN0b3JhZ2UpKTsKIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKIHsK
LSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICBtX3F1ZXVl
LmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTeW5jKHN0b3JhZ2UpKTsKIH0KIAogdm9p
ZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4gYXJlYSkKIHsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJl
YWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQuaXNWYWxp
ZCgpKTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJbXBvcnQo
YXJlYSkpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVTeW5jKFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKLSAgICBBU1NFUlQoIW1fcXVldWUua2ls
bGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1f
dGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNr
OjpjcmVhdGVTeW5jKGFyZWEpKTsKIH0KIApAQCAtMTE1LDggKzExMiw4IEBAIHZvaWQgTG9jYWxT
dG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQogICAgIAogICAgIC8vIElkZWFsbHkgd2UnZCBuZXZl
ciBiZSBraWxsaW5nIGEgdGhyZWFkIHRoYXQgd2Fzbid0IGxpdmUsIHNvIEFTU0VSVCBpdC4KICAg
ICAvLyBCdXQgaWYgd2UgZG8gaW4gYSByZWxlYXNlIGJ1aWxkLCBtYWtlIHN1cmUgdG8gbm90IHdh
aXQgb24gYSBjb25kaXRpb24gdGhhdCB3aWxsIG5ldmVyIGdldCBzaWduYWxsZWQKLSAgICBBU1NF
UlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAgaWYgKCFtX3RocmVhZElE
KQorICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7
CisgICAgaWYgKCFtX3RocmVhZElELmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGVybWluYXRlTG9jayk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQu
Y3BwCmluZGV4IGQxMDI2YjEuLjliMzQ3NDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBA
IC02OCw4ICs2OCw3IEBAIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBXb3JrZXJUaHJlYWQ6OmNy
ZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluCiB9CiAKIFdvcmtlclRocmVh
ZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtl
ck9iamVjdFByb3h5KQotICAgIDogbV90aHJlYWRJRCgwKQotICAgICwgbV93b3JrZXJPYmplY3RQ
cm94eSh3b3JrZXJPYmplY3RQcm94eSkKKyAgICA6IG1fd29ya2VyT2JqZWN0UHJveHkod29ya2Vy
T2JqZWN0UHJveHkpCiAgICAgLCBtX3N0YXJ0dXBEYXRhKFdvcmtlclRocmVhZFN0YXJ0dXBEYXRh
OjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpKQogewogfQpAQCAtODMs
MTIgKzgyLDEwIEBAIGJvb2wgV29ya2VyVGhyZWFkOjpzdGFydCgpCiAgICAgLy8gTXV0ZXggcHJv
dGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWRJRCBpcyBpbml0aWFs
aXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgogICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoIW1fdGhyZWFkSUQuaXNWYWxpZCgpKQorICAgICAgICBtX3RocmVhZElE
ID0gY3JlYXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJX
ZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2Vy
VGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOwotCi0g
ICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwog
fQogCiB2b2lkKiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30078</attachid>
            <date>2009-05-06 18:12:50 -0700</date>
            <delta_ts>2009-05-14 13:02:48 -0700</delta_ts>
            <desc>Latest - with Win .def files and deprecated functions.</desc>
            <filename>threading.txt</filename>
            <type>text/plain</type>
            <size>48748</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNDdlYzY3Li5hNjM4MDkzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcg
QEAKKzIwMDktMDUtMDYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBXVEY6OlRo
cmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFkIGlkLCBy
ZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWRJZGVudGlmaWVyOjpUaHJlYWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdURjo6
VGhyZWFkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZp
ZXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpwbGF0Zm9y
bUlkKToKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBpcyBub3cgYSBjbGFzcywgY29udGFpbmlu
ZyBhIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBhbmQKKyAgICAgICAgbWV0aG9kcyB0aGF0IGFy
ZSB1c2VkIGFjcm9zcyB0aGUgY29kZSBvbiB0aHJlYWQgaWRzOiBjb25zdHJ1Y3Rpb24sIGNvbXBh
cmlzb25zLAorICAgICAgICBjaGVjayBmb3IgJ3ZhbGlkJyBzdGF0ZSBldGMuICcwJyBpcyB1c2Vk
IGFzIGludmFsaWQgaWQsIHdoaWNoIGhhcHBlbnMgdG8ganVzdCB3b3JrCisgICAgICAgIHdpdGgg
YWxsIHBsYXRmb3JtLXNwZWNpZmljIHRocmVhZCBpZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAg
ICAgQWxsIHRoZSBmb2xsb3dpbmcgZmlsZXMgcmVwZWF0ZWRseSByZWZsZWN0IHRoZSBuZXcgVGhy
ZWFkSWRlbnRpZmllciBmb3IgZWFjaCBwbGF0Zm9ybS4KKyAgICAgICAgV2UgcmVtb3ZlIFRocmVh
ZE1hcCBhbmQgdGhyZWFkTWFwTXV0ZXggZnJvbSBhbGwgb2YgdGhlbSwgcmVtb3ZlIHRoZSBmdW5j
dGlvbnMgdGhhdAorICAgICAgICBwb3B1bGF0ZWQvc2VhcmNoZWQvY2xlYXJlZCB0aGUgbWFwIGFu
ZCBhZGQgcGxhdGZvcm0tc3BlY2lmaWMgY29tcGFyaXNvbiBvcGVyYXRvcnMKKyAgICAgICAgZm9y
IFRocmVhZElkZW50aWZpZXIuCisKKyAgICAgICAgKiB3dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHA6
CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlh
bGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAg
ICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpjdXJy
ZW50VGhyZWFkKToKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmdOb25lLmNwcDoKKyAgICAgICAg
KFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRocmVh
ZElkZW50aWZpZXI6Om9wZXJhdG9yIT0pOgorCisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgIChX
VEY6OmRldGFjaFRocmVhZCk6CisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOgorCisgICAg
ICAgICogd3RmL3F0L1RocmVhZGluZ1F0LmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRp
Zmllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdU
Rjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbik6CisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOgorCisgICAgICAgICogd3Rm
L1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmNyZWF0ZVRo
cmVhZEludGVybmFsKTogQWxsIHRoZSBwbGF0Zm9ybXMgKGV4Y2VwdCBXaW5kb3dzKSB1c2VkIGEg
c2VxdWVudGlhbCAKKyAgICAgICAgY291bnRlciBhcyBhIHRocmVhZCBJRCBhbmQgbWFwcGVkIGl0
IGludG8gcGxhdGZvcm0gSUQuIFdpbmRvd3Mgd2FzIHVzaW5nIG5hdGl2ZSB0aHJlYWQKKyAgICAg
ICAgaWQgYW5kIG1hcHBlZCBpdCBpbnRvIHRocmVhZCBoYW5kbGUuIFNpbmNlIHdlIGNhbiBhbHdh
eXMgb2J0YWluIGEgdGhyZWFkIGhhbmRsZQorICAgICAgICBieSB0aHJlYWQgaWQsIGNyZWF0ZVRo
cmVhZCBub3cgY2xvc2VzIHRoZSBoYW5kbGUuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKTogb2J0YWlucyBhbm90aGVyIG9uZSB1c2luZyBPcGVuVGhyZWFkKGlkKSBBUEku
IElmIGNhbiBub3Qgb2J0YWluIGEgaGFuZGxlLAorICAgICAgICBpdCBtZWFucyB0aGUgdGhyZWFk
IGFscmVhZHkgZXhpdGVkLgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOgorICAgICAgICAo
V1RGOjpjdXJyZW50VGhyZWFkKToKKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkRGVwcmVjYXRl
ZCk6IG9sZCBmdW5jdGlvbiwgcmVuYW1lZCAoZm9yIFdpbiBTYWZhcmkgNCBiZXRhIHdoaWNoIHVz
ZXMgaXQgZm9yIG5vdykuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uRGVw
cmVjYXRlZCk6IHNhbWUuCisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWREZXByZWNhdGVkKTog
c2FtZS4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkRGVwcmVjYXRlZCk6IHNhbWUuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IGV4cG9ydCBsaXN0cyAtIHVwZGF0ZWQgdGhlIFdU
RiB0aHJlYWRpbmcgZnVuY3Rpb25zIGRlY29yYXRlZCBuYW1lcworICAgICAgICBzaW5jZSB0aGV5
IG5vdyB0YWtlIGEgZGlmZmVyZW50IHR5cGUgYXMgYSBwYXJhbWV0ZXIuCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZjogZGl0
dG8gZm9yIFdpbmRvd3MsIHBsdXMgYWRkZWQgImRlcHJlY2F0ZWQiIGZ1bmN0aW9ucworICAgICAg
ICB0aGF0IHRha2Ugb2xkIHBhcmFtZXRlciB0eXBlIC0gdHVybnMgb3V0IHB1YmxpYyBiZXRhIG9m
IFNhZmFyaSA0IHVzZXMgdGhvc2UsIHNvIHRoZXkgbmVlZCB0byBiZSBrZXB0IGFsb25nIGZvciBh
IHdoaWxlLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZV9kZWJ1Zy5kZWY6IGRpdHRvLgorCiAyMDA5LTA1LTA2ICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YWNpZWogU3RhY2hvd2lhayAmIERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CmluZGV4IDU3MTkyODguLjMyOWUzMzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAg
LTI3OSw3ICsyNzksNyBAQCBfX1pOM1dURjExY3VycmVudFRpbWVFdgogX19aTjNXVEYxMWZhc3RS
ZWFsbG9jRVB2bQogX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwXwogX19aTjNXVEYx
MmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwX1BLYwotX19aTjNXVEYxMmRldGFjaFRocmVhZEVqCitf
X1pOM1dURjEyZGV0YWNoVGhyZWFkRU5TXzE2VGhyZWFkSWRlbnRpZmllckUKIF9fWk4zV1RGMTJp
c01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEzY3VycmVu
dFRocmVhZEV2CkBAIC0zMDAsNyArMzAwLDcgQEAgX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291
bnRlcjlkZWNyZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlcjlpbmNyZW1l
bnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlckMxRVBLYwogX19aTjNXVEYyMVJl
ZkNvdW50ZWRMZWFrQ291bnRlckQxRXYKLV9fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bkVqUFB2CitfX1pOM1dURjIzd2FpdEZvclRocmVhZENvbXBsZXRpb25FTlNfMTZUaHJlYWRJZGVu
dGlmaWVyRVBQdgogX19aTjNXVEYyN3JlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUV2CiBfX1pO
M1dURjI4c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZEViCiBfX1pOM1dURjM2bG9ja0F0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4RXYKQEAgLTM2Miw2ICszNjIsOCBAQCBfX1pOSzNK
U0M4SlNPYmplY3Q5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOUhhc2hUYWJs
ZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTkszSlNDOUhhc2hUYWJsZTEx
ZGVsZXRlVGFibGVFdgogX19aTkszV1RGOENvbGxhdG9yN2NvbGxhdGVFUEt0bVMyX20KK19fWk5L
M1dURjE2VGhyZWFkSWRlbnRpZmllcmVxRVJLUzBfCitfX1pOSzNXVEYxNlRocmVhZElkZW50aWZp
ZXJuZUVSS1MwXwogX19aVFZOM0pTQzEyU3RyaW5nT2JqZWN0RQogX19aVFZOM0pTQzE0SlNHbG9i
YWxPYmplY3RFCiBfX1pUVk4zSlNDMTVKU1dyYXBwZXJPYmplY3RFCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZGVmIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgppbmRleCA5ZjYyNWEyLi4yN2MyMjIxIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZGVmCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKQEAgLTI5LDYgKzI5LDcgQEAg
RVhQT1JUUwogICAgID8/MkpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FQQVhJUEFWSlNHbG9iYWxEYXRh
QDFAQFoKICAgICA/PzRVU3RyaW5nQEpTQ0BAUUFFQUFWMDFAUEJEQFoKICAgICA/PzhKU0NAQFlB
X05BQlZVU3RyaW5nQDBAMEBaCisgICAgPz84VGhyZWFkSWRlbnRpZmllckBXVEZAQFFCRV9OQUJW
MDFAQFoKICAgICA/VVRGOFN0cmluZ0BVU3RyaW5nQEpTQ0BAUUJFP0FWQ1N0cmluZ0AyQF9OQFoK
ICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBVUmVwQFVTdHJpbmdA
SlNDQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQkRAWgogICAgID9hZGRAUHJvcGVydHlOYW1lQXJy
YXlASlNDQEBRQUVYUEFVUmVwQFVTdHJpbmdAMkBAWgpAQCAtNzEsOSArNzIsOCBAQCBFWFBPUlRT
CiAgICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBW
SlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAWFoKICAgICA/Y3JlYXRlU3RydWN0dXJlQEpTQnl0ZUFy
cmF5QEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cnVjdHVyZUBKU0NAQEBXVEZAQFZKU1ZhbHVl
QDJAQFoKICAgICA/Y3JlYXRlVGFibGVASGFzaFRhYmxlQEpTQ0BAQUJFWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMEBaCi0gICAgP2Ny
ZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCi0gICAgP2N1cnJlbnRUaHJlYWRA
V1RGQEBZQUlYWgorICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQT9BVlRocmVhZElkZW50aWZpZXJA
MUBQNkFQQVhQQVhAWjBQQkRAWgorICAgID9jdXJyZW50VGhyZWFkQFdURkBAWUE/QVZUaHJlYWRJ
ZGVudGlmaWVyQDFAWFoKICAgICA/Y3VycmVudFRpbWVAV1RGQEBZQU5YWgogICAgID9kZWNyZW1l
bnRAUmVmQ291bnRlZExlYWtDb3VudGVyQFdURkBAUUFFWFhaCiAgICAgP2RlZmF1bHRWYWx1ZUBK
U09iamVjdEBKU0NAQFVCRT9BVkpTVmFsdWVAMkBQQVZFeGVjU3RhdGVAMkBXNFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGVAMkBAWgpAQCAtOTMsNyArOTMsNyBAQCBFWFBPUlRTCiAgICAgP2Rlc3Ryb3lA
SGVhcEBKU0NAQFFBRVhYWgogICAgID9kZXN0cm95QFJlcEBVU3RyaW5nQEpTQ0BAUUFFWFhaCiAg
ICAgP2RldGFjaEBEZWJ1Z2dlckBKU0NAQFFBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCi0gICAg
P2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgorICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhWVGhy
ZWFkSWRlbnRpZmllckAxQEBaCiAgICAgP2VxdWFsQElkZW50aWZpZXJASlNDQEBTQV9OUEJVUmVw
QFVTdHJpbmdAMkBQQkRAWgogICAgID9lcXVhbEBKU0NAQFlBX05QQlVSZXBAVVN0cmluZ0AxQDBA
WgogICAgID9ldmFsdWF0ZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVkpTVmFsdWVAMkBB
QlZVU3RyaW5nQDJAQUFWMzJAQFoKQEAgLTI1MSw3ICsyNTEsNyBAQCBFWFBPUlRTCiAgICAgP3Vu
cHJvdGVjdEBIZWFwQEpTQ0BAUUFFWFZKU1ZhbHVlQDJAQFoKICAgICA/dW53cmFwcGVkT2JqZWN0
QEpTT2JqZWN0QEpTQ0BAVUFFUEFWMTJAWFoKICAgICA/d2FpdEBUaHJlYWRDb25kaXRpb25AV1RG
QEBRQUVYQUFWTXV0ZXhAMkBAWgotICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkBXVEZAQFlB
SElQQVBBWEBaCisgICAgP3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uQFdURkBAWUFIVlRocmVhZElk
ZW50aWZpZXJAMUBQQVBBWEBaCiAgICAgV1RGTG9nCiAgICAgV1RGTG9nVmVyYm9zZQogICAgIFdU
RlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZQpAQCAtMjYzLDMgKzI2Myw4IEBAIEVYUE9S
VFMKICAgICA/c3Vic3RyQFVTdHJpbmdASlNDQEBRQkU/QVYxMkBISEBaCiAgICAgP3NldER1bXBz
R2VuZXJhdGVkQ29kZUBCeXRlY29kZUdlbmVyYXRvckBKU0NAQFNBWF9OQFoKICAgICA/cHV0RGly
ZWN0RnVuY3Rpb25ASlNPYmplY3RASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAUEFWSW50ZXJuYWxG
dW5jdGlvbkAyQElAWgorICAgID9jcmVhdGVUaHJlYWREZXByZWNhdGVkQFdURkBAWUFJUDZBUEFY
UEFYQFowUEJEQFoKKyAgICA/Y3VycmVudFRocmVhZERlcHJlY2F0ZWRAV1RGQEBZQUlYWgorICAg
ID9kZXRhY2hUaHJlYWREZXByZWNhdGVkQFdURkBAWUFYSUBaCisgICAgP3dhaXRGb3JUaHJlYWRD
b21wbGV0aW9uRGVwcmVjYXRlZEBXVEZAQFlBSElQQVBBWEBaCisgICAgICAgIApcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZV9kZWJ1Zy5kZWYgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmVfZGVidWcuZGVmCmluZGV4IDJhMWUxNzUuLjBmMDNmNjQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZV9kZWJ1Zy5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlX2RlYnVnLmRlZgpAQCAtMjksNiArMjksNyBA
QCBFWFBPUlRTCiAgICAgPz8ySlNHbG9iYWxPYmplY3RASlNDQEBTQVBBWElQQVZKU0dsb2JhbERh
dGFAMUBAWgogICAgID8/NFVTdHJpbmdASlNDQEBRQUVBQVYwMUBQQkRAWgogICAgID8/OEpTQ0BA
WUFfTkFCVlVTdHJpbmdAMEAwQFoKKyAgICA/PzhUaHJlYWRJZGVudGlmaWVyQFdURkBAUUJFX05B
QlYwMUBAWgogICAgID9VVEY4U3RyaW5nQFVTdHJpbmdASlNDQEBRQkU/QVZDU3RyaW5nQDJAX05A
WgogICAgID9hZGRASWRlbnRpZmllckBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFVSZXBAVVN0cmlu
Z0BKU0NAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBCREBaCiAgICAgP2FkZEBQcm9wZXJ0eU5hbWVB
cnJheUBKU0NAQFFBRVhQQVVSZXBAVVN0cmluZ0AyQEBaCkBAIC03MSw5ICs3Miw4IEBAIEVYUE9S
VFMKICAgICA/Y3JlYXRlTGVha2VkQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRy
QFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBYWgogICAgID9jcmVhdGVTdHJ1Y3R1cmVASlNCeXRl
QXJyYXlASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RydWN0dXJlQEpTQ0BAQFdURkBAVkpTVmFs
dWVAMkBAWgogICAgID9jcmVhdGVUYWJsZUBIYXNoVGFibGVASlNDQEBBQkVYUEFWSlNHbG9iYWxE
YXRhQDJAQFoKLSAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowQFoKLSAgICA/
Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowUEJEQFoKLSAgICA/Y3VycmVudFRocmVh
ZEBXVEZAQFlBSVhaCisgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBP0FWVGhyZWFkSWRlbnRpZmll
ckAxQFA2QVBBWFBBWEBaMFBCREBaCisgICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQT9BVlRocmVh
ZElkZW50aWZpZXJAMUBYWgogICAgID9jdXJyZW50VGltZUBXVEZAQFlBTlhaCiAgICAgP2RlY3Jl
bWVudEBSZWZDb3VudGVkTGVha0NvdW50ZXJAV1RGQEBRQUVYWFoKICAgICA/ZGVmYXVsdFZhbHVl
QEpTT2JqZWN0QEpTQ0BAVUJFP0FWSlNWYWx1ZUAyQFBBVkV4ZWNTdGF0ZUAyQFc0UHJlZmVycmVk
UHJpbWl0aXZlVHlwZUAyQEBaCkBAIC05Myw3ICs5Myw3IEBAIEVYUE9SVFMKICAgICA/ZGVzdHJv
eUBIZWFwQEpTQ0BAUUFFWFhaCiAgICAgP2Rlc3Ryb3lAUmVwQFVTdHJpbmdASlNDQEBRQUVYWFoK
ICAgICA/ZGV0YWNoQERlYnVnZ2VyQEpTQ0BAUUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAg
ICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCisgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWFZU
aHJlYWRJZGVudGlmaWVyQDFAQFoKICAgICA/ZXF1YWxASWRlbnRpZmllckBKU0NAQFNBX05QQlVS
ZXBAVVN0cmluZ0AyQFBCREBaCiAgICAgP2VxdWFsQEpTQ0BAWUFfTlBCVVJlcEBVU3RyaW5nQDFA
MEBaCiAgICAgP2V2YWx1YXRlQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWSlNWYWx1ZUAy
QEFCVlVTdHJpbmdAMkBBQVYzMkBAWgpAQCAtMjUxLDcgKzI1MSw3IEBAIEVYUE9SVFMKICAgICA/
dW5wcm90ZWN0QEhlYXBASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgogICAgID91bndyYXBwZWRPYmpl
Y3RASlNPYmplY3RASlNDQEBVQUVQQVYxMkBYWgogICAgID93YWl0QFRocmVhZENvbmRpdGlvbkBX
VEZAQFFBRVhBQVZNdXRleEAyQEBaCi0gICAgP3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uQFdURkBA
WUFISVBBUEFYQFoKKyAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhWVGhyZWFk
SWRlbnRpZmllckAxQFBBUEFYQFoKICAgICBXVEZMb2cKICAgICBXVEZMb2dWZXJib3NlCiAgICAg
V1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlCkBAIC0yNjMsMyArMjYzLDggQEAgRVhQ
T1JUUwogICAgID9zdWJzdHJAVVN0cmluZ0BKU0NAQFFCRT9BVjEyQEhIQFoKICAgICA/c2V0RHVt
cHNHZW5lcmF0ZWRDb2RlQEJ5dGVjb2RlR2VuZXJhdG9yQEpTQ0BAU0FYX05AWgogICAgID9wdXRE
aXJlY3RGdW5jdGlvbkBKU09iamVjdEBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBQQVZJbnRlcm5h
bEZ1bmN0aW9uQDJASUBaCisgICAgP2NyZWF0ZVRocmVhZERlcHJlY2F0ZWRAV1RGQEBZQUlQNkFQ
QVhQQVhAWjBQQkRAWgorICAgID9jdXJyZW50VGhyZWFkRGVwcmVjYXRlZEBXVEZAQFlBSVhaCisg
ICAgP2RldGFjaFRocmVhZERlcHJlY2F0ZWRAV1RGQEBZQVhJQFoKKyAgICA/d2FpdEZvclRocmVh
ZENvbXBsZXRpb25EZXByZWNhdGVkQFdURkBAWUFISVBBUEFYQFoKKyAgICAKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5n
LmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKaW5kZXggMDJmYTNhNC4uYzEzYTc3
YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaApAQCAtODUsMTIgKzg1LDE0IEBACiAjaW5jbHVkZSA8
d3RmL0dPd25QdHIuaD4KIHR5cGVkZWYgc3RydWN0IF9HTXV0ZXggR011dGV4OwogdHlwZWRlZiBz
dHJ1Y3QgX0dDb25kIEdDb25kOwordHlwZWRlZiBzdHJ1Y3QgX0dUaHJlYWQgR1RocmVhZDsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5f
TkFNRVNQQUNFCiBjbGFzcyBRTXV0ZXg7CitjbGFzcyBRVGhyZWFkOwogY2xhc3MgUVdhaXRDb25k
aXRpb247CiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYKQEAgLTEwNSwzNCArMTA3LDE4IEBAIFFU
X0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhy
ZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJn
dW1lbnQpOwotCi0vLyBSZXR1cm5zIDAgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8vIFRo
ZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBp
dCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQotLy8g
SW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgot
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBk
dXJpbmcgaW5pdGlhbGl6YXRpb24uCi0vLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhl
IHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCi12b2lkIHNl
dFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQotVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1ib29sIGlzTWFpblRocmVhZCgpOwotaW50IHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7Ci12b2lkIGRldGFj
aFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKLQogI2lmIFVTRShQVEhSRUFEUykKIHR5cGVkZWYg
cHRocmVhZF9tdXRleF90IFBsYXRmb3JtTXV0ZXg7CiB0eXBlZGVmIHB0aHJlYWRfY29uZF90IFBs
YXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWRJZGVudGlm
aWVyOwogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBHT3duUHRyPEdNdXRleD4gUGxhdGZv
cm1NdXRleDsKIHR5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247Cit0eXBl
ZGVmIEdUaHJlYWQqIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFFU
KQogdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRTXV0ZXgpKiBQbGF0Zm9ybU11dGV4Owog
dHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29u
ZGl0aW9uOwordHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRVGhyZWFkKSogUGxhdGZvcm1U
aHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oV0lOX09TKQogc3RydWN0IFBsYXRmb3Jt
TXV0ZXggewogICAgIENSSVRJQ0FMX1NFQ1RJT04gbV9pbnRlcm5hbE11dGV4OwpAQCAtMTQ5LDEx
ICsxMzUsNjAgQEAgc3RydWN0IFBsYXRmb3JtQ29uZGl0aW9uIHsKICAgICBib29sIHRpbWVkV2Fp
dChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25NaWxsaXNlY29uZHMpOwogICAgIHZvaWQg
c2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7CiB9OwordHlwZWRlZiB1bnNpZ25lZCBQbGF0Zm9ybVRo
cmVhZElkZW50aWZpZXI7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU11dGV4OwogdHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsKICNlbmRpZgogICAgIAorLy8gUGxhdGZvcm0t
aW5kZXBlbmRlbnQgd3JhcHBlciBvZiBUaHJlYWRJZC4gQXNzaWduYWJsZSBhbmQgY29weWFibGUu
CisvLyBJdCBoYXBwZW5zIHRoYXQgZm9yIGFsbCBjdXJyZW50IGltcGxlbWVudGF0aW9ucyAnMCcg
d29ya3MgZmluZSBhcyAnaW52YWxpZCB2YWx1ZScuCisvLyBDb21wYXJpbmcgaXMgZGVsZWdhdGVk
IHRvIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgYmVjYXVzZSBpdCBuZWVkcyB0bworLy8g
Y29tcGFyZSBpbiBhIHBsYXRmb3JtLWRlcGVuZGVudCB3YXkuCitjbGFzcyBUaHJlYWRJZGVudGlm
aWVyIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRJZGVudGlmaWVyKCkKKyAgICAgICAgOiBtX3BsYXRm
b3JtSWQoMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNWYWxpZCgpKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBUaHJlYWRJZGVudGlmaWVyKFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBwbGF0
Zm9ybUlkKQorICAgICAgICA6IG1fcGxhdGZvcm1JZChwbGF0Zm9ybUlkKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
IHsgcmV0dXJuIG1fcGxhdGZvcm1JZDsgfQorICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9wbGF0
Zm9ybUlkID0gMDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRocmVhZElkZW50aWZp
ZXImKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYp
IGNvbnN0OworCisgICAgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIHBsYXRmb3JtSWQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtSWQ7ICB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1UaHJl
YWRJZGVudGlmaWVyIG1fcGxhdGZvcm1JZDsKK307CisKK3R5cGVkZWYgdm9pZCogKCpUaHJlYWRG
dW5jdGlvbikodm9pZCogYXJndW1lbnQpOworCisvLyBSZXR1cm5zIGludmFsaWQgaWRlbnRpZmll
ciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUg
YSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0
aHJlYWQuCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCisvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVj
aWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFk
TmFtZSk7CisKKy8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4K
Ky8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBz
ZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KK3ZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUpOworCitUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KTsKK2Jvb2wgaXNNYWluVGhyZWFkKCk7CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhy
ZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKK3ZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZp
ZXIpOworICAgIAogY2xhc3MgTXV0ZXggOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTXV0
ZXgoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdOb25lLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdOb25lLmNwcAppbmRleCAyNDQzMWZjLi41NzIw
ZThjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nTm9uZS5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ05vbmUuY3BwCkBAIC0zMiw2ICszMiw5IEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0o
Y29uc3QgVGhyZWFkSWRlbnRpZmllciYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK2Jvb2wgVGhy
ZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKwogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkgeyB9CiBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwg
Y29uc3QgY2hhciopIHsgcmV0dXJuIDA7IH0KIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNv
bnN0IGNoYXIqKSB7IH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmlu
ZGV4IDFiYjMwMzMuLmE1MDQ4NzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcApAQCAtNDgsNyArNDgsMTUgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYg
SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBwdGhyZWFkX3Q+IFRocmVhZE1hcDsKK2Jvb2wgVGhy
ZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBwdGhyZWFkX2VxdWFsKG1fcGxhdGZvcm1JZCwgYW5vdGhl
ci5tX3BsYXRmb3JtSWQpOworfQorCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0o
Y29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gIXB0
aHJlYWRfZXF1YWwobV9wbGF0Zm9ybUlkLCBhbm90aGVyLm1fcGxhdGZvcm1JZCk7Cit9CiAKIHN0
YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAKQEAgLTU2LDE3
ICs2NCwxMCBAQCBzdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
Owogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7IC8vIFRoZSB0
aHJlYWQgdGhhdCB3YXMgdGhlIGZpcnN0IHRvIGNhbGwgaW5pdGlhbGl6ZVRocmVhZGluZygpLCB3
aGljaCBtdXN0IGJlIHRoZSBtYWluIHRocmVhZC4KICNlbmRpZgogCi1zdGF0aWMgTXV0ZXgmIHRo
cmVhZE1hcE11dGV4KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwg
KCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkK
IHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7CiAgICAgICAg
IGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0
aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9y
KCk7CiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAg
IG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOwpAQCAtODYsNTQgKzg3LDYg
QEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwogfQogCi1zdGF0aWMgVGhy
ZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkTWFw
LCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmll
ciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRs
ZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBU
aHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBp
ICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwo
aS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0
YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUocHRocmVhZF90JiBwdGhyZWFkSGFuZGxl
KQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxl
KSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFk
TWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgcHRocmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgcmV0
dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIAotICAgIHJldHVybiB0aHJlYWRNYXAoKS5n
ZXQoaWQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
KFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1h
cE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAg
Ci0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0KLQogI2lmIFBMQVRGT1JNKEFORFJPSUQp
CiAvLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgdGhyZWFkcyBtdXN0IGJlIHJlZ2lzdGVyZWQg
d2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgogc3RydWN0IFRocmVhZERhdGEgewpAQCAtMTY0
LDkgKzExNyw5IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFk
RnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAKICAgICBpZiAocHRocmVhZF9j
cmVhdGUoJnRocmVhZEhhbmRsZSwgMCwgcnVuVGhyZWFkV2l0aFJlZ2lzdHJhdGlvbiwgc3RhdGlj
X2Nhc3Q8dm9pZCo+KHRocmVhZERhdGEpKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBv
aW50LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBUaHJlYWRJZGVu
dGlmaWVyKCk7CiAgICAgfQotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVh
ZEhhbmRsZSh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVh
ZEhhbmRsZSk7CiB9CiAjZWxzZQogVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5h
bChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKQEAg
LTE3NCwxMCArMTI3LDEwIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgcHRocmVhZF90
IHRocmVhZEhhbmRsZTsKICAgICBpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgMCwg
ZW50cnlQb2ludCwgZGF0YSkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0
YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigp
OwogICAgIH0KIAotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRs
ZSh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZEhhbmRs
ZSk7CiB9CiAjZW5kaWYKIApAQCAtMTkyLDM1ICsxNDUsMjkgQEAgdm9pZCBzZXRUaHJlYWROYW1l
SW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIAogaW50IHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAg
QVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsKICAgICAK
LSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
KHRocmVhZElEKTsKKyAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHRocmVhZElELnBsYXRm
b3JtSWQoKTsKICAKICAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihwdGhyZWFkSGFu
ZGxlLCByZXN1bHQpOwogICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExP
R19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0
cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICVwIHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgcHRo
cmVhZEhhbmRsZSk7CiAgICAgICAgIAotICAgIGNsZWFyUHRocmVhZEhhbmRsZUZvcklkZW50aWZp
ZXIodGhyZWFkSUQpOwogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCiB2b2lkIGRldGFjaFRo
cmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7
CisgICAgQVNTRVJUKHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAgCi0gICAgcHRocmVhZF90IHB0
aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAg
cHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSB0aHJlYWRJRC5wbGF0Zm9ybUlkKCk7CiAgICAgCiAg
ICAgcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgCi0gICAgY2xlYXJQdGhyZWFk
SGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3Vy
cmVudFRocmVhZCgpCiB7Ci0gICAgcHRocmVhZF90IGN1cnJlbnRUaHJlYWQgPSBwdGhyZWFkX3Nl
bGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRI
YW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0
YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCk7CisgICAgcmV0
dXJuIFRocmVhZElkZW50aWZpZXIocHRocmVhZF9zZWxmKCkpOwogfQogCiBib29sIGlzTWFpblRo
cmVhZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDQxNWJhNTMuLmVlMzc3
MzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05OCw2ICs5OCwxNiBAQAog
CiBuYW1lc3BhY2UgV1RGIHsKIAorYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNv
bnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxh
dGZvcm1JZCA9PSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKworYm9vbCBUaHJlYWRJZGVudGlm
aWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBhbm90aGVyLm1fcGxhdGZvcm1JZDsKK30KKwog
Ly8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50
ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9
IDB4NDA2RDEzODg7CiAKQEAgLTEzOSwxNyArMTQ5LDEwIEBAIHZvaWQgdW5sb2NrQXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKQogCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWlu
VGhyZWFkSWRlbnRpZmllcjsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0g
ICAgc3RhdGljIE11dGV4IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
Y011dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3
IE11dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFu
ZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAg
ICAgICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOwpAQCAtMTU3LDMy
ICsxNjAsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIH0KIH0KIAotc3RhdGlj
IEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hN
YXA8RFdPUkQsIEhBTkRMRT4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyB2b2lk
IHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhy
ZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsK
LSAgICBBU1NFUlQoIXRocmVhZE1hcCgpLmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFk
TWFwKCkuYWRkKHRocmVhZElELCB0aHJlYWRIYW5kbGUpOwotfQotCi1zdGF0aWMgSEFORExFIHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgp
LmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLSAgICB0
aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uIHsKICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rp
b24sIHZvaWQqIGRhdGEpIDogZnVuY3Rpb24oZnVuY3Rpb24pLCBkYXRhKGRhdGEpIHt9CiAKQEAg
LTIwOCw1MSArMTg1LDQ0IEBAIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50
cnlQb2ludCh2b2lkKiBwYXJhbSkKIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJu
YWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSkKIHsKICAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEID0gMDsKICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24q
IGludm9jYXRpb24gPSBuZXcgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRh
dGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4o
X2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbiwgMCwg
JnRocmVhZElkZW50aWZpZXIpKTsKICAgICBpZiAoIXRocmVhZEhhbmRsZSkgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGgg
ZGF0YSAlcDogJWxkIiwgZW50cnlQb2ludCwgZGF0YSwgZXJybm8pOwotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoKTsKICAgICB9CisgICAgLy8gQ2xv
c2VzIGhhbmRsZSBvbmx5LCBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0LiBUaGUgbmV3IHRocmVhZCBy
dW5zIHVudGlsIGl0IGV4aXRzLgorICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7CiAKLSAg
ICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZp
ZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIs
IHRocmVhZEhhbmRsZSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSUQ7CisgICAgcmV0dXJuIFRocmVh
ZElkZW50aWZpZXIodGhyZWFkSWRlbnRpZmllcik7CiB9CiAKIGludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCB2b2lkKiogcmVzdWx0KQogewotICAg
IEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUKHRocmVhZElELmlzVmFsaWQoKSk7CiAgICAg
Ci0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhy
ZWFkSUQpOworICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSB0aHJlYWRJRC5wbGF0Zm9y
bUlkKCk7CisgICAgSEFORExFIHRocmVhZEhhbmRsZSA9IE9wZW5UaHJlYWQoU1lOQ0hST05JWkUs
IEZBTFNFLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBJZiB0aHJlYWQgYWxyZWFkeSBleGl0
ZWQsIHJldHVybiBpbW1lZGlhdGVseS4KICAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAg
TE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBh
Y3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIHJl
dHVybiBXQUlUX09CSkVDVF8wOwogIAogICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2lu
Z2xlT2JqZWN0KHRocmVhZEhhbmRsZSwgSU5GSU5JVEUpOwogICAgIGlmIChqb2luUmVzdWx0ID09
IFdBSVRfRkFJTEVEKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2Fz
IGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxv
Y2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZEhhbmRsZSk7CiAKICAgICBDbG9zZUhhbmRsZSh0
aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJ
RCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZp
ZXIpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLSAgICAKLSAgICBIQU5ETEUgdGhyZWFkSGFu
ZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKHRocmVh
ZEhhbmRsZSkKLSAgICAgICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBjbGVhclRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogfQogCiBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRUaHJlYWQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlm
aWVyPihHZXRDdXJyZW50VGhyZWFkSWQoKSk7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIo
R2V0Q3VycmVudFRocmVhZElkKCkpOwogfQogCiBib29sIGlzTWFpblRocmVhZCgpCkBAIC00NzAs
NCArNDQwLDQ0IEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogICAgIG1fY29u
ZGl0aW9uLnNpZ25hbCh0cnVlKTsgLy8gVW5ibG9jayBhbGwgdGhyZWFkcy4KIH0KIAorLy8gRGVw
cmVjYXRlZCBmdW5jdGlvbnMuIFRoZSBjdXJyZW50IGJ1aWxkIG9mIFNhZmFyaSA0IGJldGEgaXMg
bGlua2VkIHdpdGggdGhlbSBzbyB3ZSBuZWVkIHRvIHByb3ZpZGUKKy8vIHRoZSBpbXBsZW1lbnRh
dGlvbiB0YWtpbmcgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIGluc3RlYWQgb2YgVGhyZWFkSWRl
bnRpZmllci4gVGhlc2UgYXJlIG5vdCBkZWNsYXJlZAorLy8gaW4gLmggZmlsZSBzbyB0aGUgbmV4
dCB0aW1lIFNhZmFyaSBpcyBidWlsdCBpdCB3aWxsICdhdXRvbWF0aWNhbGx5JyBzd2l0Y2ggdG8g
bmV3IGZ1bmN0aW9ucy4KKy8vIFRoZW4gZGVwcmVjYXRlZCBvbmVzIGNhbiBiZSByZW1vdmVkIGZy
b20gdGhpcyBmaWxlIGFuZCBmcm9tIEphdmFTY3JpcHRDb3JlLmRlZiBhbmQgV2ViS2l0LmRlZiBm
aWxlcy4KKy8vIEluIFdlYktpdC5kZWYgZmlsZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSAncmVuYW1l
ZCcgc28gdGhlaXIgbmFtZSBkb2VzIG5vdCBoYXZlICdEZXByaWNhdGVkJyBwYXJ0IC0gdGhpcwor
Ly8gd29ya2Fyb3VuZHMgaGF2aW5nIDIgZnVuY3Rpb25zIHdpdGggb25seSBkaWZmZXJlbnQgdHlw
ZSBvZiByZXR1cm4gdmFsdWUuCit2b2lkIGRldGFjaFRocmVhZERlcHJlY2F0ZWQoUGxhdGZvcm1U
aHJlYWRJZGVudGlmaWVyKQoreworfQorCitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb25EZXBy
ZWNhdGVkKFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkK
K3sKKyAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIAorICAgIHVuc2lnbmVkIHRocmVhZElkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGhyZWFkSUQpOworICAgIEhBTkRMRSB0aHJl
YWRIYW5kbGUgPSBPcGVuVGhyZWFkKFNZTkNIUk9OSVpFLCBGQUxTRSwgdGhyZWFkSWRlbnRpZmll
cik7CisgICAgLy8gSWYgdGhyZWFkIGFscmVhZHkgZXhpdGVkLCByZXR1cm4gaW1tZWRpYXRlbHku
CisgICAgaWYgKCF0aHJlYWRIYW5kbGUpCisgICAgICAgIHJldHVybiBXQUlUX09CSkVDVF8wOwor
IAorICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZEhhbmRs
ZSwgSU5GSU5JVEUpOworICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJTEVEKQorICAgICAg
ICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXAgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2Nr
ZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRIYW5kbGUpOworCisgICAgQ2xvc2VIYW5kbGUodGhy
ZWFkSGFuZGxlKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0OworfQorCitQbGF0Zm9ybVRocmVh
ZElkZW50aWZpZXIgY3VycmVudFRocmVhZERlcHJlY2F0ZWQoKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI+KEdldEN1cnJlbnRUaHJlYWRJZCgpKTsK
K30KKworUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZERlcHJlY2F0ZWQoVGhy
ZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKGVudHJ5UG9pbnQs
IGRhdGEsIG5hbWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybVRocmVhZElkZW50
aWZpZXI+KHRocmVhZElELnBsYXRmb3JtSWQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwIGIvSmF2
YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwCmluZGV4IGI0ZjRkZTEuLjZmZjlm
OWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvVGhyZWFkaW5nR3RrLmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHAKQEAgLTQyLDE2ICs0
MiwyMCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleDsKLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVh
ZElkZW50aWZpZXI7Citib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgVGhy
ZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlk
ID09IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11
dGV4KCkKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVu
dGlmaWVyJiBhbm90aGVyKSBjb25zdAogewotICAgIHN0YXRpYyBNdXRleCBtdXRleDsKLSAgICBy
ZXR1cm4gbXV0ZXg7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1JZCAhPSBhbm90aGVyLm1fcGxhdGZv
cm1JZDsKIH0KIAorc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7CisKIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQo
KSkKQEAgLTYwLDcgKzY0LDYgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIAogICAgIGlm
ICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpIHsKICAgICAgICAgYXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0ZXg7Ci0gICAgICAgIHRocmVhZE1hcE11
dGV4KCk7CiAgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKICAgICAg
ICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIGluaXRp
YWxpemVNYWluVGhyZWFkKCk7CkBAIC03OCw2NCArODEsMTUgQEAgdm9pZCB1bmxvY2tBdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljTXV0ZXgtPnVubG9jaygpOwogfQogCi1zdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVy
LCBHVGhyZWFkKj4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRl
bnRpZmllciwgR1RocmVhZCo+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgVGhy
ZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlHdGhyZWFkSGFuZGxlKEdUaHJlYWQqJiB0aHJlYWQp
Ci17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBHVGhyZWFkKj46Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAo
KS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKGktPnNlY29uZCA9PSB0aHJlYWQpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmly
c3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoR1RocmVhZComIHRocmVhZCkKLXsKLSAgICBB
U1NFUlQoIWlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUodGhyZWFkKSk7Ci0KLSAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRp
ZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotCi0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZp
ZXJDb3VudCwgdGhyZWFkKTsKLQotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKLX0KLQot
c3RhdGljIEdUaHJlYWQqIHRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICByZXR1
cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRGb3JJ
ZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlk
KSk7Ci0KLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCiBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbnN0IGNoYXIqKQogewogICAgIEdUaHJlYWQqIHRocmVhZDsKICAgICBpZiAoISh0aHJl
YWQgPSBnX3RocmVhZF9jcmVhdGUoZW50cnlQb2ludCwgZGF0YSwgVFJVRSwgMCkpKSB7CiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAg
d2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcigpOwogICAgIH0KIAotICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZCk7Ci0g
ICAgcmV0dXJuIHRocmVhZElEOworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKHRocmVhZCk7
CiB9CiAKIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKQpAQCAtMTQ0LDE1
ICs5OCwxNCBAQCB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKIAogaW50
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQq
KiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQu
aXNWYWxpZCgpKTsKIAotICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVhZEZvcklkZW50aWZpZXIo
dGhyZWFkSUQpOworICAgIEdUaHJlYWQqIHRocmVhZCA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsK
IAogICAgIHZvaWQqIGpvaW5SZXN1bHQgPSBnX3RocmVhZF9qb2luKHRocmVhZCk7CiAgICAgaWYg
KHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IGpvaW5SZXN1bHQ7CiAKLSAgICBjbGVhclRocmVh
ZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNjIsMTAg
KzExNSw3IEBAIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpCiAKIFRocmVhZElk
ZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7Ci0gICAgR1RocmVhZCogY3VycmVudFRocmVhZCA9
IGdfdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZp
ZXJCeUd0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAg
ICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChjdXJyZW50VGhyZWFkKTsKKyAg
ICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcihnX3RocmVhZF9zZWxmKCkpOwogfQogCiBib29sIGlz
TWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5n
UXQuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNwcAppbmRleCAxZmRk
MmJiLi45ZDFiYWQ5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5n
UXQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAKQEAgLTQx
LDYgKzQxLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRocmVhZElkZW50aWZpZXI6
Om9wZXJhdG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5vdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbGF0Zm9ybUlkID09IGFub3RoZXIubV9wbGF0Zm9ybUlkOworfQorCitib29s
IFRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYgYW5v
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkICE9IGFub3RoZXIubV9wbGF0
Zm9ybUlkOworfQorCiBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFFUaHJlYWQgewogcHVi
bGljOgogICAgIFRocmVhZFByaXZhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCog
ZGF0YSk7CkBAIC02OSw3MCArNzksMTIgQEAgc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleDsKIAogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElk
ZW50aWZpZXI7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRp
YyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFRo
cmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19
Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUoUVRo
cmVhZComIHRocmVhZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPjo6aXRlcmF0b3Ig
aSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5k
KCk7ICsraSkgewotICAgICAgICBpZiAoaS0+c2Vjb25kID09IHRocmVhZCkKLSAgICAgICAgICAg
IHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRo
cmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChRVGhyZWFkKiYgdGhy
ZWFkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZSh0aHJlYWQpKTsK
LQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIHN0YXRp
YyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0KLSAgICB0aHJlYWRNYXAo
KS5hZGQoaWRlbnRpZmllckNvdW50LCB0aHJlYWQpOwotCi0gICAgcmV0dXJuIGlkZW50aWZpZXJD
b3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFk
SWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLQotICAgIHRocmVh
ZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyBRVGhyZWFkKiB0aHJlYWRGb3JJZGVudGlm
aWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKICAgICAgICAgaW5pdGlh
bGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgICAgICBRVGhyZWFkKiBtYWluVGhyZWFk
ID0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKS0+dGhyZWFkKCk7Ci0gICAgICAgIG1haW5U
aHJlYWRJZGVudGlmaWVyID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShtYWluVGhyZWFkKTsK
LSAgICAgICAgaWYgKCFtYWluVGhyZWFkSWRlbnRpZmllcikKLSAgICAgICAgICAgIG1haW5UaHJl
YWRJZGVudGlmaWVyID0gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChtYWluVGhyZWFkKTsK
KyAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBUaHJlYWRJZGVudGlmaWVyKFFDb3JlQXBw
bGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpKTsKICAgICAgICAgaW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKICAgICB9CiB9CkBAIC0xNTMsMTMgKzEwNSwxMyBAQCBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbgogICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBUaHJlYWRQcml2YXRlKGVu
dHJ5UG9pbnQsIGRhdGEpOwogICAgIGlmICghdGhyZWFkKSB7CiAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwg
ZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gVGhy
ZWFkSWRlbnRpZmllcigpOwogICAgIH0KICAgICB0aHJlYWQtPnN0YXJ0KCk7CiAKICAgICBRVGhy
ZWFkKiB0aHJlYWRSZWYgPSBzdGF0aWNfY2FzdDxRVGhyZWFkKj4odGhyZWFkKTsKIAotICAgIHJl
dHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZFJlZik7CisgICAgcmV0dXJu
IFRocmVhZElkZW50aWZpZXIodGhyZWFkUmVmKTsKIH0KIAogdm9pZCBzZXRUaHJlYWROYW1lSW50
ZXJuYWwoY29uc3QgY2hhciopCkBAIC0xNjgsMTMgKzEyMCwxMiBAQCB2b2lkIHNldFRocmVhZE5h
bWVJbnRlcm5hbChjb25zdCBjaGFyKikKIAogaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHRo
cmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuSXNWYWxpZCgpKTsKIAotICAgIFFUaHJlYWQq
IHRocmVhZCA9IHRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIFFUaHJlYWQqIHRo
cmVhZCA9IHRocmVhZElELnBsYXRmb3JtSWQoKTsKIAogICAgIGJvb2wgcmVzID0gdGhyZWFkLT53
YWl0KCk7CiAKLSAgICBjbGVhclRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogICAgIGlm
IChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxUaHJlYWRQcml2YXRlKj4o
dGhyZWFkKS0+Z2V0UmV0dXJuVmFsdWUoKTsKIApAQCAtMTg3LDEwICsxMzgsNyBAQCB2b2lkIGRl
dGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKQogCiBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRU
aHJlYWQoKQogewotICAgIFFUaHJlYWQqIGN1cnJlbnRUaHJlYWQgPSBRVGhyZWFkOjpjdXJyZW50
VGhyZWFkKCk7Ci0gICAgaWYgKFRocmVhZElkZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlRdGhy
ZWFkSGFuZGxlKGN1cnJlbnRUaHJlYWQpKQotICAgICAgICByZXR1cm4gaWQ7Ci0gICAgcmV0dXJu
IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJu
IFRocmVhZElkZW50aWZpZXIoUVRocmVhZDo6Y3VycmVudFRocmVhZCgpKTsKIH0KIAogYm9vbCBp
c01haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMzAyYzVlLi5iNzVjMTZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDA5LTA1LTA2
ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTM0OAorICAgICAgICBDaGFuZ2UgV1RGOjpUaHJlYWRJZGVudGlmaWVy
IHRvIGJlIGFuIGFjdHVhbCAoYnV0IHdyYXBwZWQpIHRocmVhZCBpZCwgcmVtb3ZlIFRocmVhZE1h
cC4KKworICAgICAgICBNb3N0IG9mIHRoZSBjaGFuZ2UgaXMgaW4gV1RGLgorICAgICAgICBVbmxl
c3Mgbm90ZWQsIGFsbCB0aGUgZm9sbG93aW5nIGZpbGVzIGNoYW5nZWQgdG8gdXNlIHRoZSBuZXcg
VGhyZWFkSWRlbnRpZmllcjo6aXNWYWxpZCgpCisgICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIGp1
c3QgZG9pbmcgJ2lmKG1fdGhyZWFkSUQpJyBraW5kIG9mIGNoZWNrcywgc2luY2UgVGhyZWFkSWRl
bnRpZmllcgorICAgICAgICBpcyBub3cgYSBjbGFzcyByYXRoZXIgdGhlbiBhbiBpbnRlZ2VyLgor
ICAgICAgICBBbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIGluaXRpYWxpemUgdGhyZWFkSUQgaW4g
Y29uc3RydWN0b3JzIHRvIDAgbm93LgorCisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnht
bDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlieG1sTG9hZGVyVGhyZWFkKTogdXNlIERFRklO
RV9TVEFUSUNfTE9DQUwgYW5kIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciBzdGF0aWMgdGhyZWFkIGlk
LAorICAgICAgICBzaW5jZSBub3cgVGhyZWFkSWRlbnRpZmllciBuZWVkcyBjb25zdHJ1Y3Rpb24g
YW5kIHdlIGF2b2lkIGhhdmluZyBnbG9iYWwgaW5pdGlhbGl6ZXJzLgorICAgICAgICAoV2ViQ29y
ZTo6bWF0Y2hGdW5jKTogdXNlIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjpvcGVuRnVuYyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3RyaW5n
UGFyc2VyKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZW1vcnlQYXJzZXIpOiBk
aXR0by4KKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OlNRTGl0
ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpjbG9zZSk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6
OmRhdGFiYXNlVGhyZWFkKTogcmVtb3ZlIG1fdGhyZWFkSUQgZnJvbSBkZWJ1ZyBvdXRwdXQuCisg
ICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0
b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3Rv
cmFnZVRocmVhZDo6c2NoZWR1bGVTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFn
ZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6c3RhcnQpOgorCiAyMDA5LTA1LTA2ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0
aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeCwgZml4ZXMgZm9yIHd4IHRy
dW5rIGJ1aWxkcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIu
Y3BwIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKaW5kZXggYWE5ZjY1Yy4u
ODcxODcxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAK
KysrIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKQEAgLTMyNiwxMyArMzI2
LDE3IEBAIHByaXZhdGU6CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBz
dGF0aWMgaW50IGdsb2JhbERlc2NyaXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIg
bGlieG1sTG9hZGVyVGhyZWFkID0gMDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXImIGxpYnht
bExvYWRlclRocmVhZCgpIHsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZElkZW50aWZp
ZXIsIHN0YXRpY0xpYnhtbExvYWRlclRocmVhZCwgKCkpOworICAgIHJldHVybiBzdGF0aWNMaWJ4
bWxMb2FkZXJUaHJlYWQ7Cit9CiAKIHN0YXRpYyBpbnQgbWF0Y2hGdW5jKGNvbnN0IGNoYXIqKQog
ewogICAgIC8vIE9ubHkgbWF0Y2ggbG9hZHMgaW5pdGlhdGVkIGR1ZSB0byB1c2VzIG9mIGxpYnht
bDIgZnJvbSB3aXRoaW4gWE1MVG9rZW5pemVyIHRvIGF2b2lkCiAgICAgLy8gaW50ZXJmZXJpbmcg
d2l0aCBjbGllbnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCi0gICAgcmV0dXJuIFhNTFRva2Vu
aXplclNjb3BlOjpjdXJyZW50RG9jTG9hZGVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxM
b2FkZXJUaHJlYWQ7CisgICAgcmV0dXJuIFhNTFRva2VuaXplclNjb3BlOjpjdXJyZW50RG9jTG9h
ZGVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQoKTsKIH0KIAogY2xh
c3MgT2Zmc2V0QnVmZmVyIHsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRB
bGxvd0V4dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCiBzdGF0aWMgdm9pZCogb3BlbkZ1bmMo
Y29uc3QgY2hhciogdXJpKQogewogICAgIEFTU0VSVChYTUxUb2tlbml6ZXJTY29wZTo6Y3VycmVu
dERvY0xvYWRlcik7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJU
aHJlYWQpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFk
KCkpOwogCiAgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOwogCkBAIC00NjIsNyArNDY2LDcgQEAg
c3RhdGljIHhtbFBhcnNlckN0eHRQdHIgY3JlYXRlU3RyaW5nUGFyc2VyKHhtbFNBWEhhbmRsZXJQ
dHIgaGFuZGxlcnMsIHZvaWQqIHVzZXIKICAgICAgICAgeG1sSW5pdFBhcnNlcigpOwogICAgICAg
ICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5j
LCBjbG9zZUZ1bmMpOwogICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1
bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7Ci0gICAgICAgIGxpYnhtbExvYWRl
clRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkKCkg
PSBjdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIGRpZEluaXQgPSB0cnVlOwogICAgIH0KIApAQCAt
NDg0LDcgKzQ4OCw3IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZU1lbW9yeVBhcnNl
cih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyCiAgICAgICAgIHhtbEluaXRQ
YXJzZXIoKTsKICAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9w
ZW5GdW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKICAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRD
YWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAg
ICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGxpYnht
bExvYWRlclRocmVhZCgpID0gY3VycmVudFRocmVhZCgpOwogICAgICAgICBkaWRJbml0ID0gdHJ1
ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCBjOTc5N2Yy
Li42MjRkZjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBAIC0xMzUsMTEg
KzEzNSwxMCBAQCBib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGRhdGFiYXNl
UGF0aCkKICAgICAvLyBjb21wbGV0ZXMgYW5kIG1fc3luY1RocmVhZFJ1bm5pbmcgaXMgcHJvcGVy
bHkgc2V0CiAgICAgbV9zeW5jTG9jay5sb2NrKCk7CiAgICAgbV9zeW5jVGhyZWFkID0gY3JlYXRl
VGhyZWFkKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAi
V2ViQ29yZTogSWNvbkRhdGFiYXNlIik7Ci0gICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3lu
Y1RocmVhZDsKKyAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhyZWFkLmlzVmFsaWQo
KTsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwotICAgIGlmICghbV9zeW5jVGhyZWFkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9zeW5j
VGhyZWFkUnVubmluZzsKIH0KIAogdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCA3MDJjZjAyLi44ZGMxYWEyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCkBAIC00Nyw3ICs0Nyw2IEBAIFNR
TGl0ZURhdGFiYXNlOjpTUUxpdGVEYXRhYmFzZSgpCiAgICAgOiBtX2RiKDApCiAgICAgLCBtX3Bh
Z2VTaXplKC0xKQogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBt
X29wZW5pbmdUaHJlYWQoMCkKIHsKIH0KIApAQCAtODksNyArODgsNyBAQCB2b2lkIFNRTGl0ZURh
dGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIG1fZGIgPSAwOwogICAgIH0KIAotICAgIG1fb3Blbmlu
Z1RocmVhZCA9IDA7CisgICAgbV9vcGVuaW5nVGhyZWFkLmludmFsaWRhdGUoKTsKIH0KIAogdm9p
ZCBTUUxpdGVEYXRhYmFzZTo6c2V0RnVsbHN5bmMoYm9vbCBmc3luYykgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGhyZWFkLmNwcAppbmRleCBmYWIwMmEyLi5iYjc5OTlhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAKQEAgLTM5LDcgKzM5LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRGF0
YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKIHsKICAg
ICBtX3NlbGZSZWYgPSB0aGlzOwogfQpAQCAtNTMsMTIgKzUyLDEyIEBAIGJvb2wgRGF0YWJhc2VU
aHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25N
dXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWRJRC5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVh
ZChEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERh
dGFiYXNlIik7CiAKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWRJ
RC5pc1ZhbGlkKCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlv
bigpCkBAIC05Nyw3ICs5Niw3IEBAIHZvaWQqIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVh
ZCgpCiAgICAgICAgIHBvb2wuY3ljbGUoKTsKICAgICB9CiAKLSAgICBMT0coU3RvcmFnZUFQSSwg
IkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VU
aHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhp
cywgcmVmQ291bnQoKSk7CisgICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhy
ZWFkIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50
bHkgaGFzICVpIHJlZihzKSIsIHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gRGV0YWNoIHRo
ZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRv
IGFueW9uZSBlbHNlCiAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGhyZWFkLmNwcAppbmRleCBkYTUwYzkwLi4yOTRhMTU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcApAQCAtMzgsNyArMzgsNiBAQCBQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZVRocmVhZD4gTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKQogfQogCiBM
b2NhbFN0b3JhZ2VUaHJlYWQ6OkxvY2FsU3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElE
KDApCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTQ3LDEyICs0NiwxMCBAQCBib29s
IExvY2FsU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV90
aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoIW1fdGhyZWFkSUQuaXNWYWxpZCgpKQorICAgICAgICBtX3RocmVh
ZElEID0gY3JlYXRlVGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFk
U3RhcnQsIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKIAotICAgIG1fdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWRTdGFy
dCwgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOwotCi0gICAgcmV0dXJuIG1fdGhyZWFk
SUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwogfQogCiB2b2lkKiBMb2NhbFN0
b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTc3
LDcgKzc0LDcgQEAgdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWQo
KQogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9u
Z2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCiAgICAgZGV0YWNoVGhyZWFkKG1fdGhy
ZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkSUQuaW52YWxpZGF0ZSgp
OwogCiAgICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4g
ZGVsZXRpb24KICAgICBtX3NlbGZSZWYgPSAwOwpAQCAtODcsMjUgKzg0LDI1IEBAIHZvaWQqIExv
Y2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkKCkKIAogdm9pZCBMb2NhbFN0b3Jh
Z2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdl
KQogewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBB
U1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1f
cXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChzdG9yYWdlKSk7CiB9
CiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2U+IHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1f
dGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElELmlz
VmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3lu
YyhzdG9yYWdlKSk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9y
dChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7Ci0gICAgQVNTRVJUKCFtX3F1
ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQo
KSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9y
YWdlVGFzazo6Y3JlYXRlSW1wb3J0KGFyZWEpKTsKIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VUaHJl
YWQ6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7Ci0g
ICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCgh
bV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5h
cHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhhcmVhKSk7CiB9CiAKQEAgLTExNSw4
ICsxMTIsOCBAQCB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKICAgICAKICAg
ICAvLyBJZGVhbGx5IHdlJ2QgbmV2ZXIgYmUga2lsbGluZyBhIHRocmVhZCB0aGF0IHdhc24ndCBs
aXZlLCBzbyBBU1NFUlQgaXQuCiAgICAgLy8gQnV0IGlmIHdlIGRvIGluIGEgcmVsZWFzZSBidWls
ZCwgbWFrZSBzdXJlIHRvIG5vdCB3YWl0IG9uIGEgY29uZGl0aW9uIHRoYXQgd2lsbCBuZXZlciBn
ZXQgc2lnbmFsbGVkCi0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQp
OwotICAgIGlmICghbV90aHJlYWRJRCkKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYg
bV90aHJlYWRJRC5pc1ZhbGlkKCkpOworICAgIGlmICghbV90aHJlYWRJRC5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rlcm1pbmF0ZUxvY2sp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCBkMTAyNmIxLi45YjM0NzQ1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmNwcApAQCAtNjgsOCArNjgsNyBAQCBQYXNzUmVmUHRyPFdvcmtlclRo
cmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBT
dHJpbgogfQogCiBXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRV
UkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdv
cmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSkKLSAgICA6IG1fdGhyZWFkSUQoMCkK
LSAgICAsIG1fd29ya2VyT2JqZWN0UHJveHkod29ya2VyT2JqZWN0UHJveHkpCisgICAgOiBtX3dv
cmtlck9iamVjdFByb3h5KHdvcmtlck9iamVjdFByb3h5KQogICAgICwgbV9zdGFydHVwRGF0YShX
b3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3Vy
Y2VDb2RlKSkKIHsKIH0KQEAgLTgzLDEyICs4MiwxMCBAQCBib29sIFdvcmtlclRocmVhZDo6c3Rh
cnQoKQogICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0
IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBN
dXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJl
YWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3RocmVhZElELmlzVmFsaWQo
KSkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6Ondvcmtl
clRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAKLSAgICBtX3RocmVhZElE
ID0gY3JlYXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJX
ZWJDb3JlOiBXb3JrZXIiKTsKLQotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBt
X3RocmVhZElELmlzVmFsaWQoKTsKIH0KIAogdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJl
YWRTdGFydCh2b2lkKiB0aHJlYWQpCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBi
L1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDQ0ZDliZmQuLjljNzBlNzAgMTAwNjQ0Ci0tLSBh
L1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMDktMDUtMDYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MzQ4CisgICAgICAgIENoYW5nZSBX
VEY6OlRocmVhZElkZW50aWZpZXIgdG8gYmUgYW4gYWN0dWFsIChidXQgd3JhcHBlZCkgdGhyZWFk
IGlkLCByZW1vdmUgVGhyZWFkTWFwLgorCisgICAgICAgIE1vc3Qgb2YgdGhlIGNoYW5nZSBpcyBp
biBXVEYgYW5kIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdC5kZWY6
IHJlcGxhY2VkIGRlY29yYXRlZCBuYW1lcyBvZiBXVEYgdGhyZWFkaW5nIGZ1bmN0aW9ucyB3aXRo
IG5ldyBvbmVzLgorICAgICAgICBBbHNvLCBhbGlhc2VkIHRoZSBvbGQgaW1wbGVtZW50YXRpb25z
IHNvIHRoZSBwdWJsaWMgU2FmYXJpIDQgYmV0YSBjYW4gbG9hZCB0aGUgb2xkIFdURiBmdW5jdGlv
bnMKKyAgICAgICAgd2hpY2ggaXQgdXNlcy4gTmV4dCB0aW1lIFNhZmFyaSA0IGJ1aWxkcywgaXQg
d2lsbCBwaWNrIHVwIG5ldyBmdW5jdGlvbnMgYW5kIHRoZSBkZXByaWNhdGVkIG9uZXMKKyAgICAg
ICAgY2FuIGJlIHJlbW92ZWQuCisgICAgICAgICogV2ViS2l0LnZjcHJvai9XZWJLaXRfZGVidWcu
ZGVmOiBzYW1lLgorCiAyMDA5LTA1LTA2ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIGRlZmF1bHQgdmFsdWUgb2YgV2ViS2l0UGFpbnROYXRp
dmVDb250cm9scyB0byB0cnVlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9q
L1dlYktpdC5kZWYgYi9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LmRlZgppbmRleCA4
ZDA5MWVjLi5mNWFkZTc4IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2Vi
S2l0LmRlZgorKysgYi9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LmRlZgpAQCAtMTE0
LDExICsxMTQsMTIgQEAgRVhQT1JUUwogICAgICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKICAgICAgICAgPz8xTXV0ZXhAV1RGQEBRQUVAWFoKICAgICAgICAgPz8xVGhyZWFkQ29u
ZGl0aW9uQFdURkBAUUFFQFhaCisgICAgICAgID8/OFRocmVhZElkZW50aWZpZXJAV1RGQEBRQkVf
TkFCVjAxQEBaCiAgICAgICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFWFha
CiAgICAgICAgID9jYWxsT25NYWluVGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCi0gICAgICAg
ID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWgotICAgICAgICA/Y3VycmVu
dFRocmVhZEBXVEZAQFlBSVhaCi0gICAgICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJQFoKKyAg
ICAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBP0FWVGhyZWFkSWRlbnRpZmllckAxQFA2QVBBWFBB
WEBaMFBCREBaCisgICAgICAgID9jdXJyZW50VGhyZWFkQFdURkBAWUE/QVZUaHJlYWRJZGVudGlm
aWVyQDFAWFoKKyAgICAgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWFZUaHJlYWRJZGVudGlmaWVy
QDFAQFoKICAgICAgICAgP2luaXRpYWxpemVNYWluVGhyZWFkQFdURkBAWUFYWFoKICAgICAgICAg
P2luaXRpYWxpemVUaHJlYWRpbmdAV1RGQEBZQVhYWgogICAgICAgICA/aXNNYWluVGhyZWFkQFdU
RkBAWUFfTlhaCkBAIC0xMzIsNSArMTMzLDkgQEAgRVhQT1JUUwogICAgICAgICA/dW5sb2NrQE11
dGV4QFdURkBAUUFFWFhaCiAgICAgICAgID91bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0
aWNNdXRleEBXVEZAQFlBWFhaCiAgICAgICAgID93YWl0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFB
RVhBQVZNdXRleEAyQEBaCi0gICAgICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkBXVEZAQFlB
SElQQVBBWEBaCi0gICAgICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBAWgor
ICAgICAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhWVGhyZWFkSWRlbnRpZmll
ckAxQFBBUEFYQFoKKyAgICAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBC
REBaPT9jcmVhdGVUaHJlYWREZXByZWNhdGVkQFdURkBAWUFJUDZBUEFYUEFYQFowUEJEQFoKKyAg
ICAgICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQUlYWj0/Y3VycmVudFRocmVhZERlcHJlY2F0ZWRA
V1RGQEBZQUlYWgorICAgICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaPT9kZXRhY2hUaHJl
YWREZXByZWNhdGVkQFdURkBAWUFYSUBaCisgICAgICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bkBXVEZAQFlBSElQQVBBWEBaPT93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkRlcHJlY2F0ZWRAV1RG
QEBZQUhJUEFQQVhAWgorICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0X2RlYnVnLmRlZiBiL1dlYktp
dC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRfZGVidWcuZGVmCmluZGV4IGMxNTk1N2EuLmRmNGEy
ODAgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRfZGVidWcuZGVm
CisrKyBiL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRfZGVidWcuZGVmCkBAIC0xMTQs
MTEgKzExNCwxMiBAQCBFWFBPUlRTCiAgICAgICAgID8/MFRocmVhZENvbmRpdGlvbkBXVEZAQFFB
RUBYWgogICAgICAgICA/PzFNdXRleEBXVEZAQFFBRUBYWgogICAgICAgICA/PzFUaHJlYWRDb25k
aXRpb25AV1RGQEBRQUVAWFoKKyAgICAgICAgPz84VGhyZWFkSWRlbnRpZmllckBXVEZAQFFCRV9O
QUJWMDFAQFoKICAgICAgICAgP2Jyb2FkY2FzdEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoK
ICAgICAgICAgP2NhbGxPbk1haW5UaHJlYWRAV1RGQEBZQVhQNkFYUEFYQFowQFoKLSAgICAgICAg
P2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCi0gICAgICAgID9jdXJyZW50
VGhyZWFkQFdURkBAWUFJWFoKLSAgICAgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgorICAg
ICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUE/QVZUaHJlYWRJZGVudGlmaWVyQDFAUDZBUEFYUEFY
QFowUEJEQFoKKyAgICAgICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQT9BVlRocmVhZElkZW50aWZp
ZXJAMUBYWgorICAgICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYVlRocmVhZElkZW50aWZpZXJA
MUBAWgogICAgICAgICA/aW5pdGlhbGl6ZU1haW5UaHJlYWRAV1RGQEBZQVhYWgogICAgICAgICA/
aW5pdGlhbGl6ZVRocmVhZGluZ0BXVEZAQFlBWFhaCiAgICAgICAgID9pc01haW5UaHJlYWRAV1RG
QEBZQV9OWFoKQEAgLTEzMiw1ICsxMzMsOCBAQCBFWFBPUlRTCiAgICAgICAgID91bmxvY2tATXV0
ZXhAV1RGQEBRQUVYWFoKICAgICAgICAgP3VubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
Y011dGV4QFdURkBAWUFYWFoKICAgICAgICAgP3dhaXRAVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFF
WEFBVk11dGV4QDJAQFoKLSAgICAgICAgP3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uQFdURkBAWUFI
SVBBUEFYQFoKLSAgICAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMEBaCisg
ICAgICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkBXVEZAQFlBSFZUaHJlYWRJZGVudGlmaWVy
QDFAUEFQQVhAWgorICAgICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowUEJE
QFo9P2NyZWF0ZVRocmVhZERlcHJlY2F0ZWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWgorICAg
ICAgICA/Y3VycmVudFRocmVhZEBXVEZAQFlBSVhaPT9jdXJyZW50VGhyZWFkRGVwcmVjYXRlZEBX
VEZAQFlBSVhaCisgICAgICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJQFo9P2RldGFjaFRocmVh
ZERlcHJlY2F0ZWRAV1RGQEBZQVhJQFoKKyAgICAgICAgP3dhaXRGb3JUaHJlYWRDb21wbGV0aW9u
QFdURkBAWUFISVBBUEFYQFo9P3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRGVwcmVjYXRlZEBXVEZA
QFlBSElQQVBBWEBaCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30147</attachid>
            <date>2009-05-08 16:27:15 -0700</date>
            <delta_ts>2009-05-13 17:22:16 -0700</delta_ts>
            <desc>Another attempt. Fixed Safari 4 beta on OSX issue.</desc>
            <filename>threading_saf4.txt</filename>
            <type>text/plain</type>
            <size>54612</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiNjJiMTkyLi5hYjA5ZjYxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEg
QEAKKzIwMDktMDUtMDggIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdiBhbmQgQWRhbSBSb2Jlbi4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzNDgKKyAg
ICAgICAgQ2hhbmdlIFdURjo6VGhyZWFkSWRlbnRpZmllciB0byBiZSBhbiBhY3R1YWwgKGJ1dCB3
cmFwcGVkKSB0aHJlYWQgaWQsIHJlbW92ZSBUaHJlYWRNYXAuCisKKyAgICAgICAgKiB3dGYvVGhy
ZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6OlRocmVhZElkZW50aWZp
ZXIpOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjppc1ZhbGlkKToKKyAgICAgICAg
KFdURjo6VGhyZWFkSWRlbnRpZmllcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OlRocmVh
ZElkZW50aWZpZXI6OnBsYXRmb3JtSWQpOgorICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGlzIG5v
dyBhIGNsYXNzLCBjb250YWluaW5nIGEgUGxhdGZvcm1UaHJlYWRJZGVudGlmaWVyIGFuZAorICAg
ICAgICBtZXRob2RzIHRoYXQgYXJlIHVzZWQgYWNyb3NzIHRoZSBjb2RlIG9uIHRocmVhZCBpZHM6
IGNvbnN0cnVjdGlvbiwgY29tcGFyaXNvbnMsCisgICAgICAgIGNoZWNrIGZvciAndmFsaWQnIHN0
YXRlIGV0Yy4gJzAnIGlzIHVzZWQgYXMgaW52YWxpZCBpZCwgd2hpY2ggaGFwcGVucyB0byBqdXN0
IHdvcmsKKyAgICAgICAgd2l0aCBhbGwgcGxhdGZvcm0tc3BlY2lmaWMgdGhyZWFkIGlkIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICBBbGwgdGhlIGZvbGxvd2luZyBmaWxlcyByZXBlYXRlZGx5
IHJlZmxlY3QgdGhlIG5ldyBUaHJlYWRJZGVudGlmaWVyIGZvciBlYWNoIHBsYXRmb3JtLgorICAg
ICAgICBXZSByZW1vdmUgVGhyZWFkTWFwIGFuZCB0aHJlYWRNYXBNdXRleCBmcm9tIGFsbCBvZiB0
aGVtLCByZW1vdmUgdGhlIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIHBvcHVsYXRlZC9zZWFyY2hl
ZC9jbGVhcmVkIHRoZSBtYXAgYW5kIGFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBjb21wYXJpc29uIG9w
ZXJhdG9ycworICAgICAgICBmb3IgVGhyZWFkSWRlbnRpZmllci4KKworICAgICAgICBUaGVyZSBh
cmUgc3BlY2lmaWMgdGVtcG9yYXJ5IHdvcmthcm91bmRzIGZvciBTYWZhcmkgNCBiZXRhIG9uIE9T
WCBhbmQgV2luMzIgc2luY2UgdGhlCisgICAgICAgIHB1YmxpYyBidWlsZCB1c2VzIFdURiB0aHJl
YWRpbmcgZnVuY3Rpb25zIHdpdGggb2xkIHR5cGUgb2YgVGhyZWFkaW5nSWRlbnRpZmllci4KKyAg
ICAgICAgVGhlIG5leHQgdGltZSBTYWZhcmkgNCBpcyByZWJ1aWx0LCBpdCB3aWxsICdhdXRvbWF0
aWNhbGx5JyBwaWNrIHVwIHRoZSBuZXcgdHlwZSBhbmQgbmV3CisgICAgICAgIGZ1bmN0aW9ucyBz
byB0aGUgZGVwcmVjYXRlZCBvbmVzIGNhbiBiZSByZW1vdmVkLgorCisgICAgICAgICogd3RmL2d0
ay9UaHJlYWRpbmdHdGsuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpjcmVhdGVU
aHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKToK
KyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
Tm9uZS5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKworICAgICAgICAq
IHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZp
ZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6
OmNyZWF0ZVRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOgorICAgICAgICAoV1RGOjpjdXJy
ZW50VGhyZWFkKToKKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIDQgYmV0YSBvbiBNYWMuCisgICAgICAgIFNhZmFy
aSA0IGlzIGxpbmtlZCBhZ2FpbnN0IG9sZCBkZWZpbml0aW9uIG9mIFRocmVhZElkZW50aWZpZXIg
c28gaXQgdHJlYXRzIGl0IGFzIHVpbnQzMl90LgorICAgICAgICBTbyBJIG5lZWQgdG8gcHJvdmlk
ZSB0aGlzICdvbGQnIHZhcmlhbnQgb2Ygd2FpdEZvclRocmVhZENvbXBsZXRpb24gdGhhdCB0YWtl
cyB1aW50MzJfdCBzbyBTYWZhcmkgY2FuCisgICAgICAgIGxvYWQgaXQgZnJvbSBKYXZhU2NyaXB0
Q29yZSBsaWJyYXJ5LiBUaGUgb3RoZXIgZnVuY3Rpb25zIGhhcHBlbiB0byBtYXRjaCB0aGVpciBw
cmV2aW91cyBkZWNvcmF0ZWQgbmFtZSwKKyAgICAgICAgYW5kIHB0aHJlYWRfdCBpcyBhIHBvaW50
ZXIgd2hpY2ggY2FuIGJlIHJvdW5kdHJpcHBlZCB0aHJvdWdoIGEgdWludDMyX3QuIFRoaXMgZnVu
Y3Rpb24gd2lsbCBiZSByZW1vdmVkCisgICAgICAgIGFzIHNvb24gYXMgU2FmYXJpIDQgd2lsbCBy
ZWxlYXNlIG5leHQgcHVibGljIGJ1aWxkLgorCisgICAgICAgICogd3RmL3F0L1RocmVhZGluZ1F0
LmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwp
OgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6
OmN1cnJlbnRUaHJlYWQpOgorCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZElkZW50aWZpZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpU
aHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZyk6CisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKTogQWxsIHRoZSBw
bGF0Zm9ybXMgKGV4Y2VwdCBXaW5kb3dzKSB1c2VkIGEgc2VxdWVudGlhbAorICAgICAgICBjb3Vu
dGVyIGFzIGEgdGhyZWFkIElEIGFuZCBtYXBwZWQgaXQgaW50byBwbGF0Zm9ybSBJRC4gV2luZG93
cyB3YXMgdXNpbmcgbmF0aXZlIHRocmVhZAorICAgICAgICBpZCBhbmQgbWFwcGVkIGl0IGludG8g
dGhyZWFkIGhhbmRsZS4gU2luY2Ugd2UgY2FuIGFsd2F5cyBvYnRhaW4gYSB0aHJlYWQgaGFuZGxl
CisgICAgICAgIGJ5IHRocmVhZCBpZCwgY3JlYXRlVGhyZWFkIG5vdyBjbG9zZXMgdGhlIGhhbmRs
ZS4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBvYnRhaW5zIGFub3Ro
ZXIgb25lIHVzaW5nIE9wZW5UaHJlYWQoaWQpIEFQSS4gSWYgY2FuIG5vdCBvYnRhaW4gYSBoYW5k
bGUsCisgICAgICAgIGl0IG1lYW5zIHRoZSB0aHJlYWQgYWxyZWFkeSBleGl0ZWQuCisgICAgICAg
IChXVEY6OmRldGFjaFRocmVhZCk6CisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpkZXRhY2hUaHJlYWREZXByZWNhdGVkKTogb2xkIGZ1bmN0aW9uLCByZW5hbWVk
IChmb3IgV2luIFNhZmFyaSA0IGJldGEgd2hpY2ggdXNlcyBpdCBmb3Igbm93KS4KKyAgICAgICAg
KFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb25EZXByZWNhdGVkKTogc2FtZS4KKyAgICAgICAg
KFdURjo6Y3VycmVudFRocmVhZERlcHJlY2F0ZWQpOiBzYW1lLgorICAgICAgICAoV1RGOjpjcmVh
dGVUaHJlYWREZXByZWNhdGVkKTogc2FtZS4KKworICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5n
VG9vbC5oOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHA6IFVzZSBERUZJTkVf
U1RBVElDX0xPQ0FMIGZvciBhIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIHZhcmlhYmxlLCB0byBh
dm9pZCBzdGF0aWMgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6
IGV4cG9ydCBsaXN0cyAtIHVwZGF0ZWQgdGhlIFdURiB0aHJlYWRpbmcgZnVuY3Rpb25zIGRlY29y
YXRlZCBuYW1lcworICAgICAgICBzaW5jZSB0aGV5IG5vdyB0YWtlIGEgZGlmZmVyZW50IHR5cGUg
YXMgYSBwYXJhbWV0ZXIuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZjogZGl0dG8gZm9yIFdpbmRvd3MsIHBsdXMgYWRkZWQg
ImRlcHJlY2F0ZWQiIGZ1bmN0aW9ucworICAgICAgICB0aGF0IHRha2Ugb2xkIHBhcmFtZXRlciB0
eXBlIC0gdHVybnMgb3V0IHB1YmxpYyBiZXRhIG9mIFNhZmFyaSA0IHVzZXMgdGhvc2UsIHNvIHRo
ZXkgbmVlZCB0byBiZSBrZXB0IGFsb25nIGZvciBhIHdoaWxlLgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZV9kZWJ1Zy5kZWY6IGRp
dHRvLgorCiAyMDA5LTA1LTA4ICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9v
LmNhPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCmluZGV4IDczZWFhY2EuLmU5Y2RmODggMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBfX1pOM1dURjExY3VycmVudFRpbWVFdgog
X19aTjNXVEYxMWZhc3RSZWFsbG9jRVB2bQogX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBf
RVMwXwogX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQRlB2UzBfRVMwX1BLYwotX19aTjNXVEYxMmRl
dGFjaFRocmVhZEVqCitfX1pOM1dURjEyZGV0YWNoVGhyZWFkRU5TXzE2VGhyZWFkSWRlbnRpZmll
ckUKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBf
X1pOM1dURjEzY3VycmVudFRocmVhZEV2CkBAIC0yOTksNyArMjk5LDcgQEAgX19aTjNXVEYyMVJl
ZkNvdW50ZWRMZWFrQ291bnRlcjlkZWNyZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFr
Q291bnRlcjlpbmNyZW1lbnRFdgogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlckMxRVBL
YwogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlckQxRXYKLV9fWk4zV1RGMjN3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbkVqUFB2CitfX1pOM1dURjIzd2FpdEZvclRocmVhZENvbXBsZXRpb25F
TlNfMTZUaHJlYWRJZGVudGlmaWVyRVBQdgogX19aTjNXVEYyN3JlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUV2CiBfX1pOM1dURjI4c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZEViCiBfX1pO
M1dURjM2bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4RXYKQEAgLTM2MSw2ICsz
NjEsOCBAQCBfX1pOSzNKU0M4SlNPYmplY3Q5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19a
TkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTksz
SlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGOENvbGxhdG9yN2NvbGxhdGVF
UEt0bVMyX20KK19fWk5LM1dURjE2VGhyZWFkSWRlbnRpZmllcmVxRVJLUzBfCitfX1pOSzNXVEYx
NlRocmVhZElkZW50aWZpZXJuZUVSS1MwXwogX19aVFZOM0pTQzEyU3RyaW5nT2JqZWN0RQogX19a
VFZOM0pTQzE0SlNHbG9iYWxPYmplY3RFCiBfX1pUVk4zSlNDMTVKU1dyYXBwZXJPYmplY3RFCkBA
IC0zNzAsMyArMzcyLDQgQEAgX19aVFZOM0pTQzhKU09iamVjdEUKIF9fWlRWTjNKU0M4SlNTdHJp
bmdFCiBfanNjb3JlX2Zhc3RtYWxsb2NfaW50cm9zcGVjdGlvbgogX2tKU0NsYXNzRGVmaW5pdGlv
bkVtcHR5CitfX1pOM1dURjIzd2FpdEZvclRocmVhZENvbXBsZXRpb25FalBQdgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmRlZiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKaW5kZXggOGIxOGRmZS4uMjE4OTE2MyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCkBAIC0zMiw2ICsz
Miw3IEBAIEVYUE9SVFMKICAgICA/PzJKU0dsb2JhbE9iamVjdEBKU0NAQFNBUEFYSVBBVkpTR2xv
YmFsRGF0YUAxQEBaCiAgICAgPz80VVN0cmluZ0BKU0NAQFFBRUFBVjAxQFBCREBaCiAgICAgPz84
SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgorICAgID8/OFRocmVhZElkZW50aWZpZXJAV1RGQEBR
QkVfTkFCVjAxQEBaCiAgICAgP1VURjhTdHJpbmdAVVN0cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdA
MkBfTkBaCiAgICAgP2FkZEBJZGVudGlmaWVyQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVVJlcEBV
U3RyaW5nQEpTQ0BAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJEQFoKICAgICA/YWRkQFByb3BlcnR5
TmFtZUFycmF5QEpTQ0BAUUFFWFBBVVJlcEBVU3RyaW5nQDJAQFoKQEAgLTc0LDkgKzc1LDggQEAg
RVhQT1JUUwogICAgID9jcmVhdGVMZWFrZWRASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NS
ZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFhaCiAgICAgP2NyZWF0ZVN0cnVjdHVyZUBK
U0J5dGVBcnJheUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJ1Y3R1cmVASlNDQEBAV1RGQEBW
SlNWYWx1ZUAyQEBaCiAgICAgP2NyZWF0ZVRhYmxlQEhhc2hUYWJsZUBKU0NAQEFCRVhQQVZKU0ds
b2JhbERhdGFAMkBAWgotICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBAWgot
ICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWgotICAgID9jdXJyZW50
VGhyZWFkQFdURkBAWUFJWFoKKyAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUE/QVZUaHJlYWRJZGVu
dGlmaWVyQDFAUDZBUEFYUEFYQFowUEJEQFoKKyAgICA/Y3VycmVudFRocmVhZEBXVEZAQFlBP0FW
VGhyZWFkSWRlbnRpZmllckAxQFhaCiAgICAgP2N1cnJlbnRUaW1lQFdURkBAWUFOWFoKICAgICA/
ZGVjcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRVhYWgogICAgID9kZWZhdWx0
VmFsdWVASlNPYmplY3RASlNDQEBVQkU/QVZKU1ZhbHVlQDJAUEFWRXhlY1N0YXRlQDJAVzRQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlQDJAQFoKQEAgLTk2LDcgKzk2LDcgQEAgRVhQT1JUUwogICAgID9k
ZXN0cm95QEhlYXBASlNDQEBRQUVYWFoKICAgICA/ZGVzdHJveUBSZXBAVVN0cmluZ0BKU0NAQFFB
RVhYWgogICAgID9kZXRhY2hARGVidWdnZXJASlNDQEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBA
WgotICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJQFoKKyAgICA/ZGV0YWNoVGhyZWFkQFdURkBA
WUFYVlRocmVhZElkZW50aWZpZXJAMUBAWgogICAgID9lcXVhbEBJZGVudGlmaWVyQEpTQ0BAU0Ff
TlBCVVJlcEBVU3RyaW5nQDJAUEJEQFoKICAgICA/ZXF1YWxASlNDQEBZQV9OUEJVUmVwQFVTdHJp
bmdAMUAwQFoKICAgICA/ZXZhbHVhdGVARGVidWdnZXJDYWxsRnJhbWVASlNDQEBRQkU/QVZKU1Zh
bHVlQDJAQUJWVVN0cmluZ0AyQEFBVjMyQEBaCkBAIC0yNTMsNyArMjUzLDcgQEAgRVhQT1JUUwog
ICAgID91bnByb3RlY3RASGVhcEBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCiAgICAgP3Vud3JhcHBl
ZE9iamVjdEBKU09iamVjdEBKU0NAQFVBRVBBVjEyQFhaCiAgICAgP3dhaXRAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWEFBVk11dGV4QDJAQFoKLSAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25A
V1RGQEBZQUhJUEFQQVhAWgorICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkBXVEZAQFlBSFZU
aHJlYWRJZGVudGlmaWVyQDFAUEFQQVhAWgogICAgIFdURkxvZwogICAgIFdURkxvZ1ZlcmJvc2UK
ICAgICBXVEZSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZhaWx1cmUKQEAgLTI2NCwzICsyNjQsNyBA
QCBFWFBPUlRTCiAgICAgP3N1YnN0ckBVU3RyaW5nQEpTQ0BAUUJFP0FWMTJASEhAWgogICAgID9z
ZXREdW1wc0dlbmVyYXRlZENvZGVAQnl0ZWNvZGVHZW5lcmF0b3JASlNDQEBTQVhfTkBaCiAgICAg
P3B1dERpcmVjdEZ1bmN0aW9uQEpTT2JqZWN0QEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQFBBVklu
dGVybmFsRnVuY3Rpb25AMkBJQFoKKyAgICA/Y3JlYXRlVGhyZWFkRGVwcmVjYXRlZEBXVEZAQFlB
SVA2QVBBWFBBWEBaMFBCREBaCisgICAgP2N1cnJlbnRUaHJlYWREZXByZWNhdGVkQFdURkBAWUFJ
WFoKKyAgICA/ZGV0YWNoVGhyZWFkRGVwcmVjYXRlZEBXVEZAQFlBWElAWgorICAgID93YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbkRlcHJlY2F0ZWRAV1RGQEBZQUhJUEFQQVhAWgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlX2RlYnVnLmRlZiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZV9kZWJ1Zy5kZWYKaW5kZXggNDJiNGY0Mi4u
ZTQ2ZDA2OSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlX2RlYnVnLmRlZgorKysgYi9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVf
ZGVidWcuZGVmCkBAIC0zMiw2ICszMiw3IEBAIEVYUE9SVFMKICAgICA/PzJKU0dsb2JhbE9iamVj
dEBKU0NAQFNBUEFYSVBBVkpTR2xvYmFsRGF0YUAxQEBaCiAgICAgPz80VVN0cmluZ0BKU0NAQFFB
RUFBVjAxQFBCREBaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgorICAgID8/OFRo
cmVhZElkZW50aWZpZXJAV1RGQEBRQkVfTkFCVjAxQEBaCiAgICAgP1VURjhTdHJpbmdAVVN0cmlu
Z0BKU0NAQFFCRT9BVkNTdHJpbmdAMkBfTkBaCiAgICAgP2FkZEBJZGVudGlmaWVyQEpTQ0BAU0E/
QVY/JFBhc3NSZWZQdHJAVVJlcEBVU3RyaW5nQEpTQ0BAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJE
QFoKICAgICA/YWRkQFByb3BlcnR5TmFtZUFycmF5QEpTQ0BAUUFFWFBBVVJlcEBVU3RyaW5nQDJA
QFoKQEAgLTc0LDkgKzc1LDggQEAgRVhQT1JUUwogICAgID9jcmVhdGVMZWFrZWRASlNHbG9iYWxE
YXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFhaCiAg
ICAgP2NyZWF0ZVN0cnVjdHVyZUBKU0J5dGVBcnJheUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZT
dHJ1Y3R1cmVASlNDQEBAV1RGQEBWSlNWYWx1ZUAyQEBaCiAgICAgP2NyZWF0ZVRhYmxlQEhhc2hU
YWJsZUBKU0NAQEFCRVhQQVZKU0dsb2JhbERhdGFAMkBAWgotICAgID9jcmVhdGVUaHJlYWRAV1RG
QEBZQUlQNkFQQVhQQVhAWjBAWgotICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhA
WjBQQkRAWgotICAgID9jdXJyZW50VGhyZWFkQFdURkBAWUFJWFoKKyAgICA/Y3JlYXRlVGhyZWFk
QFdURkBAWUE/QVZUaHJlYWRJZGVudGlmaWVyQDFAUDZBUEFYUEFYQFowUEJEQFoKKyAgICA/Y3Vy
cmVudFRocmVhZEBXVEZAQFlBP0FWVGhyZWFkSWRlbnRpZmllckAxQFhaCiAgICAgP2N1cnJlbnRU
aW1lQFdURkBAWUFOWFoKICAgICA/ZGVjcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZA
QFFBRVhYWgogICAgID9kZWZhdWx0VmFsdWVASlNPYmplY3RASlNDQEBVQkU/QVZKU1ZhbHVlQDJA
UEFWRXhlY1N0YXRlQDJAVzRQcmVmZXJyZWRQcmltaXRpdmVUeXBlQDJAQFoKQEAgLTk2LDcgKzk2
LDcgQEAgRVhQT1JUUwogICAgID9kZXN0cm95QEhlYXBASlNDQEBRQUVYWFoKICAgICA/ZGVzdHJv
eUBSZXBAVVN0cmluZ0BKU0NAQFFBRVhYWgogICAgID9kZXRhY2hARGVidWdnZXJASlNDQEBRQUVY
UEFWSlNHbG9iYWxPYmplY3RAMkBAWgotICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJQFoKKyAg
ICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYVlRocmVhZElkZW50aWZpZXJAMUBAWgogICAgID9lcXVh
bEBJZGVudGlmaWVyQEpTQ0BAU0FfTlBCVVJlcEBVU3RyaW5nQDJAUEJEQFoKICAgICA/ZXF1YWxA
SlNDQEBZQV9OUEJVUmVwQFVTdHJpbmdAMUAwQFoKICAgICA/ZXZhbHVhdGVARGVidWdnZXJDYWxs
RnJhbWVASlNDQEBRQkU/QVZKU1ZhbHVlQDJAQUJWVVN0cmluZ0AyQEFBVjMyQEBaCkBAIC0yNTMs
NyArMjUzLDcgQEAgRVhQT1JUUwogICAgID91bnByb3RlY3RASGVhcEBKU0NAQFFBRVhWSlNWYWx1
ZUAyQEBaCiAgICAgP3Vud3JhcHBlZE9iamVjdEBKU09iamVjdEBKU0NAQFVBRVBBVjEyQFhaCiAg
ICAgP3dhaXRAVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFWEFBVk11dGV4QDJAQFoKLSAgICA/d2Fp
dEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhJUEFQQVhAWgorICAgID93YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbkBXVEZAQFlBSFZUaHJlYWRJZGVudGlmaWVyQDFAUEFQQVhAWgogICAgIFdURkxv
ZwogICAgIFdURkxvZ1ZlcmJvc2UKICAgICBXVEZSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZhaWx1
cmUKQEAgLTI2NCwzICsyNjQsNyBAQCBFWFBPUlRTCiAgICAgP3N1YnN0ckBVU3RyaW5nQEpTQ0BA
UUJFP0FWMTJASEhAWgogICAgID9zZXREdW1wc0dlbmVyYXRlZENvZGVAQnl0ZWNvZGVHZW5lcmF0
b3JASlNDQEBTQVhfTkBaCiAgICAgP3B1dERpcmVjdEZ1bmN0aW9uQEpTT2JqZWN0QEpTQ0BAUUFF
WFBBVkV4ZWNTdGF0ZUAyQFBBVkludGVybmFsRnVuY3Rpb25AMkBJQFoKKyAgICA/Y3JlYXRlVGhy
ZWFkRGVwcmVjYXRlZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCisgICAgP2N1cnJlbnRUaHJl
YWREZXByZWNhdGVkQFdURkBAWUFJWFoKKyAgICA/ZGV0YWNoVGhyZWFkRGVwcmVjYXRlZEBXVEZA
QFlBWElAWgorICAgID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkRlcHJlY2F0ZWRAV1RGQEBZQUhJ
UEFQQVhAWgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZmFi
ODAxNi4uZDFkMzJlOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxp
bmdUb29sLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3Bw
CkBAIC0xMjEsNyArMTIxLDExIEBAIFNhbXBsaW5nVG9vbCogU2FtcGxpbmdUb29sOjpzX3NhbXBs
aW5nVG9vbCA9IDA7CiAKIGJvb2wgU2FtcGxpbmdUaHJlYWQ6OnNfcnVubmluZyA9IGZhbHNlOwog
dW5zaWduZWQgU2FtcGxpbmdUaHJlYWQ6OnNfaGVydHogPSAxMDAwMDsKLVRocmVhZElkZW50aWZp
ZXIgU2FtcGxpbmdUaHJlYWQ6OnNfc2FtcGxpbmdUaHJlYWQ7CisKK1RocmVhZElkZW50aWZpZXIm
IFNhbXBsaW5nVGhyZWFkOjpzYW1wbGluZ1RocmVhZCgpIHsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFRocmVhZElkZW50aWZpZXIsIHN0YXRpY1NhbXBsaW5nVGhyZWFkLCAoKSk7CisgICAgcmV0
dXJuIHN0YXRpY1NhbXBsaW5nVGhyZWFkOworfQogCiB2b2lkKiBTYW1wbGluZ1RocmVhZDo6dGhy
ZWFkU3RhcnRGdW5jKHZvaWQqKQogewpAQCAtMTQ2LDE0ICsxNTAsMTQgQEAgdm9pZCBTYW1wbGlu
Z1RocmVhZDo6c3RhcnQodW5zaWduZWQgaGVydHopCiAgICAgc19ydW5uaW5nID0gdHJ1ZTsKICAg
ICBzX2hlcnR6ID0gaGVydHo7CiAKLSAgICBzX3NhbXBsaW5nVGhyZWFkID0gY3JlYXRlVGhyZWFk
KHRocmVhZFN0YXJ0RnVuYywgMCwgIkphdmFTY3JpcHRDb3JlOjpTYW1wbGVyIik7CisgICAgc2Ft
cGxpbmdUaHJlYWQoKSA9IGNyZWF0ZVRocmVhZCh0aHJlYWRTdGFydEZ1bmMsIDAsICJKYXZhU2Ny
aXB0Q29yZTo6U2FtcGxlciIpOwogfQogCiB2b2lkIFNhbXBsaW5nVGhyZWFkOjpzdG9wKCkKIHsK
ICAgICBBU1NFUlQoc19ydW5uaW5nKTsKICAgICBzX3J1bm5pbmcgPSBmYWxzZTsKLSAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihzX3NhbXBsaW5nVGhyZWFkLCAwKTsKKyAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihzYW1wbGluZ1RocmVhZCgpLCAwKTsKIH0KIAogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaCBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NhbXBsaW5nVG9vbC5oCmluZGV4IDQyOGY4ZGMuLjBjNzAzYTUgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCkBAIC0xMjUsNyArMTI1LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIFNhbXBsaW5nIHRocmVhZCBzdGF0ZS4KICAgICAgICAgc3RhdGlj
IGJvb2wgc19ydW5uaW5nOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19oZXJ0ejsKLSAgICAg
ICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgc19zYW1wbGluZ1RocmVhZDsKKworICAgICAgICBz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciYgc2FtcGxpbmdUaHJlYWQoKTsKIAogICAgICAgICBzdGF0
aWMgdm9pZCBzdGFydCh1bnNpZ25lZCBoZXJ0ej0xMDAwMCk7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHN0b3AoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNv
dW50ZWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAppbmRl
eCA4MmYxYmExLi40MTY1OGZlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVm
Q291bnRlZC5oCkBAIC03NCw5ICs3NCw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBDcm9z
c1RocmVhZFJlZkNvdW50ZWQoVCogZGF0YSwgVGhyZWFkU2FmZVNoYXJlZEJhc2UqIHRocmVhZGVk
Q291bnRlcikKICAgICAgICAgICAgIDogbV90aHJlYWRTYWZlUmVmQ291bnRlcih0aHJlYWRlZENv
dW50ZXIpCiAgICAgICAgICAgICAsIG1fZGF0YShkYXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgICAgICwgbV90aHJlYWRJZCgwKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogCkBA
IC05OSw3ICs5Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAg
ICAgdm9pZCBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46OnJlZigpCiAgICAgewotICAgICAgICBB
U1NFUlQoIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCkpOworICAg
ICAgICBBU1NFUlQoIW1fdGhyZWFkSWQuaXNWYWxpZCgpIHx8IG1fdGhyZWFkSWQgPT0gY3VycmVu
dFRocmVhZCgpKTsKICAgICAgICAgbV9yZWZDb3VudGVyLnJlZigpOwogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgLy8gU3RvcmUgdGhlIHRocmVhZElkIGFzIHNvb24gYXMgdGhlIHJlZiBjb3VudCBn
ZXRzIHRvIDIuCkBAIC0xMDcsNyArMTA0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8v
IHRvIGFub3RoZXIgdGhyZWFkIHdoZXJlIHRvIHJlZiBjb3VudCBnZXQgaW5jcmVhc2VkLiAgVGhp
cwogICAgICAgICAvLyBpcyBhIGhldXJpc3RpYyBidXQgaXQgc2VlbXMgdG8gYWx3YXlzIHdvcmsg
YW5kIGhhcyBoZWxwZWQKICAgICAgICAgLy8gZmluZCBzb21lIGJ1Z3MuCi0gICAgICAgIGlmICgh
bV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQoKSA9PSAyKQorICAgICAgICBpZiAo
IW1fdGhyZWFkSWQuaXNWYWxpZCgpICYmIG1fcmVmQ291bnRlci5yZWZDb3VudCgpID09IDIpCiAg
ICAgICAgICAgICBtX3RocmVhZElkID0gY3VycmVudFRocmVhZCgpOwogI2VuZGlmCiAgICAgfQpA
QCAtMTE1LDcgKzExMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPGNsYXNzIFQ+
CiAgICAgdm9pZCBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46OmRlcmVmKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghbV90aHJlYWRJZCB8fCBtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7
CisgICAgICAgIEFTU0VSVCghbV90aHJlYWRJZC5pc1ZhbGlkKCkgfHwgbV90aHJlYWRJZCA9PSBj
dXJyZW50VGhyZWFkKCkpOwogICAgICAgICBpZiAobV9yZWZDb3VudGVyLmRlcmVmQmFzZSgpKSB7
CiAgICAgICAgICAgICB0aHJlYWRTYWZlRGVyZWYoKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlz
OwpAQCAtMTI0LDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgLy8gQ2xl
YXIgdGhlIHRocmVhZElkIHdoZW4gdGhlIHJlZiBnb2VzIHRvIDEgYmVjYXVzZSBpdAogICAgICAg
ICAgICAgLy8gaXMgc2FmZSB0byBiZSBwYXNzZWQgdG8gYW5vdGhlciB0aHJlYWQgYXQgdGhpcyBw
b2ludC4KICAgICAgICAgICAgIGlmIChtX3RocmVhZElkICYmIG1fcmVmQ291bnRlci5yZWZDb3Vu
dCgpID09IDEpCi0gICAgICAgICAgICAgICAgbV90aHJlYWRJZCA9IDA7CisgICAgICAgICAgICAg
ICAgbV90aHJlYWRJZC5pbnZhbGlkYXRlKCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaCBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmcuaAppbmRleCAwMmZhM2E0Li5mMDgyNTAxIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVh
ZGluZy5oCkBAIC04NSwxMiArODUsMTQgQEAKICNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogdHlw
ZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7CiB0eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0NvbmQ7
Cit0eXBlZGVmIHN0cnVjdCBfR1RocmVhZCBHVGhyZWFkOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFN
dXRleDsKK2NsYXNzIFFUaHJlYWQ7CiBjbGFzcyBRV2FpdENvbmRpdGlvbjsKIFFUX0VORF9OQU1F
U1BBQ0UKICNlbmRpZgpAQCAtMTA1LDM0ICsxMDcsMTggQEAgUVRfRU5EX05BTUVTUEFDRQogCiBu
YW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotdHlw
ZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7Ci0KLS8vIFJldHVy
bnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRo
ZSB0aHJlYWQuCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwg
dm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1z
cGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNy
ZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7Ci0KLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlv
bi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBi
ZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJl
YWQoKTsKLWJvb2wgaXNNYWluVGhyZWFkKCk7Ci1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
VGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50
aWZpZXIpOwotCiAjaWYgVVNFKFBUSFJFQURTKQogdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxh
dGZvcm1NdXRleDsKIHR5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxhdGZvcm1Db25kaXRpb247Cit0
eXBlZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9S
TShHVEspCiB0eXBlZGVmIEdPd25QdHI8R011dGV4PiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiBH
T3duUHRyPEdDb25kPiBQbGF0Zm9ybUNvbmRpdGlvbjsKK3R5cGVkZWYgR1RocmVhZCogUGxhdGZv
cm1UaHJlYWRJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFUX1BSRVBF
TkRfTkFNRVNQQUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7CiB0eXBlZGVmIFFUX1BSRVBFTkRf
TkFNRVNQQUNFKFFXYWl0Q29uZGl0aW9uKSogUGxhdGZvcm1Db25kaXRpb247Cit0eXBlZGVmIFFU
X1BSRVBFTkRfTkFNRVNQQUNFKFFUaHJlYWQpKiBQbGF0Zm9ybVRocmVhZElkZW50aWZpZXI7CiAj
ZWxpZiBQTEFURk9STShXSU5fT1MpCiBzdHJ1Y3QgUGxhdGZvcm1NdXRleCB7CiAgICAgQ1JJVElD
QUxfU0VDVElPTiBtX2ludGVybmFsTXV0ZXg7CkBAIC0xNDksMTEgKzEzNSw2MSBAQCBzdHJ1Y3Qg
UGxhdGZvcm1Db25kaXRpb24gewogICAgIGJvb2wgdGltZWRXYWl0KFBsYXRmb3JtTXV0ZXgmLCBE
V09SRCBkdXJhdGlvbk1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzaWduYWwoYm9vbCB1bmJsb2Nr
QWxsKTsKIH07Cit0eXBlZGVmIHVuc2lnbmVkIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllcjsKICNl
bHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
Q29uZGl0aW9uOwogI2VuZGlmCiAgICAgCisvLyBQbGF0Zm9ybS1pbmRlcGVuZGVudCB3cmFwcGVy
IGZvciB0aHJlYWQgaWQuIEFzc2lnbmFibGUgYW5kIGNvcHlhYmxlLgorLy8gVGhlIG9ubHkgd2F5
IHRvIG9idGFpbiBhIHZhbGlkIFRocmVhZElkZW50aWZpZXIgaXMgZnJvbSBjcmVhdGVUaHJlYWQo
Li4uKSBvciBjdXJyZW50VGhyZWFkKCkgZnVuY3Rpb25zLgorLy8gVGhyZWFkSWRlbnRpZmllciBy
ZW1haW5zIHZhbGlkIGZvciBhcyBsb25nIGFzIGl0cyB0aHJlYWQgaXMgYWxpdmUgYW5kIGlzIG5v
dCBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGVkCisvLyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzLiBT
aW5jZSBwbGF0Zm9ybS1kZXBlbmRlbnQgdGhyZWFkIGlkcyBjYW4gYmUgcmVjeWNsZWQsIHN0YWxl
IFRocmVhZElkZW50aWZpZXIKKy8vIG1heSByZWZlcmVuY2UgYSBjb21wbGV0ZWx5IHVucmVsYXRl
ZCB0aHJlYWQgYWZ0ZXIgaXRzIG9yaWdpbmFsIHRocmVhZCB0ZXJtaW5hdGVzLgorY2xhc3MgVGhy
ZWFkSWRlbnRpZmllciB7CitwdWJsaWM6CisgICAgVGhyZWFkSWRlbnRpZmllcigpCisgICAgICAg
IDogbV9wbGF0Zm9ybUlkKDApCisgICAgeworICAgICAgICBBU1NFUlQoIWlzVmFsaWQoKSk7Cisg
ICAgfQorCisgICAgZXhwbGljaXQgVGhyZWFkSWRlbnRpZmllcihQbGF0Zm9ybVRocmVhZElkZW50
aWZpZXIgcGxhdGZvcm1JZCkKKyAgICAgICAgOiBtX3BsYXRmb3JtSWQocGxhdGZvcm1JZCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0ICB7IHJldHVybiBtX3BsYXRmb3JtSWQ7IH0KKyAgICB2b2lkIGludmFsaWRhdGUo
KSB7IG1fcGxhdGZvcm1JZCA9IDA7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJl
YWRJZGVudGlmaWVyJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRocmVhZElk
ZW50aWZpZXImKSBjb25zdDsKKworICAgIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBwbGF0Zm9y
bUlkKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUlkOyAgfQorCitwcml2YXRlOgorICAgIFBs
YXRmb3JtVGhyZWFkSWRlbnRpZmllciBtX3BsYXRmb3JtSWQ7Cit9OworCit0eXBlZGVmIHZvaWQq
ICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKKworLy8gUmV0dXJucyBpbnZhbGlk
IGlkZW50aWZpZXIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKy8vIFRoZSB0aHJlYWQgbmFt
ZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBp
biB0byB0aGUgdGhyZWFkLgorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVu
Y3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKworLy8gSW50ZXJuYWwgcGxh
dGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgorVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpOworCisvLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlh
bGl6YXRpb24uCisvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1l
IG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCit2b2lkIHNldFRocmVhZE5hbWVJ
bnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKworVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50VGhyZWFkKCk7Citib29sIGlzTWFpblRocmVhZCgpOworaW50IHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7Cit2b2lkIGRldGFjaFRocmVhZChUaHJl
YWRJZGVudGlmaWVyKTsKKwogY2xhc3MgTXV0ZXggOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAg
ICAgTXV0ZXgoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdOb25l
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdOb25lLmNwcAppbmRleCBlNzEzMTAy
Li4wOWFiNmFkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nTm9uZS5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ05vbmUuY3BwCkBAIC0zMiw2ICsz
Miw5IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitib29sIFRocmVhZElkZW50aWZpZXI6Om9wZXJh
dG9yPT0oY29uc3QgVGhyZWFkSWRlbnRpZmllciYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK2Jv
b2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJikg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkgeyB9
CiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2
b2lkKiwgY29uc3QgY2hhciopIHsgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoKTsgfQogdm9pZCBz
ZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciopIHsgfQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggMWJiMzAzMy4uODJjNTA3ZSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC00OCw3ICs0OCwxNSBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIHB0aHJlYWRf
dD4gVGhyZWFkTWFwOworYm9vbCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IFRo
cmVhZElkZW50aWZpZXImIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1
YWwobV9wbGF0Zm9ybUlkLCBhbm90aGVyLm1fcGxhdGZvcm1JZCk7Cit9CisKK2Jvb2wgVGhyZWFk
SWRlbnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBj
b25zdAoreworICAgIHJldHVybiAhcHRocmVhZF9lcXVhbChtX3BsYXRmb3JtSWQsIGFub3RoZXIu
bV9wbGF0Zm9ybUlkKTsKK30KIAogc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWNNdXRleDsKIApAQCAtNTYsMTcgKzY0LDEwIEBAIHN0YXRpYyBNdXRleCogYXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhy
ZWFkSWRlbnRpZmllcjsgLy8gVGhlIHRocmVhZCB0aGF0IHdhcyB0aGUgZmlyc3QgdG8gY2FsbCBp
bml0aWFsaXplVGhyZWFkaW5nKCksIHdoaWNoIG11c3QgYmUgdGhlIG1haW4gdGhyZWFkLgogI2Vu
ZGlmCiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmcoKQogewogICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljTXV0ZXgpIHsKICAgICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgg
PSBuZXcgTXV0ZXg7Ci0gICAgICAgIHRocmVhZE1hcE11dGV4KCk7CiAgICAgICAgIGluaXRpYWxp
emVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCBQTEFU
Rk9STShDSFJPTUlVTSkKICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhy
ZWFkKCk7CkBAIC04Niw1NCArODcsNiBAQCB2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4KCkKICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleC0+dW5s
b2NrKCk7CiB9CiAKLXN0YXRpYyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChUaHJlYWRNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0K
LXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3Qg
cHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKLQotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgp
LmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAg
ICAgICBpZiAocHRocmVhZF9lcXVhbChpLT5zZWNvbmQsIHB0aHJlYWRIYW5kbGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGktPmZpcnN0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0
aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShw
dGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhy
ZWFkSGFuZGxlKHB0aHJlYWRIYW5kbGUpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKLQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJD
b3VudCA9IDE7Ci0KLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBwdGhyZWFk
SGFuZGxlKTsKLSAgICAKLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7Ci19Ci0KLXN0YXRp
YyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBp
ZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyUHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFw
KCkuY29udGFpbnMoaWQpKTsKLSAgICAKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQot
CiAjaWYgUExBVEZPUk0oQU5EUk9JRCkKIC8vIE9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtLCB0aHJl
YWRzIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTSBiZWZvcmUgdGhleSBydW4uCiBzdHJ1
Y3QgVGhyZWFkRGF0YSB7CkBAIC0xNjQsOSArMTE3LDkgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBj
b24KIAogICAgIGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRX
aXRoUmVnaXN0cmF0aW9uLCBzdGF0aWNfY2FzdDx2b2lkKj4odGhyZWFkRGF0YSkpKSB7CiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVw
IHdpdGggZGF0YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGVzdGFi
bGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAgcmV0dXJu
IFRocmVhZElkZW50aWZpZXIodGhyZWFkSGFuZGxlKTsKIH0KICNlbHNlCiBUaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQq
IGRhdGEsIGNvbnN0IGNoYXIqKQpAQCAtMTc0LDEwICsxMjcsMTAgQEAgVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBk
YXRhLCBjb24KICAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwogICAgIGlmIChwdGhyZWFkX2Ny
ZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBlbnRyeVBvaW50LCBkYXRhKSkgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRh
dGEgJXAiLCBlbnRyeVBvaW50LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBUaHJlYWRJZGVudGlmaWVyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGVzdGFibGlzaElk
ZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAgcmV0dXJuIFRocmVh
ZElkZW50aWZpZXIodGhyZWFkSGFuZGxlKTsKIH0KICNlbmRpZgogCkBAIC0xOTIsMzUgKzE0NSwy
OSBAQCB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQog
CiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwg
dm9pZCoqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJl
YWRJRC5pc1ZhbGlkKCkpOwogICAgIAotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlID0gcHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIHB0aHJlYWRfdCBwdGhyZWFk
SGFuZGxlID0gdGhyZWFkSUQucGxhdGZvcm1JZCgpOwogIAogICAgIGludCBqb2luUmVzdWx0ID0g
cHRocmVhZF9qb2luKHB0aHJlYWRIYW5kbGUsIHJlc3VsdCk7CiAgICAgaWYgKGpvaW5SZXN1bHQg
PT0gRURFQURMSykKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBm
b3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAg
ICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXAgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2Nr
ZWQgdHJ5aW5nIHRvIHF1aXQiLCBwdGhyZWFkSGFuZGxlKTsKICAgICAgICAgCi0gICAgY2xlYXJQ
dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CiAgICAgcmV0dXJuIGpvaW5SZXN1
bHQ7CiB9CiAKIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCiB7
Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlQodGhyZWFkSUQuaXNWYWxpZCgpKTsK
ICAgICAKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVu
dGlmaWVyKHRocmVhZElEKTsKKyAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHRocmVhZElE
LnBsYXRmb3JtSWQoKTsKICAgICAKICAgICBwdGhyZWFkX2RldGFjaChwdGhyZWFkSGFuZGxlKTsK
LSAgICAKLSAgICBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKIH0K
IAogVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKIHsKLSAgICBwdGhyZWFkX3QgY3Vy
cmVudFRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIGlmIChUaHJlYWRJZGVudGlmaWVyIGlk
ID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjdXJyZW50VGhyZWFkKSkKLSAgICAgICAgcmV0
dXJuIGlkOwotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShj
dXJyZW50VGhyZWFkKTsKKyAgICByZXR1cm4gVGhyZWFkSWRlbnRpZmllcihwdGhyZWFkX3NlbGYo
KSk7CiB9CiAKIGJvb2wgaXNNYWluVGhyZWFkKCkKQEAgLTMxNCw3ICsyNjEsMjIgQEAgdm9pZCBU
aHJlYWRDb25kaXRpb246OmJyb2FkY2FzdCgpCiAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfY29u
ZF9icm9hZGNhc3QoJm1fY29uZGl0aW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJl
c3VsdCk7CiB9Ci0gICAgCisKKy8vIERlcmVjYXRlZCBmdW5jdGlvbi4gU2FmYXJpIDQgYmV0YSwg
dW50aWwgcmVjb21waWxlZCBuZXh0IHRpbWUsIHVzZXMgVGhyZWFkSWRlbnRpZmllciBhcyB1aW50
MzJfdC4KKy8vIHB0aHJlYWRfdCBpcyBhIHBvaW50ZXIuIFNvIHRoZXkgZ2V0IGEgcG9pbnRlciBj
YXN0ZWQgaW50byB1aW50MzJfdCBmcm9tIEN1cnJlbnRUaHJlYWQoKQorLy8gYW5kIHRoZW4gcGFz
cyBpdCBoZXJlLiBXZSBjYXN0IGl0IGJhY2sgdG8gcG9pbnRlci4gVGhpcyBpcyBhbiB1Z2x5IGhh
Y2sgd2hpY2ggaXMgdmVyeSB0ZW1wb3JhcnkKKy8vIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBu
ZXh0IHB1YmxpYyBidWlsZCBvZiBTYWZhcmkgNCBpcyByZWxlYXNlZC4KK2ludCB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbih1aW50MzJfdCB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKK3sKKyAgICBw
dGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF90Pih0aHJl
YWRJRCk7CisgCisgICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhhbmRs
ZSwgcmVzdWx0KTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQorICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXAgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5
aW5nIHRvIHF1aXQiLCBwdGhyZWFkSGFuZGxlKTsKKyAgICAgICAgCisgICAgcmV0dXJuIGpvaW5S
ZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURT
KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9KYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA0MTViYTUzLi5kODRmODJlIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtOTgsNiArOTgsMTYgQEAKIAogbmFt
ZXNwYWNlIFdURiB7CiAKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBU
aHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3Jt
SWQgPT0gYW5vdGhlci5tX3BsYXRmb3JtSWQ7Cit9CisKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6
b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBtX3BsYXRmb3JtSWQgIT0gYW5vdGhlci5tX3BsYXRmb3JtSWQ7Cit9CisKIC8vIE1T
X1ZDX0VYQ0VQVElPTiwgVEhSRUFETkFNRV9JTkZPLCBhbmQgc2V0VGhyZWFkTmFtZUludGVybmFs
IGFsbCBjb21lIGZyb20gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS94
Y2Iyejhocy5hc3B4Pi4KIHN0YXRpYyBjb25zdCBEV09SRCBNU19WQ19FWENFUFRJT04gPSAweDQw
NkQxMzg4OwogCkBAIC0xMzksMTcgKzE0OSwxMCBAQCB2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpY011dGV4KCkKIAogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVh
ZElkZW50aWZpZXI7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0
YXRpYyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KIHZvaWQgaW5pdGlhbGl6
ZVRocmVhZGluZygpCiB7CiAgICAgaWYgKCFhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRl
eDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51
bWJlckdlbmVyYXRvcigpOwogICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgICAg
ICBtYWluVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKQEAgLTE1NywzMiArMTYw
LDYgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICB9CiB9CiAKLXN0YXRpYyBIYXNo
TWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBIYXNoTWFwPERX
T1JELCBIQU5ETEU+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgdm9pZCBzdG9y
ZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcihEV09SRCB0aHJlYWRJRCwgSEFORExFIHRocmVhZEhh
bmRsZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
QVNTRVJUKCF0aHJlYWRNYXAoKS5jb250YWlucyh0aHJlYWRJRCkpOwotICAgIHRocmVhZE1hcCgp
LmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFuZGxlKTsKLX0KLQotc3RhdGljIEhBTkRMRSB0aHJlYWRI
YW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQo
aWQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhy
ZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFk
TWFwKCkucmVtb3ZlKGlkKTsKLX0KLQogc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7
CiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2
b2lkKiBkYXRhKSA6IGZ1bmN0aW9uKGZ1bmN0aW9uKSwgZGF0YShkYXRhKSB7fQogCkBAIC0yMDgs
NTEgKzE4NSw0NCBAQCBzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9p
bnQodm9pZCogcGFyYW0pCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRo
cmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpCiB7CiAgICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7Ci0gICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCA9IDA7CiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uID0gbmV3IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbihlbnRyeVBvaW50LCBkYXRhKTsK
ICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdp
bnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24sIDAsICZ0aHJl
YWRJZGVudGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEg
JXA6ICVsZCIsIGVudHJ5UG9pbnQsIGRhdGEsIGVycm5vKTsKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKCk7CiAgICAgfQorICAgIC8vIENsb3NlcyBo
YW5kbGUgb25seSwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdC4gVGhlIG5ldyB0aHJlYWQgcnVucyB1
bnRpbCBpdCBleGl0cy4KKyAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwogCi0gICAgdGhy
ZWFkSUQgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPih0aHJlYWRJZGVudGlmaWVyKTsK
LSAgICBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVyLCB0aHJl
YWRIYW5kbGUpOwotCi0gICAgcmV0dXJuIHRocmVhZElEOworICAgIHJldHVybiBUaHJlYWRJZGVu
dGlmaWVyKHRocmVhZElkZW50aWZpZXIpOwogfQogCiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRp
b24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAgICBBU1NF
UlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIAotICAg
IEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElE
KTsKKyAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gdGhyZWFkSUQucGxhdGZvcm1JZCgp
OworICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSBPcGVuVGhyZWFkKFNZTkNIUk9OSVpFLCBGQUxT
RSwgdGhyZWFkSWRlbnRpZmllcik7CisgICAgLy8gSWYgdGhyZWFkIGFscmVhZHkgZXhpdGVkLCBy
ZXR1cm4gaW1tZWRpYXRlbHkuCiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAgIExPR19F
UlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZl
IHRocmVhZCB3aGVuIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICByZXR1cm4g
V0FJVF9PQkpFQ1RfMDsKICAKICAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9i
amVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKICAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlU
X0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3Vu
ZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXAgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQg
dHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRIYW5kbGUpOwogCiAgICAgQ2xvc2VIYW5kbGUodGhyZWFk
SGFuZGxlKTsKLSAgICBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwog
CiAgICAgcmV0dXJuIGpvaW5SZXN1bHQ7CiB9CiAKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQpCit2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKQog
ewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9
IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5k
bGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRI
YW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKIH0KIAogVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50VGhyZWFkKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4o
R2V0Q3VycmVudFRocmVhZElkKCkpOworICAgIHJldHVybiBUaHJlYWRJZGVudGlmaWVyKEdldEN1
cnJlbnRUaHJlYWRJZCgpKTsKIH0KIAogYm9vbCBpc01haW5UaHJlYWQoKQpAQCAtNDcwLDQgKzQ0
MCw0NCBAQCB2b2lkIFRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KCkKICAgICBtX2NvbmRpdGlv
bi5zaWduYWwodHJ1ZSk7IC8vIFVuYmxvY2sgYWxsIHRocmVhZHMuCiB9CiAKKy8vIERlcHJlY2F0
ZWQgZnVuY3Rpb25zLiBUaGUgY3VycmVudCBidWlsZCBvZiBTYWZhcmkgNCBiZXRhIGlzIGxpbmtl
ZCB3aXRoIHRoZW0gc28gd2UgbmVlZCB0byBwcm92aWRlCisvLyB0aGUgaW1wbGVtZW50YXRpb24g
dGFraW5nIFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllciBpbnN0ZWFkIG9mIFRocmVhZElkZW50aWZp
ZXIuIFRoZXNlIGFyZSBub3QgZGVjbGFyZWQKKy8vIGluIC5oIGZpbGUgc28gdGhlIG5leHQgdGlt
ZSBTYWZhcmkgaXMgYnVpbHQgaXQgd2lsbCAnYXV0b21hdGljYWxseScgc3dpdGNoIHRvIG5ldyBm
dW5jdGlvbnMuCisvLyBUaGVuIGRlcHJlY2F0ZWQgb25lcyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRo
aXMgZmlsZSBhbmQgZnJvbSBKYXZhU2NyaXB0Q29yZS5kZWYgYW5kIFdlYktpdC5kZWYgZmlsZXMu
CisvLyBJbiBXZWJLaXQuZGVmIGZpbGUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgJ3JlbmFtZWQnIHNv
IHRoZWlyIG5hbWUgZG9lcyBub3QgaGF2ZSAnRGVwcmVjYXRlZCcgcGFydCAtIHRoaXMKKy8vIGlz
IHRvIGF2b2lkIGhhdmluZyAyIGZ1bmN0aW9ucyB3aXRoIG9ubHkgZGlmZmVyZW50IHR5cGUgb2Yg
cmV0dXJuIHZhbHVlLgordm9pZCBkZXRhY2hUaHJlYWREZXByZWNhdGVkKFBsYXRmb3JtVGhyZWFk
SWRlbnRpZmllcikKK3sKK30KKworaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uRGVwcmVjYXRl
ZChQbGF0Zm9ybVRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQpCit7Cisg
ICAgQVNTRVJUKHRocmVhZElEKTsKKworICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odGhyZWFkSUQpOworICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUg
PSBPcGVuVGhyZWFkKFNZTkNIUk9OSVpFLCBGQUxTRSwgdGhyZWFkSWRlbnRpZmllcik7CisgICAg
Ly8gSWYgdGhyZWFkIGFscmVhZHkgZXhpdGVkLCByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgaWYg
KCF0aHJlYWRIYW5kbGUpCisgICAgICAgIHJldHVybiBXQUlUX09CSkVDVF8wOworCisgICAgRFdP
UkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklU
RSk7CisgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCisgICAgICAgIExPR19FUlJP
UigiVGhyZWFkSWRlbnRpZmllciAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcg
dG8gcXVpdCIsIHRocmVhZEhhbmRsZSk7CisKKyAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUp
OworCisgICAgcmV0dXJuIGpvaW5SZXN1bHQ7Cit9CisKK1BsYXRmb3JtVGhyZWFkSWRlbnRpZmll
ciBjdXJyZW50VGhyZWFkRGVwcmVjYXRlZCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBs
YXRmb3JtVGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOworfQorCitQbGF0
Zm9ybVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkRGVwcmVjYXRlZChUaHJlYWRGdW5jdGlv
biBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoZW50cnlQb2ludCwgZGF0YSwgbmFt
ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtVGhyZWFkSWRlbnRpZmllcj4odGhy
ZWFkSUQucGxhdGZvcm1JZCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHAKaW5kZXggYjRmNGRlMS4uNmZmOWY5YiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9UaHJlYWRpbmdHdGsuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9ndGsvVGhyZWFkaW5nR3RrLmNwcApAQCAtNDIsMTYgKzQyLDIwIEBACiAK
IG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0
YXRpY011dGV4OwotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmll
cjsKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBUaHJlYWRJZGVudGlm
aWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtSWQgPT0gYW5vdGhl
ci5tX3BsYXRmb3JtSWQ7Cit9CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQorYm9v
bCBUaHJlYWRJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNvbnN0IFRocmVhZElkZW50aWZpZXImIGFu
b3RoZXIpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE11dGV4IG11dGV4OwotICAgIHJldHVybiBtdXRl
eDsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUlkICE9IGFub3RoZXIubV9wbGF0Zm9ybUlkOwogfQog
CitzdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4OworCitzdGF0
aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKKwogdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCgpKQpAQCAtNjAs
NyArNjQsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogCiAgICAgaWYgKCFhdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkgewogICAgICAgICBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKICAg
ICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwogICAgICAgICBtYWluVGhy
ZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgaW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKQEAgLTc4LDY0ICs4MSwxNSBAQCB2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpY011dGV4KCkKICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleC0+
dW5sb2NrKCk7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIEdUaHJlYWQq
PiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBH
VGhyZWFkKj4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlm
aWVyIGlkZW50aWZpZXJCeUd0aHJlYWRIYW5kbGUoR1RocmVhZComIHRocmVhZCkKLXsKLSAgICBN
dXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICBIYXNoTWFwPFRocmVh
ZElkZW50aWZpZXIsIEdUaHJlYWQqPjo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7
Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAo
aS0+c2Vjb25kID09IHRocmVhZCkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNo
SWRlbnRpZmllckZvclRocmVhZChHVGhyZWFkKiYgdGhyZWFkKQotewotICAgIEFTU0VSVCghaWRl
bnRpZmllckJ5R3RocmVhZEhhbmRsZSh0aHJlYWQpKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50
aWZpZXJDb3VudCA9IDE7Ci0KLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCB0
aHJlYWQpOwotCi0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOwotfQotCi1zdGF0aWMgR1Ro
cmVhZCogdGhyZWFkRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIHJldHVybiB0aHJlYWRN
YXAoKS5nZXQoaWQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEZvcklkZW50aWZpZXIo
VGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFw
TXV0ZXgoKSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLQotICAg
IHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3Qg
Y2hhciopCiB7CiAgICAgR1RocmVhZCogdGhyZWFkOwogICAgIGlmICghKHRocmVhZCA9IGdfdGhy
ZWFkX2NyZWF0ZShlbnRyeVBvaW50LCBkYXRhLCBUUlVFLCAwKSkpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEg
JXAiLCBlbnRyeVBvaW50LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBUaHJlYWRJZGVudGlmaWVyKCk7CiAgICAgfQogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCA9IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQodGhyZWFkKTsKLSAgICByZXR1cm4g
dGhyZWFkSUQ7CisgICAgcmV0dXJuIFRocmVhZElkZW50aWZpZXIodGhyZWFkKTsKIH0KIAogdm9p
ZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwoY29uc3QgY2hhciopCkBAIC0xNDQsMTUgKzk4LDE0IEBA
IHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKQogCiBpbnQgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkK
IHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIEFTU0VSVCh0aHJlYWRJRC5pc1ZhbGlkKCkp
OwogCi0gICAgR1RocmVhZCogdGhyZWFkID0gdGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7
CisgICAgR1RocmVhZCogdGhyZWFkID0gdGhyZWFkSUQucGxhdGZvcm1JZCgpOwogCiAgICAgdm9p
ZCogam9pblJlc3VsdCA9IGdfdGhyZWFkX2pvaW4odGhyZWFkKTsKICAgICBpZiAocmVzdWx0KQog
ICAgICAgICAqcmVzdWx0ID0gam9pblJlc3VsdDsKIAotICAgIGNsZWFyVGhyZWFkRm9ySWRlbnRp
Zmllcih0aHJlYWRJRCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2MiwxMCArMTE1LDcgQEAg
dm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcikKIAogVGhyZWFkSWRlbnRpZmllciBj
dXJyZW50VGhyZWFkKCkKIHsKLSAgICBHVGhyZWFkKiBjdXJyZW50VGhyZWFkID0gZ190aHJlYWRf
c2VsZigpOwotICAgIGlmIChUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmllckJ5R3RocmVh
ZEhhbmRsZShjdXJyZW50VGhyZWFkKSkKLSAgICAgICAgcmV0dXJuIGlkOwotICAgIHJldHVybiBl
c3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKGN1cnJlbnRUaHJlYWQpOworICAgIHJldHVybiBU
aHJlYWRJZGVudGlmaWVyKGdfdGhyZWFkX3NlbGYoKSk7CiB9CiAKIGJvb2wgaXNNYWluVGhyZWFk
KCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAgYi9K
YXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCmluZGV4IDFmZGQyYmIuLjlkMWJh
ZDkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNwcApAQCAtNDEsNiArNDEsMTYg
QEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK2Jvb2wgVGhyZWFkSWRlbnRpZmllcjo6b3BlcmF0b3I9
PShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBt
X3BsYXRmb3JtSWQgPT0gYW5vdGhlci5tX3BsYXRmb3JtSWQ7Cit9CisKK2Jvb2wgVGhyZWFkSWRl
bnRpZmllcjo6b3BlcmF0b3IhPShjb25zdCBUaHJlYWRJZGVudGlmaWVyJiBhbm90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBtX3BsYXRmb3JtSWQgIT0gYW5vdGhlci5tX3BsYXRmb3JtSWQ7Cit9
CisKIGNsYXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUVRocmVhZCB7CiBwdWJsaWM6CiAgICAg
VGhyZWFkUHJpdmF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKTsKQEAg
LTY5LDcwICs3OSwxMiBAQCBzdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
Y011dGV4OwogCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsK
IAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IG11
dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQotc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRlbnRp
ZmllciwgUVRocmVhZCo+JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBIYXNoTWFwPFRocmVh
ZElkZW50aWZpZXIsIFFUaHJlYWQqPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGlj
IFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShRVGhyZWFkKiYgdGhy
ZWFkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAg
IEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgUVRocmVhZCo+OjppdGVyYXRvciBpID0gdGhyZWFk
TWFwKCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpLT5zZWNvbmQgPT0gdGhyZWFkKQotICAgICAgICAgICAgcmV0dXJuIGkt
PmZpcnN0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRp
ZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKFFUaHJlYWQqJiB0aHJlYWQpCi17Ci0g
ICAgQVNTRVJUKCFpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKHRocmVhZCkpOwotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgc3RhdGljIFRocmVhZElk
ZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLQotICAgIHRocmVhZE1hcCgpLmFkZChpZGVu
dGlmaWVyQ291bnQsIHRocmVhZCk7Ci0KLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVy
IGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAg
IEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotCi0gICAgdGhyZWFkTWFwKCkucmVt
b3ZlKGlkKTsKLX0KLQotc3RhdGljIFFUaHJlYWQqIHRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFk
SWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQogdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCkKIHsKICAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011
dGV4KSB7CiAgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11
dGV4OwotICAgICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgICAgICBpbml0aWFsaXplUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgICAgIFFUaHJlYWQqIG1haW5UaHJlYWQgPSBRQ29yZUFw
cGxpY2F0aW9uOjppbnN0YW5jZSgpLT50aHJlYWQoKTsKLSAgICAgICAgbWFpblRocmVhZElkZW50
aWZpZXIgPSBpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKG1haW5UaHJlYWQpOwotICAgICAgICBp
ZiAoIW1haW5UaHJlYWRJZGVudGlmaWVyKQotICAgICAgICAgICAgbWFpblRocmVhZElkZW50aWZp
ZXIgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKG1haW5UaHJlYWQpOworICAgICAgICBt
YWluVGhyZWFkSWRlbnRpZmllciA9IFRocmVhZElkZW50aWZpZXIoUUNvcmVBcHBsaWNhdGlvbjo6
aW5zdGFuY2UoKS0+dGhyZWFkKCkpOwogICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZCgpOwog
ICAgIH0KIH0KQEAgLTE1MywxMyArMTA1LDEzIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAg
ICAgVGhyZWFkUHJpdmF0ZSogdGhyZWFkID0gbmV3IFRocmVhZFByaXZhdGUoZW50cnlQb2ludCwg
ZGF0YSk7CiAgICAgaWYgKCF0aHJlYWQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y3JlYXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50
LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBUaHJlYWRJZGVudGlm
aWVyKCk7CiAgICAgfQogICAgIHRocmVhZC0+c3RhcnQoKTsKIAogICAgIFFUaHJlYWQqIHRocmVh
ZFJlZiA9IHN0YXRpY19jYXN0PFFUaHJlYWQqPih0aHJlYWQpOwogCi0gICAgcmV0dXJuIGVzdGFi
bGlzaElkZW50aWZpZXJGb3JUaHJlYWQodGhyZWFkUmVmKTsKKyAgICByZXR1cm4gVGhyZWFkSWRl
bnRpZmllcih0aHJlYWRSZWYpOwogfQogCiB2b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25z
dCBjaGFyKikKQEAgLTE2OCwxMyArMTIwLDEyIEBAIHZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFs
KGNvbnN0IGNoYXIqKQogCiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwor
ICAgIEFTU0VSVCh0aHJlYWRJRC5Jc1ZhbGlkKCkpOwogCi0gICAgUVRocmVhZCogdGhyZWFkID0g
dGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgUVRocmVhZCogdGhyZWFkID0gdGhy
ZWFkSUQucGxhdGZvcm1JZCgpOwogCiAgICAgYm9vbCByZXMgPSB0aHJlYWQtPndhaXQoKTsKIAot
ICAgIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CiAgICAgaWYgKHJlc3VsdCkK
ICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PFRocmVhZFByaXZhdGUqPih0aHJlYWQpLT5n
ZXRSZXR1cm5WYWx1ZSgpOwogCkBAIC0xODcsMTAgKzEzOCw3IEBAIHZvaWQgZGV0YWNoVGhyZWFk
KFRocmVhZElkZW50aWZpZXIpCiAKIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCiB7
Ci0gICAgUVRocmVhZCogY3VycmVudFRocmVhZCA9IFFUaHJlYWQ6OmN1cnJlbnRUaHJlYWQoKTsK
LSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUo
Y3VycmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAgICByZXR1cm4gZXN0YWJsaXNo
SWRlbnRpZmllckZvclRocmVhZChjdXJyZW50VGhyZWFkKTsKKyAgICByZXR1cm4gVGhyZWFkSWRl
bnRpZmllcihRVGhyZWFkOjpjdXJyZW50VGhyZWFkKCkpOwogfQogCiBib29sIGlzTWFpblRocmVh
ZCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MzEyNzcuLjY4YjkwMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMDUtMDggIERtaXRyeSBU
aXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdiBhbmQgQWRhbSBSb2Jlbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzNDgKKyAgICAgICAgQ2hhbmdlIFdURjo6VGhyZWFk
SWRlbnRpZmllciB0byBiZSBhbiBhY3R1YWwgKGJ1dCB3cmFwcGVkKSB0aHJlYWQgaWQsIHJlbW92
ZSBUaHJlYWRNYXAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgY2hhbmdlIGlzIGluIFdURi4KKyAg
ICAgICAgVW5sZXNzIG5vdGVkLCBhbGwgdGhlIGZvbGxvd2luZyBmaWxlcyBjaGFuZ2VkIHRvIHVz
ZSB0aGUgbmV3IFRocmVhZElkZW50aWZpZXI6OmlzVmFsaWQoKQorICAgICAgICBtZXRob2QgaW5z
dGVhZCBvZiBqdXN0IGRvaW5nICdpZihtX3RocmVhZElEKScga2luZCBvZiBjaGVja3MsIHNpbmNl
IFRocmVhZElkZW50aWZpZXIKKyAgICAgICAgaXMgbm93IGEgY2xhc3MgcmF0aGVyIHRoZW4gYW4g
aW50ZWdlci4KKyAgICAgICAgQWxzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBpbml0aWFsaXplIHRo
cmVhZElEIGluIGNvbnN0cnVjdG9ycyB0byAwIG5vdy4KKworICAgICAgICAqIGRvbS9YTUxUb2tl
bml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpYnhtbExvYWRlclRocmVhZCk6
IHVzZSBERUZJTkVfU1RBVElDX0xPQ0FMIGFuZCBhY2Nlc3NvciBmdW5jdGlvbiBmb3Igc3RhdGlj
IHRocmVhZCBpZCwKKyAgICAgICAgc2luY2Ugbm93IFRocmVhZElkZW50aWZpZXIgbmVlZHMgY29u
c3RydWN0aW9uIGFuZCB3ZSBhdm9pZCBoYXZpbmcgZ2xvYmFsIGluaXRpYWxpemVycy4KKyAgICAg
ICAgKFdlYkNvcmU6Om1hdGNoRnVuYyk6IHVzZSB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlbkZ1bmMpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVN0cmluZ1BhcnNlcik6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWVtb3J5
UGFyc2VyKTogZGl0dG8uCisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAgICogcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpTUUxpdGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6
Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6IHJlbW92ZSBtX3RocmVhZElEIGZyb20gZGVidWcg
b3V0cHV0LgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToKKwogMjAwOS0wNS0wOCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwIGIvV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKaW5kZXggYWE5ZjY1Yy4uODcxODcxMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKQEAgLTMyNiwxMyArMzI2LDE3IEBAIHBy
aXZhdGU6CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgaW50
IGdsb2JhbERlc2NyaXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9h
ZGVyVGhyZWFkID0gMDsKKworc3RhdGljIFRocmVhZElkZW50aWZpZXImIGxpYnhtbExvYWRlclRo
cmVhZCgpIHsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZElkZW50aWZpZXIsIHN0YXRp
Y0xpYnhtbExvYWRlclRocmVhZCwgKCkpOworICAgIHJldHVybiBzdGF0aWNMaWJ4bWxMb2FkZXJU
aHJlYWQ7Cit9CiAKIHN0YXRpYyBpbnQgbWF0Y2hGdW5jKGNvbnN0IGNoYXIqKQogewogICAgIC8v
IE9ubHkgbWF0Y2ggbG9hZHMgaW5pdGlhdGVkIGR1ZSB0byB1c2VzIG9mIGxpYnhtbDIgZnJvbSB3
aXRoaW4gWE1MVG9rZW5pemVyIHRvIGF2b2lkCiAgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBjbGll
bnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCi0gICAgcmV0dXJuIFhNTFRva2VuaXplclNjb3Bl
OjpjdXJyZW50RG9jTG9hZGVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJl
YWQ7CisgICAgcmV0dXJuIFhNTFRva2VuaXplclNjb3BlOjpjdXJyZW50RG9jTG9hZGVyICYmIGN1
cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQoKTsKIH0KIAogY2xhc3MgT2Zmc2V0
QnVmZmVyIHsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRBbGxvd0V4dGVy
bmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCiBzdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hh
ciogdXJpKQogewogICAgIEFTU0VSVChYTUxUb2tlbml6ZXJTY29wZTo6Y3VycmVudERvY0xvYWRl
cik7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQpOwor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKCkpOwogCiAg
ICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOwogCkBAIC00NjIsNyArNDY2LDcgQEAgc3RhdGljIHht
bFBhcnNlckN0eHRQdHIgY3JlYXRlU3RyaW5nUGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFuZGxl
cnMsIHZvaWQqIHVzZXIKICAgICAgICAgeG1sSW5pdFBhcnNlcigpOwogICAgICAgICB4bWxSZWdp
c3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9zZUZ1
bmMpOwogICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5G
dW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7Ci0gICAgICAgIGxpYnhtbExvYWRlclRocmVhZCA9
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgbGlieG1sTG9hZGVyVGhyZWFkKCkgPSBjdXJyZW50
VGhyZWFkKCk7CiAgICAgICAgIGRpZEluaXQgPSB0cnVlOwogICAgIH0KIApAQCAtNDg0LDcgKzQ4
OCw3IEBAIHN0YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZU1lbW9yeVBhcnNlcih4bWxTQVhI
YW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyCiAgICAgICAgIHhtbEluaXRQYXJzZXIoKTsK
ICAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCBy
ZWFkRnVuYywgY2xvc2VGdW5jKTsKICAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3Mo
bWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4
bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGxpYnhtbExvYWRlclRo
cmVhZCgpID0gY3VycmVudFRocmVhZCgpOwogICAgICAgICBkaWRJbml0ID0gdHJ1ZTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1dl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCBjOTc5N2YyLi42MjRkZjdl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBAIC0xMzUsMTEgKzEzNSwxMCBA
QCBib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKICAg
ICAvLyBjb21wbGV0ZXMgYW5kIG1fc3luY1RocmVhZFJ1bm5pbmcgaXMgcHJvcGVybHkgc2V0CiAg
ICAgbV9zeW5jTG9jay5sb2NrKCk7CiAgICAgbV9zeW5jVGhyZWFkID0gY3JlYXRlVGhyZWFkKElj
b25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTog
SWNvbkRhdGFiYXNlIik7Ci0gICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVhZDsK
KyAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhyZWFkLmlzVmFsaWQoKTsKICAgICBt
X3N5bmNMb2NrLnVubG9jaygpOwotICAgIGlmICghbV9zeW5jVGhyZWFkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9zeW5jVGhyZWFkUnVu
bmluZzsKIH0KIAogdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCA3MDJjZjAyLi44ZGMxYWEyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCkBAIC00Nyw3ICs0Nyw2IEBAIFNRTGl0ZURhdGFi
YXNlOjpTUUxpdGVEYXRhYmFzZSgpCiAgICAgOiBtX2RiKDApCiAgICAgLCBtX3BhZ2VTaXplKC0x
KQogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBtX29wZW5pbmdU
aHJlYWQoMCkKIHsKIH0KIApAQCAtODksNyArODgsNyBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpj
bG9zZSgpCiAgICAgICAgIG1fZGIgPSAwOwogICAgIH0KIAotICAgIG1fb3BlbmluZ1RocmVhZCA9
IDA7CisgICAgbV9vcGVuaW5nVGhyZWFkLmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBTUUxpdGVE
YXRhYmFzZTo6c2V0RnVsbHN5bmMoYm9vbCBmc3luYykgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFk
LmNwcAppbmRleCBmYWIwMmEyLi5iYjc5OTlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5j
cHAKQEAgLTM5LDcgKzM5LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRGF0YWJhc2VUaHJl
YWQ6OkRhdGFiYXNlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKIHsKICAgICBtX3NlbGZS
ZWYgPSB0aGlzOwogfQpAQCAtNTMsMTIgKzUyLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0
YXJ0KCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAK
LSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWRJRC5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7
CiAKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWRJRC5pc1ZhbGlk
KCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlvbigpCkBAIC05
Nyw3ICs5Niw3IEBAIHZvaWQqIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAgICAg
ICAgIHBvb2wuY3ljbGUoKTsKICAgICB9CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRv
IGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAs
IHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291
bnQoKSk7CisgICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkIGFuZCBj
bGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVp
IHJlZihzKSIsIHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQg
c28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBl
bHNlCiAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGhyZWFkLmNwcAppbmRleCBkYTUwYzkwLi4yOTRhMTU3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGhyZWFkLmNwcApAQCAtMzgsNyArMzgsNiBAQCBQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZVRocmVhZD4gTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKQogfQogCiBMb2NhbFN0b3Jh
Z2VUaHJlYWQ6OkxvY2FsU3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCiB7CiAg
ICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTQ3LDEyICs0NiwxMCBAQCBib29sIExvY2FsU3Rv
cmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVh
dGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoIW1fdGhyZWFkSUQuaXNWYWxpZCgpKQorICAgICAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkU3RhcnQsIHRo
aXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWRTdGFydCwgdGhpcywg
IldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOwotCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAg
cmV0dXJuIG1fdGhyZWFkSUQuaXNWYWxpZCgpOwogfQogCiB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJl
YWQ6OmxvY2FsU3RvcmFnZVRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTc3LDcgKzc0LDcg
QEAgdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWQoKQogCiAgICAg
Ly8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG9mIGFu
eSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCiAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwot
ICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkSUQuaW52YWxpZGF0ZSgpOwogCiAgICAg
Ly8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4gZGVsZXRpb24K
ICAgICBtX3NlbGZSZWYgPSAwOwpAQCAtODcsMjUgKzg0LDI1IEBAIHZvaWQqIExvY2FsU3RvcmFn
ZVRocmVhZDo6bG9jYWxTdG9yYWdlVGhyZWFkKCkKIAogdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6
OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQogewotICAg
IEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1f
cXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRC5pc1ZhbGlkKCkpOwogICAgIG1fcXVldWUuYXBw
ZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChzdG9yYWdlKSk7CiB9CiAKIHZvaWQg
TG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+
IHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQp
OworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7
CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhzdG9yYWdl
KSk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxl
ZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3Ro
cmVhZElELmlzVmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6
Y3JlYXRlSW1wb3J0KGFyZWEpKTsKIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVk
dWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7Ci0gICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5r
aWxsZWQoKSAmJiBtX3RocmVhZElELmlzVmFsaWQoKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9j
YWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhhcmVhKSk7CiB9CiAKQEAgLTExNSw4ICsxMTIsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKICAgICAKICAgICAvLyBJZGVh
bGx5IHdlJ2QgbmV2ZXIgYmUga2lsbGluZyBhIHRocmVhZCB0aGF0IHdhc24ndCBsaXZlLCBzbyBB
U1NFUlQgaXQuCiAgICAgLy8gQnV0IGlmIHdlIGRvIGluIGEgcmVsZWFzZSBidWlsZCwgbWFrZSBz
dXJlIHRvIG5vdCB3YWl0IG9uIGEgY29uZGl0aW9uIHRoYXQgd2lsbCBuZXZlciBnZXQgc2lnbmFs
bGVkCi0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIGlm
ICghbV90aHJlYWRJRCkKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJ
RC5pc1ZhbGlkKCkpOworICAgIGlmICghbV90aHJlYWRJRC5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rlcm1pbmF0ZUxvY2spOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcAppbmRleCBkMTAyNmIxLi45YjM0NzQ1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcApAQCAtNjgsOCArNjgsNyBAQCBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29y
a2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbgogfQog
CiBXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVj
dFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSkKLSAgICA6IG1fdGhyZWFkSUQoMCkKLSAgICAsIG1f
d29ya2VyT2JqZWN0UHJveHkod29ya2VyT2JqZWN0UHJveHkpCisgICAgOiBtX3dvcmtlck9iamVj
dFByb3h5KHdvcmtlck9iamVjdFByb3h5KQogICAgICwgbV9zdGFydHVwRGF0YShXb3JrZXJUaHJl
YWRTdGFydHVwRGF0YTo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VDb2RlKSkK
IHsKIH0KQEAgLTgzLDEyICs4MiwxMCBAQCBib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQogICAg
IC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFk
SUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBNdXRleExvY2tl
ciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3RocmVhZElELmlzVmFsaWQoKSkKKyAgICAg
ICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0
YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRl
VGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBX
b3JrZXIiKTsKLQotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZElE
LmlzVmFsaWQoKTsKIH0KIAogdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2
b2lkKiB0aHJlYWQpCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93
aW4vQ2hhbmdlTG9nCmluZGV4IGVlMGYwYmEuLjZmM2Q3MmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMDktMDUtMDggIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdiBhbmQgQWRhbSBSb2Jlbi4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzNDgKKyAgICAg
ICAgQ2hhbmdlIFdURjo6VGhyZWFkSWRlbnRpZmllciB0byBiZSBhbiBhY3R1YWwgKGJ1dCB3cmFw
cGVkKSB0aHJlYWQgaWQsIHJlbW92ZSBUaHJlYWRNYXAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUg
Y2hhbmdlIGlzIGluIFdURiBhbmQgV2ViQ29yZS4KKworICAgICAgICAqIFdlYktpdC52Y3Byb2ov
V2ViS2l0LmRlZjogcmVwbGFjZWQgZGVjb3JhdGVkIG5hbWVzIG9mIFdURiB0aHJlYWRpbmcgZnVu
Y3Rpb25zIHdpdGggbmV3IG9uZXMuCisgICAgICAgIEFsc28sIGFsaWFzZWQgdGhlIG9sZCBpbXBs
ZW1lbnRhdGlvbnMgc28gdGhlIHB1YmxpYyBTYWZhcmkgNCBiZXRhIGNhbiBsb2FkIHRoZSBvbGQg
V1RGIGZ1bmN0aW9ucworICAgICAgICB3aGljaCBpdCB1c2VzLiBOZXh0IHRpbWUgU2FmYXJpIDQg
YnVpbGRzLCBpdCB3aWxsIHBpY2sgdXAgbmV3IGZ1bmN0aW9ucyBhbmQgdGhlIGRlcHJlY2F0ZWQg
b25lcworICAgICAgICBjYW4gYmUgcmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dl
YktpdF9kZWJ1Zy5kZWY6IHNhbWUuCisKIDIwMDktMDUtMDcgIE1hcmsgUm93ZSAgPG1yb3dlQGFw
cGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAt
LWdpdCBhL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQuZGVmIGIvV2ViS2l0L3dpbi9X
ZWJLaXQudmNwcm9qL1dlYktpdC5kZWYKaW5kZXggOGQwOTFlYy4uNGEzOTA3YiAxMDA2NDQKLS0t
IGEvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC5kZWYKKysrIGIvV2ViS2l0L3dpbi9X
ZWJLaXQudmNwcm9qL1dlYktpdC5kZWYKQEAgLTExNCwxMSArMTE0LDEyIEBAIEVYUE9SVFMKICAg
ICAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgICAgID8/MU11dGV4QFdU
RkBAUUFFQFhaCiAgICAgICAgID8/MVRocmVhZENvbmRpdGlvbkBXVEZAQFFBRUBYWgorICAgICAg
ICA/PzhUaHJlYWRJZGVudGlmaWVyQFdURkBAUUJFX05BQlYwMUBAWgogICAgICAgICA/YnJvYWRj
YXN0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRVhYWgogICAgICAgICA/Y2FsbE9uTWFpblRocmVh
ZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgotICAgICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZB
UEFYUEFYQFowUEJEQFoKLSAgICAgICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQUlYWgotICAgICAg
ICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCisgICAgICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZ
QT9BVlRocmVhZElkZW50aWZpZXJAMUBQNkFQQVhQQVhAWjBQQkRAWgorICAgICAgICA/Y3VycmVu
dFRocmVhZEBXVEZAQFlBP0FWVGhyZWFkSWRlbnRpZmllckAxQFhaCisgICAgICAgID9kZXRhY2hU
aHJlYWRAV1RGQEBZQVhWVGhyZWFkSWRlbnRpZmllckAxQEBaCiAgICAgICAgID9pbml0aWFsaXpl
TWFpblRocmVhZEBXVEZAQFlBWFhaCiAgICAgICAgID9pbml0aWFsaXplVGhyZWFkaW5nQFdURkBA
WUFYWFoKICAgICAgICAgP2lzTWFpblRocmVhZEBXVEZAQFlBX05YWgpAQCAtMTMyLDUgKzEzMyw4
IEBAIEVYUE9SVFMKICAgICAgICAgP3VubG9ja0BNdXRleEBXVEZAQFFBRVhYWgogICAgICAgICA/
dW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgogICAgICAg
ICA/d2FpdEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYQUFWTXV0ZXhAMkBAWgotICAgICAgICA/
d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhJUEFQQVhAWgotICAgICAgICA/Y3JlYXRl
VGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowQFoKKyAgICAgICAgP3dhaXRGb3JUaHJlYWRDb21w
bGV0aW9uQFdURkBAWUFIVlRocmVhZElkZW50aWZpZXJAMUBQQVBBWEBaCisgICAgICAgID9jcmVh
dGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWj0/Y3JlYXRlVGhyZWFkRGVwcmVjYXRl
ZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCisgICAgICAgID9jdXJyZW50VGhyZWFkQFdURkBA
WUFJWFo9P2N1cnJlbnRUaHJlYWREZXByZWNhdGVkQFdURkBAWUFJWFoKKyAgICAgICAgP2RldGFj
aFRocmVhZEBXVEZAQFlBWElAWj0/ZGV0YWNoVGhyZWFkRGVwcmVjYXRlZEBXVEZAQFlBWElAWgor
ICAgICAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhJUEFQQVhAWj0/d2FpdEZv
clRocmVhZENvbXBsZXRpb25EZXByZWNhdGVkQFdURkBAWUFISVBBUEFYQFoKZGlmZiAtLWdpdCBh
L1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRfZGVidWcuZGVmIGIvV2ViS2l0L3dpbi9X
ZWJLaXQudmNwcm9qL1dlYktpdF9kZWJ1Zy5kZWYKaW5kZXggYzE1OTU3YS4uZGY0YTI4MCAxMDA2
NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdF9kZWJ1Zy5kZWYKKysrIGIv
V2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdF9kZWJ1Zy5kZWYKQEAgLTExNCwxMSArMTE0
LDEyIEBAIEVYUE9SVFMKICAgICAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAg
ICAgICAgID8/MU11dGV4QFdURkBAUUFFQFhaCiAgICAgICAgID8/MVRocmVhZENvbmRpdGlvbkBX
VEZAQFFBRUBYWgorICAgICAgICA/PzhUaHJlYWRJZGVudGlmaWVyQFdURkBAUUJFX05BQlYwMUBA
WgogICAgICAgICA/YnJvYWRjYXN0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRVhYWgogICAgICAg
ICA/Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgotICAgICAgICA/Y3JlYXRl
VGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowUEJEQFoKLSAgICAgICAgP2N1cnJlbnRUaHJlYWRA
V1RGQEBZQUlYWgotICAgICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCisgICAgICAgID9j
cmVhdGVUaHJlYWRAV1RGQEBZQT9BVlRocmVhZElkZW50aWZpZXJAMUBQNkFQQVhQQVhAWjBQQkRA
WgorICAgICAgICA/Y3VycmVudFRocmVhZEBXVEZAQFlBP0FWVGhyZWFkSWRlbnRpZmllckAxQFha
CisgICAgICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhWVGhyZWFkSWRlbnRpZmllckAxQEBaCiAg
ICAgICAgID9pbml0aWFsaXplTWFpblRocmVhZEBXVEZAQFlBWFhaCiAgICAgICAgID9pbml0aWFs
aXplVGhyZWFkaW5nQFdURkBAWUFYWFoKICAgICAgICAgP2lzTWFpblRocmVhZEBXVEZAQFlBX05Y
WgpAQCAtMTMyLDUgKzEzMyw4IEBAIEVYUE9SVFMKICAgICAgICAgP3VubG9ja0BNdXRleEBXVEZA
QFFBRVhYWgogICAgICAgICA/dW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhA
V1RGQEBZQVhYWgogICAgICAgICA/d2FpdEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYQUFWTXV0
ZXhAMkBAWgotICAgICAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhJUEFQQVhA
WgotICAgICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowQFoKKyAgICAgICAg
P3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uQFdURkBAWUFIVlRocmVhZElkZW50aWZpZXJAMUBQQVBB
WEBaCisgICAgICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWj0/Y3Jl
YXRlVGhyZWFkRGVwcmVjYXRlZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCisgICAgICAgID9j
dXJyZW50VGhyZWFkQFdURkBAWUFJWFo9P2N1cnJlbnRUaHJlYWREZXByZWNhdGVkQFdURkBAWUFJ
WFoKKyAgICAgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWj0/ZGV0YWNoVGhyZWFkRGVwcmVj
YXRlZEBXVEZAQFlBWElAWgorICAgICAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZ
QUhJUEFQQVhAWj0/d2FpdEZvclRocmVhZENvbXBsZXRpb25EZXByZWNhdGVkQFdURkBAWUFISVBB
UEFYQFoK
</data>

          </attachment>
      

    </bug>

</bugzilla>