<?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>220115</bug_id>
          
          <creation_ts>2020-12-23 05:28:23 -0800</creation_ts>
          <short_desc>[GTK][WPE] UserInteractive threads are not Real-time in Linux</short_desc>
          <delta_ts>2021-10-20 01:27:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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=220150</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="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jasemabeed114</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pgriffis</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1716448</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-12-23 05:28:23 -0800</bug_when>
    <thetext>Currently UserInteractive threads created by the AudioWorklet seem to be RT only on Darwin which has HAVE(QOS_CLASSES) enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724265</commentid>
    <comment_count>1</comment_count>
      <attachid>418884</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-01 08:55:14 -0800</bug_when>
    <thetext>Created attachment 418884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724267</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-01 08:56:37 -0800</bug_when>
    <thetext>Just an early WIP experiment, doesn&apos;t work though:

RTPRIO soft limit is 0, hard is 0
Setting policy failed: Operation not permitted.

I guess it&apos;s related with flatpak and/or selinux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765243</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-05-30 13:03:09 -0700</bug_when>
    <thetext>Maybe we can use the rtkit (dbus) API: http://git.0pointer.net/rtkit.git/tree/README</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767221</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-06 09:39:02 -0700</bug_when>
    <thetext>I&apos;m not sure how I&apos;m supposed to use rtkit from a sandboxed process though... I would need the host PID of the WebProcess, within the sandbox... Otherwise rtkit won&apos;t find the infos of the PID to modify in the host /proc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767224</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-06 10:05:16 -0700</bug_when>
    <thetext>https://github.com/flatpak/xdg-desktop-portal/issues/355</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768657</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-10 12:06:13 -0700</bug_when>
    <thetext>I started a branch, but without a portal for rtkit it&apos;s useless. Next task would be to work on such portal I suppose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771656</commentid>
    <comment_count>7</comment_count>
      <attachid>431959</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-22 06:11:31 -0700</bug_when>
    <thetext>Created attachment 431959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771873</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-23 00:47:45 -0700</bug_when>
    <thetext>Why do we need to set the limits? isn&apos;t it enough if getting the limits with sched_get_priority_max?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771874</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-23 01:01:51 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #8)
&gt; Why do we need to set the limits? isn&apos;t it enough if getting the limits with
&gt; sched_get_priority_max?

That&apos;s what the first patch was doing, and failing, because the process needs special permissions to use this API.

I think that&apos;s why rtkit was written in the first place... To allow unprivileged processes to gain RT ability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771875</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-23 01:04:25 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #9)
&gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; Why do we need to set the limits? isn&apos;t it enough if getting the limits with
&gt; &gt; sched_get_priority_max?
&gt; 
&gt; That&apos;s what the first patch was doing, and failing, because the process
&gt; needs special permissions to use this API.
&gt; 
&gt; I think that&apos;s why rtkit was written in the first place... To allow
&gt; unprivileged processes to gain RT ability.

That&apos;s because of the sandbox or because of the process effective user?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771877</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-23 01:16:59 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #10)
&gt; (In reply to Philippe Normand from comment #9)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; &gt; Why do we need to set the limits? isn&apos;t it enough if getting the limits with
&gt; &gt; &gt; sched_get_priority_max?
&gt; &gt; 
&gt; &gt; That&apos;s what the first patch was doing, and failing, because the process
&gt; &gt; needs special permissions to use this API.
&gt; &gt; 
&gt; &gt; I think that&apos;s why rtkit was written in the first place... To allow
&gt; &gt; unprivileged processes to gain RT ability.
&gt; 
&gt; That&apos;s because of the sandbox or because of the process effective user?

Sandbox, at least. The first patch was failing here (see comment 2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772633</commentid>
    <comment_count>12</comment_count>
      <attachid>432258</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 06:09:07 -0700</bug_when>
    <thetext>Created attachment 432258
WIP patch

This works when sandbox is disabled, we would need a rtkit portal to make this work unser the sandbox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772635</commentid>
    <comment_count>13</comment_count>
      <attachid>432258</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-25 06:21:22 -0700</bug_when>
    <thetext>Comment on attachment 432258
WIP patch

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

&gt; Source/WTF/wtf/glib/RealTimeKit.cpp:2
&gt; + * Copyright (C) 2020 Jan-Michael Brummer &lt;jan.brummer@tabos.org&gt;

Is this accurate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772636</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 06:26:52 -0700</bug_when>
    <thetext>Some observations:

 - The patch doesn&apos;t allow to make the main thread real time. This is only used by the web process to match UI process (in mac), but our UI process is not real time.

 - We might consider to use nice value to make QOS::UserInitiated threads have a higher priority than QOS::Default. That requires to use rtkit too.

 - Thread::create() uses QOS::UserInitiated by default not QOS::Default.

 - WorkQueue::create() uses QOS::Default by default.

 - With a quick grep I can see these threads in every qos

QOS::UserInteractive: webaudio AudioWorkletThread (when isAudioContextRealTime is true), com.apple.WebKit.EventDispatcher, async scrolling thread and some others we don&apos;t currently use.

QOS::UserInitiated: org.webkit.DataURLDecoder, network process main thread and all Thread::create() calls not passing a qos value (I guess most of them).

QOS::Default: webaudio AudioWorkletThread (when isAudioContextRealTime is false), webaudio offline renderer, network process cache.

QOS::Utility: org.webkit.BlobUtility, WebResourceLoadStatisticsStore Process Data Queue

QOS::Background: network process cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772637</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 06:27:19 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #13)
&gt; Comment on attachment 432258 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432258&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/glib/RealTimeKit.cpp:2
&gt; &gt; + * Copyright (C) 2020 Jan-Michael Brummer &lt;jan.brummer@tabos.org&gt;
&gt; 
&gt; Is this accurate?

No I copy pasted the header license from other file :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772639</commentid>
    <comment_count>16</comment_count>
      <attachid>432259</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 06:28:19 -0700</bug_when>
    <thetext>Created attachment 432259
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772640</commentid>
    <comment_count>17</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-25 06:29:58 -0700</bug_when>
    <thetext>See also https://developer.apple.com/library/archive/documentation/Performance/Conceptual/power_efficiency_guidelines_osx/PrioritizeWorkAtTheTaskLevel.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772643</commentid>
    <comment_count>18</comment_count>
      <attachid>432259</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-25 06:40:03 -0700</bug_when>
    <thetext>Comment on attachment 432259
WIP patch

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

Honestly it&apos;s hard to see why it&apos;s useful to add a feature that only works when the web process sandbox is disabled, especially since we want to remove the ability to disable the sandbox in the GTK 4 API.

You&apos;re so close to making this actually work for real. What you currently have in RealTimeKit.cpp is pretty close to the entire portal implementation you&apos;d need in xdg-desktop-portal. It would just need some extra code to translate pids from the process&apos;s pid namespace to the host pid namespace. Then you&apos;d adjust the D-Bus calls to use the portal instead.

&gt; Source/WTF/wtf/Threading.cpp:351
&gt; +    // We don&apos;t allow to make the main thread real time.
&gt; +    if (isMainThread())
&gt; +        return;

The comment should say why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772669</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 07:28:37 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #18)
&gt; Comment on attachment 432259 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432259&amp;action=review
&gt; 
&gt; Honestly it&apos;s hard to see why it&apos;s useful to add a feature that only works
&gt; when the web process sandbox is disabled,

Because you can disable it if you want to get the features not working under the sandbox, like this one. And because this is a necessary first step required to make it work under the sandbox too.

&gt; especially since we want to remove
&gt; the ability to disable the sandbox in the GTK 4 API.

I don&apos;t, unless there aren&apos;t regressions. We already regressed several features introducing the sandbox, let&apos;s not make them mandatory at least.

&gt; You&apos;re so close to making this actually work for real.

It works for real, not everybody is enabling the sandbox in every single app. Or geolocation, power notification and printing don&apos;t work for real either? Should we remove those because they don&apos;t work for people/apps enabling the sandbox?

&gt; What you currently
&gt; have in RealTimeKit.cpp is pretty close to the entire portal implementation
&gt; you&apos;d need in xdg-desktop-portal. It would just need some extra code to
&gt; translate pids from the process&apos;s pid namespace to the host pid namespace.
&gt; Then you&apos;d adjust the D-Bus calls to use the portal instead.
&gt; 
&gt; &gt; Source/WTF/wtf/Threading.cpp:351
&gt; &gt; +    // We don&apos;t allow to make the main thread real time.
&gt; &gt; +    if (isMainThread())
&gt; &gt; +        return;
&gt; 
&gt; The comment should say why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772675</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-25 07:51:13 -0700</bug_when>
    <thetext>&gt; It works for real, not everybody is enabling the sandbox in every single
&gt; app. Or geolocation, power notification and printing don&apos;t work for real
&gt; either? Should we remove those because they don&apos;t work for people/apps
&gt; enabling the sandbox?

It&apos;s extremely inadvisable to run WebKit with the sandbox disabled. We should aim to fix all sandboxing regressions rather than allow disabling the sandbox. Geolocation should be easy because there is a location portal already. Battery status is a little harder because there&apos;s no portal for it, but we just have to write one, same as here. Printing might be tougher because we need to rewrite WebKitPrintOperation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772677</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 07:52:08 -0700</bug_when>
    <thetext>There&apos;s another problem of this approach, rtkit limits the amount of threads that can be made real time for a user and that&apos;s very easy to get with a few tabs open:

rtkit-daemon[934]: Warning: Reached maximum concurrent process limit for user &apos;1001&apos;, denying request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772679</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-25 07:54:28 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #20)
&gt; &gt; It works for real, not everybody is enabling the sandbox in every single
&gt; &gt; app. Or geolocation, power notification and printing don&apos;t work for real
&gt; &gt; either? Should we remove those because they don&apos;t work for people/apps
&gt; &gt; enabling the sandbox?
&gt; 
&gt; It&apos;s extremely inadvisable to run WebKit with the sandbox disabled. We
&gt; should aim to fix all sandboxing regressions rather than allow disabling the
&gt; sandbox. Geolocation should be easy because there is a location portal
&gt; already. Battery status is a little harder because there&apos;s no portal for it,
&gt; but we just have to write one, same as here. Printing might be tougher
&gt; because we need to rewrite WebKitPrintOperation.

And a11y. Sure, let&apos;s fix the regressions, but I won&apos;t block new features that don&apos;t work under the sandbox for the same reason we introduced the sandbox with so many known regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772731</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-25 11:24:37 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #21)
&gt; There&apos;s another problem of this approach, rtkit limits the amount of threads
&gt; that can be made real time for a user and that&apos;s very easy to get with a few
&gt; tabs open:
&gt; 
&gt; rtkit-daemon[934]: Warning: Reached maximum concurrent process limit for
&gt; user &apos;1001&apos;, denying request.

Hm, is it maybe possible to change the thread back to non-rt status when the page is not visible? I&apos;m sure that&apos;s harder, but each app should only have one foreground page at a time, right? That should help.

(If it&apos;s any consolation, Epiphany web processes currently start crashing on startup after something like 80 web processes are opened, which is the point where it runs out of inotify handles. So I won&apos;t lose much sleep over failure to make the thread realtime. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772865</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-26 00:31:12 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #23)
&gt; (In reply to Carlos Garcia Campos from comment #21)
&gt; &gt; There&apos;s another problem of this approach, rtkit limits the amount of threads
&gt; &gt; that can be made real time for a user and that&apos;s very easy to get with a few
&gt; &gt; tabs open:
&gt; &gt; 
&gt; &gt; rtkit-daemon[934]: Warning: Reached maximum concurrent process limit for
&gt; &gt; user &apos;1001&apos;, denying request.
&gt; 
&gt; Hm, is it maybe possible to change the thread back to non-rt status when the
&gt; page is not visible? I&apos;m sure that&apos;s harder, but each app should only have
&gt; one foreground page at a time, right? That should help.

Indeed, I thought about that. That means we would need to handle the real time threads from the WebKit layer somehow, because WTF doesn&apos;t know if a particular thread blongs to a page visible or hidden. I think we could add a ThreadGroup for real time threads, when a thread is created or promoted to real time it&apos;s added to the group. Then we would need to monitor the group from the web process to actually promote the threads in the group to real time when page is visible and demote when hidden. Problem here is when we have more than one page in the same web process. If we end up handling real time threads from the wk layer, maybe we could forward the requests to the UI process to escape the sandbox too.

Another thing I&apos;ve realized is that we should probably need to handle SIGXCPU signal, to demote real time threads and avoid crashes.

&gt; (If it&apos;s any consolation, Epiphany web processes currently start crashing on
&gt; startup after something like 80 web processes are opened, which is the point
&gt; where it runs out of inotify handles. So I won&apos;t lose much sleep over
&gt; failure to make the thread realtime. :)

wow 80 processes are a lot in any case. RealtimeKit allows 15 processes per user and 25 threads per user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772866</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-26 00:42:54 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #24)
&gt; (In reply to Michael Catanzaro from comment #23)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #21)
&gt; &gt; &gt; There&apos;s another problem of this approach, rtkit limits the amount of threads
&gt; &gt; &gt; that can be made real time for a user and that&apos;s very easy to get with a few
&gt; &gt; &gt; tabs open:
&gt; &gt; &gt; 
&gt; &gt; &gt; rtkit-daemon[934]: Warning: Reached maximum concurrent process limit for
&gt; &gt; &gt; user &apos;1001&apos;, denying request.
&gt; &gt; 
&gt; &gt; Hm, is it maybe possible to change the thread back to non-rt status when the
&gt; &gt; page is not visible? I&apos;m sure that&apos;s harder, but each app should only have
&gt; &gt; one foreground page at a time, right? That should help.
&gt; 
&gt; Indeed, I thought about that. That means we would need to handle the real
&gt; time threads from the WebKit layer somehow, because WTF doesn&apos;t know if a
&gt; particular thread blongs to a page visible or hidden. I think we could add a
&gt; ThreadGroup for real time threads, when a thread is created or promoted to
&gt; real time it&apos;s added to the group. Then we would need to monitor the group
&gt; from the web process to actually promote the threads in the group to real
&gt; time when page is visible and demote when hidden. Problem here is when we
&gt; have more than one page in the same web process.

This shouldn&apos;t be a problem, the scrolling thread and EventDispatcher are both singletons.

&gt; If we end up handling real
&gt; time threads from the wk layer, maybe we could forward the requests to the
&gt; UI process to escape the sandbox too.
&gt; 
&gt; Another thing I&apos;ve realized is that we should probably need to handle
&gt; SIGXCPU signal, to demote real time threads and avoid crashes.
&gt; 
&gt; &gt; (If it&apos;s any consolation, Epiphany web processes currently start crashing on
&gt; &gt; startup after something like 80 web processes are opened, which is the point
&gt; &gt; where it runs out of inotify handles. So I won&apos;t lose much sleep over
&gt; &gt; failure to make the thread realtime. :)
&gt; 
&gt; wow 80 processes are a lot in any case. RealtimeKit allows 15 processes per
&gt; user and 25 threads per user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772867</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-26 00:46:32 -0700</bug_when>
    <thetext>And I think we can forget about implementing UserInitiated threads using nice value, because they are a lot more and we will reach the rtkit limit easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772875</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-26 06:01:20 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #24)
&gt; If we end up handling real
&gt; time threads from the wk layer, maybe we could forward the requests to the
&gt; UI process to escape the sandbox too.

It would only work for the bubblewrap sandbox. Under flatpak, the UI process is sandboxed too, so it would still fail unless it uses a portal.

&gt; wow 80 processes are a lot in any case. RealtimeKit allows 15 processes per
&gt; user and 25 threads per user.

Firefox users expect to be able to open hundreds of browser tabs. They probably don&apos;t expect hundreds of browser tabs to all get the realtime scheduler, though. So if we can make it just the visible tab, that would be amazing. Maybe also tabs that are playing audio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772876</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-26 06:09:39 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #26)
&gt; And I think we can forget about implementing UserInitiated threads using
&gt; nice value, because they are a lot more and we will reach the rtkit limit
&gt; easily.

The nice value is honestly pretty useless. I guess it&apos;s better than nothing, but I doubt it would have much impact in practice.

Whereas the realtime scheduler is a really big hammer that allows you to always preempt all non-realtime processes on the system. I&apos;m actually not sure if it&apos;s safe to use for web content without some way to ensure that a JavaScript &lt;script&gt;while(1);&lt;/script&gt; loop won&apos;t hang the entire system. The risk is that the realtime web process would always preempt the UI process, preventing the UI process from activating the unresponsive web process killing. Maybe the UI process main thread needs to be realtime too?

I didn&apos;t know about SIGXCPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772922</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-27 01:45:26 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #27)
&gt; (In reply to Carlos Garcia Campos from comment #24)
&gt; &gt; If we end up handling real
&gt; &gt; time threads from the wk layer, maybe we could forward the requests to the
&gt; &gt; UI process to escape the sandbox too.
&gt; 
&gt; It would only work for the bubblewrap sandbox. Under flatpak, the UI process
&gt; is sandboxed too, so it would still fail unless it uses a portal.

Then it&apos;s better to handle it in the web process and wait for the portal to make it work under the sandbox.

&gt; &gt; wow 80 processes are a lot in any case. RealtimeKit allows 15 processes per
&gt; &gt; user and 25 threads per user.
&gt; 
&gt; Firefox users expect to be able to open hundreds of browser tabs. They
&gt; probably don&apos;t expect hundreds of browser tabs to all get the realtime
&gt; scheduler, though. So if we can make it just the visible tab, that would be
&gt; amazing. Maybe also tabs that are playing audio.

I guess firefox demotes to non real time threads of non visible tabs, or maybe they only use it for audio thread, I don&apos;t know what firefox does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772924</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-27 01:59:01 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #28)
&gt; (In reply to Carlos Garcia Campos from comment #26)
&gt; &gt; And I think we can forget about implementing UserInitiated threads using
&gt; &gt; nice value, because they are a lot more and we will reach the rtkit limit
&gt; &gt; easily.
&gt; 
&gt; The nice value is honestly pretty useless. I guess it&apos;s better than nothing,
&gt; but I doubt it would have much impact in practice.

I don&apos;t know.

&gt; Whereas the realtime scheduler is a really big hammer that allows you to
&gt; always preempt all non-realtime processes on the system. I&apos;m actually not
&gt; sure if it&apos;s safe to use for web content without some way to ensure that a
&gt; JavaScript &lt;script&gt;while(1);&lt;/script&gt; loop won&apos;t hang the entire system.

JavaScript runs in the main thread, that we don&apos;t allow to make real time. Only even handler, async scrolling and webaudio threads are real time.

&gt; The
&gt; risk is that the realtime web process would always preempt the UI process,
&gt; preventing the UI process from activating the unresponsive web process
&gt; killing. Maybe the UI process main thread needs to be realtime too?
&gt; 
&gt; I didn&apos;t know about SIGXCPU.

To prevent those situation of blocking the entire system, rtkit requires you to set a RLIMIT_RTTIME, which is the amount of CPU time that a real time process can consume without making a blocking system call. SIGXCPU signal is sent when the soft limit is reached, if not handled or if the process keeps consuming CPU time, a new SIGXCPU is called every second until the hard limit is reached and then SIGKILL is sent.

Setting this limit is a requirement to use rtkit, but rtkit also imposes a maximum value you can set as limit (see RTTimeUSecMax property we get) of 200ms. This is another reason why we can&apos;t make main threads real time, I think it&apos;s easy to reach this limit in the main thread.

So, to avoid being killed, I think we should handle the SIGXCPU signal and demote the thread to non-real time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773014</commentid>
    <comment_count>31</comment_count>
      <attachid>432378</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-28 03:39:52 -0700</bug_when>
    <thetext>Created attachment 432378
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774636</commentid>
    <comment_count>32</comment_count>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-02 18:35:36 -0700</bug_when>
    <thetext>A portal for this was submitted upstream: https://github.com/flatpak/xdg-desktop-portal/pull/600</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776150</commentid>
    <comment_count>33</comment_count>
      <attachid>432378</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-10 11:14:31 -0700</bug_when>
    <thetext>Comment on attachment 432378
WIP patch

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

&gt; Source/WTF/wtf/posix/ThreadingPOSIX.cpp:308
&gt; +            LOG_ERROR(&quot;Failed to set sched policy %d for thread %d: %s&quot;, policy, threadHandle, strerror(error));

../Source/WTF/wtf/posix/ThreadingPOSIX.cpp:308:23: warning: format ‘%d’ expects argument of type ‘int’, but argument 6 has type ‘pthread_t’ {aka ‘long unsigned int’} [-Wformat=]
  308 |             LOG_ERROR(&quot;Failed to set sched policy %d for thread %d: %s&quot;, policy, threadHandle, strerror(error));
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~          ~~~~~~~~~~~~
      |                                                                                  |
      |                                                                                  pthread_t {aka long unsigned int}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776153</commentid>
    <comment_count>34</comment_count>
      <attachid>433265</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-10 12:21:20 -0700</bug_when>
    <thetext>Created attachment 433265
Add Realtime portal support

This is a quick patch adding support for the Realtime portal on top of your patch.

Its fairly straightforward but perhaps could be cleaned up.

I did have to increase the timeout otherwise the portal would hit it occasionally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776154</commentid>
    <comment_count>35</comment_count>
      <attachid>433266</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-10 12:26:06 -0700</bug_when>
    <thetext>Created attachment 433266
Add Realtime portal support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776155</commentid>
    <comment_count>36</comment_count>
      <attachid>433267</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-10 12:38:35 -0700</bug_when>
    <thetext>Created attachment 433267
Add Realtime portal support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777718</commentid>
    <comment_count>37</comment_count>
      <attachid>433267</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-07-17 13:47:09 -0700</bug_when>
    <thetext>Comment on attachment 433267
Add Realtime portal support

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

&gt; Source/WTF/wtf/glib/RealTimeKit.cpp:81
&gt; +        GRefPtr&lt;GVariant&gt; result = g_dbus_proxy_call_sync (proxy.get(), &quot;org.freedesktop.DBus.Properties.Get&quot;,

Missing adoptGRef() I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777778</commentid>
    <comment_count>38</comment_count>
      <attachid>433758</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-07-18 13:23:10 -0700</bug_when>
    <thetext>Created attachment 433758
Add Realtime portal support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804786</commentid>
    <comment_count>39</comment_count>
      <attachid>441371</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-15 06:41:09 -0700</bug_when>
    <thetext>Created attachment 441371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804810</commentid>
    <comment_count>40</comment_count>
      <attachid>441371</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-15 08:14:45 -0700</bug_when>
    <thetext>Comment on attachment 441371
Patch

Lots of unhappy EWS here. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804817</commentid>
    <comment_count>41</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-15 08:21:35 -0700</bug_when>
    <thetext>*** Bug 227529 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804824</commentid>
    <comment_count>42</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-10-15 08:35:40 -0700</bug_when>
    <thetext>(In reply to Patrick Griffis from comment #32)
&gt; A portal for this was submitted upstream:
&gt; https://github.com/flatpak/xdg-desktop-portal/pull/600

What&apos;s left to have this merged?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805538</commentid>
    <comment_count>43</comment_count>
      <attachid>441589</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-18 05:19:42 -0700</bug_when>
    <thetext>Created attachment 441589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805557</commentid>
    <comment_count>44</comment_count>
      <attachid>441595</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-18 06:25:03 -0700</bug_when>
    <thetext>Created attachment 441595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805598</commentid>
    <comment_count>45</comment_count>
      <attachid>441595</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-18 08:59:30 -0700</bug_when>
    <thetext>Comment on attachment 441595
Patch

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

Looks mostly good. Couple issues:

&gt; Source/WTF/wtf/linux/RealTimeThreads.cpp:128
&gt; +        LOG_ERROR(&quot;Failed to set current thread as real time: %s&quot;, strerror(error));

I will complain about strerr below.

&gt; Source/WTF/wtf/linux/RealTimeThreads.cpp:173
&gt; +    RELEASE_ASSERT_NOT_REACHED();

Woah! We assert if an rtkit properly is invalid. That&apos;s not programmer error in WebKit, and it&apos;s not enough reason to crash either. Instead, call g_set_error_literal() with some canned message and return -1.

&gt; Source/WTF/wtf/linux/RealTimeThreads.h:63
&gt; +#if USE(GLIB)
&gt; +    std::optional&lt;GRefPtr&lt;GDBusProxy&gt;&gt; m_realTimeKitProxy;
&gt; +    RunLoop::Timer&lt;RealTimeThreads&gt; m_discardRealTimeKitProxyTimer;
&gt; +#endif

You&apos;re careful to lock access to m_threadGroup, and to use m_enabled only on the main thread, but I see no such care with m_realTimeKitProxy and m_discardRealTimeKitProxyTimer. I think these both need to be guarded by a mutex. Correct?

&gt; Source/WTF/wtf/posix/ThreadingPOSIX.cpp:308
&gt; +            LOG_ERROR(&quot;Failed to set sched policy %d for thread %d: %s&quot;, policy, threadHandle, strerror(error));

Careful! strerror is not threadsafe and cannot be safely used *anywhere* in WebKit, or in other libraries too. (It returns a pointer to static data that, sadly, may be mutated by another thread.) Since g_strerror is not available here, you have to use strerror_r instead, which is frustratingly awkward to use since you have to manually allocate a buffer for the error string and then free it. But it&apos;s even worse, because glibc sabotaged everything by implementing it differently than POSIX, see http://club.cc.cmu.edu/~cmccabe/blog_strerror.html, and it&apos;s impossible to write code that is compatible with both versions, so it&apos;s all just such a huge pain to do correctly.

Anyway, there are a few other places in WebKit that make the same mistake, so you might want to define a wrapper in WTF that works similarly to g_strerror and avoids the problem. If you don&apos;t want to spend time on that, honestly the easiest thing to do would be to not print the error message, or just print it as an integer code. Actually using strerror_r requires extreme care. To get the standard version, you need (_POSIX_C_SOURCE &gt;= 200112L) &amp;&amp; ! _GNU_SOURCE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805602</commentid>
    <comment_count>46</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-18 09:01:50 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #42)
&gt; What&apos;s left to have this merged?

Unresolved discussion regarding the API: https://github.com/flatpak/xdg-desktop-portal/pull/600#discussion_r676350479</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805679</commentid>
    <comment_count>47</comment_count>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-10-18 12:39:42 -0700</bug_when>
    <thetext>I&apos;ll get the PR merged today or tomorrow. I also made the API more simple so my earlier patches can be ignored. Its the same API just a different bus name now basically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805680</commentid>
    <comment_count>48</comment_count>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-10-18 12:43:28 -0700</bug_when>
    <thetext>And I think it will be cleaner to just accept this patch without the portal backend until bug 231670 is merged which changes how portals are used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805688</commentid>
    <comment_count>49</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-18 12:50:30 -0700</bug_when>
    <thetext>(In reply to Patrick Griffis from comment #48)
&gt; And I think it will be cleaner to just accept this patch without the portal
&gt; backend until bug 231670 is merged which changes how portals are used.

That already landed this morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805694</commentid>
    <comment_count>50</comment_count>
      <attachid>441635</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2021-10-18 13:10:02 -0700</bug_when>
    <thetext>Created attachment 441635
[PATCH] Update realtime portal usage

This is the diff to use the latest portal changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805745</commentid>
    <comment_count>51</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-18 15:40:40 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #45)
&gt; Anyway, there are a few other places in WebKit that make the same mistake,
&gt; so you might want to define a wrapper in WTF that works similarly to
&gt; g_strerror and avoids the problem. If you don&apos;t want to spend time on that,
&gt; honestly the easiest thing to do would be to not print the error message, or
&gt; just print it as an integer code. Actually using strerror_r requires extreme
&gt; care. To get the standard version, you need (_POSIX_C_SOURCE &gt;= 200112L) &amp;&amp;
&gt; ! _GNU_SOURCE.

Adrian inspired me to do something about this: bug #231913.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805926</commentid>
    <comment_count>52</comment_count>
      <attachid>441595</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-19 02:29:02 -0700</bug_when>
    <thetext>Comment on attachment 441595
Patch

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

&gt;&gt; Source/WTF/wtf/linux/RealTimeThreads.cpp:128
&gt;&gt; +        LOG_ERROR(&quot;Failed to set current thread as real time: %s&quot;, strerror(error));
&gt; 
&gt; I will complain about strerr below.

This is always called in the main thread.

&gt;&gt; Source/WTF/wtf/linux/RealTimeThreads.cpp:173
&gt;&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; 
&gt; Woah! We assert if an rtkit properly is invalid. That&apos;s not programmer error in WebKit, and it&apos;s not enough reason to crash either. Instead, call g_set_error_literal() with some canned message and return -1.

That would mean it&apos;s not the rtkit service we expect to talk to, we always expect the properties to be either a int64 or int32.

&gt;&gt; Source/WTF/wtf/linux/RealTimeThreads.h:63
&gt;&gt; +#endif
&gt; 
&gt; You&apos;re careful to lock access to m_threadGroup, and to use m_enabled only on the main thread, but I see no such care with m_realTimeKitProxy and m_discardRealTimeKitProxyTimer. I think these both need to be guarded by a mutex. Correct?

RunLoop::Timer is thread safe. it&apos;s a *main loop* timer, so the callback is always called in the main thread. And m_realTimeKitProxy is also called in the main thread only, because promoteThreadToRealTime() is always called in the main thread.

&gt;&gt; Source/WTF/wtf/posix/ThreadingPOSIX.cpp:308
&gt;&gt; +            LOG_ERROR(&quot;Failed to set sched policy %d for thread %d: %s&quot;, policy, threadHandle, strerror(error));
&gt; 
&gt; Careful! strerror is not threadsafe and cannot be safely used *anywhere* in WebKit, or in other libraries too. (It returns a pointer to static data that, sadly, may be mutated by another thread.) Since g_strerror is not available here, you have to use strerror_r instead, which is frustratingly awkward to use since you have to manually allocate a buffer for the error string and then free it. But it&apos;s even worse, because glibc sabotaged everything by implementing it differently than POSIX, see http://club.cc.cmu.edu/~cmccabe/blog_strerror.html, and it&apos;s impossible to write code that is compatible with both versions, so it&apos;s all just such a huge pain to do correctly.
&gt; 
&gt; Anyway, there are a few other places in WebKit that make the same mistake, so you might want to define a wrapper in WTF that works similarly to g_strerror and avoids the problem. If you don&apos;t want to spend time on that, honestly the easiest thing to do would be to not print the error message, or just print it as an integer code. Actually using strerror_r requires extreme care. To get the standard version, you need (_POSIX_C_SOURCE &gt;= 200112L) &amp;&amp; ! _GNU_SOURCE.

Yes, I followed the pattern of the previous LOG_ERROR in this function...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805931</commentid>
    <comment_count>53</comment_count>
      <attachid>441705</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-19 03:04:04 -0700</bug_when>
    <thetext>Created attachment 441705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805986</commentid>
    <comment_count>54</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-19 07:34:07 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #52)
&gt; This is always called in the main thread.

That doesn&apos;t mean it&apos;s OK to use.

Anyway, we have bug #231913 for this. I suppose I can always just update the patch there if this one lands first.

&gt; &gt;&gt; Source/WTF/wtf/linux/RealTimeThreads.cpp:173
&gt; &gt;&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; Woah! We assert if an rtkit properly is invalid. That&apos;s not programmer error in WebKit, and it&apos;s not enough reason to crash either. Instead, call g_set_error_literal() with some canned message and return -1.
&gt; 
&gt; That would mean it&apos;s not the rtkit service we expect to talk to, we always
&gt; expect the properties to be either a int64 or int32.

That&apos;s not a WebKit programmer error, so assert is definitely inappropriate.

Crashing seems inappropriate too. What&apos;s wrong with returning a normal error.

&gt; RunLoop::Timer is thread safe. it&apos;s a *main loop* timer, so the callback is
&gt; always called in the main thread. And m_realTimeKitProxy is also called in
&gt; the main thread only, because promoteThreadToRealTime() is always called in
&gt; the main thread.

OK, can you add some ASSERT(isMainThread()) then? That would make the safety easier to see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805987</commentid>
    <comment_count>55</comment_count>
      <attachid>441705</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-19 07:36:32 -0700</bug_when>
    <thetext>Comment on attachment 441705
Patch

OK, I see you handled everything except the strerror, which we can address separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806540</commentid>
    <comment_count>56</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-20 01:26:52 -0700</bug_when>
    <thetext>Committed r284525 (243268@main): &lt;https://commits.webkit.org/243268@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806541</commentid>
    <comment_count>57</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-20 01:27:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/84452386&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418884</attachid>
            <date>2021-02-01 08:55:14 -0800</date>
            <delta_ts>2021-06-22 06:11:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220115-20210201085513.patch</filename>
            <type>text/plain</type>
            <size>5116</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDk0OTVkNmMxYjA4
YWE0ZGNmYzUwZGQxMzBlYTMzZjEzNjQyYmM5OTYuLjhmMGYwM2IyMGUxMTFmZDY2Mzg1Yzk2Mjhi
Mzg4NjdjOWQ2OGNlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xMDcsNiArMTA3LDkgQEAgcHVibGlj
OgogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190
IGRpc3BhdGNoUU9TQ2xhc3MoUU9TKTsKICNlbmRpZgorI2lmIEhBVkUoUFRIUkVBRF9TRVRTQ0hF
RFBBUkFNKQorICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IHBvbGljeUFuZFByaW9yaXR5
RnJvbVFPU0NsYXNzKFFPUyk7CisjZW5kaWYKIAogICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0
aHJlYWQgY3JlYXRpb24gZmFpbGVkLgogICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEg
bGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhy
ZWFkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3Bw
IGIvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCmluZGV4IDllNzM2NGI4
NTZhNTY0ZjE2ZDJkNjJhZDE5ZjM3YzFjNmI2OGVmMzEuLjkxN2M1YzFjNGNhMTc1ZDM5MWVjMzI0
ZDJiOGQxZmFjZTg3ZGM5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVh
ZGluZ1BPU0lYLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5j
cHAKQEAgLTcwLDYgKzcwLDggQEAKICNlbmRpZgogCiAjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy9zeXNj
YWxsLmg+CiAjZW5kaWYKIApAQCAtMjYwLDYgKzI2MiwzMyBAQCBkaXNwYXRjaF9xb3NfY2xhc3Nf
dCBUaHJlYWQ6OmRpc3BhdGNoUU9TQ2xhc3MoUU9TIHFvcykKIH0KICNlbmRpZgogCisjaWYgSEFW
RShQVEhSRUFEX1NFVFNDSEVEUEFSQU0pCitzdGQ6OnBhaXI8aW50LCBpbnQ+IFRocmVhZDo6cG9s
aWN5QW5kUHJpb3JpdHlGcm9tUU9TQ2xhc3MoUU9TIHFvcykKK3sKKyAgICBzd2l0Y2ggKHFvcykg
eworICAgIGNhc2UgUU9TOjpVc2VySW50ZXJhY3RpdmU6IHsKKyAgICAgICAgaW50IHByaW9yaXR5
ID0gMzI7CisjaWYgSEFWRShQT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HKQorICAgICAgICBwcmlv
cml0eSA9IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfRklGTyk7CisjZW5kaWYKKyAgICAg
ICAgcmxpbWl0IGxpbWl0OworICAgICAgICBnZXRybGltaXQoUkxJTUlUX1JUUFJJTywgJmxpbWl0
KTsKKyAgICAgICAgcHJpb3JpdHkgPSBzdGQ6Om1pbihwcmlvcml0eSwgKGludCkgbGltaXQucmxp
bV9tYXggKTsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJwcmlvcml0eTogJWQiLCBwcmlvcml0eSk7
CisgICAgICAgIC8vIGlmIChwcmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybiB7IFNDSEVEX0ZJ
Rk8sIHByaW9yaXR5IH07CisgICAgICAgIC8vIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNl
IFFPUzo6VXNlckluaXRpYXRlZDoKKyAgICBjYXNlIFFPUzo6RGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHsgU0NIRURfT1RIRVIsIDAgfTsKKyAgICBjYXNlIFFPUzo6VXRpbGl0eToKKyAgICBjYXNl
IFFPUzo6QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIHsgU0NIRURfSURMRSwgMCB9OworICAg
IH0KK30KKyNlbmRpZgorCiBib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENv
bnRleHQqIGNvbnRleHQsIE9wdGlvbmFsPHNpemVfdD4gc3RhY2tTaXplLCBRT1MgcW9zKQogewog
ICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CkBAIC0yNjcsOCArMjk2LDYgQEAgYm9vbCBUaHJl
YWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBPcHRpb25hbDxz
aXplX3Q+IHN0YWNrU2kKICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CiAjaWYgSEFWRShR
T1NfQ0xBU1NFUykKICAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19jbGFzc19ucCgmYXR0ciwgZGlz
cGF0Y2hRT1NDbGFzcyhxb3MpLCAwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHFvcyk7CiAj
ZW5kaWYKICAgICBpZiAoc3RhY2tTaXplKQogICAgICAgICBwdGhyZWFkX2F0dHJfc2V0c3RhY2tz
aXplKCZhdHRyLCBzdGFja1NpemUudmFsdWUoKSk7CkBAIC0yNzgsNiArMzA1LDE5IEBAIGJvb2wg
VGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCwgT3B0aW9u
YWw8c2l6ZV90PiBzdGFja1NpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBw
dGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggY29udGV4dCAlcCIsIHd0ZlRocmVhZEVudHJ5
UG9pbnQsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorI2lmIEhBVkUo
UFRIUkVBRF9TRVRTQ0hFRFBBUkFNKQorICAgIGF1dG8gcG9saWN5QW5kUHJpb3JpdHkgPSBwb2xp
Y3lBbmRQcmlvcml0eUZyb21RT1NDbGFzcyhxb3MpOworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBw
YXJhbSA9IHsKKyAgICAgICAgLnNjaGVkX3ByaW9yaXR5ID0gcG9saWN5QW5kUHJpb3JpdHkuc2Vj
b25kCisgICAgfTsKKyAgICBlcnJvciA9IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSh0aHJlYWRIYW5k
bGUsIHBvbGljeUFuZFByaW9yaXR5LmZpcnN0LCAmcGFyYW0pOworICAgIGlmIChlcnJvcikgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byBzZXQgcHRocmVhZCBwb2xpY3kgYW5kIHBy
aW9yaXR5IGZvciBoYW5kbGUgJXAgOiAlZCIsICZ0aHJlYWRIYW5kbGUsIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHFvcyk7Cisj
ZW5kaWYKICAgICBlc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHRocmVhZEhhbmRsZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvZ2xp
Yi9XZWJQcm9jZXNzR0xpYi5jcHAKaW5kZXggZWM1MzQ3ZjY4YjZhNzU1NDQ0OTM0MmYwMzM0MmZi
ZjI5N2ZlYmI3OS4uYTRiYjAyOWY4NWU0MmNkOTFjMWY1OWM2NzFhYWIwZDdjYzk2OGY5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc0dMaWIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcApA
QCAtNTQsNiArNTQsOSBAQAogI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgiCiAj
ZW5kaWYKIAorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY5LDYg
KzcyLDIxIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhCiAgICAgYWRkU3VwcGxlbWVudDxVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlcj4oKTsKICNlbmRpZgogCisgICAgaW50IGU7CisgICAgc3RydWN0
IHJsaW1pdCBybDsKKworICAgIGlmIChnZXRybGltaXQoUkxJTUlUX1JUUFJJTywgJnJsKSAhPSAw
KSB7CisgICAgICAgIGUgPSBlcnJubzsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8g
Z2V0cmxpbWl0KCk6ICVzLiIsIHN0cmVycm9yKGUpKTsKKyAgICB9CisgICAgV1RGTG9nQWx3YXlz
KCJSVFBSSU8gc29mdCBsaW1pdCBpcyAlZCwgaGFyZCBpcyAlZCIsIChpbnQpcmwucmxpbV9jdXIs
IChpbnQpcmwucmxpbV9tYXgpOworICAgIHJsLnJsaW1fbWF4ID0gNDU7CisgICAgLy9uZXdMaW1p
dC5ybGltX21heCA9IDQ1OworICAgIGlmIChzZXRybGltaXQoUkxJTUlUX1JUUFJJTywgJnJsKSA9
PSAtMSkgeworICAgICAgICBlID0gZXJybm87CisgICAgICAgIFdURkxvZ0Fsd2F5cygiU2V0dGlu
ZyBwb2xpY3kgZmFpbGVkOiAlcy4iLCBzdHJlcnJvcihlKSk7CisgICAgfQorCiAjaWYgUExBVEZP
Uk0oV1BFKQogICAgIGlmICghcGFyYW1ldGVycy5pc1NlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CiAg
ICAgICAgIGF1dG8mIGltcGxlbWVudGF0aW9uTGlicmFyeU5hbWUgPSBwYXJhbWV0ZXJzLmltcGxl
bWVudGF0aW9uTGlicmFyeU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0Nv
bW1vbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlCmluZGV4IGRkNGRh
NjgyMjJhZDYyNGE5MGJlMWM4NzBjZjRjNzEyODM0NGM4NjkuLjYyMDNlZTdhZGM3ZmRmMGYwY2Fh
ZDUxN2M2ZjhkY2U3NDAzYTgzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29t
bW9uLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlCkBAIC0xNDks
NiArMTQ5LDggQEAgZW5kaWYgKCkKICMgV2luZG93cyBoYXMgc2lnbmFsLmggYnV0IGlzIG1pc3Np
bmcgc3ltYm9scyB0aGF0IGFyZSB1c2VkIGluIGNhbGxzIHRvIHNpZ25hbC4KIFdFQktJVF9DSEVD
S19IQVZFX1NZTUJPTChIQVZFX1NJR05BTF9IIFNJR1RSQVAgc2lnbmFsLmgpCiAKK1dFQktJVF9D
SEVDS19IQVZFX1NZTUJPTChIQVZFX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgX1BPU0lYX1BS
SU9SSVRZX1NDSEVEVUxJTkcgdW5pc3RkLmgpCisKICMgQ2hlY2sgZm9yIHN0cnVjdCBtZW1iZXJz
CiBXRUJLSVRfQ0hFQ0tfSEFWRV9TVFJVQ1QoSEFWRV9TVEFUX0JJUlRIVElNRSAic3RydWN0IHN0
YXQiIHN0X2JpcnRodGltZSBzeXMvc3RhdC5oKQogV0VCS0lUX0NIRUNLX0hBVkVfU1RSVUNUKEhB
VkVfVE1fR01UT0ZGICJzdHJ1Y3QgdG0iIHRtX2dtdG9mZiB0aW1lLmgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431959</attachid>
            <date>2021-06-22 06:11:31 -0700</date>
            <delta_ts>2021-06-25 06:09:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220115-20210622061129.patch</filename>
            <type>text/plain</type>
            <size>15862</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4
IDliZDVmZGU1YmMzODM1NWUyNWJjMDlkMDVhMDQ1ZGYzMWVmYWEyNTkuLmVhMGNjNDkzMTVjYWM3
ZGFhZTlkYzNhYzNjZGUzNWNmZjlmNzMxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC01MSw2ICs1MSw3IEBAIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiAg
ICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgbGludXgvQ3VycmVudFByb2Nlc3NN
ZW1vcnlTdGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9yeUZvb3RwcmludExpbnV4LmNwcAor
ICAgICAgICBsaW51eC9SVEtpdFV0aWxpdGllcy5jcHAKIAogICAgICAgICB1bml4L01lbW9yeVBy
ZXNzdXJlSGFuZGxlclVuaXguY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UGxhdGZvcm1KU0NPbmx5LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1KU0NPbmx5LmNt
YWtlCmluZGV4IGMyYjNhMGZlNGM4NWQ2NjRjNTk4ZTJhZDZkZWE2MDk4YjIyMmEwZGIuLmZmNGUz
NzQzOGViMWQyMmRhZDFkOWI5ZWM5OTNjNDRhN2Y1YjcxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUpTQ09ubHkuY21ha2UKQEAgLTk3LDYgKzk3LDcgQEAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFN
RSBNQVRDSEVTICJMaW51eCIpCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAg
bGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9y
eUZvb3RwcmludExpbnV4LmNwcAorICAgICAgICBsaW51eC9SVEtpdFV0aWxpdGllcy5jcHAKIAog
ICAgICAgICB1bml4L01lbW9yeVByZXNzdXJlSGFuZGxlclVuaXguY3BwCiAgICAgKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVdQRS5jbWFrZQppbmRleCBhODQwYTQ4N2ZmMDNhM2M4Mjc0NTVjYWI2N2ZhYThmODNk
MjBiZmE5Li4zM2YzOWI3YTRiNTQ1NzkzMzI4MDA4NGIxOGIwYzE0N2Q1NmYyMzFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMjksNiArMjksNyBAQCBsaXN0KEFQUEVORCBXVEZfU09V
UkNFUwogICAgIGdsaWIvVVJMR0xpYi5jcHAKIAogICAgIGxpbnV4L0N1cnJlbnRQcm9jZXNzTWVt
b3J5U3RhdHVzLmNwcAorICAgIGxpbnV4L1JUS2l0VXRpbGl0aWVzLmNwcAogCiAgICAgcG9zaXgv
Q1BVVGltZVBPU0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmNwcAppbmRleCBkMTgwMmJkMTJmMjE1ZDk0YjJjOTQyZGIxZTYxNTQ5MmI3MDAwOTE4Li5j
ZDQ0ZGE5YmMzZDk3ZDkwNmJiOWYwZWU4Y2M3NDA2NmRmOGNhMTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5j
cHAKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8Ym1hbGxvYy9ibWFsbG9jLmg+CiAjZW5k
aWYKIAorI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHd0Zi9saW51eC9SVEtpdFV0aWxpdGllcy5o
PgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiBMb2NrIFRocmVhZDo6c19hbGxUaHJlYWRz
TG9jazsKQEAgLTE1Niw2ICsxNjAsNyBAQCB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUluVGhyZWFk
KCkKIAogI2lmIE9TKExJTlVYKQogICAgIG1faWQgPSBjdXJyZW50SUQoKTsKKyAgICBhZGp1c3RM
aW51eFRocmVhZFByaW9yaXR5KG1faWQsIG1fcW9zKTsKICNlbmRpZgogfQogCkBAIC0xODksNyAr
MTk0LDcgQEAgdm9pZCBUaHJlYWQ6OmVudHJ5UG9pbnQoTmV3VGhyZWFkQ29udGV4dCogbmV3VGhy
ZWFkQ29udGV4dCkKIFJlZjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUs
IEZ1bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50LCBUaHJlYWRUeXBlIHRocmVhZFR5cGUsIFFP
UyBxb3MpCiB7CiAgICAgV1RGOjppbml0aWFsaXplKCk7Ci0gICAgUmVmPFRocmVhZD4gdGhyZWFk
ID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRv
cHRSZWYoKm5ldyBUaHJlYWQocW9zKSk7CiAgICAgUmVmPE5ld1RocmVhZENvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdFJlZigqbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5
UG9pbnQpLCB0aHJlYWQuY29weVJlZigpIH0pOwogICAgIC8vIEluY3JlbWVudCB0aGUgY29udGV4
dCByZWYgb24gYmVoYWxmIG9mIHRoZSBjcmVhdGVkIHRocmVhZC4gV2UgZG8gbm90IGp1c3QgdXNl
IGEgdW5pcXVlX3B0ciBhbmQgbGVhayBpdCB0byB0aGUgY3JlYXRlZCB0aHJlYWQgYmVjYXVzZSBi
b3RoIHRoZSBjcmVhdG9yIGFuZCBjcmVhdGVkIHRocmVhZCBoYXMgYSBuZWVkIHRvIGtlZXAgdGhl
IGNvbnRleHQgYWxpdmU6CiAgICAgLy8gMS4gdGhlIGNyZWF0ZWQgdGhyZWFkIG5lZWRzIHRvIGtl
ZXAgaXQgYWxpdmUgYmVjYXVzZSBUaHJlYWQ6OmNyZWF0ZSgpIGNhbiBleGl0IGJlZm9yZSB0aGUg
Y3JlYXRlZCB0aHJlYWQgaGFzIGEgY2hhbmNlIHRvIHVzZSB0aGUgY29udGV4dC4KQEAgLTE5OSw3
ICsyMDQsNyBAQCBSZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBG
dW5jdGlvbjx2b2lkKCk+JiYgZW50cnlQb2ludCwgVGhyZQogICAgIGNvbnRleHQtPnJlZigpOwog
ICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm11dGV4KTsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gdGhyZWFkLT5lc3RhYmxpc2hIYW5kbGUoY29udGV4dC5wdHIoKSwg
c3RhY2tTaXplKHRocmVhZFR5cGUpLCBxb3MpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aHJl
YWQtPmVzdGFibGlzaEhhbmRsZShjb250ZXh0LnB0cigpLCBzdGFja1NpemUodGhyZWFkVHlwZSkp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKICAgICAgICAgY29udGV4dC0+c3Rh
Z2UgPSBOZXdUaHJlYWRDb250ZXh0OjpTdGFnZTo6RXN0YWJsaXNoZWRIYW5kbGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmgKaW5kZXggY2ZhZTQyYTQ0MTdhMDE2NzIwYjAzY2U2M2MxZDczZjJkZDk5MzJmZS4uODM0
OWI0YWYxNTQxMjc4NTI2MmNlZWMzOGRmOTRkZWYzZGQ5YWU3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAg
LTI1NSwxMiArMjU1LDEyIEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dDsK
ICAgICBzdGF0aWMgdm9pZCBlbnRyeVBvaW50KE5ld1RocmVhZENvbnRleHQqKTsKIHByb3RlY3Rl
ZDoKLSAgICBUaHJlYWQoKTsKKyAgICBUaHJlYWQoUU9TKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZUluVGhyZWFkKCk7CiAKICAgICAvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQg
ZXN0YWJsaXNobWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICBib29sIGVzdGFibGlzaEhhbmRsZShO
ZXdUaHJlYWRDb250ZXh0Kiwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0YWNrU2l6ZSwgUU9TKTsK
KyAgICBib29sIGVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0Kiwgc3RkOjpvcHRpb25h
bDxzaXplX3Q+IHN0YWNrU2l6ZSk7CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgdm9pZCBlc3Rh
Ymxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKFBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKQEAgLTMz
MSw2ICszMzEsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgTG9jayBzX2FsbFRocmVhZHNM
b2NrOwogCisgICAgUU9TIG1fcW9zOworCiAgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3Rh
dGUgeyBKb2luYWJsZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biA6IDE7CiAgICAgYm9v
bCBtX2RpZEV4aXQgOiAxOwpAQCAtMzc1LDggKzM3Nyw5IEBAIHB1YmxpYzoKICAgICB2b2lkKiBt
X2FwaURhdGEgeyBudWxscHRyIH07CiB9OwogCi1pbmxpbmUgVGhyZWFkOjpUaHJlYWQoKQotICAg
IDogbV9pc1NodXR0aW5nRG93bihmYWxzZSkKK2lubGluZSBUaHJlYWQ6OlRocmVhZChRT1MgcW9z
KQorICAgIDogbV9xb3MocW9zKQorICAgICwgbV9pc1NodXR0aW5nRG93bihmYWxzZSkKICAgICAs
IG1fZGlkRXhpdChmYWxzZSkKICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQogICAgICwg
bV9pc0NvbXBpbGF0aW9uVGhyZWFkKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
bGludXgvUlRLaXRVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dURi93dGYvbGludXgvUlRLaXRVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxMzU4NTI4ODJhN2VhZWIwMzllYTJhZWY4MzE5MWJhZDI0
MWQ5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SVEtpdFV0aWxp
dGllcy5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9saW51eC9SVEtpdFV0aWxpdGllcy5oPgor
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitzdGQ6OnBhaXI8aW50LCBpbnQ+IHBvbGljeUFuZFByaW9y
aXR5RnJvbVFPU0NsYXNzKFRocmVhZDo6UU9TIHFvcykKK3sKKyAgICBzd2l0Y2ggKHFvcykgewor
ICAgIGNhc2UgVGhyZWFkOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZTogeworICAgICAgICBpbnQgcHJp
b3JpdHkgPSAzMjsKKyNpZiBIQVZFKFBPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcpCisgICAgICAg
IHByaW9yaXR5ID0gc2NoZWRfZ2V0X3ByaW9yaXR5X21heChTQ0hFRF9GSUZPKTsKKyNlbmRpZgor
ICAgICAgICBybGltaXQgbGltaXQ7CisgICAgICAgIGdldHJsaW1pdChSTElNSVRfUlRQUklPLCAm
bGltaXQpOworICAgICAgICBwcmlvcml0eSA9IHN0ZDo6bWluKHByaW9yaXR5LCAoaW50KWxpbWl0
LnJsaW1fbWF4KTsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJwcmlvcml0eTogJWQiLCBwcmlvcml0
eSk7CisgICAgICAgIC8vIGlmIChwcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIHsgU0NIRURfRklG
TywgcHJpb3JpdHkgfTsKKyAgICAgICAgLy8gRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2Ug
VGhyZWFkOjpRT1M6OlVzZXJJbml0aWF0ZWQ6CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6RGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIHsgU0NIRURfT1RIRVIsIDAgfTsKKyAgICBjYXNlIFRocmVhZDo6
UU9TOjpVdGlsaXR5OgorICAgIGNhc2UgVGhyZWFkOjpRT1M6OkJhY2tncm91bmQ6CisgICAgICAg
IHJldHVybiB7IFNDSEVEX0lETEUsIDAgfTsKKyAgICB9Cit9CisKK3N0cnVjdCBUaHJlYWRQcmlv
cml0eVBhcmFtZXRlcnMgeworICAgIFRocmVhZFByaW9yaXR5UGFyYW1ldGVycyhUaHJlYWRJZGVu
dGlmaWVyIHRpZCwgVGhyZWFkOjpRT1MgcW9zKQorICAgICAgICA6IGlkZW50aWZpZXIodGlkKQor
ICAgICAgICAsIHFvcyhxb3MpCisgICAgeworICAgICAgICAKKyAgICB9CisKKyAgICBUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgVGhyZWFkOjpRT1MgcW9zOworfTsKKworaW50MzJf
dCBjb21wdXRlUHJpb3JpdHlGcm9tUU9TKEdEQnVzUHJveHkqIHByb3h5LCBUaHJlYWQ6OlFPUyBx
b3MpCit7CisgICAgaWYgKHFvcyAhPSBUaHJlYWQ6OlFPUzo6VXNlckludGVyYWN0aXZlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vYXV0byB2YXJpYW50ID0gYWRvcHRHUmVmKGdfZGJ1c19w
cm94eV9nZXRfY2FjaGVkX3Byb3BlcnR5KHByb3h5LCAiTWF4UmVhbHRpbWVQcmlvcml0eSIpKTsK
KyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgYXV0byBwcm9wZXJ0eSA9IGFk
b3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKHByb3h5LCAib3JnLmZyZWVkZXNrdG9wLkRC
dXMuUHJvcGVydGllcy5HZXQiLCBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgIm9yZy5mcmVlZGVza3Rv
cC5SZWFsdGltZUtpdDEiLCAiTWF4UmVhbHRpbWVQcmlvcml0eSIpLCBHX0RCVVNfQ0FMTF9GTEFH
U19OT05FLCAtMSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgLy8gV1RGTG9nQWx3
YXlzKCJ2YXJpYW50ICVwIiwgdmFyaWFudC5nZXQoKSk7CisgICAgaWYgKCFwcm9wZXJ0eSkgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIj4+PiBFcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvL1dURkxvZ0Fsd2F5cygiVHlwZTogJXMiLCBn
X3ZhcmlhbnRfZ2V0X3R5cGVfc3RyaW5nKHZhcmlhbnQuZ2V0KCkpKTsKKyAgICAvLyBhdXRvIHZh
cmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50X2dldF92YXJpYW50KHByb3BlcnR5LmdldCgpKSk7
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdnY7CisgICAgZ192YXJpYW50X2dldChwcm9wZXJ0eS5n
ZXQoKSwgIih2KSIsICZ2di5vdXRQdHIoKSk7CisgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfaW50
MzIodnYuZ2V0KCkpOworfQorCitpbnQ2NF90IGdldE1heFJUVGltZShHREJ1c1Byb3h5KiBwcm94
eSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgYXV0byBwcm9wZXJ0
eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKHByb3h5LCAib3JnLmZyZWVkZXNr
dG9wLkRCdXMuUHJvcGVydGllcy5HZXQiLCBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgIm9yZy5mcmVl
ZGVza3RvcC5SZWFsdGltZUtpdDEiLCAiUlRUaW1lVVNlY01heCIpLCBHX0RCVVNfQ0FMTF9GTEFH
U19OT05FLCAtMSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgLy8gV1RGTG9nQWx3
YXlzKCJ2YXJpYW50ICVwIiwgdmFyaWFudC5nZXQoKSk7CisgICAgaWYgKCFwcm9wZXJ0eSkgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIj4+PiBFcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvL1dURkxvZ0Fsd2F5cygiVHlwZTogJXMiLCBn
X3ZhcmlhbnRfZ2V0X3R5cGVfc3RyaW5nKHZhcmlhbnQuZ2V0KCkpKTsKKyAgICAvLyBhdXRvIHZh
cmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50X2dldF92YXJpYW50KHByb3BlcnR5LmdldCgpKSk7
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdnY7CisgICAgZ192YXJpYW50X2dldChwcm9wZXJ0eS5n
ZXQoKSwgIih2KSIsICZ2di5vdXRQdHIoKSk7CisgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfaW50
NjQodnYuZ2V0KCkpOworfQorCit2b2lkIGFkanVzdExpbnV4VGhyZWFkUHJpb3JpdHkoVGhyZWFk
SWRlbnRpZmllciBpZGVudGlmaWVyLCBUaHJlYWQ6OlFPUyBxb3MpCit7CisgICAgYXV0byBkYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRQcmlvcml0eVBhcmFtZXRlcnM+KGlkZW50aWZpZXIs
IHFvcyk7CisKKyAgICBnX2RidXNfcHJveHlfbmV3X2Zvcl9idXMoR19CVVNfVFlQRV9TWVNURU0s
IEdfREJVU19QUk9YWV9GTEFHU19OT05FLAorICAgICAgICBudWxscHRyLCAib3JnLmZyZWVkZXNr
dG9wLlJlYWx0aW1lS2l0MSIsICIvb3JnL2ZyZWVkZXNrdG9wL1JlYWx0aW1lS2l0MSIsICJvcmcu
ZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgbnVsbHB0ciwgW10oR09iamVjdCosIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91
dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAgYXV0byBwcm94eSA9IGFkb3B0R1JlZihn
X2RidXNfcHJveHlfbmV3X2Zvcl9idXNfZmluaXNoKHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7
CisgICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxUaHJlYWRQcmlvcml0eVBhcmFtZXRlcnMqPih1c2VyRGF0YSk7CisgICAgICAg
ICAgICAgICAgYXV0byBwcmlvcml0eSA9IGNvbXB1dGVQcmlvcml0eUZyb21RT1MocHJveHkuZ2V0
KCksIGRhdGEtPnFvcyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcmlvcml0eSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUHJpb3Jp
dHk6ICVkIiwgcHJpb3JpdHkpOworCisgICAgICAgICAgICAgICAgLy9zdHJ1Y3QgcmxpbWl0IHJs
OworICAgICAgICAgICAgICAgIGludCBlOworICAgICAgICAgICAgICAgIHN0cnVjdCBybGltaXQg
cmw7CisgICAgICAgICAgICAgICAgLy8gaWYgKGdldHJsaW1pdChSTElNSVRfUlRQUklPLCAmcmwp
ICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgZSA9IGVycm5vOworICAgICAgICAgICAg
ICAgIC8vICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byBnZXRybGltaXQoKTogJXMuIiwgc3Ry
ZXJyb3IoZSkpOworICAgICAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgICAgICAvLyBXVEZM
b2dBbHdheXMoIlJUUFJJTyBzb2Z0IGxpbWl0IGlzICVkLCBoYXJkIGlzICVkIiwgKGludClybC5y
bGltX2N1ciwgKGludClybC5ybGltX21heCk7CisgICAgICAgICAgICAgICAgYXV0byBydFRpbWUg
PSBnZXRNYXhSVFRpbWUocHJveHkuZ2V0KCkpOworICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygiUlRUaW1lOiAlIiBHX0dJTlQ2NF9GT1JNQVQsIHJ0VGltZSk7CisgICAgICAgICAgICAgICAg
aWYgKHJ0VGltZSkgeworICAgICAgICAgICAgICAgICAgICBybC5ybGltX2N1ciA9IE1JTigyMDAw
MDAsIChybGltX3QpcnRUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmwucmxpbV9tYXggPSBN
SU4oMjAwMDAwLCAocmxpbV90KXJ0VGltZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vcmwucmxpbV9tYXggPSA0NTsKKyAgICAgICAgICAgICAgICAgLy9uZXdMaW1pdC5y
bGltX21heCA9IDQ1OworICAgICAgICAgICAgICAgIGlmIChzZXRybGltaXQoUkxJTUlUX1JUVElN
RSwgJnJsKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBlID0gZXJybm87CisgICAgICAg
ICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiU2V0dGluZyBwb2xpY3kgZmFpbGVkOiAlcy4iLCBz
dHJlcnJvcihlKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEdldCBob3N0IHBpZC4uLiBnZXRwaWQoKSBydW5uaW5nIGluIHNhbmRib3ggcmV0dXJucyBh
IHVzZWxlc3MgUElEIGZvciB0aGUgaG9zdCBydGtpdC4KKyAgICAgICAgICAgICAgICBwaWRfdCBw
aWQgPSBnZXRwaWQoKTsKKyAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk1ha2luZyB0aHJl
YWQgJWQgKGluIHBpZCAlZCkgcmVhbHRpbWUiLCBkYXRhLT5pZGVudGlmaWVyLCBwaWQpOworICAg
ICAgICAgICAgICAgIGdfZGJ1c19wcm94eV9jYWxsKHByb3h5LmdldCgpLCAiTWFrZVRocmVhZFJl
YWx0aW1lV2l0aFBJRCIsIGdfdmFyaWFudF9uZXcoIih0dHUpIiwgcGlkLCBkYXRhLT5pZGVudGlm
aWVyLCBwcmlvcml0eSksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBudWxscHRyLCBbXShH
T2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvKiBwcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNQ
cm94eSo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IGdf
ZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5hYmxlIHRvIG1ha2UgdGhyZWFkIHJlYWx0aW1lLiBF
cnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHByb3h5LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZGF0YS5yZWxlYXNlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JUS2l0VXRpbGl0aWVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9saW51eC9SVEtpdFV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOGIxM2UyMjllYjBlYjRj
ZjFlOGVkZmFlNzVhZjM5ZWM5YTkzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9saW51eC9SVEtpdFV0aWxpdGllcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgYWRq
dXN0TGludXhUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWQ6OlFPUyk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmFkanVzdExpbnV4VGhyZWFkUHJpb3Jp
dHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAKaW5kZXggZWRiOWI1MTg0
OGY4OTBlZDRlNWQwOTQwMTRmNmRkN2Y0MjkxYThlOS4uZGMyMDUxNGIyYzAwYjhhMGJhMDE0OGE2
YjBmYzgyZjRiN2QxMTBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFk
aW5nUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNw
cApAQCAtMjYwLDE1ICsyNjAsMTMgQEAgZGlzcGF0Y2hfcW9zX2NsYXNzX3QgVGhyZWFkOjpkaXNw
YXRjaFFPU0NsYXNzKFFPUyBxb3MpCiB9CiAjZW5kaWYKIAotYm9vbCBUaHJlYWQ6OmVzdGFibGlz
aEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
c3RhY2tTaXplLCBRT1MgcW9zKQorYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJl
YWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc3RhY2tTaXplKQogewog
ICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAg
ICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKLSAgICBw
dGhyZWFkX2F0dHJfc2V0X3Fvc19jbGFzc19ucCgmYXR0ciwgZGlzcGF0Y2hRT1NDbGFzcyhxb3Mp
LCAwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHFvcyk7CisgICAgcHRocmVhZF9hdHRyX3Nl
dF9xb3NfY2xhc3NfbnAoJmF0dHIsIGRpc3BhdGNoUU9TQ2xhc3MobV9xb3MpLCAwKTsKICNlbmRp
ZgogICAgIGlmIChzdGFja1NpemUpCiAgICAgICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUo
JmF0dHIsIHN0YWNrU2l6ZS52YWx1ZSgpKTsKQEAgLTM1Miw3ICszNTAsNyBAQCBUaHJlYWQmIFRo
cmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMoKQogewogICAgIC8vIE5vdCBhIFdURi1jcmVhdGVk
IHRocmVhZCwgVGhyZWFkIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCiAgICAgV1RGOjppbml0aWFs
aXplKCk7Ci0gICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7
CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoUU9TOjpEZWZh
dWx0KSk7CiAgICAgdGhyZWFkLT5lc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHB0aHJl
YWRfc2VsZigpKTsKICAgICB0aHJlYWQtPmluaXRpYWxpemVJblRocmVhZCgpOwogICAgIGluaXRp
YWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvd2luL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vVGhy
ZWFkaW5nV2luLmNwcAppbmRleCBkYzI0ODlmZjg5ZThmOWY4OTE0YmM4ZTNmYzI5NjZmNGRlZWU1
NzRlLi4xMjgyOGRmYmRhNDgwYjZhYTc4NzczYTNmODE1Zjg2NzI3N2Y1MWE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi93aW4vVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vVGhyZWFkaW5nV2luLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB1bnNpZ25l
ZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBkYXRhKQogICAgIHJldHVybiAw
OwogfQogCi1ib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENvbnRleHQqIGRh
dGEsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdGFja1NpemUsIFFPUykKK2Jvb2wgVGhyZWFkOjpl
c3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogZGF0YSwgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IHN0YWNrU2l6ZSkKIHsKICAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsKICAg
ICB1bnNpZ25lZCBpbml0RmxhZyA9IHN0YWNrU2l6ZSA/IFNUQUNLX1NJWkVfUEFSQU1fSVNfQV9S
RVNFUlZBVElPTiA6IDA7Cg==
</data>
<flag name="commit-queue"
          id="453872"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432258</attachid>
            <date>2021-06-25 06:09:07 -0700</date>
            <delta_ts>2021-06-25 06:28:19 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-real-time.diff</filename>
            <type>text/plain</type>
            <size>14217</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggOWJkNWZkZTViYzM4Li42YWQ4NzBmZmFhMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMyw2ICszMyw3IEBAIGxpc3QoQVBQRU5E
IFdURl9TT1VSQ0VTCiAgICAgZ2xpYi9HTGliVXRpbGl0aWVzLmNwcAogICAgIGdsaWIvR1JlZlB0
ci5jcHAKICAgICBnbGliL0dTb2NrZXRNb25pdG9yLmNwcAorICAgIGdsaWIvUmVhbFRpbWVLaXQu
Y3BwCiAgICAgZ2xpYi9SdW5Mb29wR0xpYi5jcHAKICAgICBnbGliL1NvY2tldENvbm5lY3Rpb24u
Y3BwCiAgICAgZ2xpYi9VUkxHTGliLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBh
ODQwYTQ4N2ZmMDMuLjZiNjdlNDQ2MzBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKQEAg
LTI0LDYgKzI0LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnbGliL0dMaWJVdGls
aXRpZXMuY3BwCiAgICAgZ2xpYi9HUmVmUHRyLmNwcAogICAgIGdsaWIvR1NvY2tldE1vbml0b3Iu
Y3BwCisgICAgZ2xpYi9SZWFsVGltZUtpdC5jcHAKICAgICBnbGliL1J1bkxvb3BHTGliLmNwcAog
ICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5jcHAKICAgICBnbGliL1VSTEdMaWIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAppbmRleCBkMTgwMmJkMTJmMjEuLjc3YTEyYzFhMGFkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCkBAIC0zOSw2ICszOSwxNiBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgog
I2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzY2hlZC5oPgorI2lmbmRlZiBTQ0hF
RF9SRVNFVF9PTl9GT1JLCisjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAwMDAwMAor
I2VuZGlmCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8d3RmL2dsaWIvUmVhbFRpbWVLaXQuaD4K
KyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiBMb2NrIFRocmVhZDo6c19hbGxU
aHJlYWRzTG9jazsKQEAgLTc0LDggKzg0LDkgQEAgc3RkOjphdG9taWM8dWludDMyX3Q+IFRocmVh
ZDo6c191aWQgeyAwIH07CiAKIHN0cnVjdCBUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV3VGhyZWFkQ29udGV4dD4gewogcHVibGljOgotICAg
IE5ld1RocmVhZENvbnRleHQoY29uc3QgY2hhciogbmFtZSwgRnVuY3Rpb248dm9pZCgpPiYmIGVu
dHJ5UG9pbnQsIFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQorICAgIE5ld1RocmVhZENvbnRleHQoY29u
c3QgY2hhciogbmFtZSwgUU9TIHFvcywgRnVuY3Rpb248dm9pZCgpPiYmIGVudHJ5UG9pbnQsIFJl
ZjxUaHJlYWQ+JiYgdGhyZWFkKQogICAgICAgICA6IG5hbWUobmFtZSkKKyAgICAgICAgLCBxb3Mo
cW9zKQogICAgICAgICAsIGVudHJ5UG9pbnQoV1RGTW92ZShlbnRyeVBvaW50KSkKICAgICAgICAg
LCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgIHsKQEAgLTg0LDYgKzk1LDcgQEAgcHVibGlj
OgogICAgIGVudW0gY2xhc3MgU3RhZ2UgeyBTdGFydCwgRXN0YWJsaXNoZWRIYW5kbGUsIEluaXRp
YWxpemVkIH07CiAgICAgU3RhZ2Ugc3RhZ2UgeyBTdGFnZTo6U3RhcnQgfTsKICAgICBjb25zdCBj
aGFyKiBuYW1lOworICAgIFFPUyBxb3M7CiAgICAgRnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50
OwogICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICBNdXRleCBtdXRleDsKQEAgLTEzNSw3ICsx
NDcsNyBAQCBjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hh
ciogdGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUluVGhy
ZWFkKCkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplSW5UaHJlYWQoUU9TIHFvcykKIHsKICAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2sgPSBTdGFja0JvdW5kczo6Y3Vy
cmVudFRocmVhZFN0YWNrQm91bmRzKCk7CkBAIC0xNTYsNiArMTY4LDEwIEBAIHZvaWQgVGhyZWFk
Ojppbml0aWFsaXplSW5UaHJlYWQoKQogCiAjaWYgT1MoTElOVVgpCiAgICAgbV9pZCA9IGN1cnJl
bnRJRCgpOworICAgIGlmIChxb3MgPT0gUU9TOjpVc2VySW50ZXJhY3RpdmUpCisgICAgICAgIHNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocW9zKTsKICNlbmRpZgogfQogCkBAIC0xNzEsNyArMTg3LDcgQEAgdm9pZCBUaHJlYWQ6OmVu
dHJ5UG9pbnQoTmV3VGhyZWFkQ29udGV4dCogbmV3VGhyZWFkQ29udGV4dCkKIAogICAgICAgICBU
aHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAg
ICAgICAgIGZ1bmN0aW9uID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKLSAgICAgICAg
Y29udGV4dC0+dGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICAgICAgY29udGV4dC0+
dGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoY29udGV4dC0+cW9zKTsKIAogICAgICAgICBUaHJl
YWQ6OmluaXRpYWxpemVUTFMoV1RGTW92ZShjb250ZXh0LT50aHJlYWQpKTsKIApAQCAtMTkwLDcg
KzIwNiw3IEBAIFJlZjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1
bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50LCBUaHJlCiB7CiAgICAgV1RGOjppbml0aWFsaXpl
KCk7CiAgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7Ci0g
ICAgUmVmPE5ld1RocmVhZENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IE5ld1RocmVh
ZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB0aHJlYWQuY29weVJlZigpIH0p
OworICAgIFJlZjxOZXdUaHJlYWRDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBOZXdU
aHJlYWRDb250ZXh0IHsgbmFtZSwgcW9zLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB0aHJlYWQuY29w
eVJlZigpIH0pOwogICAgIC8vIEluY3JlbWVudCB0aGUgY29udGV4dCByZWYgb24gYmVoYWxmIG9m
IHRoZSBjcmVhdGVkIHRocmVhZC4gV2UgZG8gbm90IGp1c3QgdXNlIGEgdW5pcXVlX3B0ciBhbmQg
bGVhayBpdCB0byB0aGUgY3JlYXRlZCB0aHJlYWQgYmVjYXVzZSBib3RoIHRoZSBjcmVhdG9yIGFu
ZCBjcmVhdGVkIHRocmVhZCBoYXMgYSBuZWVkIHRvIGtlZXAgdGhlIGNvbnRleHQgYWxpdmU6CiAg
ICAgLy8gMS4gdGhlIGNyZWF0ZWQgdGhyZWFkIG5lZWRzIHRvIGtlZXAgaXQgYWxpdmUgYmVjYXVz
ZSBUaHJlYWQ6OmNyZWF0ZSgpIGNhbiBleGl0IGJlZm9yZSB0aGUgY3JlYXRlZCB0aHJlYWQgaGFz
IGEgY2hhbmNlIHRvIHVzZSB0aGUgY29udGV4dC4KICAgICAvLyAyLiB0aGUgY3JlYXRvciB0aHJl
YWQgKGlmIEhBVkUoU1RBQ0tfQk9VTkRTX0ZPUl9ORVdfVEhSRUFEKSBpcyBmYWxzZSkgbmVlZHMg
dG8ga2VlcCBpdCBhbGl2ZSBiZWNhdXNlIHRoZSBjcmVhdGVkIHRocmVhZCBtYXkgZXhpdCBiZWZv
cmUgdGhlIGNyZWF0b3IgaGFzIGEgY2hhbmNlIHRvIHdha2UgdXAgZnJvbSB3YWl0aW5nIGZvciB0
aGUgY29tcGxldGlvbiBvZiB0aGUgY3JlYXRlZCB0aHJlYWQncyBpbml0aWFsaXphdGlvbi4gVGhp
cyB3YWl0aW5nIHVzZXMgYSBjb25kaXRpb24gdmFyaWFibGUgaW4gdGhlIGNvbnRleHQuCkBAIC0z
MjksNiArMzQ1LDIwIEBAIHZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJh
Y3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkg
PD0gMCk7CiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPj0gUU9TX01JTl9SRUxBVElWRV9Q
UklPUklUWSk7CiAgICAgcHRocmVhZF9zZXRfcW9zX2NsYXNzX3NlbGZfbnAoYWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSksIHJlbGF0aXZlUHJpb3JpdHkpOworI2Vs
aWYgT1MoTElOVVgpCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdG8gbWFrZSB0aGUgbWFpbiB0aHJl
YWQgcmVhbCB0aW1lLgorICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5
ID0gc3RkOjpjbGFtcCg1ICsgcmVsYXRpdmVQcmlvcml0eSwgc2NoZWRfZ2V0X3ByaW9yaXR5X21p
bihTQ0hFRF9SUiksIHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfUlIpKTsKKyAgICBhdXRv
IGVycm9yID0gcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfc2VsZigpLCBTQ0hFRF9SUiB8
IFNDSEVEX1JFU0VUX09OX0ZPUkssICZwYXJhbSk7CisjaWYgVVNFKEdMSUIpCisgICAgaWYgKGVy
cm9yKQorICAgICAgICBtYWtlVGhyZWFkUmVhbFRpbWUoZ2V0cGlkKCksIGN1cnJlbnRJRCgpLCBw
YXJhbS5zY2hlZF9wcmlvcml0eSk7CisjZWxzZQorICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNl
dCBjdXJyZW50IHRocmVhZCBhcyByZWFsIHRpbWU6ICVzIiwgc3RyZXJyb3IoZXJyb3IpKTsKKyNl
bmRpZgogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVsYXRpdmVQcmlvcml0eSk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nLmgKaW5kZXggY2ZhZTQyYTQ0MTdhLi42ZGU1NmQyZjdkMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFRocmVhZCgp
OwogCi0gICAgdm9pZCBpbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVJ
blRocmVhZChRT1MpOwogCiAgICAgLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgVGhyZWFk
IGVzdGFibGlzaG1lbnQgaW1wbGVtZW50YXRpb24uCiAgICAgYm9vbCBlc3RhYmxpc2hIYW5kbGUo
TmV3VGhyZWFkQ29udGV4dCosIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdGFja1NpemUsIFFPUyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
IGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCAyZDBj
NGZjMjcyMWQuLmYwOTY5OTE4ZGZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJp
Yy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtR
dWV1ZUdlbmVyaWMuY3BwCkBAIC00MiwxNCArNDIsMTQgQEAgV29ya1F1ZXVlOjpXb3JrUXVldWUo
UnVuTG9vcCYgcnVuTG9vcCkKIHsKIH0KIAotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlh
bGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZv
cm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUyBxb3MpCiB7CiAgICAgQmlu
YXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKICAgICBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbJl0gewog
ICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwogICAgICAgICBzZW1hcGhv
cmUuc2lnbmFsKCk7CiAgICAgICAgIG1fcnVuTG9vcC0+cnVuKCk7Ci0gICAgfSktPmRldGFjaCgp
OworICAgIH0sIFRocmVhZFR5cGU6OlVua25vd24sIHFvcyktPmRldGFjaCgpOwogICAgIHNlbWFw
aG9yZS53YWl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ZDliNzUxMTBkNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEphbi1NaWNoYWVsIEJydW1tZXIgPGphbi5i
cnVtbWVyQHRhYm9zLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL1JlYWxUaW1lS2l0
Lmg+CisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Cisj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3Bl
cnR5KEdEQnVzUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfY2FsbF9zeW5jKHByb3h5LCAib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGll
cy5HZXQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgIm9yZy5mcmVlZGVza3RvcC5S
ZWFsdGltZUtpdDEiLCBwcm9wZXJ0eU5hbWUpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwg
bnVsbHB0ciwgZXJyb3IpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIC0xOwor
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gcHJvcGVydHk7CisgICAgZ192YXJpYW50X2dldChyZXN1
bHQuZ2V0KCksICIodikiLCAmcHJvcGVydHkub3V0UHRyKCkpOworICAgIGlmIChnX3ZhcmlhbnRf
aXNfb2ZfdHlwZShwcm9wZXJ0eS5nZXQoKSwgR19WQVJJQU5UX1RZUEVfSU5UNjQpKQorICAgICAg
ICByZXR1cm4gZ192YXJpYW50X2dldF9pbnQ2NChwcm9wZXJ0eS5nZXQoKSk7CisgICAgaWYgKGdf
dmFyaWFudF9pc19vZl90eXBlKHByb3BlcnR5LmdldCgpLCBHX1ZBUklBTlRfVFlQRV9JTlQzMikp
CisgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X2ludDMyKHByb3BlcnR5LmdldCgpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIG1ha2VUaHJlYWRSZWFs
VGltZSh1aW50NjRfdCBwcm9jZXNzSUQsIHVpbnQ2NF90IHRocmVhZElELCB1aW50MzJfdCBwcmlv
cml0eSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1Jl
ZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NZU1RFTSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9U
X0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJU
SUVTKSwgbnVsbHB0ciwKKyAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCAi
L29yZy9mcmVlZGVza3RvcC9SZWFsdGltZUtpdDEiLCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1l
S2l0MSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghcHJveHkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdCB0byBSZWFsdGltZUtpdDogJXMiLCBl
cnJvci0+bWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBSTElNSVRf
UlRUSU1FCisgICAgLy8gUmVhbFRpbWVLaXQgcmVxdWlyZXMgdGhlIGNsaWVudCB0byBoYXZlIFJM
SU1JVF9SVFRJTUUgc2V0LgorICAgIGF1dG8gcnR0aW1lTWF4ID0gcmVhbFRpbWVLaXRHZXRQcm9w
ZXJ0eShwcm94eS5nZXQoKSwgIlJUVGltZVVTZWNNYXgiLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgUlRUaW1lVVNl
Y01heCBmcm9tIFJlYWx0aW1lS2l0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHN0cnVjdCBybGltaXQgcmw7CisgICAgaWYgKGdldHJsaW1pdChS
TElNSVRfUlRUSU1FLCAmcmwpID49IDAgJiYgcmwucmxpbV9tYXggPiBzdGF0aWNfY2FzdDx1aW50
NjRfdD4ocnR0aW1lTWF4KSkgeworICAgICAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fbWF4ID0g
cnR0aW1lTWF4OworICAgICAgICBzZXRybGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKTsKKyAgICB9
CisjZW5kaWYKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfY2FsbF9zeW5jKHByb3h5LmdldCgpLCAiTWFrZVRocmVhZFJlYWx0aW1lV2l0aFBJ
RCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIih0dHUpIiwgcHJvY2Vzc0lELCB0aHJlYWRJRCwg
cHJpb3JpdHkpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgbnVsbHB0ciwgJmVycm9yLm91
dFB0cigpKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IG1ha2UgdGhyZWFkIHJlYWwgdGltZTogJXMiLCBlcnJvci0+bWVzc2FnZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtp
dC5oIGIvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI3YjY4N2Q0YWJkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXVEYgeworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYWtlVGhyZWFk
UmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwgdWludDMyX3Qg
cHJpb3JpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjptYWtlVGhyZWFk
UmVhbFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJ
WC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAKaW5kZXggZWRi
OWI1MTg0OGY4Li45ZjIzYzFiNmExMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L1RocmVhZGluZ1BPU0lYLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQ
T1NJWC5jcHAKQEAgLTQyLDcgKzQyLDEyIEBACiAjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CiAK
ICNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9wcmN0bC5o
PgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaWZuZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksK
KyNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAweDQwMDAwMDAwCisjZW5kaWYKICNlbmRpZgog
CiAjaWYgIUNPTVBJTEVSKE1TVkMpCkBAIC02OSwxMCArNzQsNiBAQAogI2luY2x1ZGUgPG1hY2gv
dGhyZWFkX3N3aXRjaC5oPgogI2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxzeXMv
c3lzY2FsbC5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgTG9jayBnbG9i
YWxTdXNwZW5kTG9jazsKQEAgLTI2MCw2ICsyNjEsMjQgQEAgZGlzcGF0Y2hfcW9zX2NsYXNzX3Qg
VGhyZWFkOjpkaXNwYXRjaFFPU0NsYXNzKFFPUyBxb3MpCiB9CiAjZW5kaWYKIAorI2lmIE9TKExJ
TlVYKQorc3RhdGljIGludCBzY2hlZFBvbGljeShUaHJlYWQ6OlFPUyBxb3MpCit7CisgICAgc3dp
dGNoIChxb3MpIHsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVc2VySW50ZXJhY3RpdmU6CisgICAg
ICAgIHJldHVybiBTQ0hFRF9SUjsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVc2VySW5pdGlhdGVk
OgorICAgIGNhc2UgVGhyZWFkOjpRT1M6OkRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTQ0hFRF9P
VEhFUjsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVdGlsaXR5OgorICAgICAgICByZXR1cm4gU0NI
RURfQkFUQ0g7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6QmFja2dyb3VuZDoKKyAgICAgICAgcmV0
dXJuIFNDSEVEX0lETEU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisjZW5kaWYKKwogYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250
ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc3RhY2tTaXplLCBRT1MgcW9zKQog
ewogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CkBAIC0yNjcsOCArMjg2LDYgQEAgYm9vbCBU
aHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9w
dGlvbmFsPHNpemVfdD4gc3QKICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CiAjaWYgSEFW
RShRT1NfQ0xBU1NFUykKICAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19jbGFzc19ucCgmYXR0ciwg
ZGlzcGF0Y2hRT1NDbGFzcyhxb3MpLCAwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHFvcyk7
CiAjZW5kaWYKICAgICBpZiAoc3RhY2tTaXplKQogICAgICAgICBwdGhyZWFkX2F0dHJfc2V0c3Rh
Y2tzaXplKCZhdHRyLCBzdGFja1NpemUudmFsdWUoKSk7CkBAIC0yNzgsNiArMjk1LDIwIEBAIGJv
b2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCwgc3Rk
OjpvcHRpb25hbDxzaXplX3Q+IHN0CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggY29udGV4dCAlcCIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCisjaWYg
T1MoTElOVVgpCisgICAgaW50IHBvbGljeSA9IHNjaGVkUG9saWN5KHFvcyk7CisgICAgaWYgKHBv
bGljeSAhPSBTQ0hFRF9SUikgeworICAgICAgICAvLyBSZWFsVGltZSBwb2xpY3kgd2lsbCBiZSBo
YW5kbGVkIGluIFRocmVhZDo6aW5pdGlhbGl6ZUluVGhyZWFkLgorICAgICAgICBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gcGFyYW0gPSB7IDAgfTsKKyAgICAgICAgZXJyb3IgPSBwdGhyZWFkX3NldHNjaGVk
cGFyYW0odGhyZWFkSGFuZGxlLCBwb2xpY3kgfCBTQ0hFRF9SRVNFVF9PTl9GT1JLLCAmcGFyYW0p
OworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBz
ZXQgc2NoZWQgcG9saWN5ICVkIGZvciB0aHJlYWQgJWQ6ICVzIiwgcG9saWN5LCB0aHJlYWRIYW5k
bGUsIHN0cmVycm9yKGVycm9yKSk7CisgICAgfQorI2VsaWYgIUhBVkUoUU9TX0NMQVNTRVMpCisg
ICAgVU5VU0VEX1BBUkFNKHFvcyk7CisjZW5kaWYKKwogICAgIGVzdGFibGlzaFBsYXRmb3JtU3Bl
Y2lmaWNIYW5kbGUodGhyZWFkSGFuZGxlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1NCw3
ICszODUsNyBAQCBUaHJlYWQmIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMoKQogICAgIFdU
Rjo6aW5pdGlhbGl6ZSgpOwogICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcg
VGhyZWFkKCkpOwogICAgIHRocmVhZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShw
dGhyZWFkX3NlbGYoKSk7Ci0gICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICB0
aHJlYWQtPmluaXRpYWxpemVJblRocmVhZChRT1M6OkRlZmF1bHQpOwogICAgIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwogCiAgICAgcmV0dXJuIGluaXRpYWxp
emVUTFMoV1RGTW92ZSh0aHJlYWQpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432259</attachid>
            <date>2021-06-25 06:28:19 -0700</date>
            <delta_ts>2021-06-28 03:39:52 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-real-time.diff</filename>
            <type>text/plain</type>
            <size>14185</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggOWJkNWZkZTViYzM4Li42YWQ4NzBmZmFhMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMyw2ICszMyw3IEBAIGxpc3QoQVBQRU5E
IFdURl9TT1VSQ0VTCiAgICAgZ2xpYi9HTGliVXRpbGl0aWVzLmNwcAogICAgIGdsaWIvR1JlZlB0
ci5jcHAKICAgICBnbGliL0dTb2NrZXRNb25pdG9yLmNwcAorICAgIGdsaWIvUmVhbFRpbWVLaXQu
Y3BwCiAgICAgZ2xpYi9SdW5Mb29wR0xpYi5jcHAKICAgICBnbGliL1NvY2tldENvbm5lY3Rpb24u
Y3BwCiAgICAgZ2xpYi9VUkxHTGliLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBh
ODQwYTQ4N2ZmMDMuLjZiNjdlNDQ2MzBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKQEAg
LTI0LDYgKzI0LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnbGliL0dMaWJVdGls
aXRpZXMuY3BwCiAgICAgZ2xpYi9HUmVmUHRyLmNwcAogICAgIGdsaWIvR1NvY2tldE1vbml0b3Iu
Y3BwCisgICAgZ2xpYi9SZWFsVGltZUtpdC5jcHAKICAgICBnbGliL1J1bkxvb3BHTGliLmNwcAog
ICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5jcHAKICAgICBnbGliL1VSTEdMaWIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAppbmRleCBkMTgwMmJkMTJmMjEuLjc3YTEyYzFhMGFkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCkBAIC0zOSw2ICszOSwxNiBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgog
I2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzY2hlZC5oPgorI2lmbmRlZiBTQ0hF
RF9SRVNFVF9PTl9GT1JLCisjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAwMDAwMAor
I2VuZGlmCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8d3RmL2dsaWIvUmVhbFRpbWVLaXQuaD4K
KyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiBMb2NrIFRocmVhZDo6c19hbGxU
aHJlYWRzTG9jazsKQEAgLTc0LDggKzg0LDkgQEAgc3RkOjphdG9taWM8dWludDMyX3Q+IFRocmVh
ZDo6c191aWQgeyAwIH07CiAKIHN0cnVjdCBUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV3VGhyZWFkQ29udGV4dD4gewogcHVibGljOgotICAg
IE5ld1RocmVhZENvbnRleHQoY29uc3QgY2hhciogbmFtZSwgRnVuY3Rpb248dm9pZCgpPiYmIGVu
dHJ5UG9pbnQsIFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQorICAgIE5ld1RocmVhZENvbnRleHQoY29u
c3QgY2hhciogbmFtZSwgUU9TIHFvcywgRnVuY3Rpb248dm9pZCgpPiYmIGVudHJ5UG9pbnQsIFJl
ZjxUaHJlYWQ+JiYgdGhyZWFkKQogICAgICAgICA6IG5hbWUobmFtZSkKKyAgICAgICAgLCBxb3Mo
cW9zKQogICAgICAgICAsIGVudHJ5UG9pbnQoV1RGTW92ZShlbnRyeVBvaW50KSkKICAgICAgICAg
LCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgIHsKQEAgLTg0LDYgKzk1LDcgQEAgcHVibGlj
OgogICAgIGVudW0gY2xhc3MgU3RhZ2UgeyBTdGFydCwgRXN0YWJsaXNoZWRIYW5kbGUsIEluaXRp
YWxpemVkIH07CiAgICAgU3RhZ2Ugc3RhZ2UgeyBTdGFnZTo6U3RhcnQgfTsKICAgICBjb25zdCBj
aGFyKiBuYW1lOworICAgIFFPUyBxb3M7CiAgICAgRnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50
OwogICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICBNdXRleCBtdXRleDsKQEAgLTEzNSw3ICsx
NDcsNyBAQCBjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hh
ciogdGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUluVGhy
ZWFkKCkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplSW5UaHJlYWQoUU9TIHFvcykKIHsKICAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2sgPSBTdGFja0JvdW5kczo6Y3Vy
cmVudFRocmVhZFN0YWNrQm91bmRzKCk7CkBAIC0xNTYsNiArMTY4LDEwIEBAIHZvaWQgVGhyZWFk
Ojppbml0aWFsaXplSW5UaHJlYWQoKQogCiAjaWYgT1MoTElOVVgpCiAgICAgbV9pZCA9IGN1cnJl
bnRJRCgpOworICAgIGlmIChxb3MgPT0gUU9TOjpVc2VySW50ZXJhY3RpdmUpCisgICAgICAgIHNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocW9zKTsKICNlbmRpZgogfQogCkBAIC0xNzEsNyArMTg3LDcgQEAgdm9pZCBUaHJlYWQ6OmVu
dHJ5UG9pbnQoTmV3VGhyZWFkQ29udGV4dCogbmV3VGhyZWFkQ29udGV4dCkKIAogICAgICAgICBU
aHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAg
ICAgICAgIGZ1bmN0aW9uID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKLSAgICAgICAg
Y29udGV4dC0+dGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICAgICAgY29udGV4dC0+
dGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoY29udGV4dC0+cW9zKTsKIAogICAgICAgICBUaHJl
YWQ6OmluaXRpYWxpemVUTFMoV1RGTW92ZShjb250ZXh0LT50aHJlYWQpKTsKIApAQCAtMTkwLDcg
KzIwNiw3IEBAIFJlZjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1
bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50LCBUaHJlCiB7CiAgICAgV1RGOjppbml0aWFsaXpl
KCk7CiAgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7Ci0g
ICAgUmVmPE5ld1RocmVhZENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IE5ld1RocmVh
ZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB0aHJlYWQuY29weVJlZigpIH0p
OworICAgIFJlZjxOZXdUaHJlYWRDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBOZXdU
aHJlYWRDb250ZXh0IHsgbmFtZSwgcW9zLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB0aHJlYWQuY29w
eVJlZigpIH0pOwogICAgIC8vIEluY3JlbWVudCB0aGUgY29udGV4dCByZWYgb24gYmVoYWxmIG9m
IHRoZSBjcmVhdGVkIHRocmVhZC4gV2UgZG8gbm90IGp1c3QgdXNlIGEgdW5pcXVlX3B0ciBhbmQg
bGVhayBpdCB0byB0aGUgY3JlYXRlZCB0aHJlYWQgYmVjYXVzZSBib3RoIHRoZSBjcmVhdG9yIGFu
ZCBjcmVhdGVkIHRocmVhZCBoYXMgYSBuZWVkIHRvIGtlZXAgdGhlIGNvbnRleHQgYWxpdmU6CiAg
ICAgLy8gMS4gdGhlIGNyZWF0ZWQgdGhyZWFkIG5lZWRzIHRvIGtlZXAgaXQgYWxpdmUgYmVjYXVz
ZSBUaHJlYWQ6OmNyZWF0ZSgpIGNhbiBleGl0IGJlZm9yZSB0aGUgY3JlYXRlZCB0aHJlYWQgaGFz
IGEgY2hhbmNlIHRvIHVzZSB0aGUgY29udGV4dC4KICAgICAvLyAyLiB0aGUgY3JlYXRvciB0aHJl
YWQgKGlmIEhBVkUoU1RBQ0tfQk9VTkRTX0ZPUl9ORVdfVEhSRUFEKSBpcyBmYWxzZSkgbmVlZHMg
dG8ga2VlcCBpdCBhbGl2ZSBiZWNhdXNlIHRoZSBjcmVhdGVkIHRocmVhZCBtYXkgZXhpdCBiZWZv
cmUgdGhlIGNyZWF0b3IgaGFzIGEgY2hhbmNlIHRvIHdha2UgdXAgZnJvbSB3YWl0aW5nIGZvciB0
aGUgY29tcGxldGlvbiBvZiB0aGUgY3JlYXRlZCB0aHJlYWQncyBpbml0aWFsaXphdGlvbi4gVGhp
cyB3YWl0aW5nIHVzZXMgYSBjb25kaXRpb24gdmFyaWFibGUgaW4gdGhlIGNvbnRleHQuCkBAIC0z
MjksNiArMzQ1LDIwIEBAIHZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJh
Y3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkg
PD0gMCk7CiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPj0gUU9TX01JTl9SRUxBVElWRV9Q
UklPUklUWSk7CiAgICAgcHRocmVhZF9zZXRfcW9zX2NsYXNzX3NlbGZfbnAoYWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSksIHJlbGF0aXZlUHJpb3JpdHkpOworI2Vs
aWYgT1MoTElOVVgpCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdG8gbWFrZSB0aGUgbWFpbiB0aHJl
YWQgcmVhbCB0aW1lLgorICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5
ID0gc3RkOjpjbGFtcCg1ICsgcmVsYXRpdmVQcmlvcml0eSwgc2NoZWRfZ2V0X3ByaW9yaXR5X21p
bihTQ0hFRF9SUiksIHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfUlIpKTsKKyAgICBhdXRv
IGVycm9yID0gcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfc2VsZigpLCBTQ0hFRF9SUiB8
IFNDSEVEX1JFU0VUX09OX0ZPUkssICZwYXJhbSk7CisjaWYgVVNFKEdMSUIpCisgICAgaWYgKGVy
cm9yKQorICAgICAgICBtYWtlVGhyZWFkUmVhbFRpbWUoZ2V0cGlkKCksIGN1cnJlbnRJRCgpLCBw
YXJhbS5zY2hlZF9wcmlvcml0eSk7CisjZWxzZQorICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNl
dCBjdXJyZW50IHRocmVhZCBhcyByZWFsIHRpbWU6ICVzIiwgc3RyZXJyb3IoZXJyb3IpKTsKKyNl
bmRpZgogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVsYXRpdmVQcmlvcml0eSk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nLmgKaW5kZXggY2ZhZTQyYTQ0MTdhLi42ZGU1NmQyZjdkMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFRocmVhZCgp
OwogCi0gICAgdm9pZCBpbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVJ
blRocmVhZChRT1MpOwogCiAgICAgLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgVGhyZWFk
IGVzdGFibGlzaG1lbnQgaW1wbGVtZW50YXRpb24uCiAgICAgYm9vbCBlc3RhYmxpc2hIYW5kbGUo
TmV3VGhyZWFkQ29udGV4dCosIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdGFja1NpemUsIFFPUyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
IGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCAyZDBj
NGZjMjcyMWQuLmYwOTY5OTE4ZGZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJp
Yy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtR
dWV1ZUdlbmVyaWMuY3BwCkBAIC00MiwxNCArNDIsMTQgQEAgV29ya1F1ZXVlOjpXb3JrUXVldWUo
UnVuTG9vcCYgcnVuTG9vcCkKIHsKIH0KIAotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlh
bGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZv
cm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUyBxb3MpCiB7CiAgICAgQmlu
YXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKICAgICBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbJl0gewog
ICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwogICAgICAgICBzZW1hcGhv
cmUuc2lnbmFsKCk7CiAgICAgICAgIG1fcnVuTG9vcC0+cnVuKCk7Ci0gICAgfSktPmRldGFjaCgp
OworICAgIH0sIFRocmVhZFR5cGU6OlVua25vd24sIHFvcyktPmRldGFjaCgpOwogICAgIHNlbWFw
aG9yZS53YWl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZGRkNzYzYmM2YmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9SZWFsVGltZUtpdC5oPgorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIGlu
dDY0X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50
PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIm9yZy5m
cmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMuR2V0IiwKKyAgICAgICAgZ192YXJpYW50X25ldygi
KHNzKSIsICJvcmcuZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgcHJvcGVydHlOYW1lKSwgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIG51bGxwdHIsIGVycm9yKSk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHByb3BlcnR5
OworICAgIGdfdmFyaWFudF9nZXQocmVzdWx0LmdldCgpLCAiKHYpIiwgJnByb3BlcnR5Lm91dFB0
cigpKTsKKyAgICBpZiAoZ192YXJpYW50X2lzX29mX3R5cGUocHJvcGVydHkuZ2V0KCksIEdfVkFS
SUFOVF9UWVBFX0lOVDY0KSkKKyAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfaW50NjQocHJv
cGVydHkuZ2V0KCkpOworICAgIGlmIChnX3ZhcmlhbnRfaXNfb2ZfdHlwZShwcm9wZXJ0eS5nZXQo
KSwgR19WQVJJQU5UX1RZUEVfSU5UMzIpKQorICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF9p
bnQzMihwcm9wZXJ0eS5nZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBtYWtlVGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRf
dCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdSZWZQdHI8R0RC
dXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzX3N5bmMo
R19CVVNfVFlQRV9TWVNURU0sCisgICAgICAgIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4o
R19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9DT05ORUNUX1NJR05BTFMgfCBHX0RCVVNfUFJPWFlf
RkxBR1NfRE9fTk9UX0xPQURfUFJPUEVSVElFUyksIG51bGxwdHIsCisgICAgICAgICJvcmcuZnJl
ZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgIi9vcmcvZnJlZWRlc2t0b3AvUmVhbHRpbWVLaXQxIiwg
Im9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkp
KTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNvbm5l
Y3QgdG8gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIC8vIFJlYWxUaW1lS2l0IHJlcXVp
cmVzIHRoZSBjbGllbnQgdG8gaGF2ZSBSTElNSVRfUlRUSU1FIHNldC4KKyAgICBhdXRvIHJ0dGlt
ZU1heCA9IHJlYWxUaW1lS2l0R2V0UHJvcGVydHkocHJveHkuZ2V0KCksICJSVFRpbWVVU2VjTWF4
IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gZ2V0IFJUVGltZVVTZWNNYXggZnJvbSBSZWFsdGltZUtpdDogJXMiLCBlcnJv
ci0+bWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3QgcmxpbWl0
IHJsOworICAgIGlmIChnZXRybGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKSA+PSAwICYmIHJsLnJs
aW1fbWF4ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJ0dGltZU1heCkpIHsKKyAgICAgICAgcmwu
cmxpbV9jdXIgPSBybC5ybGltX21heCA9IHJ0dGltZU1heDsKKyAgICAgICAgc2V0cmxpbWl0KFJM
SU1JVF9SVFRJTUUsICZybCk7CisgICAgfQorI2VuZGlmCisKKyAgICBHUmVmUHRyPEdWYXJpYW50
PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eS5nZXQoKSwg
Ik1ha2VUaHJlYWRSZWFsdGltZVdpdGhQSUQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHR1
KSIsIHByb2Nlc3NJRCwgdGhyZWFkSUQsIHByaW9yaXR5KSwgR19EQlVTX0NBTExfRkxBR1NfTk9O
RSwgLTEsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIHRocmVhZCByZWFsIHRpbWU6ICVzIiwgZXJy
b3ItPm1lc3NhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvUmVhbFRpbWVLaXQuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJiN2I2ODdk
NGFiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRpbWVLaXQu
aApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgbWFrZVRocmVhZFJlYWxUaW1lKHVpbnQ2NF90IHByb2Nlc3NJRCwgdWlu
dDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6bWFrZVRocmVhZFJlYWxUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvVGhy
ZWFkaW5nUE9TSVguY3BwCmluZGV4IGVkYjliNTE4NDhmOC4uOWYyM2MxYjZhMTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCkBAIC00Miw3ICs0MiwxMiBAQAogI2lu
Y2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCiAjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c2NoZWQu
aD4KICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2lm
bmRlZiBTQ0hFRF9SRVNFVF9PTl9GT1JLCisjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0
MDAwMDAwMAorI2VuZGlmCiAjZW5kaWYKIAogI2lmICFDT01QSUxFUihNU1ZDKQpAQCAtNjksMTAg
Kzc0LDYgQEAKICNpbmNsdWRlIDxtYWNoL3RocmVhZF9zd2l0Y2guaD4KICNlbmRpZgogCi0jaWYg
T1MoTElOVVgpCi0jaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V1RGIHsKIAogc3RhdGljIExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CkBAIC0yNjAsNiArMjYxLDI0
IEBAIGRpc3BhdGNoX3Fvc19jbGFzc190IFRocmVhZDo6ZGlzcGF0Y2hRT1NDbGFzcyhRT1MgcW9z
KQogfQogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKK3N0YXRpYyBpbnQgc2NoZWRQb2xpY3koVGhy
ZWFkOjpRT1MgcW9zKQoreworICAgIHN3aXRjaCAocW9zKSB7CisgICAgY2FzZSBUaHJlYWQ6OlFP
Uzo6VXNlckludGVyYWN0aXZlOgorICAgICAgICByZXR1cm4gU0NIRURfUlI7CisgICAgY2FzZSBU
aHJlYWQ6OlFPUzo6VXNlckluaXRpYXRlZDoKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpEZWZhdWx0
OgorICAgICAgICByZXR1cm4gU0NIRURfT1RIRVI7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6VXRp
bGl0eToKKyAgICAgICAgcmV0dXJuIFNDSEVEX0JBVENIOworICAgIGNhc2UgVGhyZWFkOjpRT1M6
OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBTQ0hFRF9JRExFOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmCisKIGJvb2wgVGhyZWFkOjplc3Rh
Ymxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IHN0YWNrU2l6ZSwgUU9TIHFvcykKIHsKICAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwpA
QCAtMjY3LDggKzI4Niw2IEBAIGJvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFk
Q29udGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0CiAgICAgcHRocmVhZF9h
dHRyX2luaXQoJmF0dHIpOwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgcHRocmVhZF9hdHRy
X3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGRpc3BhdGNoUU9TQ2xhc3MocW9zKSwgMCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShxb3MpOwogI2VuZGlmCiAgICAgaWYgKHN0YWNrU2l6ZSkKICAg
ICAgICAgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgc3RhY2tTaXplLnZhbHVlKCkp
OwpAQCAtMjc4LDYgKzI5NSwyMCBAQCBib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1Ro
cmVhZENvbnRleHQqIGNvbnRleHQsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdAogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRo
IGNvbnRleHQgJXAiLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBjb250ZXh0KTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KKworI2lmIE9TKExJTlVYKQorICAgIGludCBwb2xpY3kgPSBzY2hl
ZFBvbGljeShxb3MpOworICAgIGlmIChwb2xpY3kgIT0gU0NIRURfUlIpIHsKKyAgICAgICAgLy8g
UmVhbFRpbWUgcG9saWN5IHdpbGwgYmUgaGFuZGxlZCBpbiBUaHJlYWQ6OmluaXRpYWxpemVJblRo
cmVhZC4KKyAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAwIH07CisgICAgICAg
IGVycm9yID0gcHRocmVhZF9zZXRzY2hlZHBhcmFtKHRocmVhZEhhbmRsZSwgcG9saWN5IHwgU0NI
RURfUkVTRVRfT05fRk9SSywgJnBhcmFtKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHNjaGVkIHBvbGljeSAlZCBmb3IgdGhyZWFkICVk
OiAlcyIsIHBvbGljeSwgdGhyZWFkSGFuZGxlLCBzdHJlcnJvcihlcnJvcikpOworICAgIH0KKyNl
bGlmICFIQVZFKFFPU19DTEFTU0VTKQorICAgIFVOVVNFRF9QQVJBTShxb3MpOworI2VuZGlmCisK
ICAgICBlc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHRocmVhZEhhbmRsZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0zNTQsNyArMzg1LDcgQEAgVGhyZWFkJiBUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VExTKCkKICAgICBXVEY6OmluaXRpYWxpemUoKTsKICAgICBSZWY8VGhyZWFk
PiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB0aHJlYWQtPmVzdGFibGlz
aFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUocHRocmVhZF9zZWxmKCkpOwotICAgIHRocmVhZC0+aW5p
dGlhbGl6ZUluVGhyZWFkKCk7CisgICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoUU9TOjpE
ZWZhdWx0KTsKICAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQo
KTsKIAogICAgIHJldHVybiBpbml0aWFsaXplVExTKFdURk1vdmUodGhyZWFkKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432378</attachid>
            <date>2021-06-28 03:39:52 -0700</date>
            <delta_ts>2021-10-15 06:41:09 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-real-time-threads.diff</filename>
            <type>text/plain</type>
            <size>26532</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggOWJkNWZkZTViYzM4Li5lMTk1YmJlNmVjOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04LDkgKzgsMTIgQEAgbGlzdChBUFBFTkQg
V1RGX1BVQkxJQ19IRUFERVJTCiAgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5oCiAgICAgZ2xpYi9H
VHlwZWRlZnMuaAogICAgIGdsaWIvR1VuaXF1ZVB0ci5oCisgICAgZ2xpYi9SZWFsVGltZUtpdC5o
CiAgICAgZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaAogICAgIGdsaWIvU29ja2V0Q29ubmVj
dGlvbi5oCiAgICAgZ2xpYi9XVEZHVHlwZS5oCisKKyAgICBsaW51eC9SZWFsVGltZVRocmVhZHMu
aAogKQogCiBpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQpAQCAtMzMsNiAr
MzYsNyBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGdsaWIvR0xpYlV0aWxpdGllcy5j
cHAKICAgICBnbGliL0dSZWZQdHIuY3BwCiAgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKKyAg
ICBnbGliL1JlYWxUaW1lS2l0LmNwcAogICAgIGdsaWIvUnVuTG9vcEdMaWIuY3BwCiAgICAgZ2xp
Yi9Tb2NrZXRDb25uZWN0aW9uLmNwcAogICAgIGdsaWIvVVJMR0xpYi5jcHAKQEAgLTUxLDYgKzU1
LDcgQEAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIkxpbnV4IikKICAgICBsaXN0KEFQ
UEVORCBXVEZfU09VUkNFUwogICAgICAgICBsaW51eC9DdXJyZW50UHJvY2Vzc01lbW9yeVN0YXR1
cy5jcHAKICAgICAgICAgbGludXgvTWVtb3J5Rm9vdHByaW50TGludXguY3BwCisgICAgICAgIGxp
bnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKIAogICAgICAgICB1bml4L01lbW9yeVByZXNzdXJlSGFu
ZGxlclVuaXguY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1X
UEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBhODQwYTQ4
N2ZmMDMuLmQ2ZTdlOTIyOWE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1X
UEUuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTYsMTIg
KzYsMTQgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgZ2xpYi9HU29ja2V0
TW9uaXRvci5oCiAgICAgZ2xpYi9HVHlwZWRlZnMuaAogICAgIGdsaWIvR1VuaXF1ZVB0ci5oCisg
ICAgZ2xpYi9SZWFsVGltZUtpdC5oCiAgICAgZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaAog
ICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZHVHlwZS5oCiAKICAgICBs
aW51eC9Qcm9jZXNzTWVtb3J5Rm9vdHByaW50LmgKICAgICBsaW51eC9DdXJyZW50UHJvY2Vzc01l
bW9yeVN0YXR1cy5oCisgICAgbGludXgvUmVhbFRpbWVUaHJlYWRzLmgKICkKIAogbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKQEAgLTI0LDExICsyNiwxMyBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgIGdsaWIvR0xpYlV0aWxpdGllcy5jcHAKICAgICBnbGliL0dSZWZQdHIuY3BwCiAgICAg
Z2xpYi9HU29ja2V0TW9uaXRvci5jcHAKKyAgICBnbGliL1JlYWxUaW1lS2l0LmNwcAogICAgIGds
aWIvUnVuTG9vcEdMaWIuY3BwCiAgICAgZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmNwcAogICAgIGds
aWIvVVJMR0xpYi5jcHAKIAogICAgIGxpbnV4L0N1cnJlbnRQcm9jZXNzTWVtb3J5U3RhdHVzLmNw
cAorICAgIGxpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKIAogICAgIHBvc2l4L0NQVVRpbWVQT1NJ
WC5jcHAKICAgICBwb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5k
ZXggZDE4MDJiZDEyZjIxLi5lNGI2YzZhZWNhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtMzks
NiArMzksMTAgQEAKICNpbmNsdWRlIDxibWFsbG9jL2JtYWxsb2MuaD4KICNlbmRpZgogCisjaWYg
T1MoTElOVVgpCisjaW5jbHVkZSA8d3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oPgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXVEYgewogCiBMb2NrIFRocmVhZDo6c19hbGxUaHJlYWRzTG9jazsKQEAg
LTMyOSw2ICszMzMsMTIgQEAgdm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0
eSA8PSAwKTsKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA+PSBRT1NfTUlOX1JFTEFUSVZF
X1BSSU9SSVRZKTsKICAgICBwdGhyZWFkX3NldF9xb3NfY2xhc3Nfc2VsZl9ucChhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgcmVsYXRpdmVQcmlvcml0eSk7Cisj
ZWxpZiBPUyhMSU5VWCkKKyAgICAvLyBXZSBkb24ndCBhbGxvdyB0byBtYWtlIHRoZSBtYWluIHRo
cmVhZCByZWFsIHRpbWUuIFRoaXMgaXMgdXNlZCBieSBzZWNvbmRhcnkgcHJvY2VzcyB0byBtYXRj
aCB0aGUKKyAgICAvLyBVSSBwcm9jZXNzLCBidXQgaW4gbGludXMgdGhlIFVJIHByb2Nlc3MgaXMg
bm90IHJlYWwgdGltZS4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBSZWFsVGlt
ZVRocmVhZHM6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVGhyZWFkKGN1cnJlbnQoKSk7CisgICAgVU5V
U0VEX1BBUkFNKHJlbGF0aXZlUHJpb3JpdHkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVs
YXRpdmVQcmlvcml0eSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVy
aWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1
ZUdlbmVyaWMuY3BwCmluZGV4IDJkMGM0ZmMyNzIxZC4uZjA5Njk5MThkZmZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTQyLDE0ICs0MiwxNCBA
QCBXb3JrUXVldWU6OldvcmtRdWV1ZShSdW5Mb29wJiBydW5Mb29wKQogewogfQogCi12b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykK
K3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlw
ZSwgUU9TIHFvcykKIHsKICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgIFRocmVh
ZDo6Y3JlYXRlKG5hbWUsIFsmXSB7CiAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJy
ZW50KCk7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgbV9ydW5Mb29wLT5y
dW4oKTsKLSAgICB9KS0+ZGV0YWNoKCk7CisgICAgfSwgVGhyZWFkVHlwZTo6VW5rbm93biwgcW9z
KS0+ZGV0YWNoKCk7CiAgICAgc2VtYXBob3JlLndhaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1Jl
YWxUaW1lS2l0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEw
Yjg2M2ZiZTJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL1JlYWxUaW1lS2l0Lmg+CisKKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitzdGF0aWMgY29uc3QgU2Vjb25kcyBzX2RidXNDYWxsVGltZW91dCA9IDEw
X21zOworCitzdGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVzUHJveHkq
IHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQoreworICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9z
eW5jKHByb3h5LCAib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcy5HZXQiLAorICAgICAg
ICBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBw
cm9wZXJ0eU5hbWUpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCBzX2RidXNDYWxsVGltZW91dC5t
aWxsaXNlY29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7CisgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgIHJldHVybiAtMTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHByb3BlcnR5Owor
ICAgIGdfdmFyaWFudF9nZXQocmVzdWx0LmdldCgpLCAiKHYpIiwgJnByb3BlcnR5Lm91dFB0cigp
KTsKKyAgICBpZiAoZ192YXJpYW50X2lzX29mX3R5cGUocHJvcGVydHkuZ2V0KCksIEdfVkFSSUFO
VF9UWVBFX0lOVDY0KSkKKyAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfaW50NjQocHJvcGVy
dHkuZ2V0KCkpOworICAgIGlmIChnX3ZhcmlhbnRfaXNfb2ZfdHlwZShwcm9wZXJ0eS5nZXQoKSwg
R19WQVJJQU5UX1RZUEVfSU5UMzIpKQorICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF9pbnQz
Mihwcm9wZXJ0eS5nZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBtYWtlVGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0
aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVz
X3Byb3h5X25ld19mb3JfYnVzX3N5bmMoR19CVVNfVFlQRV9TWVNURU0sCisgICAgICAgIHN0YXRp
Y19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9DT05ORUNU
X1NJR05BTFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVSVElFUyksIG51
bGxwdHIsCisgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgIi9vcmcvZnJl
ZWRlc2t0b3AvUmVhbHRpbWVLaXQxIiwgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBu
dWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYgUkxJTUlUX1JUVElNRQor
ICAgIC8vIFJlYWxUaW1lS2l0IHJlcXVpcmVzIHRoZSBjbGllbnQgdG8gaGF2ZSBSTElNSVRfUlRU
SU1FIHNldC4KKyAgICBzdHJ1Y3QgcmxpbWl0IHJsOworICAgIGlmIChnZXRybGltaXQoUkxJTUlU
X1JUVElNRSwgJnJsKSA+PSAwKSB7CisgICAgICAgIGF1dG8gcnR0aW1lTWF4ID0gcmVhbFRpbWVL
aXRHZXRQcm9wZXJ0eShwcm94eS5nZXQoKSwgIlJUVGltZVVTZWNNYXgiLCAmZXJyb3Iub3V0UHRy
KCkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGdldCBSVFRpbWVVU2VjTWF4IGZyb20gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1lc3Nh
Z2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJsLnJs
aW1fbWF4ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJ0dGltZU1heCkpIHsKKyAgICAgICAgICAg
IHJsLnJsaW1fY3VyID0gcmwucmxpbV9tYXggPSBydHRpbWVNYXg7CisgICAgICAgICAgICBzZXRy
bGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisg
ICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxs
X3N5bmMocHJveHkuZ2V0KCksICJNYWtlVGhyZWFkUmVhbHRpbWVXaXRoUElEIiwKKyAgICAgICAg
Z192YXJpYW50X25ldygiKHR0dSkiLCBwcm9jZXNzSUQsIHRocmVhZElELCBwcmlvcml0eSksIEdf
REJVU19DQUxMX0ZMQUdTX05PTkUsIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPGlu
dD4oKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgdGhyZWFkIHJlYWwgdGltZTogJXMiLCBlcnJv
ci0+bWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5oIGIvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGlt
ZUtpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI3YjY4N2Q0
YWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9SZWFsVGltZUtpdC5o
CkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBtYWtlVGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50
NjRfdCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjptYWtlVGhyZWFkUmVhbFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvbGludXgvUmVh
bFRpbWVUaHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjhhOWVkZTg3YjYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1Jl
YWxUaW1lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL2xpbnV4L1JlYWxUaW1lVGhy
ZWFkcy5oPgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK1JlYWxUaW1lVGhyZWFkcyYgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVhbFRpbWVUaHJlYWRzPiByZWFsVGltZVRocmVh
ZHM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbJl0geworICAgICAgICByZWFsVGltZVRocmVhZHMuY29uc3RydWN0KCk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlYWxUaW1lVGhyZWFkczsKK30KKworUmVhbFRpbWVUaHJl
YWRzOjpSZWFsVGltZVRocmVhZHMoKQorICAgIDogbV90aHJlYWRHcm91cChUaHJlYWRHcm91cDo6
Y3JlYXRlKCkpCit7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpyZWdpc3RlclRocmVhZChU
aHJlYWQmIHRocmVhZCkKK3sKKyAgICBUaHJlYWRHcm91cEFkZFJlc3VsdCBhZGRSZXN1bHQ7Cisg
ICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV90aHJlYWRHcm91cC0+Z2V0TG9jaygpIH07
CisgICAgICAgIGFkZFJlc3VsdCA9IG1fdGhyZWFkR3JvdXAtPmFkZChsb2NrZXIsIHRocmVhZCk7
CisgICAgfQorCisgICAgaWYgKGFkZFJlc3VsdCAhPSBUaHJlYWRHcm91cEFkZFJlc3VsdDo6TmV3
bHlBZGRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywg
dGhyZWFkID0gbWFrZVJlZih0aHJlYWQpXSB7CisgICAgICAgIGlmIChtX3RocmVhZFJlZ2lzdGVy
ZWRDYWxsYmFjaykKKyAgICAgICAgICAgIG1fdGhyZWFkUmVnaXN0ZXJlZENhbGxiYWNrKHRocmVh
ZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpzZXRUaHJlYWRSZWdpc3Rl
cmVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBUaHJlYWQmKT4mJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQoIW1fdGhyZWFkUmVnaXN0ZXJlZENhbGxiYWNrKTsKKyAgICBtX3RocmVhZFJl
Z2lzdGVyZWRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworfQorfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaCBi
L1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDRkYjRlMjY3OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmgKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZEdyb3VwLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBSZWFsVGltZVRocmVhZHMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIGZyaWVuZCBjbGFzcyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVhbFRpbWVUaHJlYWRzPjsKK3B1
YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlYWxUaW1lVGhyZWFkcyYgc2lu
Z2xldG9uKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCYpOworCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0VGhyZWFkUmVnaXN0ZXJlZENhbGxiYWNrKEZ1bmN0aW9u
PHZvaWQoY29uc3QgVGhyZWFkJik+JiYpOworCisgICAgV29yZExvY2smIGdldExvY2soKSB7IHJl
dHVybiBtX3RocmVhZEdyb3VwLT5nZXRMb2NrKCk7IH0KKyAgICBjb25zdCBMaXN0SGFzaFNldDxS
ZWY8VGhyZWFkPj4mIHRocmVhZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgY29uc3Qg
eyByZXR1cm4gbV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpOyB9CisKK3ByaXZhdGU6Cisg
ICAgUmVhbFRpbWVUaHJlYWRzKCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+
IG1fdGhyZWFkR3JvdXA7CisgICAgRnVuY3Rpb248dm9pZChjb25zdCBUaHJlYWQmKT4gbV90aHJl
YWRSZWdpc3RlcmVkQ2FsbGJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpSZWFsVGltZVRocmVhZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9U
aHJlYWRpbmdQT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5j
cHAKaW5kZXggZWRiOWI1MTg0OGY4Li45NDc0MzlhYjc3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3Np
eC9UaHJlYWRpbmdQT1NJWC5jcHAKQEAgLTQyLDcgKzQyLDEzIEBACiAjaW5jbHVkZSA8d3RmL1dv
cmRMb2NrLmg+CiAKICNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUg
PHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8d3RmL2xp
bnV4L1JlYWxUaW1lVGhyZWFkcy5oPgorI2lmbmRlZiBTQ0hFRF9SRVNFVF9PTl9GT1JLCisjZGVm
aW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAwMDAwMAorI2VuZGlmCiAjZW5kaWYKIAogI2lm
ICFDT01QSUxFUihNU1ZDKQpAQCAtNjksMTAgKzc1LDYgQEAKICNpbmNsdWRlIDxtYWNoL3RocmVh
ZF9zd2l0Y2guaD4KICNlbmRpZgogCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8c3lzL3N5c2Nh
bGwuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RhdGljIExvY2sgZ2xvYmFsU3Vz
cGVuZExvY2s7CkBAIC0yNjAsNiArMjYyLDI0IEBAIGRpc3BhdGNoX3Fvc19jbGFzc190IFRocmVh
ZDo6ZGlzcGF0Y2hRT1NDbGFzcyhRT1MgcW9zKQogfQogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkK
K3N0YXRpYyBpbnQgc2NoZWRQb2xpY3koVGhyZWFkOjpRT1MgcW9zKQoreworICAgIHN3aXRjaCAo
cW9zKSB7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6VXNlckludGVyYWN0aXZlOgorICAgICAgICBy
ZXR1cm4gU0NIRURfUlI7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6VXNlckluaXRpYXRlZDoKKyAg
ICBjYXNlIFRocmVhZDo6UU9TOjpEZWZhdWx0OgorICAgICAgICByZXR1cm4gU0NIRURfT1RIRVI7
CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6VXRpbGl0eToKKyAgICAgICAgcmV0dXJuIFNDSEVEX0JB
VENIOworICAgIGNhc2UgVGhyZWFkOjpRT1M6OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBT
Q0hFRF9JRExFOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
I2VuZGlmCisKIGJvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCog
Y29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0YWNrU2l6ZSwgUU9TIHFvcykKIHsKICAg
ICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwpAQCAtMjY3LDggKzI4Nyw2IEBAIGJvb2wgVGhyZWFk
Ojplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25h
bDxzaXplX3Q+IHN0CiAgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwogI2lmIEhBVkUoUU9T
X0NMQVNTRVMpCiAgICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGRpc3Bh
dGNoUU9TQ2xhc3MocW9zKSwgMCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShxb3MpOwogI2Vu
ZGlmCiAgICAgaWYgKHN0YWNrU2l6ZSkKICAgICAgICAgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6
ZSgmYXR0ciwgc3RhY2tTaXplLnZhbHVlKCkpOwpAQCAtMjc4LDYgKzI5NiwyMSBAQCBib29sIFRo
cmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQsIHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBzdAogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRo
cmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGNvbnRleHQgJXAiLCB3dGZUaHJlYWRFbnRyeVBv
aW50LCBjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKworI2lmIE9TKExJ
TlVYKQorICAgIGludCBwb2xpY3kgPSBzY2hlZFBvbGljeShxb3MpOworICAgIGlmIChwb2xpY3kg
PT0gU0NIRURfUlIpCisgICAgICAgIFJlYWxUaW1lVGhyZWFkczo6c2luZ2xldG9uKCkucmVnaXN0
ZXJUaHJlYWQoKnRoaXMpOworICAgIGVsc2UgeworICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
cGFyYW0gPSB7IDAgfTsKKyAgICAgICAgZXJyb3IgPSBwdGhyZWFkX3NldHNjaGVkcGFyYW0odGhy
ZWFkSGFuZGxlLCBwb2xpY3kgfCBTQ0hFRF9SRVNFVF9PTl9GT1JLLCAmcGFyYW0pOworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc2NoZWQg
cG9saWN5ICVkIGZvciB0aHJlYWQgJWQ6ICVzIiwgcG9saWN5LCB0aHJlYWRIYW5kbGUsIHN0cmVy
cm9yKGVycm9yKSk7CisgICAgfQorI2VsaWYgIUhBVkUoUU9TX0NMQVNTRVMpCisgICAgVU5VU0VE
X1BBUkFNKHFvcyk7CisjZW5kaWYKKwogICAgIGVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5k
bGUodGhyZWFkSGFuZGxlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IGQ2Nzk3ODVjYTNiZC4uMjJiNjZmZDk5ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTQzMyw2ICs0MzMsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ayIKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL2dsaWIiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2Vi
UHJvY2Vzcy9ndGsiCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9saW51eCIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL3NvdXAiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9zb3VwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQ
RS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZTM5N2MwN2I3
Y2Y3Li5iZWU1ZTVmODhlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMjkyLDYgKzI5
Miw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL2xpYndwZSIKICAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd3BlIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvZ2xp
YiIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL2xpbnV4IgogICAgICIke1dFQktJVF9E
SVJ9L1dlYlByb2Nlc3Mvc291cCIKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggYTQzOTFiZTdi
NjM3Li5lMmZiZmEzMWViZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtNDQxLDMgKzQ0MSw1IEBA
IFdlYlByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAKIAogV2ViUHJvY2Vzcy9ndGsvV2F5
bGFuZENvbXBvc2l0b3JEaXNwbGF5LmNwcAogV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5H
dGsuY3BwCisKK1dlYlByb2Nlc3MvbGludXgvUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNXUEUudHh0CmluZGV4IGY4ZmIxNTExZjJhMC4uY2NiMjMzNGNkZmI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c1dQRS50eHQKQEAgLTI2OCw0ICsyNjgsNiBAQCBXZWJQcm9jZXNzL1dlYlBhZ2Uvd3BlL1dlYlBh
Z2VXUEUuY3BwCiAKIFdlYlByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAKIAorV2ViUHJv
Y2Vzcy9saW51eC9SZWFsVGltZVRocmVhZHNNYW5hZ2VyLmNwcAorCiBXZWJQcm9jZXNzL3dwZS9X
ZWJQcm9jZXNzTWFpbldQRS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAppbmRleCAwMTlkYWYzYTExNjkuLmVmYzMwYzFlYTU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtNzkxLDYgKzc5MSw5IEBAIHZvaWQgV2ViUHJvY2Vzczo6
Y3JlYXRlV2ViUGFnZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMmCiAgICAgICAgIC8vIEJhbGFuY2VkIGJ5IGFuIGVuYWJsZVRlcm1pbmF0aW9uIGluIHJl
bW92ZVdlYlBhZ2UuCiAgICAgICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwogICAgICAgICB1cGRh
dGVDUFVMaW1pdCgpOworI2lmIE9TKExJTlVYKQorICAgICAgICBtX3JlYWxUaW1lVGhyZWFkc01h
bmFnZXIucGFnZVZpc2liaWxpdHlEaWRDaGFuZ2UoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5k
aWYKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+cmVpbml0aWFs
aXplV2ViUGFnZShXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIApAQCAtODA4LDYgKzgxMSw5IEBAIHZv
aWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZShQYWdlSWRlbnRpZmllciBwYWdlSUQpCiAKICAg
ICBlbmFibGVUZXJtaW5hdGlvbigpOwogICAgIHVwZGF0ZUNQVUxpbWl0KCk7CisjaWYgT1MoTElO
VVgpCisgICAgbV9yZWFsVGltZVRocmVhZHNNYW5hZ2VyLnBhZ2VWaXNpYmlsaXR5RGlkQ2hhbmdl
KGhhc1Zpc2libGVXZWJQYWdlKCkpOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViUHJvY2Vzczo6c2hv
dWxkVGVybWluYXRlKCkKQEAgLTE0NTQsOCArMTQ2MCwxMiBAQCB2b2lkIFdlYlByb2Nlc3M6OnVw
ZGF0ZUNQVU1vbml0b3JTdGF0ZShDUFVNb25pdG9yVXBkYXRlUmVhc29uKQogCiB2b2lkIFdlYlBy
b2Nlc3M6OnBhZ2VBY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKFBhZ2VJZGVudGlmaWVyLCBPcHRpb25T
ZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gY2hhbmdlZCkKIHsKLSAgICBpZiAoY2hh
bmdlZCAmIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkKKyAgICBpZiAoY2hhbmdl
ZCAmIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkgewogICAgICAgICB1cGRhdGVD
UFVNb25pdG9yU3RhdGUoQ1BVTW9uaXRvclVwZGF0ZVJlYXNvbjo6VmlzaWJpbGl0eUhhc0NoYW5n
ZWQpOworI2lmIE9TKExJTlVYKQorICAgICAgICBtX3JlYWxUaW1lVGhyZWFkc01hbmFnZXIucGFn
ZVZpc2liaWxpdHlEaWRDaGFuZ2UoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5kaWYKKyAgICB9
CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgKaW5kZXggYzVhYTUyOGE5MDQwLi43ZGYxOWIwOGRiODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAtNzEsNiArNzEsMTAgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtRGlzcGxheUxpYldQRS5oPgogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKKyNp
bmNsdWRlICJSZWFsVGltZVRocmVhZHNNYW5hZ2VyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIEFQ
SSB7CiBjbGFzcyBPYmplY3Q7CiB9CkBAIC0zOTMsNiArMzk3LDEwIEBAIHB1YmxpYzoKICAgICBT
cGVlY2hSZWNvZ25pdGlvblJlYWx0aW1lTWVkaWFTb3VyY2VNYW5hZ2VyJiBlbnN1cmVTcGVlY2hS
ZWNvZ25pdGlvblJlYWx0aW1lTWVkaWFTb3VyY2VNYW5hZ2VyKCk7CiAjZW5kaWYKIAorI2lmIE9T
KExJTlVYKQorICAgIFJlYWxUaW1lVGhyZWFkc01hbmFnZXImIHJlYWxUaW1lVGhyZWFkc01hbmFn
ZXIoKSB7IHJldHVybiBtX3JlYWxUaW1lVGhyZWFkc01hbmFnZXI7IH0KKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIFdlYlByb2Nlc3MoKTsKICAgICB+V2ViUHJvY2VzcygpOwpAQCAtNzU3LDYgKzc2
NSwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNwZWVjaFJlY29nbml0aW9uUmVhbHRpbWVNZWRpYVNvdXJjZU1hbmFnZXI+IG1fc3Bl
ZWNoUmVjb2duaXRpb25SZWFsdGltZU1lZGlhU291cmNlTWFuYWdlcjsKICNlbmRpZgorCisjaWYg
T1MoTElOVVgpCisgICAgUmVhbFRpbWVUaHJlYWRzTWFuYWdlciBtX3JlYWxUaW1lVGhyZWFkc01h
bmFnZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2xpbnV4L1JlYWxUaW1lVGhyZWFkc01hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2xpbnV4L1JlYWxUaW1lVGhyZWFkc01hbmFnZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTQ5M2NiNmRkN2Zl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2xpbnV4L1JlYWxU
aW1lVGhyZWFkc01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZWFsVGltZVRocmVhZHNNYW5hZ2VyLmgiCisKKyNpZiBPUyhMSU5VWCkKKyNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJl
YWRzLmg+CisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDx3dGYvZ2xpYi9SZWFsVGltZUtpdC5o
PgorI2VuZGlmCisKKyNpZm5kZWYgU0NIRURfUkVTRVRfT05fRk9SSworI2RlZmluZSBTQ0hFRF9S
RVNFVF9PTl9GT1JLIDB4NDAwMDAwMDAKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIGNvbnN0IGludCBzX3JlYWxUaW1lVGhyZWFkUHJpb3JpdHkgPSA1OworCitSZWFsVGlt
ZVRocmVhZHNNYW5hZ2VyOjpSZWFsVGltZVRocmVhZHNNYW5hZ2VyKCkKK3sKKyAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFjdGlvbjsKKyAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworICAg
IGFjdGlvbi5zYV9zaWdhY3Rpb24gPSArW10oaW50LCBzaWdpbmZvX3QqLCB2b2lkKikgeworICAg
ICAgICAvLyBXZSBkb24ndCBrbm93IHdoaWNoIHRocmVhZCBjYXVzZWQgdGhlIGxpbWl0IHRvIGJl
IHJlYWNoZWQsCisgICAgICAgIC8vIHNvIHdlIGRlbW90ZSBhbGwgcmVhbCB0aW1lIHRocmVhZHMg
dG8gYXZvaWQgU0lHS0lMTC4KKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IFJlYWxUaW1lVGhyZWFk
czo6c2luZ2xldG9uKCkuZ2V0TG9jaygpIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGhy
ZWFkIDogUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS50aHJlYWRzKGxvY2tlcikpCisgICAg
ICAgICAgICBkZW1vdGVUaHJlYWRGcm9tUmVhbFRpbWUodGhyZWFkKTsKKyAgICB9OworICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJR1hDUFUsICZhY3Rp
b24sIG51bGxwdHIpOworCisgICAgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5zZXRUaHJl
YWRSZWdpc3RlcmVkQ2FsbGJhY2soWyZdKGNvbnN0IFRocmVhZCYgdGhyZWFkKSB7CisgICAgICAg
IGlmIChtX2hhc1Zpc2libGVXZWJQYWdlKQorICAgICAgICAgICAgcHJvbW90ZVRocmVhZFRvUmVh
bFRpbWUodGhyZWFkKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsVGltZVRocmVhZHNNYW5hZ2Vy
OjpwYWdlVmlzaWJpbGl0eURpZENoYW5nZShib29sIGhhc1Zpc2libGVXZWJQYWdlKQoreworICAg
IGlmIChtX2hhc1Zpc2libGVXZWJQYWdlID09IGhhc1Zpc2libGVXZWJQYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2hhc1Zpc2libGVXZWJQYWdlID0gaGFzVmlzaWJsZVdlYlBhZ2U7CisK
KyAgICBMb2NrZXIgbG9ja2VyIHsgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5nZXRMb2Nr
KCkgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRocmVhZCA6IFJlYWxUaW1lVGhyZWFkczo6c2lu
Z2xldG9uKCkudGhyZWFkcyhsb2NrZXIpKSB7CisgICAgICAgIGlmIChtX2hhc1Zpc2libGVXZWJQ
YWdlKQorICAgICAgICAgICAgcHJvbW90ZVRocmVhZFRvUmVhbFRpbWUodGhyZWFkKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKHRocmVhZCk7Cisg
ICAgfQorfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkc01hbmFnZXI6OnByb21vdGVUaHJlYWRUb1Jl
YWxUaW1lKGNvbnN0IFRocmVhZCYgdGhyZWFkKQoreworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBw
YXJhbTsKKyAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHN0ZDo6Y2xhbXAoc19yZWFsVGltZVRo
cmVhZFByaW9yaXR5LCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKFNDSEVEX1JSKSwgc2NoZWRfZ2V0
X3ByaW9yaXR5X21heChTQ0hFRF9SUikpOworICAgIGF1dG8gZXJyb3IgPSBzY2hlZF9zZXRzY2hl
ZHVsZXIodGhyZWFkLmlkKCksIFNDSEVEX1JSIHwgU0NIRURfUkVTRVRfT05fRk9SSywgJnBhcmFt
KTsKKyNpZiBVU0UoR0xJQikKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIG1ha2VUaHJlYWRSZWFs
VGltZShnZXRwaWQoKSwgdGhyZWFkLmlkKCksIHBhcmFtLnNjaGVkX3ByaW9yaXR5KTsKKyNlbHNl
CisgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdGhyZWFkIGFzIHJlYWwgdGlt
ZTogJXMiLCBzdHJlcnJvcihlcnJvcikpOworI2VuZGlmCit9CisKK3ZvaWQgUmVhbFRpbWVUaHJl
YWRzTWFuYWdlcjo6ZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKGNvbnN0IFRocmVhZCYgdGhyZWFk
KQoreworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgMCB9OworICAgIHNjaGVkX3Nl
dHNjaGVkdWxlcih0aHJlYWQuaWQoKSwgU0NIRURfT1RIRVIgfCBTQ0hFRF9SRVNFVF9PTl9GT1JL
LCAmcGFyYW0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIE9TKExJ
TlVYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2xpbnV4L1JlYWxUaW1l
VGhyZWFkc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9saW51eC9SZWFsVGlt
ZVRocmVhZHNNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5iNmE3N2FhYjI3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvbGludXgvUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBPUyhMSU5VWCkKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUaHJlYWQ7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZWFsVGltZVRocmVhZHNNYW5hZ2VyIHsKK3B1
YmxpYzoKKyAgICBSZWFsVGltZVRocmVhZHNNYW5hZ2VyKCk7CisKKyAgICB2b2lkIHBhZ2VWaXNp
YmlsaXR5RGlkQ2hhbmdlKGJvb2wpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHByb21v
dGVUaHJlYWRUb1JlYWxUaW1lKGNvbnN0IFdURjo6VGhyZWFkJik7CisgICAgc3RhdGljIHZvaWQg
ZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKGNvbnN0IFdURjo6VGhyZWFkJik7CisKKyAgICBib29s
IG1faGFzVmlzaWJsZVdlYlBhZ2UgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBPUyhMSU5VWCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433265</attachid>
            <date>2021-07-10 12:21:20 -0700</date>
            <delta_ts>2021-07-10 12:26:06 -0700</delta_ts>
            <desc>Add Realtime portal support</desc>
            <filename>0001-Support-Realtime-portal.patch</filename>
            <type>text/plain</type>
            <size>3976</size>
            <attacher name="Patrick Griffis">pgriffis</attacher>
            
              <data encoding="base64">RnJvbSBjOGIxODJjNWIwZTIxY2MwMTkzYmU0OTRkNjZkZTU5YWYzN2NkMjJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXRyaWNrIEdyaWZmaXMgPHBncmlmZmlzQGlnYWxpYS5jb20+
CkRhdGU6IFNhdCwgMTAgSnVsIDIwMjEgMTQ6MTk6MTcgLTA1MDAKU3ViamVjdDogW1BBVENIXSBT
dXBwb3J0IFJlYWx0aW1lIHBvcnRhbAoKLS0tCiBTb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1l
S2l0LmNwcCB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwCmluZGV4IGEwYjg2M2ZiZTJhNS4uNDY5MGVkMWRkMTc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMzUsNyArMzUsMjEgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMTBfbXM7CitzdGF0
aWMgY29uc3QgU2Vjb25kcyBzX2RidXNDYWxsVGltZW91dCA9IDIwX21zOworCitzdGF0aWMgaW50
NjRfdCBwb3J0YWxHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1
bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFByb3BlcnR5
IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIHByb3BlcnR5TmFtZSksIEdfREJV
U19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNl
Y29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgdWludDY0X3QgdmFsdWU7CisgICAgZ192YXJpYW50X2dl
dChyZXN1bHQuZ2V0KCksICIodCkiLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KIAog
c3RhdGljIGludDY0X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwg
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKIHsKQEAgLTU2LDkgKzcw
LDMyIEBAIHN0YXRpYyBpbnQ2NF90IHJlYWxUaW1lS2l0R2V0UHJvcGVydHkoR0RCdXNQcm94eSog
cHJveHksIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtCiB2b2lkIG1ha2VUaHJlYWRSZWFsVGltZSh1
aW50NjRfdCBwcm9jZXNzSUQsIHVpbnQ2NF90IHRocmVhZElELCB1aW50MzJfdCBwcmlvcml0eSkK
IHsKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR1JlZlB0cjxHREJ1c1By
b3h5PiBwcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JV
U19UWVBFX1NZU1RFTSwKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5OworICAgIGJvb2wg
dXNlUG9ydGFsID0gZmFsc2U7CisKKyAgICBnX21lc3NhZ2UgKCJtYWtlVGhyZWFkUmVhbFRpbWUi
KTsKKworICAgIHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5j
KEdfQlVTX1RZUEVfU0VTU0lPTiwKICAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZsYWdz
PihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19QUk9Y
WV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwKLSAgICAgICAgIm9yZy5m
cmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCAiL29yZy9mcmVlZGVza3RvcC9SZWFsdGltZUtpdDEi
LCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIo
KSkpOworICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiwgIi9vcmcvZnJl
ZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZWFsdGlt
ZSIsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBpZiAocHJveHkpIHsKKyAgICAgICAgLyogVGVz
dCB0aGF0IHRoZSBwb3J0YWwgYWN0dWFsbHkgd29ya3MgYW5kIGlzIHRoZSB2ZXJzaW9uIHdlIG5l
ZWQuICovCisgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGdfZGJ1c19wcm94eV9j
YWxsX3N5bmMgKHByb3h5LmdldCgpLCAib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcy5H
ZXQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNzKSIsICJvcmcuZnJlZWRlc2t0b3Au
cG9ydGFsLlJlYWx0aW1lIiwgInZlcnNpb24iKSwgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKKyAg
ICAgICAgICAgIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPGludD4oKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHByb3BlcnR5OworICAgICAgICAgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0
KCksICIodikiLCAmcHJvcGVydHkub3V0UHRyKCkpOworICAgICAgICAgICAgdXNlUG9ydGFsID0g
Z192YXJpYW50X2dldF91aW50MzIgKHByb3BlcnR5LmdldCgpKSA+PSAxOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCF1c2VQb3J0YWwpIHsKKyAgICAgICAgcHJveHkgPSBhZG9wdEdSZWYo
Z19kYnVzX3Byb3h5X25ld19mb3JfYnVzX3N5bmMoR19CVVNfVFlQRV9TWVNURU0sCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxHREJ1c1Byb3h5RmxhZ3M+KEdfREJVU19QUk9YWV9GTEFHU19ET19O
T1RfQ09OTkVDVF9TSUdOQUxTIHwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9MT0FEX1BST1BF
UlRJRVMpLCBudWxscHRyLAorICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtp
dDEiLCAiL29yZy9mcmVlZGVza3RvcC9SZWFsdGltZUtpdDEiLCAib3JnLmZyZWVkZXNrdG9wLlJl
YWx0aW1lS2l0MSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIH0KKwogICAgIGlm
ICghcHJveHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdCB0byBSZWFs
dGltZUtpdDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTY4LDcg
KzEwNSwxMSBAQCB2b2lkIG1ha2VUaHJlYWRSZWFsVGltZSh1aW50NjRfdCBwcm9jZXNzSUQsIHVp
bnQ2NF90IHRocmVhZElELCB1aW50MzJfdCBwcmlvcml0eQogICAgIC8vIFJlYWxUaW1lS2l0IHJl
cXVpcmVzIHRoZSBjbGllbnQgdG8gaGF2ZSBSTElNSVRfUlRUSU1FIHNldC4KICAgICBzdHJ1Y3Qg
cmxpbWl0IHJsOwogICAgIGlmIChnZXRybGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKSA+PSAwKSB7
Ci0gICAgICAgIGF1dG8gcnR0aW1lTWF4ID0gcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShwcm94eS5n
ZXQoKSwgIlJUVGltZVVTZWNNYXgiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICB1aW50NjRf
dCBydHRpbWVNYXg7CisgICAgICAgIGlmICh1c2VQb3J0YWwpCisgICAgICAgICAgICBydHRpbWVN
YXggPSBwb3J0YWxHZXRQcm9wZXJ0eShwcm94eS5nZXQoKSwgIlJUVGltZVVTZWNNYXgiLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBydHRpbWVNYXggPSByZWFs
VGltZUtpdEdldFByb3BlcnR5KHByb3h5LmdldCgpLCAiUlRUaW1lVVNlY01heCIsICZlcnJvci5v
dXRQdHIoKSk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZ2V0IFJUVGltZVVTZWNNYXggZnJvbSBSZWFsdGltZUtpdDogJXMiLCBlcnJvci0+
bWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm47Ci0tIAoyLjMxLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433266</attachid>
            <date>2021-07-10 12:26:06 -0700</date>
            <delta_ts>2021-07-10 12:38:35 -0700</delta_ts>
            <desc>Add Realtime portal support</desc>
            <filename>0001-Support-Realtime-portal.patch</filename>
            <type>text/plain</type>
            <size>3934</size>
            <attacher name="Patrick Griffis">pgriffis</attacher>
            
              <data encoding="base64">RnJvbSBmN2FmMDJmOTVmYjUwZjBhZDU5ZmQ1ZTQzNzExN2IxYTFiOTgyZDhiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXRyaWNrIEdyaWZmaXMgPHBncmlmZmlzQGlnYWxpYS5jb20+
CkRhdGU6IFNhdCwgMTAgSnVsIDIwMjEgMTQ6MTk6MTcgLTA1MDAKU3ViamVjdDogW1BBVENIXSBT
dXBwb3J0IFJlYWx0aW1lIHBvcnRhbAoKLS0tCiBTb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1l
S2l0LmNwcCB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwCmluZGV4IGEwYjg2M2ZiZTJhNS4uMWE4ZmIyNTUwNzE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMzUsNyArMzUsMjEgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMTBfbXM7CitzdGF0
aWMgY29uc3QgU2Vjb25kcyBzX2RidXNDYWxsVGltZW91dCA9IDIwX21zOworCitzdGF0aWMgaW50
NjRfdCBwb3J0YWxHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1
bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFByb3BlcnR5
IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIHByb3BlcnR5TmFtZSksIEdfREJV
U19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNl
Y29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgdWludDY0X3QgdmFsdWU7CisgICAgZ192YXJpYW50X2dl
dChyZXN1bHQuZ2V0KCksICIodCkiLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KIAog
c3RhdGljIGludDY0X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwg
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKIHsKQEAgLTU2LDkgKzcw
LDMwIEBAIHN0YXRpYyBpbnQ2NF90IHJlYWxUaW1lS2l0R2V0UHJvcGVydHkoR0RCdXNQcm94eSog
cHJveHksIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtCiB2b2lkIG1ha2VUaHJlYWRSZWFsVGltZSh1
aW50NjRfdCBwcm9jZXNzSUQsIHVpbnQ2NF90IHRocmVhZElELCB1aW50MzJfdCBwcmlvcml0eSkK
IHsKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR1JlZlB0cjxHREJ1c1By
b3h5PiBwcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JV
U19UWVBFX1NZU1RFTSwKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5OworICAgIGJvb2wg
dXNlUG9ydGFsID0gZmFsc2U7CisKKyAgICBwcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlf
bmV3X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sCiAgICAgICAgIHN0YXRpY19jYXN0
PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9DT05ORUNUX1NJR05B
TFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVSVElFUyksIG51bGxwdHIs
Ci0gICAgICAgICJvcmcuZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgIi9vcmcvZnJlZWRlc2t0
b3AvUmVhbHRpbWVLaXQxIiwgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBudWxscHRy
LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVz
a3RvcCIsICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wIiwgIm9yZy5mcmVlZGVza3Rv
cC5wb3J0YWwuUmVhbHRpbWUiLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgaWYgKHByb3h5KSB7
CisgICAgICAgIC8qIFRlc3QgdGhhdCB0aGUgcG9ydGFsIGFjdHVhbGx5IHdvcmtzIGFuZCBpcyB0
aGUgdmVyc2lvbiB3ZSBuZWVkLiAqLworICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHQg
PSBnX2RidXNfcHJveHlfY2FsbF9zeW5jIChwcm94eS5nZXQoKSwgIm9yZy5mcmVlZGVza3RvcC5E
QnVzLlByb3BlcnRpZXMuR2V0IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzcykiLCAi
b3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZWFsdGltZSIsICJ2ZXJzaW9uIiksIEdfREJVU19DQUxM
X0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNlY29uZHNB
czxpbnQ+KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAg
ICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBwcm9wZXJ0eTsKKyAgICAgICAgICAgIGdfdmFyaWFu
dF9nZXQocmVzdWx0LmdldCgpLCAiKHYpIiwgJnByb3BlcnR5Lm91dFB0cigpKTsKKyAgICAgICAg
ICAgIHVzZVBvcnRhbCA9IGdfdmFyaWFudF9nZXRfdWludDMyIChwcm9wZXJ0eS5nZXQoKSkgPj0g
MTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdXNlUG9ydGFsKSB7CisgICAgICAgIHBy
b3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZUEVf
U1lTVEVNLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNf
UFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19QUk9YWV9GTEFHU19E
T19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICJvcmcuZnJlZWRl
c2t0b3AuUmVhbHRpbWVLaXQxIiwgIi9vcmcvZnJlZWRlc2t0b3AvUmVhbHRpbWVLaXQxIiwgIm9y
Zy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICB9CisKICAgICBpZiAoIXByb3h5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNvbm5lY3QgdG8gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwogICAgICAgICBy
ZXR1cm47CkBAIC02OCw3ICsxMDMsMTEgQEAgdm9pZCBtYWtlVGhyZWFkUmVhbFRpbWUodWludDY0
X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkKICAgICAv
LyBSZWFsVGltZUtpdCByZXF1aXJlcyB0aGUgY2xpZW50IHRvIGhhdmUgUkxJTUlUX1JUVElNRSBz
ZXQuCiAgICAgc3RydWN0IHJsaW1pdCBybDsKICAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9SVFRJ
TUUsICZybCkgPj0gMCkgewotICAgICAgICBhdXRvIHJ0dGltZU1heCA9IHJlYWxUaW1lS2l0R2V0
UHJvcGVydHkocHJveHkuZ2V0KCksICJSVFRpbWVVU2VjTWF4IiwgJmVycm9yLm91dFB0cigpKTsK
KyAgICAgICAgaW50NjRfdCBydHRpbWVNYXg7CisgICAgICAgIGlmICh1c2VQb3J0YWwpCisgICAg
ICAgICAgICBydHRpbWVNYXggPSBwb3J0YWxHZXRQcm9wZXJ0eShwcm94eS5nZXQoKSwgIlJUVGlt
ZVVTZWNNYXgiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
dHRpbWVNYXggPSByZWFsVGltZUtpdEdldFByb3BlcnR5KHByb3h5LmdldCgpLCAiUlRUaW1lVVNl
Y01heCIsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IFJUVGltZVVTZWNNYXggZnJvbSBSZWFsdGltZUtp
dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm47Ci0tIAoyLjMxLjEK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433267</attachid>
            <date>2021-07-10 12:38:35 -0700</date>
            <delta_ts>2021-07-18 13:23:10 -0700</delta_ts>
            <desc>Add Realtime portal support</desc>
            <filename>0001-Support-Realtime-portal.patch</filename>
            <type>text/plain</type>
            <size>3932</size>
            <attacher name="Patrick Griffis">pgriffis</attacher>
            
              <data encoding="base64">RnJvbSAxZWU2ODI0MWY0MDNmNzIwNTRjNTM3NjdkZDdkYWM0MGJmZTIwOTYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXRyaWNrIEdyaWZmaXMgPHBncmlmZmlzQGlnYWxpYS5jb20+
CkRhdGU6IFNhdCwgMTAgSnVsIDIwMjEgMTQ6MTk6MTcgLTA1MDAKU3ViamVjdDogW1BBVENIXSBT
dXBwb3J0IFJlYWx0aW1lIHBvcnRhbAoKLS0tCiBTb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1l
S2l0LmNwcCB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwCmluZGV4IGEwYjg2M2ZiZTJhNS4uMzczZTg3ZjY4YWQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMzUsNyArMzUsMjEgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMTBfbXM7CitzdGF0
aWMgY29uc3QgU2Vjb25kcyBzX2RidXNDYWxsVGltZW91dCA9IDIwX21zOworCitzdGF0aWMgaW50
NjRfdCBwb3J0YWxHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1
bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFByb3BlcnR5
IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIHByb3BlcnR5TmFtZSksIEdfREJV
U19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNl
Y29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgaW50NjRfdCB2YWx1ZTsKKyAgICBnX3ZhcmlhbnRfZ2V0
KHJlc3VsdC5nZXQoKSwgIih4KSIsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQogCiBz
dGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVzUHJveHkqIHByb3h5LCBj
b25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQogewpAQCAtNTYsOSArNzAs
MzAgQEAgc3RhdGljIGludDY0X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBw
cm94eSwgY29uc3QgY2hhciogcHJvcGVydHlOYW0KIHZvaWQgbWFrZVRocmVhZFJlYWxUaW1lKHVp
bnQ2NF90IHByb2Nlc3NJRCwgdWludDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KQog
ewogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHUmVmUHRyPEdEQnVzUHJv
eHk+IHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVT
X1RZUEVfU1lTVEVNLAorICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHk7CisgICAgYm9vbCB1
c2VQb3J0YWwgPSBmYWxzZTsKKworICAgIHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9u
ZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwKICAgICAgICAgc3RhdGljX2Nhc3Q8
R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFM
UyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwK
LSAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCAiL29yZy9mcmVlZGVza3Rv
cC9SZWFsdGltZUtpdDEiLCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsIG51bGxwdHIs
ICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNr
dG9wIiwgIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiLCAib3JnLmZyZWVkZXNrdG9w
LnBvcnRhbC5SZWFsdGltZSIsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBpZiAocHJveHkpIHsK
KyAgICAgICAgLyogVGVzdCB0aGF0IHRoZSBwb3J0YWwgYWN0dWFsbHkgd29ya3MgYW5kIGlzIHRo
ZSB2ZXJzaW9uIHdlIG5lZWQuICovCisgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9
IGdfZGJ1c19wcm94eV9jYWxsX3N5bmMgKHByb3h5LmdldCgpLCAib3JnLmZyZWVkZXNrdG9wLkRC
dXMuUHJvcGVydGllcy5HZXQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNzKSIsICJv
cmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlYWx0aW1lIiwgInZlcnNpb24iKSwgR19EQlVTX0NBTExf
RkxBR1NfTk9ORSwKKyAgICAgICAgICAgIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0Fz
PGludD4oKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAg
ICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHByb3BlcnR5OworICAgICAgICAgICAgZ192YXJpYW50
X2dldChyZXN1bHQuZ2V0KCksICIodikiLCAmcHJvcGVydHkub3V0UHRyKCkpOworICAgICAgICAg
ICAgdXNlUG9ydGFsID0gZ192YXJpYW50X2dldF91aW50MzIocHJvcGVydHkuZ2V0KCkpID49IDE7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXVzZVBvcnRhbCkgeworICAgICAgICBwcm94
eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NZ
U1RFTSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BS
T1hZX0ZMQUdTX0RPX05PVF9DT05ORUNUX1NJR05BTFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9f
Tk9UX0xPQURfUFJPUEVSVElFUyksIG51bGxwdHIsCisgICAgICAgICAgICAib3JnLmZyZWVkZXNr
dG9wLlJlYWx0aW1lS2l0MSIsICIvb3JnL2ZyZWVkZXNrdG9wL1JlYWx0aW1lS2l0MSIsICJvcmcu
ZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7Cisg
ICAgfQorCiAgICAgaWYgKCFwcm94eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
b25uZWN0IHRvIFJlYWx0aW1lS2l0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNjgsNyArMTAzLDExIEBAIHZvaWQgbWFrZVRocmVhZFJlYWxUaW1lKHVpbnQ2NF90
IHByb2Nlc3NJRCwgdWludDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5CiAgICAgLy8g
UmVhbFRpbWVLaXQgcmVxdWlyZXMgdGhlIGNsaWVudCB0byBoYXZlIFJMSU1JVF9SVFRJTUUgc2V0
LgogICAgIHN0cnVjdCBybGltaXQgcmw7CiAgICAgaWYgKGdldHJsaW1pdChSTElNSVRfUlRUSU1F
LCAmcmwpID49IDApIHsKLSAgICAgICAgYXV0byBydHRpbWVNYXggPSByZWFsVGltZUtpdEdldFBy
b3BlcnR5KHByb3h5LmdldCgpLCAiUlRUaW1lVVNlY01heCIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgICAgIGludDY0X3QgcnR0aW1lTWF4OworICAgICAgICBpZiAodXNlUG9ydGFsKQorICAgICAg
ICAgICAgcnR0aW1lTWF4ID0gcG9ydGFsR2V0UHJvcGVydHkocHJveHkuZ2V0KCksICJSVFRpbWVV
U2VjTWF4IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcnR0
aW1lTWF4ID0gcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShwcm94eS5nZXQoKSwgIlJUVGltZVVTZWNN
YXgiLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBSVFRpbWVVU2VjTWF4IGZyb20gUmVhbHRpbWVLaXQ6
ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwotLSAKMi4zMS4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433758</attachid>
            <date>2021-07-18 13:23:10 -0700</date>
            <delta_ts>2021-10-15 06:41:09 -0700</delta_ts>
            <desc>Add Realtime portal support</desc>
            <filename>0001-Support-Realtime-portal.patch</filename>
            <type>text/plain</type>
            <size>3943</size>
            <attacher name="Patrick Griffis">pgriffis</attacher>
            
              <data encoding="base64">RnJvbSA3OTBjMTQ0YjU0YzRlMTllMTJiOTI4OTVlNTUyZGEyNGRiYTA4ZDMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXRyaWNrIEdyaWZmaXMgPHBncmlmZmlzQGlnYWxpYS5jb20+
CkRhdGU6IFNhdCwgMTAgSnVsIDIwMjEgMTQ6MTk6MTcgLTA1MDAKU3ViamVjdDogW1BBVENIXSBT
dXBwb3J0IFJlYWx0aW1lIHBvcnRhbAoKLS0tCiBTb3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1l
S2l0LmNwcCB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUmVhbFRp
bWVLaXQuY3BwCmluZGV4IGEwYjg2M2ZiZTJhNS4uMjA1NWVhMmRlZDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL1JlYWxUaW1lS2l0LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL1JlYWxUaW1lS2l0LmNwcApAQCAtMzUsNyArMzUsMjEgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMTBfbXM7CitzdGF0
aWMgY29uc3QgU2Vjb25kcyBzX2RidXNDYWxsVGltZW91dCA9IDIwX21zOworCitzdGF0aWMgaW50
NjRfdCBwb3J0YWxHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1
bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFByb3BlcnR5
IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIHByb3BlcnR5TmFtZSksIEdfREJV
U19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNl
Y29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgaW50NjRfdCB2YWx1ZTsKKyAgICBnX3ZhcmlhbnRfZ2V0
KHJlc3VsdC5nZXQoKSwgIih4KSIsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQogCiBz
dGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVzUHJveHkqIHByb3h5LCBj
b25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQogewpAQCAtNTYsOSArNzAs
MzAgQEAgc3RhdGljIGludDY0X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBw
cm94eSwgY29uc3QgY2hhciogcHJvcGVydHlOYW0KIHZvaWQgbWFrZVRocmVhZFJlYWxUaW1lKHVp
bnQ2NF90IHByb2Nlc3NJRCwgdWludDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KQog
ewogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHUmVmUHRyPEdEQnVzUHJv
eHk+IHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVT
X1RZUEVfU1lTVEVNLAorICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHk7CisgICAgYm9vbCB1
c2VQb3J0YWwgPSBmYWxzZTsKKworICAgIHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9u
ZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwKICAgICAgICAgc3RhdGljX2Nhc3Q8
R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFM
UyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwK
LSAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCAiL29yZy9mcmVlZGVza3Rv
cC9SZWFsdGltZUtpdDEiLCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsIG51bGxwdHIs
ICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNr
dG9wIiwgIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiLCAib3JnLmZyZWVkZXNrdG9w
LnBvcnRhbC5SZWFsdGltZSIsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBpZiAocHJveHkpIHsK
KyAgICAgICAgLyogVGVzdCB0aGF0IHRoZSBwb3J0YWwgYWN0dWFsbHkgd29ya3MgYW5kIGlzIHRo
ZSB2ZXJzaW9uIHdlIG5lZWQuICovCisgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9
IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jIChwcm94eS5nZXQoKSwgIm9yZy5mcmVl
ZGVza3RvcC5EQnVzLlByb3BlcnRpZXMuR2V0IiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXco
IihzcykiLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZWFsdGltZSIsICJ2ZXJzaW9uIiksIEdf
REJVU19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxs
aXNlY29uZHNBczxpbnQ+KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcHJvcGVydHk7CisgICAgICAgICAg
ICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIih2KSIsICZwcm9wZXJ0eS5vdXRQdHIoKSk7
CisgICAgICAgICAgICB1c2VQb3J0YWwgPSBnX3ZhcmlhbnRfZ2V0X3VpbnQzMihwcm9wZXJ0eS5n
ZXQoKSkgPj0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdXNlUG9ydGFsKSB7Cisg
ICAgICAgIHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdf
QlVTX1RZUEVfU1lTVEVNLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZsYWdz
PihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19QUk9Y
WV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICJv
cmcuZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgIi9vcmcvZnJlZWRlc2t0b3AvUmVhbHRpbWVL
aXQxIiwgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBudWxscHRyLCAmZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICB9CisKICAgICBpZiAoIXByb3h5KSB7CiAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNvbm5lY3QgdG8gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwog
ICAgICAgICByZXR1cm47CkBAIC02OCw3ICsxMDMsMTEgQEAgdm9pZCBtYWtlVGhyZWFkUmVhbFRp
bWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3Jp
dHkKICAgICAvLyBSZWFsVGltZUtpdCByZXF1aXJlcyB0aGUgY2xpZW50IHRvIGhhdmUgUkxJTUlU
X1JUVElNRSBzZXQuCiAgICAgc3RydWN0IHJsaW1pdCBybDsKICAgICBpZiAoZ2V0cmxpbWl0KFJM
SU1JVF9SVFRJTUUsICZybCkgPj0gMCkgewotICAgICAgICBhdXRvIHJ0dGltZU1heCA9IHJlYWxU
aW1lS2l0R2V0UHJvcGVydHkocHJveHkuZ2V0KCksICJSVFRpbWVVU2VjTWF4IiwgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgaW50NjRfdCBydHRpbWVNYXg7CisgICAgICAgIGlmICh1c2VQb3J0
YWwpCisgICAgICAgICAgICBydHRpbWVNYXggPSBwb3J0YWxHZXRQcm9wZXJ0eShwcm94eS5nZXQo
KSwgIlJUVGltZVVTZWNNYXgiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBydHRpbWVNYXggPSByZWFsVGltZUtpdEdldFByb3BlcnR5KHByb3h5LmdldCgpLCAi
UlRUaW1lVVNlY01heCIsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgICAgIGlmIChlcnJvcikgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IFJUVGltZVVTZWNNYXggZnJvbSBS
ZWFsdGltZUtpdDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm47Ci0t
IAoyLjMxLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441371</attachid>
            <date>2021-10-15 06:41:09 -0700</date>
            <delta_ts>2021-10-18 05:19:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-real-time-threads.diff</filename>
            <type>text/plain</type>
            <size>28853</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYmUwOGFlZjczMWMzLi4xNTc3OTAwNTQ2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIw
MjEtMTAtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gVXNlckludGVyYWN0aXZlIHRocmVhZHMgYXJlIG5vdCBSZWFsLXRp
bWUgaW4gTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDExNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBSZWFsVGltZVRocmVhZHMgc2luZ2xldG9uIHRvIHJlZ2lzdGVyIHJlYWwgdGltZSB0
aHJlYWRzLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOgorICAg
ICAgICAqIHd0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWVCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIHd0Zi9saW51eC9S
ZWFsVGltZVRocmVhZHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRz
OjpzaW5nbGV0b24pOgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OlJlYWxUaW1lVGhy
ZWFkcyk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6cmVnaXN0ZXJUaHJlYWQpOgor
ICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnNldFRocmVhZFJlZ2lzdGVyZWRDYWxsYmFj
ayk6CisgICAgICAgICogd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpnZXRMb2NrKToKKyAgICAgICAgKFdURjo6UmVhbFRp
bWVUaHJlYWRzOjp0aHJlYWRzIGNvbnN0KToKKyAgICAgICAgKiB3dGYvcG9zaXgvVGhyZWFkaW5n
UE9TSVguY3BwOgorICAgICAgICAoV1RGOjpzY2hlZFBvbGljeSk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6ZXN0YWJsaXNoSGFuZGxlKToKKwogMjAyMS0xMC0xNSAgUm9iaW4gTW9yaXNzZXQgIDxy
bW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVydCByMjg0MjMwLCBteSBsYXN0IGZp
eGVzIHRvIHRoZSB3YXRjaCBidWlsZCBtYWtlIGl0IGJyZWFrIHRlc3RzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDgwOTBlOTE2MGEzNS4uYzEzMmQ0MzJmY2IxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMTAsNiArMTAsOCBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hF
QURFUlMKICAgICBnbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oCiAgICAgZ2xpYi9Tb2NrZXRD
b25uZWN0aW9uLmgKICAgICBnbGliL1dURkdUeXBlLmgKKworICAgIGxpbnV4L1JlYWxUaW1lVGhy
ZWFkcy5oCiApCiAKIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCkBAIC01
MCw2ICs1Miw3IEBAIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiAgICAg
bGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1v
cnlTdGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9yeUZvb3RwcmludExpbnV4LmNwcAorICAg
ICAgICBsaW51eC9SZWFsVGltZVRocmVhZHMuY3BwCiAKICAgICAgICAgdW5peC9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJVbml4LmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXgg
ZmI4YmIzZWU2NjMyLi5mYWJmMjU2MDZiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCkBA
IC0xMSw2ICsxMSw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgbGlu
dXgvUHJvY2Vzc01lbW9yeUZvb3RwcmludC5oCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1v
cnlTdGF0dXMuaAorICAgIGxpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCiApCiAKIGxpc3QoQVBQRU5E
IFdURl9TT1VSQ0VTCkBAIC0yNyw2ICsyOCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgZ2xpYi9VUkxHTGliLmNwcAogCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0
dXMuY3BwCisgICAgbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcAogCiAgICAgcG9zaXgvQ1BVVGlt
ZVBPU0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNw
cAppbmRleCBkNjY2NjhiMTc5NjkuLmNkYzM4MTdmYTZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBA
IC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgogI2VuZGlmCiAK
KyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+Cisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIExvY2sgVGhyZWFkOjpzX2FsbFRocmVhZHNMb2Nr
OwpAQCAtMzMwLDYgKzMzNCwxMiBAQCB2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogICAgIEFTU0VSVChyZWxhdGl2ZVBy
aW9yaXR5IDw9IDApOwogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5ID49IFFPU19NSU5fUkVM
QVRJVkVfUFJJT1JJVFkpOwogICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKGFkanVz
dGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCByZWxhdGl2ZVByaW9yaXR5
KTsKKyNlbGlmIE9TKExJTlVYKQorICAgIC8vIFdlIGRvbid0IGFsbG93IHRvIG1ha2UgdGhlIG1h
aW4gdGhyZWFkIHJlYWwgdGltZS4gVGhpcyBpcyB1c2VkIGJ5IHNlY29uZGFyeSBwcm9jZXNzIHRv
IG1hdGNoIHRoZQorICAgIC8vIFVJIHByb2Nlc3MsIGJ1dCBpbiBsaW51eCB0aGUgVUkgcHJvY2Vz
cyBpcyBub3QgcmVhbCB0aW1lLgorICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIFJl
YWxUaW1lVGhyZWFkczo6c2luZ2xldG9uKCkucmVnaXN0ZXJUaHJlYWQoY3VycmVudCgpKTsKKyAg
ICBVTlVTRURfUEFSQU0ocmVsYXRpdmVQcmlvcml0eSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShyZWxhdGl2ZVByaW9yaXR5KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Z2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29y
a1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXggZDk5N2ZkZTczYWQ0Li5kMjU3ZDNhNzIwNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzksMTQgKzM5
LDE0IEBAIFdvcmtRdWV1ZUJhc2U6OldvcmtRdWV1ZUJhc2UoUnVuTG9vcCYgcnVuTG9vcCkKIHsK
IH0KIAotdm9pZCBXb3JrUXVldWVCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciog
bmFtZSwgVHlwZSwgUU9TKQordm9pZCBXb3JrUXVldWVCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUo
Y29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TIHFvcykKIHsKICAgICBCaW5hcnlTZW1hcGhvcmUg
c2VtYXBob3JlOwogICAgIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFsmXSB7CiAgICAgICAgIG1fcnVu
TG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsK
ICAgICAgICAgbV9ydW5Mb29wLT5ydW4oKTsKLSAgICB9KS0+ZGV0YWNoKCk7CisgICAgfSwgVGhy
ZWFkVHlwZTo6VW5rbm93biwgcW9zKS0+ZGV0YWNoKCk7CiAgICAgc2VtYXBob3JlLndhaXQoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZTM1ZWZjNmJiMjIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3BwCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaD4KKworI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitSZWFsVGltZVRocmVhZHMmIFJlYWxUaW1l
VGhyZWFkczo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJl
YWxUaW1lVGhyZWFkcz4gcmVhbFRpbWVUaHJlYWRzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsKKyAgICAgICAg
cmVhbFRpbWVUaHJlYWRzLmNvbnN0cnVjdCgpOworICAgIH0pOworICAgIHJldHVybiByZWFsVGlt
ZVRocmVhZHM7Cit9CisKK1JlYWxUaW1lVGhyZWFkczo6UmVhbFRpbWVUaHJlYWRzKCkKKyAgICA6
IG1fdGhyZWFkR3JvdXAoVGhyZWFkR3JvdXA6OmNyZWF0ZSgpKQoreworfQorCit2b2lkIFJlYWxU
aW1lVGhyZWFkczo6cmVnaXN0ZXJUaHJlYWQoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgVGhyZWFk
R3JvdXBBZGRSZXN1bHQgYWRkUmVzdWx0OworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fdGhyZWFkR3JvdXAtPmdldExvY2soKSB9OworICAgICAgICBhZGRSZXN1bHQgPSBtX3RocmVh
ZEdyb3VwLT5hZGQobG9ja2VyLCB0aHJlYWQpOworICAgIH0KKworICAgIGlmIChhZGRSZXN1bHQg
IT0gVGhyZWFkR3JvdXBBZGRSZXN1bHQ6Ok5ld2x5QWRkZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHRocmVhZCA9IFJlZiB7IHRocmVhZCB9XSB7Cisg
ICAgICAgIGlmIChtX3RocmVhZFJlZ2lzdGVyZWRDYWxsYmFjaykKKyAgICAgICAgICAgIG1fdGhy
ZWFkUmVnaXN0ZXJlZENhbGxiYWNrKHRocmVhZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbFRp
bWVUaHJlYWRzOjpzZXRUaHJlYWRSZWdpc3RlcmVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25z
dCBUaHJlYWQmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdGhyZWFkUmVnaXN0ZXJl
ZENhbGxiYWNrKTsKKyAgICBtX3RocmVhZFJlZ2lzdGVyZWRDYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spOworfQorfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1l
VGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDRkYjRl
MjY3OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVU
aHJlYWRzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZEdy
b3VwLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBSZWFsVGltZVRocmVhZHMgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVhbFRpbWVUaHJlYWRzPjsKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFJlYWxUaW1lVGhyZWFkcyYgc2luZ2xldG9uKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVy
VGhyZWFkKFRocmVhZCYpOworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0VGhyZWFk
UmVnaXN0ZXJlZENhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgVGhyZWFkJik+JiYpOworCisg
ICAgV29yZExvY2smIGdldExvY2soKSB7IHJldHVybiBtX3RocmVhZEdyb3VwLT5nZXRMb2NrKCk7
IH0KKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWY8VGhyZWFkPj4mIHRocmVhZHMoY29uc3QgQWJz
dHJhY3RMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gbV90aHJlYWRHcm91cC0+dGhyZWFk
cyhsb2NrZXIpOyB9CisKK3ByaXZhdGU6CisgICAgUmVhbFRpbWVUaHJlYWRzKCk7CisKKyAgICBz
dGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+IG1fdGhyZWFkR3JvdXA7CisgICAgRnVuY3Rpb248
dm9pZChjb25zdCBUaHJlYWQmKT4gbV90aHJlYWRSZWdpc3RlcmVkQ2FsbGJhY2s7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSZWFsVGltZVRocmVhZHM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAKaW5kZXggZWRiOWI1MTg0OGY4Li45NDc0Mzlh
Yjc3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9UaHJlYWRpbmdQT1NJWC5jcHAKQEAgLTQyLDcg
KzQyLDEzIEBACiAjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CiAKICNpZiBPUyhMSU5VWCkKKyNp
bmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9z
eXNjYWxsLmg+CisjaW5jbHVkZSA8d3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oPgorI2lmbmRl
ZiBTQ0hFRF9SRVNFVF9PTl9GT1JLCisjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAw
MDAwMAorI2VuZGlmCiAjZW5kaWYKIAogI2lmICFDT01QSUxFUihNU1ZDKQpAQCAtNjksMTAgKzc1
LDYgQEAKICNpbmNsdWRlIDxtYWNoL3RocmVhZF9zd2l0Y2guaD4KICNlbmRpZgogCi0jaWYgT1Mo
TElOVVgpCi0jaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RG
IHsKIAogc3RhdGljIExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CkBAIC0yNjAsNiArMjYyLDI0IEBA
IGRpc3BhdGNoX3Fvc19jbGFzc190IFRocmVhZDo6ZGlzcGF0Y2hRT1NDbGFzcyhRT1MgcW9zKQog
fQogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKK3N0YXRpYyBpbnQgc2NoZWRQb2xpY3koVGhyZWFk
OjpRT1MgcW9zKQoreworICAgIHN3aXRjaCAocW9zKSB7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6
VXNlckludGVyYWN0aXZlOgorICAgICAgICByZXR1cm4gU0NIRURfUlI7CisgICAgY2FzZSBUaHJl
YWQ6OlFPUzo6VXNlckluaXRpYXRlZDoKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpEZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gU0NIRURfT1RIRVI7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6VXRpbGl0
eToKKyAgICAgICAgcmV0dXJuIFNDSEVEX0JBVENIOworICAgIGNhc2UgVGhyZWFkOjpRT1M6OkJh
Y2tncm91bmQ6CisgICAgICAgIHJldHVybiBTQ0hFRF9JRExFOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmCisKIGJvb2wgVGhyZWFkOjplc3RhYmxp
c2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+
IHN0YWNrU2l6ZSwgUU9TIHFvcykKIHsKICAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwpAQCAt
MjY3LDggKzI4Nyw2IEBAIGJvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29u
dGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0CiAgICAgcHRocmVhZF9hdHRy
X2luaXQoJmF0dHIpOwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgcHRocmVhZF9hdHRyX3Nl
dF9xb3NfY2xhc3NfbnAoJmF0dHIsIGRpc3BhdGNoUU9TQ2xhc3MocW9zKSwgMCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShxb3MpOwogI2VuZGlmCiAgICAgaWYgKHN0YWNrU2l6ZSkKICAgICAg
ICAgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgc3RhY2tTaXplLnZhbHVlKCkpOwpA
QCAtMjc4LDYgKzI5NiwyMSBAQCBib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVh
ZENvbnRleHQqIGNvbnRleHQsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdAogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGNv
bnRleHQgJXAiLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KKworI2lmIE9TKExJTlVYKQorICAgIGludCBwb2xpY3kgPSBzY2hlZFBv
bGljeShxb3MpOworICAgIGlmIChwb2xpY3kgPT0gU0NIRURfUlIpCisgICAgICAgIFJlYWxUaW1l
VGhyZWFkczo6c2luZ2xldG9uKCkucmVnaXN0ZXJUaHJlYWQoKnRoaXMpOworICAgIGVsc2Ugewor
ICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IDAgfTsKKyAgICAgICAgZXJyb3Ig
PSBwdGhyZWFkX3NldHNjaGVkcGFyYW0odGhyZWFkSGFuZGxlLCBwb2xpY3kgfCBTQ0hFRF9SRVNF
VF9PTl9GT1JLLCAmcGFyYW0pOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBzZXQgc2NoZWQgcG9saWN5ICVkIGZvciB0aHJlYWQgJWQ6ICVzIiwg
cG9saWN5LCB0aHJlYWRIYW5kbGUsIHN0cmVycm9yKGVycm9yKSk7CisgICAgfQorI2VsaWYgIUhB
VkUoUU9TX0NMQVNTRVMpCisgICAgVU5VU0VEX1BBUkFNKHFvcyk7CisjZW5kaWYKKwogICAgIGVz
dGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUodGhyZWFkSGFuZGxlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggMTk3YmNjMTFmYmU0Li4wNDIyNjMwMzc2OGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzQgQEAKKzIwMjEtMTAtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gVXNlckludGVyYWN0aXZlIHRo
cmVhZHMgYXJlIG5vdCBSZWFsLXRpbWUgaW4gTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDExNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBSZWFsVGltZVRocmVhZHNNYW5hZ2VyIHNpbmds
ZXRvbiB0byBwcm9tb3RlL2RlbW90ZSB0aHJlYWRzIHRvL2Zyb20gcmVhbCB0aW1lLgorCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6Cisg
ICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlbW92
ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwYWdlQWN0aXZpdHlTdGF0
ZURpZENoYW5nZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlYWxUaW1lVGhyZWFkc01hbmFnZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvbGludXgvUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZWFsVGltZVRocmVhZHNNYW5hZ2VyOjpSZWFsVGltZVRocmVhZHNNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6UmVhbFRpbWVUaHJlYWRzTWFuYWdlcjo6cGFnZVZpc2li
aWxpdHlEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZWFsVGltZVRocmVhZHNNYW5hZ2Vy
Ojpwcm9tb3RlVGhyZWFkVG9SZWFsVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlJlYWxUaW1lVGhy
ZWFkc01hbmFnZXI6OmRlbW90ZVRocmVhZEZyb21SZWFsVGltZSk6CisgICAgICAgIChXZWJLaXQ6
OmlzUnVubmluZ0luU2FuZGJveCk6CisgICAgICAgIChXZWJLaXQ6OnJlYWxUaW1lS2l0R2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpSZWFsVGltZVRocmVhZHNNYW5hZ2VyOjpyZWFsVGlt
ZUtpdE1ha2VUaHJlYWRSZWFsVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlJlYWxUaW1lVGhyZWFk
c01hbmFnZXI6OnNjaGVkdWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZWFsVGltZVRocmVhZHNNYW5hZ2VyOjpkaXNjYXJkUmVhbFRpbWVLaXRQcm94eVRpbWVy
RmlyZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvbGludXgvUmVhbFRpbWVUaHJlYWRzTWFuYWdl
ci5oOiBBZGRlZC4KKwogMjAyMS0xMC0xNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBBZEF0dHJpYnV0aW9uRGFlbW9uIHBsaXN0IG9u
IGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggODhjNTYwY2M5ZjYyLi4yMTJhMTc3NjA3
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDQ3LDYgKzQ0Nyw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvZ2xpYiIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL2d0ayIKKyAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL2xpbnV4IgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mvc291cCIKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ayIKICAgICAiJHtX
RUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQ
RS5jbWFrZQppbmRleCBmNGNkNWJlZjQwMmIuLjljOWY0M2ZhOTBjYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V1BFLmNtYWtlCkBAIC0zMDUsNiArMzA1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvbGlid3Bl
IgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93cGUiCiAgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9nbGliIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
bGludXgiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9zb3VwIgogKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dAppbmRleCA1Yzk1NGVlZjlhZTEuLjEzYWU0MDAxMzgwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsu
dHh0CkBAIC00NDYsMyArNDQ2LDUgQEAgV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNw
cAogV2ViUHJvY2Vzcy9ndGsvR3RrU2V0dGluZ3NNYW5hZ2VyUHJveHkuY3BwCiBXZWJQcm9jZXNz
L2d0ay9XYXlsYW5kQ29tcG9zaXRvckRpc3BsYXkuY3BwCiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9j
ZXNzTWFpbkd0ay5jcHAKKworV2ViUHJvY2Vzcy9saW51eC9SZWFsVGltZVRocmVhZHNNYW5hZ2Vy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggOGExYzMwZjMyZjNiLi45NzNlZmExMWZlNWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dApAQCAtMjcxLDQgKzI3MSw2IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS93
cGUvV2ViUGFnZVdQRS5jcHAKIAogV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcAog
CitXZWJQcm9jZXNzL2xpbnV4L1JlYWxUaW1lVGhyZWFkc01hbmFnZXIuY3BwCisKIFdlYlByb2Nl
c3Mvd3BlL1dlYlByb2Nlc3NNYWluV1BFLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCmluZGV4IGY4NWNhMzYzZjRlZi4uMDhiMTkwNjgzNzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC04MDksNiArODA5LDkgQEAgdm9pZCBXZWJQ
cm9jZXNzOjpjcmVhdGVXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyYKICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRp
b24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAg
ICAgIHVwZGF0ZUNQVUxpbWl0KCk7CisjaWYgT1MoTElOVVgpCisgICAgICAgIG1fcmVhbFRpbWVU
aHJlYWRzTWFuYWdlci5wYWdlVmlzaWJpbGl0eURpZENoYW5nZShoYXNWaXNpYmxlV2ViUGFnZSgp
KTsKKyNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5y
ZWluaXRpYWxpemVXZWJQYWdlKFdURk1vdmUocGFyYW1ldGVycykpOwogCkBAIC04MjYsNiArODI5
LDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCkKIAogICAgIGVuYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgdXBkYXRlQ1BVTGltaXQoKTsKKyNp
ZiBPUyhMSU5VWCkKKyAgICBtX3JlYWxUaW1lVGhyZWFkc01hbmFnZXIucGFnZVZpc2liaWxpdHlE
aWRDaGFuZ2UoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBXZWJQcm9j
ZXNzOjpzaG91bGRUZXJtaW5hdGUoKQpAQCAtMTQ5MSw4ICsxNDk3LDEyIEBAIHZvaWQgV2ViUHJv
Y2Vzczo6dXBkYXRlQ1BVTW9uaXRvclN0YXRlKENQVU1vbml0b3JVcGRhdGVSZWFzb24pCiAKIHZv
aWQgV2ViUHJvY2Vzczo6cGFnZUFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoUGFnZUlkZW50aWZpZXIs
IE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPiBjaGFuZ2VkKQogewotICAg
IGlmIChjaGFuZ2VkICYgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKQorICAgIGlm
IChjaGFuZ2VkICYgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKSB7CiAgICAgICAg
IHVwZGF0ZUNQVU1vbml0b3JTdGF0ZShDUFVNb25pdG9yVXBkYXRlUmVhc29uOjpWaXNpYmlsaXR5
SGFzQ2hhbmdlZCk7CisjaWYgT1MoTElOVVgpCisgICAgICAgIG1fcmVhbFRpbWVUaHJlYWRzTWFu
YWdlci5wYWdlVmlzaWJpbGl0eURpZENoYW5nZShoYXNWaXNpYmxlV2ViUGFnZSgpKTsKKyNlbmRp
ZgorICAgIH0KIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuaAppbmRleCAxZTg0ZThkZmYzMzkuLjg1NGE3YjgwYzY4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC02Miw2ICs2MiwxMCBAQAogI2luY2x1
ZGUgIk1lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMuaCIKICNlbmRpZgogCisjaWYgT1MoTElO
VVgpCisjaW5jbHVkZSAiUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5oIgorI2VuZGlmCisKICNpZiBQ
TEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxXZWJDb3JlL1NjcmVlblByb3BlcnRpZXMuaD4KICNp
bmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgpAQCAtNDA4LDYgKzQxMiwxMCBAQCBwdWJsaWM6
CiAgICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpJiBhY2Nlc3NpYmlsaXR5QXRzcGkoKSBj
b25zdCB7IHJldHVybiAqbV9hY2Nlc3NpYmlsaXR5OyB9CiAjZW5kaWYKIAorI2lmIE9TKExJTlVY
KQorICAgIFJlYWxUaW1lVGhyZWFkc01hbmFnZXImIHJlYWxUaW1lVGhyZWFkc01hbmFnZXIoKSB7
IHJldHVybiBtX3JlYWxUaW1lVGhyZWFkc01hbmFnZXI7IH0KKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIFdlYlByb2Nlc3MoKTsKICAgICB+V2ViUHJvY2VzcygpOwpAQCAtNzg2LDYgKzc5NCwxMCBA
QCBwcml2YXRlOgogI2lmIFVTRShBVFNQSSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
QWNjZXNzaWJpbGl0eUF0c3BpPiBtX2FjY2Vzc2liaWxpdHk7CiAjZW5kaWYKKworI2lmIE9TKExJ
TlVYKQorICAgIFJlYWxUaW1lVGhyZWFkc01hbmFnZXIgbV9yZWFsVGltZVRocmVhZHNNYW5hZ2Vy
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9saW51eC9SZWFsVGltZVRocmVhZHNNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9saW51eC9SZWFsVGltZVRocmVhZHNNYW5hZ2VyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ3NjFmOTU5NjQ5YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9saW51eC9SZWFsVGltZVRo
cmVhZHNNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5oIgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5o
PgorCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN5cy9y
ZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMu
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
UnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CisjZW5kaWYKKworI2lmbmRlZiBTQ0hFRF9SRVNFVF9P
Tl9GT1JLCisjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAwMDAwMAorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgaW50IHNfcmVhbFRpbWVUaHJlYWRQ
cmlvcml0eSA9IDU7CisKK1JlYWxUaW1lVGhyZWFkc01hbmFnZXI6OlJlYWxUaW1lVGhyZWFkc01h
bmFnZXIoKQorI2lmIFVTRShHTElCKQorICAgIDogbV9kaXNjYXJkUmVhbFRpbWVLaXRQcm94eVRp
bWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlJlYWxUaW1lVGhyZWFkc01hbmFnZXI6OmRpc2Nh
cmRSZWFsVGltZUtpdFByb3h5VGltZXJGaXJlZCkKKyNlbmRpZgoreworI2lmIFVTRShHTElCKQor
ICAgIG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lci5zZXRQcmlvcml0eShSdW5Mb29wU291
cmNlUHJpb3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisjZW5kaWYKKworICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIHNpZ2VtcHR5c2V0KCZhY3Rpb24uc2FfbWFz
ayk7CisgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICtbXShpbnQsIHNpZ2luZm9fdCosIHZvaWQq
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIGNhdXNlZCB0aGUgbGlt
aXQgdG8gYmUgcmVhY2hlZCwKKyAgICAgICAgLy8gc28gd2UgZGVtb3RlIGFsbCByZWFsIHRpbWUg
dGhyZWFkcyB0byBhdm9pZCBTSUdLSUxMLgorICAgICAgICBMb2NrZXIgbG9ja2VyIHsgUmVhbFRp
bWVUaHJlYWRzOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkgfTsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiB0aHJlYWQgOiBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLnRocmVhZHMobG9ja2Vy
KSkKKyAgICAgICAgICAgIGRlbW90ZVRocmVhZEZyb21SZWFsVGltZSh0aHJlYWQpOworICAgIH07
CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICBzaWdhY3Rpb24oU0lHWENQ
VSwgJmFjdGlvbiwgbnVsbHB0cik7CisKKyAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigp
LnNldFRocmVhZFJlZ2lzdGVyZWRDYWxsYmFjayhbdGhpc10oY29uc3QgVGhyZWFkJiB0aHJlYWQp
IHsKKyAgICAgICAgaWYgKG1faGFzVmlzaWJsZVdlYlBhZ2UpCisgICAgICAgICAgICBwcm9tb3Rl
VGhyZWFkVG9SZWFsVGltZSh0aHJlYWQpOworICAgIH0pOworfQorCit2b2lkIFJlYWxUaW1lVGhy
ZWFkc01hbmFnZXI6OnBhZ2VWaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaGFzVmlzaWJsZVdlYlBh
Z2UpCit7CisgICAgaWYgKG1faGFzVmlzaWJsZVdlYlBhZ2UgPT0gaGFzVmlzaWJsZVdlYlBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzVmlzaWJsZVdlYlBhZ2UgPSBoYXNWaXNpYmxl
V2ViUGFnZTsKKworICAgIExvY2tlciBsb2NrZXIgeyBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRv
bigpLmdldExvY2soKSB9OworICAgIGZvciAoY29uc3QgYXV0byYgdGhyZWFkIDogUmVhbFRpbWVU
aHJlYWRzOjpzaW5nbGV0b24oKS50aHJlYWRzKGxvY2tlcikpIHsKKyAgICAgICAgaWYgKG1faGFz
VmlzaWJsZVdlYlBhZ2UpCisgICAgICAgICAgICBwcm9tb3RlVGhyZWFkVG9SZWFsVGltZSh0aHJl
YWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZW1vdGVUaHJlYWRGcm9tUmVhbFRpbWUo
dGhyZWFkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzTWFuYWdlcjo6cHJvbW90
ZVRocmVhZFRvUmVhbFRpbWUoY29uc3QgVGhyZWFkJiB0aHJlYWQpCit7CisgICAgc3RydWN0IHNj
aGVkX3BhcmFtIHBhcmFtOworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gc3RkOjpjbGFtcChz
X3JlYWxUaW1lVGhyZWFkUHJpb3JpdHksIHNjaGVkX2dldF9wcmlvcml0eV9taW4oU0NIRURfUlIp
LCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KFNDSEVEX1JSKSk7CisgICAgYXV0byBlcnJvciA9IHNj
aGVkX3NldHNjaGVkdWxlcih0aHJlYWQuaWQoKSwgU0NIRURfUlIgfCBTQ0hFRF9SRVNFVF9PTl9G
T1JLLCAmcGFyYW0pOworICAgIGlmIChlcnJvcikgeworI2lmIFVTRShHTElCKQorICAgICAgICBy
ZWFsVGltZUtpdE1ha2VUaHJlYWRSZWFsVGltZShnZXRwaWQoKSwgdGhyZWFkLmlkKCksIHBhcmFt
LnNjaGVkX3ByaW9yaXR5KTsKKyNlbHNlCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNl
dCBjdXJyZW50IHRocmVhZCBhcyByZWFsIHRpbWU6ICVzIiwgc3RyZXJyb3IoZXJyb3IpKTsKKyNl
bmRpZgorICAgIH0KK30KKwordm9pZCBSZWFsVGltZVRocmVhZHNNYW5hZ2VyOjpkZW1vdGVUaHJl
YWRGcm9tUmVhbFRpbWUoY29uc3QgVGhyZWFkJiB0aHJlYWQpCit7CisgICAgc3RydWN0IHNjaGVk
X3BhcmFtIHBhcmFtID0geyAwIH07CisgICAgc2NoZWRfc2V0c2NoZWR1bGVyKHRocmVhZC5pZCgp
LCBTQ0hFRF9PVEhFUiB8IFNDSEVEX1JFU0VUX09OX0ZPUkssICZwYXJhbSk7Cit9CisKKyNpZiBV
U0UoR0xJQikKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMjBfbXM7
CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhbmQgdXNlIHNob3VsZFVzZVBvcnRhbCgpIG9uY2Ug
YnVnICMyMzE2NzAgaXMgZml4ZWQuCitzdGF0aWMgYm9vbCBpc1J1bm5pbmdJblNhbmRib3goKQor
eworICAgIHJldHVybiBnX2ZpbGVfdGVzdCgiLy5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9F
WElTVFMpOworfQorCitzdGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVz
UHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIGlmIChpc1J1bm5pbmdJblNhbmRib3goKSkgeworICAgICAgICBHUmVmUHRyPEdWYXJp
YW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdl
dFByb3BlcnR5IiwgZ192YXJpYW50X25ldygiKHMpIiwgcHJvcGVydHlOYW1lKSwgR19EQlVTX0NB
TExfRkxBR1NfTk9ORSwKKyAgICAgICAgICAgIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25k
c0FzPGludD4oKSwgbnVsbHB0ciwgZXJyb3IpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgZ192
YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoeCkiLCAmdmFsdWUpOworICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVm
KGdfZGJ1c19wcm94eV9jYWxsX3N5bmMocHJveHksICJvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9w
ZXJ0aWVzLkdldCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzcykiLCAib3JnLmZyZWVkZXNr
dG9wLlJlYWx0aW1lS2l0MSIsIHByb3BlcnR5TmFtZSksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUs
IHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPGludD4oKSwgbnVsbHB0ciwgZXJyb3Ip
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgR1JlZlB0cjxH
VmFyaWFudD4gcHJvcGVydHk7CisgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIodiki
LCAmcHJvcGVydHkub3V0UHRyKCkpOworICAgIGlmIChnX3ZhcmlhbnRfaXNfb2ZfdHlwZShwcm9w
ZXJ0eS5nZXQoKSwgR19WQVJJQU5UX1RZUEVfSU5UNjQpKQorICAgICAgICByZXR1cm4gZ192YXJp
YW50X2dldF9pbnQ2NChwcm9wZXJ0eS5nZXQoKSk7CisgICAgaWYgKGdfdmFyaWFudF9pc19vZl90
eXBlKHByb3BlcnR5LmdldCgpLCBHX1ZBUklBTlRfVFlQRV9JTlQzMikpCisgICAgICAgIHJldHVy
biBnX3ZhcmlhbnRfZ2V0X2ludDMyKHByb3BlcnR5LmdldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkc01hbmFnZXI6OnJlYWxU
aW1lS2l0TWFrZVRocmVhZFJlYWxUaW1lKHVpbnQ2NF90IHByb2Nlc3NJRCwgdWludDY0X3QgdGhy
ZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KQoreworICAgIG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJv
eHlUaW1lci5zdG9wKCk7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
aWYgKCFtX3JlYWxUaW1lS2l0UHJveHkpIHsKKyAgICAgICAgaWYgKGlzUnVubmluZ0luU2FuZGJv
eCgpKSB7CisgICAgICAgICAgICBtX3JlYWxUaW1lS2l0UHJveHkgPSBhZG9wdEdSZWYoZ19kYnVz
X3Byb3h5X25ld19mb3JfYnVzX3N5bmMoR19CVVNfVFlQRV9TRVNTSU9OLAorICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZMQUdTX0RPX05P
VF9DT05ORUNUX1NJR05BTFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVS
VElFUyksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwu
RGVza3RvcCIsICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wIiwgIm9yZy5mcmVlZGVz
a3RvcC5wb3J0YWwuUmVhbHRpbWUiLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcmVhbFRpbWVLaXRQcm94eSA9IGFkb3B0R1JlZihn
X2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NZU1RFTSwKKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxHREJ1c1Byb3h5RmxhZ3M+KEdfREJVU19QUk9YWV9GTEFHU19E
T19OT1RfQ09OTkVDVF9TSUdOQUxTIHwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9MT0FEX1BS
T1BFUlRJRVMpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuUmVh
bHRpbWVLaXQxIiwgIi9vcmcvZnJlZWRlc2t0b3AvUmVhbHRpbWVLaXQxIiwgIm9yZy5mcmVlZGVz
a3RvcC5SZWFsdGltZUtpdDEiLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghbV9yZWFsVGltZUtpdFByb3h5LnZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gUmVhbHRpbWVLaXQ6ICVzIiwgZXJy
b3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCFtX3JlYWxUaW1lS2l0UHJveHkudmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisj
aWZkZWYgUkxJTUlUX1JUVElNRQorICAgIC8vIFJlYWxUaW1lS2l0IHJlcXVpcmVzIHRoZSBjbGll
bnQgdG8gaGF2ZSBSTElNSVRfUlRUSU1FIHNldC4KKyAgICBzdHJ1Y3QgcmxpbWl0IHJsOworICAg
IGlmIChnZXRybGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKSA+PSAwKSB7CisgICAgICAgIGF1dG8g
cnR0aW1lTWF4ID0gcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShtX3JlYWxUaW1lS2l0UHJveHktPmdl
dCgpLCAiUlRUaW1lVVNlY01heCIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IFJUVGltZVVTZWNNYXgg
ZnJvbSBSZWFsdGltZUtpdDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICBpZiAo
IWdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1Jf
VU5LTk9XTl9JTlRFUkZBQ0UpKQorICAgICAgICAgICAgICAgIG1fcmVhbFRpbWVLaXRQcm94eSA9
IG51bGxwdHI7CisKKyAgICAgICAgICAgIHNjaGVkdWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJveHko
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChybC5ybGlt
X21heCA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihydHRpbWVNYXgpKSB7CisgICAgICAgICAgICBy
bC5ybGltX2N1ciA9IHJsLnJsaW1fbWF4ID0gcnR0aW1lTWF4OworICAgICAgICAgICAgc2V0cmxp
bWl0KFJMSU1JVF9SVFRJTUUsICZybCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9z
eW5jKG1fcmVhbFRpbWVLaXRQcm94eS0+Z2V0KCksICJNYWtlVGhyZWFkUmVhbHRpbWVXaXRoUElE
IiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHR0dSkiLCBwcm9jZXNzSUQsIHRocmVhZElELCBw
cmlvcml0eSksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxp
c2Vjb25kc0FzPGludD4oKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSB0aHJlYWQgcmVhbCB0
aW1lOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgaWYgKCFnX2Vycm9yX21hdGNoZXMo
ZXJyb3IuZ2V0KCksIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNF
KSkKKyAgICAgICAgICAgIG1fcmVhbFRpbWVLaXRQcm94eSA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgc2NoZWR1bGVEaXNjYXJkUmVhbFRpbWVLaXRQcm94eSgpOworfQorCit2b2lkIFJlYWxUaW1l
VGhyZWFkc01hbmFnZXI6OnNjaGVkdWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJveHkoKQoreworICAg
IGlmICghbV9yZWFsVGltZUtpdFByb3h5IHx8ICFtX3JlYWxUaW1lS2l0UHJveHkudmFsdWUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lci5zdGFy
dE9uZVNob3QoMzBfcyk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzTWFuYWdlcjo6ZGlzY2Fy
ZFJlYWxUaW1lS2l0UHJveHlUaW1lckZpcmVkKCkKK3sKKyAgICBtX3JlYWxUaW1lS2l0UHJveHkg
PSBzdGQ6Om51bGxvcHQ7Cit9CisjZW5kaWYgLy8gVVNFKEdMSUIpCisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gT1MoTElOVVgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvbGludXgvUmVhbFRpbWVUaHJlYWRzTWFuYWdlci5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2xpbnV4L1JlYWxUaW1lVGhyZWFkc01hbmFnZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBjMmVkNmE5YTBhMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9saW51eC9SZWFsVGltZVRocmVhZHNNYW5hZ2Vy
LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIE9TKExJTlVYKQorCisjaWYgVVNFKEdM
SUIpCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CitjbGFz
cyBUaHJlYWQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZWFsVGltZVRocmVh
ZHNNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBSZWFsVGltZVRocmVhZHNNYW5hZ2VyKCk7CisKKyAg
ICB2b2lkIHBhZ2VWaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpOworCitwcml2YXRlOgorICAgIHZv
aWQgcHJvbW90ZVRocmVhZFRvUmVhbFRpbWUoY29uc3QgV1RGOjpUaHJlYWQmKTsKKyAgICBzdGF0
aWMgdm9pZCBkZW1vdGVUaHJlYWRGcm9tUmVhbFRpbWUoY29uc3QgV1RGOjpUaHJlYWQmKTsKKwor
I2lmIFVTRShHTElCKQorICAgIHZvaWQgcmVhbFRpbWVLaXRNYWtlVGhyZWFkUmVhbFRpbWUodWlu
dDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkpOwor
ICAgIHZvaWQgc2NoZWR1bGVEaXNjYXJkUmVhbFRpbWVLaXRQcm94eSgpOworICAgIHZvaWQgZGlz
Y2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lckZpcmVkKCk7CisjZW5kaWYKKworICAgIGJvb2wgbV9o
YXNWaXNpYmxlV2ViUGFnZSB7IGZhbHNlIH07CisjaWYgVVNFKEdMSUIpCisgICAgc3RkOjpvcHRp
b25hbDxHUmVmUHRyPEdEQnVzUHJveHk+PiBtX3JlYWxUaW1lS2l0UHJveHk7CisgICAgUnVuTG9v
cDo6VGltZXI8UmVhbFRpbWVUaHJlYWRzTWFuYWdlcj4gbV9kaXNjYXJkUmVhbFRpbWVLaXRQcm94
eVRpbWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IE9TKExJTlVYKQo=
</data>
<flag name="commit-queue"
          id="465601"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441589</attachid>
            <date>2021-10-18 05:19:42 -0700</date>
            <delta_ts>2021-10-18 06:25:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-linux-real-time.diff</filename>
            <type>text/plain</type>
            <size>24759</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggOGY5MzQ0OWVhNGY2Li41MDBiMjBmYWZmMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIw
MjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gVXNlckludGVyYWN0aXZlIHRocmVhZHMgYXJlIG5vdCBSZWFsLXRp
bWUgaW4gTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDExNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBSZWFsVGltZVRocmVhZHMgc2luZ2xldG9uIHRvIHJlZ2lzdGVyIHJlYWwgdGltZSB0
aHJlYWRzLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtV1BFLmNtYWtl
OgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgICogd3RmL2dlbmVyaWMv
V29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJhc2U6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6UmVhbFRpbWVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6UmVhbFRpbWVUaHJlYWRzOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChXVEY6OlJlYWxU
aW1lVGhyZWFkczo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6
cHJvbW90ZVRocmVhZFRvUmVhbFRpbWUpOgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6
OmRlbW90ZVRocmVhZEZyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFk
czo6ZGVtb3RlQWxsVGhyZWFkc0Zyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OmlzUnVubmlu
Z0luU2FuZGJveCk6CisgICAgICAgIChXVEY6OnJlYWxUaW1lS2l0R2V0UHJvcGVydHkpOgorICAg
ICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1l
KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpzY2hlZHVsZURpc2NhcmRSZWFsVGlt
ZUtpdFByb3h5KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpkaXNjYXJkUmVhbFRp
bWVLaXRQcm94eVRpbWVyRmlyZWQpOgorICAgICAgICAqIHd0Zi9saW51eC9SZWFsVGltZVRocmVh
ZHMuaDogQWRkZWQuCisgICAgICAgICogd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcDoKKyAg
ICAgICAgKFdURjo6c2NoZWRQb2xpY3kpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlz
aEhhbmRsZSk6CisKIDIwMjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNo
ZWNraW5nIGlmIHdlIGFyZSB1bmRlciBzYW5kYm94CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDdmNmY3NzIyZDJiOS4uZDYwOTEyOWVmMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTEsNiArMTEsOCBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICAgICBn
bGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZH
VHlwZS5oCisKKyAgICBsaW51eC9SZWFsVGltZVRocmVhZHMuaAogKQogCiBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQpAQCAtNTIsNiArNTQsNyBAQCBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgICAgIGxpbnV4L0N1cnJlbnRQcm9jZXNzTWVtb3J5U3RhdHVzLmNwcAogICAgICAgICBsaW51
eC9NZW1vcnlGb290cHJpbnRMaW51eC5jcHAKKyAgICAgICAgbGludXgvUmVhbFRpbWVUaHJlYWRz
LmNwcAogCiAgICAgICAgIHVuaXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyVW5peC5jcHAKICAgICAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKaW5kZXggZTkzYTI4NWEyZDg3Li4yZjRm
YzZiNmI5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKQEAgLTk5LDYgKzk5
LDcgQEAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiAgICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9yeUZvb3RwcmludExpbnV4LmNwcAorICAgICAg
ICBsaW51eC9SZWFsVGltZVRocmVhZHMuY3BwCiAKICAgICAgICAgdW5peC9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJVbml4LmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZDRk
MjQxNTE3YTU3Li4zYjQ3OTk3ZTVjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0x
Miw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgbGludXgv
UHJvY2Vzc01lbW9yeUZvb3RwcmludC5oCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuaAorICAgIGxpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCiApCiAKIGxpc3QoQVBQRU5EIFdU
Rl9TT1VSQ0VTCkBAIC0yOSw2ICszMCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
Z2xpYi9VUkxHTGliLmNwcAogCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMu
Y3BwCisgICAgbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcAogCiAgICAgcG9zaXgvQ1BVVGltZVBP
U0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApp
bmRleCBkNjY2NjhiMTc5NjkuLmJmYmNiYTk4YWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00
MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgogI2VuZGlmCiAKKyNp
ZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIExvY2sgVGhyZWFkOjpzX2FsbFRocmVhZHNMb2NrOwpA
QCAtMzMwLDYgKzMzNCwxMiBAQCB2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9y
aXR5IDw9IDApOwogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5ID49IFFPU19NSU5fUkVMQVRJ
VkVfUFJJT1JJVFkpOwogICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCByZWxhdGl2ZVByaW9yaXR5KTsK
KyNlbGlmIE9TKExJTlVYKQorICAgIC8vIFdlIGRvbid0IGFsbG93IHRvIG1ha2UgdGhlIG1haW4g
dGhyZWFkIHJlYWwgdGltZS4gVGhpcyBpcyB1c2VkIGJ5IHNlY29uZGFyeSBwcm9jZXNzZXMgdG8g
bWF0Y2ggdGhlCisgICAgLy8gVUkgcHJvY2VzcywgYnV0IGluIGxpbnV4IHRoZSBVSSBwcm9jZXNz
IGlzIG5vdCByZWFsIHRpbWUuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgUmVh
bFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5yZWdpc3RlclRocmVhZChjdXJyZW50KCkpOworICAg
IFVOVVNFRF9QQVJBTShyZWxhdGl2ZVByaW9yaXR5KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHJlbGF0aXZlUHJpb3JpdHkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9n
ZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3Jr
UXVldWVHZW5lcmljLmNwcAppbmRleCBkOTk3ZmRlNzNhZDQuLmQyNTdkM2E3MjA0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zOSwxNCArMzks
MTQgQEAgV29ya1F1ZXVlQmFzZTo6V29ya1F1ZXVlQmFzZShSdW5Mb29wJiBydW5Mb29wKQogewog
fQogCi12b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lLCBUeXBlLCBRT1MpCit2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MgcW9zKQogewogICAgIEJpbmFyeVNlbWFwaG9yZSBz
ZW1hcGhvcmU7CiAgICAgVGhyZWFkOjpjcmVhdGUobmFtZSwgWyZdIHsKICAgICAgICAgbV9ydW5M
b29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwog
ICAgICAgICBtX3J1bkxvb3AtPnJ1bigpOwotICAgIH0pLT5kZXRhY2goKTsKKyAgICB9LCBUaHJl
YWRUeXBlOjpVbmtub3duLCBxb3MpLT5kZXRhY2goKTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3Bw
IGIvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIwYWQ2NzNmZjE3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSwy
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNp
bmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2VuZGlmCisKKyNpZm5kZWYg
U0NIRURfUkVTRVRfT05fRk9SSworI2RlZmluZSBTQ0hFRF9SRVNFVF9PTl9GT1JLIDB4NDAwMDAw
MDAKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIGNvbnN0IGludCBzX3JlYWxU
aW1lVGhyZWFkUHJpb3JpdHkgPSA1OworCitSZWFsVGltZVRocmVhZHMmIFJlYWxUaW1lVGhyZWFk
czo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlYWxUaW1l
VGhyZWFkcz4gcmVhbFRpbWVUaHJlYWRzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
RmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsKKyAgICAgICAgcmVhbFRp
bWVUaHJlYWRzLmNvbnN0cnVjdCgpOworICAgIH0pOworICAgIHJldHVybiByZWFsVGltZVRocmVh
ZHM7Cit9CisKK1JlYWxUaW1lVGhyZWFkczo6UmVhbFRpbWVUaHJlYWRzKCkKKyAgICA6IG1fdGhy
ZWFkR3JvdXAoVGhyZWFkR3JvdXA6OmNyZWF0ZSgpKQorI2lmIFVTRShHTElCKQorICAgICwgbV9k
aXNjYXJkUmVhbFRpbWVLaXRQcm94eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlJlYWxU
aW1lVGhyZWFkczo6ZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lckZpcmVkKQorI2VuZGlmCit7
CisjaWYgVVNFKEdMSUIpCisgICAgbV9kaXNjYXJkUmVhbFRpbWVLaXRQcm94eVRpbWVyLnNldFBy
aW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1RpbWVy
KTsKKyNlbmRpZgorCisgICAgY2FsbE9uTWFpblRocmVhZChbXSB7CisgICAgICAgIHN0cnVjdCBz
aWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwor
ICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gK1tdKGludCwgc2lnaW5mb190Kiwgdm9pZCop
IHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIGNhdXNlZCB0aGUg
bGltaXQgdG8gYmUgcmVhY2hlZCwKKyAgICAgICAgICAgIC8vIHNvIHdlIGRlbW90ZSBhbGwgcmVh
bCB0aW1lIHRocmVhZHMgdG8gYXZvaWQgU0lHS0lMTC4KKyAgICAgICAgICAgIFJlYWxUaW1lVGhy
ZWFkczo6c2luZ2xldG9uKCkuZGVtb3RlQWxsVGhyZWFkc0Zyb21SZWFsVGltZSgpOworICAgICAg
ICB9OworICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICBzaWdh
Y3Rpb24oU0lHWENQVSwgJmFjdGlvbiwgbnVsbHB0cik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVh
bFRpbWVUaHJlYWRzOjpyZWdpc3RlclRocmVhZChUaHJlYWQmIHRocmVhZCkKK3sKKyAgICBUaHJl
YWRHcm91cEFkZFJlc3VsdCBhZGRSZXN1bHQ7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV90aHJlYWRHcm91cC0+Z2V0TG9jaygpIH07CisgICAgICAgIGFkZFJlc3VsdCA9IG1fdGhy
ZWFkR3JvdXAtPmFkZChsb2NrZXIsIHRocmVhZCk7CisgICAgfQorCisgICAgaWYgKGFkZFJlc3Vs
dCAhPSBUaHJlYWRHcm91cEFkZFJlc3VsdDo6TmV3bHlBZGRlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgdGhyZWFkID0gUmVmIHsgdGhyZWFkIH1dIHsK
KyAgICAgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAgICAgIHByb21vdGVUaHJlYWRUb1JlYWxU
aW1lKHRocmVhZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
IChtX2VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVk
ID0gZW5hYmxlZDsKKworICAgIExvY2tlciBsb2NrZXIgeyBtX3RocmVhZEdyb3VwLT5nZXRMb2Nr
KCkgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkR3JvdXAtPnRocmVh
ZHMobG9ja2VyKSkgeworICAgICAgICBpZiAobV9lbmFibGVkKQorICAgICAgICAgICAgcHJvbW90
ZVRocmVhZFRvUmVhbFRpbWUodGhyZWFkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVt
b3RlVGhyZWFkRnJvbVJlYWxUaW1lKHRocmVhZCk7CisgICAgfQorfQorCit2b2lkIFJlYWxUaW1l
VGhyZWFkczo6cHJvbW90ZVRocmVhZFRvUmVhbFRpbWUoY29uc3QgVGhyZWFkJiB0aHJlYWQpCit7
CisgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5
ID0gc3RkOjpjbGFtcChzX3JlYWxUaW1lVGhyZWFkUHJpb3JpdHksIHNjaGVkX2dldF9wcmlvcml0
eV9taW4oU0NIRURfUlIpLCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KFNDSEVEX1JSKSk7CisgICAg
YXV0byBlcnJvciA9IHNjaGVkX3NldHNjaGVkdWxlcih0aHJlYWQuaWQoKSwgU0NIRURfUlIgfCBT
Q0hFRF9SRVNFVF9PTl9GT1JLLCAmcGFyYW0pOworICAgIGlmIChlcnJvcikgeworI2lmIFVTRShH
TElCKQorICAgICAgICByZWFsVGltZUtpdE1ha2VUaHJlYWRSZWFsVGltZShnZXRwaWQoKSwgdGhy
ZWFkLmlkKCksIHBhcmFtLnNjaGVkX3ByaW9yaXR5KTsKKyNlbHNlCisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCBjdXJyZW50IHRocmVhZCBhcyByZWFsIHRpbWU6ICVzIiwgc3RyZXJy
b3IoZXJyb3IpKTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBSZWFsVGltZVRocmVhZHM6OmRl
bW90ZVRocmVhZEZyb21SZWFsVGltZShjb25zdCBUaHJlYWQmIHRocmVhZCkKK3sKKyAgICBzdHJ1
Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IDAgfTsKKyAgICBzY2hlZF9zZXRzY2hlZHVsZXIodGhy
ZWFkLmlkKCksIFNDSEVEX09USEVSIHwgU0NIRURfUkVTRVRfT05fRk9SSywgJnBhcmFtKTsKK30K
Kwordm9pZCBSZWFsVGltZVRocmVhZHM6OmRlbW90ZUFsbFRocmVhZHNGcm9tUmVhbFRpbWUoKQor
eworICAgIExvY2tlciBsb2NrZXIgeyBtX3RocmVhZEdyb3VwLT5nZXRMb2NrKCkgfTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkR3JvdXAtPnRocmVhZHMobG9ja2VyKSkK
KyAgICAgICAgZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKHRocmVhZCk7Cit9CisKKyNpZiBVU0Uo
R0xJQikKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHNfZGJ1c0NhbGxUaW1lb3V0ID0gMjBfbXM7CisK
Ky8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhbmQgdXNlIHNob3VsZFVzZVBvcnRhbCgpIG9uY2UgYnVn
ICMyMzE2NzAgaXMgZml4ZWQuCitzdGF0aWMgYm9vbCBpc1J1bm5pbmdJblNhbmRib3goKQorewor
ICAgIHJldHVybiBnX2ZpbGVfdGVzdCgiLy5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9FWElT
VFMpOworfQorCitzdGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVzUHJv
eHkqIHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGlmIChpc1J1bm5pbmdJblNhbmRib3goKSkgeworICAgICAgICBHUmVmUHRyPEdWYXJpYW50
PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFBy
b3BlcnR5IiwgZ192YXJpYW50X25ldygiKHMpIiwgcHJvcGVydHlOYW1lKSwgR19EQlVTX0NBTExf
RkxBR1NfTk9ORSwKKyAgICAgICAgICAgIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0Fz
PGludD4oKSwgbnVsbHB0ciwgZXJyb3IpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgZ192YXJp
YW50X2dldChyZXN1bHQuZ2V0KCksICIoeCkiLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdf
ZGJ1c19wcm94eV9jYWxsX3N5bmMocHJveHksICJvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0
aWVzLkdldCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzcykiLCAib3JnLmZyZWVkZXNrdG9w
LlJlYWx0aW1lS2l0MSIsIHByb3BlcnR5TmFtZSksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIHNf
ZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPGludD4oKSwgbnVsbHB0ciwgZXJyb3IpKTsK
KyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgR1JlZlB0cjxHVmFy
aWFudD4gcHJvcGVydHk7CisgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIodikiLCAm
cHJvcGVydHkub3V0UHRyKCkpOworICAgIGlmIChnX3ZhcmlhbnRfaXNfb2ZfdHlwZShwcm9wZXJ0
eS5nZXQoKSwgR19WQVJJQU5UX1RZUEVfSU5UNjQpKQorICAgICAgICByZXR1cm4gZ192YXJpYW50
X2dldF9pbnQ2NChwcm9wZXJ0eS5nZXQoKSk7CisgICAgaWYgKGdfdmFyaWFudF9pc19vZl90eXBl
KHByb3BlcnR5LmdldCgpLCBHX1ZBUklBTlRfVFlQRV9JTlQzMikpCisgICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfZ2V0X2ludDMyKHByb3BlcnR5LmdldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkczo6cmVhbFRpbWVLaXRNYWtl
VGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwgdWlu
dDMyX3QgcHJpb3JpdHkpCit7CisgICAgbV9kaXNjYXJkUmVhbFRpbWVLaXRQcm94eVRpbWVyLnN0
b3AoKTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIW1fcmVh
bFRpbWVLaXRQcm94eSkgeworICAgICAgICBpZiAoaXNSdW5uaW5nSW5TYW5kYm94KCkpIHsKKyAg
ICAgICAgICAgIG1fcmVhbFRpbWVLaXRQcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3
X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1Rf
U0lHTkFMUyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiwg
Ii9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRh
bC5SZWFsdGltZSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9yZWFsVGltZUtpdFByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94
eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZUEVfU1lTVEVNLAorICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9DT05O
RUNUX1NJR05BTFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVSVElFUyks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEi
LCAiL29yZy9mcmVlZGVza3RvcC9SZWFsdGltZUtpdDEiLCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0
aW1lS2l0MSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFtX3JlYWxUaW1lS2l0UHJveHkudmFsdWUoKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY29ubmVjdCB0byBSZWFsdGltZUtpdDogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1f
cmVhbFRpbWVLaXRQcm94eS52YWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyNpZmRlZiBSTElN
SVRfUlRUSU1FCisgICAgLy8gUmVhbFRpbWVLaXQgcmVxdWlyZXMgdGhlIGNsaWVudCB0byBoYXZl
IFJMSU1JVF9SVFRJTUUgc2V0LgorICAgIHN0cnVjdCBybGltaXQgcmw7CisgICAgaWYgKGdldHJs
aW1pdChSTElNSVRfUlRUSU1FLCAmcmwpID49IDApIHsKKyAgICAgICAgYXV0byBydHRpbWVNYXgg
PSByZWFsVGltZUtpdEdldFByb3BlcnR5KG1fcmVhbFRpbWVLaXRQcm94eS0+Z2V0KCksICJSVFRp
bWVVU2VjTWF4IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgUlRUaW1lVVNlY01heCBmcm9tIFJlYWx0
aW1lS2l0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIGlmICghZ19lcnJvcl9t
YXRjaGVzKGVycm9yLmdldCgpLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9VTktOT1dOX0lO
VEVSRkFDRSkpCisgICAgICAgICAgICAgICAgbV9yZWFsVGltZUtpdFByb3h5ID0gbnVsbHB0cjsK
KworICAgICAgICAgICAgc2NoZWR1bGVEaXNjYXJkUmVhbFRpbWVLaXRQcm94eSgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJsLnJsaW1fbWF4ID4gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHJ0dGltZU1heCkpIHsKKyAgICAgICAgICAgIHJsLnJsaW1fY3Vy
ID0gcmwucmxpbV9tYXggPSBydHRpbWVNYXg7CisgICAgICAgICAgICBzZXRybGltaXQoUkxJTUlU
X1JUVElNRSwgJnJsKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgR1JlZlB0cjxH
VmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMobV9yZWFs
VGltZUtpdFByb3h5LT5nZXQoKSwgIk1ha2VUaHJlYWRSZWFsdGltZVdpdGhQSUQiLAorICAgICAg
ICBnX3ZhcmlhbnRfbmV3KCIodHR1KSIsIHByb2Nlc3NJRCwgdGhyZWFkSUQsIHByaW9yaXR5KSwg
R19EQlVTX0NBTExfRkxBR1NfTk9ORSwgc19kYnVzQ2FsbFRpbWVvdXQubWlsbGlzZWNvbmRzQXM8
aW50PigpLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoIXJlc3VsdCkgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIHRocmVhZCByZWFsIHRpbWU6ICVzIiwg
ZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBpZiAoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQo
KSwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfVU5LTk9XTl9JTlRFUkZBQ0UpKQorICAgICAg
ICAgICAgbV9yZWFsVGltZUtpdFByb3h5ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzY2hlZHVs
ZURpc2NhcmRSZWFsVGltZUtpdFByb3h5KCk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpz
Y2hlZHVsZURpc2NhcmRSZWFsVGltZUtpdFByb3h5KCkKK3sKKyAgICBpZiAoIW1fcmVhbFRpbWVL
aXRQcm94eSB8fCAhbV9yZWFsVGltZUtpdFByb3h5LnZhbHVlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2Rpc2NhcmRSZWFsVGltZUtpdFByb3h5VGltZXIuc3RhcnRPbmVTaG90KDMwX3MpOwor
fQorCit2b2lkIFJlYWxUaW1lVGhyZWFkczo6ZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lckZp
cmVkKCkKK3sKKyAgICBtX3JlYWxUaW1lS2l0UHJveHkgPSBzdGQ6Om51bGxvcHQ7Cit9CisjZW5k
aWYgLy8gVVNFKEdMSUIpCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9S
ZWFsVGltZVRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmVmYTgwNWM0NDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1Jl
YWxUaW1lVGhyZWFkcy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRHcm91cC5oPgorCisjaWYgVVNFKEdM
SUIpCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HREJ1c1Byb3h5IEdE
QnVzUHJveHk7CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFJlYWxUaW1lVGhy
ZWFkcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIExh
enlOZXZlckRlc3Ryb3llZDxSZWFsVGltZVRocmVhZHM+OworcHVibGljOgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUmVhbFRpbWVUaHJlYWRzJiBzaW5nbGV0b24oKTsKKworICAgIHZv
aWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkJik7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzZXRFbmFibGVkKGJvb2wpOworCitwcml2YXRlOgorICAgIFJlYWxUaW1lVGhyZWFkcygpOwor
CisgICAgdm9pZCBwcm9tb3RlVGhyZWFkVG9SZWFsVGltZShjb25zdCBXVEY6OlRocmVhZCYpOwor
ICAgIHZvaWQgZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKGNvbnN0IFdURjo6VGhyZWFkJik7Cisg
ICAgdm9pZCBkZW1vdGVBbGxUaHJlYWRzRnJvbVJlYWxUaW1lKCk7CisKKyNpZiBVU0UoR0xJQikK
KyAgICB2b2lkIHJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1lKHVpbnQ2NF90IHByb2Nlc3NJ
RCwgdWludDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KTsKKyAgICB2b2lkIHNjaGVk
dWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJveHkoKTsKKyAgICB2b2lkIGRpc2NhcmRSZWFsVGltZUtp
dFByb3h5VGltZXJGaXJlZCgpOworI2VuZGlmCisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8VGhyZWFk
R3JvdXA+IG1fdGhyZWFkR3JvdXA7CisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisjaWYg
VVNFKEdMSUIpCisgICAgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdEQnVzUHJveHk+PiBtX3JlYWxU
aW1lS2l0UHJveHk7CisgICAgUnVuTG9vcDo6VGltZXI8UmVhbFRpbWVUaHJlYWRzPiBtX2Rpc2Nh
cmRSZWFsVGltZUtpdFByb3h5VGltZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OlJlYWxUaW1lVGhyZWFkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVh
ZGluZ1BPU0lYLmNwcAppbmRleCBlZGI5YjUxODQ4ZjguLjk0NzQzOWFiNzdmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcApAQCAtNDIsNyArNDIsMTMgQEAKICNpbmNs
dWRlIDx3dGYvV29yZExvY2suaD4KIAogI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHNjaGVkLmg+
CiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNs
dWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjaWZuZGVmIFNDSEVEX1JFU0VUX09O
X0ZPUksKKyNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAweDQwMDAwMDAwCisjZW5kaWYKICNl
bmRpZgogCiAjaWYgIUNPTVBJTEVSKE1TVkMpCkBAIC02OSwxMCArNzUsNiBAQAogI2luY2x1ZGUg
PG1hY2gvdGhyZWFkX3N3aXRjaC5oPgogI2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRl
IDxzeXMvc3lzY2FsbC5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgTG9j
ayBnbG9iYWxTdXNwZW5kTG9jazsKQEAgLTI2MCw2ICsyNjIsMjQgQEAgZGlzcGF0Y2hfcW9zX2Ns
YXNzX3QgVGhyZWFkOjpkaXNwYXRjaFFPU0NsYXNzKFFPUyBxb3MpCiB9CiAjZW5kaWYKIAorI2lm
IE9TKExJTlVYKQorc3RhdGljIGludCBzY2hlZFBvbGljeShUaHJlYWQ6OlFPUyBxb3MpCit7Cisg
ICAgc3dpdGNoIChxb3MpIHsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVc2VySW50ZXJhY3RpdmU6
CisgICAgICAgIHJldHVybiBTQ0hFRF9SUjsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVc2VySW5p
dGlhdGVkOgorICAgIGNhc2UgVGhyZWFkOjpRT1M6OkRlZmF1bHQ6CisgICAgICAgIHJldHVybiBT
Q0hFRF9PVEhFUjsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVdGlsaXR5OgorICAgICAgICByZXR1
cm4gU0NIRURfQkFUQ0g7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6QmFja2dyb3VuZDoKKyAgICAg
ICAgcmV0dXJuIFNDSEVEX0lETEU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisjZW5kaWYKKwogYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJl
YWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc3RhY2tTaXplLCBRT1Mg
cW9zKQogewogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CkBAIC0yNjcsOCArMjg3LDYgQEAg
Ym9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBz
dGQ6Om9wdGlvbmFsPHNpemVfdD4gc3QKICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CiAj
aWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19jbGFzc19ucCgm
YXR0ciwgZGlzcGF0Y2hRT1NDbGFzcyhxb3MpLCAwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHFvcyk7CiAjZW5kaWYKICAgICBpZiAoc3RhY2tTaXplKQogICAgICAgICBwdGhyZWFkX2F0dHJf
c2V0c3RhY2tzaXplKCZhdHRyLCBzdGFja1NpemUudmFsdWUoKSk7CkBAIC0yNzgsNiArMjk2LDIx
IEBAIGJvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogY29udGV4
dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggY29udGV4dCAlcCIsIHd0ZlRo
cmVhZEVudHJ5UG9pbnQsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQor
CisjaWYgT1MoTElOVVgpCisgICAgaW50IHBvbGljeSA9IHNjaGVkUG9saWN5KHFvcyk7CisgICAg
aWYgKHBvbGljeSA9PSBTQ0hFRF9SUikKKyAgICAgICAgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0
b24oKS5yZWdpc3RlclRocmVhZCgqdGhpcyk7CisgICAgZWxzZSB7CisgICAgICAgIHN0cnVjdCBz
Y2hlZF9wYXJhbSBwYXJhbSA9IHsgMCB9OworICAgICAgICBlcnJvciA9IHB0aHJlYWRfc2V0c2No
ZWRwYXJhbSh0aHJlYWRIYW5kbGUsIHBvbGljeSB8IFNDSEVEX1JFU0VUX09OX0ZPUkssICZwYXJh
bSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHNldCBzY2hlZCBwb2xpY3kgJWQgZm9yIHRocmVhZCAlZDogJXMiLCBwb2xpY3ksIHRocmVhZEhh
bmRsZSwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICB9CisjZWxpZiAhSEFWRShRT1NfQ0xBU1NFUykK
KyAgICBVTlVTRURfUEFSQU0ocW9zKTsKKyNlbmRpZgorCiAgICAgZXN0YWJsaXNoUGxhdGZvcm1T
cGVjaWZpY0hhbmRsZSh0aHJlYWRIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCAyMzk4MzAxMTZmNjQuLmRlNzNlN2NlNGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAyMS0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dUS11bV1BFXSBVc2VySW50ZXJhY3RpdmUgdGhyZWFkcyBhcmUgbm90IFJl
YWwtdGltZSBpbiBMaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwMTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRW5hYmxlIHJlYWwgdGltZSB0aHJlYWRzIGluIHRoZSB3ZWIgcHJvY2VzcyBvbmx5
IHdoZW4gdGhlcmUncyBhIHZpc2libGUgcGFnZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZW1vdmVXZWJQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6cGFnZUFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc0dMaWIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5U3RhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgor
ICAgICAgICAqIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKToKKwogMjAyMS0xMC0x
OCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dMSUJdIFNpbXBsaWZ5IFNsZWVwRGlzYWJsZXIgYnkgY2hlY2tpbmcgaWYgd2UgYXJlIHVuZGVy
IHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCBmODVj
YTM2M2Y0ZWYuLjQ2MmMzYzI3ODE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcApAQCAtMjI0LDYgKzIyNCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVlA5VXRpbGl0
aWVzQ29jb2EuaD4KICNlbmRpZgogCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8d3RmL2xpbnV4
L1JlYWxUaW1lVGhyZWFkcy5oPgorI2VuZGlmCisKICN1bmRlZiBXRUJQUk9DRVNTX1JFTEVBU0Vf
TE9HCiAjZGVmaW5lIFJFTEVBU0VfTE9HX1NFU1NJT05fSUQgKG1fc2Vzc2lvbklEID8gbV9zZXNz
aW9uSUQtPnRvVUludDY0KCkgOiAwKQogI2lmIFJFTEVBU0VfTE9HX0RJU0FCTEVECkBAIC04MDks
NiArODEzLDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKFBhZ2VJZGVudGlmaWVy
IHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAgICAgLy8gQmFsYW5jZWQg
YnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlzYWJs
ZVRlcm1pbmF0aW9uKCk7CiAgICAgICAgIHVwZGF0ZUNQVUxpbWl0KCk7CisjaWYgT1MoTElOVVgp
CisgICAgICAgIFJlYWxUaW1lVGhyZWFkczo6c2luZ2xldG9uKCkuc2V0RW5hYmxlZChoYXNWaXNp
YmxlV2ViUGFnZSgpKTsKKyNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5yZWluaXRpYWxpemVXZWJQYWdlKFdURk1vdmUocGFyYW1ldGVycykpOwogCkBA
IC04MjYsNiArODMzLDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVXZWJQYWdlKFBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCkKIAogICAgIGVuYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgdXBkYXRlQ1BV
TGltaXQoKTsKKyNpZiBPUyhMSU5VWCkKKyAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigp
LnNldEVuYWJsZWQoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBXZWJQ
cm9jZXNzOjpzaG91bGRUZXJtaW5hdGUoKQpAQCAtMTQ2NiwxMCArMTQ3Niw2IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxp
emF0aW9uUGFyYW1ldGVyCiB7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
JikKLXsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjp1cGRhdGVBY3RpdmVQYWdlcyhjb25zdCBTdHJp
bmcmIG92ZXJyaWRlRGlzcGxheU5hbWUpCiB7CiB9CkBAIC0xNDkxLDggKzE0OTcsMTIgQEAgdm9p
ZCBXZWJQcm9jZXNzOjp1cGRhdGVDUFVNb25pdG9yU3RhdGUoQ1BVTW9uaXRvclVwZGF0ZVJlYXNv
bikKIAogdm9pZCBXZWJQcm9jZXNzOjpwYWdlQWN0aXZpdHlTdGF0ZURpZENoYW5nZShQYWdlSWRl
bnRpZmllciwgT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OkZsYWc+IGNoYW5nZWQp
CiB7Ci0gICAgaWYgKGNoYW5nZWQgJiBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2libGUp
CisgICAgaWYgKGNoYW5nZWQgJiBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2libGUpIHsK
ICAgICAgICAgdXBkYXRlQ1BVTW9uaXRvclN0YXRlKENQVU1vbml0b3JVcGRhdGVSZWFzb246OlZp
c2liaWxpdHlIYXNDaGFuZ2VkKTsKKyNpZiBPUyhMSU5VWCkKKyAgICAgICAgUmVhbFRpbWVUaHJl
YWRzOjpzaW5nbGV0b24oKS5zZXRFbmFibGVkKGhhc1Zpc2libGVXZWJQYWdlKCkpOworI2VuZGlm
CisgICAgfQogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcAppbmRleCAwYjk1ZWVhMzBkNDku
Ljc3MjlmZjc5ZTYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2dsaWIv
V2ViUHJvY2Vzc0dMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dl
YlByb2Nlc3NHTGliLmNwcApAQCAtNTUsNiArNTUsMTAgQEAKICNpbmNsdWRlICJVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlci5oIgogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYv
bGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjQsNiArNjgsMTQgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlZChjYWNoZU1vZGVsID09
IENhY2hlTW9kZWw6OkRvY3VtZW50Vmlld2VyKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmKQoreworI2lmIE9TKExJTlVYKQorICAgIC8vIERpc2FibGUgUmVhbFRpbWVU
aHJlYWRzIGluIFdlYlByb2Nlc3MgaW5pdGlhbGx5LCBzaW5jZSBpdCBkZXBlbmRzIG9uIGhhdmlu
ZyBhIHZpc2libGUgd2ViIHBhZ2UuCisgICAgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5z
ZXRFbmFibGVkKGZhbHNlKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5U3RhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvcGxheXN0YXRpb24vV2ViUHJvY2Vzc1BsYXlTdGF0aW9u
LmNwcAppbmRleCBlZjYwMTIyMGU1NTYuLmM0NGYwZGQ0Y2Y4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5U3RhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5
U3RhdGlvbi5jcHAKQEAgLTQzLDYgKzQzLDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhCiAj
ZW5kaWYKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNv
bnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQoreworfQorCiB2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoV2Vi
UHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRlcnMmJikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCmluZGV4IDA1YjM1Y2FkNTBhOC4uZDNkMzhj
YWM0MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nl
c3NXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dp
bi5jcHAKQEAgLTM5LDYgKzM5LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJikKIHsKIH0KIAordm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQoreworfQorCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoV2ViUHJvY2Vzc0RhdGFTdG9y
ZVBhcmFtZXRlcnMmJikKIHsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441595</attachid>
            <date>2021-10-18 06:25:03 -0700</date>
            <delta_ts>2021-10-19 03:04:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-linux-real-time.diff</filename>
            <type>text/plain</type>
            <size>24603</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMGQ3YjZkNTRkNGVlLi4xMjE3YzgzYTgxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIw
MjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gVXNlckludGVyYWN0aXZlIHRocmVhZHMgYXJlIG5vdCBSZWFsLXRp
bWUgaW4gTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDExNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBSZWFsVGltZVRocmVhZHMgc2luZ2xldG9uIHRvIHJlZ2lzdGVyIHJlYWwgdGltZSB0
aHJlYWRzLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtV1BFLmNtYWtl
OgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgICogd3RmL2dlbmVyaWMv
V29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJhc2U6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6UmVhbFRpbWVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6UmVhbFRpbWVUaHJlYWRzOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChXVEY6OlJlYWxU
aW1lVGhyZWFkczo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6
cHJvbW90ZVRocmVhZFRvUmVhbFRpbWUpOgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6
OmRlbW90ZVRocmVhZEZyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFk
czo6ZGVtb3RlQWxsVGhyZWFkc0Zyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OmlzUnVubmlu
Z0luU2FuZGJveCk6CisgICAgICAgIChXVEY6OnJlYWxUaW1lS2l0R2V0UHJvcGVydHkpOgorICAg
ICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1l
KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpzY2hlZHVsZURpc2NhcmRSZWFsVGlt
ZUtpdFByb3h5KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpkaXNjYXJkUmVhbFRp
bWVLaXRQcm94eVRpbWVyRmlyZWQpOgorICAgICAgICAqIHd0Zi9saW51eC9SZWFsVGltZVRocmVh
ZHMuaDogQWRkZWQuCisgICAgICAgICogd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcDoKKyAg
ICAgICAgKFdURjo6c2NoZWRQb2xpY3kpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlz
aEhhbmRsZSk6CisKIDIwMjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNo
ZWNraW5nIGlmIHdlIGFyZSB1bmRlciBzYW5kYm94CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDdmNmY3NzIyZDJiOS4uZDYwOTEyOWVmMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTEsNiArMTEsOCBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICAgICBn
bGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZH
VHlwZS5oCisKKyAgICBsaW51eC9SZWFsVGltZVRocmVhZHMuaAogKQogCiBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQpAQCAtNTIsNiArNTQsNyBAQCBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgICAgIGxpbnV4L0N1cnJlbnRQcm9jZXNzTWVtb3J5U3RhdHVzLmNwcAogICAgICAgICBsaW51
eC9NZW1vcnlGb290cHJpbnRMaW51eC5jcHAKKyAgICAgICAgbGludXgvUmVhbFRpbWVUaHJlYWRz
LmNwcAogCiAgICAgICAgIHVuaXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyVW5peC5jcHAKICAgICAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKaW5kZXggZTkzYTI4NWEyZDg3Li4yZjRm
YzZiNmI5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKQEAgLTk5LDYgKzk5
LDcgQEAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiAgICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9yeUZvb3RwcmludExpbnV4LmNwcAorICAgICAg
ICBsaW51eC9SZWFsVGltZVRocmVhZHMuY3BwCiAKICAgICAgICAgdW5peC9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJVbml4LmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZDRk
MjQxNTE3YTU3Li4zYjQ3OTk3ZTVjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0x
Miw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgbGludXgv
UHJvY2Vzc01lbW9yeUZvb3RwcmludC5oCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuaAorICAgIGxpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCiApCiAKIGxpc3QoQVBQRU5EIFdU
Rl9TT1VSQ0VTCkBAIC0yOSw2ICszMCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
Z2xpYi9VUkxHTGliLmNwcAogCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMu
Y3BwCisgICAgbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcAogCiAgICAgcG9zaXgvQ1BVVGltZVBP
U0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApp
bmRleCBkNjY2NjhiMTc5NjkuLmJmYmNiYTk4YWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00
MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgogI2VuZGlmCiAKKyNp
ZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIExvY2sgVGhyZWFkOjpzX2FsbFRocmVhZHNMb2NrOwpA
QCAtMzMwLDYgKzMzNCwxMiBAQCB2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9y
aXR5IDw9IDApOwogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5ID49IFFPU19NSU5fUkVMQVRJ
VkVfUFJJT1JJVFkpOwogICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCByZWxhdGl2ZVByaW9yaXR5KTsK
KyNlbGlmIE9TKExJTlVYKQorICAgIC8vIFdlIGRvbid0IGFsbG93IHRvIG1ha2UgdGhlIG1haW4g
dGhyZWFkIHJlYWwgdGltZS4gVGhpcyBpcyB1c2VkIGJ5IHNlY29uZGFyeSBwcm9jZXNzZXMgdG8g
bWF0Y2ggdGhlCisgICAgLy8gVUkgcHJvY2VzcywgYnV0IGluIGxpbnV4IHRoZSBVSSBwcm9jZXNz
IGlzIG5vdCByZWFsIHRpbWUuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgUmVh
bFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5yZWdpc3RlclRocmVhZChjdXJyZW50KCkpOworICAg
IFVOVVNFRF9QQVJBTShyZWxhdGl2ZVByaW9yaXR5KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHJlbGF0aXZlUHJpb3JpdHkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9n
ZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3Jr
UXVldWVHZW5lcmljLmNwcAppbmRleCBkOTk3ZmRlNzNhZDQuLmQyNTdkM2E3MjA0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zOSwxNCArMzks
MTQgQEAgV29ya1F1ZXVlQmFzZTo6V29ya1F1ZXVlQmFzZShSdW5Mb29wJiBydW5Mb29wKQogewog
fQogCi12b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lLCBUeXBlLCBRT1MpCit2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MgcW9zKQogewogICAgIEJpbmFyeVNlbWFwaG9yZSBz
ZW1hcGhvcmU7CiAgICAgVGhyZWFkOjpjcmVhdGUobmFtZSwgWyZdIHsKICAgICAgICAgbV9ydW5M
b29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwog
ICAgICAgICBtX3J1bkxvb3AtPnJ1bigpOwotICAgIH0pLT5kZXRhY2goKTsKKyAgICB9LCBUaHJl
YWRUeXBlOjpVbmtub3duLCBxb3MpLT5kZXRhY2goKTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3Bw
IGIvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgxMTZiYjUzZjMzZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSwy
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNp
bmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L1NhbmRib3guaD4KKyNlbmRpZgorCisjaWZuZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKKyNkZWZp
bmUgU0NIRURfUkVTRVRfT05fRk9SSyAweDQwMDAwMDAwCisjZW5kaWYKKworbmFtZXNwYWNlIFdU
RiB7CisKK3N0YXRpYyBjb25zdCBpbnQgc19yZWFsVGltZVRocmVhZFByaW9yaXR5ID0gNTsKKwor
UmVhbFRpbWVUaHJlYWRzJiBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpCit7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWFsVGltZVRocmVhZHM+IHJlYWxUaW1lVGhyZWFkczsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uo
b25jZUZsYWcsIFsmXSB7CisgICAgICAgIHJlYWxUaW1lVGhyZWFkcy5jb25zdHJ1Y3QoKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVhbFRpbWVUaHJlYWRzOworfQorCitSZWFsVGltZVRocmVhZHM6
OlJlYWxUaW1lVGhyZWFkcygpCisgICAgOiBtX3RocmVhZEdyb3VwKFRocmVhZEdyb3VwOjpjcmVh
dGUoKSkKKyNpZiBVU0UoR0xJQikKKyAgICAsIG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZSZWFsVGltZVRocmVhZHM6OmRpc2NhcmRSZWFsVGlt
ZUtpdFByb3h5VGltZXJGaXJlZCkKKyNlbmRpZgoreworI2lmIFVTRShHTElCKQorICAgIG1fZGlz
Y2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lci5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3Jp
dHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisjZW5kaWYKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW10geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAg
c2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9ICtbXShpbnQsIHNpZ2luZm9fdCosIHZvaWQqKSB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCBrbm93IHdoaWNoIHRocmVhZCBjYXVzZWQgdGhlIGxpbWl0IHRvIGJlIHJlYWNoZWQsCisgICAg
ICAgICAgICAvLyBzbyB3ZSBkZW1vdGUgYWxsIHJlYWwgdGltZSB0aHJlYWRzIHRvIGF2b2lkIFNJ
R0tJTEwuCisgICAgICAgICAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLmRlbW90ZUFs
bFRocmVhZHNGcm9tUmVhbFRpbWUoKTsKKyAgICAgICAgfTsKKyAgICAgICAgYWN0aW9uLnNhX2Zs
YWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgc2lnYWN0aW9uKFNJR1hDUFUsICZhY3Rpb24sIG51
bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkczo6cmVnaXN0ZXJUaHJl
YWQoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgVGhyZWFkR3JvdXBBZGRSZXN1bHQgYWRkUmVzdWx0
OworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fdGhyZWFkR3JvdXAtPmdldExvY2so
KSB9OworICAgICAgICBhZGRSZXN1bHQgPSBtX3RocmVhZEdyb3VwLT5hZGQobG9ja2VyLCB0aHJl
YWQpOworICAgIH0KKworICAgIGlmIChhZGRSZXN1bHQgIT0gVGhyZWFkR3JvdXBBZGRSZXN1bHQ6
Ok5ld2x5QWRkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHRocmVhZCA9IFJlZiB7IHRocmVhZCB9XSB7CisgICAgICAgIGlmIChtX2VuYWJsZWQpCisg
ICAgICAgICAgICBwcm9tb3RlVGhyZWFkVG9SZWFsVGltZSh0aHJlYWQpOworICAgIH0pOworfQor
Cit2b2lkIFJlYWxUaW1lVGhyZWFkczo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9lbmFibGVkID09IGVuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICBMb2NrZXIg
bG9ja2VyIHsgbV90aHJlYWRHcm91cC0+Z2V0TG9jaygpIH07CisgICAgZm9yIChjb25zdCBhdXRv
JiB0aHJlYWQgOiBtX3RocmVhZEdyb3VwLT50aHJlYWRzKGxvY2tlcikpIHsKKyAgICAgICAgaWYg
KG1fZW5hYmxlZCkKKyAgICAgICAgICAgIHByb21vdGVUaHJlYWRUb1JlYWxUaW1lKHRocmVhZCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbW90ZVRocmVhZEZyb21SZWFsVGltZSh0aHJl
YWQpOworICAgIH0KK30KKwordm9pZCBSZWFsVGltZVRocmVhZHM6OnByb21vdGVUaHJlYWRUb1Jl
YWxUaW1lKGNvbnN0IFRocmVhZCYgdGhyZWFkKQoreworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBw
YXJhbTsKKyAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHN0ZDo6Y2xhbXAoc19yZWFsVGltZVRo
cmVhZFByaW9yaXR5LCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKFNDSEVEX1JSKSwgc2NoZWRfZ2V0
X3ByaW9yaXR5X21heChTQ0hFRF9SUikpOworICAgIGF1dG8gZXJyb3IgPSBzY2hlZF9zZXRzY2hl
ZHVsZXIodGhyZWFkLmlkKCksIFNDSEVEX1JSIHwgU0NIRURfUkVTRVRfT05fRk9SSywgJnBhcmFt
KTsKKyAgICBpZiAoZXJyb3IpIHsKKyNpZiBVU0UoR0xJQikKKyAgICAgICAgcmVhbFRpbWVLaXRN
YWtlVGhyZWFkUmVhbFRpbWUoZ2V0cGlkKCksIHRocmVhZC5pZCgpLCBwYXJhbS5zY2hlZF9wcmlv
cml0eSk7CisjZWxzZQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgY3VycmVudCB0
aHJlYWQgYXMgcmVhbCB0aW1lOiAlcyIsIHN0cmVycm9yKGVycm9yKSk7CisjZW5kaWYKKyAgICB9
Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpkZW1vdGVUaHJlYWRGcm9tUmVhbFRpbWUoY29u
c3QgVGhyZWFkJiB0aHJlYWQpCit7CisgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAw
IH07CisgICAgc2NoZWRfc2V0c2NoZWR1bGVyKHRocmVhZC5pZCgpLCBTQ0hFRF9PVEhFUiB8IFND
SEVEX1JFU0VUX09OX0ZPUkssICZwYXJhbSk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpk
ZW1vdGVBbGxUaHJlYWRzRnJvbVJlYWxUaW1lKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV90
aHJlYWRHcm91cC0+Z2V0TG9jaygpIH07CisgICAgZm9yIChjb25zdCBhdXRvJiB0aHJlYWQgOiBt
X3RocmVhZEdyb3VwLT50aHJlYWRzKGxvY2tlcikpCisgICAgICAgIGRlbW90ZVRocmVhZEZyb21S
ZWFsVGltZSh0aHJlYWQpOworfQorCisjaWYgVVNFKEdMSUIpCitzdGF0aWMgY29uc3QgU2Vjb25k
cyBzX2RidXNDYWxsVGltZW91dCA9IDIwX21zOworCitzdGF0aWMgaW50NjRfdCByZWFsVGltZUtp
dEdldFByb3BlcnR5KEdEQnVzUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUs
IEdFcnJvcioqIGVycm9yKQoreworICAgIGlmIChzaG91bGRVc2VQb3J0YWwoKSkgeworICAgICAg
ICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxf
c3luYyhwcm94eSwgIkdldFByb3BlcnR5IiwgZ192YXJpYW50X25ldygiKHMpIiwgcHJvcGVydHlO
YW1lKSwgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAgICAgICAgIHNfZGJ1c0NhbGxUaW1l
b3V0Lm1pbGxpc2Vjb25kc0FzPGludD4oKSwgbnVsbHB0ciwgZXJyb3IpKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaW50NjRfdCB2YWx1
ZTsKKyAgICAgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoeCkiLCAmdmFsdWUpOwor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVz
dWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMocHJveHksICJvcmcuZnJlZWRl
c2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLkdldCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzcyki
LCAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsIHByb3BlcnR5TmFtZSksIEdfREJVU19D
QUxMX0ZMQUdTX05PTkUsIHNfZGJ1c0NhbGxUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPGludD4oKSwg
bnVsbHB0ciwgZXJyb3IpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIC0xOwor
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gcHJvcGVydHk7CisgICAgZ192YXJpYW50X2dldChyZXN1
bHQuZ2V0KCksICIodikiLCAmcHJvcGVydHkub3V0UHRyKCkpOworICAgIGlmIChnX3ZhcmlhbnRf
aXNfb2ZfdHlwZShwcm9wZXJ0eS5nZXQoKSwgR19WQVJJQU5UX1RZUEVfSU5UNjQpKQorICAgICAg
ICByZXR1cm4gZ192YXJpYW50X2dldF9pbnQ2NChwcm9wZXJ0eS5nZXQoKSk7CisgICAgaWYgKGdf
dmFyaWFudF9pc19vZl90eXBlKHByb3BlcnR5LmdldCgpLCBHX1ZBUklBTlRfVFlQRV9JTlQzMikp
CisgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X2ludDMyKHByb3BlcnR5LmdldCgpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFk
czo6cmVhbFRpbWVLaXRNYWtlVGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50
NjRfdCB0aHJlYWRJRCwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgICAgbV9kaXNjYXJkUmVhbFRp
bWVLaXRQcm94eVRpbWVyLnN0b3AoKTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBpZiAoIW1fcmVhbFRpbWVLaXRQcm94eSkgeworICAgICAgICBpZiAoc2hvdWxkVXNl
UG9ydGFsKCkpIHsKKyAgICAgICAgICAgIG1fcmVhbFRpbWVLaXRQcm94eSA9IGFkb3B0R1JlZihn
X2RidXNfcHJveHlfbmV3X2Zvcl9idXNfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1Nf
RE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9Q
Uk9QRVJUSUVTKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBv
cnRhbC5EZXNrdG9wIiwgIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiLCAib3JnLmZy
ZWVkZXNrdG9wLnBvcnRhbC5SZWFsdGltZSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9yZWFsVGltZUtpdFByb3h5ID0gYWRvcHRH
UmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZUEVfU1lTVEVNLAorICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZM
QUdTX0RPX05PVF9DT05ORUNUX1NJR05BTFMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xP
QURfUFJPUEVSVElFUyksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3Rv
cC5SZWFsdGltZUtpdDEiLCAiL29yZy9mcmVlZGVza3RvcC9SZWFsdGltZUtpdDEiLCAib3JnLmZy
ZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFtX3JlYWxUaW1lS2l0UHJveHkudmFsdWUoKSkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdCB0byBSZWFsdGltZUtpdDogJXMi
LCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIW1fcmVhbFRpbWVLaXRQcm94eS52YWx1ZSgpKQorICAgICAgICByZXR1cm47
CisKKyNpZmRlZiBSTElNSVRfUlRUSU1FCisgICAgLy8gUmVhbFRpbWVLaXQgcmVxdWlyZXMgdGhl
IGNsaWVudCB0byBoYXZlIFJMSU1JVF9SVFRJTUUgc2V0LgorICAgIHN0cnVjdCBybGltaXQgcmw7
CisgICAgaWYgKGdldHJsaW1pdChSTElNSVRfUlRUSU1FLCAmcmwpID49IDApIHsKKyAgICAgICAg
YXV0byBydHRpbWVNYXggPSByZWFsVGltZUtpdEdldFByb3BlcnR5KG1fcmVhbFRpbWVLaXRQcm94
eS0+Z2V0KCksICJSVFRpbWVVU2VjTWF4IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYg
KGVycm9yKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgUlRUaW1lVVNl
Y01heCBmcm9tIFJlYWx0aW1lS2l0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAg
IGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0RCVVNfRVJST1IsIEdfREJVU19F
UlJPUl9VTktOT1dOX0lOVEVSRkFDRSkpCisgICAgICAgICAgICAgICAgbV9yZWFsVGltZUtpdFBy
b3h5ID0gbnVsbHB0cjsKKworICAgICAgICAgICAgc2NoZWR1bGVEaXNjYXJkUmVhbFRpbWVLaXRQ
cm94eSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJs
LnJsaW1fbWF4ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJ0dGltZU1heCkpIHsKKyAgICAgICAg
ICAgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9tYXggPSBydHRpbWVNYXg7CisgICAgICAgICAgICBz
ZXRybGltaXQoUkxJTUlUX1JUVElNRSwgJnJsKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
CisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9j
YWxsX3N5bmMobV9yZWFsVGltZUtpdFByb3h5LT5nZXQoKSwgIk1ha2VUaHJlYWRSZWFsdGltZVdp
dGhQSUQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHR1KSIsIHByb2Nlc3NJRCwgdGhyZWFk
SUQsIHByaW9yaXR5KSwgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwgc19kYnVzQ2FsbFRpbWVvdXQu
bWlsbGlzZWNvbmRzQXM8aW50PigpLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIHRocmVhZCBy
ZWFsIHRpbWU6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBpZiAoIWdfZXJyb3JfbWF0
Y2hlcyhlcnJvci5nZXQoKSwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfVU5LTk9XTl9JTlRF
UkZBQ0UpKQorICAgICAgICAgICAgbV9yZWFsVGltZUtpdFByb3h5ID0gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBzY2hlZHVsZURpc2NhcmRSZWFsVGltZUtpdFByb3h5KCk7Cit9CisKK3ZvaWQgUmVh
bFRpbWVUaHJlYWRzOjpzY2hlZHVsZURpc2NhcmRSZWFsVGltZUtpdFByb3h5KCkKK3sKKyAgICBp
ZiAoIW1fcmVhbFRpbWVLaXRQcm94eSB8fCAhbV9yZWFsVGltZUtpdFByb3h5LnZhbHVlKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2Rpc2NhcmRSZWFsVGltZUtpdFByb3h5VGltZXIuc3RhcnRP
bmVTaG90KDMwX3MpOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkczo6ZGlzY2FyZFJlYWxUaW1l
S2l0UHJveHlUaW1lckZpcmVkKCkKK3sKKyAgICBtX3JlYWxUaW1lS2l0UHJveHkgPSBzdGQ6Om51
bGxvcHQ7Cit9CisjZW5kaWYgLy8gVVNFKEdMSUIpCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmVmYTgwNWM0NDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRHcm91cC5o
PgorCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0
IF9HREJ1c1Byb3h5IEdEQnVzUHJveHk7CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFJlYWxUaW1lVGhyZWFkcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
ZnJpZW5kIGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDxSZWFsVGltZVRocmVhZHM+OworcHVibGlj
OgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVhbFRpbWVUaHJlYWRzJiBzaW5nbGV0
b24oKTsKKworICAgIHZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkJik7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCitwcml2YXRlOgorICAgIFJlYWxU
aW1lVGhyZWFkcygpOworCisgICAgdm9pZCBwcm9tb3RlVGhyZWFkVG9SZWFsVGltZShjb25zdCBX
VEY6OlRocmVhZCYpOworICAgIHZvaWQgZGVtb3RlVGhyZWFkRnJvbVJlYWxUaW1lKGNvbnN0IFdU
Rjo6VGhyZWFkJik7CisgICAgdm9pZCBkZW1vdGVBbGxUaHJlYWRzRnJvbVJlYWxUaW1lKCk7CisK
KyNpZiBVU0UoR0xJQikKKyAgICB2b2lkIHJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1lKHVp
bnQ2NF90IHByb2Nlc3NJRCwgdWludDY0X3QgdGhyZWFkSUQsIHVpbnQzMl90IHByaW9yaXR5KTsK
KyAgICB2b2lkIHNjaGVkdWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJveHkoKTsKKyAgICB2b2lkIGRp
c2NhcmRSZWFsVGltZUtpdFByb3h5VGltZXJGaXJlZCgpOworI2VuZGlmCisKKyAgICBzdGQ6OnNo
YXJlZF9wdHI8VGhyZWFkR3JvdXA+IG1fdGhyZWFkR3JvdXA7CisgICAgYm9vbCBtX2VuYWJsZWQg
eyB0cnVlIH07CisjaWYgVVNFKEdMSUIpCisgICAgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdEQnVz
UHJveHk+PiBtX3JlYWxUaW1lS2l0UHJveHk7CisgICAgUnVuTG9vcDo6VGltZXI8UmVhbFRpbWVU
aHJlYWRzPiBtX2Rpc2NhcmRSZWFsVGltZUtpdFByb3h5VGltZXI7CisjZW5kaWYKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlJlYWxUaW1lVGhyZWFkczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcAppbmRleCBlZGI5YjUxODQ4ZjguLjk0NzQzOWFi
NzdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcApAQCAtNDIsNyAr
NDIsMTMgQEAKICNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KIAogI2lmIE9TKExJTlVYKQorI2lu
Y2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N5
c2NhbGwuaD4KKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjaWZuZGVm
IFNDSEVEX1JFU0VUX09OX0ZPUksKKyNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAweDQwMDAw
MDAwCisjZW5kaWYKICNlbmRpZgogCiAjaWYgIUNPTVBJTEVSKE1TVkMpCkBAIC02OSwxMCArNzUs
NiBAQAogI2luY2x1ZGUgPG1hY2gvdGhyZWFkX3N3aXRjaC5oPgogI2VuZGlmCiAKLSNpZiBPUyhM
SU5VWCkKLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYg
ewogCiBzdGF0aWMgTG9jayBnbG9iYWxTdXNwZW5kTG9jazsKQEAgLTI2MCw2ICsyNjIsMjQgQEAg
ZGlzcGF0Y2hfcW9zX2NsYXNzX3QgVGhyZWFkOjpkaXNwYXRjaFFPU0NsYXNzKFFPUyBxb3MpCiB9
CiAjZW5kaWYKIAorI2lmIE9TKExJTlVYKQorc3RhdGljIGludCBzY2hlZFBvbGljeShUaHJlYWQ6
OlFPUyBxb3MpCit7CisgICAgc3dpdGNoIChxb3MpIHsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpV
c2VySW50ZXJhY3RpdmU6CisgICAgICAgIHJldHVybiBTQ0hFRF9SUjsKKyAgICBjYXNlIFRocmVh
ZDo6UU9TOjpVc2VySW5pdGlhdGVkOgorICAgIGNhc2UgVGhyZWFkOjpRT1M6OkRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBTQ0hFRF9PVEhFUjsKKyAgICBjYXNlIFRocmVhZDo6UU9TOjpVdGlsaXR5
OgorICAgICAgICByZXR1cm4gU0NIRURfQkFUQ0g7CisgICAgY2FzZSBUaHJlYWQ6OlFPUzo6QmFj
a2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIFNDSEVEX0lETEU7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisjZW5kaWYKKwogYm9vbCBUaHJlYWQ6OmVzdGFibGlz
aEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
c3RhY2tTaXplLCBRT1MgcW9zKQogewogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CkBAIC0y
NjcsOCArMjg3LDYgQEAgYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250
ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc3QKICAgICBwdGhyZWFkX2F0dHJf
aW5pdCgmYXR0cik7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBwdGhyZWFkX2F0dHJfc2V0
X3Fvc19jbGFzc19ucCgmYXR0ciwgZGlzcGF0Y2hRT1NDbGFzcyhxb3MpLCAwKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHFvcyk7CiAjZW5kaWYKICAgICBpZiAoc3RhY2tTaXplKQogICAgICAg
ICBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyLCBzdGFja1NpemUudmFsdWUoKSk7CkBA
IC0yNzgsNiArMjk2LDIxIEBAIGJvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFk
Q29udGV4dCogY29udGV4dCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHN0CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggY29u
dGV4dCAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQorCisjaWYgT1MoTElOVVgpCisgICAgaW50IHBvbGljeSA9IHNjaGVkUG9s
aWN5KHFvcyk7CisgICAgaWYgKHBvbGljeSA9PSBTQ0hFRF9SUikKKyAgICAgICAgUmVhbFRpbWVU
aHJlYWRzOjpzaW5nbGV0b24oKS5yZWdpc3RlclRocmVhZCgqdGhpcyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgMCB9OworICAgICAgICBlcnJvciA9
IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSh0aHJlYWRIYW5kbGUsIHBvbGljeSB8IFNDSEVEX1JFU0VU
X09OX0ZPUkssICZwYXJhbSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHNldCBzY2hlZCBwb2xpY3kgJWQgZm9yIHRocmVhZCAlZDogJXMiLCBw
b2xpY3ksIHRocmVhZEhhbmRsZSwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICB9CisjZWxpZiAhSEFW
RShRT1NfQ0xBU1NFUykKKyAgICBVTlVTRURfUEFSQU0ocW9zKTsKKyNlbmRpZgorCiAgICAgZXN0
YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZSh0aHJlYWRIYW5kbGUpOwogICAgIHJldHVybiB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBkZGE1MWY5MDE4OTIuLmY5NWEyZTllOWE0MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNCBAQAorMjAyMS0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBVc2VySW50ZXJhY3RpdmUgdGhy
ZWFkcyBhcmUgbm90IFJlYWwtdGltZSBpbiBMaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHJlYWwgdGltZSB0aHJlYWRzIGluIHRoZSB3
ZWIgcHJvY2VzcyBvbmx5IHdoZW4gdGhlcmUncyBhIHZpc2libGUgcGFnZS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZW1vdmVXZWJQ
YWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGFnZUFjdGl2aXR5U3RhdGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc0dM
aWIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQ
cm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5
U3RhdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlh
bGl6ZVByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNz
KToKKwogMjAyMS0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dMSUJdIFNpbXBsaWZ5IFNsZWVwRGlzYWJsZXIgYnkgY2hlY2tpbmcg
aWYgd2UgYXJlIHVuZGVyIHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAppbmRleCBmODVjYTM2M2Y0ZWYuLjQ2MmMzYzI3ODE0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMjI0LDYgKzIyNCwxMCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvVlA5VXRpbGl0aWVzQ29jb2EuaD4KICNlbmRpZgogCisjaWYgT1MoTElOVVgpCisjaW5j
bHVkZSA8d3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oPgorI2VuZGlmCisKICN1bmRlZiBXRUJQ
Uk9DRVNTX1JFTEVBU0VfTE9HCiAjZGVmaW5lIFJFTEVBU0VfTE9HX1NFU1NJT05fSUQgKG1fc2Vz
c2lvbklEID8gbV9zZXNzaW9uSUQtPnRvVUludDY0KCkgOiAwKQogI2lmIFJFTEVBU0VfTE9HX0RJ
U0FCTEVECkBAIC04MDksNiArODEzLDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdl
KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4K
ICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgICAgIHVwZGF0ZUNQVUxpbWl0KCk7
CisjaWYgT1MoTElOVVgpCisgICAgICAgIFJlYWxUaW1lVGhyZWFkczo6c2luZ2xldG9uKCkuc2V0
RW5hYmxlZChoYXNWaXNpYmxlV2ViUGFnZSgpKTsKKyNlbmRpZgogICAgIH0gZWxzZQogICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5yZWluaXRpYWxpemVXZWJQYWdlKFdURk1vdmUocGFy
YW1ldGVycykpOwogCkBAIC04MjYsNiArODMzLDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVX
ZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKIAogICAgIGVuYWJsZVRlcm1pbmF0aW9uKCk7
CiAgICAgdXBkYXRlQ1BVTGltaXQoKTsKKyNpZiBPUyhMSU5VWCkKKyAgICBSZWFsVGltZVRocmVh
ZHM6OnNpbmdsZXRvbigpLnNldEVuYWJsZWQoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5kaWYK
IH0KIAogYm9vbCBXZWJQcm9jZXNzOjpzaG91bGRUZXJtaW5hdGUoKQpAQCAtMTQ2NiwxMCArMTQ3
Niw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4aWxpYXJ5
UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVyCiB7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJikKLXsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjp1cGRhdGVBY3RpdmVQ
YWdlcyhjb25zdCBTdHJpbmcmIG92ZXJyaWRlRGlzcGxheU5hbWUpCiB7CiB9CkBAIC0xNDkxLDgg
KzE0OTcsMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjp1cGRhdGVDUFVNb25pdG9yU3RhdGUoQ1BVTW9u
aXRvclVwZGF0ZVJlYXNvbikKIAogdm9pZCBXZWJQcm9jZXNzOjpwYWdlQWN0aXZpdHlTdGF0ZURp
ZENoYW5nZShQYWdlSWRlbnRpZmllciwgT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6
OkZsYWc+IGNoYW5nZWQpCiB7Ci0gICAgaWYgKGNoYW5nZWQgJiBXZWJDb3JlOjpBY3Rpdml0eVN0
YXRlOjpJc1Zpc2libGUpCisgICAgaWYgKGNoYW5nZWQgJiBXZWJDb3JlOjpBY3Rpdml0eVN0YXRl
OjpJc1Zpc2libGUpIHsKICAgICAgICAgdXBkYXRlQ1BVTW9uaXRvclN0YXRlKENQVU1vbml0b3JV
cGRhdGVSZWFzb246OlZpc2liaWxpdHlIYXNDaGFuZ2VkKTsKKyNpZiBPUyhMSU5VWCkKKyAgICAg
ICAgUmVhbFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5zZXRFbmFibGVkKGhhc1Zpc2libGVXZWJQ
YWdlKCkpOworI2VuZGlmCisgICAgfQogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcAppbmRl
eCAwYjk1ZWVhMzBkNDkuLjc3MjlmZjc5ZTYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc0dMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NHTGliLmNwcApAQCAtNTUsNiArNTUsMTAgQEAKICNpbmNs
dWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oIgogI2VuZGlmCiAKKyNpZiBPUyhMSU5VWCkK
KyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjQsNiArNjgsMTQg
QEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsKQogICAgIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxl
ZChjYWNoZU1vZGVsID09IENhY2hlTW9kZWw6OkRvY3VtZW50Vmlld2VyKTsKIH0KIAordm9pZCBX
ZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQoreworI2lmIE9TKExJTlVYKQorICAgIC8vIERp
c2FibGUgUmVhbFRpbWVUaHJlYWRzIGluIFdlYlByb2Nlc3MgaW5pdGlhbGx5LCBzaW5jZSBpdCBk
ZXBlbmRzIG9uIGhhdmluZyBhIHZpc2libGUgd2ViIHBhZ2UuCisgICAgUmVhbFRpbWVUaHJlYWRz
OjpzaW5nbGV0b24oKS5zZXRFbmFibGVkKGZhbHNlKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBy
b2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQbGF5
U3RhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvcGxheXN0YXRpb24vV2ViUHJv
Y2Vzc1BsYXlTdGF0aW9uLmNwcAppbmRleCBlZjYwMTIyMGU1NTYuLmM0NGYwZGQ0Y2Y4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlByb2Nlc3NQ
bGF5U3RhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3BsYXlzdGF0aW9u
L1dlYlByb2Nlc3NQbGF5U3RhdGlvbi5jcHAKQEAgLTQzLDYgKzQzLDEwIEBAIHZvaWQgV2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiBwYXJhCiAjZW5kaWYKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmKQoreworfQorCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMoV2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRlcnMmJikKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCmluZGV4IDA1YjM1
Y2FkNTBhOC4uZDNkMzhjYWM0MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93
aW4vV2ViUHJvY2Vzc1dpbi5jcHAKQEAgLTM5LDYgKzM5LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JikKIHsKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNv
bnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQoreworfQorCiB2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoV2Vi
UHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRlcnMmJikKIHsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441635</attachid>
            <date>2021-10-18 13:10:02 -0700</date>
            <delta_ts>2021-10-19 03:04:04 -0700</delta_ts>
            <desc>[PATCH] Update realtime portal usage</desc>
            <filename>file_220115.txt</filename>
            <type>text/plain</type>
            <size>1750</size>
            <attacher name="Patrick Griffis">pgriffis</attacher>
            
              <data encoding="base64">RnJvbSAyNDRiYzMwMDNkZWZmYWRhZTI3YTgxNGNkOGRhMDY1ZGJjMGZjZDM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogUGF0cmljayBHcmlmZmlzIDxwZ3JpZmZpc0BpZ2FsaWEuY29t
Pg0KRGF0ZTogTW9uLCAxOCBPY3QgMjAyMSAxNTowODozMiAtMDUwMA0KU3ViamVjdDogW1BBVENI
XSBVcGRhdGUgcmVhbHRpbWUgcG9ydGFsIHVzYWdlDQoNCi0tLQ0KIFNvdXJjZS9XVEYvd3RmL2xp
bnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAgfCAxMyArKy0tLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5n
ZWQsIDIgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvbGlu
dXgvUmVhbFRpbWVUaHJlYWRzLmNwcA0KaW5kZXggODExNmJiNTNmMzNmLi44OGU2MGRmMTM2Mzgg
MTAwNjQ0DQotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3BwDQor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3BwDQpAQCAtMTQ4LDE5
ICsxNDgsMTAgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgc19kYnVzQ2FsbFRpbWVvdXQgPSAyMF9t
czsNCiANCiBzdGF0aWMgaW50NjRfdCByZWFsVGltZUtpdEdldFByb3BlcnR5KEdEQnVzUHJveHkq
IHByb3h5LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKQ0KIHsNCi0g
ICAgaWYgKHNob3VsZFVzZVBvcnRhbCgpKSB7DQotICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBy
ZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhwcm94eSwgIkdldFByb3Bl
cnR5IiwgZ192YXJpYW50X25ldygiKHMpIiwgcHJvcGVydHlOYW1lKSwgR19EQlVTX0NBTExfRkxB
R1NfTk9ORSwNCi0gICAgICAgICAgICBzX2RidXNDYWxsVGltZW91dC5taWxsaXNlY29uZHNBczxp
bnQ+KCksIG51bGxwdHIsIGVycm9yKSk7DQotICAgICAgICBpZiAoIXJlc3VsdCkNCi0gICAgICAg
ICAgICByZXR1cm4gLTE7DQotDQotICAgICAgICBpbnQ2NF90IHZhbHVlOw0KLSAgICAgICAgZ192
YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoeCkiLCAmdmFsdWUpOw0KLSAgICAgICAgcmV0dXJu
IHZhbHVlOw0KLSAgICB9DQorICAgIGNvbnN0IFN0cmluZyBpZmFjZU5hbWUgPSBzaG91bGRVc2VQ
b3J0YWwoKSA/ICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlYWx0aW1lIiA6ICJvcmcuZnJlZWRl
c2t0b3AuUmVhbHRpbWVLaXQxIjsNCiANCiAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0g
YWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMocHJveHksICJvcmcuZnJlZWRlc2t0b3Au
REJ1cy5Qcm9wZXJ0aWVzLkdldCIsDQotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgIm9y
Zy5mcmVlZGVza3RvcC5SZWFsdGltZUtpdDEiLCBwcm9wZXJ0eU5hbWUpLCBHX0RCVVNfQ0FMTF9G
TEFHU19OT05FLCBzX2RidXNDYWxsVGltZW91dC5taWxsaXNlY29uZHNBczxpbnQ+KCksIG51bGxw
dHIsIGVycm9yKSk7DQorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgaWZhY2VOYW1lLCBw
cm9wZXJ0eU5hbWUpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCBzX2RidXNDYWxsVGltZW91dC5t
aWxsaXNlY29uZHNBczxpbnQ+KCksIG51bGxwdHIsIGVycm9yKSk7DQogICAgIGlmICghcmVzdWx0
KQ0KICAgICAgICAgcmV0dXJuIC0xOw0KIA0KLS0gDQoyLjMxLjENCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441705</attachid>
            <date>2021-10-19 03:04:04 -0700</date>
            <delta_ts>2021-10-19 07:36:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-linux-real-time.diff</filename>
            <type>text/plain</type>
            <size>24509</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMGQ3YjZkNTRkNGVlLi4xMjE3YzgzYTgxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIw
MjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gVXNlckludGVyYWN0aXZlIHRocmVhZHMgYXJlIG5vdCBSZWFsLXRp
bWUgaW4gTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDExNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBSZWFsVGltZVRocmVhZHMgc2luZ2xldG9uIHRvIHJlZ2lzdGVyIHJlYWwgdGltZSB0
aHJlYWRzLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtV1BFLmNtYWtl
OgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgICogd3RmL2dlbmVyaWMv
V29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJhc2U6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6UmVhbFRpbWVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6UmVhbFRpbWVUaHJlYWRzOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChXVEY6OlJlYWxU
aW1lVGhyZWFkczo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFkczo6
cHJvbW90ZVRocmVhZFRvUmVhbFRpbWUpOgorICAgICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6
OmRlbW90ZVRocmVhZEZyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OlJlYWxUaW1lVGhyZWFk
czo6ZGVtb3RlQWxsVGhyZWFkc0Zyb21SZWFsVGltZSk6CisgICAgICAgIChXVEY6OmlzUnVubmlu
Z0luU2FuZGJveCk6CisgICAgICAgIChXVEY6OnJlYWxUaW1lS2l0R2V0UHJvcGVydHkpOgorICAg
ICAgICAoV1RGOjpSZWFsVGltZVRocmVhZHM6OnJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1l
KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpzY2hlZHVsZURpc2NhcmRSZWFsVGlt
ZUtpdFByb3h5KToKKyAgICAgICAgKFdURjo6UmVhbFRpbWVUaHJlYWRzOjpkaXNjYXJkUmVhbFRp
bWVLaXRQcm94eVRpbWVyRmlyZWQpOgorICAgICAgICAqIHd0Zi9saW51eC9SZWFsVGltZVRocmVh
ZHMuaDogQWRkZWQuCisgICAgICAgICogd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcDoKKyAg
ICAgICAgKFdURjo6c2NoZWRQb2xpY3kpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlz
aEhhbmRsZSk6CisKIDIwMjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNo
ZWNraW5nIGlmIHdlIGFyZSB1bmRlciBzYW5kYm94CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDdmNmY3NzIyZDJiOS4uZDYwOTEyOWVmMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTEsNiArMTEsOCBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICAgICBn
bGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZH
VHlwZS5oCisKKyAgICBsaW51eC9SZWFsVGltZVRocmVhZHMuaAogKQogCiBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQpAQCAtNTIsNiArNTQsNyBAQCBpZiAoQ01BS0VfU1lT
VEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgICAgIGxpbnV4L0N1cnJlbnRQcm9jZXNzTWVtb3J5U3RhdHVzLmNwcAogICAgICAgICBsaW51
eC9NZW1vcnlGb290cHJpbnRMaW51eC5jcHAKKyAgICAgICAgbGludXgvUmVhbFRpbWVUaHJlYWRz
LmNwcAogCiAgICAgICAgIHVuaXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyVW5peC5jcHAKICAgICAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKaW5kZXggZTkzYTI4NWEyZDg3Li4yZjRm
YzZiNmI5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKQEAgLTk5LDYgKzk5
LDcgQEAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiAgICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuY3BwCiAgICAgICAgIGxpbnV4L01lbW9yeUZvb3RwcmludExpbnV4LmNwcAorICAgICAg
ICBsaW51eC9SZWFsVGltZVRocmVhZHMuY3BwCiAKICAgICAgICAgdW5peC9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJVbml4LmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZDRk
MjQxNTE3YTU3Li4zYjQ3OTk3ZTVjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0x
Miw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgbGludXgv
UHJvY2Vzc01lbW9yeUZvb3RwcmludC5oCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlT
dGF0dXMuaAorICAgIGxpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCiApCiAKIGxpc3QoQVBQRU5EIFdU
Rl9TT1VSQ0VTCkBAIC0yOSw2ICszMCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
Z2xpYi9VUkxHTGliLmNwcAogCiAgICAgbGludXgvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMu
Y3BwCisgICAgbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcAogCiAgICAgcG9zaXgvQ1BVVGltZVBP
U0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApp
bmRleCBkNjY2NjhiMTc5NjkuLmJmYmNiYTk4YWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00
MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgogI2VuZGlmCiAKKyNp
ZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIExvY2sgVGhyZWFkOjpzX2FsbFRocmVhZHNMb2NrOwpA
QCAtMzMwLDYgKzMzNCwxMiBAQCB2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9y
aXR5IDw9IDApOwogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5ID49IFFPU19NSU5fUkVMQVRJ
VkVfUFJJT1JJVFkpOwogICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCByZWxhdGl2ZVByaW9yaXR5KTsK
KyNlbGlmIE9TKExJTlVYKQorICAgIC8vIFdlIGRvbid0IGFsbG93IHRvIG1ha2UgdGhlIG1haW4g
dGhyZWFkIHJlYWwgdGltZS4gVGhpcyBpcyB1c2VkIGJ5IHNlY29uZGFyeSBwcm9jZXNzZXMgdG8g
bWF0Y2ggdGhlCisgICAgLy8gVUkgcHJvY2VzcywgYnV0IGluIGxpbnV4IHRoZSBVSSBwcm9jZXNz
IGlzIG5vdCByZWFsIHRpbWUuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgUmVh
bFRpbWVUaHJlYWRzOjpzaW5nbGV0b24oKS5yZWdpc3RlclRocmVhZChjdXJyZW50KCkpOworICAg
IFVOVVNFRF9QQVJBTShyZWxhdGl2ZVByaW9yaXR5KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHJlbGF0aXZlUHJpb3JpdHkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9n
ZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3Jr
UXVldWVHZW5lcmljLmNwcAppbmRleCBkOTk3ZmRlNzNhZDQuLmQyNTdkM2E3MjA0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zOSwxNCArMzks
MTQgQEAgV29ya1F1ZXVlQmFzZTo6V29ya1F1ZXVlQmFzZShSdW5Mb29wJiBydW5Mb29wKQogewog
fQogCi12b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lLCBUeXBlLCBRT1MpCit2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MgcW9zKQogewogICAgIEJpbmFyeVNlbWFwaG9yZSBz
ZW1hcGhvcmU7CiAgICAgVGhyZWFkOjpjcmVhdGUobmFtZSwgWyZdIHsKICAgICAgICAgbV9ydW5M
b29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwog
ICAgICAgICBtX3J1bkxvb3AtPnJ1bigpOwotICAgIH0pLT5kZXRhY2goKTsKKyAgICB9LCBUaHJl
YWRUeXBlOjpVbmtub3duLCBxb3MpLT5kZXRhY2goKTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuY3Bw
IGIvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRjZGVjNjc2ZTkzNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSwy
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9saW51eC9SZWFsVGltZVRocmVhZHMuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNp
bmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L1NhbmRib3guaD4KKyNlbmRpZgorCisjaWZuZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKKyNkZWZp
bmUgU0NIRURfUkVTRVRfT05fRk9SSyAweDQwMDAwMDAwCisjZW5kaWYKKworbmFtZXNwYWNlIFdU
RiB7CisKK3N0YXRpYyBjb25zdCBpbnQgc19yZWFsVGltZVRocmVhZFByaW9yaXR5ID0gNTsKKwor
UmVhbFRpbWVUaHJlYWRzJiBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpCit7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWFsVGltZVRocmVhZHM+IHJlYWxUaW1lVGhyZWFkczsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uo
b25jZUZsYWcsIFsmXSB7CisgICAgICAgIHJlYWxUaW1lVGhyZWFkcy5jb25zdHJ1Y3QoKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVhbFRpbWVUaHJlYWRzOworfQorCitSZWFsVGltZVRocmVhZHM6
OlJlYWxUaW1lVGhyZWFkcygpCisgICAgOiBtX3RocmVhZEdyb3VwKFRocmVhZEdyb3VwOjpjcmVh
dGUoKSkKKyNpZiBVU0UoR0xJQikKKyAgICAsIG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZSZWFsVGltZVRocmVhZHM6OmRpc2NhcmRSZWFsVGlt
ZUtpdFByb3h5VGltZXJGaXJlZCkKKyNlbmRpZgoreworI2lmIFVTRShHTElCKQorICAgIG1fZGlz
Y2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lci5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3Jp
dHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisjZW5kaWYKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW10geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAg
c2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9ICtbXShpbnQsIHNpZ2luZm9fdCosIHZvaWQqKSB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCBrbm93IHdoaWNoIHRocmVhZCBjYXVzZWQgdGhlIGxpbWl0IHRvIGJlIHJlYWNoZWQsCisgICAg
ICAgICAgICAvLyBzbyB3ZSBkZW1vdGUgYWxsIHJlYWwgdGltZSB0aHJlYWRzIHRvIGF2b2lkIFNJ
R0tJTEwuCisgICAgICAgICAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLmRlbW90ZUFs
bFRocmVhZHNGcm9tUmVhbFRpbWUoKTsKKyAgICAgICAgfTsKKyAgICAgICAgYWN0aW9uLnNhX2Zs
YWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgc2lnYWN0aW9uKFNJR1hDUFUsICZhY3Rpb24sIG51
bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIFJlYWxUaW1lVGhyZWFkczo6cmVnaXN0ZXJUaHJl
YWQoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgVGhyZWFkR3JvdXBBZGRSZXN1bHQgYWRkUmVzdWx0
OworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fdGhyZWFkR3JvdXAtPmdldExvY2so
KSB9OworICAgICAgICBhZGRSZXN1bHQgPSBtX3RocmVhZEdyb3VwLT5hZGQobG9ja2VyLCB0aHJl
YWQpOworICAgIH0KKworICAgIGlmIChhZGRSZXN1bHQgIT0gVGhyZWFkR3JvdXBBZGRSZXN1bHQ6
Ok5ld2x5QWRkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHRocmVhZCA9IFJlZiB7IHRocmVhZCB9XSB7CisgICAgICAgIGlmIChtX2VuYWJsZWQpCisg
ICAgICAgICAgICBwcm9tb3RlVGhyZWFkVG9SZWFsVGltZSh0aHJlYWQpOworICAgIH0pOworfQor
Cit2b2lkIFJlYWxUaW1lVGhyZWFkczo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9lbmFibGVkID09IGVuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICBMb2NrZXIg
bG9ja2VyIHsgbV90aHJlYWRHcm91cC0+Z2V0TG9jaygpIH07CisgICAgZm9yIChjb25zdCBhdXRv
JiB0aHJlYWQgOiBtX3RocmVhZEdyb3VwLT50aHJlYWRzKGxvY2tlcikpIHsKKyAgICAgICAgaWYg
KG1fZW5hYmxlZCkKKyAgICAgICAgICAgIHByb21vdGVUaHJlYWRUb1JlYWxUaW1lKHRocmVhZCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbW90ZVRocmVhZEZyb21SZWFsVGltZSh0aHJl
YWQpOworICAgIH0KK30KKwordm9pZCBSZWFsVGltZVRocmVhZHM6OnByb21vdGVUaHJlYWRUb1Jl
YWxUaW1lKGNvbnN0IFRocmVhZCYgdGhyZWFkKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisgICAgcGFyYW0uc2NoZWRfcHJp
b3JpdHkgPSBzdGQ6OmNsYW1wKHNfcmVhbFRpbWVUaHJlYWRQcmlvcml0eSwgc2NoZWRfZ2V0X3By
aW9yaXR5X21pbihTQ0hFRF9SUiksIHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfUlIpKTsK
KyAgICBhdXRvIGVycm9yID0gc2NoZWRfc2V0c2NoZWR1bGVyKHRocmVhZC5pZCgpLCBTQ0hFRF9S
UiB8IFNDSEVEX1JFU0VUX09OX0ZPUkssICZwYXJhbSk7CisgICAgaWYgKGVycm9yKSB7CisjaWYg
VVNFKEdMSUIpCisgICAgICAgIHJlYWxUaW1lS2l0TWFrZVRocmVhZFJlYWxUaW1lKGdldHBpZCgp
LCB0aHJlYWQuaWQoKSwgcGFyYW0uc2NoZWRfcHJpb3JpdHkpOworI2Vsc2UKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gc2V0IHRocmVhZCAlZCBhcyByZWFsIHRpbWU6ICVzIiwgdGhyZWFk
LmlkKCksIHN0cmVycm9yKGVycm9yKSk7CisjZW5kaWYKKyAgICB9Cit9CisKK3ZvaWQgUmVhbFRp
bWVUaHJlYWRzOjpkZW1vdGVUaHJlYWRGcm9tUmVhbFRpbWUoY29uc3QgVGhyZWFkJiB0aHJlYWQp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0cnVjdCBzY2hlZF9wYXJh
bSBwYXJhbSA9IHsgMCB9OworICAgIHNjaGVkX3NldHNjaGVkdWxlcih0aHJlYWQuaWQoKSwgU0NI
RURfT1RIRVIgfCBTQ0hFRF9SRVNFVF9PTl9GT1JLLCAmcGFyYW0pOworfQorCit2b2lkIFJlYWxU
aW1lVGhyZWFkczo6ZGVtb3RlQWxsVGhyZWFkc0Zyb21SZWFsVGltZSgpCit7CisgICAgTG9ja2Vy
IGxvY2tlciB7IG1fdGhyZWFkR3JvdXAtPmdldExvY2soKSB9OworICAgIGZvciAoY29uc3QgYXV0
byYgdGhyZWFkIDogbV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpKQorICAgICAgICBkZW1v
dGVUaHJlYWRGcm9tUmVhbFRpbWUodGhyZWFkKTsKK30KKworI2lmIFVTRShHTElCKQorc3RhdGlj
IGNvbnN0IFNlY29uZHMgc19kYnVzQ2FsbFRpbWVvdXQgPSAyMF9tczsKKworc3RhdGljIGludDY0
X3QgcmVhbFRpbWVLaXRHZXRQcm9wZXJ0eShHREJ1c1Byb3h5KiBwcm94eSwgY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lID0gc2hvdWxkVXNlUG9ydGFsKCkgPyAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZWFs
dGltZSIgOiAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSI7CisgICAgR1JlZlB0cjxHVmFy
aWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMocHJveHksICJv
cmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLkdldCIsCisgICAgICAgIGdfdmFyaWFudF9u
ZXcoIihzcykiLCBpbnRlcmZhY2VOYW1lLCBwcm9wZXJ0eU5hbWUpLCBHX0RCVVNfQ0FMTF9GTEFH
U19OT05FLCBzX2RidXNDYWxsVGltZW91dC5taWxsaXNlY29uZHNBczxpbnQ+KCksIG51bGxwdHIs
IGVycm9yKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHByb3BlcnR5OworICAgIGdfdmFyaWFudF9nZXQocmVzdWx0LmdldCgp
LCAiKHYpIiwgJnByb3BlcnR5Lm91dFB0cigpKTsKKyAgICBpZiAoZ192YXJpYW50X2lzX29mX3R5
cGUocHJvcGVydHkuZ2V0KCksIEdfVkFSSUFOVF9UWVBFX0lOVDY0KSkKKyAgICAgICAgcmV0dXJu
IGdfdmFyaWFudF9nZXRfaW50NjQocHJvcGVydHkuZ2V0KCkpOworICAgIGlmIChnX3ZhcmlhbnRf
aXNfb2ZfdHlwZShwcm9wZXJ0eS5nZXQoKSwgR19WQVJJQU5UX1RZUEVfSU5UMzIpKQorICAgICAg
ICByZXR1cm4gZ192YXJpYW50X2dldF9pbnQzMihwcm9wZXJ0eS5nZXQoKSk7CisgICAgZ19zZXRf
ZXJyb3IoZXJyb3IsIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywgIklu
dmFsaWQgcHJvcGVydHkgdHlwZSByZWNlaXZlZCBmb3IgcHJvcGVydHkgJXMgYXQgaW50ZXJmYWNl
ICVzIiwgcHJvcGVydHlOYW1lLCBpbnRlcmZhY2VOYW1lKTsKKyAgICByZXR1cm4gLTE7Cit9CisK
K3ZvaWQgUmVhbFRpbWVUaHJlYWRzOjpyZWFsVGltZUtpdE1ha2VUaHJlYWRSZWFsVGltZSh1aW50
NjRfdCBwcm9jZXNzSUQsIHVpbnQ2NF90IHRocmVhZElELCB1aW50MzJfdCBwcmlvcml0eSkKK3sK
KyAgICBtX2Rpc2NhcmRSZWFsVGltZUtpdFByb3h5VGltZXIuc3RvcCgpOworCisgICAgR1VuaXF1
ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICghbV9yZWFsVGltZUtpdFByb3h5KSB7Cisg
ICAgICAgIGlmIChzaG91bGRVc2VQb3J0YWwoKSkgeworICAgICAgICAgICAgbV9yZWFsVGltZUtp
dFByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19zeW5jKEdfQlVTX1RZ
UEVfU0VTU0lPTiwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHREJ1c1Byb3h5RmxhZ3M+
KEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfQ09OTkVDVF9TSUdOQUxTIHwgR19EQlVTX1BST1hZ
X0ZMQUdTX0RPX05PVF9MT0FEX1BST1BFUlRJRVMpLCBudWxscHRyLAorICAgICAgICAgICAgICAg
ICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLkRlc2t0b3AiLCAiL29yZy9mcmVlZGVza3RvcC9wb3J0
YWwvZGVza3RvcCIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlYWx0aW1lIiwgbnVsbHB0ciwg
JmVycm9yLm91dFB0cigpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3JlYWxU
aW1lS2l0UHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzX3N5bmMoR19C
VVNfVFlQRV9TWVNURU0sCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNQcm94eUZs
YWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyB8IEdfREJVU19Q
Uk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTKSwgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICAib3JnLmZyZWVkZXNrdG9wLlJlYWx0aW1lS2l0MSIsICIvb3JnL2ZyZWVkZXNrdG9wL1Jl
YWx0aW1lS2l0MSIsICJvcmcuZnJlZWRlc2t0b3AuUmVhbHRpbWVLaXQxIiwgbnVsbHB0ciwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcmVhbFRpbWVLaXRQ
cm94eS52YWx1ZSgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjb25uZWN0
IHRvIFJlYWx0aW1lS2l0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9yZWFsVGltZUtpdFByb3h5LnZhbHVl
KCkpCisgICAgICAgIHJldHVybjsKKworI2lmZGVmIFJMSU1JVF9SVFRJTUUKKyAgICAvLyBSZWFs
VGltZUtpdCByZXF1aXJlcyB0aGUgY2xpZW50IHRvIGhhdmUgUkxJTUlUX1JUVElNRSBzZXQuCisg
ICAgc3RydWN0IHJsaW1pdCBybDsKKyAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9SVFRJTUUsICZy
bCkgPj0gMCkgeworICAgICAgICBhdXRvIHJ0dGltZU1heCA9IHJlYWxUaW1lS2l0R2V0UHJvcGVy
dHkobV9yZWFsVGltZUtpdFByb3h5LT5nZXQoKSwgIlJUVGltZVVTZWNNYXgiLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGdldCBSVFRpbWVVU2VjTWF4IGZyb20gUmVhbHRpbWVLaXQ6ICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOworICAgICAgICAgICAgaWYgKCFnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdf
REJVU19FUlJPUiwgR19EQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNFKSkKKyAgICAgICAgICAg
ICAgICBtX3JlYWxUaW1lS2l0UHJveHkgPSBudWxscHRyOworCisgICAgICAgICAgICBzY2hlZHVs
ZURpc2NhcmRSZWFsVGltZUtpdFByb3h5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAocmwucmxpbV9tYXggPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocnR0
aW1lTWF4KSkgeworICAgICAgICAgICAgcmwucmxpbV9jdXIgPSBybC5ybGltX21heCA9IHJ0dGlt
ZU1heDsKKyAgICAgICAgICAgIHNldHJsaW1pdChSTElNSVRfUlRUSU1FLCAmcmwpOworICAgICAg
ICB9CisgICAgfQorI2VuZGlmCisKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHQgPSBhZG9w
dEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhtX3JlYWxUaW1lS2l0UHJveHktPmdldCgpLCAi
TWFrZVRocmVhZFJlYWx0aW1lV2l0aFBJRCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIih0dHUp
IiwgcHJvY2Vzc0lELCB0aHJlYWRJRCwgcHJpb3JpdHkpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05F
LCBzX2RidXNDYWxsVGltZW91dC5taWxsaXNlY29uZHNBczxpbnQ+KCksIG51bGxwdHIsICZlcnJv
ci5vdXRQdHIoKSkpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIG1ha2UgdGhyZWFkIHJlYWwgdGltZTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAg
ICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0RCVVNfRVJST1IsIEdfREJV
U19FUlJPUl9VTktOT1dOX0lOVEVSRkFDRSkpCisgICAgICAgICAgICBtX3JlYWxUaW1lS2l0UHJv
eHkgPSBudWxscHRyOworICAgIH0KKworICAgIHNjaGVkdWxlRGlzY2FyZFJlYWxUaW1lS2l0UHJv
eHkoKTsKK30KKwordm9pZCBSZWFsVGltZVRocmVhZHM6OnNjaGVkdWxlRGlzY2FyZFJlYWxUaW1l
S2l0UHJveHkoKQoreworICAgIGlmICghbV9yZWFsVGltZUtpdFByb3h5IHx8ICFtX3JlYWxUaW1l
S2l0UHJveHkudmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlzY2FyZFJlYWxUaW1l
S2l0UHJveHlUaW1lci5zdGFydE9uZVNob3QoMzBfcyk7Cit9CisKK3ZvaWQgUmVhbFRpbWVUaHJl
YWRzOjpkaXNjYXJkUmVhbFRpbWVLaXRQcm94eVRpbWVyRmlyZWQoKQoreworICAgIG1fcmVhbFRp
bWVLaXRQcm94eSA9IHN0ZDo6bnVsbG9wdDsKK30KKyNlbmRpZiAvLyBVU0UoR0xJQikKKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9SZWFsVGlt
ZVRocmVhZHMuaCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L1JlYWxUaW1lVGhyZWFkcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWZhODA1YzQ0NDQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmgKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZEdyb3VwLmg+CisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDxvcHRpb25h
bD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dEQnVzUHJveHkgR0RCdXNQcm94eTsKKyNlbmRpZgorCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUmVhbFRpbWVUaHJlYWRzIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBmcmllbmQgY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVkPFJlYWxU
aW1lVGhyZWFkcz47CitwdWJsaWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWFs
VGltZVRocmVhZHMmIHNpbmdsZXRvbigpOworCisgICAgdm9pZCByZWdpc3RlclRocmVhZChUaHJl
YWQmKTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisK
K3ByaXZhdGU6CisgICAgUmVhbFRpbWVUaHJlYWRzKCk7CisKKyAgICB2b2lkIHByb21vdGVUaHJl
YWRUb1JlYWxUaW1lKGNvbnN0IFdURjo6VGhyZWFkJik7CisgICAgdm9pZCBkZW1vdGVUaHJlYWRG
cm9tUmVhbFRpbWUoY29uc3QgV1RGOjpUaHJlYWQmKTsKKyAgICB2b2lkIGRlbW90ZUFsbFRocmVh
ZHNGcm9tUmVhbFRpbWUoKTsKKworI2lmIFVTRShHTElCKQorICAgIHZvaWQgcmVhbFRpbWVLaXRN
YWtlVGhyZWFkUmVhbFRpbWUodWludDY0X3QgcHJvY2Vzc0lELCB1aW50NjRfdCB0aHJlYWRJRCwg
dWludDMyX3QgcHJpb3JpdHkpOworICAgIHZvaWQgc2NoZWR1bGVEaXNjYXJkUmVhbFRpbWVLaXRQ
cm94eSgpOworICAgIHZvaWQgZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1lckZpcmVkKCk7Cisj
ZW5kaWYKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxUaHJlYWRHcm91cD4gbV90aHJlYWRHcm91cDsK
KyAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKKyNpZiBVU0UoR0xJQikKKyAgICBzdGQ6Om9w
dGlvbmFsPEdSZWZQdHI8R0RCdXNQcm94eT4+IG1fcmVhbFRpbWVLaXRQcm94eTsKKyAgICBSdW5M
b29wOjpUaW1lcjxSZWFsVGltZVRocmVhZHM+IG1fZGlzY2FyZFJlYWxUaW1lS2l0UHJveHlUaW1l
cjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmVhbFRp
bWVUaHJlYWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9T
SVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCmluZGV4IGVk
YjliNTE4NDhmOC4uOTQ3NDM5YWI3N2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3Np
eC9UaHJlYWRpbmdQT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvVGhyZWFkaW5n
UE9TSVguY3BwCkBAIC00Miw3ICs0MiwxMyBAQAogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgog
CiAjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxzeXMvcHJjdGwu
aD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHd0Zi9saW51eC9SZWFsVGlt
ZVRocmVhZHMuaD4KKyNpZm5kZWYgU0NIRURfUkVTRVRfT05fRk9SSworI2RlZmluZSBTQ0hFRF9S
RVNFVF9PTl9GT1JLIDB4NDAwMDAwMDAKKyNlbmRpZgogI2VuZGlmCiAKICNpZiAhQ09NUElMRVIo
TVNWQykKQEAgLTY5LDEwICs3NSw2IEBACiAjaW5jbHVkZSA8bWFjaC90aHJlYWRfc3dpdGNoLmg+
CiAjZW5kaWYKIAotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdURiB7CiAKIHN0YXRpYyBMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwpA
QCAtMjYwLDYgKzI2MiwyNCBAQCBkaXNwYXRjaF9xb3NfY2xhc3NfdCBUaHJlYWQ6OmRpc3BhdGNo
UU9TQ2xhc3MoUU9TIHFvcykKIH0KICNlbmRpZgogCisjaWYgT1MoTElOVVgpCitzdGF0aWMgaW50
IHNjaGVkUG9saWN5KFRocmVhZDo6UU9TIHFvcykKK3sKKyAgICBzd2l0Y2ggKHFvcykgeworICAg
IGNhc2UgVGhyZWFkOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIFNDSEVE
X1JSOworICAgIGNhc2UgVGhyZWFkOjpRT1M6OlVzZXJJbml0aWF0ZWQ6CisgICAgY2FzZSBUaHJl
YWQ6OlFPUzo6RGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFNDSEVEX09USEVSOworICAgIGNhc2Ug
VGhyZWFkOjpRT1M6OlV0aWxpdHk6CisgICAgICAgIHJldHVybiBTQ0hFRF9CQVRDSDsKKyAgICBj
YXNlIFRocmVhZDo6UU9TOjpCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gU0NIRURfSURMRTsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZgorCiBi
b29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQsIHN0
ZDo6b3B0aW9uYWw8c2l6ZV90PiBzdGFja1NpemUsIFFPUyBxb3MpCiB7CiAgICAgcHRocmVhZF90
IHRocmVhZEhhbmRsZTsKQEAgLTI2Nyw4ICsyODcsNiBAQCBib29sIFRocmVhZDo6ZXN0YWJsaXNo
SGFuZGxlKE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBz
dAogICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKICNpZiBIQVZFKFFPU19DTEFTU0VTKQog
ICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25wKCZhdHRyLCBkaXNwYXRjaFFPU0NsYXNz
KHFvcyksIDApOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocW9zKTsKICNlbmRpZgogICAgIGlm
IChzdGFja1NpemUpCiAgICAgICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsIHN0
YWNrU2l6ZS52YWx1ZSgpKTsKQEAgLTI3OCw2ICsyOTYsMjEgQEAgYm9vbCBUaHJlYWQ6OmVzdGFi
bGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0LCBzdGQ6Om9wdGlvbmFsPHNpemVf
dD4gc3QKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50
cnkgcG9pbnQgJXAgd2l0aCBjb250ZXh0ICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgY29udGV4
dCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyNpZiBPUyhMSU5VWCkKKyAgICBp
bnQgcG9saWN5ID0gc2NoZWRQb2xpY3kocW9zKTsKKyAgICBpZiAocG9saWN5ID09IFNDSEVEX1JS
KQorICAgICAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVGhyZWFkKCp0
aGlzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAw
IH07CisgICAgICAgIGVycm9yID0gcHRocmVhZF9zZXRzY2hlZHBhcmFtKHRocmVhZEhhbmRsZSwg
cG9saWN5IHwgU0NIRURfUkVTRVRfT05fRk9SSywgJnBhcmFtKTsKKyAgICAgICAgaWYgKGVycm9y
KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHNjaGVkIHBvbGljeSAlZCBm
b3IgdGhyZWFkICVkOiAlcyIsIHBvbGljeSwgdGhyZWFkSGFuZGxlLCBzdHJlcnJvcihlcnJvcikp
OworICAgIH0KKyNlbGlmICFIQVZFKFFPU19DTEFTU0VTKQorICAgIFVOVVNFRF9QQVJBTShxb3Mp
OworI2VuZGlmCisKICAgICBlc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHRocmVhZEhh
bmRsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRkYTUxZjkwMTg5Mi4uZjk1
YTJlOWU5YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTEwLTE4ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVd
IFVzZXJJbnRlcmFjdGl2ZSB0aHJlYWRzIGFyZSBub3QgUmVhbC10aW1lIGluIExpbnV4CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAxMTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgcmVhbCB0
aW1lIHRocmVhZHMgaW4gdGhlIHdlYiBwcm9jZXNzIG9ubHkgd2hlbiB0aGVyZSdzIGEgdmlzaWJs
ZSBwYWdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpw
YWdlQWN0aXZpdHlTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvcGxheXN0
YXRpb24vV2ViUHJvY2Vzc1BsYXlTdGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy93
aW4vV2ViUHJvY2Vzc1dpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRm
b3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgorCiAyMDIxLTEwLTE4ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBE
aXNhYmxlciBieSBjaGVja2luZyBpZiB3ZSBhcmUgdW5kZXIgc2FuZGJveApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGY4NWNhMzYzZjRlZi4uNDYyYzNjMjc4MTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yMjQsNiArMjI0
LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9WUDlVdGlsaXRpZXNDb2NvYS5oPgogI2VuZGlmCiAK
KyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDx3dGYvbGludXgvUmVhbFRpbWVUaHJlYWRzLmg+Cisj
ZW5kaWYKKwogI3VuZGVmIFdFQlBST0NFU1NfUkVMRUFTRV9MT0cKICNkZWZpbmUgUkVMRUFTRV9M
T0dfU0VTU0lPTl9JRCAobV9zZXNzaW9uSUQgPyBtX3Nlc3Npb25JRC0+dG9VSW50NjQoKSA6IDAp
CiAjaWYgUkVMRUFTRV9MT0dfRElTQUJMRUQKQEAgLTgwOSw2ICs4MTMsOSBAQCB2b2lkIFdlYlBy
b2Nlc3M6OmNyZWF0ZVdlYlBhZ2UoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzJgogICAgICAgICAvLyBCYWxhbmNlZCBieSBhbiBlbmFibGVUZXJtaW5hdGlv
biBpbiByZW1vdmVXZWJQYWdlLgogICAgICAgICBkaXNhYmxlVGVybWluYXRpb24oKTsKICAgICAg
ICAgdXBkYXRlQ1BVTGltaXQoKTsKKyNpZiBPUyhMSU5VWCkKKyAgICAgICAgUmVhbFRpbWVUaHJl
YWRzOjpzaW5nbGV0b24oKS5zZXRFbmFibGVkKGhhc1Zpc2libGVXZWJQYWdlKCkpOworI2VuZGlm
CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJlaW5pdGlhbGl6
ZVdlYlBhZ2UoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKQEAgLTgyNiw2ICs4MzMsOSBAQCB2b2lk
IFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UoUGFnZUlkZW50aWZpZXIgcGFnZUlEKQogCiAgICAg
ZW5hYmxlVGVybWluYXRpb24oKTsKICAgICB1cGRhdGVDUFVMaW1pdCgpOworI2lmIE9TKExJTlVY
KQorICAgIFJlYWxUaW1lVGhyZWFkczo6c2luZ2xldG9uKCkuc2V0RW5hYmxlZChoYXNWaXNpYmxl
V2ViUGFnZSgpKTsKKyNlbmRpZgogfQogCiBib29sIFdlYlByb2Nlc3M6OnNob3VsZFRlcm1pbmF0
ZSgpCkBAIC0xNDY2LDEwICsxNDc2LDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplU2Fu
ZGJveChjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXIKIHsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQotewotfQotCiB2b2lkIFdlYlBy
b2Nlc3M6OnVwZGF0ZUFjdGl2ZVBhZ2VzKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGVEaXNwbGF5TmFt
ZSkKIHsKIH0KQEAgLTE0OTEsOCArMTQ5NywxMiBAQCB2b2lkIFdlYlByb2Nlc3M6OnVwZGF0ZUNQ
VU1vbml0b3JTdGF0ZShDUFVNb25pdG9yVXBkYXRlUmVhc29uKQogCiB2b2lkIFdlYlByb2Nlc3M6
OnBhZ2VBY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKFBhZ2VJZGVudGlmaWVyLCBPcHRpb25TZXQ8V2Vi
Q29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gY2hhbmdlZCkKIHsKLSAgICBpZiAoY2hhbmdlZCAm
IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkKKyAgICBpZiAoY2hhbmdlZCAmIFdl
YkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkgewogICAgICAgICB1cGRhdGVDUFVNb25p
dG9yU3RhdGUoQ1BVTW9uaXRvclVwZGF0ZVJlYXNvbjo6VmlzaWJpbGl0eUhhc0NoYW5nZWQpOwor
I2lmIE9TKExJTlVYKQorICAgICAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLnNldEVu
YWJsZWQoaGFzVmlzaWJsZVdlYlBhZ2UoKSk7CisjZW5kaWYKKyAgICB9CiB9CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc0dMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2dsaWIvV2Vi
UHJvY2Vzc0dMaWIuY3BwCmluZGV4IDBiOTVlZWEzMGQ0OS4uNzcyOWZmNzllNjBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc0dMaWIuY3BwCkBAIC01
NSw2ICs1NSwxMCBAQAogI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgiCiAjZW5k
aWYKIAorI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHd0Zi9saW51eC9SZWFsVGltZVRocmVhZHMu
aD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CkBAIC02NCw2ICs2OCwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVN
b2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNp
bmdsZXRvbigpLnNldERpc2FibGVkKGNhY2hlTW9kZWwgPT0gQ2FjaGVNb2RlbDo6RG9jdW1lbnRW
aWV3ZXIpOwogfQogCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3Mo
Y29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7CisjaWYg
T1MoTElOVVgpCisgICAgLy8gRGlzYWJsZSBSZWFsVGltZVRocmVhZHMgaW4gV2ViUHJvY2VzcyBp
bml0aWFsbHksIHNpbmNlIGl0IGRlcGVuZHMgb24gaGF2aW5nIGEgdmlzaWJsZSB3ZWIgcGFnZS4K
KyAgICBSZWFsVGltZVRocmVhZHM6OnNpbmdsZXRvbigpLnNldEVuYWJsZWQoZmFsc2UpOworI2Vu
ZGlmCit9CisKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvcGxheXN0
YXRpb24vV2ViUHJvY2Vzc1BsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9wbGF5c3RhdGlvbi9XZWJQcm9jZXNzUGxheVN0YXRpb24uY3BwCmluZGV4IGVmNjAxMjIwZTU1
Ni4uYzQ0ZjBkZDRjZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvcGxh
eXN0YXRpb24vV2ViUHJvY2Vzc1BsYXlTdGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvcGxheXN0YXRpb24vV2ViUHJvY2Vzc1BsYXlTdGF0aW9uLmNwcApAQCAtNDMsNiAr
NDMsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmEKICNlbmRpZgogfQogCit2b2lkIFdlYlBy
b2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0lu
aXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1TZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyhXZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1l
dGVycyYmKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9X
ZWJQcm9jZXNzV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vz
c1dpbi5jcHAKaW5kZXggMDViMzVjYWQ1MGE4Li5kM2QzOGNhYzQxMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcApAQCAtMzksNiArMzksMTAg
QEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKQogewogfQogCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFy
YW1ldGVycyYpCit7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyhXZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycyYmKQogewogfQo=
</data>
<flag name="review"
          id="466036"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>