<?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>189880</bug_id>
          
          <creation_ts>2018-09-22 00:21:01 -0700</creation_ts>
          <short_desc>[WTF] Make isMainThread more reliable</short_desc>
          <delta_ts>2018-11-05 15:12:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=191285</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1462304</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-22 00:21:01 -0700</bug_when>
    <thetext>[WTF] Make isMainThread more reliable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462305</commentid>
    <comment_count>1</comment_count>
      <attachid>350501</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-22 00:28:14 -0700</bug_when>
    <thetext>Created attachment 350501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462321</commentid>
    <comment_count>2</comment_count>
      <attachid>350503</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-22 01:28:07 -0700</bug_when>
    <thetext>Created attachment 350503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462390</commentid>
    <comment_count>3</comment_count>
      <attachid>350503</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-09-22 11:18:59 -0700</bug_when>
    <thetext>Comment on attachment 350503
Patch

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

Informal r+.

I&apos;m just wondering about the additional symbol check. Its probably good to have those sorts of checks to be absolutely certain. I&apos;m not sure how standardized that header is.

&gt; Source/WTF/wtf/generic/MainThreadGeneric.cpp:33
&gt; +#include &lt;pthread.h&gt;

Is this really generic anymore if it relies on pthread.h being present?

&gt; Source/cmake/OptionsCommon.cmake:137
&gt; +WEBKIT_CHECK_HAVE_SYMBOL(HAVE_PTHREAD_MAIN_NP pthread_main_np pthread_np.h)

There&apos;s already a check for whether pthread_np.h is present. Is there a case where pthread_main_np would not be present in that scenario?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462397</commentid>
    <comment_count>4</comment_count>
      <attachid>350503</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-22 11:58:56 -0700</bug_when>
    <thetext>Comment on attachment 350503
Patch

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

&gt;&gt; Source/WTF/wtf/generic/MainThreadGeneric.cpp:33
&gt;&gt; +#include &lt;pthread.h&gt;
&gt; 
&gt; Is this really generic anymore if it relies on pthread.h being present?

We only support two types of thresding models: Windows and Pthreads. Since MainThreadWin.cpp is used for Windows, we can say this requires pthread.h.

&gt;&gt; Source/cmake/OptionsCommon.cmake:137
&gt;&gt; +WEBKIT_CHECK_HAVE_SYMBOL(HAVE_PTHREAD_MAIN_NP pthread_main_np pthread_np.h)
&gt; 
&gt; There&apos;s already a check for whether pthread_np.h is present. Is there a case where pthread_main_np would not be present in that scenario?

This code checks pthread_main_np carefully since pthread_np just meams pthread NonPortable. It is not guaranteed that pthread_main_np is included in pthread_np.h when pthread_np.h exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462407</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-22 13:29:46 -0700</bug_when>
    <thetext>Thank you for doing this, Yusuke!

Unfortunately, it seems that WinCairo JSC tests still get stuck in Release mode, with all eight subprocesses sitting on this line:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/jsc.cpp#L172

The stack trace before this patch looked like:
&gt; [External Code]
&gt; [Inline Frame] WTF.dll!std::_Cnd_waitX(_Cnd_internal_imp_t *)
&gt; [Inline Frame] WTF.dll!std::condition_variable::wait(std::unique_lock&lt;std::mutex&gt; &amp;)
&gt; WTF.dll!WTF::WordLock::lockSlow()
&gt; [Inline Frame] WTF.dll!WTF::WordLock::lock()
&gt; [Inline Frame] WTF.dll!WTF::Locker&lt;WTF::WordLock&gt;::lock()
&gt; [Inline Frame] WTF.dll!WTF::Locker&lt;WTF::WordLock&gt;::{ctor}(WTF::WordLock &amp;)
&gt; [Inline Frame] WTF.dll!WTF::holdLock(WTF::WordLock &amp;)
&gt; WTF.dll!WTF::Thread::didExit()
&gt; WTF.dll!WTF::Thread::destructTLS(void * data)
&gt; [External Code]
&gt; jscLib.dll!`anonymous namespace&apos;::jscExit(int status)
&gt; jscLib.dll!main(int argc, char * * argv)
&gt; jscLib.dll!dllLauncherEntryPoint(int argc, const char * * argv)
&gt; jsc.exe!main(int argc, const char * * argv)
&gt; [External Code]

After this patch, it&apos;s just the last six lines (i.e. nothing WTF-related appearing).

I&apos;ll see whether Debug is different...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462482</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-22 22:39:05 -0700</bug_when>
    <thetext>Hmm, Debug mode completed successfully (for anyone curious: ~8.5 hours, 141 failures).

Will retry Release once more...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462483</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-22 22:54:25 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #6)
&gt; Hmm, Debug mode completed successfully (for anyone curious: ~8.5 hours, 141
&gt; failures).
&gt; 
&gt; Will retry Release once more...

My guess is that std::mutex implementation in Windowsis broken if it is used in TLS destructor. We can avoid this problem if we use spinlock here instead.

Anyway, this patch also touch TLS in TLS destructor. So in addition to this patch, spinlock patch would be requied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462504</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-23 03:36:20 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #5)
&gt; Thank you for doing this, Yusuke!
&gt; 
&gt; Unfortunately, it seems that WinCairo JSC tests still get stuck in Release
&gt; mode, with all eight subprocesses sitting on this line:
&gt; https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/jsc.
&gt; cpp#L172
&gt; 
&gt; The stack trace before this patch looked like:
&gt; &gt; [External Code]
&gt; &gt; [Inline Frame] WTF.dll!std::_Cnd_waitX(_Cnd_internal_imp_t *)
&gt; &gt; [Inline Frame] WTF.dll!std::condition_variable::wait(std::unique_lock&lt;std::mutex&gt; &amp;)
&gt; &gt; WTF.dll!WTF::WordLock::lockSlow()
&gt; &gt; [Inline Frame] WTF.dll!WTF::WordLock::lock()
&gt; &gt; [Inline Frame] WTF.dll!WTF::Locker&lt;WTF::WordLock&gt;::lock()
&gt; &gt; [Inline Frame] WTF.dll!WTF::Locker&lt;WTF::WordLock&gt;::{ctor}(WTF::WordLock &amp;)
&gt; &gt; [Inline Frame] WTF.dll!WTF::holdLock(WTF::WordLock &amp;)
&gt; &gt; WTF.dll!WTF::Thread::didExit()
&gt; &gt; WTF.dll!WTF::Thread::destructTLS(void * data)
&gt; &gt; [External Code]
&gt; &gt; jscLib.dll!`anonymous namespace&apos;::jscExit(int status)
&gt; &gt; jscLib.dll!main(int argc, char * * argv)
&gt; &gt; jscLib.dll!dllLauncherEntryPoint(int argc, const char * * argv)
&gt; &gt; jsc.exe!main(int argc, const char * * argv)
&gt; &gt; [External Code]
&gt; 
&gt; After this patch, it&apos;s just the last six lines (i.e. nothing WTF-related
&gt; appearing).
&gt; 
&gt; I&apos;ll see whether Debug is different...

And I want to know that whether this `isMainThread()` is working well.
Is this `holdLock()` called inside `if (shouldRemoveThreadFromThreadGroup())` clause?
Or just before `m_didExit = true;`? If the above problem is caused in the latter place, we can say that updated `isMainThread()` seems working as we expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462505</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-23 03:40:53 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; (In reply to Ross Kirsling from comment #6)
&gt; &gt; Hmm, Debug mode completed successfully (for anyone curious: ~8.5 hours, 141
&gt; &gt; failures).
&gt; &gt; 
&gt; &gt; Will retry Release once more...
&gt; 
&gt; My guess is that std::mutex implementation in Windowsis broken if it is used
&gt; in TLS destructor. We can avoid this problem if we use spinlock here instead.
&gt; 
&gt; Anyway, this patch also touch TLS in TLS destructor. So in addition to this
&gt; patch, spinlock patch would be requied.

Maybe, the sampling profiler or the other thread taking the mutex, and destroyed by the system. So waiting forever happens.
The way to avoid this is simple, we should move this holdLock code inside `if (shouldRemoveThreadFromThreadGroup())`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462506</commentid>
    <comment_count>10</comment_count>
      <attachid>350560</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-23 03:44:17 -0700</bug_when>
    <thetext>Created attachment 350560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462567</commentid>
    <comment_count>11</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-23 14:27:52 -0700</bug_when>
    <thetext>Oops, I had dropped the line numbers from that stack trace. This is the holdLock() call:
https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/Threading.cpp#L200
So then shouldRemoveThreadFromThreadGroup() definitely seems to be returning `true` for the main thread in a certain scenario (without your patch).

I confirmed that the first patch here doesn&apos;t work in Release mode, but I&apos;ll try the new one now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462601</commentid>
    <comment_count>12</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-23 20:31:39 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #11)
&gt; Oops, I had dropped the line numbers from that stack trace. This is the
&gt; holdLock() call:
&gt; https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/Threading.
&gt; cpp#L200
&gt; So then shouldRemoveThreadFromThreadGroup() definitely seems to be returning
&gt; `true` for the main thread in a certain scenario (without your patch).
&gt; 
&gt; I confirmed that the first patch here doesn&apos;t work in Release mode, but I&apos;ll
&gt; try the new one now. :)

Ugh, I can&apos;t believe it. It managed to start running every single test, but at the very end, two subprocesses are hanging in the usual location (jsc.cpp line 172) and so the runner can&apos;t exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462602</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-23 20:36:25 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #12)
&gt; (In reply to Ross Kirsling from comment #11)
&gt; &gt; Oops, I had dropped the line numbers from that stack trace. This is the
&gt; &gt; holdLock() call:
&gt; &gt; https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/Threading.
&gt; &gt; cpp#L200
&gt; &gt; So then shouldRemoveThreadFromThreadGroup() definitely seems to be returning
&gt; &gt; `true` for the main thread in a certain scenario (without your patch).
&gt; &gt; 
&gt; &gt; I confirmed that the first patch here doesn&apos;t work in Release mode, but I&apos;ll
&gt; &gt; try the new one now. :)
&gt; 
&gt; Ugh, I can&apos;t believe it. It managed to start running every single test, but
&gt; at the very end, two subprocesses are hanging in the usual location (jsc.cpp
&gt; line 172) and so the runner can&apos;t exit.

Where is the hanging location? And does that mean isMainThread is not working well even with this patch?
Also, I would like to know,

1. what is the value stored in `mainThread` variable in MainThreadWin.cpp
2. what is the returned value from Thread::currentID() in such situation?
3. Is GetCurrentThreadId broken in TLS destructor?
4. Is TLS destructor called in the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462604</commentid>
    <comment_count>14</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-23 21:32:42 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #13)
&gt; (In reply to Ross Kirsling from comment #12)
&gt; &gt; (In reply to Ross Kirsling from comment #11)
&gt; &gt; &gt; Oops, I had dropped the line numbers from that stack trace. This is the
&gt; &gt; &gt; holdLock() call:
&gt; &gt; &gt; https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/Threading.
&gt; &gt; &gt; cpp#L200
&gt; &gt; &gt; So then shouldRemoveThreadFromThreadGroup() definitely seems to be returning
&gt; &gt; &gt; `true` for the main thread in a certain scenario (without your patch).
&gt; &gt; &gt; 
&gt; &gt; &gt; I confirmed that the first patch here doesn&apos;t work in Release mode, but I&apos;ll
&gt; &gt; &gt; try the new one now. :)
&gt; &gt; 
&gt; &gt; Ugh, I can&apos;t believe it. It managed to start running every single test, but
&gt; &gt; at the very end, two subprocesses are hanging in the usual location (jsc.cpp
&gt; &gt; line 172) and so the runner can&apos;t exit.
&gt; 
&gt; Where is the hanging location? And does that mean isMainThread is not
&gt; working well even with this patch?
&gt; Also, I would like to know,
&gt; 
&gt; 1. what is the value stored in `mainThread` variable in MainThreadWin.cpp
&gt; 2. what is the returned value from Thread::currentID() in such situation?
&gt; 3. Is GetCurrentThreadId broken in TLS destructor?
&gt; 4. Is TLS destructor called in the main thread?

Both subprocesses are hung in the location mentioned above:
&gt; [External Code] 
&gt; jscLib.dll!`anonymous namespace&apos;::jscExit(int status) Line 172
&gt; jscLib.dll!main(int argc, char * * argv) Line 2270
&gt; jscLib.dll!dllLauncherEntryPoint(int argc, const char * * argv) Line 2850
&gt; jsc.exe!main(int argc, const char * * argv) Line 222
&gt; [External Code] 

So jscExit is calling `exit(status);` (with status 0, FWIW).

It seems clear that isMainThread is not working *before* the patch, but it&apos;s unclear with the patch.

I&apos;m not sure if any of the other questions can be answered by simply attaching to process, without rebuilding and rerunning...? The call stack is so short and uninformative, and using &quot;WTF::isMainThread()&quot; as a watch expression doesn&apos;t seem to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462871</commentid>
    <comment_count>15</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-09-24 14:10:29 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #14)
&gt; (In reply to Yusuke Suzuki from comment #13)
&gt; &gt; (In reply to Ross Kirsling from comment #12)
&gt; &gt; &gt; (In reply to Ross Kirsling from comment #11)
&gt; &gt; &gt; &gt; Oops, I had dropped the line numbers from that stack trace. This is the
&gt; &gt; &gt; &gt; holdLock() call:
&gt; &gt; &gt; &gt; https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/Threading.
&gt; &gt; &gt; &gt; cpp#L200
&gt; &gt; &gt; &gt; So then shouldRemoveThreadFromThreadGroup() definitely seems to be returning
&gt; &gt; &gt; &gt; `true` for the main thread in a certain scenario (without your patch).
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I confirmed that the first patch here doesn&apos;t work in Release mode, but I&apos;ll
&gt; &gt; &gt; &gt; try the new one now. :)
&gt; &gt; &gt; 
&gt; &gt; &gt; Ugh, I can&apos;t believe it. It managed to start running every single test, but
&gt; &gt; &gt; at the very end, two subprocesses are hanging in the usual location (jsc.cpp
&gt; &gt; &gt; line 172) and so the runner can&apos;t exit.
&gt; &gt; 
&gt; &gt; Where is the hanging location? And does that mean isMainThread is not
&gt; &gt; working well even with this patch?
&gt; &gt; Also, I would like to know,
&gt; &gt; 
&gt; &gt; 1. what is the value stored in `mainThread` variable in MainThreadWin.cpp
&gt; &gt; 2. what is the returned value from Thread::currentID() in such situation?
&gt; &gt; 3. Is GetCurrentThreadId broken in TLS destructor?
&gt; &gt; 4. Is TLS destructor called in the main thread?
&gt; 
&gt; Both subprocesses are hung in the location mentioned above:
&gt; &gt; [External Code] 
&gt; &gt; jscLib.dll!`anonymous namespace&apos;::jscExit(int status) Line 172
&gt; &gt; jscLib.dll!main(int argc, char * * argv) Line 2270
&gt; &gt; jscLib.dll!dllLauncherEntryPoint(int argc, const char * * argv) Line 2850
&gt; &gt; jsc.exe!main(int argc, const char * * argv) Line 222
&gt; &gt; [External Code] 
&gt; 
&gt; So jscExit is calling `exit(status);` (with status 0, FWIW).
&gt; 
&gt; It seems clear that isMainThread is not working *before* the patch, but it&apos;s
&gt; unclear with the patch.
&gt; 
&gt; I&apos;m not sure if any of the other questions can be answered by simply
&gt; attaching to process, without rebuilding and rerunning...? The call stack is
&gt; so short and uninformative, and using &quot;WTF::isMainThread()&quot; as a watch
&gt; expression doesn&apos;t seem to work.

Ok so its dying at exit.

So according to MSDN https://msdn.microsoft.com/en-us/library/6wdz5232.aspx#Anchor_1

&gt; The exit function calls destructors for thread-local objects, then calls—in last-in-first-out (LIFO) order—the functions that are registered by atexit and _onexit, and then flushes all file buffers before it terminates the process.

You could try and register a function and see if it ever gets to it. Possibly some destructor is getting called and stalling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462975</commentid>
    <comment_count>16</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-24 16:08:17 -0700</bug_when>
    <thetext>Oops, looking at the outstanding questions again...

&gt; 4. Is TLS destructor called in the main thread?

This is surely false given the shortened call stack which seems not to enter WTF.

What&apos;s also interesting is that before the patch, I tried adding a printf to isMainThread to see the comparison it was making when called from shouldRemoveThreadFromThreadGroup. (This printf was enough to cause Debug mode to succeed for some strange reason, but Release mode failed in the original way, i.e. eight hanging subprocesses with the main thread waiting for the thread group lock.) The only comparisons that were printed out were for child threads -- I never saw a comparison of the main thread ID against itself for subprocesses that exited successfully, and the hanging subprocesses (or at least, the very last one) printed nothing at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463094</commentid>
    <comment_count>17</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-24 21:22:01 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #16)
&gt; Oops, looking at the outstanding questions again...
&gt; 
&gt; &gt; 4. Is TLS destructor called in the main thread?
&gt; 
&gt; This is surely false given the shortened call stack which seems not to enter
&gt; WTF.
&gt; 
&gt; What&apos;s also interesting is that before the patch, I tried adding a printf to
&gt; isMainThread to see the comparison it was making when called from
&gt; shouldRemoveThreadFromThreadGroup. (This printf was enough to cause Debug
&gt; mode to succeed for some strange reason, but Release mode failed in the
&gt; original way, i.e. eight hanging subprocesses with the main thread waiting
&gt; for the thread group lock.) The only comparisons that were printed out were
&gt; for child threads -- I never saw a comparison of the main thread ID against
&gt; itself for subprocesses that exited successfully, and the hanging
&gt; subprocesses (or at least, the very last one) printed nothing at all.

With the current patch, if I add a print statement to isMainThread when called from shouldRemoveThreadFromThreadGroup, I see exactly the desired output when a subprocess exits properly:
&gt; Running stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 10992)
&gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 7460)
&gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 2756)
&gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 1 (main: 8252, current: 8252)
&gt; PASS: stress/activation-sink-osrexit-default-value.js.dfg-eager

...while, as before, no output at all when a subprocess hangs:
&gt; Running stress/try-catch-getter-as-get-by-id-register-restoration.js.no-cjit-collect-continuously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463485</commentid>
    <comment_count>18</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-25 20:00:41 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #17)
&gt; With the current patch, if I add a print statement to isMainThread when
&gt; called from shouldRemoveThreadFromThreadGroup, I see exactly the desired
&gt; output when a subprocess exits properly:
&gt; &gt; Running stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 10992)
&gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 7460)
&gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 2756)
&gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 1 (main: 8252, current: 8252)
&gt; &gt; PASS: stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; 
&gt; ...while, as before, no output at all when a subprocess hangs:
&gt; &gt; Running stress/try-catch-getter-as-get-by-id-register-restoration.js.no-cjit-collect-continuously

Other things I managed to confirm:
- There is no sampling profiler thread interfering (ENABLE_SAMPLING_PROFILER is true but Options::useSamplingProfiler is false).
- I ensured that the buffer is flushed after printing, but still no output in the hanging case.
- I attached an atexit() from initializeMainThreadPlatform() -- it fires as expected in the normal case and does not fire in the hanging case.

I think all of this suffices to answer the questions you asked and I think that the most recent change related to m_didExit shouldn&apos;t be necessary (since I believe your earlier patch fixes the isMainThread invalidity?)...but I&apos;m still very confused as to what could possibly be missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463529</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-26 00:14:01 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #18)
&gt; (In reply to Ross Kirsling from comment #17)
&gt; &gt; With the current patch, if I add a print statement to isMainThread when
&gt; &gt; called from shouldRemoveThreadFromThreadGroup, I see exactly the desired
&gt; &gt; output when a subprocess exits properly:
&gt; &gt; &gt; Running stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 10992)
&gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 7460)
&gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 2756)
&gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 1 (main: 8252, current: 8252)
&gt; &gt; &gt; PASS: stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; &gt; 
&gt; &gt; ...while, as before, no output at all when a subprocess hangs:
&gt; &gt; &gt; Running stress/try-catch-getter-as-get-by-id-register-restoration.js.no-cjit-collect-continuously

Does this mean `shouldRemoveThreadFromThreadGroup` is not called when hanging?
In that case, what is the backtrace of the hanging thread? Is `Thread::didExit` still included?

&gt; Other things I managed to confirm:
&gt; - There is no sampling profiler thread interfering (ENABLE_SAMPLING_PROFILER
&gt; is true but Options::useSamplingProfiler is false).
&gt; - I ensured that the buffer is flushed after printing, but still no output
&gt; in the hanging case.
&gt; - I attached an atexit() from initializeMainThreadPlatform() -- it fires as
&gt; expected in the normal case and does not fire in the hanging case.
&gt; 
&gt; I think all of this suffices to answer the questions you asked and I think
&gt; that the most recent change related to m_didExit shouldn&apos;t be necessary
&gt; (since I believe your earlier patch fixes the isMainThread
&gt; invalidity?)...but I&apos;m still very confused as to what could possibly be
&gt; missing.

I think the recent change for m_didExit is required anyway since it touches Thread::m_mutex anyway.
For example, concurrent GC thread can take this mutex, and be destroyed earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463635</commentid>
    <comment_count>20</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-26 09:49:41 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #19)
&gt; (In reply to Ross Kirsling from comment #18)
&gt; &gt; (In reply to Ross Kirsling from comment #17)
&gt; &gt; &gt; With the current patch, if I add a print statement to isMainThread when
&gt; &gt; &gt; called from shouldRemoveThreadFromThreadGroup, I see exactly the desired
&gt; &gt; &gt; output when a subprocess exits properly:
&gt; &gt; &gt; &gt; Running stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; &gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 10992)
&gt; &gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 7460)
&gt; &gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 0 (main: 8252, current: 2756)
&gt; &gt; &gt; &gt; stress/activation-sink-osrexit-default-value.js.dfg-eager: *isMainThread* 1 (main: 8252, current: 8252)
&gt; &gt; &gt; &gt; PASS: stress/activation-sink-osrexit-default-value.js.dfg-eager
&gt; &gt; &gt; 
&gt; &gt; &gt; ...while, as before, no output at all when a subprocess hangs:
&gt; &gt; &gt; &gt; Running stress/try-catch-getter-as-get-by-id-register-restoration.js.no-cjit-collect-continuously
&gt; 
&gt; Does this mean `shouldRemoveThreadFromThreadGroup` is not called when
&gt; hanging?

Correct.

&gt; In that case, what is the backtrace of the hanging thread? Is
&gt; `Thread::didExit` still included?

No, both versions of the patch produce the same backtrace that I pasted in comment 14 above -- exit() goes into [External Code] and nothing beyond that can be seen. In particular, WTF no longer appears at all.

&gt; &gt; Other things I managed to confirm:
&gt; &gt; - There is no sampling profiler thread interfering (ENABLE_SAMPLING_PROFILER
&gt; &gt; is true but Options::useSamplingProfiler is false).
&gt; &gt; - I ensured that the buffer is flushed after printing, but still no output
&gt; &gt; in the hanging case.
&gt; &gt; - I attached an atexit() from initializeMainThreadPlatform() -- it fires as
&gt; &gt; expected in the normal case and does not fire in the hanging case.
&gt; &gt; 
&gt; &gt; I think all of this suffices to answer the questions you asked and I think
&gt; &gt; that the most recent change related to m_didExit shouldn&apos;t be necessary
&gt; &gt; (since I believe your earlier patch fixes the isMainThread
&gt; &gt; invalidity?)...but I&apos;m still very confused as to what could possibly be
&gt; &gt; missing.
&gt; 
&gt; I think the recent change for m_didExit is required anyway since it touches
&gt; Thread::m_mutex anyway.
&gt; For example, concurrent GC thread can take this mutex, and be destroyed
&gt; earlier.

Okay -- I just didn&apos;t know whether that could cause a problem with hasExited() elsewhere. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464043</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-27 10:41:06 -0700</bug_when>
    <thetext>OK! So I think this patch fixes the `isMainThread()` issue.
And now, the other issue appears in Windows JSC tests b/c isMainThread issue is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464194</commentid>
    <comment_count>22</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-09-27 15:41:29 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #21)
&gt; OK! So I think this patch fixes the `isMainThread()` issue.
&gt; And now, the other issue appears in Windows JSC tests b/c isMainThread issue
&gt; is fixed.

Sounds good. It does seem that after this patch, WinCairo JSC tests are able to run to completion in Debug mode, and with --quick and some good luck, it is possible for Release mode to reach completion too. Hopefully we can solve the remaining Release issue in a follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464507</commentid>
    <comment_count>23</comment_count>
      <attachid>350560</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-28 14:30:41 -0700</bug_when>
    <thetext>Comment on attachment 350560
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464550</commentid>
    <comment_count>24</comment_count>
      <attachid>350560</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-28 15:32:44 -0700</bug_when>
    <thetext>Comment on attachment 350560
Patch

Clearing flags on attachment: 350560

Committed r236617: &lt;https://trac.webkit.org/changeset/236617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464551</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-28 15:32:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464554</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-28 15:33:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/44877012&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350501</attachid>
            <date>2018-09-22 00:28:14 -0700</date>
            <delta_ts>2018-09-22 01:28:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189880-20180922162813.patch</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlmNDk4ZDQ3OGFjZTk3ZWY2MTg3NTg1
MGY0NDE2OGQyZDM5MzcwNmQuLjMxMTRiMTNjZDc5YWVlMjg4M2Q3ZGJmNTk0MGNkNmQ3NDVmYTg2
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTgtMDktMjIgIFl1c3VrZSBTdXp1a2kgIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV1RGXSBNYWtlIGlzTWFpblRocmVh
ZCBtb3JlIHJlbGlhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBpc01haW5UaHJlYWQoKSByZWxpZWQgb24gVGhyZWFkOjpjdXJyZW50KCkuIFRoaXMg
QVBJIGJlY29tZXMgYnJva2VuIGluIFdpbmRvd3MKKyAgICAgICAgd2hlbiB0aGUgVGhyZWFkIGlz
IGFib3V0IHRvIGJlIGRlc3Ryb3llZCBzaW5jZSBUTFMgaXMgYWxyZWFkeSBjbGVhcmVkLiBUaGlz
IGNhdXNlcworICAgICAgICBhIGJ1ZyBzaW5jZSBgaXNNYWluVGhyZWFkKClgIGlzIGNhbGxlZCBp
biBUaHJlYWQ6OmRpZEV4aXQgaW4gV2luZG93cy4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2Vz
IHRoaXMgYGlzTWFpblRocmVhZGAgbW9yZSByZWxpYWJsZSBpbiBhbGwgdGhlIHBsYXRmb3Jtcy4g
SW4gV2luZG93cywKKyAgICAgICAgd2UgdXNlIGBUaHJlYWQ6OmN1cnJlbnRJRCgpYCBpbnN0ZWFk
IG9mIGBUaHJlYWQ6OmN1cnJlbnQoKWAgc2luY2UgYFRocmVhZDo6Y3VycmVudElEYAorICAgICAg
ICB1c2VzIFdpbjMyIEdldEN1cnJlbnRUaHJlYWRJZCBkaXJlY3RseS4gSW4gdGhlIG90aGVyIHN5
c3RlbSwgd2UgdXNlIGBwdGhyZWFkX21haW5fbnBgCisgICAgICAgIG9yIGBwdGhyZWFkX3NlbGZg
IGluc3RlYWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVh
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiB3dGYvY29jb2EvTWFpblRocmVhZENvY29hLm1tOiBSZW5h
bWVkIGZyb20gU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0uCisgICAgICAgICog
d3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFs
aXplTWFpblRocmVhZFBsYXRmb3JtKToKKyAgICAgICAgKFdURjo6aXNNYWluVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6aXNNYWluVGhyZWFkSWZJbml0aWFsaXplZCk6CisgICAgICAgICogd3RmL3dp
bi9NYWluVGhyZWFkV2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQ
bGF0Zm9ybSk6CisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6Omlz
TWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOgorCiAyMDE4LTA5LTIxICBZdXN1a2UgU3V6dWtpICA8
eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gRW5hYmxlIExMSW50
IEFTTSBpbnRlcnByZXRlciBvbiBYNjQgYW5kIEFSTTY0IGluIG5vbiBKSVQgY29uZmlndXJhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTIyYmRhMDI4
NDhmMWRhNDY1MWVhNzA2NTMxMjc2OTM2NzgxNzIwZi4uZjBiYjcxNzYxZWFkNDQ4YjYyZDBiZDdl
YjBkN2Q1YmJjNjdhY2ViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8qIGR0
b2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDcyOTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovOyB9OwogCQlBOEE0NzNDMzE1MUE4
MjVCMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJBMTE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1hbGxv
Yy5jcHAgKi87IH07CiAJCUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQjgx
NTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUYWJsZS5jcHAgKi87IH07Ci0JCUE4QTQ3M0U0MTUxQTgy
NUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJl
YWRNYWMubW0gKi87IH07CisJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFk
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29hLm1tICovOyB9OwogCQlB
OEE0NzNFNTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYg
LyogTWFpblRocmVhZC5jcHAgKi87IH07CiAJCUE4QTQ3M0U5MTUxQTgyNUIwMDQxMjNGRiAvKiBN
RDUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDcyQ0ExNTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5jcHAgKi87IH07CiAJCUE4QTQ3M0VDMTUxQTgy
NUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNEMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxs
b2NhdG9yLmNwcCAqLzsgfTsKQEAgLTUwMiw3ICs1MDIsNyBAQAogCQlBOEE0NzJCQzE1MUE4MjVB
MDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUFTTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDMTE1MUE4
MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGlzdEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcy
QzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDcyQzUx
NTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBNYWluVGhyZWFkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29hLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWFpblRocmVhZENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIz
RkYgLyogTWFpblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWluVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyQzcx
NTFBODI1QjAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFpblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0
NzJDOTE1MUE4MjVCMDA0MTIzRkYgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXRoRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTg1LDcgKzExODUsNiBAQAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBL
aXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAw
RDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAogCQkJCTUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAotCQkJCUE4QTQ3
MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTM0Nyw2ICsxMzQ2LDcg
QEAKIAkJCQkxNDNEREU5NzIwQzhCRTk5MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLmggKi8sCiAJ
CQkJMTQzRERFOTUyMEM4QkMzNzAwN0Y3NkZBIC8qIEVudGl0bGVtZW50cy5tbSAqLywKIAkJCQk3
QTZFQkEzMzIwNzQ2QzM0MDA0RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgKi8sCisJCQkJQThB
NDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRDb2NvYS5tbSAqLywKIAkJCQlBREYy
Q0U2NTFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovLAogCQkJ
CUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5t
bSAqLywKIAkJCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLywK
QEAgLTE1MTgsNyArMTUxOCw3IEBACiAJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQk3QTZFQkEzNDIwNzQ2QzM0MDA0
RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNFNTE1
MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBOEE0
NzNFNDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzNFOTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNENTQ5N0FDMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQURGMkNFNjcxRTM5RjEwNjAwNjg4OURCIC8qIE1lbW9yeUZvb3Rw
cmludENvY29hLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCA1YjQw
Y2I4MmU2YjE0ZDdiN2MwYzU5Yzc3MGQ3ZDAyZTFjZjRiYjA3Li40YzU0NzcyYTAwMDhkZTg2NmRk
ZTNiNDlhYzJiOGFlMTYxYTg4ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAtNDIsMTAgKzQy
LDYgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8v
IFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9ubHkgYWNjZXNzZWQgZnJvbSBtYWluIHRocmVhZC4K
LSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgVGhyZWFkKiBtYWluVGhyZWFkIHsgbnVsbHB0
ciB9OwotI2VuZGlmCi0KIHN0YXRpYyBMb2NrIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXg7
CiAKIHN0YXRpYyBEZXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4mIGZ1bmN0aW9uUXVldWUoKQpAQCAt
NjAsMjYgKzU2LDExIEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKQogewogICAgIHN0ZDo6
Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKICAgICAgICAgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICAgICAgbWFpblRocmVhZCA9ICZUaHJlYWQ6
OmN1cnJlbnQoKTsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3Jt
KCk7CiAgICAgICAgIGluaXRpYWxpemVHQ1RocmVhZHMoKTsKICAgICB9KTsKIH0KIAotI2lmICFQ
TEFURk9STShDT0NPQSkKLWJvb2wgaXNNYWluVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbWFpblRo
cmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFkSWZJbml0
aWFsaXplZCgpCi17Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICNpZiAhVVNFKFdFQl9USFJFQUQpCiB2b2lkIGluaXRpYWxpemVN
YWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA4ODM1Yjg5ZDdm
OWExNTUyNDE0ZDYzYjcwMmI4OGIyZWM4ZDI4OGY0Li43MjA5ZWI4ZmFhMmE5NzY4YmNiZjhhMzc3
MDQ4YTRjZTk5MTJmMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTY1NSw2ICs2NTUsNyBAQAogI2RlZmlu
ZSBIQVZFX1RNX0dNVE9GRiAxCiAjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCiAjZGVmaW5lIEhBVkVf
VElNRUdNIDEKKyNkZWZpbmUgSEFWRV9QVEhSRUFEX01BSU5fTlAgMQogCiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKEFSTTY0KQogI2RlZmluZSBIQVZFX0lOVDEyOF9UIDEKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggYzY1MTM4ODQ4MDg0NzRhYThlMDlkMDY0ZjRlZWMxY2JiMGUyOTI2My4u
ZjRkNTI2ZTU3MWI5MzIyOTRlYWEzNDI5YTM0MDQ5MTBlNzE5MTQyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTQ1LDEyICs0NSwxMiBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwog
ICAgIGNvY29hL0NQVVRpbWVDb2NvYS5jcHAKICAgICBjb2NvYS9FbnRpdGxlbWVudHMuY3BwCiAg
ICAgY29jb2EvTWFjaFNlbmRSaWdodC5jcHAKKyAgICBjb2NvYS9NYWluVGhyZWFkQ29jb2EubW0K
ICAgICBjb2NvYS9NZW1vcnlGb290cHJpbnRDb2NvYS5jcHAKICAgICBjb2NvYS9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJDb2NvYS5tbQogICAgIGNvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAogCiAgICAg
bWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tCi0gICAgbWFjL01haW5UaHJlYWRN
YWMubW0KIAogICAgIHRleHQvY2YvQXRvbWljU3RyaW5nSW1wbENGLmNwcAogICAgIHRleHQvY2Yv
U3RyaW5nQ0YuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9NYWluVGhyZWFk
Q29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9NYWluVGhyZWFkQ29jb2EubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGM5MjYzZmY5NWU4MWQ3Y2YzMjEwOTVkMGU4NTMxNTM2MmMzNjIwYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL01haW5UaHJlYWRDb2NvYS5tbQpAQCAtMCww
ICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIk1haW5UaHJlYWQuaCIKKwor
I2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPEZvdW5k
YXRpb24vTlNUaHJlYWQuaD4KKyNpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW1wb3J0
IDxzdGRpby5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9IYXNo
U2V0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvU2NoZWR1bGVQ
YWlyLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoV0VCX1RIUkVBRCkK
KyNpbmNsdWRlIDx3dGYvaW9zL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCitAaW50ZXJmYWNl
IEpTV1RGTWFpblRocmVhZENhbGxlciA6IE5TT2JqZWN0CistICh2b2lkKWNhbGw7CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBKU1dURk1haW5UaHJlYWRDYWxsZXIKKworLSAodm9pZCljYWxsCit7
CisgICAgV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit9CisKK0BlbmQK
KworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBKU1dURk1haW5UaHJlYWRDYWxsZXIqIHN0YXRp
Y01haW5UaHJlYWRDYWxsZXI7CitzdGF0aWMgYm9vbCBpc1RpbWVyUG9zdGVkOyAvLyBUaGlzIGlz
IG9ubHkgYWNjZXNzZWQgb24gdGhlIG1haW4gdGhyZWFkLgorc3RhdGljIGJvb2wgbWFpblRocmVh
ZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiB7IGZhbHNlIH07CitzdGF0aWMgcHRocmVhZF90IG1h
aW5UaHJlYWRQdGhyZWFkIHsgbnVsbHB0ciB9Oworc3RhdGljIE5TVGhyZWFkKiBtYWluVGhyZWFk
TlNUaHJlYWQgeyBudWxscHRyIH07CisKKyNpZiBVU0UoV0VCX1RIUkVBRCkKK3N0YXRpYyBUaHJl
YWQqIHNBcHBsaWNhdGlvblVJVGhyZWFkOworc3RhdGljIFRocmVhZCogc1dlYlRocmVhZDsKKyNl
bmRpZgorCit2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQoreworICAgIEFTU0VS
VCghc3RhdGljTWFpblRocmVhZENhbGxlcik7CisgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9
IFtbSlNXVEZNYWluVGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKKworI2lmICFVU0UoV0VCX1RI
UkVBRCkKKyAgICBtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluID0gZmFsc2U7Cisg
ICAgbWFpblRocmVhZFB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBtYWluVGhyZWFkTlNU
aHJlYWQgPSBbTlNUaHJlYWQgY3VycmVudFRocmVhZF07CisjZWxzZQorICAgIG1haW5UaHJlYWRF
c3RhYmxpc2hlZEFzUHRocmVhZE1haW4gPSB0cnVlOworICAgIEFTU0VSVCghbWFpblRocmVhZFB0
aHJlYWQpOworICAgIEFTU0VSVCghbWFpblRocmVhZE5TVGhyZWFkKTsKKyNlbmRpZgorfQorCisj
aWYgIVVTRShXRUJfVEhSRUFEKQordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01h
aW5UaHJlYWRQbGF0Zm9ybSgpCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkKKyAgICAg
ICAgTlNMb2coQCJXZWJLaXQgVGhyZWFkaW5nIFZpb2xhdGlvbiAtIGluaXRpYWwgdXNlIG9mIFdl
YktpdCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZC4iKTsKKworICAgIEFTU0VSVCghc3RhdGljTWFp
blRocmVhZENhbGxlcik7CisgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9IFtbSlNXVEZNYWlu
VGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKKworICAgIG1haW5UaHJlYWRFc3RhYmxpc2hlZEFz
UHRocmVhZE1haW4gPSB0cnVlOworICAgIG1haW5UaHJlYWRQdGhyZWFkID0gMDsKKyAgICBtYWlu
VGhyZWFkTlNUaHJlYWQgPSBuaWw7Cit9CisjZW5kaWYgLy8gIVVTRShXRUJfVEhSRUFEKQorCitz
dGF0aWMgdm9pZCB0aW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkKikKK3sK
KyAgICBDRlJlbGVhc2UodGltZXIpOworICAgIGlzVGltZXJQb3N0ZWQgPSBmYWxzZTsKKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBXVEY6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbU1h
aW5UaHJlYWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBvc3RUaW1lcigpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChpc1RpbWVyUG9zdGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpc1RpbWVyUG9zdGVkID0gdHJ1ZTsKKyAgICBDRlJ1bkxvb3BBZGRU
aW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIDAsIDAs
IDAsIDAsIHRpbWVyRmlyZWQsIDApLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworfQorCit2b2lk
IHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQoreworICAgIEFTU0VSVChz
dGF0aWNNYWluVGhyZWFkQ2FsbGVyKTsKKworICAgIGlmIChpc1dlYlRocmVhZCgpKSB7CisgICAg
ICAgIHBvc3RUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICht
YWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluKSB7CisgICAgICAgIEFTU0VSVCghbWFp
blRocmVhZE5TVGhyZWFkKTsKKyAgICAgICAgW3N0YXRpY01haW5UaHJlYWRDYWxsZXIgcGVyZm9y
bVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihjYWxsKSB3aXRoT2JqZWN0Om5pbCB3YWl0
VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtYWlu
VGhyZWFkTlNUaHJlYWQpOworICAgIFtzdGF0aWNNYWluVGhyZWFkQ2FsbGVyIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoY2FsbCkgb25UaHJlYWQ6bWFpblRocmVhZE5TVGhyZWFkIHdpdGhPYmpl
Y3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOworfQorCit2b2lkIGNhbGxPbldlYlRocmVhZE9yRGlz
cGF0Y2hBc3luY09uTWFpblRocmVhZCh2b2lkICheYmxvY2spKCkpCit7CisjaWYgVVNFKFdFQl9U
SFJFQUQpCisgICAgaWYgKFdlYkNvcmVXZWJUaHJlYWRJc0VuYWJsZWQgJiYgV2ViQ29yZVdlYlRo
cmVhZElzRW5hYmxlZCgpKSB7CisgICAgICAgIFdlYkNvcmVXZWJUaHJlYWRSdW4oYmxvY2spOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgYmxvY2spOworfQorCisjaWYgVVNFKFdFQl9USFJFQUQpCitz
dGF0aWMgYm9vbCB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6ZWRPckxvY2tlZE9yRGlzYWJsZWQoKQor
eworICAgIHJldHVybiAhV2ViQ29yZVdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCB8fCBXZWJD
b3JlV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCk7Cit9CisKK2Jvb2wgaXNNYWluVGhyZWFk
KCkKK3sKKyAgICByZXR1cm4gKGlzV2ViVGhyZWFkKCkgfHwgcHRocmVhZF9tYWluX25wKCkpICYm
IHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworfQorCitib29s
IGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBpc01haW5UaHJlYWQo
KTsKK30KKworYm9vbCBpc1VJVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gcHRocmVhZF9tYWluX25w
KCk7Cit9CisKKy8vIEtlZXAgaW4gbWluZCB0aGF0IGlzV2ViVGhyZWFkIGNhbiBiZSBjYWxsZWQg
ZXZlbiB3aGVuIGRlc3Ryb3lpbmcgdGhlIGN1cnJlbnQgdGhyZWFkLgorYm9vbCBpc1dlYlRocmVh
ZCgpCit7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIG1haW5UaHJl
YWRQdGhyZWFkKTsKK30KKwordm9pZCBpbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZCgpCit7
CisgICAgQVNTRVJUKHB0aHJlYWRfbWFpbl9ucCgpKTsKKyAgICBzQXBwbGljYXRpb25VSVRocmVh
ZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKK30KKwordm9pZCBpbml0aWFsaXplV2ViVGhyZWFkUGxh
dGZvcm0oKQoreworICAgIEFTU0VSVCghcHRocmVhZF9tYWluX25wKCkpOworCisgICAgbWFpblRo
cmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiA9IGZhbHNlOworICAgIG1haW5UaHJlYWRQdGhy
ZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgbWFpblRocmVhZE5TVGhyZWFkID0gW05TVGhyZWFk
IGN1cnJlbnRUaHJlYWRdOworCisgICAgc1dlYlRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsK
K30KKworYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkJiB0aHJl
YWQpCit7CisgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Cisg
ICAgaWYgKCZ0aHJlYWQgPT0gJmN1cnJlbnRUaHJlYWQpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCZ0aHJlYWQgPT0gc1dlYlRocmVhZCB8fCAmdGhyZWFkID09IHNBcHBsaWNhdGlv
blVJVGhyZWFkKQorICAgICAgICByZXR1cm4gKCZjdXJyZW50VGhyZWFkID09IHNXZWJUaHJlYWQg
fHwgJmN1cnJlbnRUaHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpICYmIHdlYlRocmVhZElz
VW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2Vsc2UKK2Jvb2wgaXNNYWluVGhyZWFkKCkKK3sKKyAgICBpZiAobWFpblRocmVhZEVzdGFi
bGlzaGVkQXNQdGhyZWFkTWFpbikgeworICAgICAgICBBU1NFUlQoIW1haW5UaHJlYWRQdGhyZWFk
KTsKKyAgICAgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworICAgIH0KKworICAgIEFTU0VS
VChtYWluVGhyZWFkUHRocmVhZCk7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9z
ZWxmKCksIG1haW5UaHJlYWRQdGhyZWFkKTsKK30KKworYm9vbCBpc01haW5UaHJlYWRJZkluaXRp
YWxpemVkKCkKK3sKKyAgICBpZiAobWFpblRocmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbikK
KyAgICAgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworICAgIHJldHVybiBwdGhyZWFkX2Vx
dWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRocmVhZCk7Cit9CisKKyNlbmRpZiAvLyBV
U0UoV0VCX1RIUkVBRCkKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nZW5lcmljL01haW5UaHJlYWRHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dl
bmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwCmluZGV4IDkxYWQyZTUzNmMxMmFkZTZkYTFjMTIy
ZDJjMjg4Y2NhMTIwNGRkNGQuLjZkOGU0MGYwZjFiMzAyMDcxZGRhMWRmYWQ4NzUxYjNmODQ3Mzc2
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwCkBA
IC0zMCw3ICszMCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJN
YWluVGhyZWFkLmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lmIEhBVkUoUFRIUkVBRF9OUF9I
KQorI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KICNpZiBVU0UoR0xJQikKQEAgLTM5LDYgKzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCisjaWYgIUhBVkUoUFRIUkVBRF9NQUlOX05QKQorc3RhdGljIHB0aHJlYWRfdCBtYWluVGhy
ZWFkOworI2VuZGlmCisKIGNsYXNzIE1haW5UaHJlYWREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAg
ICBNYWluVGhyZWFkRGlzcGF0Y2hlcigpCkBAIC02NSw2ICs3MiwyMyBAQCBjbGFzcyBNYWluVGhy
ZWFkRGlzcGF0Y2hlciB7CiAKIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiB7
CisjaWYgIUhBVkUoUFRIUkVBRF9NQUlOX05QKQorICAgIG1haW5UaHJlYWQgPSBwdGhyZWFkX3Nl
bGYoKTsKKyNlbmRpZgorfQorCitib29sIGlzTWFpblRocmVhZCgpCit7CisjaWYgSEFWRShQVEhS
RUFEX01BSU5fTlApCisgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZCk7CisjZW5kaWYK
K30KKworYm9vbCBpc01haW5UaHJlYWRJZkluaXRpYWxpemVkKCkKK3sKKyAgICByZXR1cm4gaXNN
YWluVGhyZWFkKCk7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRo
cmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbSBi
L1NvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZGI0MmFmNmEwMDI2OGI5MzRhYmU1MDBkOTkxOWFkNjJiODdmNzVjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWluVGhyZWFkTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTWFpblRocmVhZC5oIgotCi0jaW1wb3J0IDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVh
ZC5oPgotI2ltcG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbXBvcnQgPHN0ZGlvLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KLSNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIuaD4KLSNpbXBv
cnQgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1ZGUgPHd0
Zi9pb3MvV2ViQ29yZVRocmVhZC5oPgotI2VuZGlmCi0KLUBpbnRlcmZhY2UgSlNXVEZNYWluVGhy
ZWFkQ2FsbGVyIDogTlNPYmplY3QKLS0gKHZvaWQpY2FsbDsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIEpTV1RGTWFpblRocmVhZENhbGxlcgotCi0tICh2b2lkKWNhbGwKLXsKLSAgICBXVEY6OmRp
c3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotc3RhdGljIEpTV1RGTWFpblRocmVhZENhbGxlciogc3RhdGljTWFpblRocmVhZENh
bGxlcjsKLXN0YXRpYyBib29sIGlzVGltZXJQb3N0ZWQ7IC8vIFRoaXMgaXMgb25seSBhY2Nlc3Nl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi1zdGF0aWMgYm9vbCBtYWluVGhyZWFkRXN0YWJsaXNoZWRB
c1B0aHJlYWRNYWluIHsgZmFsc2UgfTsKLXN0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVhZFB0aHJl
YWQgeyBudWxscHRyIH07Ci1zdGF0aWMgTlNUaHJlYWQqIG1haW5UaHJlYWROU1RocmVhZCB7IG51
bGxwdHIgfTsKLQotI2lmIFVTRShXRUJfVEhSRUFEKQotc3RhdGljIFRocmVhZCogc0FwcGxpY2F0
aW9uVUlUaHJlYWQ7Ci1zdGF0aWMgVGhyZWFkKiBzV2ViVGhyZWFkOwotI2VuZGlmCi0KLXZvaWQg
aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCi17Ci0gICAgQVNTRVJUKCFzdGF0aWNNYWlu
VGhyZWFkQ2FsbGVyKTsKLSAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1haW5U
aHJlYWRDYWxsZXIgYWxsb2NdIGluaXRdOwotCi0jaWYgIVVTRShXRUJfVEhSRUFEKQotICAgIG1h
aW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1haW4gPSBmYWxzZTsKLSAgICBtYWluVGhyZWFk
UHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIG1haW5UaHJlYWROU1RocmVhZCA9IFtOU1Ro
cmVhZCBjdXJyZW50VGhyZWFkXTsKLSNlbHNlCi0gICAgbWFpblRocmVhZEVzdGFibGlzaGVkQXNQ
dGhyZWFkTWFpbiA9IHRydWU7Ci0gICAgQVNTRVJUKCFtYWluVGhyZWFkUHRocmVhZCk7Ci0gICAg
QVNTRVJUKCFtYWluVGhyZWFkTlNUaHJlYWQpOwotI2VuZGlmCi19Ci0KLSNpZiAhVVNFKFdFQl9U
SFJFQUQpCi12b2lkIGluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRm
b3JtKCkKLXsKLSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKQotICAgICAgICBOU0xvZyhAIldl
YktpdCBUaHJlYWRpbmcgVmlvbGF0aW9uIC0gaW5pdGlhbCB1c2Ugb2YgV2ViS2l0IGZyb20gYSBz
ZWNvbmRhcnkgdGhyZWFkLiIpOwotCi0gICAgQVNTRVJUKCFzdGF0aWNNYWluVGhyZWFkQ2FsbGVy
KTsKLSAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1haW5UaHJlYWRDYWxsZXIg
YWxsb2NdIGluaXRdOwotCi0gICAgbWFpblRocmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiA9
IHRydWU7Ci0gICAgbWFpblRocmVhZFB0aHJlYWQgPSAwOwotICAgIG1haW5UaHJlYWROU1RocmVh
ZCA9IG5pbDsKLX0KLSNlbmRpZiAvLyAhVVNFKFdFQl9USFJFQUQpCi0KLXN0YXRpYyB2b2lkIHRp
bWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQqKQotewotICAgIENGUmVsZWFz
ZSh0aW1lcik7Ci0gICAgaXNUaW1lclBvc3RlZCA9IGZhbHNlOwotCi0gICAgQGF1dG9yZWxlYXNl
cG9vbCB7Ci0gICAgICAgIFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcG9zdFRpbWVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgaWYgKGlzVGltZXJQb3N0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlzVGltZXJQb3N0ZWQgPSB0cnVlOwotICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9v
cEdldEN1cnJlbnQoKSwgQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgMCwgMCwgMCwgMCwgdGltZXJG
aXJlZCwgMCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci19Ci0KLXZvaWQgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCi17Ci0gICAgQVNTRVJUKHN0YXRpY01haW5UaHJl
YWRDYWxsZXIpOwotCi0gICAgaWYgKGlzV2ViVGhyZWFkKCkpIHsKLSAgICAgICAgcG9zdFRpbWVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1haW5UaHJlYWRFc3Rh
Ymxpc2hlZEFzUHRocmVhZE1haW4pIHsKLSAgICAgICAgQVNTRVJUKCFtYWluVGhyZWFkTlNUaHJl
YWQpOwotICAgICAgICBbc3RhdGljTWFpblRocmVhZENhbGxlciBwZXJmb3JtU2VsZWN0b3JPbk1h
aW5UaHJlYWQ6QHNlbGVjdG9yKGNhbGwpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9d
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1haW5UaHJlYWROU1RocmVh
ZCk7Ci0gICAgW3N0YXRpY01haW5UaHJlYWRDYWxsZXIgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rv
cihjYWxsKSBvblRocmVhZDptYWluVGhyZWFkTlNUaHJlYWQgd2l0aE9iamVjdDpuaWwgd2FpdFVu
dGlsRG9uZTpOT107Ci19Ci0KLXZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25N
YWluVGhyZWFkKHZvaWQgKF5ibG9jaykoKSkKLXsKLSNpZiBVU0UoV0VCX1RIUkVBRCkKLSAgICBp
ZiAoV2ViQ29yZVdlYlRocmVhZElzRW5hYmxlZCAmJiBXZWJDb3JlV2ViVGhyZWFkSXNFbmFibGVk
KCkpIHsKLSAgICAgICAgV2ViQ29yZVdlYlRocmVhZFJ1bihibG9jayk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBibG9jayk7Ci19Ci0KLSNpZiBVU0UoV0VCX1RIUkVBRCkKLXN0YXRpYyBib29sIHdl
YlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpCi17Ci0gICAgcmV0dXJu
ICFXZWJDb3JlV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkIHx8IFdlYkNvcmVXZWJUaHJlYWRJ
c0xvY2tlZE9yRGlzYWJsZWQoKTsKLX0KLQotYm9vbCBpc01haW5UaHJlYWQoKQotewotICAgIHJl
dHVybiAoaXNXZWJUaHJlYWQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSkgJiYgd2ViVGhyZWFkSXNV
bmluaXRpYWxpemVkT3JMb2NrZWRPckRpc2FibGVkKCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFk
SWZJbml0aWFsaXplZCgpCi17Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotCi1ib29s
IGlzVUlUaHJlYWQoKQotewotICAgIHJldHVybiBwdGhyZWFkX21haW5fbnAoKTsKLX0KLQotLy8g
S2VlcCBpbiBtaW5kIHRoYXQgaXNXZWJUaHJlYWQgY2FuIGJlIGNhbGxlZCBldmVuIHdoZW4gZGVz
dHJveWluZyB0aGUgY3VycmVudCB0aHJlYWQuCi1ib29sIGlzV2ViVGhyZWFkKCkKLXsKLSAgICBy
ZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZFB0aHJlYWQpOwot
fQotCi12b2lkIGluaXRpYWxpemVBcHBsaWNhdGlvblVJVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQo
cHRocmVhZF9tYWluX25wKCkpOwotICAgIHNBcHBsaWNhdGlvblVJVGhyZWFkID0gJlRocmVhZDo6
Y3VycmVudCgpOwotfQotCi12b2lkIGluaXRpYWxpemVXZWJUaHJlYWRQbGF0Zm9ybSgpCi17Ci0g
ICAgQVNTRVJUKCFwdGhyZWFkX21haW5fbnAoKSk7Ci0KLSAgICBtYWluVGhyZWFkRXN0YWJsaXNo
ZWRBc1B0aHJlYWRNYWluID0gZmFsc2U7Ci0gICAgbWFpblRocmVhZFB0aHJlYWQgPSBwdGhyZWFk
X3NlbGYoKTsKLSAgICBtYWluVGhyZWFkTlNUaHJlYWQgPSBbTlNUaHJlYWQgY3VycmVudFRocmVh
ZF07Ci0KLSAgICBzV2ViVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwotfQotCi1ib29sIGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWQmIHRocmVhZCkKLXsKLSAgICBU
aHJlYWQmIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBpZiAoJnRocmVh
ZCA9PSAmY3VycmVudFRocmVhZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoJnRo
cmVhZCA9PSBzV2ViVGhyZWFkIHx8ICZ0aHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpCi0g
ICAgICAgIHJldHVybiAoJmN1cnJlbnRUaHJlYWQgPT0gc1dlYlRocmVhZCB8fCAmY3VycmVudFRo
cmVhZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZCkgJiYgd2ViVGhyZWFkSXNVbmluaXRpYWxpemVk
T3JMb2NrZWRPckRpc2FibGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZWxzZQotYm9v
bCBpc01haW5UaHJlYWQoKQotewotICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJl
YWRNYWluKSB7Ci0gICAgICAgIEFTU0VSVCghbWFpblRocmVhZFB0aHJlYWQpOwotICAgICAgICBy
ZXR1cm4gcHRocmVhZF9tYWluX25wKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1haW5UaHJlYWRQ
dGhyZWFkKTsKLSAgICByZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRo
cmVhZFB0aHJlYWQpOwotfQotCi1ib29sIGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQotewot
ICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluKQotICAgICAgICByZXR1
cm4gcHRocmVhZF9tYWluX25wKCk7Ci0gICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9z
ZWxmKCksIG1haW5UaHJlYWRQdGhyZWFkKTsKLX0KLQotI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFE
KQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcApp
bmRleCBhNjQ3M2QwN2I2N2VhY2M4NmJlN2E0ZWI2OTc0OTg5M2VjNjE0OTdmLi5lMGRmMzIyNmNk
MzVlOTg2YmJlODBmNTZkZTlmNmQyY2M4OWMwNDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL01haW5UaHJl
YWRXaW4uY3BwCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogc3RhdGljIEhXTkQg
dGhyZWFkaW5nV2luZG93SGFuZGxlOwogc3RhdGljIFVJTlQgdGhyZWFkaW5nRmlyZWRNZXNzYWdl
OwogY29uc3QgTFBDV1NUUiBrVGhyZWFkaW5nV2luZG93Q2xhc3NOYW1lID0gTCJUaHJlYWRpbmdX
aW5kb3dDbGFzcyI7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkIHsgMCB9Owog
CiBMUkVTVUxUIENBTExCQUNLIFRocmVhZGluZ1dpbmRvd1duZFByb2MoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CkBAIC02NCw5ICs2NSwy
MSBAQCB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19VU0VE
RUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwogICAg
IHRocmVhZGluZ0ZpcmVkTWVzc2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20uYXBw
bGUuV2ViS2l0Lk1haW5UaHJlYWRGaXJlZCIpOwogCisgICAgbWFpblRocmVhZCA9IFRocmVhZDo6
Y3VycmVudElEKCk7CisKICAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoIk1haW4gVGhyZWFkIik7CiB9CiAKK2Jvb2wgaXNNYWluVGhyZWFkKCkKK3sKKyAgICByZXR1
cm4gbWFpblRocmVhZCA9PSBUaHJlYWQ6OmN1cnJlbnRJRCgpOworfQorCitib29sIGlzTWFpblRo
cmVhZElmSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBpc01haW5UaHJlYWQoKTsKK30KKwog
dm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKIHsKICAgICBBU1NF
UlQodGhyZWFkaW5nV2luZG93SGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zQ29tbW9uLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKaW5kZXgg
NzYzMDNjMzkyODI2ZmQ3YmJhMjllYzk2NDZkYTczMjFiMWI1NDM0MC4uZDAzZDIxYjZjZGExZjRm
YTZjMWUyYzc0ZDY1MGIzZTM1NjY1N2UwYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlv
bnNDb21tb24uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKQEAg
LTEzNCw2ICsxMzQsNyBAQCBXRUJLSVRfQ0hFQ0tfSEFWRV9GVU5DVElPTihIQVZFX1ZBU1BSSU5U
RiB2YXNwcmludGYpCiAKICMgQ2hlY2sgZm9yIHN5bWJvbHMKIFdFQktJVF9DSEVDS19IQVZFX1NZ
TUJPTChIQVZFX1JFR0VYX0ggcmVnZXhlYyByZWdleC5oKQorV0VCS0lUX0NIRUNLX0hBVkVfU1lN
Qk9MKEhBVkVfUFRIUkVBRF9NQUlOX05QIHB0aHJlYWRfbWFpbl9ucCBwdGhyZWFkX25wLmgpCiAj
IFdpbmRvd3MgaGFzIHNpZ25hbC5oIGJ1dCBpcyBtaXNzaW5nIHN5bWJvbHMgdGhhdCBhcmUgdXNl
ZCBpbiBjYWxscyB0byBzaWduYWwuCiBXRUJLSVRfQ0hFQ0tfSEFWRV9TWU1CT0woSEFWRV9TSUdO
QUxfSCBTSUdUUkFQIHNpZ25hbC5oKQogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggOGU4NjkzYmI2NTdmYTliMWY5NjgwMzMzNzA0Y2QwNTJhYWY1ZmMwOS4uNzE1ZmJi
NTc1NDA1ODgzNTY4NWY5MmY1MjA2Yzg5M2YyYzE5YWE1NiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE4LTA5LTIyICBZdXN1a2UgU3V6
dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CisKKyAgICAgICAgW1dURl0gTWFrZSBp
c01haW5UaHJlYWQgbW9yZSByZWxpYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg5ODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZToKKwog
MjAxOC0wOS0yMSAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgog
CiAgICAgICAgIFtKU0NdIEVuYWJsZSBMTEludCBBU00gaW50ZXJwcmV0ZXIgb24gWDY0IGFuZCBB
Uk02NCBpbiBub24gSklUIGNvbmZpZ3VyYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350503</attachid>
            <date>2018-09-22 01:28:07 -0700</date>
            <delta_ts>2018-09-23 03:44:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189880-20180922172806.patch</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlmNDk4ZDQ3OGFjZTk3ZWY2MTg3NTg1
MGY0NDE2OGQyZDM5MzcwNmQuLjMxMTRiMTNjZDc5YWVlMjg4M2Q3ZGJmNTk0MGNkNmQ3NDVmYTg2
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTgtMDktMjIgIFl1c3VrZSBTdXp1a2kgIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV1RGXSBNYWtlIGlzTWFpblRocmVh
ZCBtb3JlIHJlbGlhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBpc01haW5UaHJlYWQoKSByZWxpZWQgb24gVGhyZWFkOjpjdXJyZW50KCkuIFRoaXMg
QVBJIGJlY29tZXMgYnJva2VuIGluIFdpbmRvd3MKKyAgICAgICAgd2hlbiB0aGUgVGhyZWFkIGlz
IGFib3V0IHRvIGJlIGRlc3Ryb3llZCBzaW5jZSBUTFMgaXMgYWxyZWFkeSBjbGVhcmVkLiBUaGlz
IGNhdXNlcworICAgICAgICBhIGJ1ZyBzaW5jZSBgaXNNYWluVGhyZWFkKClgIGlzIGNhbGxlZCBp
biBUaHJlYWQ6OmRpZEV4aXQgaW4gV2luZG93cy4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2Vz
IHRoaXMgYGlzTWFpblRocmVhZGAgbW9yZSByZWxpYWJsZSBpbiBhbGwgdGhlIHBsYXRmb3Jtcy4g
SW4gV2luZG93cywKKyAgICAgICAgd2UgdXNlIGBUaHJlYWQ6OmN1cnJlbnRJRCgpYCBpbnN0ZWFk
IG9mIGBUaHJlYWQ6OmN1cnJlbnQoKWAgc2luY2UgYFRocmVhZDo6Y3VycmVudElEYAorICAgICAg
ICB1c2VzIFdpbjMyIEdldEN1cnJlbnRUaHJlYWRJZCBkaXJlY3RseS4gSW4gdGhlIG90aGVyIHN5
c3RlbSwgd2UgdXNlIGBwdGhyZWFkX21haW5fbnBgCisgICAgICAgIG9yIGBwdGhyZWFkX3NlbGZg
IGluc3RlYWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVh
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiB3dGYvY29jb2EvTWFpblRocmVhZENvY29hLm1tOiBSZW5h
bWVkIGZyb20gU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0uCisgICAgICAgICog
d3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFs
aXplTWFpblRocmVhZFBsYXRmb3JtKToKKyAgICAgICAgKFdURjo6aXNNYWluVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6aXNNYWluVGhyZWFkSWZJbml0aWFsaXplZCk6CisgICAgICAgICogd3RmL3dp
bi9NYWluVGhyZWFkV2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQ
bGF0Zm9ybSk6CisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6Omlz
TWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOgorCiAyMDE4LTA5LTIxICBZdXN1a2UgU3V6dWtpICA8
eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gRW5hYmxlIExMSW50
IEFTTSBpbnRlcnByZXRlciBvbiBYNjQgYW5kIEFSTTY0IGluIG5vbiBKSVQgY29uZmlndXJhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTIyYmRhMDI4
NDhmMWRhNDY1MWVhNzA2NTMxMjc2OTM2NzgxNzIwZi4uZjBiYjcxNzYxZWFkNDQ4YjYyZDBiZDdl
YjBkN2Q1YmJjNjdhY2ViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8qIGR0
b2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDcyOTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovOyB9OwogCQlBOEE0NzNDMzE1MUE4
MjVCMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJBMTE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1hbGxv
Yy5jcHAgKi87IH07CiAJCUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQjgx
NTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUYWJsZS5jcHAgKi87IH07Ci0JCUE4QTQ3M0U0MTUxQTgy
NUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJl
YWRNYWMubW0gKi87IH07CisJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFk
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29hLm1tICovOyB9OwogCQlB
OEE0NzNFNTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYg
LyogTWFpblRocmVhZC5jcHAgKi87IH07CiAJCUE4QTQ3M0U5MTUxQTgyNUIwMDQxMjNGRiAvKiBN
RDUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDcyQ0ExNTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5jcHAgKi87IH07CiAJCUE4QTQ3M0VDMTUxQTgy
NUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNEMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxs
b2NhdG9yLmNwcCAqLzsgfTsKQEAgLTUwMiw3ICs1MDIsNyBAQAogCQlBOEE0NzJCQzE1MUE4MjVB
MDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUFTTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDMTE1MUE4
MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGlzdEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcy
QzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDcyQzUx
NTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBNYWluVGhyZWFkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29hLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWFpblRocmVhZENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIz
RkYgLyogTWFpblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWluVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyQzcx
NTFBODI1QjAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFpblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0
NzJDOTE1MUE4MjVCMDA0MTIzRkYgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXRoRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTg1LDcgKzExODUsNiBAQAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBL
aXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAw
RDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAogCQkJCTUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAotCQkJCUE4QTQ3
MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTM0Nyw2ICsxMzQ2LDcg
QEAKIAkJCQkxNDNEREU5NzIwQzhCRTk5MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLmggKi8sCiAJ
CQkJMTQzRERFOTUyMEM4QkMzNzAwN0Y3NkZBIC8qIEVudGl0bGVtZW50cy5tbSAqLywKIAkJCQk3
QTZFQkEzMzIwNzQ2QzM0MDA0RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgKi8sCisJCQkJQThB
NDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRDb2NvYS5tbSAqLywKIAkJCQlBREYy
Q0U2NTFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovLAogCQkJ
CUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5t
bSAqLywKIAkJCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLywK
QEAgLTE1MTgsNyArMTUxOCw3IEBACiAJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQk3QTZFQkEzNDIwNzQ2QzM0MDA0
RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNFNTE1
MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBOEE0
NzNFNDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzNFOTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNENTQ5N0FDMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQURGMkNFNjcxRTM5RjEwNjAwNjg4OURCIC8qIE1lbW9yeUZvb3Rw
cmludENvY29hLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCA1YjQw
Y2I4MmU2YjE0ZDdiN2MwYzU5Yzc3MGQ3ZDAyZTFjZjRiYjA3Li40YzU0NzcyYTAwMDhkZTg2NmRk
ZTNiNDlhYzJiOGFlMTYxYTg4ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAtNDIsMTAgKzQy
LDYgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8v
IFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9ubHkgYWNjZXNzZWQgZnJvbSBtYWluIHRocmVhZC4K
LSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgVGhyZWFkKiBtYWluVGhyZWFkIHsgbnVsbHB0
ciB9OwotI2VuZGlmCi0KIHN0YXRpYyBMb2NrIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXg7
CiAKIHN0YXRpYyBEZXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4mIGZ1bmN0aW9uUXVldWUoKQpAQCAt
NjAsMjYgKzU2LDExIEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKQogewogICAgIHN0ZDo6
Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKICAgICAgICAgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICAgICAgbWFpblRocmVhZCA9ICZUaHJlYWQ6
OmN1cnJlbnQoKTsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3Jt
KCk7CiAgICAgICAgIGluaXRpYWxpemVHQ1RocmVhZHMoKTsKICAgICB9KTsKIH0KIAotI2lmICFQ
TEFURk9STShDT0NPQSkKLWJvb2wgaXNNYWluVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbWFpblRo
cmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFkSWZJbml0
aWFsaXplZCgpCi17Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICNpZiAhVVNFKFdFQl9USFJFQUQpCiB2b2lkIGluaXRpYWxpemVN
YWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA4ODM1Yjg5ZDdm
OWExNTUyNDE0ZDYzYjcwMmI4OGIyZWM4ZDI4OGY0Li43MjA5ZWI4ZmFhMmE5NzY4YmNiZjhhMzc3
MDQ4YTRjZTk5MTJmMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTY1NSw2ICs2NTUsNyBAQAogI2RlZmlu
ZSBIQVZFX1RNX0dNVE9GRiAxCiAjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCiAjZGVmaW5lIEhBVkVf
VElNRUdNIDEKKyNkZWZpbmUgSEFWRV9QVEhSRUFEX01BSU5fTlAgMQogCiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKEFSTTY0KQogI2RlZmluZSBIQVZFX0lOVDEyOF9UIDEKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggYzY1MTM4ODQ4MDg0NzRhYThlMDlkMDY0ZjRlZWMxY2JiMGUyOTI2My4u
ZjRkNTI2ZTU3MWI5MzIyOTRlYWEzNDI5YTM0MDQ5MTBlNzE5MTQyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTQ1LDEyICs0NSwxMiBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwog
ICAgIGNvY29hL0NQVVRpbWVDb2NvYS5jcHAKICAgICBjb2NvYS9FbnRpdGxlbWVudHMuY3BwCiAg
ICAgY29jb2EvTWFjaFNlbmRSaWdodC5jcHAKKyAgICBjb2NvYS9NYWluVGhyZWFkQ29jb2EubW0K
ICAgICBjb2NvYS9NZW1vcnlGb290cHJpbnRDb2NvYS5jcHAKICAgICBjb2NvYS9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJDb2NvYS5tbQogICAgIGNvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAogCiAgICAg
bWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tCi0gICAgbWFjL01haW5UaHJlYWRN
YWMubW0KIAogICAgIHRleHQvY2YvQXRvbWljU3RyaW5nSW1wbENGLmNwcAogICAgIHRleHQvY2Yv
U3RyaW5nQ0YuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9NYWluVGhyZWFk
Q29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9NYWluVGhyZWFkQ29jb2EubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGM5MjYzZmY5NWU4MWQ3Y2YzMjEwOTVkMGU4NTMxNTM2MmMzNjIwYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL01haW5UaHJlYWRDb2NvYS5tbQpAQCAtMCww
ICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIk1haW5UaHJlYWQuaCIKKwor
I2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPEZvdW5k
YXRpb24vTlNUaHJlYWQuaD4KKyNpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW1wb3J0
IDxzdGRpby5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9IYXNo
U2V0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvU2NoZWR1bGVQ
YWlyLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoV0VCX1RIUkVBRCkK
KyNpbmNsdWRlIDx3dGYvaW9zL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCitAaW50ZXJmYWNl
IEpTV1RGTWFpblRocmVhZENhbGxlciA6IE5TT2JqZWN0CistICh2b2lkKWNhbGw7CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBKU1dURk1haW5UaHJlYWRDYWxsZXIKKworLSAodm9pZCljYWxsCit7
CisgICAgV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit9CisKK0BlbmQK
KworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBKU1dURk1haW5UaHJlYWRDYWxsZXIqIHN0YXRp
Y01haW5UaHJlYWRDYWxsZXI7CitzdGF0aWMgYm9vbCBpc1RpbWVyUG9zdGVkOyAvLyBUaGlzIGlz
IG9ubHkgYWNjZXNzZWQgb24gdGhlIG1haW4gdGhyZWFkLgorc3RhdGljIGJvb2wgbWFpblRocmVh
ZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiB7IGZhbHNlIH07CitzdGF0aWMgcHRocmVhZF90IG1h
aW5UaHJlYWRQdGhyZWFkIHsgbnVsbHB0ciB9Oworc3RhdGljIE5TVGhyZWFkKiBtYWluVGhyZWFk
TlNUaHJlYWQgeyBudWxscHRyIH07CisKKyNpZiBVU0UoV0VCX1RIUkVBRCkKK3N0YXRpYyBUaHJl
YWQqIHNBcHBsaWNhdGlvblVJVGhyZWFkOworc3RhdGljIFRocmVhZCogc1dlYlRocmVhZDsKKyNl
bmRpZgorCit2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQoreworICAgIEFTU0VS
VCghc3RhdGljTWFpblRocmVhZENhbGxlcik7CisgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9
IFtbSlNXVEZNYWluVGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKKworI2lmICFVU0UoV0VCX1RI
UkVBRCkKKyAgICBtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluID0gZmFsc2U7Cisg
ICAgbWFpblRocmVhZFB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBtYWluVGhyZWFkTlNU
aHJlYWQgPSBbTlNUaHJlYWQgY3VycmVudFRocmVhZF07CisjZWxzZQorICAgIG1haW5UaHJlYWRF
c3RhYmxpc2hlZEFzUHRocmVhZE1haW4gPSB0cnVlOworICAgIEFTU0VSVCghbWFpblRocmVhZFB0
aHJlYWQpOworICAgIEFTU0VSVCghbWFpblRocmVhZE5TVGhyZWFkKTsKKyNlbmRpZgorfQorCisj
aWYgIVVTRShXRUJfVEhSRUFEKQordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01h
aW5UaHJlYWRQbGF0Zm9ybSgpCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkKKyAgICAg
ICAgTlNMb2coQCJXZWJLaXQgVGhyZWFkaW5nIFZpb2xhdGlvbiAtIGluaXRpYWwgdXNlIG9mIFdl
YktpdCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZC4iKTsKKworICAgIEFTU0VSVCghc3RhdGljTWFp
blRocmVhZENhbGxlcik7CisgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9IFtbSlNXVEZNYWlu
VGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKKworICAgIG1haW5UaHJlYWRFc3RhYmxpc2hlZEFz
UHRocmVhZE1haW4gPSB0cnVlOworICAgIG1haW5UaHJlYWRQdGhyZWFkID0gMDsKKyAgICBtYWlu
VGhyZWFkTlNUaHJlYWQgPSBuaWw7Cit9CisjZW5kaWYgLy8gIVVTRShXRUJfVEhSRUFEKQorCitz
dGF0aWMgdm9pZCB0aW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkKikKK3sK
KyAgICBDRlJlbGVhc2UodGltZXIpOworICAgIGlzVGltZXJQb3N0ZWQgPSBmYWxzZTsKKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBXVEY6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbU1h
aW5UaHJlYWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBvc3RUaW1lcigpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChpc1RpbWVyUG9zdGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpc1RpbWVyUG9zdGVkID0gdHJ1ZTsKKyAgICBDRlJ1bkxvb3BBZGRU
aW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIDAsIDAs
IDAsIDAsIHRpbWVyRmlyZWQsIDApLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworfQorCit2b2lk
IHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQoreworICAgIEFTU0VSVChz
dGF0aWNNYWluVGhyZWFkQ2FsbGVyKTsKKworICAgIGlmIChpc1dlYlRocmVhZCgpKSB7CisgICAg
ICAgIHBvc3RUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICht
YWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluKSB7CisgICAgICAgIEFTU0VSVCghbWFp
blRocmVhZE5TVGhyZWFkKTsKKyAgICAgICAgW3N0YXRpY01haW5UaHJlYWRDYWxsZXIgcGVyZm9y
bVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihjYWxsKSB3aXRoT2JqZWN0Om5pbCB3YWl0
VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtYWlu
VGhyZWFkTlNUaHJlYWQpOworICAgIFtzdGF0aWNNYWluVGhyZWFkQ2FsbGVyIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoY2FsbCkgb25UaHJlYWQ6bWFpblRocmVhZE5TVGhyZWFkIHdpdGhPYmpl
Y3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOworfQorCit2b2lkIGNhbGxPbldlYlRocmVhZE9yRGlz
cGF0Y2hBc3luY09uTWFpblRocmVhZCh2b2lkICheYmxvY2spKCkpCit7CisjaWYgVVNFKFdFQl9U
SFJFQUQpCisgICAgaWYgKFdlYkNvcmVXZWJUaHJlYWRJc0VuYWJsZWQgJiYgV2ViQ29yZVdlYlRo
cmVhZElzRW5hYmxlZCgpKSB7CisgICAgICAgIFdlYkNvcmVXZWJUaHJlYWRSdW4oYmxvY2spOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgYmxvY2spOworfQorCisjaWYgVVNFKFdFQl9USFJFQUQpCitz
dGF0aWMgYm9vbCB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6ZWRPckxvY2tlZE9yRGlzYWJsZWQoKQor
eworICAgIHJldHVybiAhV2ViQ29yZVdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCB8fCBXZWJD
b3JlV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCk7Cit9CisKK2Jvb2wgaXNNYWluVGhyZWFk
KCkKK3sKKyAgICByZXR1cm4gKGlzV2ViVGhyZWFkKCkgfHwgcHRocmVhZF9tYWluX25wKCkpICYm
IHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworfQorCitib29s
IGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBpc01haW5UaHJlYWQo
KTsKK30KKworYm9vbCBpc1VJVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gcHRocmVhZF9tYWluX25w
KCk7Cit9CisKKy8vIEtlZXAgaW4gbWluZCB0aGF0IGlzV2ViVGhyZWFkIGNhbiBiZSBjYWxsZWQg
ZXZlbiB3aGVuIGRlc3Ryb3lpbmcgdGhlIGN1cnJlbnQgdGhyZWFkLgorYm9vbCBpc1dlYlRocmVh
ZCgpCit7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIG1haW5UaHJl
YWRQdGhyZWFkKTsKK30KKwordm9pZCBpbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZCgpCit7
CisgICAgQVNTRVJUKHB0aHJlYWRfbWFpbl9ucCgpKTsKKyAgICBzQXBwbGljYXRpb25VSVRocmVh
ZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKK30KKwordm9pZCBpbml0aWFsaXplV2ViVGhyZWFkUGxh
dGZvcm0oKQoreworICAgIEFTU0VSVCghcHRocmVhZF9tYWluX25wKCkpOworCisgICAgbWFpblRo
cmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiA9IGZhbHNlOworICAgIG1haW5UaHJlYWRQdGhy
ZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgbWFpblRocmVhZE5TVGhyZWFkID0gW05TVGhyZWFk
IGN1cnJlbnRUaHJlYWRdOworCisgICAgc1dlYlRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsK
K30KKworYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkJiB0aHJl
YWQpCit7CisgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Cisg
ICAgaWYgKCZ0aHJlYWQgPT0gJmN1cnJlbnRUaHJlYWQpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCZ0aHJlYWQgPT0gc1dlYlRocmVhZCB8fCAmdGhyZWFkID09IHNBcHBsaWNhdGlv
blVJVGhyZWFkKQorICAgICAgICByZXR1cm4gKCZjdXJyZW50VGhyZWFkID09IHNXZWJUaHJlYWQg
fHwgJmN1cnJlbnRUaHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpICYmIHdlYlRocmVhZElz
VW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2Vsc2UKK2Jvb2wgaXNNYWluVGhyZWFkKCkKK3sKKyAgICBpZiAobWFpblRocmVhZEVzdGFi
bGlzaGVkQXNQdGhyZWFkTWFpbikgeworICAgICAgICBBU1NFUlQoIW1haW5UaHJlYWRQdGhyZWFk
KTsKKyAgICAgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworICAgIH0KKworICAgIEFTU0VS
VChtYWluVGhyZWFkUHRocmVhZCk7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9z
ZWxmKCksIG1haW5UaHJlYWRQdGhyZWFkKTsKK30KKworYm9vbCBpc01haW5UaHJlYWRJZkluaXRp
YWxpemVkKCkKK3sKKyAgICBpZiAobWFpblRocmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbikK
KyAgICAgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworICAgIHJldHVybiBwdGhyZWFkX2Vx
dWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRocmVhZCk7Cit9CisKKyNlbmRpZiAvLyBV
U0UoV0VCX1RIUkVBRCkKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nZW5lcmljL01haW5UaHJlYWRHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dl
bmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwCmluZGV4IDkxYWQyZTUzNmMxMmFkZTZkYTFjMTIy
ZDJjMjg4Y2NhMTIwNGRkNGQuLjZkOGU0MGYwZjFiMzAyMDcxZGRhMWRmYWQ4NzUxYjNmODQ3Mzc2
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwCkBA
IC0zMCw3ICszMCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJN
YWluVGhyZWFkLmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lmIEhBVkUoUFRIUkVBRF9OUF9I
KQorI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KICNpZiBVU0UoR0xJQikKQEAgLTM5LDYgKzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCisjaWYgIUhBVkUoUFRIUkVBRF9NQUlOX05QKQorc3RhdGljIHB0aHJlYWRfdCBtYWluVGhy
ZWFkOworI2VuZGlmCisKIGNsYXNzIE1haW5UaHJlYWREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAg
ICBNYWluVGhyZWFkRGlzcGF0Y2hlcigpCkBAIC02NSw2ICs3MiwyMyBAQCBjbGFzcyBNYWluVGhy
ZWFkRGlzcGF0Y2hlciB7CiAKIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiB7
CisjaWYgIUhBVkUoUFRIUkVBRF9NQUlOX05QKQorICAgIG1haW5UaHJlYWQgPSBwdGhyZWFkX3Nl
bGYoKTsKKyNlbmRpZgorfQorCitib29sIGlzTWFpblRocmVhZCgpCit7CisjaWYgSEFWRShQVEhS
RUFEX01BSU5fTlApCisgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZCk7CisjZW5kaWYK
K30KKworYm9vbCBpc01haW5UaHJlYWRJZkluaXRpYWxpemVkKCkKK3sKKyAgICByZXR1cm4gaXNN
YWluVGhyZWFkKCk7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRo
cmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbSBi
L1NvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZGI0MmFmNmEwMDI2OGI5MzRhYmU1MDBkOTkxOWFkNjJiODdmNzVjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWluVGhyZWFkTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTWFpblRocmVhZC5oIgotCi0jaW1wb3J0IDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVh
ZC5oPgotI2ltcG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbXBvcnQgPHN0ZGlvLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KLSNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIuaD4KLSNpbXBv
cnQgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1ZGUgPHd0
Zi9pb3MvV2ViQ29yZVRocmVhZC5oPgotI2VuZGlmCi0KLUBpbnRlcmZhY2UgSlNXVEZNYWluVGhy
ZWFkQ2FsbGVyIDogTlNPYmplY3QKLS0gKHZvaWQpY2FsbDsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIEpTV1RGTWFpblRocmVhZENhbGxlcgotCi0tICh2b2lkKWNhbGwKLXsKLSAgICBXVEY6OmRp
c3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotc3RhdGljIEpTV1RGTWFpblRocmVhZENhbGxlciogc3RhdGljTWFpblRocmVhZENh
bGxlcjsKLXN0YXRpYyBib29sIGlzVGltZXJQb3N0ZWQ7IC8vIFRoaXMgaXMgb25seSBhY2Nlc3Nl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi1zdGF0aWMgYm9vbCBtYWluVGhyZWFkRXN0YWJsaXNoZWRB
c1B0aHJlYWRNYWluIHsgZmFsc2UgfTsKLXN0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVhZFB0aHJl
YWQgeyBudWxscHRyIH07Ci1zdGF0aWMgTlNUaHJlYWQqIG1haW5UaHJlYWROU1RocmVhZCB7IG51
bGxwdHIgfTsKLQotI2lmIFVTRShXRUJfVEhSRUFEKQotc3RhdGljIFRocmVhZCogc0FwcGxpY2F0
aW9uVUlUaHJlYWQ7Ci1zdGF0aWMgVGhyZWFkKiBzV2ViVGhyZWFkOwotI2VuZGlmCi0KLXZvaWQg
aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCi17Ci0gICAgQVNTRVJUKCFzdGF0aWNNYWlu
VGhyZWFkQ2FsbGVyKTsKLSAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1haW5U
aHJlYWRDYWxsZXIgYWxsb2NdIGluaXRdOwotCi0jaWYgIVVTRShXRUJfVEhSRUFEKQotICAgIG1h
aW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1haW4gPSBmYWxzZTsKLSAgICBtYWluVGhyZWFk
UHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIG1haW5UaHJlYWROU1RocmVhZCA9IFtOU1Ro
cmVhZCBjdXJyZW50VGhyZWFkXTsKLSNlbHNlCi0gICAgbWFpblRocmVhZEVzdGFibGlzaGVkQXNQ
dGhyZWFkTWFpbiA9IHRydWU7Ci0gICAgQVNTRVJUKCFtYWluVGhyZWFkUHRocmVhZCk7Ci0gICAg
QVNTRVJUKCFtYWluVGhyZWFkTlNUaHJlYWQpOwotI2VuZGlmCi19Ci0KLSNpZiAhVVNFKFdFQl9U
SFJFQUQpCi12b2lkIGluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRm
b3JtKCkKLXsKLSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKQotICAgICAgICBOU0xvZyhAIldl
YktpdCBUaHJlYWRpbmcgVmlvbGF0aW9uIC0gaW5pdGlhbCB1c2Ugb2YgV2ViS2l0IGZyb20gYSBz
ZWNvbmRhcnkgdGhyZWFkLiIpOwotCi0gICAgQVNTRVJUKCFzdGF0aWNNYWluVGhyZWFkQ2FsbGVy
KTsKLSAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1haW5UaHJlYWRDYWxsZXIg
YWxsb2NdIGluaXRdOwotCi0gICAgbWFpblRocmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFpbiA9
IHRydWU7Ci0gICAgbWFpblRocmVhZFB0aHJlYWQgPSAwOwotICAgIG1haW5UaHJlYWROU1RocmVh
ZCA9IG5pbDsKLX0KLSNlbmRpZiAvLyAhVVNFKFdFQl9USFJFQUQpCi0KLXN0YXRpYyB2b2lkIHRp
bWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQqKQotewotICAgIENGUmVsZWFz
ZSh0aW1lcik7Ci0gICAgaXNUaW1lclBvc3RlZCA9IGZhbHNlOwotCi0gICAgQGF1dG9yZWxlYXNl
cG9vbCB7Ci0gICAgICAgIFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcG9zdFRpbWVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgaWYgKGlzVGltZXJQb3N0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlzVGltZXJQb3N0ZWQgPSB0cnVlOwotICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9v
cEdldEN1cnJlbnQoKSwgQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgMCwgMCwgMCwgMCwgdGltZXJG
aXJlZCwgMCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci19Ci0KLXZvaWQgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCi17Ci0gICAgQVNTRVJUKHN0YXRpY01haW5UaHJl
YWRDYWxsZXIpOwotCi0gICAgaWYgKGlzV2ViVGhyZWFkKCkpIHsKLSAgICAgICAgcG9zdFRpbWVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1haW5UaHJlYWRFc3Rh
Ymxpc2hlZEFzUHRocmVhZE1haW4pIHsKLSAgICAgICAgQVNTRVJUKCFtYWluVGhyZWFkTlNUaHJl
YWQpOwotICAgICAgICBbc3RhdGljTWFpblRocmVhZENhbGxlciBwZXJmb3JtU2VsZWN0b3JPbk1h
aW5UaHJlYWQ6QHNlbGVjdG9yKGNhbGwpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9d
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1haW5UaHJlYWROU1RocmVh
ZCk7Ci0gICAgW3N0YXRpY01haW5UaHJlYWRDYWxsZXIgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rv
cihjYWxsKSBvblRocmVhZDptYWluVGhyZWFkTlNUaHJlYWQgd2l0aE9iamVjdDpuaWwgd2FpdFVu
dGlsRG9uZTpOT107Ci19Ci0KLXZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25N
YWluVGhyZWFkKHZvaWQgKF5ibG9jaykoKSkKLXsKLSNpZiBVU0UoV0VCX1RIUkVBRCkKLSAgICBp
ZiAoV2ViQ29yZVdlYlRocmVhZElzRW5hYmxlZCAmJiBXZWJDb3JlV2ViVGhyZWFkSXNFbmFibGVk
KCkpIHsKLSAgICAgICAgV2ViQ29yZVdlYlRocmVhZFJ1bihibG9jayk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBibG9jayk7Ci19Ci0KLSNpZiBVU0UoV0VCX1RIUkVBRCkKLXN0YXRpYyBib29sIHdl
YlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpCi17Ci0gICAgcmV0dXJu
ICFXZWJDb3JlV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkIHx8IFdlYkNvcmVXZWJUaHJlYWRJ
c0xvY2tlZE9yRGlzYWJsZWQoKTsKLX0KLQotYm9vbCBpc01haW5UaHJlYWQoKQotewotICAgIHJl
dHVybiAoaXNXZWJUaHJlYWQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSkgJiYgd2ViVGhyZWFkSXNV
bmluaXRpYWxpemVkT3JMb2NrZWRPckRpc2FibGVkKCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFk
SWZJbml0aWFsaXplZCgpCi17Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotCi1ib29s
IGlzVUlUaHJlYWQoKQotewotICAgIHJldHVybiBwdGhyZWFkX21haW5fbnAoKTsKLX0KLQotLy8g
S2VlcCBpbiBtaW5kIHRoYXQgaXNXZWJUaHJlYWQgY2FuIGJlIGNhbGxlZCBldmVuIHdoZW4gZGVz
dHJveWluZyB0aGUgY3VycmVudCB0aHJlYWQuCi1ib29sIGlzV2ViVGhyZWFkKCkKLXsKLSAgICBy
ZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZFB0aHJlYWQpOwot
fQotCi12b2lkIGluaXRpYWxpemVBcHBsaWNhdGlvblVJVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQo
cHRocmVhZF9tYWluX25wKCkpOwotICAgIHNBcHBsaWNhdGlvblVJVGhyZWFkID0gJlRocmVhZDo6
Y3VycmVudCgpOwotfQotCi12b2lkIGluaXRpYWxpemVXZWJUaHJlYWRQbGF0Zm9ybSgpCi17Ci0g
ICAgQVNTRVJUKCFwdGhyZWFkX21haW5fbnAoKSk7Ci0KLSAgICBtYWluVGhyZWFkRXN0YWJsaXNo
ZWRBc1B0aHJlYWRNYWluID0gZmFsc2U7Ci0gICAgbWFpblRocmVhZFB0aHJlYWQgPSBwdGhyZWFk
X3NlbGYoKTsKLSAgICBtYWluVGhyZWFkTlNUaHJlYWQgPSBbTlNUaHJlYWQgY3VycmVudFRocmVh
ZF07Ci0KLSAgICBzV2ViVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwotfQotCi1ib29sIGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWQmIHRocmVhZCkKLXsKLSAgICBU
aHJlYWQmIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBpZiAoJnRocmVh
ZCA9PSAmY3VycmVudFRocmVhZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoJnRo
cmVhZCA9PSBzV2ViVGhyZWFkIHx8ICZ0aHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpCi0g
ICAgICAgIHJldHVybiAoJmN1cnJlbnRUaHJlYWQgPT0gc1dlYlRocmVhZCB8fCAmY3VycmVudFRo
cmVhZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZCkgJiYgd2ViVGhyZWFkSXNVbmluaXRpYWxpemVk
T3JMb2NrZWRPckRpc2FibGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZWxzZQotYm9v
bCBpc01haW5UaHJlYWQoKQotewotICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJl
YWRNYWluKSB7Ci0gICAgICAgIEFTU0VSVCghbWFpblRocmVhZFB0aHJlYWQpOwotICAgICAgICBy
ZXR1cm4gcHRocmVhZF9tYWluX25wKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1haW5UaHJlYWRQ
dGhyZWFkKTsKLSAgICByZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRo
cmVhZFB0aHJlYWQpOwotfQotCi1ib29sIGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQotewot
ICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluKQotICAgICAgICByZXR1
cm4gcHRocmVhZF9tYWluX25wKCk7Ci0gICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVhZF9z
ZWxmKCksIG1haW5UaHJlYWRQdGhyZWFkKTsKLX0KLQotI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFE
KQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcApp
bmRleCBhNjQ3M2QwN2I2N2VhY2M4NmJlN2E0ZWI2OTc0OTg5M2VjNjE0OTdmLi5lMGRmMzIyNmNk
MzVlOTg2YmJlODBmNTZkZTlmNmQyY2M4OWMwNDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL01haW5UaHJl
YWRXaW4uY3BwCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogc3RhdGljIEhXTkQg
dGhyZWFkaW5nV2luZG93SGFuZGxlOwogc3RhdGljIFVJTlQgdGhyZWFkaW5nRmlyZWRNZXNzYWdl
OwogY29uc3QgTFBDV1NUUiBrVGhyZWFkaW5nV2luZG93Q2xhc3NOYW1lID0gTCJUaHJlYWRpbmdX
aW5kb3dDbGFzcyI7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkIHsgMCB9Owog
CiBMUkVTVUxUIENBTExCQUNLIFRocmVhZGluZ1dpbmRvd1duZFByb2MoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CkBAIC02NCw5ICs2NSwy
MSBAQCB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19VU0VE
RUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwogICAg
IHRocmVhZGluZ0ZpcmVkTWVzc2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20uYXBw
bGUuV2ViS2l0Lk1haW5UaHJlYWRGaXJlZCIpOwogCisgICAgbWFpblRocmVhZCA9IFRocmVhZDo6
Y3VycmVudElEKCk7CisKICAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoIk1haW4gVGhyZWFkIik7CiB9CiAKK2Jvb2wgaXNNYWluVGhyZWFkKCkKK3sKKyAgICByZXR1
cm4gbWFpblRocmVhZCA9PSBUaHJlYWQ6OmN1cnJlbnRJRCgpOworfQorCitib29sIGlzTWFpblRo
cmVhZElmSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBpc01haW5UaHJlYWQoKTsKK30KKwog
dm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKIHsKICAgICBBU1NF
UlQodGhyZWFkaW5nV2luZG93SGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zQ29tbW9uLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKaW5kZXgg
NzYzMDNjMzkyODI2ZmQ3YmJhMjllYzk2NDZkYTczMjFiMWI1NDM0MC4uZDAzZDIxYjZjZGExZjRm
YTZjMWUyYzc0ZDY1MGIzZTM1NjY1N2UwYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlv
bnNDb21tb24uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKQEAg
LTEzNCw2ICsxMzQsNyBAQCBXRUJLSVRfQ0hFQ0tfSEFWRV9GVU5DVElPTihIQVZFX1ZBU1BSSU5U
RiB2YXNwcmludGYpCiAKICMgQ2hlY2sgZm9yIHN5bWJvbHMKIFdFQktJVF9DSEVDS19IQVZFX1NZ
TUJPTChIQVZFX1JFR0VYX0ggcmVnZXhlYyByZWdleC5oKQorV0VCS0lUX0NIRUNLX0hBVkVfU1lN
Qk9MKEhBVkVfUFRIUkVBRF9NQUlOX05QIHB0aHJlYWRfbWFpbl9ucCBwdGhyZWFkX25wLmgpCiAj
IFdpbmRvd3MgaGFzIHNpZ25hbC5oIGJ1dCBpcyBtaXNzaW5nIHN5bWJvbHMgdGhhdCBhcmUgdXNl
ZCBpbiBjYWxscyB0byBzaWduYWwuCiBXRUJLSVRfQ0hFQ0tfSEFWRV9TWU1CT0woSEFWRV9TSUdO
QUxfSCBTSUdUUkFQIHNpZ25hbC5oKQogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggOGU4NjkzYmI2NTdmYTliMWY5NjgwMzMzNzA0Y2QwNTJhYWY1ZmMwOS4uNzE1ZmJi
NTc1NDA1ODgzNTY4NWY5MmY1MjA2Yzg5M2YyYzE5YWE1NiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE4LTA5LTIyICBZdXN1a2UgU3V6
dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CisKKyAgICAgICAgW1dURl0gTWFrZSBp
c01haW5UaHJlYWQgbW9yZSByZWxpYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg5ODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZToKKwog
MjAxOC0wOS0yMSAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgog
CiAgICAgICAgIFtKU0NdIEVuYWJsZSBMTEludCBBU00gaW50ZXJwcmV0ZXIgb24gWDY0IGFuZCBB
Uk02NCBpbiBub24gSklUIGNvbmZpZ3VyYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350560</attachid>
            <date>2018-09-23 03:44:17 -0700</date>
            <delta_ts>2018-09-28 15:32:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189880-20180923194416.patch</filename>
            <type>text/plain</type>
            <size>28292</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlmNDk4ZDQ3OGFjZTk3ZWY2MTg3NTg1
MGY0NDE2OGQyZDM5MzcwNmQuLmY5OTRkYjQ2NzRlYWM5NzI4NmFmMzFlYTRiYzRiMmYyYzhiODIy
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTgtMDktMjMgIFl1c3VrZSBTdXp1a2kgIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV1RGXSBNYWtlIGlzTWFpblRocmVh
ZCBtb3JlIHJlbGlhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBpc01haW5UaHJlYWQoKSByZWxpZWQgb24gVGhyZWFkOjpjdXJyZW50KCkuIFRoaXMg
QVBJIGJlY29tZXMgYnJva2VuIGluIFdpbmRvd3MKKyAgICAgICAgd2hlbiB0aGUgVGhyZWFkIGlz
IGFib3V0IHRvIGJlIGRlc3Ryb3llZCBzaW5jZSBUTFMgaXMgYWxyZWFkeSBjbGVhcmVkLiBUaGlz
IGNhdXNlcworICAgICAgICBhIGJ1ZyBzaW5jZSBgaXNNYWluVGhyZWFkKClgIGlzIGNhbGxlZCBp
biBUaHJlYWQ6OmRpZEV4aXQgaW4gV2luZG93cy4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2Vz
IHRoaXMgYGlzTWFpblRocmVhZGAgbW9yZSByZWxpYWJsZSBpbiBhbGwgdGhlIHBsYXRmb3Jtcy4g
SW4gV2luZG93cywKKyAgICAgICAgd2UgdXNlIGBUaHJlYWQ6OmN1cnJlbnRJRCgpYCBpbnN0ZWFk
IG9mIGBUaHJlYWQ6OmN1cnJlbnQoKWAgc2luY2UgYFRocmVhZDo6Y3VycmVudElEYAorICAgICAg
ICB1c2VzIFdpbjMyIEdldEN1cnJlbnRUaHJlYWRJZCBkaXJlY3RseS4gSW4gdGhlIG90aGVyIHN5
c3RlbSwgd2UgdXNlIGBwdGhyZWFkX21haW5fbnBgCisgICAgICAgIG9yIGBwdGhyZWFkX3NlbGZg
IGluc3RlYWQuCisKKyAgICAgICAgV2UgYWxzbyBtb3ZlIGBob2xkTG9ja2AgY29kZSBpbnNpZGUg
YGlmIChzaG91bGRSZW1vdmVUaHJlYWRGcm9tVGhyZWFkR3JvdXAoKSlgLiBJZgorICAgICAgICB0
aGUgb3RoZXIgdGhyZWFkIHRha2VzIGEgbXV0ZXggYW5kIGRlc3Ryb3llZCwgdGhpcyBgaG9sZExv
Y2tgIHdhaXRzIGZvcmV2ZXIuIFRoaXMgcHJvYmxlbQorICAgICAgICBvbmx5IGhhcHBlbnMgaW4g
V2luZG93cyBzaW5jZSBXaW5kb3dzIGNhbGxzIFRMUyBkZXN0cnVjdG9yIGZvciB0aGUgbWFpbiB0
aHJlYWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhy
ZWFkKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKiB3dGYvY29jb2EvTWFpblRocmVhZENvY29hLm1tOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0uCisgICAgICAg
ICogd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjppbml0
aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToKKyAgICAgICAgKFdURjo6aXNNYWluVGhyZWFkKToK
KyAgICAgICAgKFdURjo6aXNNYWluVGhyZWFkSWZJbml0aWFsaXplZCk6CisgICAgICAgICogd3Rm
L3dpbi9NYWluVGhyZWFkV2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJl
YWRQbGF0Zm9ybSk6CisgICAgICAgIChXVEY6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6
OmlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQpOgorCiAyMDE4LTA5LTIxICBZdXN1a2UgU3V6dWtp
ICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gRW5hYmxlIExM
SW50IEFTTSBpbnRlcnByZXRlciBvbiBYNjQgYW5kIEFSTTY0IGluIG5vbiBKSVQgY29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTIyYmRh
MDI4NDhmMWRhNDY1MWVhNzA2NTMxMjc2OTM2NzgxNzIwZi4uZjBiYjcxNzYxZWFkNDQ4YjYyZDBi
ZDdlYjBkN2Q1YmJjNjdhY2ViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8q
IGR0b2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThBNDcyOTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovOyB9OwogCQlBOEE0NzNDMzE1
MUE4MjVCMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJBMTE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1h
bGxvYy5jcHAgKi87IH07CiAJCUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcy
QjgxNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUYWJsZS5jcHAgKi87IH07Ci0JCUE4QTQ3M0U0MTUx
QTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5U
aHJlYWRNYWMubW0gKi87IH07CisJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhy
ZWFkQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29hLm1tICovOyB9Owog
CQlBOEE0NzNFNTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJDNjE1MUE4MjVBMDA0MTIz
RkYgLyogTWFpblRocmVhZC5jcHAgKi87IH07CiAJCUE4QTQ3M0U5MTUxQTgyNUIwMDQxMjNGRiAv
KiBNRDUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThBNDcyQ0ExNTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5jcHAgKi87IH07CiAJCUE4QTQ3M0VDMTUx
QTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNEMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRh
QWxsb2NhdG9yLmNwcCAqLzsgfTsKQEAgLTUwMiw3ICs1MDIsNyBAQAogCQlBOEE0NzJCQzE1MUE4
MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElubGluZUFTTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDMTE1
MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGlzdEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThB
NDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2NrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDcy
QzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNYWluVGhyZWFkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWFpblRocmVhZENv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJDNjE1MUE4MjVBMDA0
MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYWluVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcy
QzcxNTFBODI1QjAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFpblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzJDOTE1MUE4MjVCMDA0MTIzRkYgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXRoRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTg1LDcgKzExODUsNiBAQAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBB
cHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgw
MTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAogCQkJCTUz
NTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAotCQkJCUE4
QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJ
CXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTM0Nyw2ICsxMzQ2
LDcgQEAKIAkJCQkxNDNEREU5NzIwQzhCRTk5MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLmggKi8s
CiAJCQkJMTQzRERFOTUyMEM4QkMzNzAwN0Y3NkZBIC8qIEVudGl0bGVtZW50cy5tbSAqLywKIAkJ
CQk3QTZFQkEzMzIwNzQ2QzM0MDA0RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgKi8sCisJCQkJ
QThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRDb2NvYS5tbSAqLywKIAkJCQlB
REYyQ0U2NTFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovLAog
CQkJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2Nv
YS5tbSAqLywKIAkJCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAq
LywKQEAgLTE1MTgsNyArMTUxOCw3IEBACiAJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8q
IE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQk3QTZFQkEzNDIwNzQ2QzM0
MDA0RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNF
NTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
OEE0NzNFNDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkQ29jb2EubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBOEE0NzNFOTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNENTQ5N0FDMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQURGMkNFNjcxRTM5RjEwNjAwNjg4OURCIC8qIE1lbW9yeUZv
b3RwcmludENvY29hLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCA1
YjQwY2I4MmU2YjE0ZDdiN2MwYzU5Yzc3MGQ3ZDAyZTFjZjRiYjA3Li40YzU0NzcyYTAwMDhkZTg2
NmRkZTNiNDlhYzJiOGFlMTYxYTg4ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWlu
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAtNDIsMTAg
KzQyLDYgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7
IC8vIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9ubHkgYWNjZXNzZWQgZnJvbSBtYWluIHRocmVh
ZC4KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgVGhyZWFkKiBtYWluVGhyZWFkIHsgbnVs
bHB0ciB9OwotI2VuZGlmCi0KIHN0YXRpYyBMb2NrIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0
ZXg7CiAKIHN0YXRpYyBEZXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4mIGZ1bmN0aW9uUXVldWUoKQpA
QCAtNjAsMjYgKzU2LDExIEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKQogewogICAgIHN0
ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKICAgICAgICAgaW5pdGlhbGl6ZVRocmVh
ZGluZygpOwotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICAgICAgbWFpblRocmVhZCA9ICZUaHJl
YWQ6OmN1cnJlbnQoKTsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRm
b3JtKCk7CiAgICAgICAgIGluaXRpYWxpemVHQ1RocmVhZHMoKTsKICAgICB9KTsKIH0KIAotI2lm
ICFQTEFURk9STShDT0NPQSkKLWJvb2wgaXNNYWluVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbWFp
blRocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFkSWZJ
bml0aWFsaXplZCgpCi17Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShDT0NPQSkKICNpZiAhVVNFKFdFQl9USFJFQUQpCiB2b2lkIGluaXRpYWxp
emVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA4ODM1Yjg5
ZDdmOWExNTUyNDE0ZDYzYjcwMmI4OGIyZWM4ZDI4OGY0Li43MjA5ZWI4ZmFhMmE5NzY4YmNiZjhh
Mzc3MDQ4YTRjZTk5MTJmMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTY1NSw2ICs2NTUsNyBAQAogI2Rl
ZmluZSBIQVZFX1RNX0dNVE9GRiAxCiAjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCiAjZGVmaW5lIEhB
VkVfVElNRUdNIDEKKyNkZWZpbmUgSEFWRV9QVEhSRUFEX01BSU5fTlAgMQogCiAjaWYgQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTTY0KQogI2RlZmluZSBIQVZFX0lOVDEyOF9UIDEKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKaW5kZXggYzY1MTM4ODQ4MDg0NzRhYThlMDlkMDY0ZjRlZWMxY2JiMGUyOTI2
My4uZjRkNTI2ZTU3MWI5MzIyOTRlYWEzNDI5YTM0MDQ5MTBlNzE5MTQyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTQ1LDEyICs0NSwxMiBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgIGNvY29hL0NQVVRpbWVDb2NvYS5jcHAKICAgICBjb2NvYS9FbnRpdGxlbWVudHMuY3Bw
CiAgICAgY29jb2EvTWFjaFNlbmRSaWdodC5jcHAKKyAgICBjb2NvYS9NYWluVGhyZWFkQ29jb2Eu
bW0KICAgICBjb2NvYS9NZW1vcnlGb290cHJpbnRDb2NvYS5jcHAKICAgICBjb2NvYS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXJDb2NvYS5tbQogICAgIGNvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAogCiAg
ICAgbWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tCi0gICAgbWFjL01haW5UaHJl
YWRNYWMubW0KIAogICAgIHRleHQvY2YvQXRvbWljU3RyaW5nSW1wbENGLmNwcAogICAgIHRleHQv
Y2YvU3RyaW5nQ0YuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3Bw
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCAwNzhmNzNhYzgxMDBlODlmNzJm
MjAwNGVmZGQwMDU1MDQ0MTRiZmE3Li40MDliYTc1ODVjNWRhZTIyMTcwMjllZDMyMWQ0Y2ZjMGE4
NzMzMjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTE4NSwyOCArMTg1LDMwIEBAIHN0YXRpYyBi
b29sIHNob3VsZFJlbW92ZVRocmVhZEZyb21UaHJlYWRHcm91cCgpCiB2b2lkIFRocmVhZDo6ZGlk
RXhpdCgpCiB7CiAgICAgaWYgKHNob3VsZFJlbW92ZVRocmVhZEZyb21UaHJlYWRHcm91cCgpKSB7
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+PiB0aHJlYWRHcm91
cHM7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRl
eCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRocmVhZEdyb3VwIDogbV90aHJlYWRHcm91cHMp
IHsKLSAgICAgICAgICAgICAgICAvLyBJZiBUaHJlYWRHcm91cCBpcyBqdXN0IGJlaW5nIGRlc3Ry
b3llZCwKLSAgICAgICAgICAgICAgICAvLyB3ZSBkbyBub3QgbmVlZCB0byBwZXJmb3JtIHVucmVn
aXN0ZXJpbmcuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8gcmV0YWluZWQgPSB0aHJlYWRHcm91
cC5sb2NrKCkpCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZEdyb3Vwcy5hcHBlbmQoV1RGTW92
ZShyZXRhaW5lZCkpOworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxUaHJlYWRH
cm91cD4+IHRocmVhZEdyb3VwczsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
dGhyZWFkR3JvdXAgOiBtX3RocmVhZEdyb3VwcykgeworICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBUaHJlYWRHcm91cCBpcyBqdXN0IGJlaW5nIGRlc3Ryb3llZCwKKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gcGVyZm9ybSB1bnJlZ2lzdGVyaW5nLgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byByZXRhaW5lZCA9IHRocmVhZEdyb3VwLmxvY2soKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRocmVhZEdyb3Vwcy5hcHBlbmQoV1RGTW92ZShyZXRhaW5lZCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2lzU2h1dHRpbmdEb3duID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkR3JvdXAg
OiB0aHJlYWRHcm91cHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRocmVhZEdyb3VwTG9ja2Vy
ID0gaG9sZExvY2sodGhyZWFkR3JvdXAtPmdldExvY2soKSk7CisgICAgICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKKyAgICAgICAgICAgICAgICB0aHJlYWRHcm91
cC0+bV90aHJlYWRzLnJlbW92ZSgqdGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2lzU2h1dHRpbmdEb3duID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIHRo
cmVhZEdyb3VwIDogdGhyZWFkR3JvdXBzKSB7Ci0gICAgICAgICAgICBhdXRvIHRocmVhZEdyb3Vw
TG9ja2VyID0gaG9sZExvY2sodGhyZWFkR3JvdXAtPmdldExvY2soKSk7Ci0gICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwotICAgICAgICAgICAgdGhyZWFkR3JvdXAt
Pm1fdGhyZWFkcy5yZW1vdmUoKnRoaXMpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gV2Ug
d291bGQgbGlrZSB0byBzYXkgInRocmVhZCBpcyBleGl0ZWQiIGFmdGVyIHVucmVnaXN0ZXJpbmcg
dGhyZWFkcyBmcm9tIHRocmVhZCBncm91cHMuCi0gICAgLy8gU28gd2UgbmVlZCB0byBzZXBhcmF0
ZSBtX2lzU2h1dHRpbmdEb3duIGZyb20gbV9kaWRFeGl0LgotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9tdXRleCk7Ci0gICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICAgICAgLy8gV2Ugd291
bGQgbGlrZSB0byBzYXkgInRocmVhZCBpcyBleGl0ZWQiIGFmdGVyIHVucmVnaXN0ZXJpbmcgdGhy
ZWFkcyBmcm9tIHRocmVhZCBncm91cHMuCisgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gc2VwYXJh
dGUgbV9pc1NodXR0aW5nRG93biBmcm9tIG1fZGlkRXhpdC4KKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICB9CiB9
CiAKIFRocmVhZEdyb3VwQWRkUmVzdWx0IFRocmVhZDo6YWRkVG9UaHJlYWRHcm91cChjb25zdCBB
YnN0cmFjdExvY2tlciYgdGhyZWFkR3JvdXBMb2NrZXIsIFRocmVhZEdyb3VwJiB0aHJlYWRHcm91
cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL01haW5UaHJlYWRDb2NvYS5tbSBi
L1NvdXJjZS9XVEYvd3RmL2NvY29hL01haW5UaHJlYWRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzky
NjNmZjk1ZTgxZDdjZjMyMTA5NWQwZTg1MzE1MzYyYzM2MjBhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvY29jb2EvTWFpblRocmVhZENvY29hLm1tCkBAIC0wLDAgKzEsMjMwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWFpblRocmVhZC5oIgorCisjaW1wb3J0IDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1Ro
cmVhZC5oPgorI2ltcG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbXBvcnQgPHN0ZGlvLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIuaD4KKyNp
bXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShXRUJfVEhSRUFEKQorI2luY2x1ZGUg
PHd0Zi9pb3MvV2ViQ29yZVRocmVhZC5oPgorI2VuZGlmCisKK0BpbnRlcmZhY2UgSlNXVEZNYWlu
VGhyZWFkQ2FsbGVyIDogTlNPYmplY3QKKy0gKHZvaWQpY2FsbDsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIEpTV1RGTWFpblRocmVhZENhbGxlcgorCistICh2b2lkKWNhbGwKK3sKKyAgICBXVEY6
OmRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKTsKK30KKworQGVuZAorCituYW1lc3Bh
Y2UgV1RGIHsKKworc3RhdGljIEpTV1RGTWFpblRocmVhZENhbGxlciogc3RhdGljTWFpblRocmVh
ZENhbGxlcjsKK3N0YXRpYyBib29sIGlzVGltZXJQb3N0ZWQ7IC8vIFRoaXMgaXMgb25seSBhY2Nl
c3NlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCitzdGF0aWMgYm9vbCBtYWluVGhyZWFkRXN0YWJsaXNo
ZWRBc1B0aHJlYWRNYWluIHsgZmFsc2UgfTsKK3N0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVhZFB0
aHJlYWQgeyBudWxscHRyIH07CitzdGF0aWMgTlNUaHJlYWQqIG1haW5UaHJlYWROU1RocmVhZCB7
IG51bGxwdHIgfTsKKworI2lmIFVTRShXRUJfVEhSRUFEKQorc3RhdGljIFRocmVhZCogc0FwcGxp
Y2F0aW9uVUlUaHJlYWQ7CitzdGF0aWMgVGhyZWFkKiBzV2ViVGhyZWFkOworI2VuZGlmCisKK3Zv
aWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCit7CisgICAgQVNTRVJUKCFzdGF0aWNN
YWluVGhyZWFkQ2FsbGVyKTsKKyAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1h
aW5UaHJlYWRDYWxsZXIgYWxsb2NdIGluaXRdOworCisjaWYgIVVTRShXRUJfVEhSRUFEKQorICAg
IG1haW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1haW4gPSBmYWxzZTsKKyAgICBtYWluVGhy
ZWFkUHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworICAgIG1haW5UaHJlYWROU1RocmVhZCA9IFtO
U1RocmVhZCBjdXJyZW50VGhyZWFkXTsKKyNlbHNlCisgICAgbWFpblRocmVhZEVzdGFibGlzaGVk
QXNQdGhyZWFkTWFpbiA9IHRydWU7CisgICAgQVNTRVJUKCFtYWluVGhyZWFkUHRocmVhZCk7Cisg
ICAgQVNTRVJUKCFtYWluVGhyZWFkTlNUaHJlYWQpOworI2VuZGlmCit9CisKKyNpZiAhVVNFKFdF
Ql9USFJFQUQpCit2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBs
YXRmb3JtKCkKK3sKKyAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBOU0xvZyhA
IldlYktpdCBUaHJlYWRpbmcgVmlvbGF0aW9uIC0gaW5pdGlhbCB1c2Ugb2YgV2ViS2l0IGZyb20g
YSBzZWNvbmRhcnkgdGhyZWFkLiIpOworCisgICAgQVNTRVJUKCFzdGF0aWNNYWluVGhyZWFkQ2Fs
bGVyKTsKKyAgICBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gW1tKU1dURk1haW5UaHJlYWRDYWxs
ZXIgYWxsb2NdIGluaXRdOworCisgICAgbWFpblRocmVhZEVzdGFibGlzaGVkQXNQdGhyZWFkTWFp
biA9IHRydWU7CisgICAgbWFpblRocmVhZFB0aHJlYWQgPSAwOworICAgIG1haW5UaHJlYWROU1Ro
cmVhZCA9IG5pbDsKK30KKyNlbmRpZiAvLyAhVVNFKFdFQl9USFJFQUQpCisKK3N0YXRpYyB2b2lk
IHRpbWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQqKQoreworICAgIENGUmVs
ZWFzZSh0aW1lcik7CisgICAgaXNUaW1lclBvc3RlZCA9IGZhbHNlOworCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgcG9zdFRpbWVyKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKGlzVGltZXJQb3N0ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlzVGltZXJQb3N0ZWQgPSB0cnVlOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgMCwgMCwgMCwgMCwgdGlt
ZXJGaXJlZCwgMCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Cit9CisKK3ZvaWQgc2NoZWR1bGVE
aXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKHN0YXRpY01haW5U
aHJlYWRDYWxsZXIpOworCisgICAgaWYgKGlzV2ViVGhyZWFkKCkpIHsKKyAgICAgICAgcG9zdFRp
bWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1haW5UaHJlYWRF
c3RhYmxpc2hlZEFzUHRocmVhZE1haW4pIHsKKyAgICAgICAgQVNTRVJUKCFtYWluVGhyZWFkTlNU
aHJlYWQpOworICAgICAgICBbc3RhdGljTWFpblRocmVhZENhbGxlciBwZXJmb3JtU2VsZWN0b3JP
bk1haW5UaHJlYWQ6QHNlbGVjdG9yKGNhbGwpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6
Tk9dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1haW5UaHJlYWROU1Ro
cmVhZCk7CisgICAgW3N0YXRpY01haW5UaHJlYWRDYWxsZXIgcGVyZm9ybVNlbGVjdG9yOkBzZWxl
Y3RvcihjYWxsKSBvblRocmVhZDptYWluVGhyZWFkTlNUaHJlYWQgd2l0aE9iamVjdDpuaWwgd2Fp
dFVudGlsRG9uZTpOT107Cit9CisKK3ZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5j
T25NYWluVGhyZWFkKHZvaWQgKF5ibG9jaykoKSkKK3sKKyNpZiBVU0UoV0VCX1RIUkVBRCkKKyAg
ICBpZiAoV2ViQ29yZVdlYlRocmVhZElzRW5hYmxlZCAmJiBXZWJDb3JlV2ViVGhyZWFkSXNFbmFi
bGVkKCkpIHsKKyAgICAgICAgV2ViQ29yZVdlYlRocmVhZFJ1bihibG9jayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBibG9jayk7Cit9CisKKyNpZiBVU0UoV0VCX1RIUkVBRCkKK3N0YXRpYyBib29s
IHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpCit7CisgICAgcmV0
dXJuICFXZWJDb3JlV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkIHx8IFdlYkNvcmVXZWJUaHJl
YWRJc0xvY2tlZE9yRGlzYWJsZWQoKTsKK30KKworYm9vbCBpc01haW5UaHJlYWQoKQoreworICAg
IHJldHVybiAoaXNXZWJUaHJlYWQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSkgJiYgd2ViVGhyZWFk
SXNVbmluaXRpYWxpemVkT3JMb2NrZWRPckRpc2FibGVkKCk7Cit9CisKK2Jvb2wgaXNNYWluVGhy
ZWFkSWZJbml0aWFsaXplZCgpCit7CisgICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOworfQorCiti
b29sIGlzVUlUaHJlYWQoKQoreworICAgIHJldHVybiBwdGhyZWFkX21haW5fbnAoKTsKK30KKwor
Ly8gS2VlcCBpbiBtaW5kIHRoYXQgaXNXZWJUaHJlYWQgY2FuIGJlIGNhbGxlZCBldmVuIHdoZW4g
ZGVzdHJveWluZyB0aGUgY3VycmVudCB0aHJlYWQuCitib29sIGlzV2ViVGhyZWFkKCkKK3sKKyAg
ICByZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZFB0aHJlYWQp
OworfQorCit2b2lkIGluaXRpYWxpemVBcHBsaWNhdGlvblVJVGhyZWFkKCkKK3sKKyAgICBBU1NF
UlQocHRocmVhZF9tYWluX25wKCkpOworICAgIHNBcHBsaWNhdGlvblVJVGhyZWFkID0gJlRocmVh
ZDo6Y3VycmVudCgpOworfQorCit2b2lkIGluaXRpYWxpemVXZWJUaHJlYWRQbGF0Zm9ybSgpCit7
CisgICAgQVNTRVJUKCFwdGhyZWFkX21haW5fbnAoKSk7CisKKyAgICBtYWluVGhyZWFkRXN0YWJs
aXNoZWRBc1B0aHJlYWRNYWluID0gZmFsc2U7CisgICAgbWFpblRocmVhZFB0aHJlYWQgPSBwdGhy
ZWFkX3NlbGYoKTsKKyAgICBtYWluVGhyZWFkTlNUaHJlYWQgPSBbTlNUaHJlYWQgY3VycmVudFRo
cmVhZF07CisKKyAgICBzV2ViVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOworfQorCitib29s
IGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWQmIHRocmVhZCkKK3sKKyAg
ICBUaHJlYWQmIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKKyAgICBpZiAoJnRo
cmVhZCA9PSAmY3VycmVudFRocmVhZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
JnRocmVhZCA9PSBzV2ViVGhyZWFkIHx8ICZ0aHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQp
CisgICAgICAgIHJldHVybiAoJmN1cnJlbnRUaHJlYWQgPT0gc1dlYlRocmVhZCB8fCAmY3VycmVu
dFRocmVhZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZCkgJiYgd2ViVGhyZWFkSXNVbmluaXRpYWxp
emVkT3JMb2NrZWRPckRpc2FibGVkKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZWxzZQor
Ym9vbCBpc01haW5UaHJlYWQoKQoreworICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0
aHJlYWRNYWluKSB7CisgICAgICAgIEFTU0VSVCghbWFpblRocmVhZFB0aHJlYWQpOworICAgICAg
ICByZXR1cm4gcHRocmVhZF9tYWluX25wKCk7CisgICAgfQorCisgICAgQVNTRVJUKG1haW5UaHJl
YWRQdGhyZWFkKTsKKyAgICByZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFp
blRocmVhZFB0aHJlYWQpOworfQorCitib29sIGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQor
eworICAgIGlmIChtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluKQorICAgICAgICBy
ZXR1cm4gcHRocmVhZF9tYWluX25wKCk7CisgICAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRocmVh
ZF9zZWxmKCksIG1haW5UaHJlYWRQdGhyZWFkKTsKK30KKworI2VuZGlmIC8vIFVTRShXRUJfVEhS
RUFEKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dl
bmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9NYWlu
VGhyZWFkR2VuZXJpYy5jcHAKaW5kZXggOTFhZDJlNTM2YzEyYWRlNmRhMWMxMjJkMmMyODhjY2Ex
MjA0ZGQ0ZC4uNmQ4ZTQwZjBmMWIzMDIwNzFkZGExZGZhZDg3NTFiM2Y4NDczNzY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9NYWluVGhyZWFkR2VuZXJpYy5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvZ2VuZXJpYy9NYWluVGhyZWFkR2VuZXJpYy5jcHAKQEAgLTMwLDcgKzMw
LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1haW5UaHJlYWQu
aCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVk
ZSA8cHRocmVhZF9ucC5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2lm
IFVTRShHTElCKQpAQCAtMzksNiArNDIsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKKyNpZiAh
SEFWRShQVEhSRUFEX01BSU5fTlApCitzdGF0aWMgcHRocmVhZF90IG1haW5UaHJlYWQ7CisjZW5k
aWYKKwogY2xhc3MgTWFpblRocmVhZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIE1haW5UaHJl
YWREaXNwYXRjaGVyKCkKQEAgLTY1LDYgKzcyLDIzIEBAIGNsYXNzIE1haW5UaHJlYWREaXNwYXRj
aGVyIHsKIAogdm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKIHsKKyNpZiAhSEFW
RShQVEhSRUFEX01BSU5fTlApCisgICAgbWFpblRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworI2Vu
ZGlmCit9CisKK2Jvb2wgaXNNYWluVGhyZWFkKCkKK3sKKyNpZiBIQVZFKFBUSFJFQURfTUFJTl9O
UCkKKyAgICByZXR1cm4gcHRocmVhZF9tYWluX25wKCk7CisjZWxzZQorICAgIHJldHVybiBwdGhy
ZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkKTsKKyNlbmRpZgorfQorCitib29s
IGlzTWFpblRocmVhZElmSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBpc01haW5UaHJlYWQo
KTsKIH0KIAogdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tIGIvU291cmNlL1dU
Ri93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNkYjQyYWY2YTAwMjY4YjkzNGFiZTUwMGQ5OTE5YWQ2MmI4N2Y3NWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvbWFjL01haW5U
aHJlYWRNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotIAotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJNYWluVGhyZWFkLmgiCi0KLSNpbXBvcnQgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVGhyZWFkLmg+Ci0jaW1w
b3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2ltcG9ydCA8c3RkaW8uaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1NjaGVkdWxlUGFpci5oPgotI2ltcG9ydCA8d3RmL1Ro
cmVhZGluZy5oPgotCi0jaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSA8d3RmL2lvcy9XZWJD
b3JlVGhyZWFkLmg+Ci0jZW5kaWYKLQotQGludGVyZmFjZSBKU1dURk1haW5UaHJlYWRDYWxsZXIg
OiBOU09iamVjdAotLSAodm9pZCljYWxsOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gSlNXVEZN
YWluVGhyZWFkQ2FsbGVyCi0KLS0gKHZvaWQpY2FsbAotewotICAgIFdURjo6ZGlzcGF0Y2hGdW5j
dGlvbnNGcm9tTWFpblRocmVhZCgpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXVEYgewotCi1z
dGF0aWMgSlNXVEZNYWluVGhyZWFkQ2FsbGVyKiBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyOwotc3Rh
dGljIGJvb2wgaXNUaW1lclBvc3RlZDsgLy8gVGhpcyBpcyBvbmx5IGFjY2Vzc2VkIG9uIHRoZSBt
YWluIHRocmVhZC4KLXN0YXRpYyBib29sIG1haW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1h
aW4geyBmYWxzZSB9Owotc3RhdGljIHB0aHJlYWRfdCBtYWluVGhyZWFkUHRocmVhZCB7IG51bGxw
dHIgfTsKLXN0YXRpYyBOU1RocmVhZCogbWFpblRocmVhZE5TVGhyZWFkIHsgbnVsbHB0ciB9Owot
Ci0jaWYgVVNFKFdFQl9USFJFQUQpCi1zdGF0aWMgVGhyZWFkKiBzQXBwbGljYXRpb25VSVRocmVh
ZDsKLXN0YXRpYyBUaHJlYWQqIHNXZWJUaHJlYWQ7Ci0jZW5kaWYKLQotdm9pZCBpbml0aWFsaXpl
TWFpblRocmVhZFBsYXRmb3JtKCkKLXsKLSAgICBBU1NFUlQoIXN0YXRpY01haW5UaHJlYWRDYWxs
ZXIpOwotICAgIHN0YXRpY01haW5UaHJlYWRDYWxsZXIgPSBbW0pTV1RGTWFpblRocmVhZENhbGxl
ciBhbGxvY10gaW5pdF07Ci0KLSNpZiAhVVNFKFdFQl9USFJFQUQpCi0gICAgbWFpblRocmVhZEVz
dGFibGlzaGVkQXNQdGhyZWFkTWFpbiA9IGZhbHNlOwotICAgIG1haW5UaHJlYWRQdGhyZWFkID0g
cHRocmVhZF9zZWxmKCk7Ci0gICAgbWFpblRocmVhZE5TVGhyZWFkID0gW05TVGhyZWFkIGN1cnJl
bnRUaHJlYWRdOwotI2Vsc2UKLSAgICBtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWlu
ID0gdHJ1ZTsKLSAgICBBU1NFUlQoIW1haW5UaHJlYWRQdGhyZWFkKTsKLSAgICBBU1NFUlQoIW1h
aW5UaHJlYWROU1RocmVhZCk7Ci0jZW5kaWYKLX0KLQotI2lmICFVU0UoV0VCX1RIUkVBRCkKLXZv
aWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkUGxhdGZvcm0oKQotewot
ICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpCi0gICAgICAgIE5TTG9nKEAiV2ViS2l0IFRocmVh
ZGluZyBWaW9sYXRpb24gLSBpbml0aWFsIHVzZSBvZiBXZWJLaXQgZnJvbSBhIHNlY29uZGFyeSB0
aHJlYWQuIik7Ci0KLSAgICBBU1NFUlQoIXN0YXRpY01haW5UaHJlYWRDYWxsZXIpOwotICAgIHN0
YXRpY01haW5UaHJlYWRDYWxsZXIgPSBbW0pTV1RGTWFpblRocmVhZENhbGxlciBhbGxvY10gaW5p
dF07Ci0KLSAgICBtYWluVGhyZWFkRXN0YWJsaXNoZWRBc1B0aHJlYWRNYWluID0gdHJ1ZTsKLSAg
ICBtYWluVGhyZWFkUHRocmVhZCA9IDA7Ci0gICAgbWFpblRocmVhZE5TVGhyZWFkID0gbmlsOwot
fQotI2VuZGlmIC8vICFVU0UoV0VCX1RIUkVBRCkKLQotc3RhdGljIHZvaWQgdGltZXJGaXJlZChD
RlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCopCi17Ci0gICAgQ0ZSZWxlYXNlKHRpbWVyKTsK
LSAgICBpc1RpbWVyUG9zdGVkID0gZmFsc2U7Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAg
ICAgICAgV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Ci0gICAgfQotfQot
Ci1zdGF0aWMgdm9pZCBwb3N0VGltZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBpZiAoaXNUaW1lclBvc3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNUaW1l
clBvc3RlZCA9IHRydWU7Ci0gICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3VycmVu
dCgpLCBDRlJ1bkxvb3BUaW1lckNyZWF0ZSgwLCAwLCAwLCAwLCAwLCB0aW1lckZpcmVkLCAwKSwg
a0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLX0KLQotdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rp
b25zT25NYWluVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoc3RhdGljTWFpblRocmVhZENhbGxlcik7
Ci0KLSAgICBpZiAoaXNXZWJUaHJlYWQoKSkgewotICAgICAgICBwb3N0VGltZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobWFpblRocmVhZEVzdGFibGlzaGVkQXNQ
dGhyZWFkTWFpbikgewotICAgICAgICBBU1NFUlQoIW1haW5UaHJlYWROU1RocmVhZCk7Ci0gICAg
ICAgIFtzdGF0aWNNYWluVGhyZWFkQ2FsbGVyIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpA
c2VsZWN0b3IoY2FsbCkgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobWFpblRocmVhZE5TVGhyZWFkKTsKLSAgICBb
c3RhdGljTWFpblRocmVhZENhbGxlciBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGNhbGwpIG9u
VGhyZWFkOm1haW5UaHJlYWROU1RocmVhZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5P
XTsKLX0KLQotdm9pZCBjYWxsT25XZWJUaHJlYWRPckRpc3BhdGNoQXN5bmNPbk1haW5UaHJlYWQo
dm9pZCAoXmJsb2NrKSgpKQotewotI2lmIFVTRShXRUJfVEhSRUFEKQotICAgIGlmIChXZWJDb3Jl
V2ViVGhyZWFkSXNFbmFibGVkICYmIFdlYkNvcmVXZWJUaHJlYWRJc0VuYWJsZWQoKSkgewotICAg
ICAgICBXZWJDb3JlV2ViVGhyZWFkUnVuKGJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGJs
b2NrKTsKLX0KLQotI2lmIFVTRShXRUJfVEhSRUFEKQotc3RhdGljIGJvb2wgd2ViVGhyZWFkSXNV
bmluaXRpYWxpemVkT3JMb2NrZWRPckRpc2FibGVkKCkKLXsKLSAgICByZXR1cm4gIVdlYkNvcmVX
ZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQgfHwgV2ViQ29yZVdlYlRocmVhZElzTG9ja2VkT3JE
aXNhYmxlZCgpOwotfQotCi1ib29sIGlzTWFpblRocmVhZCgpCi17Ci0gICAgcmV0dXJuIChpc1dl
YlRocmVhZCgpIHx8IHB0aHJlYWRfbWFpbl9ucCgpKSAmJiB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6
ZWRPckxvY2tlZE9yRGlzYWJsZWQoKTsKLX0KLQotYm9vbCBpc01haW5UaHJlYWRJZkluaXRpYWxp
emVkKCkKLXsKLSAgICByZXR1cm4gaXNNYWluVGhyZWFkKCk7Ci19Ci0KLWJvb2wgaXNVSVRocmVh
ZCgpCi17Ci0gICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOwotfQotCi0vLyBLZWVwIGluIG1p
bmQgdGhhdCBpc1dlYlRocmVhZCBjYW4gYmUgY2FsbGVkIGV2ZW4gd2hlbiBkZXN0cm95aW5nIHRo
ZSBjdXJyZW50IHRocmVhZC4KLWJvb2wgaXNXZWJUaHJlYWQoKQotewotICAgIHJldHVybiBwdGhy
ZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRocmVhZCk7Ci19Ci0KLXZvaWQg
aW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWQoKQotewotICAgIEFTU0VSVChwdGhyZWFkX21h
aW5fbnAoKSk7Ci0gICAgc0FwcGxpY2F0aW9uVUlUaHJlYWQgPSAmVGhyZWFkOjpjdXJyZW50KCk7
Ci19Ci0KLXZvaWQgaW5pdGlhbGl6ZVdlYlRocmVhZFBsYXRmb3JtKCkKLXsKLSAgICBBU1NFUlQo
IXB0aHJlYWRfbWFpbl9ucCgpKTsKLQotICAgIG1haW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVh
ZE1haW4gPSBmYWxzZTsKLSAgICBtYWluVGhyZWFkUHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwot
ICAgIG1haW5UaHJlYWROU1RocmVhZCA9IFtOU1RocmVhZCBjdXJyZW50VGhyZWFkXTsKLQotICAg
IHNXZWJUaHJlYWQgPSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZCYgdGhyZWFkKQotewotICAgIFRocmVhZCYgY3Vy
cmVudFRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwotICAgIGlmICgmdGhyZWFkID09ICZjdXJy
ZW50VGhyZWFkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgmdGhyZWFkID09IHNX
ZWJUaHJlYWQgfHwgJnRocmVhZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZCkKLSAgICAgICAgcmV0
dXJuICgmY3VycmVudFRocmVhZCA9PSBzV2ViVGhyZWFkIHx8ICZjdXJyZW50VGhyZWFkID09IHNB
cHBsaWNhdGlvblVJVGhyZWFkKSAmJiB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6ZWRPckxvY2tlZE9y
RGlzYWJsZWQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbHNlCi1ib29sIGlzTWFpblRo
cmVhZCgpCi17Ci0gICAgaWYgKG1haW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1haW4pIHsK
LSAgICAgICAgQVNTRVJUKCFtYWluVGhyZWFkUHRocmVhZCk7Ci0gICAgICAgIHJldHVybiBwdGhy
ZWFkX21haW5fbnAoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobWFpblRocmVhZFB0aHJlYWQpOwot
ICAgIHJldHVybiBwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRocmVh
ZCk7Ci19Ci0KLWJvb2wgaXNNYWluVGhyZWFkSWZJbml0aWFsaXplZCgpCi17Ci0gICAgaWYgKG1h
aW5UaHJlYWRFc3RhYmxpc2hlZEFzUHRocmVhZE1haW4pCi0gICAgICAgIHJldHVybiBwdGhyZWFk
X21haW5fbnAoKTsKLSAgICByZXR1cm4gcHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgbWFp
blRocmVhZFB0aHJlYWQpOwotfQotCi0jZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCi0KLX0gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRX
aW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCmluZGV4IGE2NDcz
ZDA3YjY3ZWFjYzg2YmU3YTRlYjY5NzQ5ODkzZWM2MTQ5N2YuLmUwZGYzMjI2Y2QzNWU5ODZiYmU4
MGY1NmRlOWY2ZDJjYzg5YzA0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9NYWlu
VGhyZWFkV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAK
QEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiBzdGF0aWMgSFdORCB0aHJlYWRpbmdX
aW5kb3dIYW5kbGU7CiBzdGF0aWMgVUlOVCB0aHJlYWRpbmdGaXJlZE1lc3NhZ2U7CiBjb25zdCBM
UENXU1RSIGtUaHJlYWRpbmdXaW5kb3dDbGFzc05hbWUgPSBMIlRocmVhZGluZ1dpbmRvd0NsYXNz
IjsKK3N0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1haW5UaHJlYWQgeyAwIH07CiAKIExSRVNVTFQg
Q0FMTEJBQ0sgVGhyZWFkaW5nV2luZG93V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKQEAgLTY0LDkgKzY1LDIxIEBAIHZvaWQg
aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAgICAgICAgIENXX1VTRURFRkFVTFQsIDAs
IENXX1VTRURFRkFVTFQsIDAsIEhXTkRfTUVTU0FHRSwgMCwgMCwgMCk7CiAgICAgdGhyZWFkaW5n
RmlyZWRNZXNzYWdlID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlVyhMImNvbS5hcHBsZS5XZWJLaXQu
TWFpblRocmVhZEZpcmVkIik7CiAKKyAgICBtYWluVGhyZWFkID0gVGhyZWFkOjpjdXJyZW50SUQo
KTsKKwogICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCgiTWFpbiBU
aHJlYWQiKTsKIH0KIAorYm9vbCBpc01haW5UaHJlYWQoKQoreworICAgIHJldHVybiBtYWluVGhy
ZWFkID09IFRocmVhZDo6Y3VycmVudElEKCk7Cit9CisKK2Jvb2wgaXNNYWluVGhyZWFkSWZJbml0
aWFsaXplZCgpCit7CisgICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOworfQorCiB2b2lkIHNjaGVk
dWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQogewogICAgIEFTU0VSVCh0aHJlYWRp
bmdXaW5kb3dIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24u
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZQppbmRleCA3NjMwM2MzOTI4
MjZmZDdiYmEyOWVjOTY0NmRhNzMyMWIxYjU0MzQwLi5kMDNkMjFiNmNkYTFmNGZhNmMxZTJjNzRk
NjUwYjNlMzU2NjU3ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZQpAQCAtMTM0LDYgKzEz
NCw3IEBAIFdFQktJVF9DSEVDS19IQVZFX0ZVTkNUSU9OKEhBVkVfVkFTUFJJTlRGIHZhc3ByaW50
ZikKIAogIyBDaGVjayBmb3Igc3ltYm9scwogV0VCS0lUX0NIRUNLX0hBVkVfU1lNQk9MKEhBVkVf
UkVHRVhfSCByZWdleGVjIHJlZ2V4LmgpCitXRUJLSVRfQ0hFQ0tfSEFWRV9TWU1CT0woSEFWRV9Q
VEhSRUFEX01BSU5fTlAgcHRocmVhZF9tYWluX25wIHB0aHJlYWRfbnAuaCkKICMgV2luZG93cyBo
YXMgc2lnbmFsLmggYnV0IGlzIG1pc3Npbmcgc3ltYm9scyB0aGF0IGFyZSB1c2VkIGluIGNhbGxz
IHRvIHNpZ25hbC4KIFdFQktJVF9DSEVDS19IQVZFX1NZTUJPTChIQVZFX1NJR05BTF9IIFNJR1RS
QVAgc2lnbmFsLmgpCiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4
ZTg2OTNiYjY1N2ZhOWIxZjk2ODAzMzM3MDRjZDA1MmFhZjVmYzA5Li41OWU1ZWRmZDEyMzNkMGFh
Yjk0YmQ1NTJhMTNiYmJjNjg5NzEyYjdlIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDktMjMgIFl1c3VrZSBTdXp1a2kgIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV1RGXSBNYWtlIGlzTWFpblRocmVh
ZCBtb3JlIHJlbGlhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlOgorCiAyMDE4LTA5LTIx
ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CiAKICAgICAgICAg
W0pTQ10gRW5hYmxlIExMSW50IEFTTSBpbnRlcnByZXRlciBvbiBYNjQgYW5kIEFSTTY0IGluIG5v
biBKSVQgY29uZmlndXJhdGlvbgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>