<?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>138691</bug_id>
          
          <creation_ts>2014-11-13 01:30:48 -0800</creation_ts>
          <short_desc>[GTK] Add persistent GSource wrapper</short_desc>
          <delta_ts>2016-08-29 11:26:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142748</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048376</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-13 01:30:48 -0800</bug_when>
    <thetext>Unlike GMainLoopSource or GThreadSafeLoopSource, the new class will only manage one GSource object during its lifetime. This avoids attaching and scheduling new GSource objects every time a new scheduling is performed, which can hinder performance in case of highly frequent task scheduling.

The first iteration of this work won&apos;t yet provide thread-safe implementation.

A couple of GMainLoopSource objects I&apos;d like to convert for a start, listed by their name:
[WebKit] layerFlushTimer - schedules layer flushing, is scheduled up to 60 times per second
[WebKit] sharedTimerTimeoutCallback - schedules shared timer, is scheduled up to 250 times per second
[WebKit] RunLoop work - scheduled during IPC processing in WK2
[WebKit] RunLoop::Timer - scheduled via the ResponsivenessTimer in WK2
[WebKit] WorkQueue::dispatch - scheduled during IPC processing in WK2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049770</commentid>
    <comment_count>1</comment_count>
      <attachid>241857</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-19 07:07:10 -0800</bug_when>
    <thetext>Created attachment 241857
WIP

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049781</commentid>
    <comment_count>2</comment_count>
      <attachid>241857</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-19 08:17:47 -0800</bug_when>
    <thetext>Comment on attachment 241857
WIP

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

I got lost with all the templates mess :-P Could you explain what the templates are for and what&apos;s the difference between the static and dynamic thing?

&gt; Source/WTF/wtf/gobject/GPersistentMainLoopSource.cpp:42
&gt; +        return callback(data);

The callback return value is ignored, because always want to continue here. I would move the g_source_set_ready_time() here and the return continue.

g_source_set_ready_time(source, -1);
callback(data);
return G_SOURCE_CONTINUE;

&gt; Source/WTF/wtf/gobject/GPersistentMainLoopSource.cpp:50
&gt; +gboolean GPersistentMainLoopSource::Base&lt;GPersistentMainLoopSource::StaticType&gt;::sourceCallback(Base* source)

And this would be a void function that simply calls source-&gt;m_function(); setting the status accordingly.

&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:111
&gt;  void WorkQueue::dispatch(std::function&lt;void ()&gt; function)

Is this called that often? have you taken any measurements? In this particular case the code is more complex, adding a queue and a mutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051160</commentid>
    <comment_count>3</comment_count>
      <attachid>241857</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-27 04:17:48 -0800</bug_when>
    <thetext>Comment on attachment 241857
WIP

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

&gt;&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:111
&gt;&gt;  void WorkQueue::dispatch(std::function&lt;void ()&gt; function)
&gt; 
&gt; Is this called that often? have you taken any measurements? In this particular case the code is more complex, adding a queue and a mutex.

This is used extensively in IPC handling. including handling all the input events, which there can be a lot of.

The mutex is required, but overall using a persistent GSource avoids locking the GMainContext&apos;s mutex every time the source is detached and destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051161</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-27 04:20:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 241857 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241857&amp;action=review
&gt; 
&gt; I got lost with all the templates mess :-P Could you explain what the
&gt; templates are for and what&apos;s the difference between the static and dynamic
&gt; thing?
&gt; 

This exercise in templates was interesting, but not necessary. The next iteration of the patch doesn&apos;t use them at all.

The difference between the static and dynamic type of the GSource wrapper is that the static one has its callback defined when it is initialized, while the dynamic one has the callback defined every time it&apos;s scheduled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051162</commentid>
    <comment_count>5</comment_count>
      <attachid>242249</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-27 04:23:39 -0800</bug_when>
    <thetext>Created attachment 242249
WIP #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051163</commentid>
    <comment_count>6</comment_count>
      <attachid>242250</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-27 04:25:38 -0800</bug_when>
    <thetext>Created attachment 242250
Proper WIP #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051164</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-27 04:33:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 242250 [details]
&gt; Proper WIP #2

This approach avoids storing the callback function in the GSource wrapper and instead pushes the callback onto the heap and uses it as the direct callback that&apos;s to be called from the GSource dispach function.

The static and dynamic types are preserved. Given that scheduling and cancelling is now done directly on the GSource object, we can now rely on thread safety as provided by the GMainContext to which the certain GSource object is attached.

The repeating callback (i.e. the bool() callback) is supported in the dynamic wrapper, but I think it should be implemented in a separate type of the wrapper. GSocket callback should also be handled via that type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053364</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-08 06:42:06 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Created attachment 242250 [details]
&gt; &gt; Proper WIP #2
&gt; 
&gt; This approach avoids storing the callback function in the GSource wrapper
&gt; and instead pushes the callback onto the heap and uses it as the direct
&gt; callback that&apos;s to be called from the GSource dispach function.
&gt; 
&gt; The static and dynamic types are preserved. Given that scheduling and
&gt; cancelling is now done directly on the GSource object, we can now rely on
&gt; thread safety as provided by the GMainContext to which the certain GSource
&gt; object is attached.
&gt; 
&gt; The repeating callback (i.e. the bool() callback) is supported in the
&gt; dynamic wrapper, but I think it should be implemented in a separate type of
&gt; the wrapper. GSocket callback should also be handled via that type.

Do we really need the repeating callback? GSocket sources are usually persistent by themselves, because the same source is used all the time, instad of being re-scheduled using a new source. I think this persisten wrapper should be as simple as possible and to handle only the caes where we need it, instead of the GMainLoopSource that is mor a general purpose wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053367</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-08 06:49:34 -0800</bug_when>
    <thetext>Why the change name btw? GSourceWrap sounds too generic to me for something so specific. I liked the GPersisentMainLoopSource, but I agree it&apos;s too long even for a WebKit class :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056303</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-12-17 02:50:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Why the change name btw? GSourceWrap sounds too generic to me for something
&gt; so specific. I liked the GPersisentMainLoopSource, but I agree it&apos;s too long
&gt; even for a WebKit class :-)

At the point of writing GSourceWrap I think I already had three different classes in WTF that were handling GSource. I started from scratch, so I used a new name as well.

But it should definitely change, maybe back to GMainLoopSource once we can streamline all the use-cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100957</commentid>
    <comment_count>11</comment_count>
      <attachid>254639</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-10 02:19:13 -0700</bug_when>
    <thetext>Created attachment 254639
WIP

Updated GSourceWrap implementation, with converted uses of GMainLoopSource in WTF and WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100959</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-10 02:23:04 -0700</bug_when>
    <thetext>Attachment 254639 did not pass style-queue:


ERROR: Source/WebCore/platform/gtk/SharedTimerGtk.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  The parameter name &quot;function&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:108:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:113:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:129:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:136:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:5:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:14:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:23:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:34:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:67:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:172:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:177:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:198:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:201:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:206:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:209:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:223:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:231:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:239:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:250:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:277:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1052:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/MainThreadGLib.cpp:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 36 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100997</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-06-10 05:43:27 -0700</bug_when>
    <thetext>It needs to be added to PlatformEFL.cmake:

[3179/3277] Linking CXX shared library lib/libewebkit2.so.1.11.0
FAILED: : &amp;&amp; /usr/lib/ccache/c++  -fPIC  -std=c++11 -O3 -DNDEBUG -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-rtti  -Wl,--no-undefined  -L/home/gyuyoung/eflews/WebKit/WebKitBuild/DependenciesEFL/Root/lib  -fuse-ld=gold -Wl,--disable-new-dtags -fuse-ld=gold -Wl,--disable-new-dtags  -Wl,--gc-sections -shared -Wl,-soname,libewebkit2.so.1 -o lib/libewebkit2.so.1.11.0 @CMakeFiles/WebKit2.rsp  &amp;&amp; :
lib/libwebcore_efl.a(lib/../Source/WebCore/CMakeFiles/WebCore.dir/platform/network/soup/ResourceHandleSoup.cpp.o):ResourceHandleSoup.cpp:function WebCore::cleanupSoupRequestOperation(WebCore::ResourceHandle*, bool): error: undefined reference to &apos;WTF::GSourceWrap::Static::cancel()&apos;
lib/libwebcore_efl.a(lib/../Source/WebCore/CMakeFiles/WeFailed to run &quot;[&apos;Tools/Scripts/build-webkit&apos;, &apos;--release&apos;, &apos;--efl&apos;, &apos;--update-efl&apos;, &apos;--makeargs=&quot;-j8&quot;&apos;]&quot; exit_code: 1

Why do you prefer reinterpret_cast to static_cast when casting from a void*? I thought standard convention was to use static_cast.

Most importantly, the header file is fairly intimidating, so it would be good to have some documentation for the public classes Static, Dynamic, OneShot, Socket, and Queue. E.g. &quot;The difference between the static and dynamic type of the GSource wrapper is that the static one has its callback defined when it is initialized, while the dynamic one has the callback defined every time it&apos;s scheduled&quot; is obvious to me now that I&apos;ve read the comment where you point it out, and I can see the std::function parameters are in different places, but I didn&apos;t notice that at first and was left thinking &quot;what&apos;s the difference?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100998</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-10 05:49:53 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Most importantly, the header file is fairly intimidating, so it would be
&gt; good to have some documentation for the public classes Static, Dynamic,
&gt; OneShot, Socket, and Queue.

Yes, or try to re-think the API to make it simpler. I&apos;ll try to find some time to review this and think about the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101007</commentid>
    <comment_count>15</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-10 06:32:07 -0700</bug_when>
    <thetext>Will update PlatformEFL.cmake later today.

I as the author of course don&apos;t see a better possible API, not until I get some review critique. I should be able to add comments.

I&apos;ll go and convert the rest of G(ThreadSafe)MainLoopSource uses to GSourceWrap as well, to showcase the new API better (and to test it out). Also, unit tests are required, but I haven&apos;t gotten around to writing those yet. Same for ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101012</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-10 06:53:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Will update PlatformEFL.cmake later today.
&gt; 
&gt; I as the author of course don&apos;t see a better possible API, not until I get
&gt; some review critique. I should be able to add comments.

Sure, maybe there&apos;s no better API :-)

&gt; I&apos;ll go and convert the rest of G(ThreadSafe)MainLoopSource uses to
&gt; GSourceWrap as well, to showcase the new API better (and to test it out).
&gt; Also, unit tests are required, but I haven&apos;t gotten around to writing those
&gt; yet. Same for ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101052</commentid>
    <comment_count>17</comment_count>
      <attachid>254662</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-10 10:17:49 -0700</bug_when>
    <thetext>Created attachment 254662
Patch

Updated patch, adds the new file to the EFL build and converts most G(ThreadSafe)MainLoopSource cases to GSourceWrap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101053</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-10 10:19:26 -0700</bug_when>
    <thetext>Attachment 254662 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:39:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  The parameter name &quot;function&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:108:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:113:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:129:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.h:136:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:39:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:5:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:14:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:23:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:34:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:67:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:172:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:177:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:198:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:201:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:206:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:209:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:223:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:231:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:239:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:250:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/gobject/GSourceWrap.cpp:277:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/Downloads/soup/DownloadSoup.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/SharedTimerGtk.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1052:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/MainThreadGLib.cpp:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/gtk/GestureController.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 40 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101253</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-11 02:39:15 -0700</bug_when>
    <thetext>I&apos;m not sure this is equivalent to GMainLoopSource, or at least the idea that I had when I wrote it. I decided to write GMainLoopSource after fixing several common mistakes over and over again for the same usage patterns of GSource. The common use was something like this:

static gboolean sourceCallback(gpointer userData)
{
    Foo* foo = static_cast&lt;Foo*&gt;(userData);
    foo-&gt;bar();
    return FALSE;
}

Foo::bar()
{
    m_sourceID = 0;
    ....
}

Foo::~Foo()
{
    if (m_sourceID)
        g_source_remove(m_sourceID);
}

if (m_sourceID)
    g_source_remove(m_sourceID);
m_sourceID = g_idle_add_full(G_PRIORITY_DEFAULT, sourceCallback, g_ojbect_ref(something), g_object_unref);

And some variant of this, like not cancelling the previous one, or not tracking the id and use g_idle directly, only schedule if there isn&apos;t one already, etc.

The most common mistakes of this pattern were:

 - Not cancelling the previous source (&quot;leaking&quot; the previous id), before scheduling a new one. That&apos;s why GMainLoopSource does a cancel() before scheduoling a new source, and has a isScheduled() for the cases when you don&apos;t want to cancel the previous one.
 - Not cancelling the source in the destructor. GMainLoopSource does automatic cleanup on its destructor.
 - Not setting the id to 0 in the callback. GMainLoopSource updates its internal state in the callbacks.

But also took advantage of C++ to make its use more convenient:

 - Use lambda functions, instead of having to define static cabllbacks.
 - Automatic detection of repeating/non-repeating functions. It&apos;s also common to forget the return FALSE, but in this case at least the compiler warns you.
 - Default values for the common parameters like priority, context, etc.
 - Destroy function to do cleanups.

Looking at your patch I&apos;m not sure all these cases are covered, like for example the automatic cancellation before scheduling a new source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101270</commentid>
    <comment_count>20</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-11 07:08:48 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; The most common mistakes of this pattern were:
&gt; 
&gt;  - Not cancelling the previous source (&quot;leaking&quot; the previous id), before
&gt; scheduling a new one. That&apos;s why GMainLoopSource does a cancel() before
&gt; scheduoling a new source, and has a isScheduled() for the cases when you
&gt; don&apos;t want to cancel the previous one.

GSourceWrap only ever operates on one GSource object, instead of creating, attaching and scheduling a new GSource object every time a new invocation of callback is required.
&apos;Cancelling&apos; a GSource object controlled by GSourceWrap is as simple as setting the ready time to -1, ensuring it&apos;s not to be fired.

&gt;  - Not cancelling the source in the destructor. GMainLoopSource does
&gt; automatic cleanup on its destructor.

Same for GSourceWrap.

&gt;  - Not setting the id to 0 in the callback. GMainLoopSource updates its
&gt; internal state in the callbacks.

GSourceWrap doesn&apos;t use source IDs at all.

&gt; 
&gt; But also took advantage of C++ to make its use more convenient:
&gt; 
&gt;  - Use lambda functions, instead of having to define static cabllbacks.

Same for GSourceWrap.

&gt;  - Automatic detection of repeating/non-repeating functions. It&apos;s also
&gt; common to forget the return FALSE, but in this case at least the compiler
&gt; warns you.

GSourceWrap::Dynamic enables that, though it&apos;s not used anywhere (at the moment). I&apos;m not a fan of supporting repeatable functions in GSourceWrap (or of any use case that would require GSourceWrap::Dynamic, for that matter), mostly because I&apos;m not satisfied with how it&apos;s implemented and because I&apos;m not sure there&apos;s a better way to do it.

For instance, RunLoop::TimerBase uses a repeatable GMainLoopSource in upstream, with a std::function&lt;bool()&gt; callback. The patch switches to using GSourceWrap::Static, with the GSource wrapper being rescheduled manually if required.

&gt;  - Default values for the common parameters like priority, context, etc.

Same for GSourceWrap.

&gt;  - Destroy function to do cleanups.

In most cases, if not all, these destroy functions just deref a ref-counted object that&apos;s used in the main callback. A much better approach would be to just capture a RefPtr&lt;&gt; into the main lambda and do away with destroy functions -- which GSourceWrap does. 

&gt; 
&gt; Looking at your patch I&apos;m not sure all these cases are covered, like for
&gt; example the automatic cancellation before scheduling a new source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101273</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-06-11 07:17:22 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &apos;Cancelling&apos; a GSource object controlled by GSourceWrap is as simple as
&gt; setting the ready time to -1, ensuring it&apos;s not to be fired.

Maybe an explicit cancel() function would be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101274</commentid>
    <comment_count>22</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-11 07:25:17 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; &apos;Cancelling&apos; a GSource object controlled by GSourceWrap is as simple as
&gt; &gt; setting the ready time to -1, ensuring it&apos;s not to be fired.
&gt; 
&gt; Maybe an explicit cancel() function would be better?

There&apos;s already GSourceWrap::Static::cancel(), GSourceWrap::Dynamic::cancel() and GSourceWrap::Socket::cancel(), if that&apos;s what you&apos;re thinking of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101502</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-12 02:02:19 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; The most common mistakes of this pattern were:
&gt; &gt; 
&gt; &gt;  - Not cancelling the previous source (&quot;leaking&quot; the previous id), before
&gt; &gt; scheduling a new one. That&apos;s why GMainLoopSource does a cancel() before
&gt; &gt; scheduoling a new source, and has a isScheduled() for the cases when you
&gt; &gt; don&apos;t want to cancel the previous one.
&gt; 
&gt; GSourceWrap only ever operates on one GSource object, instead of creating,
&gt; attaching and scheduling a new GSource object every time a new invocation of
&gt; callback is required.
&gt; &apos;Cancelling&apos; a GSource object controlled by GSourceWrap is as simple as
&gt; setting the ready time to -1, ensuring it&apos;s not to be fired.

Yes, that was probably what made GMainLoopSource more complex than I expected, so I like the idea of reusing the source.

&gt; &gt;  - Not cancelling the source in the destructor. GMainLoopSource does
&gt; &gt; automatic cleanup on its destructor.
&gt; 
&gt; Same for GSourceWrap.
&gt; 
&gt; &gt;  - Not setting the id to 0 in the callback. GMainLoopSource updates its
&gt; &gt; internal state in the callbacks.
&gt; 
&gt; GSourceWrap doesn&apos;t use source IDs at all.
&gt; 
&gt; &gt; 
&gt; &gt; But also took advantage of C++ to make its use more convenient:
&gt; &gt; 
&gt; &gt;  - Use lambda functions, instead of having to define static cabllbacks.
&gt; 
&gt; Same for GSourceWrap.
&gt; 
&gt; &gt;  - Automatic detection of repeating/non-repeating functions. It&apos;s also
&gt; &gt; common to forget the return FALSE, but in this case at least the compiler
&gt; &gt; warns you.
&gt; 
&gt; GSourceWrap::Dynamic enables that, though it&apos;s not used anywhere (at the
&gt; moment). I&apos;m not a fan of supporting repeatable functions in GSourceWrap (or
&gt; of any use case that would require GSourceWrap::Dynamic, for that matter),
&gt; mostly because I&apos;m not satisfied with how it&apos;s implemented and because I&apos;m
&gt; not sure there&apos;s a better way to do it.
&gt; 
&gt; For instance, RunLoop::TimerBase uses a repeatable GMainLoopSource in
&gt; upstream, with a std::function&lt;bool()&gt; callback. The patch switches to using
&gt; GSourceWrap::Static, with the GSource wrapper being rescheduled manually if
&gt; required.
&gt; 
&gt; &gt;  - Default values for the common parameters like priority, context, etc.
&gt; 
&gt; Same for GSourceWrap.
&gt; 
&gt; &gt;  - Destroy function to do cleanups.
&gt; 
&gt; In most cases, if not all, these destroy functions just deref a ref-counted
&gt; object that&apos;s used in the main callback. A much better approach would be to
&gt; just capture a RefPtr&lt;&gt; into the main lambda and do away with destroy
&gt; functions -- which GSourceWrap does. 

Yes, that was not possible with GMainLoopSource, I think, the lambda could be freed to early, but I don&apos;t remember exactly why we had to add explicit destroy functions.

&gt; &gt; 
&gt; &gt; Looking at your patch I&apos;m not sure all these cases are covered, like for
&gt; &gt; example the automatic cancellation before scheduling a new source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1107453</commentid>
    <comment_count>24</comment_count>
      <attachid>256302</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-07 08:19:43 -0700</bug_when>
    <thetext>Created attachment 256302
Patch

Added some documentation, removed GSourceWrap::Dynamic, some minor fixes, still lacks ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1107454</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-07 08:27:11 -0700</bug_when>
    <thetext>Attachment 256302 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:39:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:39:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/Shared/Downloads/soup/DownloadSoup.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/SharedTimerGtk.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1058:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:5:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:14:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:23:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:85:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:102:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:145:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:153:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:162:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.cpp:201:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/MainThreadGLib.cpp:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:79:  The parameter name &quot;function&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:79:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/GSourceWrap.h:121:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/gtk/GestureController.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 31 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135717</commentid>
    <comment_count>26</comment_count>
      <attachid>263833</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-22 10:18:06 -0700</bug_when>
    <thetext>Created attachment 263833
Different approach

Instead of creating a new class that works for all possible cases, I think we can implement the RunLoop using a custom persistent source, and use the RunLoop for the cases when we need to schedule tasks with the default priority, and used very often. For the cases that are not used that often like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the cases where we need different priorities we can use a custom implementation like I did in bug #150392. For the shared timer we can do the same. For now I have switched to use this in the WorkQueue, and scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases too.
What do you think? I think it&apos;s a simpler and compatible approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135720</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-22 10:20:46 -0700</bug_when>
    <thetext>Attachment 263833 did not pass style-queue:


ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:116:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:123:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135723</commentid>
    <comment_count>28</comment_count>
      <attachid>263834</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-22 10:30:53 -0700</bug_when>
    <thetext>Created attachment 263834
Try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135724</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-22 10:34:07 -0700</bug_when>
    <thetext>Attachment 263834 did not pass style-queue:


ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:116:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:123:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135729</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-22 10:47:10 -0700</bug_when>
    <thetext>I&apos;m thinking that for the cases where we need to se a different priority we could probably add RunLoop::Timer::setPriority() and use RunLoop::Timer. I think it would work at least for the shared timer and the layer flush.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135988</commentid>
    <comment_count>31</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-23 00:28:12 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Created attachment 263833 [details]
&gt; Different approach
&gt; 
&gt; Instead of creating a new class that works for all possible cases, I think
&gt; we can implement the RunLoop using a custom persistent source, and use the
&gt; RunLoop for the cases when we need to schedule tasks with the default
&gt; priority, and used very often. For the cases that are not used that often
&gt; like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the
&gt; cases where we need different priorities we can use a custom implementation
&gt; like I did in bug #150392. For the shared timer we can do the same. For now
&gt; I have switched to use this in the WorkQueue, and
&gt; scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases
&gt; too.
&gt; What do you think? I think it&apos;s a simpler and compatible approach.

This is tangential to the previous work and should be uploaded into a separate bug.

The idea sounds good, but I don&apos;t like WorkQueue switching over to using RunLoop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135995</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-23 01:06:42 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #26)
&gt; &gt; Created attachment 263833 [details]
&gt; &gt; Different approach
&gt; &gt; 
&gt; &gt; Instead of creating a new class that works for all possible cases, I think
&gt; &gt; we can implement the RunLoop using a custom persistent source, and use the
&gt; &gt; RunLoop for the cases when we need to schedule tasks with the default
&gt; &gt; priority, and used very often. For the cases that are not used that often
&gt; &gt; like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the
&gt; &gt; cases where we need different priorities we can use a custom implementation
&gt; &gt; like I did in bug #150392. For the shared timer we can do the same. For now
&gt; &gt; I have switched to use this in the WorkQueue, and
&gt; &gt; scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases
&gt; &gt; too.
&gt; &gt; What do you think? I think it&apos;s a simpler and compatible approach.
&gt; 
&gt; This is tangential to the previous work and should be uploaded into a
&gt; separate bug.

Not really, because with this we don&apos;t need the new wrapper to use persistent sources. The Queue wrapper, for example, is mostly duplicating the queue used by the Runloop.

&gt; The idea sounds good, but I don&apos;t like WorkQueue switching over to using
&gt; RunLoop.

Could you elaborate? What&apos;s what you don&apos;t like? With this approach, I think the threaded compositor could simply use a WorkQueue instead of the current custom implementation, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136008</commentid>
    <comment_count>33</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-23 03:07:04 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; Created attachment 263833 [details]
&gt; &gt; &gt; Different approach
&gt; &gt; &gt; 
&gt; &gt; &gt; Instead of creating a new class that works for all possible cases, I think
&gt; &gt; &gt; we can implement the RunLoop using a custom persistent source, and use the
&gt; &gt; &gt; RunLoop for the cases when we need to schedule tasks with the default
&gt; &gt; &gt; priority, and used very often. For the cases that are not used that often
&gt; &gt; &gt; like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the
&gt; &gt; &gt; cases where we need different priorities we can use a custom implementation
&gt; &gt; &gt; like I did in bug #150392. For the shared timer we can do the same. For now
&gt; &gt; &gt; I have switched to use this in the WorkQueue, and
&gt; &gt; &gt; scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases
&gt; &gt; &gt; too.
&gt; &gt; &gt; What do you think? I think it&apos;s a simpler and compatible approach.
&gt; &gt; 
&gt; &gt; This is tangential to the previous work and should be uploaded into a
&gt; &gt; separate bug.
&gt; 
&gt; Not really, because with this we don&apos;t need the new wrapper to use
&gt; persistent sources. The Queue wrapper, for example, is mostly duplicating
&gt; the queue used by the Runloop.
&gt; 

I&apos;m proposing switching all the sources over to the persistent mode using a few generic classes that are built on top of the GLib API. You&apos;re for now changing two sources, falling back to using the GLib API directly.

Yep, a Queue object keeps a queue of functions, just like RunLoop, but doesn&apos;t care about nested run loops or control over the main loop. It was tailored for WorkQueue.

&gt; &gt; The idea sounds good, but I don&apos;t like WorkQueue switching over to using
&gt; &gt; RunLoop.
&gt; 
&gt; Could you elaborate? What&apos;s what you don&apos;t like? With this approach, I think
&gt; the threaded compositor could simply use a WorkQueue instead of the current
&gt; custom implementation, for example.

TC could likely use WorkQueue instead of RunLoop without the WorkQueue implementation using RunLoop. If that&apos;s not the case, then a RunLoop shoul be used instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136011</commentid>
    <comment_count>34</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-23 03:26:16 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; &gt; Created attachment 263833 [details]
&gt; &gt; &gt; &gt; Different approach
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Instead of creating a new class that works for all possible cases, I think
&gt; &gt; &gt; &gt; we can implement the RunLoop using a custom persistent source, and use the
&gt; &gt; &gt; &gt; RunLoop for the cases when we need to schedule tasks with the default
&gt; &gt; &gt; &gt; priority, and used very often. For the cases that are not used that often
&gt; &gt; &gt; &gt; like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the
&gt; &gt; &gt; &gt; cases where we need different priorities we can use a custom implementation
&gt; &gt; &gt; &gt; like I did in bug #150392. For the shared timer we can do the same. For now
&gt; &gt; &gt; &gt; I have switched to use this in the WorkQueue, and
&gt; &gt; &gt; &gt; scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases
&gt; &gt; &gt; &gt; too.
&gt; &gt; &gt; &gt; What do you think? I think it&apos;s a simpler and compatible approach.
&gt; &gt; &gt; 
&gt; &gt; &gt; This is tangential to the previous work and should be uploaded into a
&gt; &gt; &gt; separate bug.
&gt; &gt; 
&gt; &gt; Not really, because with this we don&apos;t need the new wrapper to use
&gt; &gt; persistent sources. The Queue wrapper, for example, is mostly duplicating
&gt; &gt; the queue used by the Runloop.
&gt; &gt; 
&gt; 
&gt; I&apos;m proposing switching all the sources over to the persistent mode using a
&gt; few generic classes that are built on top of the GLib API. You&apos;re for now
&gt; changing two sources, falling back to using the GLib API directly.

Yes, the idea is to only use persistent sources for the ones that would have an impact in performance. This approach allows that without adding new complex API.

&gt; Yep, a Queue object keeps a queue of functions, just like RunLoop, but
&gt; doesn&apos;t care about nested run loops or control over the main loop. It was
&gt; tailored for WorkQueue.

WorkQueues never use nested main loops, so it doesn&apos;t have any effect when using Runloop in WorkQueue, it simply creates the GMainLoop, and uses the functions queue to dispatch sources. 

&gt; &gt; &gt; The idea sounds good, but I don&apos;t like WorkQueue switching over to using
&gt; &gt; &gt; RunLoop.
&gt; &gt; 
&gt; &gt; Could you elaborate? What&apos;s what you don&apos;t like? With this approach, I think
&gt; &gt; the threaded compositor could simply use a WorkQueue instead of the current
&gt; &gt; custom implementation, for example.
&gt; 
&gt; TC could likely use WorkQueue instead of RunLoop without the WorkQueue
&gt; implementation using RunLoop. If that&apos;s not the case, then a RunLoop shoul
&gt; be used instead.

Yes, that&apos;s right. I still don&apos;t see what&apos;s wrong using RunLoop in WorkQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136013</commentid>
    <comment_count>35</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-23 03:46:32 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #32)
&gt; &gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; &gt; &gt; Created attachment 263833 [details]
&gt; &gt; &gt; &gt; &gt; Different approach
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Instead of creating a new class that works for all possible cases, I think
&gt; &gt; &gt; &gt; &gt; we can implement the RunLoop using a custom persistent source, and use the
&gt; &gt; &gt; &gt; &gt; RunLoop for the cases when we need to schedule tasks with the default
&gt; &gt; &gt; &gt; &gt; priority, and used very often. For the cases that are not used that often
&gt; &gt; &gt; &gt; &gt; like WorjQueue::dispatchAfter we can keep using GMainLoopSource. And for the
&gt; &gt; &gt; &gt; &gt; cases where we need different priorities we can use a custom implementation
&gt; &gt; &gt; &gt; &gt; like I did in bug #150392. For the shared timer we can do the same. For now
&gt; &gt; &gt; &gt; &gt; I have switched to use this in the WorkQueue, and
&gt; &gt; &gt; &gt; &gt; scheduleDispatchFunctionsOnMainThread(), but we could use it in other cases
&gt; &gt; &gt; &gt; &gt; too.
&gt; &gt; &gt; &gt; &gt; What do you think? I think it&apos;s a simpler and compatible approach.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This is tangential to the previous work and should be uploaded into a
&gt; &gt; &gt; &gt; separate bug.
&gt; &gt; &gt; 
&gt; &gt; &gt; Not really, because with this we don&apos;t need the new wrapper to use
&gt; &gt; &gt; persistent sources. The Queue wrapper, for example, is mostly duplicating
&gt; &gt; &gt; the queue used by the Runloop.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I&apos;m proposing switching all the sources over to the persistent mode using a
&gt; &gt; few generic classes that are built on top of the GLib API. You&apos;re for now
&gt; &gt; changing two sources, falling back to using the GLib API directly.
&gt; 
&gt; Yes, the idea is to only use persistent sources for the ones that would have
&gt; an impact in performance. This approach allows that without adding new
&gt; complex API.
&gt; 

What&apos;s complex in GSourceWrap interfaces?
And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in GMainLoopSource?

&gt; &gt; Yep, a Queue object keeps a queue of functions, just like RunLoop, but
&gt; &gt; doesn&apos;t care about nested run loops or control over the main loop. It was
&gt; &gt; tailored for WorkQueue.
&gt; 
&gt; WorkQueues never use nested main loops, so it doesn&apos;t have any effect when
&gt; using Runloop in WorkQueue, it simply creates the GMainLoop, and uses the
&gt; functions queue to dispatch sources. 
&gt; 
&gt; &gt; &gt; &gt; The idea sounds good, but I don&apos;t like WorkQueue switching over to using
&gt; &gt; &gt; &gt; RunLoop.
&gt; &gt; &gt; 
&gt; &gt; &gt; Could you elaborate? What&apos;s what you don&apos;t like? With this approach, I think
&gt; &gt; &gt; the threaded compositor could simply use a WorkQueue instead of the current
&gt; &gt; &gt; custom implementation, for example.
&gt; &gt; 
&gt; &gt; TC could likely use WorkQueue instead of RunLoop without the WorkQueue
&gt; &gt; implementation using RunLoop. If that&apos;s not the case, then a RunLoop shoul
&gt; &gt; be used instead.
&gt; 
&gt; Yes, that&apos;s right. I still don&apos;t see what&apos;s wrong using RunLoop in WorkQueue.

RunLoop and WorkQueue are two different and exclusive ways of managing a running thread. I disagree with one having to depend on the other. Furthermore, you already have to add a platform-specific method on RunLoop just to expose the GMainContext object to the WorkQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136014</commentid>
    <comment_count>36</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-23 03:59:57 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; 
&gt; What&apos;s complex in GSourceWrap interfaces?
&gt; And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in
&gt; GMainLoopSource?

Maybe it&apos;s just me that I&apos;m used to GMainLoopSource, but I find the GSourceWrap API difficult to use. You need to think everytime if you want a static, queue or timer based wrapper.

&gt; RunLoop and WorkQueue are two different and exclusive ways of managing a
&gt; running thread. I disagree with one having to depend on the other.
&gt; Furthermore, you already have to add a platform-specific method on RunLoop
&gt; just to expose the GMainContext object to the WorkQueue.

I don&apos;t think they are exclusive. WorkQueue uses a worker thread to run a main loop, so using RunLoop there seems natural to me. We are currently duplicating what RunLoop does in WorkQueue. And yes, mainContext() is needed to be able to schedule other kind of sources in a particular RunLoop, it&apos;s not specific to WorkQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136015</commentid>
    <comment_count>37</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-23 05:10:57 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; 
&gt; &gt; What&apos;s complex in GSourceWrap interfaces?
&gt; &gt; And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in
&gt; &gt; GMainLoopSource?
&gt; 
&gt; Maybe it&apos;s just me that I&apos;m used to GMainLoopSource, but I find the
&gt; GSourceWrap API difficult to use. You need to think everytime if you want a
&gt; static, queue or timer based wrapper.
&gt; 

We can remove Socket and Queue and roll both into WorkQueue, or at least Socket if RunLoop is used there. That would leave two.

For all I care GMainLoopSource can be incrementally slimmed down to how GSourceWrap is implemented.

&gt; &gt; RunLoop and WorkQueue are two different and exclusive ways of managing a
&gt; &gt; running thread. I disagree with one having to depend on the other.
&gt; &gt; Furthermore, you already have to add a platform-specific method on RunLoop
&gt; &gt; just to expose the GMainContext object to the WorkQueue.
&gt; 
&gt; I don&apos;t think they are exclusive. WorkQueue uses a worker thread to run a
&gt; main loop, so using RunLoop there seems natural to me. We are currently
&gt; duplicating what RunLoop does in WorkQueue. And yes, mainContext() is needed
&gt; to be able to schedule other kind of sources in a particular RunLoop, it&apos;s
&gt; not specific to WorkQueue.

IMO this is low-level library code, and we can afford being explicit in the implementation, directly using platform-specific APIs instead of relying on a neighbouring abstraction API. Unfortunately we don&apos;t have specific APIs available that we could simply map to, like Cocoa-based platforms for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136017</commentid>
    <comment_count>38</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-23 05:28:36 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; 
&gt; &gt; &gt; What&apos;s complex in GSourceWrap interfaces?
&gt; &gt; &gt; And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in
&gt; &gt; &gt; GMainLoopSource?
&gt; &gt; 
&gt; &gt; Maybe it&apos;s just me that I&apos;m used to GMainLoopSource, but I find the
&gt; &gt; GSourceWrap API difficult to use. You need to think everytime if you want a
&gt; &gt; static, queue or timer based wrapper.
&gt; &gt; 
&gt; 
&gt; We can remove Socket and Queue and roll both into WorkQueue, or at least
&gt; Socket if RunLoop is used there. That would leave two.
&gt; 
&gt; For all I care GMainLoopSource can be incrementally slimmed down to how
&gt; GSourceWrap is implemented.

I think 99% of the cases can be converted to RunLoop::dispatch() and RunLoop::Timer.

&gt; &gt; &gt; RunLoop and WorkQueue are two different and exclusive ways of managing a
&gt; &gt; &gt; running thread. I disagree with one having to depend on the other.
&gt; &gt; &gt; Furthermore, you already have to add a platform-specific method on RunLoop
&gt; &gt; &gt; just to expose the GMainContext object to the WorkQueue.
&gt; &gt; 
&gt; &gt; I don&apos;t think they are exclusive. WorkQueue uses a worker thread to run a
&gt; &gt; main loop, so using RunLoop there seems natural to me. We are currently
&gt; &gt; duplicating what RunLoop does in WorkQueue. And yes, mainContext() is needed
&gt; &gt; to be able to schedule other kind of sources in a particular RunLoop, it&apos;s
&gt; &gt; not specific to WorkQueue.
&gt; 
&gt; IMO this is low-level library code, and we can afford being explicit in the
&gt; implementation, directly using platform-specific APIs instead of relying on
&gt; a neighbouring abstraction API. Unfortunately we don&apos;t have specific APIs
&gt; available that we could simply map to, like Cocoa-based platforms for
&gt; instance.

The neighbouring abstraction API is a platform implementation of a RunLoop, and WorkQueue needs a RunLoop implementation. I don&apos;t see the problem of WTF classes depending on each other. Or maybe I don&apos;t understand the reasoning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136393</commentid>
    <comment_count>39</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-25 07:13:58 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What&apos;s complex in GSourceWrap interfaces?
&gt; &gt; &gt; &gt; And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in
&gt; &gt; &gt; &gt; GMainLoopSource?
&gt; &gt; &gt; 
&gt; &gt; &gt; Maybe it&apos;s just me that I&apos;m used to GMainLoopSource, but I find the
&gt; &gt; &gt; GSourceWrap API difficult to use. You need to think everytime if you want a
&gt; &gt; &gt; static, queue or timer based wrapper.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; We can remove Socket and Queue and roll both into WorkQueue, or at least
&gt; &gt; Socket if RunLoop is used there. That would leave two.
&gt; &gt; 
&gt; &gt; For all I care GMainLoopSource can be incrementally slimmed down to how
&gt; &gt; GSourceWrap is implemented.
&gt; 
&gt; I think 99% of the cases can be converted to RunLoop::dispatch() and
&gt; RunLoop::Timer.
&gt; 

Some of them could be switched over. But then you have cases in platform-specific code (GStreamer-related stuff mostly) where you don&apos;t have any control over the main loop. I wouldn&apos;t use RunLoop::Timer there for the sake of clean distinction between the thread management that&apos;s done by WebKit via RunLoop (which is at this point the case with the main and composition threads) and the thread management done by external dependencies.

&gt; &gt; &gt; &gt; RunLoop and WorkQueue are two different and exclusive ways of managing a
&gt; &gt; &gt; &gt; running thread. I disagree with one having to depend on the other.
&gt; &gt; &gt; &gt; Furthermore, you already have to add a platform-specific method on RunLoop
&gt; &gt; &gt; &gt; just to expose the GMainContext object to the WorkQueue.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think they are exclusive. WorkQueue uses a worker thread to run a
&gt; &gt; &gt; main loop, so using RunLoop there seems natural to me. We are currently
&gt; &gt; &gt; duplicating what RunLoop does in WorkQueue. And yes, mainContext() is needed
&gt; &gt; &gt; to be able to schedule other kind of sources in a particular RunLoop, it&apos;s
&gt; &gt; &gt; not specific to WorkQueue.
&gt; &gt; 
&gt; &gt; IMO this is low-level library code, and we can afford being explicit in the
&gt; &gt; implementation, directly using platform-specific APIs instead of relying on
&gt; &gt; a neighbouring abstraction API. Unfortunately we don&apos;t have specific APIs
&gt; &gt; available that we could simply map to, like Cocoa-based platforms for
&gt; &gt; instance.
&gt; 
&gt; The neighbouring abstraction API is a platform implementation of a RunLoop,
&gt; and WorkQueue needs a RunLoop implementation. I don&apos;t see the problem of WTF
&gt; classes depending on each other. Or maybe I don&apos;t understand the reasoning.

WorkQueue doesn&apos;t need a RunLoop implementation. It can use it, but it doesn&apos;t need timers or nested looping support. It&apos;s also entirely possible to implement WorkQueue without a GMainLoop running the whole thing.

What your patch does improve, though it&apos;s not perfect, is addressing the remaining race conditions in WorkQueue construction and invalidation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136492</commentid>
    <comment_count>40</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-26 00:12:00 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; (In reply to comment #37)
&gt; &gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; What&apos;s complex in GSourceWrap interfaces?
&gt; &gt; &gt; &gt; &gt; And what&apos;s complex in GSourceWrap interfaces that&apos;s not complex in
&gt; &gt; &gt; &gt; &gt; GMainLoopSource?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Maybe it&apos;s just me that I&apos;m used to GMainLoopSource, but I find the
&gt; &gt; &gt; &gt; GSourceWrap API difficult to use. You need to think everytime if you want a
&gt; &gt; &gt; &gt; static, queue or timer based wrapper.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; We can remove Socket and Queue and roll both into WorkQueue, or at least
&gt; &gt; &gt; Socket if RunLoop is used there. That would leave two.
&gt; &gt; &gt; 
&gt; &gt; &gt; For all I care GMainLoopSource can be incrementally slimmed down to how
&gt; &gt; &gt; GSourceWrap is implemented.
&gt; &gt; 
&gt; &gt; I think 99% of the cases can be converted to RunLoop::dispatch() and
&gt; &gt; RunLoop::Timer.
&gt; &gt; 
&gt; 
&gt; Some of them could be switched over. But then you have cases in
&gt; platform-specific code (GStreamer-related stuff mostly) where you don&apos;t have
&gt; any control over the main loop. I wouldn&apos;t use RunLoop::Timer there for the
&gt; sake of clean distinction between the thread management that&apos;s done by
&gt; WebKit via RunLoop (which is at this point the case with the main and
&gt; composition threads) and the thread management done by external dependencies.

Sure, I agree, I&apos;m not saying we can replace all cases. In GST code what we want is to send tasks to the main thread from the GST threads, but RunLoop::dispatch() wouldn&apos;t work because we want to be able to cancel a source scheduled or check if it was already scheduled, for example. And I agree that using a Runloop::Timer there, even thought it might work, it&apos;s not ideal at all. My point is that if we can switch to use RunLoop for the cases where it makes sense, we might reduce the uses of GMainLoopSource to a very few cases where it would be better to rework GMainLoopSource to use persistent sources, instead of adding a new wrapper. 

So, I&apos;m going to try this in a different way, instead of first moving to persistent source in RunLoop, I&apos;ll first move to use RunLoop in the cases I think make sense, and then we can see the cases where we are still using GMainLoopSource to see if we really need a new wrapper or not. I agree this doesn&apos;t belong to this bug.

&gt; &gt; &gt; &gt; &gt; RunLoop and WorkQueue are two different and exclusive ways of managing a
&gt; &gt; &gt; &gt; &gt; running thread. I disagree with one having to depend on the other.
&gt; &gt; &gt; &gt; &gt; Furthermore, you already have to add a platform-specific method on RunLoop
&gt; &gt; &gt; &gt; &gt; just to expose the GMainContext object to the WorkQueue.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t think they are exclusive. WorkQueue uses a worker thread to run a
&gt; &gt; &gt; &gt; main loop, so using RunLoop there seems natural to me. We are currently
&gt; &gt; &gt; &gt; duplicating what RunLoop does in WorkQueue. And yes, mainContext() is needed
&gt; &gt; &gt; &gt; to be able to schedule other kind of sources in a particular RunLoop, it&apos;s
&gt; &gt; &gt; &gt; not specific to WorkQueue.
&gt; &gt; &gt; 
&gt; &gt; &gt; IMO this is low-level library code, and we can afford being explicit in the
&gt; &gt; &gt; implementation, directly using platform-specific APIs instead of relying on
&gt; &gt; &gt; a neighbouring abstraction API. Unfortunately we don&apos;t have specific APIs
&gt; &gt; &gt; available that we could simply map to, like Cocoa-based platforms for
&gt; &gt; &gt; instance.
&gt; &gt; 
&gt; &gt; The neighbouring abstraction API is a platform implementation of a RunLoop,
&gt; &gt; and WorkQueue needs a RunLoop implementation. I don&apos;t see the problem of WTF
&gt; &gt; classes depending on each other. Or maybe I don&apos;t understand the reasoning.
&gt; 
&gt; WorkQueue doesn&apos;t need a RunLoop implementation. It can use it, but it
&gt; doesn&apos;t need timers or nested looping support. It&apos;s also entirely possible
&gt; to implement WorkQueue without a GMainLoop running the whole thing.

I&apos;m not discussing whether WorkQueue needs a RunLoop or not, the fact is that our current implementation uses a GMainLoop (which I think is a good idea, but still that&apos;s a different discussion), and we already have a GMainLoop abstraction in WTF, so I don&apos;t see any problem in using it anywhere we need a GMainLoop.

&gt; What your patch does improve, though it&apos;s not perfect, is addressing the
&gt; remaining race conditions in WorkQueue construction and invalidation.

Yes, this was needed, since now the run loop has to be created in the thread. If you tell me how it can be perfect I&apos;ll be happy to make it perfect :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136802</commentid>
    <comment_count>41</comment_count>
      <attachid>263834</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-10-27 07:45:45 -0700</bug_when>
    <thetext>Comment on attachment 263834
Try to fix EFL build

Removing flags, this doesn&apos;t fit here, I agreed a new plan with Zan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153355</commentid>
    <comment_count>42</comment_count>
      <attachid>256302</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-06 20:50:12 -0800</bug_when>
    <thetext>Comment on attachment 256302
Patch

Seems this patch should not be on request queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224227</commentid>
    <comment_count>43</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-08-29 11:26:25 -0700</bug_when>
    <thetext>There&apos;s now a good-enough solution in RunLoop::Timer&lt;&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241857</attachid>
            <date>2014-11-19 07:07:10 -0800</date>
            <delta_ts>2014-11-27 04:23:39 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-138691-20141119070824.patch</filename>
            <type>text/plain</type>
            <size>17849</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4
IGU2OTg4OTI4NzczMWIyZWJiN2UxZTBkYTM3NGIxYzM3YmRjY2VkNzYuLjYxNjI0YjFlOGFiYWY5
NGViNWExN2E3ODI3ZjMxNmFjYTVmOTRlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC0xLDYgKzEsNyBAQAogbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dSZWZQdHIuY3BwCisgICAgZ29iamVjdC9HUGVy
c2lzdGVudE1haW5Mb29wU291cmNlLmNwcAogICAgIGdvYmplY3QvR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1BlcnNpc3RlbnRNYWluTG9vcFNvdXJjZS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZjYjk0ZjhkZTM0MmUxYmNjOWY1ZTgzZWE5NzBhYjg4YWM3NjUzM2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dQZXJzaXN0ZW50TWFpbkxvb3BTb3Vy
Y2UuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUGVyc2lz
dGVudE1haW5Mb29wU291cmNlLmgiCisKKyNpZiBVU0UoR0xJQikKKworI2luY2x1ZGUgPGNzdGRp
bz4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitHU291
cmNlRnVuY3MgR1BlcnNpc3RlbnRNYWluTG9vcFNvdXJjZTo6bV9zb3VyY2VGdW5jdGlvbnMgPSB7
CisgICAgbnVsbHB0ciwgLy8gcHJlcGFyZQorICAgIG51bGxwdHIsIC8vIGNoZWNrCisgICAgLy8g
ZGlzcGF0Y2gKKyAgICBbXShHU291cmNlKiwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVy
IGRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSk7
CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQorICAgIG51bGxwdHIsIC8vIGNsb3N1
cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX21hcnNoYWxsCit9OworCit0ZW1w
bGF0ZTw+CitnYm9vbGVhbiBHUGVyc2lzdGVudE1haW5Mb29wU291cmNlOjpCYXNlPEdQZXJzaXN0
ZW50TWFpbkxvb3BTb3VyY2U6OlN0YXRpY1R5cGU+Ojpzb3VyY2VDYWxsYmFjayhCYXNlKiBzb3Vy
Y2UpCit7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoc291cmNlLT5tX3NvdXJjZS5nZXQo
KSwgLTEpOworICAgIHNvdXJjZS0+bV9zdGF0dXMgPSBEaXNwYXRjaGluZzsKKyAgICBzb3VyY2Ut
Pm1fZnVuY3Rpb24oKTsKKyAgICBzb3VyY2UtPm1fc3RhdHVzID0gUmVhZHk7CisgICAgcmV0dXJu
IEdfU09VUkNFX0NPTlRJTlVFOworfQorCit0ZW1wbGF0ZTw+Cit0ZW1wbGF0ZTw+CitHUGVyc2lz
dGVudE1haW5Mb29wU291cmNlOjpCYXNlPEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OlN0YXRp
Y1R5cGU+OjpCYXNlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVu
Y3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQorICAgIDogbV9mdW5j
dGlvbihzdGQ6Om1vdmUoZnVuY3Rpb24pKQorICAgICwgbV9zb3VyY2UoZ19zb3VyY2VfbmV3KCZt
X3NvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkKKyAgICAsIG1fc3RhdHVzKFJlYWR5
KQoreworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7CisgICAgaWYgKHByaW9y
aXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKQorICAgICAgICBnX3NvdXJjZV9zZXRfcHJp
b3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9z
b3VyY2UuZ2V0KCksIGNvbnRleHQpOworfQorCit0ZW1wbGF0ZTw+CitHUGVyc2lzdGVudE1haW5M
b29wU291cmNlOjpCYXNlPEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OlN0YXRpY1R5cGU+Ojp+
QmFzZSgpCit7Cit9CisKK3RlbXBsYXRlPD4KK3RlbXBsYXRlPD4KK3ZvaWQgR1BlcnNpc3RlbnRN
YWluTG9vcFNvdXJjZTo6QmFzZTxHUGVyc2lzdGVudE1haW5Mb29wU291cmNlOjpTdGF0aWNUeXBl
Pjo6c2NoZWR1bGUoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBkZWxheSkKK3sKKyAgICBnX3Nv
dXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGRlbGF5LmNvdW50KCkpOworICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOworfQorCit0ZW1w
bGF0ZTw+Cit2b2lkIEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OkJhc2U8R1BlcnNpc3RlbnRN
YWluTG9vcFNvdXJjZTo6U3RhdGljVHlwZT46OmNhbmNlbCgpCit7CisgICAgZ19zb3VyY2Vfc2V0
X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIC0xKTsKKyAgICBtX3N0YXR1cyA9IFJlYWR5Owor
fQorCit0ZW1wbGF0ZTw+CitnYm9vbGVhbiBHUGVyc2lzdGVudE1haW5Mb29wU291cmNlOjpCYXNl
PEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OkR5bmFtaWNUeXBlPjo6c291cmNlQ2FsbGJhY2so
QmFzZSogc291cmNlKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiR1BlcnNpc3RlbnRNYWluTG9v
cFNvdXJjZTxEeW5hbWljPjo6c291cmNlQ2FsbGJhY2soKSBUJXUgJXAgdGFyZ2V0ICVkXG4iLCBj
dXJyZW50VGhyZWFkKCksIHNvdXJjZSwgISFzb3VyY2UtPm1fZnVuY3Rpb24pOworICAgIGdfc291
cmNlX3NldF9yZWFkeV90aW1lKHNvdXJjZS0+bV9zb3VyY2UuZ2V0KCksIC0xKTsKKyAgICBzb3Vy
Y2UtPm1fc3RhdHVzID0gRGlzcGF0Y2hpbmc7CisgICAgc291cmNlLT5tX2Z1bmN0aW9uKCk7Cisg
ICAgc291cmNlLT5tX2Z1bmN0aW9uID0gbnVsbHB0cjsKKyAgICBzb3VyY2UtPm1fc3RhdHVzID0g
UmVhZHk7CisgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOworfQorCit0ZW1wbGF0ZTw+Cit0
ZW1wbGF0ZTw+CitHUGVyc2lzdGVudE1haW5Mb29wU291cmNlOjpCYXNlPEdQZXJzaXN0ZW50TWFp
bkxvb3BTb3VyY2U6OkR5bmFtaWNUeXBlPjo6QmFzZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgcHJp
b3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fc291cmNlKGdfc291cmNlX25l
dygmbV9zb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpCisgICAgLCBtX3N0YXR1cyhS
ZWFkeSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U8
RHluYW1pYz46OkJhc2UoKSAlcyAlcFxuIiwgbmFtZSwgdGhpcyk7CisgICAgZ19zb3VyY2Vfc2V0
X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayht
X3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc291cmNlQ2FsbGJh
Y2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZB
VUxUX0lETEUpCisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwg
cHJpb3JpdHkpOworICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7
Cit9CisKK3RlbXBsYXRlPD4KK0dQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OkJhc2U8R1BlcnNp
c3RlbnRNYWluTG9vcFNvdXJjZTo6RHluYW1pY1R5cGU+Ojp+QmFzZSgpCit7CisgICAgZnByaW50
ZihzdGRlcnIsICJHUGVyc2lzdGVudE1haW5Mb29wU291cmNlPER5bmFtaWM+Ojp+QmFzZSgpICVw
XG4iLCB0aGlzKTsKK30KKwordGVtcGxhdGU8PgordGVtcGxhdGU8Pgordm9pZCBHUGVyc2lzdGVu
dE1haW5Mb29wU291cmNlOjpCYXNlPEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OkR5bmFtaWNU
eXBlPjo6c2NoZWR1bGUoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBkZWxheSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBmdW5jdGlvbikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdQZXJzaXN0
ZW50TWFpbkxvb3BTb3VyY2U8RHluYW1pYz46OnNjaGVkdWxlKCkgVCV1ICVwIGZ1bmMgJWRcbiIs
IGN1cnJlbnRUaHJlYWQoKSwgdGhpcywgISFmdW5jdGlvbik7CisgICAgbV9mdW5jdGlvbiA9IHN0
ZDo6bW92ZShmdW5jdGlvbik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdG1fZnVuY3Rpb24gJWRc
biIsICEhbV9mdW5jdGlvbik7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2Uu
Z2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBkZWxheS5jb3VudCgpKTsKKyAgICBtX3N0
YXR1cyA9IFNjaGVkdWxlZDsKK30KKwordGVtcGxhdGU8Pgordm9pZCBHUGVyc2lzdGVudE1haW5M
b29wU291cmNlOjpCYXNlPEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OkR5bmFtaWNUeXBlPjo6
Y2FuY2VsKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdQZXJzaXN0ZW50TWFpbkxvb3BTb3Vy
Y2U8RHluYW1pYz46OmNhbmNlbCgpXG4iKTsKKyAgICBtX2Z1bmN0aW9uID0gbnVsbHB0cjsKKyAg
ICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgLTEpOworICAgIG1fc3Rh
dHVzID0gUmVhZHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKEdM
SUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dQZXJzaXN0ZW50TWFpbkxv
b3BTb3VyY2UuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1BlcnNpc3RlbnRNYWluTG9vcFNv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE0OGMxYWE1ZDUxMGJiZDJmZmVmN2VkNDU0NGY3MmEyNzVmZWUy
OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dQZXJzaXN0ZW50
TWFpbkxvb3BTb3VyY2UuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR1BlcnNpc3RlbnRNYWluTG9vcFNv
dXJjZV9oCisjZGVmaW5lIEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2VfaAorCisjaWYgVVNFKEdM
SUIpCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBHUGVyc2lz
dGVudE1haW5Mb29wU291cmNlIHsKKworICAgIHN0YXRpYyBHU291cmNlRnVuY3MgbV9zb3VyY2VG
dW5jdGlvbnM7CisKKyAgICB1c2luZyBTdGF0aWNUeXBlID0gc3RkOjp0cnVlX3R5cGU7CisgICAg
dXNpbmcgRHluYW1pY1R5cGUgPSBzdGQ6OmZhbHNlX3R5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIGNsYXNzIEJhc2UgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShC
YXNlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEJhc2UoKSA9IGRlZmF1bHQ7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFRUID0gVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VFQsIFN0YXRpY1R5cGU+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIEJh
c2UoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiwgaW50IHByaW9yaXR5
ID0gR19QUklPUklUWV9ERUZBVUxUX0lETEUsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVFQgPSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxUVCwgRHluYW1pY1R5cGU+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgICAgIEJhc2UoY29uc3QgY2hhciogbmFtZSwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9E
RUZBVUxUX0lETEUsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICAgICAgfkJhc2UoKTsK
KworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUVCA9IFQsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFRULCBTdGF0aWNUeXBlPjo6dmFsdWU+Ojp0eXBl
PgorICAgICAgICB2b2lkIHNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUVCA9IFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPFRULCBEeW5hbWljVHlwZT46OnZhbHVlPjo6dHlwZT4KKyAg
ICAgICAgdm9pZCBzY2hlZHVsZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+KTsKKworICAgICAgICB2b2lkIGNhbmNlbCgpOworCisgICAgICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyAhPSBSZWFkeTsgfQorICAgICAgICBi
b29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gU2NoZWR1bGVkOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gc291cmNlQ2FsbGJhY2so
QmFzZSopOworCisgICAgICAgIGVudW0gU3RhdHVzIHsgUmVhZHksIFNjaGVkdWxlZCwgRGlzcGF0
Y2hpbmcgfTsKKworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPHN0ZDo6aXNfc2FtZTxULCBTdGF0aWNUeXBlPjo6dmFsdWUsIGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+Ojp0eXBlOworICAgICAg
ICBGdW5jdGlvblR5cGUgbV9mdW5jdGlvbjsKKyAgICAgICAgR1JlZlB0cjxHU291cmNlPiBtX3Nv
dXJjZTsKKyAgICAgICAgU3RhdHVzIG1fc3RhdHVzOworICAgIH07CisKK3B1YmxpYzoKKyAgICB1
c2luZyBTdGF0aWMgPSBCYXNlPFN0YXRpY1R5cGU+OworICAgIHVzaW5nIER5bmFtaWMgPSBCYXNl
PER5bmFtaWNUeXBlPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkdQ
ZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U7CisKKyNlbmRpZiAvLyBVU0UoR0xJQikKKworI2VuZGlm
IC8vIEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKaW5kZXggNzRjNmY3MDhhMzNkYmFhZmIwYTA1Y2E3
Yjk5N2Y3YmQxZDU5M2FjNi4uM2E4YTE1YTNmMjc1ZWFhNjE3OWJjN2U2YWEwNGIwOTJlNDE2ZjM5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3Bw
CkBAIC0yOCwxMiArMjgsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFy
ZWRUaW1lci5oIgogCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1BlcnNpc3RlbnRNYWluTG9vcFNvdXJjZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHTWFpbkxvb3BTb3VyY2UgZ1NoYXJlZFRpbWVyOwog
c3RhdGljIHZvaWQgKCpzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pKCk7CitzdGF0aWMgdm9pZCBz
aGFyZWRUaW1lckZpcmVkKCkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKK30K
KworLy8gVGhlIHByaW9yaXR5IGlzIEdES19QUklPUklUWV9SRURSQVcsIGJ1dCB3ZSBkb24ndCB3
YW50IHRvIGRlcGVuZCBvbiBHREsgaGVyZSBqdXN0IHRvIHVzZSBhIGNvbnN0YW50Lgorc3RhdGlj
IEdQZXJzaXN0ZW50TWFpbkxvb3BTb3VyY2U6OlN0YXRpYyBnU2hhcmVkVGltZXIoIltXZWJLaXRd
IHNoYXJlZFRpbWVyVGltZW91dENhbGxiYWNrIiwgc2hhcmVkVGltZXJGaXJlZCwgR19QUklPUklU
WV9ISUdIX0lETEUgKyAyMCk7CiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZv
aWQgKCpmKSgpKQogewpAQCAtNDYsMTAgKzUyLDcgQEAgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJ
bnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiB7CiAgICAgQVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRG
dW5jdGlvbik7CiAKLSAgICAvLyBUaGlzIGlzIEdES19QUklPUklUWV9SRURSQVcsIGJ1dCB3ZSBk
b24ndCB3YW50IHRvIGRlcGVuZCBvbiBHREsgaGVyZSBqdXN0IHRvIHVzZSBhIGNvbnN0YW50Lgot
ICAgIHN0YXRpYyBjb25zdCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0hJR0hfSURMRSArIDIw
OwotICAgIGdTaGFyZWRUaW1lci5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIHNoYXJlZFRp
bWVyVGltZW91dENhbGxiYWNrIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHNoYXJlZFRpbWVyRmly
ZWRGdW5jdGlvbiksCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hy
b25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGludGVydmFs
KSksIHByaW9yaXR5KTsKKyAgICBnU2hhcmVkVGltZXIuc2NoZWR1bGUoc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0
aW9uPGRvdWJsZT4oaW50ZXJ2YWwpKSk7CiB9CiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKaW5kZXggOTNjN2U3OGEwNDE4MTI2NjBlY2Y2MDIx
ZmViNjYyMzkwMzI5YTA2Yy4uNjgwZmFiN2ViMGNlZTUzNjIzOGQyNTQ5MmU2MTk2YjNkMzkyZDdi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAog
I2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUGVyc2lzdGVudE1haW5Mb29wU291cmNlLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2VsaWYgUExBVEZPUk0oRUZMKQogI2lu
Y2x1ZGUgPERpc3BhdGNoUXVldWVFZmwuaD4KQEAgLTkwLDEyICs5MSwxNiBAQCBwcml2YXRlOgog
I2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHN0YXRpYyB2b2lkIHN0YXJ0V29ya1F1ZXVlVGhyZWFk
KFdvcmtRdWV1ZSopOwogICAgIHZvaWQgd29ya1F1ZXVlVGhyZWFkQm9keSgpOworICAgIHZvaWQg
ZGlzcGF0Y2hUYXNrcygpOwogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVh
ZDsKICAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7CiAgICAgTXV0ZXgg
bV9ldmVudExvb3BMb2NrOwogICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKICAg
ICBHTWFpbkxvb3BTb3VyY2UgbV9zb2NrZXRFdmVudFNvdXJjZTsKKyAgICBNdXRleCBtX2Rpc3Bh
dGNoTXV0ZXg7CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1fZGlzcGF0Y2hR
dWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BlcnNpc3RlbnRNYWluTG9vcFNvdXJjZTo6U3Rh
dGljPiBtX2Rpc3BhdGNoU291cmNlOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIFJlZlB0cjxE
aXNwYXRjaFF1ZXVlPiBtX2Rpc3BhdGNoUXVldWU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggYmQ4NTJkYWI1NTkwYjEyOWI2ZjI1
YWJmZWMyYTNhNjY0MWJhNzExYi4uYTNkZTcyMDkwOGUzOTJlNmVhMzUzNjZhNGY3MzhkYjRjMjM3
MGZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAK
QEAgLTM5LDYgKzM5LDkgQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lLCBRT1MpCiAgICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwogICAgIEFTU0VSVChtX2V2ZW50
TG9vcCk7CiAKKyAgICBtX2Rpc3BhdGNoU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxHUGVyc2lz
dGVudE1haW5Mb29wU291cmNlOjpTdGF0aWM+KCJbV2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNo
IiwKKyAgICAgICAgc3RkOjpiaW5kKCZXb3JrUXVldWU6OmRpc3BhdGNoVGFza3MsIHRoaXMpLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKwogICAgIC8vIFRoaXMg
bmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxl
LkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgogICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBm
b3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVy
cywKICAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFk
IG5hbWVzLgpAQCAtMTA3LDkgKzExMCwxMyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihpbnQpCiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogeworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Rp
c3BhdGNoTXV0ZXgpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS5hcHBlbmQoV1RGOjptb3ZlKGZ1bmN0
aW9uKSk7CisKKyAgICBpZiAobV9kaXNwYXRjaFNvdXJjZS0+aXNTY2hlZHVsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIHJlZigpOwotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmRE
ZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZTo6ZGlzcGF0Y2giLCBXVEY6Om1vdmUo
ZnVuY3Rpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFt0aGlzXSB7IGRlcmVmKCk7
IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICBtX2Rpc3BhdGNoU291cmNlLT5zY2hlZHVs
ZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQpAQCAtMTE4LDMgKzEyNSwxNCBAQCB2b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIHN0ZDo6
ZnVuY3Rpb248dgogICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5QW5kRGVs
ZXRlT25EZXN0cm95KCJbV2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIiLCBXVEY6Om1v
dmUoZnVuY3Rpb24pLAogICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzPihkdXJhdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNd
IHsgZGVyZWYoKTsgfSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOwogfQorCit2b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hUYXNrcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGlzcGF0Y2hN
dXRleCk7CisKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gcXVldWUgPSBXVEY6
Om1vdmUobV9kaXNwYXRjaFF1ZXVlKTsKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBxdWV1ZSkKKyAg
ICAgICAgdGFzaygpOworCisgICAgZGVyZWYoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCmluZGV4
IGVhYTYzZTEwMjYyMDE1NzdiODY2NjAzZTIzYzFhM2FiNDFlMTZlMzAuLmQ3MDlhYTBjNDk1OWI0
ZTMyYjNmZmMyNzU5YzNkZjA1M2U0ZWYzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApAQCAtNzQs
NiArNzQsNyBAQCBMYXllclRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqIHdl
YlBhZ2UpCiAgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAg
ICAsIG1fbGFzdEZsdXNoVGltZSgwKQogICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2soIltXZWJLaXRdIGxheWVy
Rmx1c2hUaW1lciIsIHN0ZDo6YmluZCgmTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQsIHRoaXMpKQogewogfQogCkBAIC0yNTgsOCArMjU5LDcgQEAgdm9pZCBMYXllclRyZWVI
b3N0R3RrOjpsYXllckZsdXNoVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1l
ckNhbGxiYWNrLmlzU2NoZWR1bGVkKCkgJiYgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI+KCptX3Jvb3RMYXllcikubGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmlu
Z0FuaW1hdGlvbnMoKSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGFyZ2V0RlBTID0gNjA7CiAg
ICAgICAgIGRvdWJsZSBuZXh0Rmx1c2ggPSBzdGQ6Om1heCgoMSAvIHRhcmdldEZQUykgLSAoY3Vy
cmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7Ci0gICAgICAgIG1fbGF5ZXJGbHVz
aFRpbWVyQ2FsbGJhY2suc2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBsYXllckZsdXNoVGlt
ZXIiLCBzdGQ6OmJpbmQoJkxheWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkLCB0
aGlzKSwKLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KG5leHRGbHVzaCkp
LCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFj
ay5zY2hlZHVsZShzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihuZXh0Rmx1c2gpKSk7CiAgICAg
fQogfQogCkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzY2hlZHVs
ZUxheWVyRmx1c2goKQogCiAgICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVy
d2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZyBkcmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNv
cmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCiAgICAgaWYgKCFtX2xheWVy
Rmx1c2hUaW1lckNhbGxiYWNrLmlzU2NoZWR1bGVkKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRp
bWVyQ2FsbGJhY2suc2NoZWR1bGUoIltXZWJLaXRdIGxheWVyRmx1c2hUaW1lciIsIHN0ZDo6Ymlu
ZCgmTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQsIHRoaXMpLCBHREtfUFJJ
T1JJVFlfRVZFTlRTKTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5zY2hlZHVs
ZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0
R3RrOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5h
YmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9MYXllclRyZWVIb3N0R3RrLmgKaW5kZXggZDkzNzBjMjgwYjczYmViMjQ3N2U3ZTEwMGQ5M2Y1
ZjJjZGQ3ZDE1NC4uZWQ1ZDg3NTYyODk2NjY4NTE4ZWQ5MTc5MjE1YTdkNDQwYjIwMzYyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVI
b3N0R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXll
clRyZWVIb3N0R3RrLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VP
dmVybGF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1BlcnNpc3RlbnRNYWluTG9vcFNvdXJjZS5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6
OkdMQ29udGV4dD4gbV9jb250ZXh0OwogICAgIGRvdWJsZSBtX2xhc3RGbHVzaFRpbWU7CiAgICAg
Ym9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKLSAgICBHTWFpbkxvb3BTb3VyY2Ug
bV9sYXllckZsdXNoVGltZXJDYWxsYmFjazsKKyAgICBHUGVyc2lzdGVudE1haW5Mb29wU291cmNl
OjpTdGF0aWMgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242249</attachid>
            <date>2014-11-27 04:23:39 -0800</date>
            <delta_ts>2014-11-27 04:25:38 -0800</delta_ts>
            <desc>WIP #2</desc>
            <filename>wrap.patch</filename>
            <type>text/plain</type>
            <size>13227</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">Y29tbWl0IDVmZjE4NjY2NGY4Y2EyMTE5Y2ZmZGQ4MTQ5NjBmODIwYzg0ZTRhOWIKQXV0aG9yOiBa
YW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgpEYXRlOiAgIFNhdCBOb3YgMjIgMTM6
MDc6MTIgMjAxNCAtMDgwMAoKICAgIFVzZSBHU291cmNlV3JhcCBpbnN0ZWFkIG9mIEdNYWluTG9v
cFNvdXJjZS9HVGhyZWFkTWFpbkxvb3BTb3VyY2UuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDI5ZTg4NGIuLjg1NmE3M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKQEAgLTU0LDYgKzU0LDggQEAgc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIHRleHRUcmFj
a1ByaXZhdGVFdmVudENhbGxiYWNrKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyoKIAogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
cihnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQogICAgIDogSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZShXZWJWVFQpLCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBw
YWQpCisgICAgLCBtX3NhbXBsZVRpbWVySGFuZGxlcigiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSIsIHN0ZDo6YmluZCgmSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSwgdGhpcykpCisg
ICAgLCBtX3N0cmVhbVRpbWVySGFuZGxlcigiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBzdGQ6OmJpbmQoJkluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTdHJlYW1DaGFuZ2VkLCB0
aGlzKSkKIHsKICAgICBtX2V2ZW50UHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZShtX3BhZC5nZXQo
KSwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCiAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4odGV4dFRyYWNrUHJpdmF0ZUV2ZW50Q2FsbGJh
Y2spLCB0aGlzLCAwKTsKQEAgLTgwLDEyICs4MiwxMiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZVNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlKQog
ICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fc2FtcGxlTXV0ZXgpOwogICAgICAgICBtX3BlbmRp
bmdTYW1wbGVzLmFwcGVuZChzYW1wbGUpOwogICAgIH0KLSAgICBtX3NhbXBsZVRpbWVySGFuZGxl
ci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5VHJhY2tPZlNhbXBsZSIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJkluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTYW1wbGUsIHRoaXMpKSk7
CisgICAgbV9zYW1wbGVUaW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzdHJlYW1DaGFuZ2VkKCkKIHsKLSAgICBtX3N0cmVh
bVRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4oc3RkOjpiaW5kKCZJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFj
a09mU3RyZWFtQ2hhbmdlZCwgdGhpcykpKTsKKyAgICBtX3N0cmVhbVRpbWVySGFuZGxlci5zY2hl
ZHVsZSgpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVRyYWNrT2ZTYW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgKaW5kZXggNjIyMmE2OC4uMWYwYzM2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFj
a1ByaXZhdGUuaCIKICNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCi0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjIsOCArNjIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFuZFRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKIAotICAgIEdUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2UgbV9zYW1wbGVUaW1lckhhbmRsZXI7Ci0gICAgR1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZSBtX3N0cmVhbVRpbWVySGFuZGxlcjsKKyAgICBHU291cmNlV3JhcDo6U3Rh
dGljIG1fc2FtcGxlVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9zdHJl
YW1UaW1lckhhbmRsZXI7CiAgICAgZ3Vsb25nIG1fZXZlbnRQcm9iZTsKICAgICBWZWN0b3I8R1Jl
ZlB0cjxHc3RTYW1wbGU+ID4gbV9wZW5kaW5nU2FtcGxlczsKICAgICBTdHJpbmcgbV9zdHJlYW1J
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5k
ZXggYmEzYzdhZi4uMzY3N2YwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKQEAgLTIxMCw2ICsyMTAsMTEgQEAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXll
cikKICAgICAsIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9oYXNW
aWRlbyhmYWxzZSkKICAgICAsIG1faGFzQXVkaW8oZmFsc2UpCisgICAgLCBtX2F1ZGlvVGltZXJI
YW5kbGVyKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdl
ZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJP
ZkF1ZGlvLCB0aGlzKSkKKyAgICAsIG1fdGV4dFRpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQsIHRoaXMpKQorICAgICwgbV92
aWRlb1RpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb0NoYW5nZWQiLCBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZWaWRlbywgdGhpcykpCisgICAgLCBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlcigi
W1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NhcHNDaGFuZ2VkIiwg
c3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlk
ZW9DYXBzLCB0aGlzKSkKKyAgICAsIG1fcmVhZHlUaW1lckhhbmRsZXIoIltXZWJLaXRdIG1lZGlh
UGxheWVyUHJpdmF0ZVJlYWR5U3RhdGVUaW1lb3V0Q2FsbGJhY2siLCBbdGhpc10geyBjaGFuZ2VQ
aXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsgfSkKICAgICAsIG1fdG90YWxCeXRlcygwKQog
ICAgICwgbV9wcmVzZXJ2ZXNQaXRjaChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGVkU3RhdGUoR1NU
X1NUQVRFX1ZPSURfUEVORElORykKQEAgLTM5MSw4ICszOTYsNyBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkK
ICAgICAvLyBBbHNvIGxldHMgcmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUg
Y2hhbmdlIGZvciBhbnkgc3RhdGUgb3RoZXIgdGhhbiBSRUFEWS4KICAgICAvLyBTZWUgYWxzbyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzU0CiAgICAgaWYgKG5l
d1N0YXRlID09IEdTVF9TVEFURV9SRUFEWSAmJiAhbV9yZWFkeVRpbWVySGFuZGxlci5pc1NjaGVk
dWxlZCgpKSB7Ci0gICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc2NoZWR1bGVBZnRlckRlbGF5
KCJbV2ViS2l0XSBtZWRpYVBsYXllclByaXZhdGVSZWFkeVN0YXRlVGltZW91dENhbGxiYWNrIiwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KFt0aGlzXSB7IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NU
QVRFX05VTEwpOyB9KSwKLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKGdSZWFkeVN0
YXRlVGltZXJJbnRlcnZhbCkpOworICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnNjaGVkdWxl
KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKGdSZWFkeVN0YXRlVGltZXJJbnRlcnZhbCkpOwogICAgIH0g
ZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NUX1NUQVRFX1JFQURZICYmIG1fcmVhZHlUaW1lckhhbmRs
ZXIuaXNTY2hlZHVsZWQoKSkgewogICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLmNhbmNlbCgp
OwogICAgIH0KQEAgLTYzOCwxMiArNjQyLDEyIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZWVraW5nKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnZpZGVvQ2hhbmdlZCgpCiB7Ci0gICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hlZHVsZSgi
W1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVmlkZW8sIHRoaXMpKSk7CisgICAgbV92aWRlb1RpbWVySGFuZGxlci5z
Y2hlZHVsZSgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9D
YXBzQ2hhbmdlZCgpCiB7Ci0gICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltX
ZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCIsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMsIHRoaXMpKSk7CisgICAgbV92aWRlb0NhcHNUaW1l
ckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQpAQCAtNjkxLDcgKzY5NSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWQoKQogewotICAgIG1fYXVk
aW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6YXVkaW9DaGFuZ2VkIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvLCB0aGlzKSkpOwor
ICAgIG1fYXVkaW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQpAQCAtNzM0LDcgKzczOCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlv
KCkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dGV4dENoYW5nZWQoKQogewotICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVsZSgi
W1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bm90aWZ5UGxheWVyT2ZUZXh0LCB0aGlzKSkpOworICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hl
ZHVsZSgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aAppbmRleCAwNTYxMzRlLi4yZDdmM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8Z3N0L2dzdC5o
PgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1Z2lucy5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KQEAgLTIwMiwxMSArMjAyLDExIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZDsKICAgICBib29sIG1faGFzVmlkZW87
CiAgICAgYm9vbCBtX2hhc0F1ZGlvOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9h
dWRpb1RpbWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdGV4dFRp
bWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdmlkZW9UaW1lckhh
bmRsZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3ZpZGVvQ2Fwc1RpbWVySGFu
ZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fcmVhZHlUaW1lckhhbmRsZXI7
CisgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2F1ZGlvVGltZXJIYW5kbGVyOworICAgIEdTb3Vy
Y2VXcmFwOjpTdGF0aWMgbV90ZXh0VGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0
aWMgbV92aWRlb1RpbWVySGFuZGxlcjsKKyAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fdmlkZW9D
YXBzVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9yZWFkeVRpbWVySGFu
ZGxlcjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXM7CiAgICAg
VVJMIG1fdXJsOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAKaW5kZXggMGRhMjE4MC4uZmY4ZTg4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
U2lua0dTdHJlYW1lci5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8v
Z3N0dmlkZW9tZXRhLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dNdXRleExvY2tlci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dUaHJlYWRTYWZl
TWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODQsNyArODQsNyBAQCBzdHJ1Y3QgX1dl
YktpdFZpZGVvU2lua1ByaXZhdGUgewogICAgIH0KIAogICAgIEdzdFNhbXBsZSogc2FtcGxlOwot
ICAgIEdNYWluTG9vcFNvdXJjZTo6U2ltcGxlIHRpbWVvdXRTb3VyY2U7CisgICAgR1NvdXJjZVdy
YXA6OkR5bmFtaWMgdGltZW91dFNvdXJjZTsKICAgICBHTXV0ZXggc2FtcGxlTXV0ZXg7CiAgICAg
R0NvbmQgZGF0YUNvbmRpdGlvbjsKIApAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyBHc3RGbG93
UmV0dXJuIHdlYmtpdFZpZGVvU2lua1JlbmRlcihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1
ZmZlciogYnVmCiAgICAgLy8gbG93ZXIgcHJpb3JpdHkgc291cmNlcy4KICAgICAvLyBTZWU6IGh0
dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCiAgICAgR3N0
T2JqZWN0UmVmIHByb3RlY3RvcihHU1RfT0JKRUNUKHNpbmspKTsKLSAgICBwcml2LT50aW1lb3V0
U291cmNlLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMCksIFtwcm90ZWN0b3Jd
IHsgd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrKFdFQktJVF9WSURFT19TSU5LKHByb3Rl
Y3Rvci5nZXQoKSkpOyB9KTsKKyAgICBwcml2LT50aW1lb3V0U291cmNlLnNjaGVkdWxlKFtwcm90
ZWN0b3JdIHsgd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrKFdFQktJVF9WSURFT19TSU5L
KHByb3RlY3Rvci5nZXQoKSkpOyB9KTsKIAogICAgIGdfY29uZF93YWl0KCZwcml2LT5kYXRhQ29u
ZGl0aW9uLCAmcHJpdi0+c2FtcGxlTXV0ZXgpOwogICAgIHJldHVybiBHU1RfRkxPV19PSzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggZmM4MmJlMS4u
NTFmNzVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
MTMxLDExICsxMzEsMTEgQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKIAogICAgIGd1
aW50NjQgcmVxdWVzdGVkT2Zmc2V0OwogCi0gICAgR01haW5Mb29wU291cmNlOjpTaW1wbGUgc3Rh
cnRTb3VyY2U7Ci0gICAgR01haW5Mb29wU291cmNlOjpTaW1wbGUgc3RvcFNvdXJjZTsKLSAgICBH
TWFpbkxvb3BTb3VyY2U6OlNpbXBsZSBuZWVkRGF0YVNvdXJjZTsKLSAgICBHTWFpbkxvb3BTb3Vy
Y2U6OlNpbXBsZSBlbm91Z2hEYXRhU291cmNlOwotICAgIEdNYWluTG9vcFNvdXJjZTo6U2ltcGxl
IHNlZWtTb3VyY2U7CisgICAgR1NvdXJjZVdyYXA6OkR5bmFtaWMgc3RhcnRTb3VyY2U7CisgICAg
R1NvdXJjZVdyYXA6OkR5bmFtaWMgc3RvcFNvdXJjZTsKKyAgICBHU291cmNlV3JhcDo6RHluYW1p
YyBuZWVkRGF0YVNvdXJjZTsKKyAgICBHU291cmNlV3JhcDo6RHluYW1pYyBlbm91Z2hEYXRhU291
cmNlOworICAgIEdTb3VyY2VXcmFwOjpEeW5hbWljIHNlZWtTb3VyY2U7CiAKICAgICBHUmVmUHRy
PEdzdEJ1ZmZlcj4gYnVmZmVyOwogCkBAIC01NDksNyArNTQ5LDcgQEAgc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQs
IEdzdFN0YXQKICAgICB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBB
VVNFRCIpOwogICAgICAgICBHc3RPYmplY3RSZWYgcHJvdGVjdG9yKEdTVF9PQkpFQ1Qoc3JjKSk7
Ci0gICAgICAgIHByaXYtPnN0YXJ0U291cmNlLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMoMCksIFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU3RhcnQoV0VCS0lUX1dFQl9TUkMo
cHJvdGVjdG9yLmdldCgpKSk7IH0pOworICAgICAgICBwcml2LT5zdGFydFNvdXJjZS5zY2hlZHVs
ZShbcHJvdGVjdG9yXSB7IHdlYktpdFdlYlNyY1N0YXJ0KFdFQktJVF9XRUJfU1JDKHByb3RlY3Rv
ci5nZXQoKSkpOyB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1NUQVRF
X0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXQKICAgICAgICAgLy8gY2FuY2VsIHBlbmRpbmcgc291cmNlcwogICAgICAgICBy
ZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOwogICAgICAgICBHc3RPYmplY3RSZWYgcHJvdGVjdG9y
KEdTVF9PQkpFQ1Qoc3JjKSk7Ci0gICAgICAgIHByaXYtPnN0b3BTb3VyY2Uuc2NoZWR1bGUoc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcygwKSwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRXZWJTcmNTdG9w
KFdFQktJVF9XRUJfU1JDKHByb3RlY3Rvci5nZXQoKSkpOyB9KTsKKyAgICAgICAgcHJpdi0+c3Rv
cFNvdXJjZS5zY2hlZHVsZShbcHJvdGVjdG9yXSB7IHdlYktpdFdlYlNyY1N0b3AoV0VCS0lUX1dF
Ql9TUkMocHJvdGVjdG9yLmdldCgpKSk7IH0pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ZGVmYXVsdDoKQEAgLTcwMiw3ICs3MDIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVk
RGF0YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEdzdE9iamVjdFJlZiBwcm90ZWN0b3IoR1NUX09CSkVDVChzcmMp
KTsKLSAgICBwcml2LT5uZWVkRGF0YVNvdXJjZS5zY2hlZHVsZShzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzKDApLCBbcHJvdGVjdG9yXSB7IHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKFdFQktJ
VF9XRUJfU1JDKHByb3RlY3Rvci5nZXQoKSkpOyB9KTsKKyAgICBwcml2LT5uZWVkRGF0YVNvdXJj
ZS5zY2hlZHVsZShbcHJvdGVjdG9yXSB7IHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKFdFQktJ
VF9XRUJfU1JDKHByb3RlY3Rvci5nZXQoKSkpOyB9KTsKIH0KIAogc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKQEAgLTczMyw3ICs3MzMs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3Bv
aW50ZXIgdXNlckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdzdE9iamVjdFJlZiBwcm90
ZWN0b3IoR1NUX09CSkVDVChzcmMpKTsKLSAgICBwcml2LT5lbm91Z2hEYXRhU291cmNlLnNjaGVk
dWxlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMCksIFtwcm90ZWN0b3JdIHsgd2ViS2l0V2Vi
U3JjRW5vdWdoRGF0YU1haW5DYihXRUJLSVRfV0VCX1NSQyhwcm90ZWN0b3IuZ2V0KCkpKTsgfSk7
CisgICAgcHJpdi0+ZW5vdWdoRGF0YVNvdXJjZS5zY2hlZHVsZShbcHJvdGVjdG9yXSB7IHdlYktp
dFdlYlNyY0Vub3VnaERhdGFNYWluQ2IoV0VCS0lUX1dFQl9TUkMocHJvdGVjdG9yLmdldCgpKSk7
IH0pOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKFdlYktpdFdlYlNy
Yyogc3JjKQpAQCAtNzYxLDcgKzc2MSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNT
ZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiAgICAg
cHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OwogCiAgICAgR3N0T2JqZWN0UmVmIHByb3Rl
Y3RvcihHU1RfT0JKRUNUKHNyYykpOwotICAgIHByaXYtPnNlZWtTb3VyY2Uuc2NoZWR1bGUoc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcygwKSwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRXZWJTcmNTZWVr
TWFpbkNiKFdFQktJVF9XRUJfU1JDKHByb3RlY3Rvci5nZXQoKSkpOyB9KTsKKyAgICBwcml2LT5z
ZWVrU291cmNlLnNjaGVkdWxlKFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU2Vla01haW5DYihX
RUJLSVRfV0VCX1NSQyhwcm90ZWN0b3IuZ2V0KCkpKTsgfSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242250</attachid>
            <date>2014-11-27 04:25:38 -0800</date>
            <delta_ts>2015-06-10 02:19:08 -0700</delta_ts>
            <desc>Proper WIP #2</desc>
            <filename>wrap.patch</filename>
            <type>text/plain</type>
            <size>21645</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTY5ODg5Mi4uZjRiYWQ4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTEsNiArMSw3IEBACiBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgIGdvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5j
cHAKKyAgICBnb2JqZWN0L0dTb3VyY2VXcmFwLmNwcAogICAgIGdvYmplY3QvR1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaCBiL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3Au
aAppbmRleCAzMjAxNzZkLi40ODI2NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SdW5M
b29wLmgKKysrIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCkBAIC0zNyw3ICszNyw3IEBACiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJj
ZVdyYXAuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oRUZMKQpAQCAtMTAxLDcgKzEwMSw3IEBA
IHB1YmxpYzoKICAgICAgICAgRWNvcmVfVGltZXIqIG1fdGltZXI7CiAgICAgICAgIGJvb2wgbV9p
c1JlcGVhdGluZzsKICNlbGlmIFVTRShHTElCKQotICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90
aW1lclNvdXJjZTsKKyAgICAgICAgR1NvdXJjZVdyYXA6OkR5bmFtaWMgbV90aW1lclNvdXJjZTsK
ICNlbmRpZgogICAgIH07CiAKQEAgLTE2NCw2ICsxNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX3J1bkxvb3BDb250ZXh0OwogICAgIFZlY3RvcjxH
UmVmUHRyPEdNYWluTG9vcD4+IG1fcnVuTG9vcE1haW5Mb29wczsKKyAgICBHU291cmNlV3JhcDo6
U3RhdGljIG1fd29ya1NvdXJjZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ29iamVjdC9HU291cmNlV3JhcC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dT
b3VyY2VXcmFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNhMGE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HU291cmNlV3JhcC5j
cHAKQEAgLTAsMCArMSwyMjkgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU291
cmNlV3JhcC5oIgorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CisjaW5j
bHVkZSA8Y3N0ZGlvPgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIHZvaWQgZGVzdHJveVZv
aWRDYWxsYmFjayhncG9pbnRlciBkYXRhKQoreworICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Kj4oZGF0YSk7CisgICAgZGVsZXRlIGZ1
bmN0aW9uOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95Qm9vbENhbGxiYWNrKGdwb2ludGVyIGRh
dGEpCit7CisgICAgYXV0byogZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoKT4qPihkYXRhKTsKKyAgICBkZWxldGUgZnVuY3Rpb247Cit9CisKK0dTb3VyY2VX
cmFwOjpCYXNlOjpCYXNlKCkKK3sKK30KKworR1NvdXJjZVdyYXA6OkJhc2U6On5CYXNlKCkKK3sK
KyAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKK30KKworYm9vbCBHU291cmNl
V3JhcDo6QmFzZTo6aXNTY2hlZHVsZWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3NvdXJjZSk7
CisgICAgcmV0dXJuIGdfc291cmNlX2dldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgpKSAhPSAt
MTsKK30KKworYm9vbCBHU291cmNlV3JhcDo6QmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAg
IHJldHVybiBpc1NjaGVkdWxlZCgpIHx8IHNvdXJjZSgpLT5kaXNwYXRjaGluZzsKK30KKwordm9p
ZCBHU291cmNlV3JhcDo6QmFzZTo6aW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgcHJp
b3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoIW1fc291cmNlKTsK
KyAgICBtX3NvdXJjZSA9IGdfc291cmNlX25ldygmc291cmNlRnVuY3Rpb25zLCBzaXplb2YoU291
cmNlKSk7CisgICAgc291cmNlKCktPmRlbGF5ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygw
KTsKKyAgICBzb3VyY2UoKS0+ZGlzcGF0Y2hpbmcgPSBmYWxzZTsKKworICAgIGdfc291cmNlX3Nl
dF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklP
UklUWV9ERUZBVUxUX0lETEUpCisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJj
ZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgp
LCBjb250ZXh0KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6QmFzZTo6c2NoZWR1bGUoc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcyBkZWxheSkKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAg
IHNvdXJjZSgpLT5kZWxheSA9IGRlbGF5OworCisgICAgZ2ludDY0IHJlYWR5VGltZSA9IGdfc291
cmNlX2dldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgpKTsKKyAgICBnaW50NjQgdGFyZ2V0VGlt
ZSA9IGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBkZWxheS5jb3VudCgpOworICAgIGlmIChyZWFk
eVRpbWUgPT0gLTEpCisgICAgICAgIHJlYWR5VGltZSA9IHRhcmdldFRpbWU7CisgICAgZWxzZQor
ICAgICAgICByZWFkeVRpbWUgPSBzdGQ6Om1pbjxnaW50NjQ+KHJlYWR5VGltZSwgdGFyZ2V0VGlt
ZSk7CisKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgcmVhZHlU
aW1lKTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6QmFzZTo6Y2FuY2VsKCkKK3sKKyAgICBBU1NF
UlQobV9zb3VyY2UpOworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgp
LCAtMSk7Cit9CisKK0dTb3VyY2VGdW5jcyBHU291cmNlV3JhcDo6QmFzZTo6c291cmNlRnVuY3Rp
b25zID0geworICAgIG51bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRyLCAvLyBjaGVjawor
ICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSogc291cmNlLCBHU291cmNlRnVuYyBjYWxs
YmFjaywgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIEFTU0VSVChz
b3VyY2UpOworICAgICAgICBDYWxsYmFja0NvbnRleHQgY29udGV4dHsgKnJlaW50ZXJwcmV0X2Nh
c3Q8U291cmNlKj4oc291cmNlKSwgZGF0YSB9OworICAgICAgICByZXR1cm4gY2FsbGJhY2soJmNv
bnRleHQpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxpemUKKyAgICBudWxscHRyLCAv
LyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9tYXJzaGFsbAorfTsK
KworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OkJhc2U6OnN0YXRpY1ZvaWRDYWxsYmFjayhncG9pbnRl
ciBkYXRhKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqcmVpbnRlcnByZXRfY2FzdDxDYWxsYmFj
a0NvbnRleHQqPihkYXRhKTsKKyAgICBjb250ZXh0LnNvdXJjZS5kaXNwYXRjaGluZyA9IHRydWU7
CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoJmNvbnRleHQuc291cmNlLmJhc2VTb3VyY2Us
IC0xKTsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gKnJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpmdW5j
dGlvbjx2b2lkICgpPio+KGNvbnRleHQuZGF0YSk7CisgICAgZnVuY3Rpb24oKTsKKworICAgIGNv
bnRleHQuc291cmNlLmRpc3BhdGNoaW5nID0gZmFsc2U7CisgICAgcmV0dXJuIEdfU09VUkNFX0NP
TlRJTlVFOworfQorCitnYm9vbGVhbiBHU291cmNlV3JhcDo6QmFzZTo6ZHluYW1pY1ZvaWRDYWxs
YmFjayhncG9pbnRlciBkYXRhKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqcmVpbnRlcnByZXRf
Y2FzdDxDYWxsYmFja0NvbnRleHQqPihkYXRhKTsKKyAgICBjb250ZXh0LnNvdXJjZS5kaXNwYXRj
aGluZyA9IHRydWU7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoJmNvbnRleHQuc291cmNl
LmJhc2VTb3VyY2UsIC0xKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soJmNvbnRleHQuc291
cmNlLmJhc2VTb3VyY2UsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgYXV0byYg
ZnVuY3Rpb24gPSAqcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Kj4oY29u
dGV4dC5kYXRhKTsKKyAgICBmdW5jdGlvbigpOworCisgICAgY29udGV4dC5zb3VyY2UuZGlzcGF0
Y2hpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Cit9CisKK2dib29s
ZWFuIEdTb3VyY2VXcmFwOjpCYXNlOjpkeW5hbWljQm9vbENhbGxiYWNrKGdwb2ludGVyIGRhdGEp
Cit7CisgICAgYXV0byYgY29udGV4dCA9ICpyZWludGVycHJldF9jYXN0PENhbGxiYWNrQ29udGV4
dCo+KGRhdGEpOworICAgIGNvbnRleHQuc291cmNlLmRpc3BhdGNoaW5nID0gdHJ1ZTsKKyAgICBn
X3NvdXJjZV9zZXRfcmVhZHlfdGltZSgmY29udGV4dC5zb3VyY2UuYmFzZVNvdXJjZSwgLTEpOwor
CisgICAgYXV0byYgZnVuY3Rpb24gPSAqcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmZ1bmN0aW9uPGJv
b2wgKCk+Kj4oY29udGV4dC5kYXRhKTsKKyAgICBpZiAoZnVuY3Rpb24oKSkKKyAgICAgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUoJmNvbnRleHQuc291cmNlLmJhc2VTb3VyY2UsIGdfZ2V0X21v
bm90b25pY190aW1lKCkgKyBjb250ZXh0LnNvdXJjZS5kZWxheS5jb3VudCgpKTsKKyAgICBlbHNl
CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjaygmY29udGV4dC5zb3VyY2UuYmFzZVNvdXJj
ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBjb250ZXh0LnNvdXJjZS5kaXNw
YXRjaGluZyA9IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworR1Nv
dXJjZVdyYXA6OlN0YXRpYzo6U3RhdGljKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4mJiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgaW5pdGlhbGl6ZShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBwcmlvcml0eSwg
Y29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OlN0YXRpYzo6aW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIGludCBwcmlv
cml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIEJhc2U6OmluaXRpYWxpemUobmFt
ZSwgcHJpb3JpdHksIGNvbnRleHQpOworCisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291
cmNlLmdldCgpLCBzdGF0aWNfY2FzdDxHU291cmNlRnVuYz4oc3RhdGljVm9pZENhbGxiYWNrKSwK
KyAgICAgICAgbmV3IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4oV1RGOjptb3ZlKGZ1bmN0aW9uKSks
IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95Vm9pZENhbGxiYWNrKSk7Cit9CisK
K3ZvaWQgR1NvdXJjZVdyYXA6OlN0YXRpYzo6c2NoZWR1bGUoc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcyBkZWxheSkKK3sKKyAgICBCYXNlOjpzY2hlZHVsZShkZWxheSk7Cit9CisKK3ZvaWQgR1Nv
dXJjZVdyYXA6OlN0YXRpYzo6Y2FuY2VsKCkKK3sKKyAgICBCYXNlOjpjYW5jZWwoKTsKK30KKwor
R1NvdXJjZVdyYXA6OkR5bmFtaWM6OkR5bmFtaWMoY29uc3QgY2hhciogbmFtZSwgaW50IHByaW9y
aXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgQmFzZTo6aW5pdGlhbGl6ZShuYW1l
LCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkR5bmFtaWM6OnNj
aGVkdWxlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kcyBkZWxheSkKK3sKKyAgICAvLyBFc3RhYmxpc2ggdGhlIGNhbGxiYWNrIGJlZm9y
ZSBzY2hlZHVsaW5nLgorICAgIEFTU0VSVChtX3NvdXJjZSk7CisgICAgZ19zb3VyY2Vfc2V0X2Nh
bGxiYWNrKG1fc291cmNlLmdldCgpLCBzdGF0aWNfY2FzdDxHU291cmNlRnVuYz4oZHluYW1pY1Zv
aWRDYWxsYmFjayksCisgICAgICAgIG5ldyBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KFdURjo6bW92
ZShmdW5jdGlvbikpLCBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVzdHJveVZvaWRDYWxs
YmFjaykpOworCisgICAgQmFzZTo6c2NoZWR1bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VX
cmFwOjpEeW5hbWljOjpzY2hlZHVsZShzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+JiYgZnVuY3Rpb24s
IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkpCit7CisgICAgLy8gRXN0YWJsaXNoIHRo
ZSBjYWxsYmFjayBiZWZvcmUgc2NoZWR1bGluZy4KKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2so
bV9zb3VyY2UuZ2V0KCksIHN0YXRpY19jYXN0PEdTb3VyY2VGdW5jPihkeW5hbWljQm9vbENhbGxi
YWNrKSwKKyAgICAgICAgbmV3IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oV1RGOjptb3ZlKGZ1bmN0
aW9uKSksIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95Qm9vbENhbGxiYWNrKSk7
CisKKyAgICBCYXNlOjpzY2hlZHVsZShkZWxheSk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkR5
bmFtaWM6OmNhbmNlbCgpCit7CisgICAgQmFzZTo6Y2FuY2VsKCk7CisKKyAgICBnX3NvdXJjZV9z
ZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwor
fQorCitHU291cmNlUXVldWU6OkdTb3VyY2VRdWV1ZSgpCit7CisgICAgZ19tdXRleF9pbml0KCZt
X211dGV4KTsKK30KKworR1NvdXJjZVF1ZXVlOjpHU291cmNlUXVldWUoY29uc3QgY2hhciogbmFt
ZSwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX3NvdXJjZVdy
YXAobmFtZSwgc3RkOjpiaW5kKCZHU291cmNlUXVldWU6OmRpc3BhdGNoUXVldWUsIHRoaXMpLCBw
cmlvcml0eSwgY29udGV4dCkKK3sKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOworfQorCitH
U291cmNlUXVldWU6On5HU291cmNlUXVldWUoKQoreworICAgIGdfbXV0ZXhfY2xlYXIoJm1fbXV0
ZXgpOworfQorCit2b2lkIEdTb3VyY2VRdWV1ZTo6aW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1l
LCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX3NvdXJjZVdy
YXAuaW5pdGlhbGl6ZShuYW1lLCBzdGQ6OmJpbmQoJkdTb3VyY2VRdWV1ZTo6ZGlzcGF0Y2hRdWV1
ZSwgdGhpcyksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHU291cmNlUXVldWU6OnF1
ZXVlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBHTXV0ZXhMb2Nr
ZXI8R011dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIG1fcXVldWUuYXBwZW5kKFdURjo6bW92ZShm
dW5jdGlvbikpOworCisgICAgbV9zb3VyY2VXcmFwLnNjaGVkdWxlKCk7Cit9CisKK3ZvaWQgR1Nv
dXJjZVF1ZXVlOjpkaXNwYXRjaFF1ZXVlKCkKK3sKKyAgICBkZWNsdHlwZShtX3F1ZXVlKSBxdWV1
ZTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgICAgIHF1ZXVlID0gV1RGOjptb3ZlKG1fcXVldWUpOworICAgIH0KKworICAgIGZvciAoYXV0
byYgZnVuY3Rpb24gOiBxdWV1ZSkKKyAgICAgICAgZnVuY3Rpb24oKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dTb3VyY2VXcmFw
LmggYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ZDZiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIEdT
b3VyY2VXcmFwX2gKKyNkZWZpbmUgR1NvdXJjZVdyYXBfaAorCisjaW5jbHVkZSA8Y2hyb25vPgor
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBHU291cmNlV3JhcCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR1NvdXJjZVdyYXApOworcHJpdmF0ZToKKyAgICBj
bGFzcyBCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJhc2UoKTsKKyAgICAgICAgfkJhc2Uo
KTsKKworICAgICAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IGNoYXIqIG5hbWUsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CisgICAgICAg
IHZvaWQgc2NoZWR1bGUoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyk7CisgICAgICAgIHZvaWQg
Y2FuY2VsKCk7CisKKyAgICAgICAgc3RhdGljIEdTb3VyY2VGdW5jcyBzb3VyY2VGdW5jdGlvbnM7
CisgICAgICAgIHN0YXRpYyBnYm9vbGVhbiBzdGF0aWNWb2lkQ2FsbGJhY2soZ3BvaW50ZXIpOwor
ICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gZHluYW1pY1ZvaWRDYWxsYmFjayhncG9pbnRlcik7Cisg
ICAgICAgIHN0YXRpYyBnYm9vbGVhbiBkeW5hbWljQm9vbENhbGxiYWNrKGdwb2ludGVyKTsKKwor
ICAgICAgICBzdHJ1Y3QgU291cmNlIHsKKyAgICAgICAgICAgIEdTb3VyY2UgYmFzZVNvdXJjZTsK
KyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXk7CisgICAgICAgICAg
ICBib29sIGRpc3BhdGNoaW5nOworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBDYWxsYmFj
a0NvbnRleHQgeworICAgICAgICAgICAgU291cmNlJiBzb3VyY2U7CisgICAgICAgICAgICBncG9p
bnRlciBkYXRhOworICAgICAgICB9OworCisgICAgICAgIFNvdXJjZSogc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTb3VyY2UqPihtX3NvdXJjZS5nZXQoKSk7IH0KKyAg
ICAgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKKyAgICB9OworCitwdWJsaWM6CisgICAg
Y2xhc3MgU3RhdGljIDogcHVibGljIEJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhdGlj
KCkgeyB9CisgICAgICAgIFN0YXRpYyhjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+JiYsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFLCBHTWFpbkNv
bnRleHQqID0gbnVsbHB0cik7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlf
REVGQVVMVF9JRExFLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBz
Y2hlZHVsZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSk7CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CisgICAgfTsKKworICAgIGNsYXNzIER5
bmFtaWMgOiBwdWJsaWMgQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBEeW5hbWljKGNvbnN0
IGNoYXIqIG5hbWUsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFLCBHTWFp
bkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZShzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+JiYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgPSBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzKDApKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZShzdGQ6OmZ1bmN0aW9uPGJv
b2wgKCk+JiYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgPSBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzKDApKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKyAgICB9OworfTsKKworY2xhc3Mg
R1NvdXJjZVF1ZXVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHU291cmNlUXVldWUpOwor
cHVibGljOgorICAgIEdTb3VyY2VRdWV1ZSgpOworICAgIEdTb3VyY2VRdWV1ZShjb25zdCBjaGFy
KiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxUX0lETEUsIEdNYWluQ29udGV4dCog
PSBudWxscHRyKTsKKyAgICB+R1NvdXJjZVF1ZXVlKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUo
Y29uc3QgY2hhciosIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFLCBHTWFp
bkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICB2b2lkIHF1ZXVlKHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4mJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaXNwYXRjaFF1ZXVlKCk7CisKKyAgICBH
U291cmNlV3JhcDo6U3RhdGljIG1fc291cmNlV3JhcDsKKyAgICBHTXV0ZXggbV9tdXRleDsKKyAg
ICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPiwgMTY+IG1fcXVldWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpHU291cmNlV3JhcDsKK3VzaW5nIFdURjo6R1Nv
dXJjZVF1ZXVlOworCisjZW5kaWYgLy8gR1NvdXJjZVdyYXBfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BH
dGsuY3BwCmluZGV4IDhmYWE0ODAuLmMwODk3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2d0ay9SdW5Mb29wR3RrLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvUnVuTG9vcEd0ay5j
cHAKQEAgLTQwLDYgKzQwLDkgQEAgUnVuTG9vcDo6UnVuTG9vcCgpCiAgICAgR1JlZlB0cjxHTWFp
bkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fcnVuTG9v
cENvbnRleHQuZ2V0KCksIEZBTFNFKSk7CiAgICAgQVNTRVJUKGlubmVybW9zdExvb3ApOwogICAg
IG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoaW5uZXJtb3N0TG9vcCk7CisKKyAgICBtX3dvcmtT
b3VyY2UuaW5pdGlhbGl6ZSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpiaW5kKCZSdW5M
b29wOjpwZXJmb3JtV29yaywgdGhpcyksCisgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9y
dW5Mb29wQ29udGV4dC5nZXQoKSk7CiB9CiAKIFJ1bkxvb3A6On5SdW5Mb29wKCkKQEAgLTk5LDE1
ICsxMDIsMTMgQEAgdm9pZCBSdW5Mb29wOjpzdG9wKCkKIAogdm9pZCBSdW5Mb29wOjp3YWtlVXAo
KQogewotICAgIFJlZlB0cjxSdW5Mb29wPiBydW5Mb29wKHRoaXMpOwotICAgIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFJ1bkxvb3Agd29yayIs
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihbcnVuTG9vcF0gewotICAgICAgICBydW5Mb29wLT5wZXJm
b3JtV29yaygpOwotICAgIH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fcnVuTG9v
cENvbnRleHQuZ2V0KCkpOworICAgIG1fd29ya1NvdXJjZS5zY2hlZHVsZSgpOwogICAgIGdfbWFp
bl9jb250ZXh0X3dha2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6
VGltZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCYgcnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChy
dW5Mb29wKQorICAgICwgbV90aW1lclNvdXJjZSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG1fcnVuTG9vcC5tX3J1bkxvb3BDb250ZXh0LmdldCgpKQogewog
fQogCkBAIC0xMTgsOCArMTE5LDggQEAgUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkK
IAogdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBmaXJlSW50ZXJ2YWwsIGJv
b2wgcmVwZWF0KQogewotICAgIG1fdGltZXJTb3VyY2Uuc2NoZWR1bGVBZnRlckRlbGF5KCJbV2Vi
S2l0XSBSdW5Mb29wOjpUaW1lciIsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oW3RoaXMsIHJlcGVh
dF0geyBmaXJlZCgpOyByZXR1cm4gcmVwZWF0OyB9KSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0
aW9uPGRvdWJsZT4oZmlyZUludGVydmFsKSksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwg
bV9ydW5Mb29wLm1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOworICAgIG1fdGltZXJTb3VyY2Uuc2No
ZWR1bGUoW3RoaXMsIHJlcGVhdF0geyBmaXJlZCgpOyByZXR1cm4gcmVwZWF0OyB9LAorICAgICAg
ICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihz
dGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSk7CiB9CiAKIHZvaWQg
UnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaApp
bmRleCAwZWQzMTM3Li5mNDU1Y2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCkBA
IC00MSw2ICs0MSwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7CiAK
K2NsYXNzIEdzdE9iamVjdFJlZiB7CitwdWJsaWM6CisgICAgR3N0T2JqZWN0UmVmKEdzdE9iamVj
dCogb2JqZWN0KQorICAgICAgICA6IG1fb2JqZWN0KEdTVF9PQkpFQ1QoZ3N0X29iamVjdF9yZWYo
b2JqZWN0KSkpCisgICAgeworICAgIH0KKworICAgIH5Hc3RPYmplY3RSZWYoKQorICAgIHsKKyAg
ICAgICAgZ3N0X29iamVjdF91bnJlZihtX29iamVjdCk7CisgICAgfQorCisgICAgR3N0T2JqZWN0
UmVmKGNvbnN0IEdzdE9iamVjdFJlZiYgb3RoZXIpCisgICAgICAgIDogbV9vYmplY3QoR1NUX09C
SkVDVChnc3Rfb2JqZWN0X3JlZihvdGhlci5tX29iamVjdCkpKQorICAgIHsKKyAgICB9CisKKyAg
ICBHc3RPYmplY3QqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisKK3ByaXZhdGU6
CisgICAgR3N0T2JqZWN0KiBtX29iamVjdDsKK307CisKIGlubGluZSBib29sIHdlYmtpdEdzdENo
ZWNrVmVyc2lvbihndWludCBtYWpvciwgZ3VpbnQgbWlub3IsIGd1aW50IG1pY3JvKQogewogICAg
IGd1aW50IGN1cnJlbnRNYWpvciwgY3VycmVudE1pbm9yLCBjdXJyZW50TWljcm8sIGN1cnJlbnRO
YW5vOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRleCAyNTVlNzYwLi5mZjhl
ODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMzcsNyArMzcsNyBA
QAogI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+Ci0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC03
MCw2ICs3MCw3IEBAIHN0YXRpYyBndWludCB3ZWJraXRWaWRlb1NpbmtTaWduYWxzW0xBU1RfU0lH
TkFMXSA9IHsgMCwgfTsKIAogc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKICAgICBf
V2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSgpCisgICAgICAgIDogdGltZW91dFNvdXJjZSgiW1dlYktp
dF0gd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrIikKICAgICB7CiAgICAgICAgIGdfbXV0
ZXhfaW5pdCgmc2FtcGxlTXV0ZXgpOwogICAgICAgICBnX2NvbmRfaW5pdCgmZGF0YUNvbmRpdGlv
bik7CkBAIC04Myw3ICs4NCw3IEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7CiAg
ICAgfQogCiAgICAgR3N0U2FtcGxlKiBzYW1wbGU7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZSB0aW1lb3V0U291cmNlOworICAgIEdTb3VyY2VXcmFwOjpEeW5hbWljIHRpbWVvdXRTb3Vy
Y2U7CiAgICAgR011dGV4IHNhbXBsZU11dGV4OwogICAgIEdDb25kIGRhdGFDb25kaXRpb247CiAK
QEAgLTIxOCw5ICsyMTksOCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtS
ZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1ZgogICAgIC8vIFRoaXMg
c2hvdWxkIGxpa2VseSB1c2UgYSBsb3dlciBwcmlvcml0eSwgYnV0IGdsaWIgY3VycmVudGx5IHN0
YXJ2ZXMKICAgICAvLyBsb3dlciBwcmlvcml0eSBzb3VyY2VzLgogICAgIC8vIFNlZTogaHR0cHM6
Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDgzMC4KLSAgICBnc3Rfb2Jq
ZWN0X3JlZihzaW5rKTsKLSAgICBwcml2LT50aW1lb3V0U291cmNlLnNjaGVkdWxlKCJbV2ViS2l0
XSB3ZWJraXRWaWRlb1NpbmtUaW1lb3V0Q2FsbGJhY2siLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4o
c3RkOjpiaW5kKHdlYmtpdFZpZGVvU2lua1RpbWVvdXRDYWxsYmFjaywgc2luaykpLCBHX1BSSU9S
SVRZX0RFRkFVTFQsCi0gICAgICAgIFtzaW5rXSB7IGdzdF9vYmplY3RfdW5yZWYoc2luayk7IH0p
OworICAgIEdzdE9iamVjdFJlZiBwcm90ZWN0b3IoR1NUX09CSkVDVChzaW5rKSk7CisgICAgcHJp
di0+dGltZW91dFNvdXJjZS5zY2hlZHVsZShbcHJvdGVjdG9yXSB7IHdlYmtpdFZpZGVvU2lua1Rp
bWVvdXRDYWxsYmFjayhXRUJLSVRfVklERU9fU0lOSyhwcm90ZWN0b3IuZ2V0KCkpKTsgfSk7CiAK
ICAgICBnX2NvbmRfd2FpdCgmcHJpdi0+ZGF0YUNvbmRpdGlvbiwgJnByaXYtPnNhbXBsZU11dGV4
KTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NoYXJlZFRpbWVyR3RrLmNwcAppbmRleCA3NGM2ZjcwLi5kODg3MTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKQEAgLTI4LDEyICsy
OCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCiAK
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HU291cmNlV3JhcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBH
TWFpbkxvb3BTb3VyY2UgZ1NoYXJlZFRpbWVyOwogc3RhdGljIHZvaWQgKCpzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24pKCk7CitzdGF0aWMgdm9pZCBzaGFyZWRUaW1lckZpcmVkKCkgeyBzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24oKTsgfQorCisvLyBHX1BSSU9SSVRZX0hJR0hfSURMRSArIDIwIGlz
IEdES19QUklPUklUWV9SRURSQVcsIGJ1dCB3ZQorLy8gZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24g
R0RLIGhlcmUganVzdCB0byB1c2UgYSBjb25zdGFudC4KK3N0YXRpYyBHU291cmNlV3JhcDo6U3Rh
dGljIGdTaGFyZWRUaW1lcigiW1dlYktpdF0gc2hhcmVkVGltZXJUaW1lb3V0Q2FsbGJhY2siLAor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4oc2hhcmVkVGltZXJGaXJlZCksIEdfUFJJT1JJVFlf
SElHSF9JRExFICsgMjApOwogCiB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lk
ICgqZikoKSkKIHsKQEAgLTQ1LDExICs1MCw3IEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKHZvaWQgKCpmKSgpKQogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3Vi
bGUgaW50ZXJ2YWwpCiB7CiAgICAgQVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik7Ci0K
LSAgICAvLyBUaGlzIGlzIEdES19QUklPUklUWV9SRURSQVcsIGJ1dCB3ZSBkb24ndCB3YW50IHRv
IGRlcGVuZCBvbiBHREsgaGVyZSBqdXN0IHRvIHVzZSBhIGNvbnN0YW50LgotICAgIHN0YXRpYyBj
b25zdCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0hJR0hfSURMRSArIDIwOwotICAgIGdTaGFy
ZWRUaW1lci5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIHNoYXJlZFRpbWVyVGltZW91dENh
bGxiYWNrIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiks
Ci0gICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3Nl
Y29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGludGVydmFsKSksIHByaW9yaXR5
KTsKKyAgICBnU2hhcmVkVGltZXIuc2NoZWR1bGUoc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4o
aW50ZXJ2YWwpKSk7CiB9CiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmgKaW5kZXggOTNjN2U3OC4uMjVhNDBhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdUSykKICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HU291cmNlV3JhcC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNl
bGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlRWZsLmg+CkBAIC05Niw2
ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOwogICAgIEdSZWZQ
dHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKICAgICBHTWFpbkxvb3BTb3VyY2UgbV9zb2NrZXRF
dmVudFNvdXJjZTsKKyAgICBHU291cmNlUXVldWUgbV9kaXNwYXRjaFF1ZXVlOwogI2VsaWYgUExB
VEZPUk0oRUZMKQogICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBtX2Rpc3BhdGNoUXVldWU7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5k
ZXggYmQ4NTJkYS4uYWJlOTA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Z3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAKQEAgLTM5LDYgKzM5LDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBRT1MpCiAgICAgbV9ldmVudExvb3AgPSBhZG9w
dEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwogICAg
IEFTU0VSVChtX2V2ZW50TG9vcCk7CiAKKyAgICBtX2Rpc3BhdGNoUXVldWUuaW5pdGlhbGl6ZSgi
W1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaCIsIEdfUFJJT1JJVFlfREVGQVVMVF9JRExFLCBt
X2V2ZW50Q29udGV4dC5nZXQoKSk7CisKICAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBs
ZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1
ZS4KICAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwg
YnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCiAgICAgLy8gd2hpY2ggaXMg
dGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KQEAgLTEwNyw5ICsx
MDksNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQp
CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0
aW9uKQogewotICAgIHJlZigpOwotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmREZWxl
dGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZTo6ZGlzcGF0Y2giLCBXVEY6Om1vdmUoZnVu
Y3Rpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFt0aGlzXSB7IGRlcmVmKCk7IH0s
IG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUucXVldWUoV1RGOjpt
b3ZlKGZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6
Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5j
dGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCmluZGV4IGVhYTYzZTEuLjBhNTYxZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmNwcApAQCAtNzQsNiArNzQsNyBAQCBMYXllclRyZWVIb3N0R3RrOjpMYXllclRy
ZWVIb3N0R3RrKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1fbGFzdEZsdXNoVGltZSgwKQogICAgICwgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2soIltXZWJLaXRdIGxheWVyRmx1c2hUaW1lciIsIHN0ZDo6YmluZCgmTGF5ZXJUcmVlSG9z
dEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQsIHRoaXMpLCBHREtfUFJJT1JJVFlfRVZFTlRTKQog
ewogfQogCkBAIC0yNTgsOCArMjU5LDcgQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpsYXllckZs
dXNoVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLmlzU2No
ZWR1bGVkKCkgJiYgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RM
YXllcikubGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkg
ewogICAgICAgICBjb25zdCBkb3VibGUgdGFyZ2V0RlBTID0gNjA7CiAgICAgICAgIGRvdWJsZSBu
ZXh0Rmx1c2ggPSBzdGQ6Om1heCgoMSAvIHRhcmdldEZQUykgLSAoY3VycmVudFRpbWUoKSAtIG1f
bGFzdEZsdXNoVGltZSksIDAuMCk7Ci0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2su
c2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQo
JkxheWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkLCB0aGlzKSwKLSAgICAgICAg
ICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+
KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KG5leHRGbHVzaCkpLCBHREtfUFJJT1JJVFlf
RVZFTlRTKTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5zY2hlZHVsZShzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNo
cm9ubzo6ZHVyYXRpb248ZG91YmxlPihuZXh0Rmx1c2gpKSk7CiAgICAgfQogfQogCkBAIC0zNTks
NyArMzU5LDcgQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzY2hlZHVsZUxheWVyRmx1c2goKQog
CiAgICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50
IGhhbmRsaW5nIGR1cmluZyBkcmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGlj
aCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCiAgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrLmlzU2NoZWR1bGVkKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2suc2No
ZWR1bGUoIltXZWJLaXRdIGxheWVyRmx1c2hUaW1lciIsIHN0ZDo6YmluZCgmTGF5ZXJUcmVlSG9z
dEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQsIHRoaXMpLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsK
KyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5zY2hlZHVsZSgpOwogfQogCiB2b2lk
IExheWVyVHJlZUhvc3RHdGs6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxh
eWVyRmx1c2hpbmdFbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaAppbmRleCBkOTM3MGMyLi44NzVlZWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVy
VHJlZUhvc3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkdMQ29udGV4
dD4gbV9jb250ZXh0OwogICAgIGRvdWJsZSBtX2xhc3RGbHVzaFRpbWU7CiAgICAgYm9vbCBtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbV9sYXllckZs
dXNoVGltZXJDYWxsYmFjazsKKyAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fbGF5ZXJGbHVzaFRp
bWVyQ2FsbGJhY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254639</attachid>
            <date>2015-06-10 02:19:13 -0700</date>
            <delta_ts>2015-06-10 10:17:40 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-138691-20150610021845.patch</filename>
            <type>text/plain</type>
            <size>32193</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIwYzdmOTdjYzdjNDE2ZDNkMDg1ZGFh
M2E4ZGMxYjIwY2M1N2Q5NjAuLjI2NTY3Y2RhZjczMThkYzg4YWM1YzE5MGYwOWExZDQ4ZjhmMGU3
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTUtMDYtMTAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBwZXJzaXN0ZW50IEdTb3VyY2Ug
d3JhcHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM4NjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2dsaWIvTWFpblRocmVhZEdMaWIu
Y3BwOgorICAgICAgICAoV1RGOjpzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHA6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjp3YWtlVXApOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJh
c2U6OnN0b3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQp
OgorICAgICAgICAqIHd0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIpOgorICAgICAgICAqIHd0Zi9n
b2JqZWN0L0dTb3VyY2VXcmFwLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpzdGF0aWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdy
YXA6OmR5bmFtaWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJj
ZVdyYXA6OmR5bmFtaWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1Nv
dXJjZVdyYXA6OnN0YXRpY09uZVNob3RDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpzdGF0aWNTb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjp0
YXJnZXRUaW1lRm9yRGVsYXkpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6QmFzZTo6fkJh
c2UpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNTY2hlZHVsZWQp
OgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNBY3RpdmUpOgorICAg
ICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6
OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6U3RhdGljOjpTdGF0aWMpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGlj
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlN0YXRpYzo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGljOjpjYW5jZWwpOgorICAgICAg
ICAoV1RGOjpHU291cmNlV3JhcDo6RHluYW1pYzo6RHluYW1pYyk6CisgICAgICAgIChXVEY6OkdT
b3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpEeW5hbWljOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6T25lU2hvdDo6
Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlNvY2tldDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpTb2NrZXQ6OmNhbmNlbCk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6UXVldWUpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6UXVldWU6On5RdWV1ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6cXVldWUpOgor
ICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6UXVldWU6OmRpc3BhdGNoUXVldWUpOgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpHU291
cmNlV3JhcDo6ZGVzdHJveUNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpCYXNlOjppc0luaXRpYWxpemVkKToKKwogMjAxNS0wNi0wOSAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtjbWFrZV0gRml4IHRoZSBzdHlsZSBp
c3N1ZXMgaW4gY21ha2UgcHJvamVjdCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFmOGFiYmVlYzlhOWNj
ZTVlMDYxNWQ4MGUwYzBmYjdjZTAxMWEzMmMuLmM3ODMyZjYyOTA1MzBlYjY5MDE5OWUxZjA3Y2Jj
YWM0NDEwMDVmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wNi0xMCAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHBl
cnNpc3RlbnQgR1NvdXJjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzg2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRUaW1l
ckZpcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNlbmRQZW5kaW5nUmVxdWVzdCk6CisKIDIw
MTUtMDYtMDkgIERhZWd5dSBMZWUgIDxkYWVneXUubGVlQG5hdmVyY29ycC5jb20+CiAKICAgICAg
ICAgM0QtdHJhbnNmb3JtZWQgdmlkZW8gZG9lcyBub3QgZGlzcGxheSBvbiBwbGF0Zm9ybXMgd2l0
aG91dCBhY2NlbGVyYXRlZCB2aWRlbyByZW5kZXJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UK
aW5kZXggNThlM2NkODcxZTIyYjkxZTNkOWZjZTk4MmUzMjIwMTk3MDZiZWQ4My4uZWZiN2JjOTA0
YTlmMjI1NWUxMzJjMDg4MjIxYzljZTk3ZjA3OTQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21h
a2UKQEAgLTgsNiArOCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAKICAgICBnb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dSZWZQdHIuY3BwCisgICAgZ29iamVj
dC9HU291cmNlV3JhcC5jcHAKICAgICBnb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Uu
Y3BwCiAgICAgZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUnVuTG9vcC5oIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCmluZGV4IDg1MGJj
ZTk3MGRlOTRlYTcyM2ExYjQ2NjczMzgyZmQ0ZjhkNjlhZTAuLjIzODJiNTZkMjliMmRiZWNhNmE3
NTI3NzExMGRmODc4NGVkNjM0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3Au
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3Jh
cC5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwpCkBAIC0xMDAsNyArMTAwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgRWNvcmVfVGltZXIqIG1fdGltZXI7CiAgICAgICAgIGJvb2wgbV9pc1Jl
cGVhdGluZzsKICNlbGlmIFVTRShHTElCKQotICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90aW1l
clNvdXJjZTsKKyAgICAgICAgdm9pZCB0aW1lckZpcmVkKCk7CisgICAgICAgIGRvdWJsZSBtX2Zp
cmVJbnRlcnZhbCB7IDAgfTsKKyAgICAgICAgYm9vbCBtX3JlcGVhdGluZyB7IGZhbHNlIH07Cisg
ICAgICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV90aW1lclNvdXJjZTsKICNlbmRpZgogICAgIH07
CiAKQEAgLTE2MCw2ICsxNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdSZWZQdHI8R01h
aW5Db250ZXh0PiBtX21haW5Db250ZXh0OwogICAgIFZlY3RvcjxHUmVmUHRyPEdNYWluTG9vcD4+
IG1fbWFpbkxvb3BzOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV93b3JrU291cmNlOwogI2Vu
ZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJj
ZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4IDE1ZDc1NWYyODU4NTcyOTc0ZTY3NDFmYzcyMGQ2
NWE3YTg1MGYyZjEuLmYxNTI5ZDkyNTZkNWFlNGI4ZjE4ODNjY2UzYzQ5ODc5MThhMzA2ZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1dvcmtRdWV1ZS5oCkBAIC0zOSw4ICszOSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdU
SykKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAu
aD4KICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlRWZsLmg+CiAj
ZWxpZiBPUyhXSU5ET1dTKQpAQCAtMTA3LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgVGhyZWFk
SWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKICAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4g
bV9ldmVudENvbnRleHQ7CiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRMb29wOwotICAg
IEdNYWluTG9vcFNvdXJjZSBtX3NvY2tldEV2ZW50U291cmNlOworICAgIEdTb3VyY2VXcmFwOjpT
b2NrZXQgbV9zb2NrZXRFdmVudFNvdXJjZTsKKyAgICBHU291cmNlV3JhcDo6UXVldWUgbV9kaXNw
YXRjaFF1ZXVlOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVl
PiBtX2Rpc3BhdGNoUXVldWU7CiAjZWxpZiBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL01h
aW5UaHJlYWRHTGliLmNwcAppbmRleCA1OTgxMjlhZjhkYzIyNDdkZTYyYjIyNDU2M2EwMmQ1Mjgy
MzM1ZTc5Li5kNzcyZjIyMzk2NWQyMTQxMGRjZmQyYjczMmMzYTM4Mzk5MDAwMjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKIAotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VX
cmFwLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MCw3ICs0MCw5IEBAIHZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9u
c09uTWFpblRocmVhZCgpCiB7Ci0gICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0
ZU9uRGVzdHJveSgiW1dlYktpdF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPihkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKSk7Cisg
ICAgc3RhdGljIEdTb3VyY2VXcmFwOjpTdGF0aWMgZGlzcGF0Y2hlcigiW1dlYktpdF0gZGlzcGF0
Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4oZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCksIEdfUFJJT1JJVFlfREVGQVVMVCwg
Z19tYWluX2NvbnRleHRfZGVmYXVsdCgpKTsKKyAgICBkaXNwYXRjaGVyLnNjaGVkdWxlKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9S
dW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAppbmRl
eCA3ZGM0MDc1NjYwODJhMjM4YmFmOTYxMDg3NjJlZWMyNDJmNmViOThiLi4wMzJiMzM0NmVmOWJm
Yjg0YzMxMDdiOWQ1NjNjNTNkZWE3YWI2MWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
bGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGli
LmNwcApAQCAtNDIsNiArNDIsOSBAQCBSdW5Mb29wOjpSdW5Mb29wKCkKICAgICBHUmVmUHRyPEdN
YWluTG9vcD4gaW5uZXJtb3N0TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9tYWlu
Q29udGV4dC5nZXQoKSwgRkFMU0UpKTsKICAgICBBU1NFUlQoaW5uZXJtb3N0TG9vcCk7CiAgICAg
bV9tYWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOworCisgICAgbV93b3JrU291cmNlLmlu
aXRpYWxpemUoIltXZWJLaXRdIFJ1bkxvb3Agd29yayIsIHN0ZDo6YmluZCgmUnVuTG9vcDo6cGVy
Zm9ybVdvcmssIHRoaXMpLAorICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fbWFpbkNvbnRl
eHQuZ2V0KCkpOwogfQogCiBSdW5Mb29wOjp+UnVuTG9vcCgpCkBAIC05MSwxNSArOTQsMTMgQEAg
dm9pZCBSdW5Mb29wOjpzdG9wKCkKIAogdm9pZCBSdW5Mb29wOjp3YWtlVXAoKQogewotICAgIFJl
ZlB0cjxSdW5Mb29wPiBydW5Mb29wKHRoaXMpOwotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFJ1bkxvb3Agd29yayIsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPihbcnVuTG9vcF0gewotICAgICAgICBydW5Mb29wLT5wZXJmb3JtV29yaygpOwot
ICAgIH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fbWFpbkNvbnRleHQuZ2V0KCkp
OworICAgIG1fd29ya1NvdXJjZS5zY2hlZHVsZSgpOwogICAgIGdfbWFpbl9jb250ZXh0X3dha2V1
cChtX21haW5Db250ZXh0LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJh
c2UoUnVuTG9vcCYgcnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV90
aW1lclNvdXJjZSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6OmJpbmQoJlJ1bkxvb3A6
OlRpbWVyQmFzZTo6dGltZXJGaXJlZCwgdGhpcyksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9ydW5M
b29wLm1fbWFpbkNvbnRleHQuZ2V0KCkpCiB7CiB9CiAKQEAgLTExMCwxMiArMTExLDE1IEBAIFJ1
bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCiAKIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNl
OjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsKLSAgICBtX3RpbWVy
U291cmNlLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+KFt0aGlzLCByZXBlYXRdIHsgZmlyZWQoKTsgcmV0dXJuIHJlcGVh
dDsgfSksCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGZpcmVJbnRlcnZhbCkp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fcnVuTG9vcC5tX21haW5Db250ZXh0Lmdl
dCgpKTsKKyAgICBtX2ZpcmVJbnRlcnZhbCA9IGZpcmVJbnRlcnZhbDsKKyAgICBtX3JlcGVhdGlu
ZyA9IHJlcGVhdDsKKyAgICBtX3RpbWVyU291cmNlLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjpkdXJh
dGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bjxkb3VibGU+KG1fZmlyZUludGVydmFsKSkpOwogfQogCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6c3RvcCgpCiB7CisgICAgbV9maXJlSW50ZXJ2YWwgPSAwOworICAgIG1fcmVwZWF0aW5nID0g
ZmFsc2U7CiAgICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKIH0KIApAQCAtMTI0LDQgKzEyOCwx
MSBAQCBib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVy
biBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7CiB9CiAKK3ZvaWQgUnVuTG9vcDo6VGltZXJC
YXNlOjp0aW1lckZpcmVkKCkKK3sKKyAgICBmaXJlZCgpOworICAgIGlmIChtX3JlcGVhdGluZykK
KyAgICAgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZShzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91Ymxl
PihtX2ZpcmVJbnRlcnZhbCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwIGIvU291cmNlL1dURi93dGYv
Z2xpYi9Xb3JrUXVldWVHTGliLmNwcAppbmRleCBlZTFiNjBiYWY1ZDA2OGJhMmNlYWQzZDgxMTQ4
ZmI0YTJjN2M0MWIyLi44MzQxODA4YTgzZDY3MzYxMjI1YTMwN2E0MmFhM2M5Nzg2YmE4MGQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKQEAgLTQyLDYgKzQyLDggQEAgdm9p
ZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBR
T1MpCiAgICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRD
b250ZXh0LmdldCgpLCBGQUxTRSkpOwogICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7CiAKKyAgICBt
X2Rpc3BhdGNoUXVldWUuaW5pdGlhbGl6ZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaCIs
IEdfUFJJT1JJVFlfREVGQVVMVCwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworCiAgICAgLy8gVGhp
cyBuYW1lIGNhbiBiZSBjb20uYXBwbGUuV2ViS2l0LlByb2Nlc3NMYXVuY2hlciBvciBjb20uYXBw
bGUuQ29yZUlQQy5SZWNlaXZlUXVldWUuCiAgICAgLy8gV2UgYXJlIHVzaW5nIHRob3NlIG5hbWVz
IGZvciB0aGUgdGhyZWFkIG5hbWUsIGJ1dCBib3RoIGFyZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0
ZXJzLAogICAgIC8vIHdoaWNoIGlzIHRoZSBsaW1pdCBvZiBWaXN1YWwgU3R1ZGlvIGZvciB0aHJl
YWQgbmFtZXMuCkBAIC03NSw4ICs3Nyw5IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFs
aWRhdGUoKQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0
IHN0YXJ0ZWQgeWV0LCBzbyBzY2hlZHVsZSBhIG1haW4gbG9vcCBxdWl0IHRvIGVuc3VyZSB0aGUg
dGhyZWFkIGZpbmlzaGVzLgogICAgICAgICAgICAgR01haW5Mb29wKiBldmVudExvb3AgPSBtX2V2
ZW50TG9vcC5nZXQoKTsKLSAgICAgICAgICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmRE
ZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZSBxdWl0IG1haW4gbG9vcCIsIFtldmVu
dExvb3BdIHsgZ19tYWluX2xvb3BfcXVpdChldmVudExvb3ApOyB9LAotICAgICAgICAgICAgICAg
IEdfUFJJT1JJVFlfSElHSCwgbnVsbHB0ciwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworICAgICAg
ICAgICAgR1NvdXJjZVdyYXA6Ok9uZVNob3Q6OmNvbnN0cnVjdCgiW1dlYktpdF0gV29ya1F1ZXVl
IHF1aXQgbWFpbiBsb29wIiwKKyAgICAgICAgICAgICAgICBbZXZlbnRMb29wXSB7IGdfbWFpbl9s
b29wX3F1aXQoZXZlbnRMb29wKTsgfSwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSwKKyAg
ICAgICAgICAgICAgICBHX1BSSU9SSVRZX0hJR0gsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKICAg
ICAgICAgfQogICAgICAgICBtX2V2ZW50TG9vcCA9IG51bGxwdHI7CiAgICAgfQpAQCAtODcsMjMg
KzkwLDIyIEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogdm9pZCBXb3Jr
UXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9z
ZUZ1bmN0aW9uKQogewogICAgIEdSZWZQdHI8R1NvY2tldD4gc29ja2V0ID0gYWRvcHRHUmVmKGdf
c29ja2V0X25ld19mcm9tX2ZkKGZpbGVEZXNjcmlwdG9yLCAwKSk7Ci0gICAgcmVmKCk7Ci0gICAg
bV9zb2NrZXRFdmVudFNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpTb2NrZXRF
dmVudEhhbmRsZXIiLCBbZnVuY3Rpb24sIGNsb3NlRnVuY3Rpb25dKEdJT0NvbmRpdGlvbiBjb25k
aXRpb24pIHsKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisgICAgbV9z
b2NrZXRFdmVudFNvdXJjZS5pbml0aWFsaXplKCJbV2ViS2l0XSBXb3JrUXVldWU6OlNvY2tldEV2
ZW50SGFuZGxlciIsCisgICAgICAgIFtmdW5jdGlvbiwgY2xvc2VGdW5jdGlvbiwgcHJvdGVjdG9y
XShHSU9Db25kaXRpb24gY29uZGl0aW9uKSB7CiAgICAgICAgICAgICBpZiAoY29uZGl0aW9uICYg
R19JT19IVVAgfHwgY29uZGl0aW9uICYgR19JT19FUlIgfHwgY29uZGl0aW9uICYgR19JT19OVkFM
KSB7CiAgICAgICAgICAgICAgICAgY2xvc2VGdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29uZGl0aW9uICYgR19JT19JTikg
ewogICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdN
YWluTG9vcFNvdXJjZTo6Q29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIEdNYWluTG9vcFNvdXJjZTo6U3RvcDsKLSAgICAgICAgfSwgc29ja2V0Lmdl
dCgpLCBHX0lPX0lOLAotICAgICAgICBbdGhpc10geyBkZXJlZigpOyB9LAotICAgICAgICBtX2V2
ZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0s
IHNvY2tldC5nZXQoKSwgR19JT19JTiwgR19QUklPUklUWV9ERUZBVUxULCBtX2V2ZW50Q29udGV4
dC5nZXQoKSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5k
bGVyKGludCkKQEAgLTExMywxNiArMTE1LDE0IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKGludCkKIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiB7Ci0gICAgcmVmKCk7Ci0gICAgR01haW5Mb29w
U291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpk
aXNwYXRjaCIsIFdURjo6bW92ZShmdW5jdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAg
ICAgW3RoaXNdIHsgZGVyZWYoKTsgfSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworICAgIG1fZGlz
cGF0Y2hRdWV1ZS5xdWV1ZShXVEY6Om1vdmUoZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogewotICAgIHJlZigpOwotICAgIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5QW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0XSBX
b3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIiLCBXVEY6Om1vdmUoZnVuY3Rpb24pLAotICAgICAgICBz
dGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihkdXJh
dGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdIHsgZGVyZWYoKTsgfSwgbV9ldmVudENv
bnRleHQuZ2V0KCkpOworICAgIFJlZlB0cjxXb3JrUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKyAg
ICBHU291cmNlV3JhcDo6T25lU2hvdDo6Y29uc3RydWN0KCJbV2ViS2l0XSBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIiLCBzdGQ6OmJpbmQoW3Byb3RlY3Rvcl0oY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiYgZnVuY3Rpb24pIHsgZnVuY3Rpb24oKTsgfSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSks
CisgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM+KGR1cmF0aW9uKSwgR19QUklPUklUWV9ERUZBVUxULCBtX2V2ZW50Q29udGV4dC5nZXQo
KSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdy
YXAuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HU291cmNlV3JhcC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWE1NGQzYmY1N2Y5OWRjM2NmMmNiN2E0ZGRmMjc0ZWE5NGNkYTZmYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuY3BwCkBAIC0wLDAgKzEs
MzAyIEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1NvdXJjZVdyYXAuaCIKKwor
I2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIu
aD4KKyNpbmNsdWRlIDxjc3RkaW8+CisKK25hbWVzcGFjZSBXVEYgeworCitHU291cmNlRnVuY3Mg
R1NvdXJjZVdyYXA6OnNvdXJjZUZ1bmN0aW9ucyA9IHsKKyAgICAvLyBwcmVwYXJlCisgICAgW10o
R1NvdXJjZSogc291cmNlLCBnaW50KikgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIHJldHVy
biBnX3NvdXJjZV9nZXRfcmVhZHlfdGltZShzb3VyY2UpID09IDA7CisgICAgfSwKKyAgICBudWxs
cHRyLCAvLyBjaGVjaworICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSogc291cmNlLCBH
U291cmNlRnVuYyBjYWxsYmFjaywgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzb3VyY2UpOworICAgICAgICBpZiAoZ19zb3VyY2VfZ2V0X3JlYWR5X3Rp
bWUoc291cmNlKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsK
KyAgICAgICAgRGlzcGF0Y2hDb250ZXh0IGNvbnRleHR7IHNvdXJjZSwgZGF0YSB9OworICAgICAg
ICByZXR1cm4gY2FsbGJhY2soJmNvbnRleHQpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmlu
YWxpemUKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8g
Y2xvc3VyZV9tYXJzaGFsbAorfTsKKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OnN0YXRpY0RlbGF5
QmFzZWRWb2lkQ2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBhdXRvJiBkaXNwYXRjaCA9
ICpyZWludGVycHJldF9jYXN0PERpc3BhdGNoQ29udGV4dCo+KGRhdGEpOworICAgIGF1dG8mIGNh
bGxiYWNrID0gKnJlaW50ZXJwcmV0X2Nhc3Q8RGVsYXlCYXNlZDo6Q2FsbGJhY2tDb250ZXh0PHZv
aWQgKCk+Kj4oZGlzcGF0Y2guc2Vjb25kKTsKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5j
ZWxsZWQoY2FsbGJhY2suc2Vjb25kLmNhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IEdfU09VUkNFX0NPTlRJTlVFOworCisgICAgY2FsbGJhY2suc2Vjb25kLmRpc3BhdGNoaW5nID0g
dHJ1ZTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShkaXNwYXRjaC5maXJzdCwgLTEpOwor
CisgICAgY2FsbGJhY2suZmlyc3QoKTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGlu
ZyA9IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworZ2Jvb2xlYW4g
R1NvdXJjZVdyYXA6OmR5bmFtaWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKGdwb2ludGVyIGRhdGEp
Cit7CisgICAgYXV0byYgZGlzcGF0Y2ggPSAqcmVpbnRlcnByZXRfY2FzdDxEaXNwYXRjaENvbnRl
eHQqPihkYXRhKTsKKyAgICBhdXRvJiBjYWxsYmFjayA9ICpyZWludGVycHJldF9jYXN0PERlbGF5
QmFzZWQ6OkNhbGxiYWNrQ29udGV4dDx2b2lkICgpPio+KGRpc3BhdGNoLnNlY29uZCk7CisgICAg
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbGxiYWNrLnNlY29uZC5jYW5jZWxsYWJs
ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKworICAgIGNhbGxi
YWNrLnNlY29uZC5kaXNwYXRjaGluZyA9IHRydWU7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3Rp
bWUoZGlzcGF0Y2guZmlyc3QsIC0xKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0
Y2guZmlyc3QsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2FsbGJhY2suZmly
c3QoKTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGluZyA9IGZhbHNlOworICAgIHJl
dHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OmR5bmFt
aWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7CisgICAgYXV0byYgZGlz
cGF0Y2ggPSAqcmVpbnRlcnByZXRfY2FzdDxEaXNwYXRjaENvbnRleHQqPihkYXRhKTsKKyAgICBh
dXRvJiBjYWxsYmFjayA9ICpyZWludGVycHJldF9jYXN0PERlbGF5QmFzZWQ6OkNhbGxiYWNrQ29u
dGV4dDxib29sICgpPio+KGRpc3BhdGNoLnNlY29uZCk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGNhbGxiYWNrLnNlY29uZC5jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAg
IHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRj
aGluZyA9IHRydWU7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoZGlzcGF0Y2guZmlyc3Qs
IC0xKTsKKworICAgIGlmIChjYWxsYmFjay5maXJzdCgpKQorICAgICAgICBnX3NvdXJjZV9zZXRf
cmVhZHlfdGltZShkaXNwYXRjaC5maXJzdCwgdGFyZ2V0VGltZUZvckRlbGF5KGNhbGxiYWNrLnNl
Y29uZC5kZWxheSkpOworICAgIGVsc2UKKyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRp
c3BhdGNoLmZpcnN0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAgIGNhbGxiYWNr
LnNlY29uZC5kaXNwYXRjaGluZyA9IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5V
RTsKK30KKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OnN0YXRpY09uZVNob3RDYWxsYmFjayhncG9p
bnRlciBkYXRhKQoreworICAgIGF1dG8mIGRpc3BhdGNoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8RGlz
cGF0Y2hDb250ZXh0Kj4oZGF0YSk7CisgICAgYXV0byYgY2FsbGJhY2sgPSAqcmVpbnRlcnByZXRf
Y2FzdDxPbmVTaG90OjpDYWxsYmFja0NvbnRleHQqPihkaXNwYXRjaC5zZWNvbmQpOworCisgICAg
Z19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoZGlzcGF0Y2guZmlyc3QsIC0xKTsKKyAgICBjYWxsYmFj
ay5maXJzdCgpOworCisgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKK30KKworZ2Jvb2xlYW4g
R1NvdXJjZVdyYXA6OnN0YXRpY1NvY2tldENhbGxiYWNrKEdTb2NrZXQqLCBHSU9Db25kaXRpb24g
Y29uZGl0aW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIGF1dG8mIGNhbGxiYWNrID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8U29ja2V0OjpDYWxsYmFja0NvbnRleHQqPihkYXRhKTsKKyAgICBpZiAoZ19j
YW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FsbGJhY2suc2Vjb25kLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKworICAgIHJldHVybiBjYWxsYmFjay5maXJzdChjb25k
aXRpb24pOworfQorCitnaW50NjQgR1NvdXJjZVdyYXA6OnRhcmdldFRpbWVGb3JEZWxheShzdGQ6
OmNocm9ubzo6bWljcm9zZWNvbmRzIGRlbGF5KQoreworICAgIGlmICghZGVsYXkuY291bnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBnaW50NjQgY3VycmVudFRpbWUgPSBnX2dldF9tb25v
dG9uaWNfdGltZSgpOworICAgIGdpbnQ2NCB0YXJnZXRUaW1lID0gY3VycmVudFRpbWUgKyBzdGQ6
Om1pbjxnaW50NjQ+KEdfTUFYSU5UNjQgLSBjdXJyZW50VGltZSwgZGVsYXkuY291bnQoKSk7Cisg
ICAgQVNTRVJUKHRhcmdldFRpbWUgPj0gY3VycmVudFRpbWUpOworCisgICAgcmV0dXJuIHRhcmdl
dFRpbWU7Cit9CisKK0dTb3VyY2VXcmFwOjpCYXNlOjp+QmFzZSgpCit7CisgICAgaWYgKG1fc291
cmNlKQorICAgICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKK30KKworYm9v
bCBHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNTY2hlZHVsZWQoKSBjb25zdAoreworICAgIEFT
U0VSVChtX3NvdXJjZSk7CisgICAgcmV0dXJuIGdfc291cmNlX2dldF9yZWFkeV90aW1lKG1fc291
cmNlLmdldCgpKSAhPSAtMTsKK30KKworYm9vbCBHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBpc1NjaGVkdWxlZCgpIHx8IG1fY29udGV4dC5k
aXNwYXRjaGluZzsKK30KKwordm9pZCBHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aW5pdGlhbGl6
ZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBBU1NFUlQoIW1fc291cmNlKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3Nv
dXJjZV9uZXcoJnNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSk7CisKKyAgICBtX2Nv
bnRleHQuZGVsYXkgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApOworICAgIG1fY29udGV4
dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBtX2Nv
bnRleHQuZGlzcGF0Y2hpbmcgPSBmYWxzZTsKKworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291
cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0
KCksIHByaW9yaXR5KTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGdf
bWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpOworICAgIGdfc291cmNlX2F0dGFjaCht
X3NvdXJjZS5nZXQoKSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkRlbGF5QmFz
ZWQ6OnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkpCit7CisgICAgQVNT
RVJUKG1fc291cmNlKTsKKyAgICBtX2NvbnRleHQuZGVsYXkgPSBkZWxheTsKKworICAgIGlmIChn
X2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChtX2NvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKQor
ICAgICAgICBtX2NvbnRleHQuY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSk7CisKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgdGFy
Z2V0VGltZUZvckRlbGF5KGRlbGF5KSk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkRlbGF5QmFz
ZWQ6OmNhbmNlbCgpCit7CisgICAgQVNTRVJUKG1fc291cmNlKTsKKyAgICBnX2NhbmNlbGxhYmxl
X2NhbmNlbChtX2NvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIGdfc291cmNlX3NldF9y
ZWFkeV90aW1lKG1fc291cmNlLmdldCgpLCAtMSk7Cit9CisKK0dTb3VyY2VXcmFwOjpTdGF0aWM6
OlN0YXRpYyhjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIGluaXRpYWxp
emUobmFtZSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2
b2lkIEdTb3VyY2VXcmFwOjpTdGF0aWM6OmluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBEZWxheUJhc2VkOjppbml0aWFsaXplKG5hbWUsIHByaW9yaXR5
LCBjb250ZXh0KTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwg
c3RhdGljX2Nhc3Q8R1NvdXJjZUZ1bmM+KHN0YXRpY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2spLAor
ICAgICAgICBuZXcgQ2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24p
LCBtX2NvbnRleHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFj
a0NvbnRleHQ8Q2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+PikpOworfQorCit2b2lkIEdTb3VyY2VX
cmFwOjpTdGF0aWM6OnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkpCit7
CisgICAgRGVsYXlCYXNlZDo6c2NoZWR1bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFw
OjpTdGF0aWM6OmNhbmNlbCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRGVsYXlCYXNlZDo6Y2FuY2VsKCk7Cit9CisKK0dTb3VyY2VXcmFwOjpEeW5hbWlj
OjpEeW5hbWljKGNvbnN0IGNoYXIqIG5hbWUsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBj
b250ZXh0KQoreworICAgIERlbGF5QmFzZWQ6OmluaXRpYWxpemUobmFtZSwgcHJpb3JpdHksIGNv
bnRleHQpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZShzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVs
YXkpCit7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzdGF0aWNf
Y2FzdDxHU291cmNlRnVuYz4oZHluYW1pY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2spLAorICAgICAg
ICBuZXcgQ2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24pLCBtX2Nv
bnRleHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0NvbnRl
eHQ8Q2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+PikpOworCisgICAgRGVsYXlCYXNlZDo6c2NoZWR1
bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZShzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMg
ZGVsYXkpCit7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzdGF0
aWNfY2FzdDxHU291cmNlRnVuYz4oZHluYW1pY0RlbGF5QmFzZWRCb29sQ2FsbGJhY2spLAorICAg
ICAgICBuZXcgQ2FsbGJhY2tDb250ZXh0PGJvb2wgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24pLCBt
X2NvbnRleHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0Nv
bnRleHQ8Q2FsbGJhY2tDb250ZXh0PGJvb2wgKCk+PikpOworCisgICAgRGVsYXlCYXNlZDo6c2No
ZWR1bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpjYW5jZWwoKQor
eworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIERlbGF5QmFzZWQ6
OmNhbmNlbCgpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6Ok9uZVNob3Q6
OmNvbnN0cnVjdChjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVu
Y3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgR01h
aW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRv
cHRHUmVmKGdfc291cmNlX25ldygmc291cmNlRnVuY3Rpb25zLCBzaXplb2YoR1NvdXJjZSkpKTsK
KworICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3Vy
Y2Vfc2V0X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgc3RhdGljX2Nhc3Q8R1NvdXJjZUZ1bmM+KHN0YXRp
Y09uZVNob3RDYWxsYmFjayksCisgICAgICAgIG5ldyBDYWxsYmFja0NvbnRleHR7IFdURjo6bW92
ZShmdW5jdGlvbiksIG51bGxwdHIgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ry
b3lDYWxsYmFja0NvbnRleHQ8Q2FsbGJhY2tDb250ZXh0PikpOworICAgIGdfc291cmNlX3NldF9y
ZWFkeV90aW1lKHNvdXJjZS5nZXQoKSwgdGFyZ2V0VGltZUZvckRlbGF5KGRlbGF5KSk7CisKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIGNvbnRleHQgPSBnX21haW5fY29udGV4dF9nZXRfdGhy
ZWFkX2RlZmF1bHQoKTsKKyAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBjb250ZXh0
KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6U29ja2V0Ojppbml0aWFsaXplKGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4mJiBmdW5jdGlvbiwgR1Nv
Y2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWlu
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoIW1fc291cmNlKTsKKyAgICBHQ2FuY2Vs
bGFibGUqIGNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBtX3NvdXJjZSA9
IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBjYW5j
ZWxsYWJsZSkpOworICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoY2FuY2VsbGFibGUpOwor
CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291
cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3Vy
Y2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihzdGF0aWNTb2NrZXRDYWxsYmFjayksCisgICAgICAgIG5ldyBDYWxsYmFja0NvbnRleHR7
IFdURjo6bW92ZShmdW5jdGlvbiksIG1fY2FuY2VsbGFibGUgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0NvbnRleHQ8Q2FsbGJhY2tDb250ZXh0PikpOworCisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICBjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfZ2V0X3Ro
cmVhZF9kZWZhdWx0KCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250
ZXh0KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6U29ja2V0OjpjYW5jZWwoKQoreworICAgIGdf
Y2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworfQorCitHU291cmNlV3Jh
cDo6UXVldWU6OlF1ZXVlKCkKK3sKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOworfQorCitH
U291cmNlV3JhcDo6UXVldWU6On5RdWV1ZSgpCit7CisgICAgZ19tdXRleF9jbGVhcigmbV9tdXRl
eCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OlF1ZXVlOjppbml0aWFsaXplKGNvbnN0IGNoYXIq
IG5hbWUsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fc291
cmNlV3JhcC5pbml0aWFsaXplKG5hbWUsIHN0ZDo6YmluZCgmUXVldWU6OmRpc3BhdGNoUXVldWUs
IHRoaXMpLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OlF1ZXVl
OjpxdWV1ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCit7CisgICAgV1RGOjpH
TXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIG1fcXVldWUuYXBwZW5kKFdU
Rjo6bW92ZShmdW5jdGlvbikpOworCisgICAgbV9zb3VyY2VXcmFwLnNjaGVkdWxlKCk7Cit9CisK
K3ZvaWQgR1NvdXJjZVdyYXA6OlF1ZXVlOjpkaXNwYXRjaFF1ZXVlKCkKK3sKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBkZWNsdHlwZShtX3F1ZXVlKSBxdWV1ZTsKKyAgICAgICAgeworICAgICAg
ICAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICAg
ICAgcXVldWUgPSBXVEY6Om1vdmUobV9xdWV1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXF1ZXVlLnNpemUoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBxdWV1ZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1Nv
dXJjZVdyYXAuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZjE0ZDU0YWIzNWYzYjZlNDhmOTczMzE1OTY1NzdiODJjNTg2OWIzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HU291cmNlV3JhcC5oCkBAIC0wLDAgKzEs
MTQ0IEBACisjaWZuZGVmIEdTb3VyY2VXcmFwX2gKKyNkZWZpbmUgR1NvdXJjZVdyYXBfaAorCisj
aW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQgR1NvY2tl
dDsKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEdTb3VyY2VXcmFwIHsKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIEdTb3VyY2VGdW5jcyBzb3VyY2VGdW5jdGlvbnM7CisgICAgc3RhdGljIGdib29s
ZWFuIHN0YXRpY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2soZ3BvaW50ZXIpOworICAgIHN0YXRpYyBn
Ym9vbGVhbiBkeW5hbWljRGVsYXlCYXNlZFZvaWRDYWxsYmFjayhncG9pbnRlcik7CisgICAgc3Rh
dGljIGdib29sZWFuIGR5bmFtaWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKGdwb2ludGVyKTsKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gc3RhdGljT25lU2hvdENhbGxiYWNrKGdwb2ludGVyKTsKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gc3RhdGljU29ja2V0Q2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlv
biwgZ3BvaW50ZXIpOworCisgICAgdXNpbmcgRGlzcGF0Y2hDb250ZXh0ID0gc3RkOjpwYWlyPEdT
b3VyY2UqLCBncG9pbnRlcj47CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
PgorICAgIHVzaW5nIENhbGxiYWNrQ29udGV4dFR5cGUgPSBzdGQ6OnBhaXI8c3RkOjpmdW5jdGlv
bjxUMT4sIFQyPjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveUNhbGxiYWNrQ29udGV4dChncG9pbnRlciBkYXRhKQorICAgIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGRhdGEpOworICAgICAgICBkZWxldGUg
Y29udGV4dDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2ludDY0IHRhcmdldFRpbWVGb3JEZWxheShz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKTsKKworICAgIGNsYXNzIEJhc2UgeworICAgICAgICBC
YXNlKGNvbnN0IEJhc2UmKSA9IGRlbGV0ZTsKKyAgICAgICAgQmFzZSYgb3BlcmF0b3I9KGNvbnN0
IEJhc2UmKSA9IGRlbGV0ZTsKKyAgICAgICAgQmFzZShCYXNlJiYpID0gZGVsZXRlOworICAgICAg
ICBCYXNlJiBvcGVyYXRvcj0oQmFzZSYmKSA9IGRlbGV0ZTsKKyAgICBwdWJsaWM6CisgICAgICAg
IEJhc2UoKSA9IGRlZmF1bHQ7CisgICAgICAgIH5CYXNlKCk7CisKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2U7IH0K
KworICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOworICAgIH07CisKKyAgICBjbGFz
cyBEZWxheUJhc2VkIDogQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWxheUJhc2VkKCkg
PSBkZWZhdWx0OworCisgICAgICAgIHVzaW5nIEJhc2U6OmlzSW5pdGlhbGl6ZWQ7CisgICAgICAg
IGJvb2wgaXNTY2hlZHVsZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
OworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgY2hhciog
bmFtZSwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVs
ZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKwor
ICAgICAgICBzdHJ1Y3QgQ29udGV4dCB7CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzIGRlbGF5OworICAgICAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxh
YmxlOworICAgICAgICAgICAgYm9vbCBkaXNwYXRjaGluZzsKKyAgICAgICAgfSBtX2NvbnRleHQ7
CisKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdTb3VyY2VXcmFwOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgICAgICB1c2luZyBDYWxsYmFja0NvbnRleHQgPSBDYWxsYmFja0NvbnRl
eHRUeXBlPFQsIENvbnRleHQmPjsKKyAgICB9OworCitwdWJsaWM6CisgICAgY2xhc3MgU3RhdGlj
IDogcHVibGljIERlbGF5QmFzZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhdGljKCkgPSBk
ZWZhdWx0OworICAgICAgICBTdGF0aWMoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiYmLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIEdNYWluQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZB
VUxULCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZShz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSk7
CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CisgICAgfTsKKworICAgIGNsYXNzIER5bmFtaWMgOiBw
dWJsaWMgRGVsYXlCYXNlZCB7CisgICAgcHVibGljOgorICAgICAgICBEeW5hbWljKGNvbnN0IGNo
YXIqIG5hbWUsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0
KiA9IG51bGxwdHIpOworCisgICAgICAgIHZvaWQgc2NoZWR1bGUoc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiYmLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSk7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoc3RkOjpmdW5jdGlvbjxib29sICgpPiYm
LCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygw
KSk7CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CisgICAgfTsKKworICAgIGNsYXNzIE9uZVNob3Qg
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0KGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kcyBkZWxheSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCksIGludCBwcmlv
cml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0KiBjb250ZXh0ID0gbnVsbHB0
cik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgR1NvdXJjZVdyYXA7Cisg
ICAgICAgIHVzaW5nIENhbGxiYWNrQ29udGV4dCA9IENhbGxiYWNrQ29udGV4dFR5cGU8dm9pZCAo
KSwgdm9pZCo+OworICAgIH07CisKKyAgICBjbGFzcyBTb2NrZXQgOiBwdWJsaWMgQmFzZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBTb2NrZXQoKSA9IGRlZmF1bHQ7CisgICAgICAgIHZvaWQgaW5p
dGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlv
bik+JiYsIEdTb2NrZXQqLCBHSU9Db25kaXRpb24sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlf
REVGQVVMVCwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgICAgICB2b2lkIGNhbmNlbCgp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdTb3VyY2VXcmFwOworICAg
ICAgICB1c2luZyBDYWxsYmFja0NvbnRleHQgPSBDYWxsYmFja0NvbnRleHRUeXBlPGJvb2wgKEdJ
T0NvbmRpdGlvbiksIEdSZWZQdHI8R0NhbmNlbGxhYmxlPj47CisKKyAgICAgICAgR1JlZlB0cjxH
Q2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsK
KyAgICAgICAgUXVldWUoY29uc3QgUXVldWUmKSA9IGRlbGV0ZTsKKyAgICAgICAgUXVldWUmIG9w
ZXJhdG9yPShjb25zdCBRdWV1ZSYpID0gZGVsZXRlOworICAgICAgICBRdWV1ZShRdWV1ZSYmKSA9
IGRlbGV0ZTsKKyAgICAgICAgUXVldWUmIG9wZXJhdG9yPShRdWV1ZSYmKSA9IGRlbGV0ZTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFF1ZXVlKCk7CisgICAgICAgIH5RdWV1ZSgpOworCisgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZShjb25zdCBjaGFyKiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9E
RUZBVUxULCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBxdWV1ZShz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBk
aXNwYXRjaFF1ZXVlKCk7CisKKyAgICAgICAgU3RhdGljIG1fc291cmNlV3JhcDsKKyAgICAgICAg
R011dGV4IG1fbXV0ZXg7CisgICAgICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCAx
Nj4gbV9xdWV1ZTsKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6R1NvdXJjZVdyYXA7CisKKyNlbmRpZiAvLyBHU291cmNlV3JhcF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcAppbmRleCAxMzNlOTA2ZmEwZjA1
ODA5YjZhNTBhMDBlOTkxOGJkYzFkNjgwMzk4Li5kNTNmYWYwMjgzMzNhN2JkYmI0ZWIwODliZTk0
OTM0MGVhMTgzOTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hh
cmVkVGltZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRU
aW1lckd0ay5jcHAKQEAgLTI4LDEyICsyOCwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZFRpbWVyLmgiCiAKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHTWFpbkxvb3BTb3VyY2UgZ1NoYXJlZFRpbWVyOwotc3Rh
dGljIHZvaWQgKCpzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pKCk7CitzdGF0aWMgdm9pZCAoKnNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbikoKSA9IG51bGxwdHI7CitzdGF0aWMgdm9pZCBzaGFyZWRU
aW1lckZpcmUoKQoreworICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOworfQorCisvLyBH
X1BSSU9SSVRZX0hJR0hfSURMRSArIDIwIGlzIEdES19QUklPUklUWV9SRURSQVcsIGJ1dCB3ZSBk
b24ndCB3YW50IHRvIGRlcGVuZCBvbiBHREsgaGVyZSBqdXN0IHRvIHVzZSBhIGNvbnN0YW50Lgor
c3RhdGljIEdTb3VyY2VXcmFwOjpTdGF0aWMgZ1NoYXJlZFRpbWVyKCJbV2ViS2l0XSBzaGFyZWRU
aW1lclRpbWVvdXRDYWxsYmFjayIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4oc2hhcmVkVGltZXJG
aXJlKSwgR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiAKIHZvaWQgc2V0U2hhcmVkVGltZXJG
aXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQogewpAQCAtNDYsMTAgKzUyLDExIEBAIHZvaWQgc2V0
U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogewogICAgIEFTU0VSVChz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOwogCi0gICAgLy8gVGhpcyBpcyBHREtfUFJJT1JJVFlf
UkVEUkFXLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24gR0RLIGhlcmUganVzdCB0byB1
c2UgYSBjb25zdGFudC4KLSAgICBzdGF0aWMgY29uc3QgaW50IHByaW9yaXR5ID0gR19QUklPUklU
WV9ISUdIX0lETEUgKyAyMDsKLSAgICBnU2hhcmVkVGltZXIuc2NoZWR1bGVBZnRlckRlbGF5KCJb
V2ViS2l0XSBzaGFyZWRUaW1lclRpbWVvdXRDYWxsYmFjayIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PihzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pLAotICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248
ZG91YmxlPihpbnRlcnZhbCkpLCBwcmlvcml0eSk7CisgICAgYXV0byBpbnRlcnZhbER1cmF0aW9u
ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oaW50ZXJ2YWwpOworICAgIGF1dG8gZGVs
YXkgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKTsKKyAgICBpZiAoaW50ZXJ2YWxE
dXJhdGlvbiA8IGRlbGF5KQorICAgICAgICBkZWxheSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9j
YXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KGludGVydmFsRHVyYXRpb24pOworICAgIGdT
aGFyZWRUaW1lci5zY2hlZHVsZShkZWxheSk7CiB9CiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmgKaW5kZXggNmJjZDUzNjIxNjlkYmJkOWRmNmVmNDFlNjc1YTY1MGViZTM4
NGIzOC4uZDAxOWRhNzNjMDRkNGQyMDZmYmEyMmE4ZDM0ZDhiZTk2OTY3NDk0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKQEAgLTUxLDggKzUxLDggQEAKICNpZiBVU0UoU09VUCkKICNpbmNsdWRlICJHVW5p
cXVlUHRyU291cC5oIgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShDT0NPQSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEdSZWZQdHI8U291cE11bHRpcGFydElucHV0U3RyZWFtPiBtX211bHRpcGFydElucHV0
U3RyZWFtOwogICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICAg
ICAgICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IG1fZGVmZXJyZWRSZXN1bHQ7Ci0gICAgICAgIEdN
YWluTG9vcFNvdXJjZSBtX3RpbWVvdXRTb3VyY2U7CisgICAgICAgIEdTb3VyY2VXcmFwOjpTdGF0
aWMgbV90aW1lb3V0U291cmNlOwogICAgICAgICBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+IG1fc291
cEJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgbG9uZyBtX2JvZHlTaXplOwogICAgICAgICB1bnNp
Z25lZCBsb25nIG1fYm9keURhdGFTZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCBiN2U4
Yzc4MWI3NWVkOWNlYTkxOTE3NjFiYjZhZmExYzIxZTRlMTBhLi5mZGE4NTFmOWUyYjk4Yzc4Y2My
YmE4NjBiM2UyYzU5YzMzMzAzNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtMTA0OSwx
MSArMTA0OSwxNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZW5kUGVuZGluZ1JlcXVlc3QoKQog
I2VuZGlmCiAKICAgICBpZiAoZC0+bV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkgPiAw
KSB7Ci0gICAgICAgIGQtPm1fdGltZW91dFNvdXJjZS5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJL
aXRdIFJlc291cmNlSGFuZGxlIHJlcXVlc3QgdGltZW91dCIsIFt0aGlzXSB7Ci0gICAgICAgICAg
ICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yOjp0aW1lb3V0RXJyb3IoZmly
c3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgICAgIGNhbmNlbCgpOwotICAg
ICAgICB9LCBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihkLT5tX2ZpcnN0UmVxdWVzdC50aW1l
b3V0SW50ZXJ2YWwoKSkpLAotICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIGdf
bWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKKyAgICAgICAgaWYgKCFkLT5tX3Rp
bWVvdXRTb3VyY2UuaXNJbml0aWFsaXplZCgpKQorICAgICAgICAgICAgZC0+bV90aW1lb3V0U291
cmNlLmluaXRpYWxpemUoIltXZWJLaXRdIFJlc291cmNlSGFuZGxlIHJlcXVlc3QgdGltZW91dCIs
CisgICAgICAgICAgICAgICAgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9yKGZpcnN0UmVxdWVzdCgp
LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbCgpOworICAgICAg
ICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVh
ZF9kZWZhdWx0KCkpOworCisgICAgICAgIGQtPm1fdGltZW91dFNvdXJjZS5zY2hlZHVsZShzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNo
cm9ubzo6ZHVyYXRpb248ZG91YmxlPihkLT5tX2ZpcnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwo
KSkpKTsKICAgICB9CiAKICAgICAvLyBCYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254662</attachid>
            <date>2015-06-10 10:17:49 -0700</date>
            <delta_ts>2015-07-07 08:19:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138691-20150610101720.patch</filename>
            <type>text/plain</type>
            <size>66274</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIwYzdmOTdjYzdjNDE2ZDNkMDg1ZGFh
M2E4ZGMxYjIwY2M1N2Q5NjAuLjI2NTY3Y2RhZjczMThkYzg4YWM1YzE5MGYwOWExZDQ4ZjhmMGU3
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTUtMDYtMTAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBwZXJzaXN0ZW50IEdTb3VyY2Ug
d3JhcHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM4NjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2dsaWIvTWFpblRocmVhZEdMaWIu
Y3BwOgorICAgICAgICAoV1RGOjpzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHA6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjp3YWtlVXApOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJh
c2U6OnN0b3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQp
OgorICAgICAgICAqIHd0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIpOgorICAgICAgICAqIHd0Zi9n
b2JqZWN0L0dTb3VyY2VXcmFwLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpzdGF0aWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdy
YXA6OmR5bmFtaWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJj
ZVdyYXA6OmR5bmFtaWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1Nv
dXJjZVdyYXA6OnN0YXRpY09uZVNob3RDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpzdGF0aWNTb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjp0
YXJnZXRUaW1lRm9yRGVsYXkpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6QmFzZTo6fkJh
c2UpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNTY2hlZHVsZWQp
OgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNBY3RpdmUpOgorICAg
ICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6
OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6U3RhdGljOjpTdGF0aWMpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGlj
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlN0YXRpYzo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGljOjpjYW5jZWwpOgorICAgICAg
ICAoV1RGOjpHU291cmNlV3JhcDo6RHluYW1pYzo6RHluYW1pYyk6CisgICAgICAgIChXVEY6OkdT
b3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpEeW5hbWljOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6T25lU2hvdDo6
Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlNvY2tldDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpTb2NrZXQ6OmNhbmNlbCk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6UXVldWUpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6UXVldWU6On5RdWV1ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6cXVldWUpOgor
ICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6UXVldWU6OmRpc3BhdGNoUXVldWUpOgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpHU291
cmNlV3JhcDo6ZGVzdHJveUNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpCYXNlOjppc0luaXRpYWxpemVkKToKKwogMjAxNS0wNi0wOSAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtjbWFrZV0gRml4IHRoZSBzdHlsZSBp
c3N1ZXMgaW4gY21ha2UgcHJvamVjdCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFhYjhhNjNjNTM1Zjdk
Y2U4NGU2YWJmN2ZiM2FiYjBhYjkwNzQ0YjMuLjkwZDEyN2I5OTg4NDI2YzE4YWQ1YWM3ZDJmYWIz
N2I5ZTEzNDI4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wNi0xMCAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHBl
cnNpc3RlbnQgR1NvdXJjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzg2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRUaW1l
ckZpcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNlbmRQZW5kaW5nUmVxdWVzdCk6CisKIDIw
MTUtMDYtMTAgIEt3YW5nSHl1ayBLaW0gIDxoeXVraS5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gSnBlZyBpbWFnZSBleHBvcnQgaW1wbGVtZW50YXRpb24gZm9yIENhbnZhcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNGMzMTMxZDIxNzUzMmE4YTRmMTMyMzgwOTI4ZWJm
MjU1M2Y0Mjk0MS4uZTBjMTM4ZTYyMzhiZTBlMmUzZWMzY2E3MTAxZDkwY2UzODQ2Mzc2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTYsNiArNiw3IEBAIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCiAKICAgICBnb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dS
ZWZQdHIuY3BwCisgICAgZ29iamVjdC9HU291cmNlV3JhcC5jcHAKICAgICBnb2JqZWN0L0dUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5k
ZXggNThlM2NkODcxZTIyYjkxZTNkOWZjZTk4MmUzMjIwMTk3MDZiZWQ4My4uZWZiN2JjOTA0YTlm
MjI1NWUxMzJjMDg4MjIxYzljZTk3ZjA3OTQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
UGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UK
QEAgLTgsNiArOCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAKICAgICBnb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dSZWZQdHIuY3BwCisgICAgZ29iamVjdC9H
U291cmNlV3JhcC5jcHAKICAgICBnb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3Bw
CiAgICAgZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUnVuTG9vcC5oIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCmluZGV4IDg1MGJjZTk3
MGRlOTRlYTcyM2ExYjQ2NjczMzgyZmQ0ZjhkNjlhZTAuLjIzODJiNTZkMjliMmRiZWNhNmE3NTI3
NzExMGRmODc4NGVkNjM0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5o
PgogI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwpCkBAIC0xMDAsNyArMTAwLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgRWNvcmVfVGltZXIqIG1fdGltZXI7CiAgICAgICAgIGJvb2wgbV9pc1JlcGVh
dGluZzsKICNlbGlmIFVTRShHTElCKQotICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90aW1lclNv
dXJjZTsKKyAgICAgICAgdm9pZCB0aW1lckZpcmVkKCk7CisgICAgICAgIGRvdWJsZSBtX2ZpcmVJ
bnRlcnZhbCB7IDAgfTsKKyAgICAgICAgYm9vbCBtX3JlcGVhdGluZyB7IGZhbHNlIH07CisgICAg
ICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV90aW1lclNvdXJjZTsKICNlbmRpZgogICAgIH07CiAK
QEAgLTE2MCw2ICsxNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdSZWZQdHI8R01haW5D
b250ZXh0PiBtX21haW5Db250ZXh0OwogICAgIFZlY3RvcjxHUmVmUHRyPEdNYWluTG9vcD4+IG1f
bWFpbkxvb3BzOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV93b3JrU291cmNlOwogI2VuZGlm
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4IDE1ZDc1NWYyODU4NTcyOTc0ZTY3NDFmYzcyMGQ2NWE3
YTg1MGYyZjEuLmYxNTI5ZDkyNTZkNWFlNGI4ZjE4ODNjY2UzYzQ5ODc5MThhMzA2ZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCkBAIC0zOSw4ICszOSw4IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaD4K
ICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlRWZsLmg+CiAjZWxp
ZiBPUyhXSU5ET1dTKQpAQCAtMTA3LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgVGhyZWFkSWRl
bnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKICAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9l
dmVudENvbnRleHQ7CiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRMb29wOwotICAgIEdN
YWluTG9vcFNvdXJjZSBtX3NvY2tldEV2ZW50U291cmNlOworICAgIEdTb3VyY2VXcmFwOjpTb2Nr
ZXQgbV9zb2NrZXRFdmVudFNvdXJjZTsKKyAgICBHU291cmNlV3JhcDo6UXVldWUgbV9kaXNwYXRj
aFF1ZXVlOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBt
X2Rpc3BhdGNoUXVldWU7CiAjZWxpZiBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5U
aHJlYWRHTGliLmNwcAppbmRleCA1OTgxMjlhZjhkYzIyNDdkZTYyYjIyNDU2M2EwMmQ1MjgyMzM1
ZTc5Li5kNzcyZjIyMzk2NWQyMTQxMGRjZmQyYjczMmMzYTM4Mzk5MDAwMjY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKIAotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFw
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MCw3ICs0MCw5IEBAIHZvaWQgaW5pdGlhbGl6
ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09u
TWFpblRocmVhZCgpCiB7Ci0gICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKSk7CisgICAg
c3RhdGljIEdTb3VyY2VXcmFwOjpTdGF0aWMgZGlzcGF0Y2hlcigiW1dlYktpdF0gZGlzcGF0Y2hG
dW5jdGlvbnNGcm9tTWFpblRocmVhZCIsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4o
ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCksIEdfUFJJT1JJVFlfREVGQVVMVCwgZ19t
YWluX2NvbnRleHRfZGVmYXVsdCgpKTsKKyAgICBkaXNwYXRjaGVyLnNjaGVkdWxlKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5M
b29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAppbmRleCA3
ZGM0MDc1NjYwODJhMjM4YmFmOTYxMDg3NjJlZWMyNDJmNmViOThiLi4wMzJiMzM0NmVmOWJmYjg0
YzMxMDdiOWQ1NjNjNTNkZWE3YWI2MWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNw
cApAQCAtNDIsNiArNDIsOSBAQCBSdW5Mb29wOjpSdW5Mb29wKCkKICAgICBHUmVmUHRyPEdNYWlu
TG9vcD4gaW5uZXJtb3N0TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9tYWluQ29u
dGV4dC5nZXQoKSwgRkFMU0UpKTsKICAgICBBU1NFUlQoaW5uZXJtb3N0TG9vcCk7CiAgICAgbV9t
YWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOworCisgICAgbV93b3JrU291cmNlLmluaXRp
YWxpemUoIltXZWJLaXRdIFJ1bkxvb3Agd29yayIsIHN0ZDo6YmluZCgmUnVuTG9vcDo6cGVyZm9y
bVdvcmssIHRoaXMpLAorICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fbWFpbkNvbnRleHQu
Z2V0KCkpOwogfQogCiBSdW5Mb29wOjp+UnVuTG9vcCgpCkBAIC05MSwxNSArOTQsMTMgQEAgdm9p
ZCBSdW5Mb29wOjpzdG9wKCkKIAogdm9pZCBSdW5Mb29wOjp3YWtlVXAoKQogewotICAgIFJlZlB0
cjxSdW5Mb29wPiBydW5Mb29wKHRoaXMpOwotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVB
bmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFJ1bkxvb3Agd29yayIsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPihbcnVuTG9vcF0gewotICAgICAgICBydW5Mb29wLT5wZXJmb3JtV29yaygpOwotICAg
IH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fbWFpbkNvbnRleHQuZ2V0KCkpOwor
ICAgIG1fd29ya1NvdXJjZS5zY2hlZHVsZSgpOwogICAgIGdfbWFpbl9jb250ZXh0X3dha2V1cCht
X21haW5Db250ZXh0LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2Uo
UnVuTG9vcCYgcnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV90aW1l
clNvdXJjZSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6OmJpbmQoJlJ1bkxvb3A6OlRp
bWVyQmFzZTo6dGltZXJGaXJlZCwgdGhpcyksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9ydW5Mb29w
Lm1fbWFpbkNvbnRleHQuZ2V0KCkpCiB7CiB9CiAKQEAgLTExMCwxMiArMTExLDE1IEBAIFJ1bkxv
b3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCiAKIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpz
dGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsKLSAgICBtX3RpbWVyU291
cmNlLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6OmZ1
bmN0aW9uPGJvb2wgKCk+KFt0aGlzLCByZXBlYXRdIHsgZmlyZWQoKTsgcmV0dXJuIHJlcGVhdDsg
fSksCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGZpcmVJbnRlcnZhbCkpLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fcnVuTG9vcC5tX21haW5Db250ZXh0LmdldCgp
KTsKKyAgICBtX2ZpcmVJbnRlcnZhbCA9IGZpcmVJbnRlcnZhbDsKKyAgICBtX3JlcGVhdGluZyA9
IHJlcGVhdDsKKyAgICBtX3RpbWVyU291cmNlLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxk
b3VibGU+KG1fZmlyZUludGVydmFsKSkpOwogfQogCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6
c3RvcCgpCiB7CisgICAgbV9maXJlSW50ZXJ2YWwgPSAwOworICAgIG1fcmVwZWF0aW5nID0gZmFs
c2U7CiAgICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKIH0KIApAQCAtMTI0LDQgKzEyOCwxMSBA
QCBib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBt
X3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7CiB9CiAKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNl
Ojp0aW1lckZpcmVkKCkKK3sKKyAgICBmaXJlZCgpOworICAgIGlmIChtX3JlcGVhdGluZykKKyAg
ICAgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZShzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPiht
X2ZpcmVJbnRlcnZhbCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xp
Yi9Xb3JrUXVldWVHTGliLmNwcAppbmRleCBlZTFiNjBiYWY1ZDA2OGJhMmNlYWQzZDgxMTQ4ZmI0
YTJjN2M0MWIyLi44MzQxODA4YTgzZDY3MzYxMjI1YTMwN2E0MmFhM2M5Nzg2YmE4MGQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKQEAgLTQyLDYgKzQyLDggQEAgdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1Mp
CiAgICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250
ZXh0LmdldCgpLCBGQUxTRSkpOwogICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7CiAKKyAgICBtX2Rp
c3BhdGNoUXVldWUuaW5pdGlhbGl6ZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaCIsIEdf
UFJJT1JJVFlfREVGQVVMVCwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworCiAgICAgLy8gVGhpcyBu
YW1lIGNhbiBiZSBjb20uYXBwbGUuV2ViS2l0LlByb2Nlc3NMYXVuY2hlciBvciBjb20uYXBwbGUu
Q29yZUlQQy5SZWNlaXZlUXVldWUuCiAgICAgLy8gV2UgYXJlIHVzaW5nIHRob3NlIG5hbWVzIGZv
ciB0aGUgdGhyZWFkIG5hbWUsIGJ1dCBib3RoIGFyZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJz
LAogICAgIC8vIHdoaWNoIGlzIHRoZSBsaW1pdCBvZiBWaXN1YWwgU3R1ZGlvIGZvciB0aHJlYWQg
bmFtZXMuCkBAIC03NSw4ICs3Nyw5IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IHN0
YXJ0ZWQgeWV0LCBzbyBzY2hlZHVsZSBhIG1haW4gbG9vcCBxdWl0IHRvIGVuc3VyZSB0aGUgdGhy
ZWFkIGZpbmlzaGVzLgogICAgICAgICAgICAgR01haW5Mb29wKiBldmVudExvb3AgPSBtX2V2ZW50
TG9vcC5nZXQoKTsKLSAgICAgICAgICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmREZWxl
dGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZSBxdWl0IG1haW4gbG9vcCIsIFtldmVudExv
b3BdIHsgZ19tYWluX2xvb3BfcXVpdChldmVudExvb3ApOyB9LAotICAgICAgICAgICAgICAgIEdf
UFJJT1JJVFlfSElHSCwgbnVsbHB0ciwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworICAgICAgICAg
ICAgR1NvdXJjZVdyYXA6Ok9uZVNob3Q6OmNvbnN0cnVjdCgiW1dlYktpdF0gV29ya1F1ZXVlIHF1
aXQgbWFpbiBsb29wIiwKKyAgICAgICAgICAgICAgICBbZXZlbnRMb29wXSB7IGdfbWFpbl9sb29w
X3F1aXQoZXZlbnRMb29wKTsgfSwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSwKKyAgICAg
ICAgICAgICAgICBHX1BSSU9SSVRZX0hJR0gsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKICAgICAg
ICAgfQogICAgICAgICBtX2V2ZW50TG9vcCA9IG51bGxwdHI7CiAgICAgfQpAQCAtODcsMjMgKzkw
LDIyIEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogdm9pZCBXb3JrUXVl
dWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9zZUZ1
bmN0aW9uKQogewogICAgIEdSZWZQdHI8R1NvY2tldD4gc29ja2V0ID0gYWRvcHRHUmVmKGdfc29j
a2V0X25ld19mcm9tX2ZkKGZpbGVEZXNjcmlwdG9yLCAwKSk7Ci0gICAgcmVmKCk7Ci0gICAgbV9z
b2NrZXRFdmVudFNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpTb2NrZXRFdmVu
dEhhbmRsZXIiLCBbZnVuY3Rpb24sIGNsb3NlRnVuY3Rpb25dKEdJT0NvbmRpdGlvbiBjb25kaXRp
b24pIHsKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisgICAgbV9zb2Nr
ZXRFdmVudFNvdXJjZS5pbml0aWFsaXplKCJbV2ViS2l0XSBXb3JrUXVldWU6OlNvY2tldEV2ZW50
SGFuZGxlciIsCisgICAgICAgIFtmdW5jdGlvbiwgY2xvc2VGdW5jdGlvbiwgcHJvdGVjdG9yXShH
SU9Db25kaXRpb24gY29uZGl0aW9uKSB7CiAgICAgICAgICAgICBpZiAoY29uZGl0aW9uICYgR19J
T19IVVAgfHwgY29uZGl0aW9uICYgR19JT19FUlIgfHwgY29uZGl0aW9uICYgR19JT19OVkFMKSB7
CiAgICAgICAgICAgICAgICAgY2xvc2VGdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVy
biBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29uZGl0aW9uICYgR19JT19JTikgewog
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdNYWlu
TG9vcFNvdXJjZTo6Q29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEdNYWluTG9vcFNvdXJjZTo6U3RvcDsKLSAgICAgICAgfSwgc29ja2V0LmdldCgp
LCBHX0lPX0lOLAotICAgICAgICBbdGhpc10geyBkZXJlZigpOyB9LAotICAgICAgICBtX2V2ZW50
Q29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sIHNv
Y2tldC5nZXQoKSwgR19JT19JTiwgR19QUklPUklUWV9ERUZBVUxULCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGludCkKQEAgLTExMywxNiArMTE1LDE0IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCkKIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiB7Ci0gICAgcmVmKCk7Ci0gICAgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNw
YXRjaCIsIFdURjo6bW92ZShmdW5jdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAg
W3RoaXNdIHsgZGVyZWYoKTsgfSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworICAgIG1fZGlzcGF0
Y2hRdWV1ZS5xdWV1ZShXVEY6Om1vdmUoZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogewotICAgIHJlZigpOwotICAgIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5QW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0XSBXb3Jr
UXVldWU6OmRpc3BhdGNoQWZ0ZXIiLCBXVEY6Om1vdmUoZnVuY3Rpb24pLAotICAgICAgICBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihkdXJhdGlv
biksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdIHsgZGVyZWYoKTsgfSwgbV9ldmVudENvbnRl
eHQuZ2V0KCkpOworICAgIFJlZlB0cjxXb3JrUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBH
U291cmNlV3JhcDo6T25lU2hvdDo6Y29uc3RydWN0KCJbV2ViS2l0XSBXb3JrUXVldWU6OmRpc3Bh
dGNoQWZ0ZXIiLCBzdGQ6OmJpbmQoW3Byb3RlY3Rvcl0oY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiYgZnVuY3Rpb24pIHsgZnVuY3Rpb24oKTsgfSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSksCisg
ICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM+KGR1cmF0aW9uKSwgR19QUklPUklUWV9ERUZBVUxULCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAu
Y3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HU291cmNlV3JhcC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWE1NGQzYmY1N2Y5OWRjM2NmMmNiN2E0ZGRmMjc0ZWE5NGNkYTZmYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuY3BwCkBAIC0wLDAgKzEsMzAy
IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1NvdXJjZVdyYXAuaCIKKworI2lu
Y2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4K
KyNpbmNsdWRlIDxjc3RkaW8+CisKK25hbWVzcGFjZSBXVEYgeworCitHU291cmNlRnVuY3MgR1Nv
dXJjZVdyYXA6OnNvdXJjZUZ1bmN0aW9ucyA9IHsKKyAgICAvLyBwcmVwYXJlCisgICAgW10oR1Nv
dXJjZSogc291cmNlLCBnaW50KikgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIHJldHVybiBn
X3NvdXJjZV9nZXRfcmVhZHlfdGltZShzb3VyY2UpID09IDA7CisgICAgfSwKKyAgICBudWxscHRy
LCAvLyBjaGVjaworICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSogc291cmNlLCBHU291
cmNlRnVuYyBjYWxsYmFjaywgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAg
ICAgIEFTU0VSVChzb3VyY2UpOworICAgICAgICBpZiAoZ19zb3VyY2VfZ2V0X3JlYWR5X3RpbWUo
c291cmNlKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAg
ICAgICAgRGlzcGF0Y2hDb250ZXh0IGNvbnRleHR7IHNvdXJjZSwgZGF0YSB9OworICAgICAgICBy
ZXR1cm4gY2FsbGJhY2soJmNvbnRleHQpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxp
emUKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xv
c3VyZV9tYXJzaGFsbAorfTsKKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OnN0YXRpY0RlbGF5QmFz
ZWRWb2lkQ2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBhdXRvJiBkaXNwYXRjaCA9ICpy
ZWludGVycHJldF9jYXN0PERpc3BhdGNoQ29udGV4dCo+KGRhdGEpOworICAgIGF1dG8mIGNhbGxi
YWNrID0gKnJlaW50ZXJwcmV0X2Nhc3Q8RGVsYXlCYXNlZDo6Q2FsbGJhY2tDb250ZXh0PHZvaWQg
KCk+Kj4oZGlzcGF0Y2guc2Vjb25kKTsKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoY2FsbGJhY2suc2Vjb25kLmNhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdf
U09VUkNFX0NPTlRJTlVFOworCisgICAgY2FsbGJhY2suc2Vjb25kLmRpc3BhdGNoaW5nID0gdHJ1
ZTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShkaXNwYXRjaC5maXJzdCwgLTEpOworCisg
ICAgY2FsbGJhY2suZmlyc3QoKTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGluZyA9
IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworZ2Jvb2xlYW4gR1Nv
dXJjZVdyYXA6OmR5bmFtaWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7
CisgICAgYXV0byYgZGlzcGF0Y2ggPSAqcmVpbnRlcnByZXRfY2FzdDxEaXNwYXRjaENvbnRleHQq
PihkYXRhKTsKKyAgICBhdXRvJiBjYWxsYmFjayA9ICpyZWludGVycHJldF9jYXN0PERlbGF5QmFz
ZWQ6OkNhbGxiYWNrQ29udGV4dDx2b2lkICgpPio+KGRpc3BhdGNoLnNlY29uZCk7CisgICAgaWYg
KGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbGxiYWNrLnNlY29uZC5jYW5jZWxsYWJsZS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKworICAgIGNhbGxiYWNr
LnNlY29uZC5kaXNwYXRjaGluZyA9IHRydWU7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUo
ZGlzcGF0Y2guZmlyc3QsIC0xKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2gu
Zmlyc3QsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2FsbGJhY2suZmlyc3Qo
KTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGluZyA9IGZhbHNlOworICAgIHJldHVy
biBHX1NPVVJDRV9DT05USU5VRTsKK30KKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OmR5bmFtaWNE
ZWxheUJhc2VkQm9vbENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7CisgICAgYXV0byYgZGlzcGF0
Y2ggPSAqcmVpbnRlcnByZXRfY2FzdDxEaXNwYXRjaENvbnRleHQqPihkYXRhKTsKKyAgICBhdXRv
JiBjYWxsYmFjayA9ICpyZWludGVycHJldF9jYXN0PERlbGF5QmFzZWQ6OkNhbGxiYWNrQ29udGV4
dDxib29sICgpPio+KGRpc3BhdGNoLnNlY29uZCk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkKGNhbGxiYWNrLnNlY29uZC5jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBHX1NPVVJDRV9DT05USU5VRTsKKworICAgIGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGlu
ZyA9IHRydWU7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoZGlzcGF0Y2guZmlyc3QsIC0x
KTsKKworICAgIGlmIChjYWxsYmFjay5maXJzdCgpKQorICAgICAgICBnX3NvdXJjZV9zZXRfcmVh
ZHlfdGltZShkaXNwYXRjaC5maXJzdCwgdGFyZ2V0VGltZUZvckRlbGF5KGNhbGxiYWNrLnNlY29u
ZC5kZWxheSkpOworICAgIGVsc2UKKyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3Bh
dGNoLmZpcnN0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAgIGNhbGxiYWNrLnNl
Y29uZC5kaXNwYXRjaGluZyA9IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsK
K30KKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6OnN0YXRpY09uZVNob3RDYWxsYmFjayhncG9pbnRl
ciBkYXRhKQoreworICAgIGF1dG8mIGRpc3BhdGNoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGF0
Y2hDb250ZXh0Kj4oZGF0YSk7CisgICAgYXV0byYgY2FsbGJhY2sgPSAqcmVpbnRlcnByZXRfY2Fz
dDxPbmVTaG90OjpDYWxsYmFja0NvbnRleHQqPihkaXNwYXRjaC5zZWNvbmQpOworCisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUoZGlzcGF0Y2guZmlyc3QsIC0xKTsKKyAgICBjYWxsYmFjay5m
aXJzdCgpOworCisgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKK30KKworZ2Jvb2xlYW4gR1Nv
dXJjZVdyYXA6OnN0YXRpY1NvY2tldENhbGxiYWNrKEdTb2NrZXQqLCBHSU9Db25kaXRpb24gY29u
ZGl0aW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIGF1dG8mIGNhbGxiYWNrID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8U29ja2V0OjpDYWxsYmFja0NvbnRleHQqPihkYXRhKTsKKyAgICBpZiAoZ19jYW5j
ZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FsbGJhY2suc2Vjb25kLmdldCgpKSkKKyAgICAgICAgcmV0
dXJuIEdfU09VUkNFX1JFTU9WRTsKKworICAgIHJldHVybiBjYWxsYmFjay5maXJzdChjb25kaXRp
b24pOworfQorCitnaW50NjQgR1NvdXJjZVdyYXA6OnRhcmdldFRpbWVGb3JEZWxheShzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGRlbGF5KQoreworICAgIGlmICghZGVsYXkuY291bnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBnaW50NjQgY3VycmVudFRpbWUgPSBnX2dldF9tb25vdG9u
aWNfdGltZSgpOworICAgIGdpbnQ2NCB0YXJnZXRUaW1lID0gY3VycmVudFRpbWUgKyBzdGQ6Om1p
bjxnaW50NjQ+KEdfTUFYSU5UNjQgLSBjdXJyZW50VGltZSwgZGVsYXkuY291bnQoKSk7CisgICAg
QVNTRVJUKHRhcmdldFRpbWUgPj0gY3VycmVudFRpbWUpOworCisgICAgcmV0dXJuIHRhcmdldFRp
bWU7Cit9CisKK0dTb3VyY2VXcmFwOjpCYXNlOjp+QmFzZSgpCit7CisgICAgaWYgKG1fc291cmNl
KQorICAgICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKK30KKworYm9vbCBH
U291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNTY2hlZHVsZWQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3NvdXJjZSk7CisgICAgcmV0dXJuIGdfc291cmNlX2dldF9yZWFkeV90aW1lKG1fc291cmNl
LmdldCgpKSAhPSAtMTsKK30KKworYm9vbCBHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNBY3Rp
dmUoKSBjb25zdAoreworICAgIHJldHVybiBpc1NjaGVkdWxlZCgpIHx8IG1fY29udGV4dC5kaXNw
YXRjaGluZzsKK30KKwordm9pZCBHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBBU1NFUlQoIW1fc291cmNlKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvdXJj
ZV9uZXcoJnNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSk7CisKKyAgICBtX2NvbnRl
eHQuZGVsYXkgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApOworICAgIG1fY29udGV4dC5j
YW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBtX2NvbnRl
eHQuZGlzcGF0Y2hpbmcgPSBmYWxzZTsKKworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNl
LmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0KCks
IHByaW9yaXR5KTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGdfbWFp
bl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpOworICAgIGdfc291cmNlX2F0dGFjaChtX3Nv
dXJjZS5nZXQoKSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkRlbGF5QmFzZWQ6
OnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkpCit7CisgICAgQVNTRVJU
KG1fc291cmNlKTsKKyAgICBtX2NvbnRleHQuZGVsYXkgPSBkZWxheTsKKworICAgIGlmIChnX2Nh
bmNlbGxhYmxlX2lzX2NhbmNlbGxlZChtX2NvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKQorICAg
ICAgICBtX2NvbnRleHQuY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSk7CisKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgdGFyZ2V0
VGltZUZvckRlbGF5KGRlbGF5KSk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OkRlbGF5QmFzZWQ6
OmNhbmNlbCgpCit7CisgICAgQVNTRVJUKG1fc291cmNlKTsKKyAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChtX2NvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIGdfc291cmNlX3NldF9yZWFk
eV90aW1lKG1fc291cmNlLmdldCgpLCAtMSk7Cit9CisKK0dTb3VyY2VXcmFwOjpTdGF0aWM6OlN0
YXRpYyhjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24s
IGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIGluaXRpYWxpemUo
bmFtZSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lk
IEdTb3VyY2VXcmFwOjpTdGF0aWM6OmluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBEZWxheUJhc2VkOjppbml0aWFsaXplKG5hbWUsIHByaW9yaXR5LCBj
b250ZXh0KTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8R1NvdXJjZUZ1bmM+KHN0YXRpY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2spLAorICAg
ICAgICBuZXcgQ2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24pLCBt
X2NvbnRleHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0Nv
bnRleHQ8Q2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+PikpOworfQorCit2b2lkIEdTb3VyY2VXcmFw
OjpTdGF0aWM6OnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkpCit7Cisg
ICAgRGVsYXlCYXNlZDo6c2NoZWR1bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpT
dGF0aWM6OmNhbmNlbCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRGVsYXlCYXNlZDo6Y2FuY2VsKCk7Cit9CisKK0dTb3VyY2VXcmFwOjpEeW5hbWljOjpE
eW5hbWljKGNvbnN0IGNoYXIqIG5hbWUsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250
ZXh0KQoreworICAgIERlbGF5QmFzZWQ6OmluaXRpYWxpemUobmFtZSwgcHJpb3JpdHksIGNvbnRl
eHQpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZShzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkp
Cit7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzdGF0aWNfY2Fz
dDxHU291cmNlRnVuYz4oZHluYW1pY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2spLAorICAgICAgICBu
ZXcgQ2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24pLCBtX2NvbnRl
eHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0NvbnRleHQ8
Q2FsbGJhY2tDb250ZXh0PHZvaWQgKCk+PikpOworCisgICAgRGVsYXlCYXNlZDo6c2NoZWR1bGUo
ZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZShzdGQ6OmZ1
bmN0aW9uPGJvb2wgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVs
YXkpCit7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzdGF0aWNf
Y2FzdDxHU291cmNlRnVuYz4oZHluYW1pY0RlbGF5QmFzZWRCb29sQ2FsbGJhY2spLAorICAgICAg
ICBuZXcgQ2FsbGJhY2tDb250ZXh0PGJvb2wgKCk+eyBXVEY6Om1vdmUoZnVuY3Rpb24pLCBtX2Nv
bnRleHQgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0NvbnRl
eHQ8Q2FsbGJhY2tDb250ZXh0PGJvb2wgKCk+PikpOworCisgICAgRGVsYXlCYXNlZDo6c2NoZWR1
bGUoZGVsYXkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpEeW5hbWljOjpjYW5jZWwoKQorewor
ICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIERlbGF5QmFzZWQ6OmNh
bmNlbCgpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6Ok9uZVNob3Q6OmNv
bnN0cnVjdChjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgR01haW5D
b250ZXh0KiBjb250ZXh0KQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRH
UmVmKGdfc291cmNlX25ldygmc291cmNlRnVuY3Rpb25zLCBzaXplb2YoR1NvdXJjZSkpKTsKKwor
ICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vf
c2V0X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgc3RhdGljX2Nhc3Q8R1NvdXJjZUZ1bmM+KHN0YXRpY09u
ZVNob3RDYWxsYmFjayksCisgICAgICAgIG5ldyBDYWxsYmFja0NvbnRleHR7IFdURjo6bW92ZShm
dW5jdGlvbiksIG51bGxwdHIgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lD
YWxsYmFja0NvbnRleHQ8Q2FsbGJhY2tDb250ZXh0PikpOworICAgIGdfc291cmNlX3NldF9yZWFk
eV90aW1lKHNvdXJjZS5nZXQoKSwgdGFyZ2V0VGltZUZvckRlbGF5KGRlbGF5KSk7CisKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIGNvbnRleHQgPSBnX21haW5fY29udGV4dF9nZXRfdGhyZWFk
X2RlZmF1bHQoKTsKKyAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBjb250ZXh0KTsK
K30KKwordm9pZCBHU291cmNlV3JhcDo6U29ja2V0Ojppbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4mJiBmdW5jdGlvbiwgR1NvY2tl
dCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoIW1fc291cmNlKTsKKyAgICBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBtX3NvdXJjZSA9IGFk
b3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBjYW5jZWxs
YWJsZSkpOworICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoY2FuY2VsbGFibGUpOworCisg
ICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNl
X3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihzdGF0aWNTb2NrZXRDYWxsYmFjayksCisgICAgICAgIG5ldyBDYWxsYmFja0NvbnRleHR7IFdU
Rjo6bW92ZShmdW5jdGlvbiksIG1fY2FuY2VsbGFibGUgfSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGRlc3Ryb3lDYWxsYmFja0NvbnRleHQ8Q2FsbGJhY2tDb250ZXh0PikpOworCisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICBjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfZ2V0X3RocmVh
ZF9kZWZhdWx0KCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0
KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6U29ja2V0OjpjYW5jZWwoKQoreworICAgIGdfY2Fu
Y2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworfQorCitHU291cmNlV3JhcDo6
UXVldWU6OlF1ZXVlKCkKK3sKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOworfQorCitHU291
cmNlV3JhcDo6UXVldWU6On5RdWV1ZSgpCit7CisgICAgZ19tdXRleF9jbGVhcigmbV9tdXRleCk7
Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OlF1ZXVlOjppbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fc291cmNl
V3JhcC5pbml0aWFsaXplKG5hbWUsIHN0ZDo6YmluZCgmUXVldWU6OmRpc3BhdGNoUXVldWUsIHRo
aXMpLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR1NvdXJjZVdyYXA6OlF1ZXVlOjpx
dWV1ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCit7CisgICAgV1RGOjpHTXV0
ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIG1fcXVldWUuYXBwZW5kKFdURjo6
bW92ZShmdW5jdGlvbikpOworCisgICAgbV9zb3VyY2VXcmFwLnNjaGVkdWxlKCk7Cit9CisKK3Zv
aWQgR1NvdXJjZVdyYXA6OlF1ZXVlOjpkaXNwYXRjaFF1ZXVlKCkKK3sKKyAgICB3aGlsZSAoMSkg
eworICAgICAgICBkZWNsdHlwZShtX3F1ZXVlKSBxdWV1ZTsKKyAgICAgICAgeworICAgICAgICAg
ICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICAgICAg
cXVldWUgPSBXVEY6Om1vdmUobV9xdWV1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXF1
ZXVlLnNpemUoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZvciAoYXV0byYgZnVu
Y3Rpb24gOiBxdWV1ZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJj
ZVdyYXAuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZjE0ZDU0YWIzNWYzYjZlNDhmOTczMzE1OTY1NzdiODJjNTg2OWIzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HU291cmNlV3JhcC5oCkBAIC0wLDAgKzEsMTQ0
IEBACisjaWZuZGVmIEdTb3VyY2VXcmFwX2gKKyNkZWZpbmUgR1NvdXJjZVdyYXBfaAorCisjaW5j
bHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQgR1NvY2tldDsK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEdTb3VyY2VXcmFwIHsKK3ByaXZhdGU6CisgICAg
c3RhdGljIEdTb3VyY2VGdW5jcyBzb3VyY2VGdW5jdGlvbnM7CisgICAgc3RhdGljIGdib29sZWFu
IHN0YXRpY0RlbGF5QmFzZWRWb2lkQ2FsbGJhY2soZ3BvaW50ZXIpOworICAgIHN0YXRpYyBnYm9v
bGVhbiBkeW5hbWljRGVsYXlCYXNlZFZvaWRDYWxsYmFjayhncG9pbnRlcik7CisgICAgc3RhdGlj
IGdib29sZWFuIGR5bmFtaWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKGdwb2ludGVyKTsKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gc3RhdGljT25lU2hvdENhbGxiYWNrKGdwb2ludGVyKTsKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gc3RhdGljU29ja2V0Q2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiwg
Z3BvaW50ZXIpOworCisgICAgdXNpbmcgRGlzcGF0Y2hDb250ZXh0ID0gc3RkOjpwYWlyPEdTb3Vy
Y2UqLCBncG9pbnRlcj47CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgor
ICAgIHVzaW5nIENhbGxiYWNrQ29udGV4dFR5cGUgPSBzdGQ6OnBhaXI8c3RkOjpmdW5jdGlvbjxU
MT4sIFQyPjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveUNhbGxiYWNrQ29udGV4dChncG9pbnRlciBkYXRhKQorICAgIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGRhdGEpOworICAgICAgICBkZWxldGUgY29u
dGV4dDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2ludDY0IHRhcmdldFRpbWVGb3JEZWxheShzdGQ6
OmNocm9ubzo6bWljcm9zZWNvbmRzKTsKKworICAgIGNsYXNzIEJhc2UgeworICAgICAgICBCYXNl
KGNvbnN0IEJhc2UmKSA9IGRlbGV0ZTsKKyAgICAgICAgQmFzZSYgb3BlcmF0b3I9KGNvbnN0IEJh
c2UmKSA9IGRlbGV0ZTsKKyAgICAgICAgQmFzZShCYXNlJiYpID0gZGVsZXRlOworICAgICAgICBC
YXNlJiBvcGVyYXRvcj0oQmFzZSYmKSA9IGRlbGV0ZTsKKyAgICBwdWJsaWM6CisgICAgICAgIEJh
c2UoKSA9IGRlZmF1bHQ7CisgICAgICAgIH5CYXNlKCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2U7IH0KKwor
ICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOworICAgIH07CisKKyAgICBjbGFzcyBE
ZWxheUJhc2VkIDogQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWxheUJhc2VkKCkgPSBk
ZWZhdWx0OworCisgICAgICAgIHVzaW5nIEJhc2U6OmlzSW5pdGlhbGl6ZWQ7CisgICAgICAgIGJv
b2wgaXNTY2hlZHVsZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0Owor
CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgY2hhciogbmFt
ZSwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZShz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKworICAg
ICAgICBzdHJ1Y3QgQ29udGV4dCB7CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzIGRlbGF5OworICAgICAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxl
OworICAgICAgICAgICAgYm9vbCBkaXNwYXRjaGluZzsKKyAgICAgICAgfSBtX2NvbnRleHQ7CisK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEdTb3VyY2VXcmFwOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgICAgICB1c2luZyBDYWxsYmFja0NvbnRleHQgPSBDYWxsYmFja0NvbnRleHRU
eXBlPFQsIENvbnRleHQmPjsKKyAgICB9OworCitwdWJsaWM6CisgICAgY2xhc3MgU3RhdGljIDog
cHVibGljIERlbGF5QmFzZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhdGljKCkgPSBkZWZh
dWx0OworICAgICAgICBTdGF0aWMoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiYmLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIEdNYWluQ29udGV4dCog
PSBudWxscHRyKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxU
LCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZShzdGQ6
OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSk7Cisg
ICAgICAgIHZvaWQgY2FuY2VsKCk7CisgICAgfTsKKworICAgIGNsYXNzIER5bmFtaWMgOiBwdWJs
aWMgRGVsYXlCYXNlZCB7CisgICAgcHVibGljOgorICAgICAgICBEeW5hbWljKGNvbnN0IGNoYXIq
IG5hbWUsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0KiA9
IG51bGxwdHIpOworCisgICAgICAgIHZvaWQgc2NoZWR1bGUoc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiYmLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25k
cygwKSk7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoc3RkOjpmdW5jdGlvbjxib29sICgpPiYmLCBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSk7
CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CisgICAgfTsKKworICAgIGNsYXNzIE9uZVNob3Qgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBkZWxheSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCksIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0KiBjb250ZXh0ID0gbnVsbHB0cik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgR1NvdXJjZVdyYXA7CisgICAg
ICAgIHVzaW5nIENhbGxiYWNrQ29udGV4dCA9IENhbGxiYWNrQ29udGV4dFR5cGU8dm9pZCAoKSwg
dm9pZCo+OworICAgIH07CisKKyAgICBjbGFzcyBTb2NrZXQgOiBwdWJsaWMgQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICBTb2NrZXQoKSA9IGRlZmF1bHQ7CisgICAgICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlvbik+
JiYsIEdTb2NrZXQqLCBHSU9Db25kaXRpb24sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVG
QVVMVCwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgICAgICB2b2lkIGNhbmNlbCgpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdTb3VyY2VXcmFwOworICAgICAg
ICB1c2luZyBDYWxsYmFja0NvbnRleHQgPSBDYWxsYmFja0NvbnRleHRUeXBlPGJvb2wgKEdJT0Nv
bmRpdGlvbiksIEdSZWZQdHI8R0NhbmNlbGxhYmxlPj47CisKKyAgICAgICAgR1JlZlB0cjxHQ2Fu
Y2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsKKyAg
ICAgICAgUXVldWUoY29uc3QgUXVldWUmKSA9IGRlbGV0ZTsKKyAgICAgICAgUXVldWUmIG9wZXJh
dG9yPShjb25zdCBRdWV1ZSYpID0gZGVsZXRlOworICAgICAgICBRdWV1ZShRdWV1ZSYmKSA9IGRl
bGV0ZTsKKyAgICAgICAgUXVldWUmIG9wZXJhdG9yPShRdWV1ZSYmKSA9IGRlbGV0ZTsKKyAgICBw
dWJsaWM6CisgICAgICAgIFF1ZXVlKCk7CisgICAgICAgIH5RdWV1ZSgpOworCisgICAgICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBjaGFyKiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZB
VUxULCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBxdWV1ZShzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+JiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBkaXNw
YXRjaFF1ZXVlKCk7CisKKyAgICAgICAgU3RhdGljIG1fc291cmNlV3JhcDsKKyAgICAgICAgR011
dGV4IG1fbXV0ZXg7CisgICAgICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCAxNj4g
bV9xdWV1ZTsKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
R1NvdXJjZVdyYXA7CisKKyNlbmRpZiAvLyBHU291cmNlV3JhcF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDQ5NzVlNmZkYzJlNDg2MmM5MTgxZjAwMThmNDIy
MWVjMjY4ODJhZTcuLjEyYjNmYzliZjRjYzRhNGU0YmQ2NjAzNDI5YTUxNDI0YzRhNmNmM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhy
ZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdy
YXAuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM0Nyw4ICszNDcsOSBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0Zp
bGVSZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubwogICAg
IG1fbG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcoY29udGV4dC5nZXQoKSwgRkFMU0Up
KTsKIAogICAgIC8vIFN0YXJ0IHRoZSBwaXBlbGluZSBwcm9jZXNzaW5nIGp1c3QgYWZ0ZXIgdGhl
IGxvb3AgaXMgc3RhcnRlZC4KLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHNvdXJjZTsK
LSAgICBzb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIEF1ZGlvRmlsZVJlYWRlcjo6ZGVjb2RlQXVk
aW9Gb3JCdXNDcmVhdGlvbiIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJkF1ZGlv
RmlsZVJlYWRlcjo6ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbiwgdGhpcykpLCBHX1BSSU9SSVRZ
X0RFRkFVTFQsIG51bGxwdHIsIGNvbnRleHQuZ2V0KCkpOworICAgIEdTb3VyY2VXcmFwOjpPbmVT
aG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIEF1ZGlvRmlsZVJlYWRlcjo6ZGVjb2RlQXVkaW9Gb3JC
dXNDcmVhdGlvbiIsCisgICAgICAgIHN0ZDo6YmluZCgmQXVkaW9GaWxlUmVhZGVyOjpkZWNvZGVB
dWRpb0ZvckJ1c0NyZWF0aW9uLCB0aGlzKSwKKyAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSwgR19QUklPUklUWV9ERUZBVUxULCBjb250ZXh0LmdldCgpKTsKIAogICAgIGdfbWFp
bl9sb29wX3J1bihtX2xvb3AuZ2V0KCkpOwogICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRf
ZGVmYXVsdChjb250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAyOWU4ODRiZjFkOTU5MzUyYjRlZjFlZjcy
NTljNjA1ZjAxYzc3YTQ4Li4yYzc2ZDExNjU3NmVlOTgzNWJlMmJhMzBmY2I4NDhjODk5NzI3OGRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuY3BwCkBAIC01NCw2ICs1NCw4IEBAIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB0ZXh0VHJh
Y2tQcml2YXRlRXZlbnRDYWxsYmFjayhHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qCiAKIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKICAgICA6IEluYmFuZFRleHRUcmFj
a1ByaXZhdGUoV2ViVlRUKSwgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlzLCBpbmRleCwg
cGFkKQorICAgICwgbV9zYW1wbGVUaW1lckhhbmRsZXIoIltXZWJLaXRdIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTYW1sZSIsIHN0ZDo6YmluZCgmSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSwgdGhpcykpCisg
ICAgLCBtX3N0cmVhbVRpbWVySGFuZGxlcigiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBzdGQ6OmJpbmQoJkluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTdHJlYW1DaGFuZ2VkLCB0
aGlzKSkKIHsKICAgICBtX2V2ZW50UHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZShtX3BhZC5nZXQo
KSwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCiAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4odGV4dFRyYWNrUHJpdmF0ZUV2ZW50Q2FsbGJh
Y2spLCB0aGlzLCAwKTsKQEAgLTgwLDEyICs4MiwxMiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZVNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlKQog
ICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fc2FtcGxlTXV0ZXgpOwogICAgICAgICBtX3BlbmRp
bmdTYW1wbGVzLmFwcGVuZChzYW1wbGUpOwogICAgIH0KLSAgICBtX3NhbXBsZVRpbWVySGFuZGxl
ci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5VHJhY2tPZlNhbXBsZSIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJkluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTYW1wbGUsIHRoaXMpKSk7
CisgICAgbV9zYW1wbGVUaW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzdHJlYW1DaGFuZ2VkKCkKIHsKLSAgICBtX3N0cmVh
bVRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4oc3RkOjpiaW5kKCZJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFj
a09mU3RyZWFtQ2hhbmdlZCwgdGhpcykpKTsKKyAgICBtX3N0cmVhbVRpbWVySGFuZGxlci5zY2hl
ZHVsZSgpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVRyYWNrT2ZTYW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgKaW5kZXggNjIyMmE2ODQ4MjdiY2NlMjQwZjAzMDJhOWNhMmU2MmUwNDA5
Zjk0OC4uMWYwYzM2ZDY3NDk0YjE0YjZjM2E5MTNkMzhkZjhiNmE2M2FjZDkzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkluYmFu
ZFRleHRUcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjIsOCArNjIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKIAotICAg
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9zYW1wbGVUaW1lckhhbmRsZXI7Ci0gICAgR1Ro
cmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3N0cmVhbVRpbWVySGFuZGxlcjsKKyAgICBHU291cmNl
V3JhcDo6U3RhdGljIG1fc2FtcGxlVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0
aWMgbV9zdHJlYW1UaW1lckhhbmRsZXI7CiAgICAgZ3Vsb25nIG1fZXZlbnRQcm9iZTsKICAgICBW
ZWN0b3I8R1JlZlB0cjxHc3RTYW1wbGU+ID4gbV9wZW5kaW5nU2FtcGxlczsKICAgICBTdHJpbmcg
bV9zdHJlYW1JZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggMjc4MTIyMTU2OWU2YTVlMjMxODFjODhhOGQ4NDRhODU1NzQzZGY2My4uZWZk
ODFhODkwNDBmZTkzZGIxMzE0YTJmN2UwMDJhMWE1MTgyMGNhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTIxMCw2ICsyMTAsMTEgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIo
TWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAsIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKGZh
bHNlKQogICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKICAgICAsIG1faGFzQXVkaW8oZmFsc2UpCisg
ICAgLCBtX2F1ZGlvVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmF1ZGlvQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvLCB0aGlzKSkKKyAgICAsIG1fdGV4dFRpbWVySGFuZGxl
cigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsIHN0
ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQs
IHRoaXMpKQorICAgICwgbV92aWRlb1RpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbywgdGhpcykpCisgICAgLCBtX3ZpZGVv
Q2Fwc1RpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb0NhcHNDaGFuZ2VkIiwgc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzLCB0aGlzKSkKKyAgICAsIG1fcmVhZHlUaW1lckhhbmRs
ZXIoIltXZWJLaXRdIG1lZGlhUGxheWVyUHJpdmF0ZVJlYWR5U3RhdGVUaW1lb3V0Q2FsbGJhY2si
LCBbdGhpc10geyBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsgfSkKICAgICAs
IG1fdG90YWxCeXRlcygwKQogICAgICwgbV9wcmVzZXJ2ZXNQaXRjaChmYWxzZSkKICNpZiBFTkFC
TEUoV0VCX0FVRElPKQpAQCAtMzk5LDEyICs0MDQsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiAgICAg
Ly8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcgb24gUkVBRFkuCiAgICAgLy8gQWxzbyBsZXRzIHJl
bW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5nZSBmb3IgYW55IHN0YXRl
IG90aGVyIHRoYW4gUkVBRFkuCiAgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAotICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVf
UkVBRFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNTY2hlZHVsZWQoKSkgewotICAgICAgICBt
X3JlYWR5VGltZXJIYW5kbGVyLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gbWVkaWFQbGF5
ZXJQcml2YXRlUmVhZHlTdGF0ZVRpbWVvdXRDYWxsYmFjayIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PihbdGhpc10geyBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsgfSksCi0gICAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyhnUmVhZHlTdGF0ZVRpbWVySW50ZXJ2YWwpKTsK
LSAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9TVEFURV9SRUFEWSAmJiBtX3JlYWR5VGlt
ZXJIYW5kbGVyLmlzU2NoZWR1bGVkKCkpIHsKKyAgICBpZiAobmV3U3RhdGUgPT0gR1NUX1NUQVRF
X1JFQURZICYmICFtX3JlYWR5VGltZXJIYW5kbGVyLmlzU2NoZWR1bGVkKCkpCisgICAgICAgIG1f
cmVhZHlUaW1lckhhbmRsZXIuc2NoZWR1bGUoc3RkOjpjaHJvbm86OnNlY29uZHMoZ1JlYWR5U3Rh
dGVUaW1lckludGVydmFsKSk7CisgICAgZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NUX1NUQVRFX1JF
QURZICYmIG1fcmVhZHlUaW1lckhhbmRsZXIuaXNTY2hlZHVsZWQoKSkKICAgICAgICAgbV9yZWFk
eVRpbWVySGFuZGxlci5jYW5jZWwoKTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTY1MiwxMiArNjU1LDEyIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVr
aW5nKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hh
bmdlZCgpCiB7Ci0gICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4oc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVmlkZW8sIHRoaXMpKSk7CisgICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hlZHVsZSgpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCgp
CiB7Ci0gICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCIsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZWaWRlb0NhcHMsIHRoaXMpKSk7CisgICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIuc2No
ZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBs
YXllck9mVmlkZW8oKQpAQCAtNzA1LDcgKzcwOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWQoKQogewotICAgIG1fYXVkaW9UaW1lckhhbmRs
ZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9D
aGFuZ2VkIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvLCB0aGlzKSkpOworICAgIG1fYXVkaW9U
aW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQpAQCAtNzQ4LDcgKzc1MSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENo
YW5nZWQoKQogewotICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVy
T2ZUZXh0LCB0aGlzKSkpOworICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVsZSgpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA0YzI2
ZjBkNzhlMmRlYjQ2YTZjMTY5ZjFhNDMxNjQzYzgzZWZmZDQ2Li40YTA2MzEzNDg5OGZkZjVhNDg1
ZTBjMzgwN2QwYTU4NjJkODY1OGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgog
I2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1Z2lucy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJj
ZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAKICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0hhc2guaD4KQEAgLTIyMSwxMSArMjIxLDExIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZDsKICAgICBib29sIG1faGFzVmlkZW87CiAg
ICAgYm9vbCBtX2hhc0F1ZGlvOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9hdWRp
b1RpbWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdGV4dFRpbWVy
SGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdmlkZW9UaW1lckhhbmRs
ZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxl
cjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fcmVhZHlUaW1lckhhbmRsZXI7Cisg
ICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2F1ZGlvVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VX
cmFwOjpTdGF0aWMgbV90ZXh0VGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMg
bV92aWRlb1RpbWVySGFuZGxlcjsKKyAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fdmlkZW9DYXBz
VGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9yZWFkeVRpbWVySGFuZGxl
cjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXM7CiAgICAgVVJM
IG1fdXJsOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCAzMThhNGY1ZTRlOTA5
ZGQyYjUwZjc3ZjRlZDllYTAyZDNkOWQ4ZTk0Li5kYmZlMTliODM0MWIxMDQ0NjQ2OWM5YzZkNWY5
MDgxNzNjZjA4YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC0xMzgsNiArMTM4LDExIEBAIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5
ZXIqIHBsCiAgICAgLCBtX2Zwc1NpbmsoMCkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkp
CisgICAgLCBtX3ZvbHVtZVRpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UsIHRoaXMpKQorICAg
ICwgbV9tdXRlVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjptdXRlQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlLCB0aGlzKSkKKyNpZiBVU0UoR1NUUkVBTUVSX0dM
KQorICAgICwgbV9kcmF3VGltZXJIYW5kbGVyKCJbV2ViS2l0XSB2aWRlbyByZW5kZXIiLCBzdGQ6
OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyYXdUaW1lckZpcmVkLCB0
aGlzKSkKKyNlbmRpZgogICAgICwgbV9yZXBhaW50SGFuZGxlcigwKQogICAgICwgbV92b2x1bWVT
aWduYWxIYW5kbGVyKDApCiAgICAgLCBtX211dGVTaWduYWxIYW5kbGVyKDApCkBAIC0zNjEsNyAr
MzY2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5
ZXJPZlZvbHVtZUNoYW5nZSgpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6dm9sdW1lQ2hhbmdlZCgpCiB7Ci0gICAgbV92b2x1bWVUaW1lckhhbmRsZXIuc2NoZWR1bGUo
IltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWQi
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSwgdGhpcykpKTsKKyAgICBtX3Zv
bHVtZVRpbWVySGFuZGxlci5zY2hlZHVsZSgpOwogfQogCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0
CkBAIC00MDksNyArNDE0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Ojpub3RpZnlQbGF5ZXJPZk11dGUoKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om11dGVDaGFuZ2VkKCkKIHsKLSAgICBtX211dGVUaW1lckhhbmRsZXIuc2NoZWR1bGUo
IltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkIiwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlLCB0aGlzKSkpOworICAgIG1fbXV0ZVRpbWVySGFu
ZGxlci5zY2hlZHVsZSgpOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNDYxLDYgKzQ2NiwxOCBAQCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRleHR1
cmUoVGV4dHVyZQogfQogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkcmF3VGltZXJGaXJlZCgpCit7CisgICAgV1RG
OjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5
ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxheWVyKSAmJiBjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPnNldFBsYXRmb3JtTGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICBnX2NvbmRf
c2lnbmFsKCZtX2RyYXdDb25kaXRpb24pOworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqIHNh
bXBsZSkKIHsKICAgICB7CkBAIC00NzQsMTYgKzQ5MSw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUpCiAKICAg
ICAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKIAotICAg
ICAgICBtX2RyYXdUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIHZpZGVvIHJlbmRlciIs
IFt0aGlzXSB7Ci0gICAgICAgICAgICAvLyBSZW5kZXJpbmcgc2hvdWxkIGJlIGRvbmUgZnJvbSB0
aGUgbWFpbiB0aHJlYWQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUg
R0wgQVBJcyB3ZXJlIGluaXRpYWxpemVkLgotICAgICAgICAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8
R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYm
ICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nl
bGVyYXRlZFJlbmRlcmluZygpICYmIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRl
cmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9wbGF5ZXIpICYmIGNsaWVudCgpKQotICAgICAgICAgICAg
ICAgIGNsaWVudCgpLT5zZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgICAg
ICBnX2NvbmRfc2lnbmFsKCZtX2RyYXdDb25kaXRpb24pOwotI2VuZGlmCi0gICAgICAgIH0pOwor
ICAgICAgICAvLyBSZW5kZXJpbmcgc2hvdWxkIGJlIGRvbmUgZnJvbSB0aGUgbWFpbiB0aHJlYWQK
KyAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBHTCBBUElzIHdlcmUgaW5pdGlh
bGl6ZWQuCisgICAgICAgIG1fZHJhd1RpbWVySGFuZGxlci5zY2hlZHVsZSgpOwogICAgICAgICBn
X2NvbmRfd2FpdCgmbV9kcmF3Q29uZGl0aW9uLCAmbV9kcmF3TXV0ZXgpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKaW5kZXgg
ODllYWE3OWExMWFmZWE3MjliMjQ1MDliOTU3MDc1ZDVlNDAyMDM3ZS4uM2EzZWUwMmU2ZjVjMDVm
Yzg5NDBmZDcxYzRjYTBiOWJjYjg1ODkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8
Z2xpYi5oPgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Nv
dXJjZVdyYXAuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgIVVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgpA
QCAtMTMxLDEwICsxMzEsMTEgQEAgcHJvdGVjdGVkOgogICAgIEludFNpemUgbV9zaXplOwogICAg
IG11dGFibGUgR011dGV4IG1fc2FtcGxlTXV0ZXg7CiAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1f
c2FtcGxlOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV92b2x1bWVUaW1lckhhbmRs
ZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX211dGVUaW1lckhhbmRsZXI7Cisg
ICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX3ZvbHVtZVRpbWVySGFuZGxlcjsKKyAgICBHU291cmNl
V3JhcDo6U3RhdGljIG1fbXV0ZVRpbWVySGFuZGxlcjsKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQot
ICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9kcmF3VGltZXJIYW5kbGVyOworICAgIEdT
b3VyY2VXcmFwOjpTdGF0aWMgbV9kcmF3VGltZXJIYW5kbGVyOworICAgIHZvaWQgZHJhd1RpbWVy
RmlyZWQoKTsKICAgICBHQ29uZCBtX2RyYXdDb25kaXRpb247CiAgICAgR011dGV4IG1fZHJhd011
dGV4OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5j
cHAKaW5kZXggNWM5MDQzYzNmYmI2MjJjZjU3MTY3ZmY1Zjk4OTUyODc3MzEyMjljMy4uZTAxMmI4
ZWUzMDU0MTg2MzBkYTkzZTM0NjZiZDZjMTNiMjE1MDgzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcApAQCAtNTcsNiArNTcsOCBAQCBUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJh
c2UqIG93bmVyLCBnaQogICAgIDogbV9pbmRleChpbmRleCkKICAgICAsIG1fcGFkKHBhZCkKICAg
ICAsIG1fb3duZXIob3duZXIpCisgICAgLCBtX2FjdGl2ZVRpbWVySGFuZGxlcigiW1dlYktpdF0g
VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQiLCBz
dGQ6OmJpbmQoJlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVD
aGFuZ2VkLCB0aGlzKSkKKyAgICAsIG1fdGFnVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mVGFnc0NoYW5nZWQiLCBzdGQ6OmJpbmQo
JlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCwgdGhp
cykpCiB7CiAgICAgQVNTRVJUKG1fcGFkKTsKIApAQCAtOTIsNyArOTQsNyBAQCB2b2lkIFRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogCiB2b2lkIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OmFjdGl2ZUNoYW5nZWQoKQogewotICAgIG1fYWN0aXZlVGltZXJIYW5kbGVy
LnNjaGVkdWxlKCJbV2ViS2l0XSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFj
a09mQWN0aXZlQ2hhbmdlZCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJlRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkLCB0aGlzKSkp
OworICAgIG1fYWN0aXZlVGltZXJIYW5kbGVyLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQpAQCAtMTA2LDcgKzEwOCw3IEBAIHZv
aWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQogICAgICAgICBtX3Rh
Z3Muc3dhcCh0YWdzKTsKICAgICB9CiAKLSAgICBtX3RhZ1RpbWVySGFuZGxlci5zY2hlZHVsZSgi
W1dlYktpdF0gVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlRhZ3NDaGFu
Z2VkIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6bm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2VkLCB0aGlzKSkpOworICAgIG1fdGFnVGlt
ZXJIYW5kbGVyLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyLmgKaW5kZXggOWU2ODA5MTg4ZWFmYWNjMmUwZTExMjVjZDI0YjFhNWFk
MWM4MDkwMC4uNzk0NDc4ZTVjZjgwMzNmMTFkZjljMGEwMDllYmM5YTJkM2RmOWM1MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsOCAr
NzAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZ2V0VGFnKEdzdFRhZ0xpc3QqIHRhZ3MsIGNvbnN0
IGdjaGFyKiB0YWdOYW1lLCBTdHJpbmdUeXBlJiB2YWx1ZSk7CiAKICAgICBUcmFja1ByaXZhdGVC
YXNlKiBtX293bmVyOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9hY3RpdmVUaW1l
ckhhbmRsZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3RhZ1RpbWVySGFuZGxl
cjsKKyAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fYWN0aXZlVGltZXJIYW5kbGVyOworICAgIEdT
b3VyY2VXcmFwOjpTdGF0aWMgbV90YWdUaW1lckhhbmRsZXI7CiAKICAgICBNdXRleCBtX3RhZ011
dGV4OwogICAgIEdSZWZQdHI8R3N0VGFnTGlzdD4gbV90YWdzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKaW5kZXggMTMzZTkwNmZhMGYwNTgwOWI2
YTUwYTAwZTk5MThiZGMxZDY4MDM5OC4uZDUzZmFmMDI4MzMzYTdiZGJiNGViMDg5YmU5NDkzNDBl
YTE4MzkyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRp
bWVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJH
dGsuY3BwCkBAIC0yOCwxMiArMjgsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTaGFyZWRUaW1lci5oIgogCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNl
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgR01haW5Mb29wU291cmNlIGdTaGFyZWRUaW1lcjsKLXN0YXRpYyB2
b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOworc3RhdGljIHZvaWQgKCpzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24pKCkgPSBudWxscHRyOworc3RhdGljIHZvaWQgc2hhcmVkVGltZXJG
aXJlKCkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKK30KKworLy8gR19QUklP
UklUWV9ISUdIX0lETEUgKyAyMCBpcyBHREtfUFJJT1JJVFlfUkVEUkFXLCBidXQgd2UgZG9uJ3Qg
d2FudCB0byBkZXBlbmQgb24gR0RLIGhlcmUganVzdCB0byB1c2UgYSBjb25zdGFudC4KK3N0YXRp
YyBHU291cmNlV3JhcDo6U3RhdGljIGdTaGFyZWRUaW1lcigiW1dlYktpdF0gc2hhcmVkVGltZXJU
aW1lb3V0Q2FsbGJhY2siLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KHNoYXJlZFRpbWVyRmlyZSks
IEdfUFJJT1JJVFlfSElHSF9JRExFICsgMjApOwogCiB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRG
dW5jdGlvbih2b2lkICgqZikoKSkKIHsKQEAgLTQ2LDEwICs1MiwxMSBAQCB2b2lkIHNldFNoYXJl
ZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKIHsKICAgICBBU1NFUlQoc2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKTsKIAotICAgIC8vIFRoaXMgaXMgR0RLX1BSSU9SSVRZX1JFRFJB
VywgYnV0IHdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIEdESyBoZXJlIGp1c3QgdG8gdXNlIGEg
Y29uc3RhbnQuCi0gICAgc3RhdGljIGNvbnN0IGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfSElH
SF9JRExFICsgMjA7Ci0gICAgZ1NoYXJlZFRpbWVyLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktp
dF0gc2hhcmVkVGltZXJUaW1lb3V0Q2FsbGJhY2siLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc2hh
cmVkVGltZXJGaXJlZEZ1bmN0aW9uKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJs
ZT4oaW50ZXJ2YWwpKSwgcHJpb3JpdHkpOworICAgIGF1dG8gaW50ZXJ2YWxEdXJhdGlvbiA9IHN0
ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGludGVydmFsKTsKKyAgICBhdXRvIGRlbGF5ID0g
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6bWF4KCk7CisgICAgaWYgKGludGVydmFsRHVyYXRp
b24gPCBkZWxheSkKKyAgICAgICAgZGVsYXkgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihpbnRlcnZhbER1cmF0aW9uKTsKKyAgICBnU2hhcmVk
VGltZXIuc2NoZWR1bGUoZGVsYXkpOwogfQogCiB2b2lkIHN0b3BTaGFyZWRUaW1lcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oCmluZGV4IDZiY2Q1MzYyMTY5ZGJiZDlkZjZlZjQxZTY3NWE2NTBlYmUzODRiMzgu
LmQwMTlkYTczYzA0ZDRkMjA2ZmJhMjJhOGQzNGQ4YmU5Njk2NzQ5NDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCkBAIC01MSw4ICs1MSw4IEBACiAjaWYgVVNFKFNPVVApCiAjaW5jbHVkZSAiR1VuaXF1ZVB0
clNvdXAuaCIKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaD4KICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCkBAIC0xNjgsNyArMTY4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVh
bTsKICAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CiAgICAgICAg
IEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBtX2RlZmVycmVkUmVzdWx0OwotICAgICAgICBHTWFpbkxv
b3BTb3VyY2UgbV90aW1lb3V0U291cmNlOworICAgICAgICBHU291cmNlV3JhcDo6U3RhdGljIG1f
dGltZW91dFNvdXJjZTsKICAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQnVmZmVyPiBtX3NvdXBCdWZm
ZXI7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV9ib2R5U2l6ZTsKICAgICAgICAgdW5zaWduZWQg
bG9uZyBtX2JvZHlEYXRhU2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggYjdlOGM3ODFi
NzVlZDljZWE5MTkxNzYxYmI2YWZhMWMyMWU0ZTEwYS4uZmRhODUxZjllMmI5OGM3OGNjMmJhODYw
YjNlMmM1OWMzMzMwMzUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTEwNDksMTEgKzEw
NDksMTQgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2VuZFBlbmRpbmdSZXF1ZXN0KCkKICNlbmRp
ZgogCiAgICAgaWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpID4gMCkgewot
ICAgICAgICBkLT5tX3RpbWVvdXRTb3VyY2Uuc2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBS
ZXNvdXJjZUhhbmRsZSByZXF1ZXN0IHRpbWVvdXQiLCBbdGhpc10gewotICAgICAgICAgICAgY2xp
ZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9yKGZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBjYW5jZWwoKTsKLSAgICAgICAg
fSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4o
c3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZC0+bV9maXJzdFJlcXVlc3QudGltZW91dElu
dGVydmFsKCkpKSwKLSAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBudWxscHRyLCBnX21haW5f
Y29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7CisgICAgICAgIGlmICghZC0+bV90aW1lb3V0
U291cmNlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgICAgIGQtPm1fdGltZW91dFNvdXJjZS5p
bml0aWFsaXplKCJbV2ViS2l0XSBSZXNvdXJjZUhhbmRsZSByZXF1ZXN0IHRpbWVvdXQiLAorICAg
ICAgICAgICAgICAgIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRG
YWlsKHRoaXMsIFJlc291cmNlRXJyb3I6OnRpbWVvdXRFcnJvcihmaXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAg
ICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVm
YXVsdCgpKTsKKworICAgICAgICBkLT5tX3RpbWVvdXRTb3VyY2Uuc2NoZWR1bGUoc3RkOjpjaHJv
bm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86
OmR1cmF0aW9uPGRvdWJsZT4oZC0+bV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpKSk7
CiAgICAgfQogCiAgICAgLy8gQmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlP
Q2hhbm5lbFNvdXAuY3BwCmluZGV4IDgyYTlkZjdkOGIxNmIzNzM0ZTZiNTQ1ZWMyMjNmMjU0OTYz
OTUxZGYuLmRkM2U5NjMyZGIzZmFhNmE1OTdkY2RmMzZkZDJlYjFhYzZiODNlYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3Jh
cC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC03OCw3ICs3OCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydW5UYXNrSW5RdWV1
ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IHRhc2ssIFdvcmtRdWV1ZSogcXVldWUpCiAgICAgfQog
CiAgICAgLy8gVXNpbmcgbnVsbHB0ciBhcyBxdWV1ZSBzdWJtaXRzIHRoZSByZXN1bHQgdG8gdGhl
IG1haW4gY29udGV4dC4KLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25E
ZXN0cm95KCJbV2ViS2l0XSBJT0NoYW5uZWwgdGFzayIsIHRhc2spOworICAgIEdTb3VyY2VXcmFw
OjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIElPQ2hhbm5lbCB0YXNrIiwgV1RGOjptb3Zl
KHRhc2spLAorICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApLCBHX1BSSU9SSVRZ
X0RFRkFVTFQsIGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZp
bGxEYXRhRnJvbVJlYWRCdWZmZXIoU291cEJ1ZmZlciogcmVhZEJ1ZmZlciwgc2l6ZV90IHNpemUs
IERhdGEmIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMv
c291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDNmZjI4MmM3MWEwMWQzYTUzNTNmMTc5MjA5MjI2
MGZlZGMxZTFjMmEuLmU4MmE4YmQxYzgzNzUwNGYwNjg5MGE5MzgzN2QzOGIxYTRiY2I4OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9h
ZFNvdXAuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgogI2lu
Y2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBEb3du
bG9hZENsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJsaWM6CiAgICAg
RG93bmxvYWRDbGllbnQoRG93bmxvYWQqIGRvd25sb2FkKQogICAgICAgICA6IG1fZG93bmxvYWQo
ZG93bmxvYWQpCisgICAgICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVyKCJbV2ViS2l0XSBEb3du
bG9hZEhhbmRsZVJlc3BvbnNlTGF0ZXIiLCBzdGQ6OmJpbmQoJkRvd25sb2FkQ2xpZW50OjpoYW5k
bGVSZXNwb25zZSwgdGhpcykpCiAgICAgICAgICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKICAg
ICB7CiAgICAgfQpAQCAtMjAzLDcgKzIwNCw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBDYWxs
IGRpZFJlY2VpdmVSZXNwb25zZSBpbiBhbiBpZGxlIHRvIG1ha2Ugc3VyZSB0aGUgZG93bmxvYWQg
aXMgYWRkZWQKICAgICAgICAgLy8gdG8gdGhlIERvd25sb2FkTWFuYWdlciBkb3dubG9hZHMgbWFw
LgotICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuc2NoZWR1bGUoIltXZWJLaXRdIERvd25s
b2FkSGFuZGxlUmVzcG9uc2VMYXRlciIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQo
JkRvd25sb2FkQ2xpZW50OjpoYW5kbGVSZXNwb25zZSwgdGhpcykpKTsKKyAgICAgICAgbV9oYW5k
bGVSZXNwb25zZUxhdGVyLnNjaGVkdWxlKCk7CiAgICAgfQogCiAgICAgRG93bmxvYWQqIG1fZG93
bmxvYWQ7CkBAIC0yMTIsNyArMjEzLDcgQEAgcHVibGljOgogICAgIEdSZWZQdHI8R0ZpbGU+IG1f
ZGVzdGluYXRpb25GaWxlOwogICAgIEdSZWZQdHI8R0ZpbGU+IG1faW50ZXJtZWRpYXRlRmlsZTsK
ICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fZGVsYXllZFJlc3BvbnNlOwotICAgIEdNYWluTG9vcFNv
dXJjZSBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7CisgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2hh
bmRsZVJlc3BvbnNlTGF0ZXI7CiAgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9D
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5m
b0NhY2hlLmNwcAppbmRleCA3OTIwMzkzOTMxZTdjYWY4ZmMxMmUyNjQwNDMxZWNkOTUzMzk4ZjU4
Li5mOGUyM2EwZjM0ZDBmNWRkNzhjZGNkMDMwNzBmOWY1NzhkMGI5ZTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hl
LmNwcApAQCAtNDQsNiArNDQsNyBAQCBQbHVnaW5JbmZvQ2FjaGUmIFBsdWdpbkluZm9DYWNoZTo6
c2luZ2xldG9uKCkKIAogUGx1Z2luSW5mb0NhY2hlOjpQbHVnaW5JbmZvQ2FjaGUoKQogICAgIDog
bV9jYWNoZUZpbGUoZ19rZXlfZmlsZV9uZXcoKSkKKyAgICAsIG1fc2F2ZVRvRmlsZUlkbGUoIltX
ZWJLaXRdIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSIsIHN0ZDo6YmluZCgmUGx1Z2luSW5m
b0NhY2hlOjpzYXZlVG9GaWxlLCB0aGlzKSwgR19QUklPUklUWV9ERUZBVUxUX0lETEUpCiAgICAg
LCBtX3JlYWRPbmx5TW9kZShmYWxzZSkKIHsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGNhY2hlRGly
ZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSwgIndlYmtpdGd0
ayIsIG51bGxwdHIpKTsKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIFBsdWdpbkluZm9DYWNoZTo6
dXBkYXRlUGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNvbnN0IFBsdWdpbk1v
ZAogICAgICAgICBpZiAobV9zYXZlVG9GaWxlSWRsZS5pc1NjaGVkdWxlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIG1fc2F2ZVRvRmlsZUlkbGUuc2NoZWR1bGUoIltXZWJLaXRd
IFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSIsIHN0ZDo6YmluZCgmUGx1Z2luSW5mb0NhY2hl
OjpzYXZlVG9GaWxlLCB0aGlzKSwgR19QUklPUklUWV9ERUZBVUxUX0lETEUpOworICAgICAgICBt
X3NhdmVUb0ZpbGVJZGxlLnNjaGVkdWxlKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgKaW5kZXgg
Y2FiMWUwZjliNjQxNDdiMmZmN2FmNGU1YjFjNzY2YTU0NzAzZmI0ZC4uZjhjNTUyNmUyNmM0NWNh
NDI3ZTBiMzE5MmVjMTQ4NGU0ZGVlYjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaApAQCAtMzEsNyArMzEsNyBA
QAogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxv
b3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HU291cmNlV3JhcC5oPgogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAKICAgICBHVW5pcXVlUHRyPEdLZXlGaWxlPiBtX2NhY2hl
RmlsZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IG1fY2FjaGVQYXRoOwotICAgIEdNYWluTG9vcFNv
dXJjZSBtX3NhdmVUb0ZpbGVJZGxlOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9zYXZlVG9G
aWxlSWRsZTsKICAgICBib29sIG1fcmVhZE9ubHlNb2RlOwogICAgIHN0ZDo6bXV0ZXggbV9tdXRl
eDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmRE
cm9wSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9w
SGFuZGxlci5jcHAKaW5kZXggOGE2YWRiOTNmMjZhZGRkM2Q2MjJkYmMyMjgzNTZkNGUzNzQyNGZh
ZS4uNWI5MjlmZjIzNmNlNGI4YzkzNjE3MGNkOTc1NmFiNGRjYzdjYWM5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApAQCAt
MzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dTb3VyY2VXcmFwLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIERyYWdB
bmREcm9wSGFuZGxlcjo6ZHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQogICAgIC8v
IER1cmluZyBhIGRyb3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBi
ZWZvcmUgZmlyaW5nCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFj
dGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2UgZm9yIGRy
YWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4K
LSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0
XSBoYW5kbGVEcmFnTGVhdmVMYXRlciIsIFt0aGlzLCBkcm9wcGluZ0NvbnRleHRdKCkgeworICAg
IEdTb3VyY2VXcmFwOjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIGhhbmRsZURyYWdMZWF2
ZUxhdGVyIiwgW3RoaXMsIGRyb3BwaW5nQ29udGV4dF0oKSB7CiAgICAgICAgIGF1dG8gaXQgPSBt
X2Ryb3BwaW5nQ29udGV4dHMuZmluZChkcm9wcGluZ0NvbnRleHQtPmdka0NvbnRleHQpOwogICAg
ICAgICBpZiAoaXQgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmNwcAppbmRleCA5ODdmYjE0MzIxNWRiZTQ5YWE3OWQ0MDFjN2Q0MDMzMjYwMGM2YWMyLi5l
ZTk1NDQyZjE4ZmI3YzJiNjNkMDQ3YzE5YWU4Mjg1YjVhMDRmYjY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMTI3LDkg
KzEyNyw3IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFn
R2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdl
c3R1cmUpKTsKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdl
dF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51
bGxwdHIpOwotICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc2NoZWR1bGVBZnRl
ckRlbGF5KCJbV2ViS2l0XSBEcmFnR2VzdHVyZSBsb25nIHByZXNzIHRpbWVvdXQiLCBbZHJhZ0dl
c3R1cmVdKCkgewotICAgICAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSB0cnVlOwotICAgIH0s
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoZGVsYXkpKTsKKyAgICBkcmFnR2VzdHVyZS0+bV9s
b25nUHJlc3NUaW1lb3V0LnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoZGVsYXkp
KTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFn
R2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2Vz
dHVyZSkKQEAgLTE2MCw2ICsxNTgsNyBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2Vz
dHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZQogCiBHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFn
ZSkKICAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfZHJhZ19uZXcocGFnZS52aWV3V2lkZ2V0KCkp
LCBwYWdlKQorICAgICwgbV9sb25nUHJlc3NUaW1lb3V0KCJbV2ViS2l0XSBEcmFnR2VzdHVyZSBs
b25nIHByZXNzIHRpbWVvdXQiLCBbdGhpc10geyBtX2luRHJhZyA9IHRydWU7IH0pCiAgICAgLCBt
X2luRHJhZyhmYWxzZSkKIHsKICAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHko
R1RLX0dFU1RVUkVfU0lOR0xFKG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOwpAQCAtMjAyLDEzICsy
MDEsMTQgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OnNjYWxlQ2hhbmdl
ZChab29tR2VzdHVyZSogem9vbUdlc3R1cmUsIGRvdWIKICAgICBpZiAoem9vbUdlc3R1cmUtPm1f
aWRsZS5pc1NjaGVkdWxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB6b29tR2VzdHVyZS0+
bV9pZGxlLnNjaGVkdWxlKCJbV2ViS2l0XSBab29tIEdlc3R1cmUgSWRsZSIsIHN0ZDo6YmluZCgm
R2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpoYW5kbGVab29tLCB6b29tR2VzdHVyZSkp
OworICAgIHpvb21HZXN0dXJlLT5tX2lkbGUuc2NoZWR1bGUoKTsKIH0KIAogR2VzdHVyZUNvbnRy
b2xsZXI6Olpvb21HZXN0dXJlOjpab29tR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAg
OiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21fbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkK
ICAgICAsIG1faW5pdGlhbFNjYWxlKDApCiAgICAgLCBtX3NjYWxlKDApCisgICAgLCBtX2lkbGUo
IltXZWJLaXRdIFpvb20gR2VzdHVyZSBJZGxlIiwgc3RkOjpiaW5kKCZHZXN0dXJlQ29udHJvbGxl
cjo6Wm9vbUdlc3R1cmU6OmhhbmRsZVpvb20sIHRoaXMpKQogewogICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJiZWdpbiIsIEdfQ0FMTEJBQ0soYmVnaW4pLCB0
aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic2Nh
bGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soc2NhbGVDaGFuZ2VkKSwgdGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggNjNlZDdi
ZDk4MTkyOTcxZTAwNmY4MjRjOThhODYwNDU0MjY1MjNkOS4uNDdkNjJlM2UwNWIzYzQ2OTc0ZDI1
ZTVjNjQzYmVkMWRmMzMxMjYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1NvdXJjZVdyYXAuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVk
ZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9zdGFydDsKICAgICAgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBtX29mZnNldDsKLSAgICAgICAgR01haW5Mb29wU291cmNlIG1fbG9uZ1ByZXNz
VGltZW91dDsKKyAgICAgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2xvbmdQcmVzc1RpbWVvdXQ7
CiAgICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9sb25nUHJlc3M7CiAgICAgICAgIGJvb2wg
bV9pbkRyYWc7CiAgICAgfTsKQEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZ2Rv
dWJsZSBtX3NjYWxlOwogICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2luaXRpYWxQb2ludDsK
ICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV92aWV3UG9pbnQ7Ci0gICAgICAgIEdNYWluTG9v
cFNvdXJjZSBtX2lkbGU7CisgICAgICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9pZGxlOwogICAg
IH07CiAKICAgICBEcmFnR2VzdHVyZSBtX2RyYWdHZXN0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAK
aW5kZXggOTRiOTJhYmY2Y2JjZWZiMzJiNWQzNWVlZDA5MDRiMWRiOWYzNzQwYy4uNTRmZjcxNjA2
MjU2OTZmNzZhZTJhZGQ5ZWM5MjEyZTA5NjMyMjZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCkBA
IC02OCwxMiArNjgsMTYgQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBMYXllclRyZWVI
b3N0R3RrOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICAgICByZXR1cm4gaG9zdC5yZWxlYXNl
KCk7CiB9CiAKKy8vIFVzZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIFdlYkNvcmUgdGltZXJzLgor
c3RhdGljIGNvbnN0IGludCBsYXllckZsdXNoVGltZXJQcmlvcml0eSA9IEdES19QUklPUklUWV9S
RURSQVcgLSAxOworCiBMYXllclRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2Uq
IHdlYlBhZ2UpCiAgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2lzVmFsaWQo
dHJ1ZSkKICAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAg
ICwgbV9sYXN0SW1tZWRpYXRlRmx1c2hUaW1lKDApCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCh0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjaygiW1dlYktp
dF0gbGF5ZXJGbHVzaFRpbWVyIiwgc3RkOjpiaW5kKCZMYXllclRyZWVIb3N0R3RrOjpsYXllckZs
dXNoVGltZXJGaXJlZCwgdGhpcyksIGxheWVyRmx1c2hUaW1lclByaW9yaXR5KQogICAgICwgbV92
aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewogfQpAQCAtMjI4LDkgKzIzMiw2IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRTa2lwTmV4dEZyYW1lQmVjYXVzZU9mQ29udGlub3VzSW1t
ZWRpYXRlRmx1c2hlcyhkb3VibGUKICAgICByZXR1cm4gbGFzdEltbWVkaWF0ZUZsdXNoVGltZSAr
IG1heER1cmF0aW9uT2ZJbW1lZGlhdGVGbHVzaGVzIDwgY3VycmVudDsKIH0KIAotLy8gVXNlIGEg
aGlnaGVyIHByaW9yaXR5IHRoYW4gV2ViQ29yZSB0aW1lcnMuCi1zdGF0aWMgY29uc3QgaW50IGxh
eWVyRmx1c2hUaW1lclByaW9yaXR5ID0gR0RLX1BSSU9SSVRZX1JFRFJBVyAtIDE7Ci0KIHZvaWQg
TGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogewogICAgIGRvdWJsZSBm
aXJlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMjU0LDggKzI1NSw3
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogICAgICAg
ICBtX2xhc3RJbW1lZGlhdGVGbHVzaFRpbWUgPSAwOwogICAgIH0KIAotICAgIG1fbGF5ZXJGbHVz
aFRpbWVyQ2FsbGJhY2suc2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBsYXllckZsdXNoVGlt
ZXIiLCBzdGQ6OmJpbmQoJkxheWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkLCB0
aGlzKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4odGltZVRvTmV4dEZsdXNo
KSksIGxheWVyRmx1c2hUaW1lclByaW9yaXR5KTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNy
b3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVUb05leHRGbHVzaCkp
KTsKIH0KIAogYm9vbCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KQpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2NoZWR1bGVMYXll
ckZsdXNoKCkKIAogICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIgYmVjYXVzZSBvdGhlcndpc2Ug
R1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcgZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJDb3JlIHRp
bWVycywgd2hpY2ggaGF2ZSBhIGxvd2VyIHByaW9yaXR5LgogICAgIGlmICghbV9sYXllckZsdXNo
VGltZXJDYWxsYmFjay5pc1NjaGVkdWxlZCgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNh
bGxiYWNrLnNjaGVkdWxlKCJbV2ViS2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkxh
eWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkLCB0aGlzKSwgbGF5ZXJGbHVzaFRp
bWVyUHJpb3JpdHkpOworICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLnNjaGVkdWxl
KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCmluZGV4IDY5
NGMzNDVjYjRkOGVmMzFhM2Q4NWY1YTA3NDczMDEzOThkMWIwMDcuLjc3NjQ5YTgwZDgwZjlkNDkw
YzY5NDY2YjU1ZTQ1NjkyZjQ5OTY5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCkBAIC0zNCw3ICszNCw3
IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9H
TENvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HU291cmNlV3JhcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtOTcsNyArOTcs
NyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1f
Y29udGV4dDsKICAgICBkb3VibGUgbV9sYXN0SW1tZWRpYXRlRmx1c2hUaW1lOwogICAgIGJvb2wg
bV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Ci0gICAgR01haW5Mb29wU291cmNlIG1fbGF5
ZXJGbHVzaFRpbWVyQ2FsbGJhY2s7CisgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2xheWVyRmx1
c2hUaW1lckNhbGxiYWNrOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJs
YXlSb290TGF5ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IGFkZWUzMzdiY2JmNzc1ODFkM2FlZmZlZjZjYjc4
ZmFmYmJkMzlkZDIuLjQ2ODRmYjRiNzI5MWZkMzNhY2U5ODRjZjZjMzIxZDU3NDUzNWY5YzMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5oCkBAIC0zOCw4ICszOCw4IEBACiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZSdW5Mb29w
Lmg+CiB0eXBlZGVmIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gUGxhdGZvcm1UaW1lclJl
ZjsKICNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KLXR5cGVkZWYgR01haW5Mb29wU291cmNlIFBsYXRmb3JtVGltZXJSZWY7CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1NvdXJjZVdyYXAuaD4KK3R5cGVkZWYgR1NvdXJjZVdyYXA6OlN0
YXRpYyBQbGF0Zm9ybVRpbWVyUmVmOwogI2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBFY29y
ZV9UaW1lciogUGxhdGZvcm1UaW1lclJlZjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcApp
bmRleCBmZDI3YTU4ZGRlNzA0NGMyZDRjNDM0ZTJlZTQ1ZDFhNjJhMTRlYjU1Li4yOWU0MWI5YTE2
ODczZGE3MWU1MmQ4NmZjYzNlODllODc4ZjkyZmQ3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcApA
QCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV1RSIHsKIAogdm9pZCBUZXN0UnVubmVyOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogeworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuaW5pdGlh
bGl6ZSgiW1dUUl0gd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJDYWxsYmFjayIsIFt0aGlzXSB7IHdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsgfSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKQEAgLTQ4LDggKzQ5LDcgQEAgdm9p
ZCBUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgp
CiAgICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuaXNTY2hlZHVsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5zY2hlZHVsZUFmdGVy
RGVsYXkoIltXVFJdIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2siLCBbdGhpc10geyB3
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7IH0sCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMobV90aW1lb3V0KSk7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5z
Y2hlZHVsZShzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKG1fdGltZW91dCkpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0
cmluZ1JlZiB1cmwpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0
Q29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJv
bGxlckd0ay5jcHAKaW5kZXggODBmNmMyMjQ0NGQ4NTdmNDU4NzUxMTAxOWU4MzMyZjdmOGMzOGE5
ZC4uY2UzN2QzZDkzN2MxYWMyNmYyMzYwNzk1ZmIxNmU3NjEwYjkwNDUwNCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcApAQCAtMzAsMTMg
KzMwLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW5jbHVkZSA8Z3RrL2d0
ay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEdNYWluTG9vcFNvdXJjZSB0
aW1lb3V0U291cmNlOworc3RhdGljIEdTb3VyY2VXcmFwOjpTdGF0aWMgdGltZW91dFNvdXJjZSgi
W1dUUl0gVGVzdCB0aW1lb3V0IHNvdXJjZSIsIFtdIHsgZ3RrX21haW5fcXVpdCgpOyB9KTsKIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiB7CkBAIC01OCwxMiArNTgsOSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJikKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiwgZG91
YmxlIHRpbWVvdXQpCiB7Ci0gICAgaWYgKHRpbWVvdXQgPiAwKSB7Ci0gICAgICAgIHRpbWVvdXRT
b3VyY2Uuc2NoZWR1bGVBZnRlckRlbGF5KCJbV1RSXSBUZXN0IHRpbWVvdXQgc291cmNlIiwgW10g
ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGQUlMOiBUZXN0Q29udHJvbGxlclJ1bkxv
b3AgdGltZWQgb3V0LlxuIik7Ci0gICAgICAgICAgICBndGtfbWFpbl9xdWl0KCk7Ci0gICAgICAg
IH0sIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+
KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVvdXQpKSk7Ci0gICAgfSBlbHNlCisg
ICAgaWYgKHRpbWVvdXQgPiAwKQorICAgICAgICB0aW1lb3V0U291cmNlLnNjaGVkdWxlKHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVvdXQpKSk7CisgICAgZWxzZQogICAgICAgICB0aW1l
b3V0U291cmNlLmNhbmNlbCgpOwogICAgIGd0a19tYWluKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256302</attachid>
            <date>2015-07-07 08:19:43 -0700</date>
            <delta_ts>2016-01-06 20:50:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138691-20150707081843.patch</filename>
            <type>text/plain</type>
            <size>62986</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhkYzM2ZGVlZTQ1ZDZhYjhiZWM2ZDgz
NmI1ZjQ0NDI0MWMxZDI2ODUuLjg2ZjE5NjAwN2I3ZGI2M2M2YWQyZGQyNDk2ZDllNzJiYTgwNWMy
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTUtMDYtMTAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBwZXJzaXN0ZW50IEdTb3VyY2Ug
d3JhcHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM4NjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2dsaWIvTWFpblRocmVhZEdMaWIu
Y3BwOgorICAgICAgICAoV1RGOjpzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHA6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjp3YWtlVXApOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJh
c2U6OnN0b3ApOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQp
OgorICAgICAgICAqIHd0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIpOgorICAgICAgICAqIHd0Zi9n
b2JqZWN0L0dTb3VyY2VXcmFwLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpzdGF0aWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdy
YXA6OmR5bmFtaWNEZWxheUJhc2VkVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1NvdXJj
ZVdyYXA6OmR5bmFtaWNEZWxheUJhc2VkQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1Nv
dXJjZVdyYXA6OnN0YXRpY09uZVNob3RDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpzdGF0aWNTb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjp0
YXJnZXRUaW1lRm9yRGVsYXkpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6QmFzZTo6fkJh
c2UpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNTY2hlZHVsZWQp
OgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aXNBY3RpdmUpOgorICAg
ICAgICAoV1RGOjpHU291cmNlV3JhcDo6RGVsYXlCYXNlZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6
OkdTb3VyY2VXcmFwOjpEZWxheUJhc2VkOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6U3RhdGljOjpTdGF0aWMpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGlj
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlN0YXRpYzo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6U3RhdGljOjpjYW5jZWwpOgorICAgICAg
ICAoV1RGOjpHU291cmNlV3JhcDo6RHluYW1pYzo6RHluYW1pYyk6CisgICAgICAgIChXVEY6OkdT
b3VyY2VXcmFwOjpEeW5hbWljOjpzY2hlZHVsZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFw
OjpEeW5hbWljOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6T25lU2hvdDo6
Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6R1NvdXJjZVdyYXA6OlNvY2tldDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpTb2NrZXQ6OmNhbmNlbCk6CisgICAgICAg
IChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6UXVldWUpOgorICAgICAgICAoV1RGOjpHU291cmNl
V3JhcDo6UXVldWU6On5RdWV1ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkdTb3VyY2VXcmFwOjpRdWV1ZTo6cXVldWUpOgor
ICAgICAgICAoV1RGOjpHU291cmNlV3JhcDo6UXVldWU6OmRpc3BhdGNoUXVldWUpOgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dTb3VyY2VXcmFwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpHU291
cmNlV3JhcDo6ZGVzdHJveUNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgIChXVEY6OkdTb3VyY2VX
cmFwOjpCYXNlOjppc0luaXRpYWxpemVkKToKKwogMjAxNS0wNy0wNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgUmVmUHRyOjpjbGVhcigpIG1ldGhvZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDM0M2NkNDdjMDA5NmRlNTMxZjQxYWU3Nzk3M2QwOTYxN2MxY2I3NzcuLmU4
MzU0M2Y5ZDJlYTE1NjFiYjQxMjEwZjVjZTY5YmQyNjkyNThhNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNS0wNi0xMCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gQWRkIHBlcnNpc3RlbnQgR1NvdXJjZSB3cmFwcGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2OTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzaGFyZWRUaW1lckZpcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnNlbmRQZW5kaW5nUmVxdWVzdCk6CisKIDIwMTUtMDctMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBbU3RyZWFtcyBBUEldIFJlbW92ZSBS
ZWFkYWJsZVN0cmVhbVJlYWRlci5yZWFkKCkgY3VzdG9tIGJpbmRpbmcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggY2QwYmNmMDgxYjMwNDFjOTBiYjRlNWM5ODFmMmQ3MmM3MGI3NWY3ZC4u
Yzg4MDJkZWU0NWQ2ZmJlNDZhZWNhYThjYzU5NDE3MmFlZmIzZTdhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1FZmwuY21ha2UKQEAgLTYsNiArNiw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAKICAg
ICBnbGliL0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnbGliL0dSZWZQdHIuY3BwCisgICAgZ2xp
Yi9HU291cmNlV3JhcC5jcHAKICAgICBnbGliL0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3Bw
CiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggODMyMjBkYzg2ZWZlMjllMzNjZDRi
NTA3NzY0ZjU3YmFhMTFlOWE2MS4uOTYwY2VjMWEzMTI2OTY0MjE3YzIwNDcyZjRiODgwNjAyOWY5
ZDdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTUsNiArNSw3IEBAIGxpc3QoQVBQ
RU5EIFdURl9TT1VSQ0VTCiAgICAgZ2xpYi9HTGliVXRpbGl0aWVzLmNwcAogICAgIGdsaWIvR01h
aW5Mb29wU291cmNlLmNwcAogICAgIGdsaWIvR1JlZlB0ci5jcHAKKyAgICBnbGliL0dTb3VyY2VX
cmFwLmNwcAogICAgIGdsaWIvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnbGli
L01haW5UaHJlYWRHTGliLmNwcAogICAgIGdsaWIvUnVuTG9vcEdMaWIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmggYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKaW5k
ZXggNmYzMDIzNmIzNGMyODE2YTgxNThkNWVmN2U3ZTVhMDllOGQ1NGEwZC4uYWJiMmQ4OTFjMzUw
ZjUwZDA0NTM5NzUxODk5NzYwMTFkMjEwODg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
UnVuTG9vcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIFVTRShHTElCKQotI2luY2x1ZGUg
PHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dTb3VyY2VX
cmFwLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEVGTCkKQEAgLTEwMCw3ICsxMDAsMTAgQEAg
cHVibGljOgogICAgICAgICBFY29yZV9UaW1lciogbV90aW1lcjsKICAgICAgICAgYm9vbCBtX2lz
UmVwZWF0aW5nOwogI2VsaWYgVVNFKEdMSUIpCi0gICAgICAgIEdNYWluTG9vcFNvdXJjZSBtX3Rp
bWVyU291cmNlOworICAgICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKKyAgICAgICAgZG91YmxlIG1f
ZmlyZUludGVydmFsIHsgMCB9OworICAgICAgICBib29sIG1fcmVwZWF0aW5nIHsgZmFsc2UgfTsK
KyAgICAgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX3RpbWVyU291cmNlOwogI2VuZGlmCiAgICAg
fTsKIApAQCAtMTYwLDYgKzE2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR1JlZlB0cjxH
TWFpbkNvbnRleHQ+IG1fbWFpbkNvbnRleHQ7CiAgICAgVmVjdG9yPEdSZWZQdHI8R01haW5Mb29w
Pj4gbV9tYWluTG9vcHM7CisgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX3dvcmtTb3VyY2U7CiAj
ZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291
cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggNjg1MWMwOTMxNjQ1YzVhMGMwZDU4OTRkNzlh
M2UxZWEzZjJjMGVjMy4uNzU5Y2Q4NDAzZWY3NjlhNTE3YzJjNDM2NDZjMzQyODI1NzMzNzBiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dURi93
dGYvV29ya1F1ZXVlLmgKQEAgLTM5LDggKzM5LDggQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
R1RLKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HU291cmNlV3JhcC5oPgogI2Vs
aWYgUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgPERpc3BhdGNoUXVldWVFZmwuaD4KICNlbGlmIE9T
KFdJTkRPV1MpCkBAIC0xMDcsNyArMTA3LDggQEAgcHJpdmF0ZToKICAgICBUaHJlYWRJZGVudGlm
aWVyIG1fd29ya1F1ZXVlVGhyZWFkOwogICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50
Q29udGV4dDsKICAgICBHUmVmUHRyPEdNYWluTG9vcD4gbV9ldmVudExvb3A7Ci0gICAgR01haW5M
b29wU291cmNlIG1fc29ja2V0RXZlbnRTb3VyY2U7CisgICAgR1NvdXJjZVdyYXA6OlNvY2tldCBt
X3NvY2tldEV2ZW50U291cmNlOworICAgIEdTb3VyY2VXcmFwOjpRdWV1ZSBtX2Rpc3BhdGNoUXVl
dWU7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgUmVmUHRyPERpc3BhdGNoUXVldWU+IG1fZGlz
cGF0Y2hRdWV1ZTsKICNlbGlmIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0dTb3VyY2VXcmFwLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1NvdXJjZVdyYXAu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYwZjBmNmI1ZWYwOGYyOGQxZGIxNzMzNzVhMGIwNTE2MzE2ZWM1NmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dTb3VyY2VXcmFwLmNwcApA
QCAtMCwwICsxLDIyNiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTb3VyY2VX
cmFwLmgiCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4
TG9ja2VyLmg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorCituYW1lc3BhY2UgV1RGIHsKKworR1NvdXJj
ZUZ1bmNzIEdTb3VyY2VXcmFwOjpzb3VyY2VGdW5jdGlvbnMgPSB7CisgICAgLy8gcHJlcGFyZQor
ICAgIFtdKEdTb3VyY2UqIHNvdXJjZSwgZ2ludCopIC0+IGdib29sZWFuCisgICAgeworICAgICAg
ICByZXR1cm4gZ19zb3VyY2VfZ2V0X3JlYWR5X3RpbWUoc291cmNlKSA9PSAwOworICAgIH0sCisg
ICAgbnVsbHB0ciwgLy8gY2hlY2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqIHNv
dXJjZSwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIGRhdGEpIC0+IGdib29sZWFuCisg
ICAgeworICAgICAgICBBU1NFUlQoc291cmNlKTsKKyAgICAgICAgaWYgKGdfc291cmNlX2dldF9y
ZWFkeV90aW1lKHNvdXJjZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gR19TT1VSQ0VfQ09O
VElOVUU7CisgICAgICAgIERpc3BhdGNoQ29udGV4dCBjb250ZXh0eyBzb3VyY2UsIGRhdGEgfTsK
KyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCZjb250ZXh0KTsKKyAgICB9LAorICAgIG51bGxwdHIs
IC8vIGZpbmFsaXplCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFjaworICAgIG51bGxw
dHIsIC8vIGNsb3N1cmVfbWFyc2hhbGwKK307CisKK2dib29sZWFuIEdTb3VyY2VXcmFwOjpzdGF0
aWNDYWxsYmFjayhncG9pbnRlciBkYXRhKQoreworICAgIGF1dG8mIGRpc3BhdGNoID0gKnN0YXRp
Y19jYXN0PERpc3BhdGNoQ29udGV4dCo+KGRhdGEpOworICAgIGF1dG8mIGNhbGxiYWNrID0gKnN0
YXRpY19jYXN0PFN0YXRpYzo6Q2FsbGJhY2tDb250ZXh0Kj4oZGlzcGF0Y2guc2Vjb25kKTsKKyAg
ICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FsbGJhY2suc2Vjb25kLmNhbmNlbGxh
YmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOworCisgICAgY2Fs
bGJhY2suc2Vjb25kLmRpc3BhdGNoaW5nID0gdHJ1ZTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlf
dGltZShkaXNwYXRjaC5maXJzdCwgLTEpOworCisgICAgY2FsbGJhY2suZmlyc3QoKTsKKworICAg
IGNhbGxiYWNrLnNlY29uZC5kaXNwYXRjaGluZyA9IGZhbHNlOworICAgIHJldHVybiBHX1NPVVJD
RV9DT05USU5VRTsKK30KKworZ2Jvb2xlYW4gR1NvdXJjZVdyYXA6Om9uZVNob3RDYWxsYmFjayhn
cG9pbnRlciBkYXRhKQoreworICAgIGF1dG8mIGRpc3BhdGNoID0gKnN0YXRpY19jYXN0PERpc3Bh
dGNoQ29udGV4dCo+KGRhdGEpOworICAgIGF1dG8mIGNhbGxiYWNrID0gKnN0YXRpY19jYXN0PE9u
ZVNob3Q6OkNhbGxiYWNrQ29udGV4dCo+KGRpc3BhdGNoLnNlY29uZCk7CisKKyAgICBnX3NvdXJj
ZV9zZXRfcmVhZHlfdGltZShkaXNwYXRjaC5maXJzdCwgLTEpOworICAgIGNhbGxiYWNrLmZpcnN0
KCk7CisKKyAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOworfQorCitnYm9vbGVhbiBHU291cmNl
V3JhcDo6c29ja2V0Q2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIGdw
b2ludGVyIGRhdGEpCit7CisgICAgYXV0byYgY2FsbGJhY2sgPSAqc3RhdGljX2Nhc3Q8U29ja2V0
OjpDYWxsYmFja0NvbnRleHQqPihkYXRhKTsKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5j
ZWxsZWQoY2FsbGJhY2suc2Vjb25kLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JF
TU9WRTsKKworICAgIHJldHVybiBjYWxsYmFjay5maXJzdChjb25kaXRpb24pOworfQorCitnaW50
NjQgR1NvdXJjZVdyYXA6OnRhcmdldFRpbWVGb3JEZWxheShzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzIGRlbGF5KQoreworICAgIGlmICghZGVsYXkuY291bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBnaW50NjQgY3VycmVudFRpbWUgPSBnX2dldF9tb25vdG9uaWNfdGltZSgpOworICAg
IGdpbnQ2NCB0YXJnZXRUaW1lID0gY3VycmVudFRpbWUgKyBzdGQ6Om1pbjxnaW50NjQ+KEdfTUFY
SU5UNjQgLSBjdXJyZW50VGltZSwgZGVsYXkuY291bnQoKSk7CisgICAgQVNTRVJUKHRhcmdldFRp
bWUgPj0gY3VycmVudFRpbWUpOworCisgICAgcmV0dXJuIHRhcmdldFRpbWU7Cit9CisKK0dTb3Vy
Y2VXcmFwOjpCYXNlOjp+QmFzZSgpCit7CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBnX3Nv
dXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKK30KKworR1NvdXJjZVdyYXA6OlN0YXRpYzo6
U3RhdGljKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
biwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW5pdGlhbGl6
ZShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3Zv
aWQgR1NvdXJjZVdyYXA6OlN0YXRpYzo6aW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0
KiBjb250ZXh0KQoreworICAgIEFTU0VSVCghbV9zb3VyY2UpOworICAgIG1fc291cmNlID0gYWRv
cHRHUmVmKGdfc291cmNlX25ldygmc291cmNlRnVuY3Rpb25zLCBzaXplb2YoR1NvdXJjZSkpKTsK
KworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKKyAgICBtX2NvbnRleHQuZGlzcGF0Y2hpbmcgPSBmYWxzZTsKKworICAgIGdfc291cmNl
X3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3Jp
dHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3NvdXJjZS5nZXQoKSwgc3RhdGljX2Nhc3Q8R1NvdXJjZUZ1bmM+KHN0YXRpY0NhbGxiYWNr
KSwKKyAgICAgICAgbmV3IFN0YXRpYzo6Q2FsbGJhY2tDb250ZXh0eyBXVEY6Om1vdmUoZnVuY3Rp
b24pLCBtX2NvbnRleHQgfSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRl
c3Ryb3lDYWxsYmFja0NvbnRleHQ8U3RhdGljOjpDYWxsYmFja0NvbnRleHQ+KSk7CisKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIGNvbnRleHQgPSBnX21haW5fY29udGV4dF9kZWZhdWx0KCk7
CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKK30KKwordm9p
ZCBHU291cmNlV3JhcDo6U3RhdGljOjpzY2hlZHVsZShzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
IGRlbGF5KQoreworICAgIEFTU0VSVChtX3NvdXJjZSk7CisKKyAgICBpZiAoZ19jYW5jZWxsYWJs
ZV9pc19jYW5jZWxsZWQobV9jb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgbV9j
b250ZXh0LmNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworCisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIHRhcmdldFRpbWVGb3JE
ZWxheShkZWxheSkpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpTdGF0aWM6OmNhbmNlbCgpCit7
CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19jYW5jZWxsYWJs
ZV9jYW5jZWwobV9jb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBnX3NvdXJjZV9zZXRf
cmVhZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgLTEpOworfQorCitib29sIEdTb3VyY2VXcmFwOjpT
dGF0aWM6OmlzSW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhIW1fc291cmNlOwor
fQorCitib29sIEdTb3VyY2VXcmFwOjpTdGF0aWM6OmlzU2NoZWR1bGVkKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9zb3VyY2UpOworICAgIHJldHVybiBnX3NvdXJjZV9nZXRfcmVhZHlfdGltZSht
X3NvdXJjZS5nZXQoKSkgIT0gLTE7Cit9CisKK2Jvb2wgR1NvdXJjZVdyYXA6OlN0YXRpYzo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBpc1NjaGVkdWxlZCgpIHx8IG1fY29udGV4dC5k
aXNwYXRjaGluZzsKK30KKwordm9pZCBHU291cmNlV3JhcDo6T25lU2hvdDo6Y29uc3RydWN0KGNv
bnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19zb3Vy
Y2VfbmV3KCZzb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpOworCisgICAgZ19zb3Vy
Y2Vfc2V0X25hbWUoc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3Jp
dHkoc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2so
c291cmNlLmdldCgpLCBzdGF0aWNfY2FzdDxHU291cmNlRnVuYz4ob25lU2hvdENhbGxiYWNrKSwK
KyAgICAgICAgbmV3IE9uZVNob3Q6OkNhbGxiYWNrQ29udGV4dHsgV1RGOjptb3ZlKGZ1bmN0aW9u
KSwgbnVsbHB0ciB9LAorICAgICAgICBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVzdHJv
eUNhbGxiYWNrQ29udGV4dDxPbmVTaG90OjpDYWxsYmFja0NvbnRleHQ+KSk7CisgICAgZ19zb3Vy
Y2Vfc2V0X3JlYWR5X3RpbWUoc291cmNlLmdldCgpLCB0YXJnZXRUaW1lRm9yRGVsYXkoZGVsYXkp
KTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGdfbWFpbl9jb250ZXh0
X2RlZmF1bHQoKTsKKyAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBjb250ZXh0KTsK
K30KKwordm9pZCBHU291cmNlV3JhcDo6U29ja2V0Ojppbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4mJiBmdW5jdGlvbiwgR1NvY2tl
dCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoIW1fc291cmNlKTsKKyAgICBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBtX3NvdXJjZSA9IGFk
b3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBjYW5jZWxs
YWJsZSkpOworICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoY2FuY2VsbGFibGUpOworCisg
ICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNl
X3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworCisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
Pihzb2NrZXRDYWxsYmFjayksCisgICAgICAgIG5ldyBTb2NrZXQ6OkNhbGxiYWNrQ29udGV4dHsg
V1RGOjptb3ZlKGZ1bmN0aW9uKSwgbV9jYW5jZWxsYWJsZSB9LAorICAgICAgICBzdGF0aWNfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oZGVzdHJveUNhbGxiYWNrQ29udGV4dDxTb2NrZXQ6OkNhbGxiYWNr
Q29udGV4dD4pKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGdfbWFp
bl9jb250ZXh0X2RlZmF1bHQoKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCks
IGNvbnRleHQpOworfQorCit2b2lkIEdTb3VyY2VXcmFwOjpTb2NrZXQ6OmNhbmNlbCgpCit7Cisg
ICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7Cit9CisKK0dTb3Vy
Y2VXcmFwOjpRdWV1ZTo6UXVldWUoKQoreworICAgIGdfbXV0ZXhfaW5pdCgmbV9tdXRleCk7Cit9
CisKK0dTb3VyY2VXcmFwOjpRdWV1ZTo6flF1ZXVlKCkKK3sKKyAgICBnX211dGV4X2NsZWFyKCZt
X211dGV4KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6UXVldWU6OmluaXRpYWxpemUoY29uc3Qg
Y2hhciogbmFtZSwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
bV9zb3VyY2VXcmFwLmluaXRpYWxpemUobmFtZSwgc3RkOjpiaW5kKCZRdWV1ZTo6ZGlzcGF0Y2hR
dWV1ZSwgdGhpcyksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHU291cmNlV3JhcDo6
UXVldWU6OnF1ZXVlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBX
VEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgbV9xdWV1ZS5hcHBl
bmQoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7CisKKyAgICBtX3NvdXJjZVdyYXAuc2NoZWR1bGUoKTsK
K30KKwordm9pZCBHU291cmNlV3JhcDo6UXVldWU6OmRpc3BhdGNoUXVldWUoKQoreworICAgIHdo
aWxlICgxKSB7CisgICAgICAgIGRlY2x0eXBlKG1fcXVldWUpIHF1ZXVlOworICAgICAgICB7Cisg
ICAgICAgICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgICAgICBxdWV1ZSA9IFdURjo6bW92ZShtX3F1ZXVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghcXVldWUuc2l6ZSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IHF1ZXVlKQorICAgICAgICAgICAgZnVuY3Rpb24oKTsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9H
U291cmNlV3JhcC5oIGIvU291cmNlL1dURi93dGYvZ2xpYi9HU291cmNlV3JhcC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ3OTQ4MWMzMTM0ZGU1N2I5MzAxODQ0YmQ4MDYwNjBiM2MwNTgzOTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dTb3VyY2VXcmFwLmgKQEAgLTAsMCArMSwxMjkg
QEAKKyNpZm5kZWYgR1NvdXJjZVdyYXBfaAorI2RlZmluZSBHU291cmNlV3JhcF9oCisKKyNpbmNs
dWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfR1NvY2tldCBHU29ja2V0OworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgR1NvdXJjZVdyYXAgeworcHJpdmF0ZToKKyAgICBzdGF0
aWMgR1NvdXJjZUZ1bmNzIHNvdXJjZUZ1bmN0aW9uczsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc3Rh
dGljQ2FsbGJhY2soZ3BvaW50ZXIpOworICAgIHN0YXRpYyBnYm9vbGVhbiBvbmVTaG90Q2FsbGJh
Y2soZ3BvaW50ZXIpOworICAgIHN0YXRpYyBnYm9vbGVhbiBzb2NrZXRDYWxsYmFjayhHU29ja2V0
KiwgR0lPQ29uZGl0aW9uLCBncG9pbnRlcik7CisKKyAgICB1c2luZyBEaXNwYXRjaENvbnRleHQg
PSBzdGQ6OnBhaXI8R1NvdXJjZSosIGdwb2ludGVyPjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDI+CisgICAgdXNpbmcgQ2FsbGJhY2tDb250ZXh0VHlwZSA9IHN0ZDo6cGFp
cjxzdGQ6OmZ1bmN0aW9uPFQxPiwgVDI+OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95Q2FsbGJhY2tDb250ZXh0KGdwb2ludGVyIGRhdGEpCisgICAg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4oZGF0YSk7Cisg
ICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KKworICAgIHN0YXRpYyBnaW50NjQgdGFyZ2V0
VGltZUZvckRlbGF5KHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMpOworCisgICAgY2xhc3MgQmFz
ZSB7CisgICAgcHVibGljOgorICAgICAgICBCYXNlKCkgPSBkZWZhdWx0OworICAgICAgICB+QmFz
ZSgpOworCisgICAgICAgIEJhc2UoY29uc3QgQmFzZSYpID0gZGVsZXRlOworICAgICAgICBCYXNl
JiBvcGVyYXRvcj0oY29uc3QgQmFzZSYpID0gZGVsZXRlOworICAgICAgICBCYXNlKEJhc2UmJikg
PSBkZWxldGU7CisgICAgICAgIEJhc2UmIG9wZXJhdG9yPShCYXNlJiYpID0gZGVsZXRlOworCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOworICAgIH07
CisKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBmb3IgYSBz
dGQ6OmZ1bmN0aW9uPD4gY2FsbGJhY2sgdGhhdCBjYW4gYmUgdGllZCB0byBvcgorICAgIC8vIGNv
bnRyb2xsZWQgYnkgc29tZSBzcGVjaWZpYyBvYmplY3Qgb3IgaW50ZXJmYWNlIGFuZCBjYW4gYmUg
cmVzY2hlZHVsZWQgYXMgZGVzaXJlZC4KKyAgICBjbGFzcyBTdGF0aWMgOiBwdWJsaWMgQmFzZSB7
CisgICAgcHVibGljOgorICAgICAgICBTdGF0aWMoKSA9IGRlZmF1bHQ7CisgICAgICAgIFN0YXRp
Yyhjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYsIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgICAg
ICB2b2lkIGluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiYmLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIEdNYWluQ29udGV4dCogPSBu
dWxscHRyKTsKKworICAgICAgICB2b2lkIHNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKTsKKyAgICAgICAgdm9pZCBjYW5jZWwo
KTsKKworICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBp
c1NjaGVkdWxlZCgpIGNvbnN0OworICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0cnVjdCBDb250ZXh0IHsKKyAgICAgICAgICAgIEdSZWZQ
dHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKKyAgICAgICAgICAgIGJvb2wgZGlzcGF0Y2hp
bmc7CisgICAgICAgIH0gbV9jb250ZXh0OworCisgICAgICAgIGZyaWVuZCBjbGFzcyBHU291cmNl
V3JhcDsKKyAgICAgICAgdXNpbmcgQ2FsbGJhY2tDb250ZXh0ID0gQ2FsbGJhY2tDb250ZXh0VHlw
ZTx2b2lkKCksIENvbnRleHQmPjsKKyAgICB9OworCisgICAgLy8gVGhpcyBjbGFzcyBzaG91bGQg
YmUgdXNlZCBmb3Igb25lLW9mZiBjYWxsYmFja3MgdGhhdCBhcmUgbm90IHRpZWQgdG8gb3IgY29u
dHJvbGxlZCBieQorICAgIC8vIHNvbWUgc3BlY2lmaWMgb2JqZWN0IG9yIGludGVyZmFjZSBhbmQg
d29uJ3QgYmUgc2NoZWR1bGVkIG1vcmUgdGhhbiBvbmNlLgorICAgIGNsYXNzIE9uZVNob3Qgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBkZWxheSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCksIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgR01haW5Db250ZXh0KiBjb250ZXh0ID0gbnVsbHB0cik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgR1NvdXJjZVdyYXA7CisgICAg
ICAgIHVzaW5nIENhbGxiYWNrQ29udGV4dCA9IENhbGxiYWNrQ29udGV4dFR5cGU8dm9pZCAoKSwg
dm9pZCo+OworICAgIH07CisKKyAgICAvLyBUaGlzIGNsYXNzIGVuYWJsZXMgaW52b2tpbmcgdGhl
IHBhc3NlZC1pbiBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0IHdoZW5ldmVyIHRoZXJlIGlzCisgICAg
Ly8gc29tZSBhY3Rpdml0eSBvbiB0aGUgcmVsZXZhbnQgZmlsZSBkZXNjcmlwdG9yLiBPbmx5IHVz
ZWQgaW4gV29ya1F1ZXVlLgorICAgIGNsYXNzIFNvY2tldCA6IHB1YmxpYyBCYXNlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFNvY2tldCgpID0gZGVmYXVsdDsKKyAgICAgICAgdm9pZCBpbml0aWFs
aXplKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4m
JiwgR1NvY2tldCosIEdJT0NvbmRpdGlvbiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZB
VUxULCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgR1NvdXJjZVdyYXA7CisgICAgICAg
IHVzaW5nIENhbGxiYWNrQ29udGV4dCA9IENhbGxiYWNrQ29udGV4dFR5cGU8Ym9vbCAoR0lPQ29u
ZGl0aW9uKSwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKKworICAgICAgICBHUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICB9OworCisgICAgLy8gVGhpcyBjbGFzcyBlbmFi
bGVzIHF1ZXVlaW5nIHBhc3NlZC1pbiBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0cyB0aGF0IGFyZSB0
aGVuIGludm9rZWQKKyAgICAvLyB3aGVuIHRoZSBHU291cmNlV3JhcDo6U3RhdGljIG9iamVjdCBp
cyBkaXNwYXRjaGVkLiBPbmx5IHVzZWQgaW4gV29ya1F1ZXVlLgorICAgIGNsYXNzIFF1ZXVlIHsK
KyAgICAgICAgUXVldWUoY29uc3QgUXVldWUmKSA9IGRlbGV0ZTsKKyAgICAgICAgUXVldWUmIG9w
ZXJhdG9yPShjb25zdCBRdWV1ZSYpID0gZGVsZXRlOworICAgICAgICBRdWV1ZShRdWV1ZSYmKSA9
IGRlbGV0ZTsKKyAgICAgICAgUXVldWUmIG9wZXJhdG9yPShRdWV1ZSYmKSA9IGRlbGV0ZTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFF1ZXVlKCk7CisgICAgICAgIH5RdWV1ZSgpOworCisgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZShjb25zdCBjaGFyKiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9E
RUZBVUxULCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisKKyAgICAgICAgdm9pZCBxdWV1ZShz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBk
aXNwYXRjaFF1ZXVlKCk7CisKKyAgICAgICAgU3RhdGljIG1fc291cmNlV3JhcDsKKyAgICAgICAg
R011dGV4IG1fbXV0ZXg7CisgICAgICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCA4
PiBtX3F1ZXVlOworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpHU291cmNlV3JhcDsKKworI2VuZGlmIC8vIEdTb3VyY2VXcmFwX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL2dsaWIvTWFpblRocmVhZEdMaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xp
Yi9NYWluVGhyZWFkR0xpYi5jcHAKaW5kZXggNjQ5YTlhNTAyYmVkNjQ3NDY5NmE2MDAzMWI2ZmY0
YjZjOWI0M2E3ZC4uMjIyMzBjZjFhZjU4NzQ3NGViY2FiYjMyZjI1MGMwMGMyMTgyMDdmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAKLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HU291cmNlV3Jh
cC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDAsNyArNDAsOSBAQCB2b2lkIGluaXRpYWxp
emVNYWluVGhyZWFkUGxhdGZvcm0oKQogCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNP
bk1haW5UaHJlYWQoKQogewotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmREZWxldGVP
bkRlc3Ryb3koIltXZWJLaXRdIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQiLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4oZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCkpOworICAg
IHN0YXRpYyBHU291cmNlV3JhcDo6U3RhdGljIGRpc3BhdGNoZXIoIltXZWJLaXRdIGRpc3BhdGNo
RnVuY3Rpb25zRnJvbU1haW5UaHJlYWQiLAorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
KGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGdf
bWFpbl9jb250ZXh0X2RlZmF1bHQoKSk7CisgICAgZGlzcGF0Y2hlci5zY2hlZHVsZSgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvUnVu
TG9vcEdMaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKaW5kZXgg
N2RjNDA3NTY2MDgyYTIzOGJhZjk2MTA4NzYyZWVjMjQyZjZlYjk4Yi4uMDMyYjMzNDZlZjliZmI4
NGMzMTA3YjlkNTYzYzUzZGVhN2FiNjFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xp
Yi9SdW5Mb29wR0xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5j
cHAKQEAgLTQyLDYgKzQyLDkgQEAgUnVuTG9vcDo6UnVuTG9vcCgpCiAgICAgR1JlZlB0cjxHTWFp
bkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fbWFpbkNv
bnRleHQuZ2V0KCksIEZBTFNFKSk7CiAgICAgQVNTRVJUKGlubmVybW9zdExvb3ApOwogICAgIG1f
bWFpbkxvb3BzLmFwcGVuZChpbm5lcm1vc3RMb29wKTsKKworICAgIG1fd29ya1NvdXJjZS5pbml0
aWFsaXplKCJbV2ViS2l0XSBSdW5Mb29wIHdvcmsiLCBzdGQ6OmJpbmQoJlJ1bkxvb3A6OnBlcmZv
cm1Xb3JrLCB0aGlzKSwKKyAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBtX21haW5Db250ZXh0
LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6flJ1bkxvb3AoKQpAQCAtOTEsMTUgKzk0LDEzIEBAIHZv
aWQgUnVuTG9vcDo6c3RvcCgpCiAKIHZvaWQgUnVuTG9vcDo6d2FrZVVwKCkKIHsKLSAgICBSZWZQ
dHI8UnVuTG9vcD4gcnVuTG9vcCh0aGlzKTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxl
QW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0XSBSdW5Mb29wIHdvcmsiLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4oW3J1bkxvb3BdIHsKLSAgICAgICAgcnVuTG9vcC0+cGVyZm9ybVdvcmsoKTsKLSAg
ICB9KSwgR19QUklPUklUWV9ERUZBVUxULCBudWxscHRyLCBtX21haW5Db250ZXh0LmdldCgpKTsK
KyAgICBtX3dvcmtTb3VyY2Uuc2NoZWR1bGUoKTsKICAgICBnX21haW5fY29udGV4dF93YWtldXAo
bV9tYWluQ29udGV4dC5nZXQoKSk7CiB9CiAKIFJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNl
KFJ1bkxvb3AmIHJ1bkxvb3ApCiAgICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKKyAgICAsIG1fdGlt
ZXJTb3VyY2UoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpiaW5kKCZSdW5Mb29wOjpU
aW1lckJhc2U6OnRpbWVyRmlyZWQsIHRoaXMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fcnVuTG9v
cC5tX21haW5Db250ZXh0LmdldCgpKQogewogfQogCkBAIC0xMTAsMTIgKzExMSwxNSBAQCBSdW5M
b29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQogCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6
c3RhcnQoZG91YmxlIGZpcmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCiB7Ci0gICAgbV90aW1lclNv
dXJjZS5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpm
dW5jdGlvbjxib29sICgpPihbdGhpcywgcmVwZWF0XSB7IGZpcmVkKCk7IHJldHVybiByZXBlYXQ7
IH0pLAotICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSwg
R19QUklPUklUWV9ERUZBVUxULCBudWxscHRyLCBtX3J1bkxvb3AubV9tYWluQ29udGV4dC5nZXQo
KSk7CisgICAgbV9maXJlSW50ZXJ2YWwgPSBmaXJlSW50ZXJ2YWw7CisgICAgbV9yZXBlYXRpbmcg
PSByZXBlYXQ7CisgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZShzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248
ZG91YmxlPihtX2ZpcmVJbnRlcnZhbCkpKTsKIH0KIAogdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6
OnN0b3AoKQogeworICAgIG1fZmlyZUludGVydmFsID0gMDsKKyAgICBtX3JlcGVhdGluZyA9IGZh
bHNlOwogICAgIG1fdGltZXJTb3VyY2UuY2FuY2VsKCk7CiB9CiAKQEAgLTEyNCw0ICsxMjgsMTEg
QEAgYm9vbCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4g
bV90aW1lclNvdXJjZS5pc1NjaGVkdWxlZCgpOwogfQogCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6dGltZXJGaXJlZCgpCit7CisgICAgZmlyZWQoKTsKKyAgICBpZiAobV9yZXBlYXRpbmcpCisg
ICAgICAgIG1fdGltZXJTb3VyY2Uuc2NoZWR1bGUoc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4o
bV9maXJlSW50ZXJ2YWwpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2ds
aWIvV29ya1F1ZXVlR0xpYi5jcHAKaW5kZXggZWUxYjYwYmFmNWQwNjhiYTJjZWFkM2Q4MTE0OGZi
NGEyYzdjNDFiMi4uODM0MTgwOGE4M2Q2NzM2MTIyNWEzMDdhNDJhYTNjOTc4NmJhODBkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCkBAIC00Miw2ICs0Miw4IEBAIHZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9T
KQogICAgIG1fZXZlbnRMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX2V2ZW50Q29u
dGV4dC5nZXQoKSwgRkFMU0UpKTsKICAgICBBU1NFUlQobV9ldmVudExvb3ApOwogCisgICAgbV9k
aXNwYXRjaFF1ZXVlLmluaXRpYWxpemUoIltXZWJLaXRdIFdvcmtRdWV1ZTo6ZGlzcGF0Y2giLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKwogICAgIC8vIFRoaXMg
bmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxl
LkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgogICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBm
b3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVy
cywKICAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFk
IG5hbWVzLgpAQCAtNzUsOCArNzcsOSBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlk
YXRlKCkKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBz
dGFydGVkIHlldCwgc28gc2NoZWR1bGUgYSBtYWluIGxvb3AgcXVpdCB0byBlbnN1cmUgdGhlIHRo
cmVhZCBmaW5pc2hlcy4KICAgICAgICAgICAgIEdNYWluTG9vcCogZXZlbnRMb29wID0gbV9ldmVu
dExvb3AuZ2V0KCk7Ci0gICAgICAgICAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVs
ZXRlT25EZXN0cm95KCJbV2ViS2l0XSBXb3JrUXVldWUgcXVpdCBtYWluIGxvb3AiLCBbZXZlbnRM
b29wXSB7IGdfbWFpbl9sb29wX3F1aXQoZXZlbnRMb29wKTsgfSwKLSAgICAgICAgICAgICAgICBH
X1BSSU9SSVRZX0hJR0gsIG51bGxwdHIsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICAgICAg
ICAgIEdTb3VyY2VXcmFwOjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIFdvcmtRdWV1ZSBx
dWl0IG1haW4gbG9vcCIsCisgICAgICAgICAgICAgICAgW2V2ZW50TG9vcF0geyBnX21haW5fbG9v
cF9xdWl0KGV2ZW50TG9vcCk7IH0sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCksCisgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9ISUdILCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgbV9ldmVudExvb3AgPSBudWxscHRyOwogICAgIH0KQEAgLTg3LDIzICs5
MCwyMiBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHZvaWQgV29ya1F1
ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2xvc2VG
dW5jdGlvbikKIHsKICAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3Nv
Y2tldF9uZXdfZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkpOwotICAgIHJlZigpOwotICAgIG1f
c29ja2V0RXZlbnRTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIFdvcmtRdWV1ZTo6U29ja2V0RXZl
bnRIYW5kbGVyIiwgW2Z1bmN0aW9uLCBjbG9zZUZ1bmN0aW9uXShHSU9Db25kaXRpb24gY29uZGl0
aW9uKSB7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIG1fc29j
a2V0RXZlbnRTb3VyY2UuaW5pdGlhbGl6ZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpTb2NrZXRFdmVu
dEhhbmRsZXIiLAorICAgICAgICBbZnVuY3Rpb24sIGNsb3NlRnVuY3Rpb24sIHByb3RlY3Rvcl0o
R0lPQ29uZGl0aW9uIGNvbmRpdGlvbikgewogICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdf
SU9fSFVQIHx8IGNvbmRpdGlvbiAmIEdfSU9fRVJSIHx8IGNvbmRpdGlvbiAmIEdfSU9fTlZBTCkg
ewogICAgICAgICAgICAgICAgIGNsb3NlRnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gR01haW5Mb29wU291cmNlOjpTdG9wOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fSU4pIHsK
ICAgICAgICAgICAgICAgICBmdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBHTWFp
bkxvb3BTb3VyY2U6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7Ci0gICAgICAgIH0sIHNvY2tldC5nZXQo
KSwgR19JT19JTiwKLSAgICAgICAgW3RoaXNdIHsgZGVyZWYoKTsgfSwKLSAgICAgICAgbV9ldmVu
dENvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LCBz
b2NrZXQuZ2V0KCksIEdfSU9fSU4sIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9ldmVudENvbnRleHQu
Z2V0KCkpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cihpbnQpCkBAIC0xMTMsMTYgKzExNSwxNCBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihpbnQpCiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogewotICAgIHJlZigpOwotICAgIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2giLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAg
IFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICBtX2Rpc3Bh
dGNoUXVldWUucXVldWUoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVl
OjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKLSAgICByZWYoKTsKLSAgICBHTWFpbkxvb3BT
b3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29y
a1F1ZXVlOjpkaXNwYXRjaEFmdGVyIiwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKLSAgICAgICAgc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRp
b24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fZXZlbnRDb250
ZXh0LmdldCgpKTsKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisgICAg
R1NvdXJjZVdyYXA6Ok9uZVNob3Q6OmNvbnN0cnVjdCgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyIiwgc3RkOjpiaW5kKFtwcm90ZWN0b3JdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4mIGZ1bmN0aW9uKSB7IGZ1bmN0aW9uKCk7IH0sIFdURjo6bW92ZShmdW5jdGlvbikpLAor
ICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPihkdXJhdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9ldmVudENvbnRleHQuZ2V0KCkp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDhi
MmUyOGVmYjRhODcyNzYwOWZmZWVjZGE0MzcxNmM1N2Y0MzE1ZWMuLjY0Y2ZmYjQwZmY1NzAzN2E4
NDJlMjBlNTExZTk1Zjc1NmUxYmRjMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3Ry
ZWFtZXIuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvR1NvdXJjZVdyYXAuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0Nyw4ICszNDcsOSBAQCBQYXNzUmVmUHRyPEF1
ZGlvQnVzPiBBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29s
IG1peFRvTW9ubwogICAgIG1fbG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcoY29udGV4
dC5nZXQoKSwgRkFMU0UpKTsKIAogICAgIC8vIFN0YXJ0IHRoZSBwaXBlbGluZSBwcm9jZXNzaW5n
IGp1c3QgYWZ0ZXIgdGhlIGxvb3AgaXMgc3RhcnRlZC4KLSAgICBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlIHNvdXJjZTsKLSAgICBzb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIEF1ZGlvRmlsZVJl
YWRlcjo6ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbiIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihz
dGQ6OmJpbmQoJkF1ZGlvRmlsZVJlYWRlcjo6ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbiwgdGhp
cykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIGNvbnRleHQuZ2V0KCkpOworICAgIEdT
b3VyY2VXcmFwOjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIEF1ZGlvRmlsZVJlYWRlcjo6
ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbiIsCisgICAgICAgIHN0ZDo6YmluZCgmQXVkaW9GaWxl
UmVhZGVyOjpkZWNvZGVBdWRpb0ZvckJ1c0NyZWF0aW9uLCB0aGlzKSwKKyAgICAgICAgc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcygwKSwgR19QUklPUklUWV9ERUZBVUxULCBjb250ZXh0LmdldCgp
KTsKIAogICAgIGdfbWFpbl9sb29wX3J1bihtX2xvb3AuZ2V0KCkpOwogICAgIGdfbWFpbl9jb250
ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChjb250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAyOWU4ODRiZjFk
OTU5MzUyYjRlZjFlZjcyNTljNjA1ZjAxYzc3YTQ4Li4yYzc2ZDExNjU3NmVlOTgzNWJlMmJhMzBm
Y2I4NDhjODk5NzI3OGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC01NCw2ICs1NCw4IEBAIHN0YXRpYyBHc3RQYWRQcm9i
ZVJldHVybiB0ZXh0VHJhY2tQcml2YXRlRXZlbnRDYWxsYmFjayhHc3RQYWQqLCBHc3RQYWRQcm9i
ZUluZm8qCiAKIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OkluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKICAgICA6
IEluYmFuZFRleHRUcmFja1ByaXZhdGUoV2ViVlRUKSwgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cih0aGlzLCBpbmRleCwgcGFkKQorICAgICwgbV9zYW1wbGVUaW1lckhhbmRsZXIoIltXZWJLaXRd
IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTYW1sZSIsIHN0
ZDo6YmluZCgmSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNh
bXBsZSwgdGhpcykpCisgICAgLCBtX3N0cmVhbVRpbWVySGFuZGxlcigiW1dlYktpdF0gSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBz
dGQ6OmJpbmQoJkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZT
dHJlYW1DaGFuZ2VkLCB0aGlzKSkKIHsKICAgICBtX2V2ZW50UHJvYmUgPSBnc3RfcGFkX2FkZF9w
cm9iZShtX3BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCiAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4odGV4dFRyYWNrUHJp
dmF0ZUV2ZW50Q2FsbGJhY2spLCB0aGlzLCAwKTsKQEAgLTgwLDEyICs4MiwxMiBAQCB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVNhbXBsZShHUmVmUHRyPEdzdFNh
bXBsZT4gc2FtcGxlKQogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fc2FtcGxlTXV0ZXgpOwog
ICAgICAgICBtX3BlbmRpbmdTYW1wbGVzLmFwcGVuZChzYW1wbGUpOwogICAgIH0KLSAgICBtX3Nh
bXBsZVRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihz
dGQ6OmJpbmQoJkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZT
YW1wbGUsIHRoaXMpKSk7CisgICAgbV9zYW1wbGVUaW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0K
IAogdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzdHJlYW1DaGFuZ2VkKCkK
IHsKLSAgICBtX3N0cmVhbVRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQiLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlUcmFja09mU3RyZWFtQ2hhbmdlZCwgdGhpcykpKTsKKyAgICBtX3N0cmVhbVRp
bWVySGFuZGxlci5zY2hlZHVsZSgpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZTYW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJh
bmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggYjdkZmZhNzZlYzA3YTYzN2E3ZjJl
ZDI1MTg4M2IwOTM2ODA0MDZlMC4uZjNlMDRiMTUyM2E2MWRhOTg2ZGNhMmRlNTFmODgxMDYyZGFh
ZmI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lci5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgog
I2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8d3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dTb3VyY2VXcmFwLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNjIsOCArNjIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+
KTsKIAotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9zYW1wbGVUaW1lckhhbmRsZXI7
Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3N0cmVhbVRpbWVySGFuZGxlcjsKKyAg
ICBHU291cmNlV3JhcDo6U3RhdGljIG1fc2FtcGxlVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VX
cmFwOjpTdGF0aWMgbV9zdHJlYW1UaW1lckhhbmRsZXI7CiAgICAgZ3Vsb25nIG1fZXZlbnRQcm9i
ZTsKICAgICBWZWN0b3I8R1JlZlB0cjxHc3RTYW1wbGU+ID4gbV9wZW5kaW5nU2FtcGxlczsKICAg
ICBTdHJpbmcgbV9zdHJlYW1JZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKaW5kZXggYTI1NTMzMzU0M2E0YTk0NTNhOWYwZjIzNjA5NjVjOTk4ZDI5
NTU5ZC4uZmQ2Y2VmMDRmMDNlYzdmNTQ1MjU2N2ZhNzViODY4ZDAxMGFkNjU2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTIxMCw2ICsy
MTAsMTEgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAsIG1fdm9sdW1lQW5kTXV0ZUluaXRp
YWxpemVkKGZhbHNlKQogICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKICAgICAsIG1faGFzQXVkaW8o
ZmFsc2UpCisgICAgLCBtX2F1ZGlvVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvLCB0aGlzKSkKKyAgICAsIG1fdGV4dFRp
bWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hh
bmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5
ZXJPZlRleHQsIHRoaXMpKQorICAgICwgbV92aWRlb1RpbWVySGFuZGxlcigiW1dlYktpdF0gTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6OmJpbmQoJk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbywgdGhpcykpCisgICAg
LCBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp2aWRlb0NhcHNDaGFuZ2VkIiwgc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzLCB0aGlzKSkKKyAgICAsIG1fcmVhZHlU
aW1lckhhbmRsZXIoIltXZWJLaXRdIG1lZGlhUGxheWVyUHJpdmF0ZVJlYWR5U3RhdGVUaW1lb3V0
Q2FsbGJhY2siLCBbdGhpc10geyBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsg
fSkKICAgICAsIG1fdG90YWxCeXRlcygwKQogICAgICwgbV9wcmVzZXJ2ZXNQaXRjaChmYWxzZSkK
ICNpZiBFTkFCTEUoV0VCX0FVRElPKQpAQCAtMzk5LDEyICs0MDQsMTAgQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3Rh
dGUpCiAgICAgLy8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcgb24gUkVBRFkuCiAgICAgLy8gQWxz
byBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5nZSBmb3Ig
YW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFkuCiAgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAotICAgIGlmIChuZXdTdGF0ZSA9PSBH
U1RfU1RBVEVfUkVBRFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNTY2hlZHVsZWQoKSkgewot
ICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0g
bWVkaWFQbGF5ZXJQcml2YXRlUmVhZHlTdGF0ZVRpbWVvdXRDYWxsYmFjayIsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPihbdGhpc10geyBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsg
fSksCi0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyhnUmVhZHlTdGF0ZVRpbWVySW50
ZXJ2YWwpKTsKLSAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9TVEFURV9SRUFEWSAmJiBt
X3JlYWR5VGltZXJIYW5kbGVyLmlzU2NoZWR1bGVkKCkpIHsKKyAgICBpZiAobmV3U3RhdGUgPT0g
R1NUX1NUQVRFX1JFQURZICYmICFtX3JlYWR5VGltZXJIYW5kbGVyLmlzU2NoZWR1bGVkKCkpCisg
ICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc2NoZWR1bGUoc3RkOjpjaHJvbm86OnNlY29uZHMo
Z1JlYWR5U3RhdGVUaW1lckludGVydmFsKSk7CisgICAgZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NU
X1NUQVRFX1JFQURZICYmIG1fcmVhZHlUaW1lckhhbmRsZXIuaXNTY2hlZHVsZWQoKSkKICAgICAg
ICAgbV9yZWFkeVRpbWVySGFuZGxlci5jYW5jZWwoKTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTY1MiwxMiArNjU1LDEyIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZWVraW5nKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnZpZGVvQ2hhbmdlZCgpCiB7Ci0gICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dl
YktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5v
dGlmeVBsYXllck9mVmlkZW8sIHRoaXMpKSk7CisgICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hl
ZHVsZSgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBz
Q2hhbmdlZCgpCiB7Ci0gICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJL
aXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMsIHRoaXMpKSk7CisgICAgbV92aWRlb0NhcHNUaW1lckhh
bmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVmlkZW8oKQpAQCAtNzA1LDcgKzcwOCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWQoKQogewotICAgIG1fYXVkaW9U
aW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6YXVkaW9DaGFuZ2VkIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvLCB0aGlzKSkpOworICAg
IG1fYXVkaW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQpAQCAtNzQ4LDcgKzc1MSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dGV4dENoYW5nZWQoKQogewotICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dl
YktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0LCB0aGlzKSkpOworICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVs
ZSgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVy
T2ZUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApp
bmRleCAzMzU4Y2ViZjc3ZGIzMmU0ODY2M2UzMDYyN2MwZDliZTA1MDUxMjE3Li5hYzdkYTljOTM0
ODM0NzFlMjFkZjY5NmE0OTZkYTUzN2VkNWM2MThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8Z3N0
L2dzdC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1Z2lucy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dTb3VyY2VXcmFwLmg+CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KQEAgLTIyMSwxMSArMjIxLDExIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZDsKICAgICBib29sIG1faGFzVmlkZW87
CiAgICAgYm9vbCBtX2hhc0F1ZGlvOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9h
dWRpb1RpbWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdGV4dFRp
bWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdmlkZW9UaW1lckhh
bmRsZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3ZpZGVvQ2Fwc1RpbWVySGFu
ZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fcmVhZHlUaW1lckhhbmRsZXI7
CisgICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2F1ZGlvVGltZXJIYW5kbGVyOworICAgIEdTb3Vy
Y2VXcmFwOjpTdGF0aWMgbV90ZXh0VGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0
aWMgbV92aWRlb1RpbWVySGFuZGxlcjsKKyAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fdmlkZW9D
YXBzVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9yZWFkeVRpbWVySGFu
ZGxlcjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXM7CiAgICAg
VVJMIG1fdXJsOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCA2NGEyM2QxZjJk
OTNhYmZlN2NjMmRhYTg3NjUxZjg1NDY2M2Y0NWZjLi5iZDliYjU3ODI5ZTI2ODRhYWEwMDMxOTdm
YTcxMmQxYTM5NzI0NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC0xMzgsNiArMTM4LDExIEBAIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQ
bGF5ZXIqIHBsCiAgICAgLCBtX2Zwc1NpbmsoMCkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1w
dHkpCisgICAgLCBtX3ZvbHVtZVRpbWVySGFuZGxlcigiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UsIHRoaXMpKQor
ICAgICwgbV9tdXRlVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjptdXRlQ2hhbmdlZCIsIHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlLCB0aGlzKSkKKyNpZiBVU0UoR1NUUkVBTUVS
X0dMKQorICAgICwgbV9kcmF3VGltZXJIYW5kbGVyKCJbV2ViS2l0XSB2aWRlbyByZW5kZXIiLCBz
dGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyYXdUaW1lckZpcmVk
LCB0aGlzKSkKKyNlbmRpZgogICAgICwgbV9yZXBhaW50SGFuZGxlcigwKQogICAgICwgbV92b2x1
bWVTaWduYWxIYW5kbGVyKDApCiAgICAgLCBtX211dGVTaWduYWxIYW5kbGVyKDApCkBAIC0zNjEs
NyArMzY2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQ
bGF5ZXJPZlZvbHVtZUNoYW5nZSgpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6dm9sdW1lQ2hhbmdlZCgpCiB7Ci0gICAgbV92b2x1bWVUaW1lckhhbmRsZXIuc2NoZWR1
bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5n
ZWQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSwgdGhpcykpKTsKKyAgICBt
X3ZvbHVtZVRpbWVySGFuZGxlci5zY2hlZHVsZSgpOwogfQogCiBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSgpIGNv
bnN0CkBAIC00MDksNyArNDE0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpub3RpZnlQbGF5ZXJPZk11dGUoKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKIHsKLSAgICBtX211dGVUaW1lckhhbmRsZXIuc2NoZWR1
bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2Vk
Iiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlLCB0aGlzKSkpOworICAgIG1fbXV0ZVRpbWVy
SGFuZGxlci5zY2hlZHVsZSgpOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNDYxLDYgKzQ2NiwxOCBAQCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRl
eHR1cmUoVGV4dHVyZQogfQogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkcmF3VGltZXJGaXJlZCgpCit7CisgICAg
V1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQ
bGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxheWVyKSAmJiBjbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50KCktPnNldFBsYXRmb3JtTGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICBnX2Nv
bmRfc2lnbmFsKCZtX2RyYXdDb25kaXRpb24pOworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUq
IHNhbXBsZSkKIHsKICAgICB7CkBAIC00NzQsMTYgKzQ5MSw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUpCiAK
ICAgICAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKIAot
ICAgICAgICBtX2RyYXdUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIHZpZGVvIHJlbmRl
ciIsIFt0aGlzXSB7Ci0gICAgICAgICAgICAvLyBSZW5kZXJpbmcgc2hvdWxkIGJlIGRvbmUgZnJv
bSB0aGUgbWFpbiB0aHJlYWQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0
aGUgR0wgQVBJcyB3ZXJlIGluaXRpYWxpemVkLgotICAgICAgICAgICAgV1RGOjpHTXV0ZXhMb2Nr
ZXI8R011dGV4PiBsb2NrKG1fZHJhd011dGV4KTsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
ICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgICAgICAgICBpZiAoc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpICYmIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJl
bmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9wbGF5ZXIpICYmIGNsaWVudCgpKQotICAgICAgICAg
ICAgICAgIGNsaWVudCgpLT5zZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgICAg
ICAgICBnX2NvbmRfc2lnbmFsKCZtX2RyYXdDb25kaXRpb24pOwotI2VuZGlmCi0gICAgICAgIH0p
OworICAgICAgICAvLyBSZW5kZXJpbmcgc2hvdWxkIGJlIGRvbmUgZnJvbSB0aGUgbWFpbiB0aHJl
YWQKKyAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBHTCBBUElzIHdlcmUgaW5p
dGlhbGl6ZWQuCisgICAgICAgIG1fZHJhd1RpbWVySGFuZGxlci5zY2hlZHVsZSgpOwogICAgICAg
ICBnX2NvbmRfd2FpdCgmbV9kcmF3Q29uZGl0aW9uLCAmbV9kcmF3TXV0ZXgpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKaW5k
ZXggMzEzNTczM2QxYjE5OGU2NWFmNWIzODI0ZTVjMmQ4NjcxZmI2ZjJkOS4uMmJhMTc2ZDBmYjYw
ZWYzYWEwOTI2MmY1MzZlNDM1ZjcyMDJlZGNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSA8Z2xpYi5oPgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1NvdXJj
ZVdyYXAuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgIVVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgpAQCAt
MTMxLDEwICsxMzEsMTEgQEAgcHJvdGVjdGVkOgogICAgIEludFNpemUgbV9zaXplOwogICAgIG11
dGFibGUgR011dGV4IG1fc2FtcGxlTXV0ZXg7CiAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2Ft
cGxlOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV92b2x1bWVUaW1lckhhbmRsZXI7
Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX211dGVUaW1lckhhbmRsZXI7CisgICAg
R1NvdXJjZVdyYXA6OlN0YXRpYyBtX3ZvbHVtZVRpbWVySGFuZGxlcjsKKyAgICBHU291cmNlV3Jh
cDo6U3RhdGljIG1fbXV0ZVRpbWVySGFuZGxlcjsKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAg
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9kcmF3VGltZXJIYW5kbGVyOworICAgIEdTb3Vy
Y2VXcmFwOjpTdGF0aWMgbV9kcmF3VGltZXJIYW5kbGVyOworICAgIHZvaWQgZHJhd1RpbWVyRmly
ZWQoKTsKICAgICBHQ29uZCBtX2RyYXdDb25kaXRpb247CiAgICAgR011dGV4IG1fZHJhd011dGV4
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAK
aW5kZXggZDkxZmQxZWI2ZWRkMzM5MTNjNDM0Mjc2NjM0MjAzZDRmZDdjMDE5ZS4uODRjZmYyMGNi
MjYyNzI3NTRhOTlhYmMxOWJhMjA2YWYyZTUwOTdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcApAQCAtNTcsNiArNTcsOCBAQCBUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2Uq
IG93bmVyLCBnaQogICAgIDogbV9pbmRleChpbmRleCkKICAgICAsIG1fcGFkKHBhZCkKICAgICAs
IG1fb3duZXIob3duZXIpCisgICAgLCBtX2FjdGl2ZVRpbWVySGFuZGxlcigiW1dlYktpdF0gVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQiLCBzdGQ6
OmJpbmQoJlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFu
Z2VkLCB0aGlzKSkKKyAgICAsIG1fdGFnVGltZXJIYW5kbGVyKCJbV2ViS2l0XSBUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mVGFnc0NoYW5nZWQiLCBzdGQ6OmJpbmQoJlRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCwgdGhpcykp
CiB7CiAgICAgQVNTRVJUKG1fcGFkKTsKIApAQCAtOTIsNyArOTQsNyBAQCB2b2lkIFRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogCiB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OmFjdGl2ZUNoYW5nZWQoKQogewotICAgIG1fYWN0aXZlVGltZXJIYW5kbGVyLnNj
aGVkdWxlKCJbV2ViS2l0XSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09m
QWN0aXZlQ2hhbmdlZCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQoJlRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkLCB0aGlzKSkpOwor
ICAgIG1fYWN0aXZlVGltZXJIYW5kbGVyLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQpAQCAtMTA2LDcgKzEwOCw3IEBAIHZvaWQg
VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQogICAgICAgICBtX3RhZ3Mu
c3dhcCh0YWdzKTsKICAgICB9CiAKLSAgICBtX3RhZ1RpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dl
YktpdF0gVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2Vk
Iiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCgmVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6bm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2VkLCB0aGlzKSkpOworICAgIG1fdGFnVGltZXJI
YW5kbGVyLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6
bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyLmgKaW5kZXggZTNkNmY0MWViODFiOTViZWU4MzYwM2NmNTFiYzgyOTNkNzU5
MTZiYi4uMjgyNWJiOTZhNTEzNzM0MWQ1MmZhYmEzMzFlN2MxMDUxNWY5NjkzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1By
aW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1NvdXJjZVdyYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsOCArNzAsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgZ2V0VGFnKEdzdFRhZ0xpc3QqIHRhZ3MsIGNvbnN0IGdjaGFyKiB0
YWdOYW1lLCBTdHJpbmdUeXBlJiB2YWx1ZSk7CiAKICAgICBUcmFja1ByaXZhdGVCYXNlKiBtX293
bmVyOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9hY3RpdmVUaW1lckhhbmRsZXI7
Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3RhZ1RpbWVySGFuZGxlcjsKKyAgICBH
U291cmNlV3JhcDo6U3RhdGljIG1fYWN0aXZlVGltZXJIYW5kbGVyOworICAgIEdTb3VyY2VXcmFw
OjpTdGF0aWMgbV90YWdUaW1lckhhbmRsZXI7CiAKICAgICBNdXRleCBtX3RhZ011dGV4OwogICAg
IEdSZWZQdHI8R3N0VGFnTGlzdD4gbV90YWdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKaW5kZXggY2ZmN2Q3MzMxMWY0MTA0YWMxM2UzZmFiMDVh
OWI3MjJmNGVhMTg0Ni4uODcxMmJkNWE2YmU2ZGI5ZGZmMDg3NTExYmI4MGZiOGIxZDA1Zjk0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwCkBA
IC0yOCwxMiArMjgsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRU
aW1lci5oIgogCi0jaW5jbHVkZSA8d3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1NvdXJjZVdyYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgR01haW5Mb29wU291cmNlIGdTaGFyZWRUaW1lcjsKLXN0YXRpYyB2b2lkICgqc2hhcmVkVGlt
ZXJGaXJlZEZ1bmN0aW9uKSgpOworc3RhdGljIHZvaWQgKCpzaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24pKCkgPSBudWxscHRyOworc3RhdGljIHZvaWQgc2hhcmVkVGltZXJGaXJlKCkKK3sKKyAgICBz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKK30KKworLy8gR19QUklPUklUWV9ISUdIX0lETEUg
KyAyMCBpcyBHREtfUFJJT1JJVFlfUkVEUkFXLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQg
b24gR0RLIGhlcmUganVzdCB0byB1c2UgYSBjb25zdGFudC4KK3N0YXRpYyBHU291cmNlV3JhcDo6
U3RhdGljIGdTaGFyZWRUaW1lcigiW1dlYktpdF0gc2hhcmVkVGltZXJUaW1lb3V0Q2FsbGJhY2si
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KHNoYXJlZFRpbWVyRmlyZSksIEdfUFJJT1JJVFlfSElH
SF9JRExFICsgMjApOwogCiB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgq
ZikoKSkKIHsKQEAgLTQ2LDEwICs1MiwxMSBAQCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVy
dmFsKGRvdWJsZSBpbnRlcnZhbCkKIHsKICAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uKTsKIAotICAgIC8vIFRoaXMgaXMgR0RLX1BSSU9SSVRZX1JFRFJBVywgYnV0IHdlIGRvbid0
IHdhbnQgdG8gZGVwZW5kIG9uIEdESyBoZXJlIGp1c3QgdG8gdXNlIGEgY29uc3RhbnQuCi0gICAg
c3RhdGljIGNvbnN0IGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfSElHSF9JRExFICsgMjA7Ci0g
ICAgZ1NoYXJlZFRpbWVyLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gc2hhcmVkVGltZXJU
aW1lb3V0Q2FsbGJhY2siLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oaW50ZXJ2YWwpKSwg
cHJpb3JpdHkpOworICAgIGF1dG8gaW50ZXJ2YWxEdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjpkdXJh
dGlvbjxkb3VibGU+KGludGVydmFsKTsKKyAgICBhdXRvIGRlbGF5ID0gc3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kczo6bWF4KCk7CisgICAgaWYgKGludGVydmFsRHVyYXRpb24gPCBkZWxheSkKKyAg
ICAgICAgZGVsYXkgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlj
cm9zZWNvbmRzPihpbnRlcnZhbER1cmF0aW9uKTsKKyAgICBnU2hhcmVkVGltZXIuc2NoZWR1bGUo
ZGVsYXkpOwogfQogCiB2b2lkIHN0b3BTaGFyZWRUaW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4
IDQ0OGVhNzY5OGU4YzM5MTYzOWEzODc1M2UwNmYwNGYwMDJmNzVlM2YuLmIyMjBiZWQxMGM3NDEz
MmYxYWQ1Zjk1NzgwMDc0ODBmNGJhNGJhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC01MSw4ICs1
MSw4IEBACiAjaWYgVVNFKFNPVVApCiAjaW5jbHVkZSAiR1VuaXF1ZVB0clNvdXAuaCIKICNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2Uu
aD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1Nv
dXJjZVdyYXAuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xNjgsNyArMTY4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJ
bnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVhbTsKICAgICAgICAgR1JlZlB0cjxHQ2Fu
Y2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CiAgICAgICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBt
X2RlZmVycmVkUmVzdWx0OwotICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90aW1lb3V0U291cmNl
OworICAgICAgICBHU291cmNlV3JhcDo6U3RhdGljIG1fdGltZW91dFNvdXJjZTsKICAgICAgICAg
R1VuaXF1ZVB0cjxTb3VwQnVmZmVyPiBtX3NvdXBCdWZmZXI7CiAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbV9ib2R5U2l6ZTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBtX2JvZHlEYXRhU2VudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKaW5kZXggZWE2Y2NkNjQzMDVhYTU2MmE2MTM5Y2E5ZGM5YjQ5YTU0
MWYwODlmZS4uMGU0ZGE3ZTY1NzAyYTA4MTdlN2QwNjhkZDhmZjg5OGI2NGRiMjcwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKQEAgLTEwNTUsMTEgKzEwNTUsMTQgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2VuZFBlbmRpbmdSZXF1ZXN0KCkKICNlbmRpZgogCiAgICAgaWYgKGQtPm1fZmlyc3RS
ZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpID4gMCkgewotICAgICAgICBkLT5tX3RpbWVvdXRTb3Vy
Y2Uuc2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBSZXNvdXJjZUhhbmRsZSByZXF1ZXN0IHRp
bWVvdXQiLCBbdGhpc10gewotICAgICAgICAgICAgY2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVz
b3VyY2VFcnJvcjo6dGltZW91dEVycm9yKGZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpKSk7
Ci0gICAgICAgICAgICBjYW5jZWwoKTsKLSAgICAgICAgfSwgc3RkOjpjaHJvbm86OmR1cmF0aW9u
X2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRv
dWJsZT4oZC0+bV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpKSwKLSAgICAgICAgR19Q
UklPUklUWV9ERUZBVUxULCBudWxscHRyLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1
bHQoKSk7CisgICAgICAgIGlmICghZC0+bV90aW1lb3V0U291cmNlLmlzSW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgICAgIGQtPm1fdGltZW91dFNvdXJjZS5pbml0aWFsaXplKCJbV2ViS2l0XSBSZXNv
dXJjZUhhbmRsZSByZXF1ZXN0IHRpbWVvdXQiLAorICAgICAgICAgICAgICAgIFt0aGlzXSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3I6
OnRpbWVvdXRFcnJvcihmaXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAg
ICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFV
TFQsIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKKworICAgICAgICBkLT5t
X3RpbWVvdXRTb3VyY2Uuc2NoZWR1bGUoc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZC0+bV9m
aXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpKSk7CiAgICAgfQogCiAgICAgLy8gQmFsYW5j
ZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hv
dWxkIGFsd2F5cyBydW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGQ3
ZDUwMjllMTQ5ZGY5MWFhZjRjNDJjMTMxMmQ3MmI3ZTdkODdlYzUuLmY0YjZmNTM3NGJmNzdmMDJi
Zjc0NjUyNzk5NmVlYWE5OGUzMjE5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAu
Y3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFp
bkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HTXV0ZXhMb2NrZXIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HU291cmNlV3JhcC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC03OCw3ICs3OCw4IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBydW5UYXNrSW5RdWV1ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IHRhc2ssIFdvcmtR
dWV1ZSogcXVldWUpCiAgICAgfQogCiAgICAgLy8gVXNpbmcgbnVsbHB0ciBhcyBxdWV1ZSBzdWJt
aXRzIHRoZSByZXN1bHQgdG8gdGhlIG1haW4gY29udGV4dC4KLSAgICBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlQW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0XSBJT0NoYW5uZWwgdGFzayIsIHRh
c2spOworICAgIEdTb3VyY2VXcmFwOjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIElPQ2hh
bm5lbCB0YXNrIiwgV1RGOjptb3ZlKHRhc2spLAorICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzKDApLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIoU291cEJ1ZmZlciogcmVh
ZEJ1ZmZlciwgc2l6ZV90IHNpemUsIERhdGEmIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IGEyMjQ5YmE0
ZTI3NzQ1MmE5ZTE2NzA5ZmJjMDg2NzAwNDUxMDE1ZjAuLmQ1NjU3YzIzNmYxOGNkNzgwOTM3MDBi
ODE4ZmEyYTM0OWY2YjlkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3du
bG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
b3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oPgogI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HU291cmNlV3JhcC5oPgog
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVl
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTAsNiArNTAsNyBAQCBj
bGFzcyBEb3dubG9hZENsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJs
aWM6CiAgICAgRG93bmxvYWRDbGllbnQoRG93bmxvYWQqIGRvd25sb2FkKQogICAgICAgICA6IG1f
ZG93bmxvYWQoZG93bmxvYWQpCisgICAgICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVyKCJbV2Vi
S2l0XSBEb3dubG9hZEhhbmRsZVJlc3BvbnNlTGF0ZXIiLCBzdGQ6OmJpbmQoJkRvd25sb2FkQ2xp
ZW50OjpoYW5kbGVSZXNwb25zZSwgdGhpcykpCiAgICAgICAgICwgbV9hbGxvd092ZXJ3cml0ZShm
YWxzZSkKICAgICB7CiAgICAgfQpAQCAtMjAzLDcgKzIwNCw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICAvLyBDYWxsIGRpZFJlY2VpdmVSZXNwb25zZSBpbiBhbiBpZGxlIHRvIG1ha2Ugc3VyZSB0aGUg
ZG93bmxvYWQgaXMgYWRkZWQKICAgICAgICAgLy8gdG8gdGhlIERvd25sb2FkTWFuYWdlciBkb3du
bG9hZHMgbWFwLgotICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuc2NoZWR1bGUoIltXZWJL
aXRdIERvd25sb2FkSGFuZGxlUmVzcG9uc2VMYXRlciIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihz
dGQ6OmJpbmQoJkRvd25sb2FkQ2xpZW50OjpoYW5kbGVSZXNwb25zZSwgdGhpcykpKTsKKyAgICAg
ICAgbV9oYW5kbGVSZXNwb25zZUxhdGVyLnNjaGVkdWxlKCk7CiAgICAgfQogCiAgICAgRG93bmxv
YWQqIG1fZG93bmxvYWQ7CkBAIC0yMTIsNyArMjEzLDcgQEAgcHVibGljOgogICAgIEdSZWZQdHI8
R0ZpbGU+IG1fZGVzdGluYXRpb25GaWxlOwogICAgIEdSZWZQdHI8R0ZpbGU+IG1faW50ZXJtZWRp
YXRlRmlsZTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fZGVsYXllZFJlc3BvbnNlOwotICAgIEdN
YWluTG9vcFNvdXJjZSBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7CisgICAgR1NvdXJjZVdyYXA6OlN0
YXRpYyBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7CiAgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1Bs
dWdpbkluZm9DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsv
UGx1Z2luSW5mb0NhY2hlLmNwcAppbmRleCA3OTIwMzkzOTMxZTdjYWY4ZmMxMmUyNjQwNDMxZWNk
OTUzMzk4ZjU4Li5mOGUyM2EwZjM0ZDBmNWRkNzhjZGNkMDMwNzBmOWY1NzhkMGI5ZTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0Nh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2lu
SW5mb0NhY2hlLmNwcApAQCAtNDQsNiArNDQsNyBAQCBQbHVnaW5JbmZvQ2FjaGUmIFBsdWdpbklu
Zm9DYWNoZTo6c2luZ2xldG9uKCkKIAogUGx1Z2luSW5mb0NhY2hlOjpQbHVnaW5JbmZvQ2FjaGUo
KQogICAgIDogbV9jYWNoZUZpbGUoZ19rZXlfZmlsZV9uZXcoKSkKKyAgICAsIG1fc2F2ZVRvRmls
ZUlkbGUoIltXZWJLaXRdIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSIsIHN0ZDo6YmluZCgm
UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlLCB0aGlzKSwgR19QUklPUklUWV9ERUZBVUxUX0lE
TEUpCiAgICAgLCBtX3JlYWRPbmx5TW9kZShmYWxzZSkKIHsKICAgICBHVW5pcXVlUHRyPGNoYXI+
IGNhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSwg
IndlYmtpdGd0ayIsIG51bGxwdHIpKTsKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIFBsdWdpbklu
Zm9DYWNoZTo6dXBkYXRlUGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNvbnN0
IFBsdWdpbk1vZAogICAgICAgICBpZiAobV9zYXZlVG9GaWxlSWRsZS5pc1NjaGVkdWxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fc2F2ZVRvRmlsZUlkbGUuc2NoZWR1bGUo
IltXZWJLaXRdIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSIsIHN0ZDo6YmluZCgmUGx1Z2lu
SW5mb0NhY2hlOjpzYXZlVG9GaWxlLCB0aGlzKSwgR19QUklPUklUWV9ERUZBVUxUX0lETEUpOwor
ICAgICAgICBtX3NhdmVUb0ZpbGVJZGxlLnNjaGVkdWxlKCk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hl
LmgKaW5kZXggZDM4NmQ0OTkzMTViMTFiOWRkMjQyMGJjNjJhMTgwNTM3YTQ5NWQxNC4uMGY5N2Nh
OTJhOGNkOWVmYjI4YWMyNzM3ZWI3OTc3ZWFmMTM1YzM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaApAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlIDxtdXRl
eD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9H
TWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HU291cmNlV3JhcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAKICAgICBHVW5pcXVlUHRyPEdLZXlGaWxlPiBtX2NhY2hl
RmlsZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IG1fY2FjaGVQYXRoOwotICAgIEdNYWluTG9vcFNv
dXJjZSBtX3NhdmVUb0ZpbGVJZGxlOworICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9zYXZlVG9G
aWxlSWRsZTsKICAgICBib29sIG1fcmVhZE9ubHlNb2RlOwogICAgIHN0ZDo6bXV0ZXggbV9tdXRl
eDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmRE
cm9wSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9w
SGFuZGxlci5jcHAKaW5kZXggY2NmNmYzMDU0ZTlkOGMwMDM0MmI2OGZjNDljZDM2NTkwNDQyYTA5
Zi4uZDZlYzMzMzE0MzcwNWYwNWRmYjA3MWQyYTg1NTFhY2JkNzYzZDFiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApAQCAt
MzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dT
b3VyY2VXcmFwLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIERyYWdBbmREcm9wSGFu
ZGxlcjo6ZHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQogICAgIC8vIER1cmluZyBh
IGRyb3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBiZWZvcmUgZmly
aW5nCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9y
IGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwg
c28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KLSAgICBHTWFp
bkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25EZXN0cm95KCJbV2ViS2l0XSBoYW5kbGVE
cmFnTGVhdmVMYXRlciIsIFt0aGlzLCBkcm9wcGluZ0NvbnRleHRdKCkgeworICAgIEdTb3VyY2VX
cmFwOjpPbmVTaG90Ojpjb25zdHJ1Y3QoIltXZWJLaXRdIGhhbmRsZURyYWdMZWF2ZUxhdGVyIiwg
W3RoaXMsIGRyb3BwaW5nQ29udGV4dF0oKSB7CiAgICAgICAgIGF1dG8gaXQgPSBtX2Ryb3BwaW5n
Q29udGV4dHMuZmluZChkcm9wcGluZ0NvbnRleHQtPmdka0NvbnRleHQpOwogICAgICAgICBpZiAo
aXQgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApp
bmRleCA5ODdmYjE0MzIxNWRiZTQ5YWE3OWQ0MDFjN2Q0MDMzMjYwMGM2YWMyLi5lZTk1NDQyZjE4
ZmI3YzJiNjNkMDQ3YzE5YWU4Mjg1YjVhMDRmYjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMTI3LDkgKzEyNyw3IEBA
IHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtfZXZl
bnRfY29udHJvbGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsK
ICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9nZXRfc2V0
dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxwdHIpOwot
ICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc2NoZWR1bGVBZnRlckRlbGF5KCJb
V2ViS2l0XSBEcmFnR2VzdHVyZSBsb25nIHByZXNzIHRpbWVvdXQiLCBbZHJhZ0dlc3R1cmVdKCkg
ewotICAgICAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSB0cnVlOwotICAgIH0sIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMoZGVsYXkpKTsKKyAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NU
aW1lb3V0LnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoZGVsYXkpKTsKIH0KIAog
dm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKQEAg
LTE2MCw2ICsxNTgsNyBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5k
KERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZQogCiBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6
IEdlc3R1cmUoZ3RrX2dlc3R1cmVfZHJhZ19uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQor
ICAgICwgbV9sb25nUHJlc3NUaW1lb3V0KCJbV2ViS2l0XSBEcmFnR2VzdHVyZSBsb25nIHByZXNz
IHRpbWVvdXQiLCBbdGhpc10geyBtX2luRHJhZyA9IHRydWU7IH0pCiAgICAgLCBtX2luRHJhZyhm
YWxzZSkKIHsKICAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RV
UkVfU0lOR0xFKG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOwpAQCAtMjAyLDEzICsyMDEsMTQgQEAg
dm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OnNjYWxlQ2hhbmdlZChab29tR2Vz
dHVyZSogem9vbUdlc3R1cmUsIGRvdWIKICAgICBpZiAoem9vbUdlc3R1cmUtPm1faWRsZS5pc1Nj
aGVkdWxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB6b29tR2VzdHVyZS0+bV9pZGxlLnNj
aGVkdWxlKCJbV2ViS2l0XSBab29tIEdlc3R1cmUgSWRsZSIsIHN0ZDo6YmluZCgmR2VzdHVyZUNv
bnRyb2xsZXI6Olpvb21HZXN0dXJlOjpoYW5kbGVab29tLCB6b29tR2VzdHVyZSkpOworICAgIHpv
b21HZXN0dXJlLT5tX2lkbGUuc2NoZWR1bGUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Olpv
b21HZXN0dXJlOjpab29tR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBHZXN0dXJl
KGd0a19nZXN0dXJlX3pvb21fbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKICAgICAsIG1f
aW5pdGlhbFNjYWxlKDApCiAgICAgLCBtX3NjYWxlKDApCisgICAgLCBtX2lkbGUoIltXZWJLaXRd
IFpvb20gR2VzdHVyZSBJZGxlIiwgc3RkOjpiaW5kKCZHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdl
c3R1cmU6OmhhbmRsZVpvb20sIHRoaXMpKQogewogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2dlc3R1cmUuZ2V0KCksICJiZWdpbiIsIEdfQ0FMTEJBQ0soYmVnaW4pLCB0aGlzKTsKICAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic2NhbGUtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0soc2NhbGVDaGFuZ2VkKSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggNzhmYzJjYjMxY2IwNjg2
MmZmY2MzZjNiODYyMmUxMzYwNjgyOWFhOS4uNjYxYzk0YWY5NWU1MzM2YmMxMDFhZGRjYzA1YTEy
YjBiNTYzZWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0
dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVy
ZUNvbnRyb2xsZXIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL2ds
aWIvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1NvdXJjZVdyYXAuaD4K
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50
IEdka0V2ZW50OwpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgbV9zdGFydDsKICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX29mZnNl
dDsKLSAgICAgICAgR01haW5Mb29wU291cmNlIG1fbG9uZ1ByZXNzVGltZW91dDsKKyAgICAgICAg
R1NvdXJjZVdyYXA6OlN0YXRpYyBtX2xvbmdQcmVzc1RpbWVvdXQ7CiAgICAgICAgIEdSZWZQdHI8
R3RrR2VzdHVyZT4gbV9sb25nUHJlc3M7CiAgICAgICAgIGJvb2wgbV9pbkRyYWc7CiAgICAgfTsK
QEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZ2RvdWJsZSBtX3NjYWxlOwogICAg
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2luaXRpYWxQb2ludDsKICAgICAgICAgV2ViQ29yZTo6
SW50UG9pbnQgbV92aWV3UG9pbnQ7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJjZSBtX2lkbGU7Cisg
ICAgICAgIEdTb3VyY2VXcmFwOjpTdGF0aWMgbV9pZGxlOwogICAgIH07CiAKICAgICBEcmFnR2Vz
dHVyZSBtX2RyYWdHZXN0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggYzEwODFhMTBjYWQz
NDQxMWM1MDY1NTY4ZjUxNTM5ODNiMmJmYTE0Yi4uNTA0MGFkNDg0N2M2ZmFhZjU5YmNlMDBlMDE3
MTE2NjIwOGI3YzAyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCkBAIC02OCwxMiArNjgsMTYgQEAg
UGFzc1JlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGUoV2Vi
UGFnZSogd2ViUGFnZSkKICAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7CiB9CiAKKy8vIFVzZSBh
IGhpZ2hlciBwcmlvcml0eSB0aGFuIFdlYkNvcmUgdGltZXJzLgorc3RhdGljIGNvbnN0IGludCBs
YXllckZsdXNoVGltZXJQcmlvcml0eSA9IEdES19QUklPUklUWV9SRURSQVcgLSAxOworCiBMYXll
clRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBM
YXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9sYXN0SW1tZWRpYXRl
Rmx1c2hUaW1lKDApCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQor
ICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjaygiW1dlYktpdF0gbGF5ZXJGbHVzaFRpbWVy
Iiwgc3RkOjpiaW5kKCZMYXllclRyZWVIb3N0R3RrOjpsYXllckZsdXNoVGltZXJGaXJlZCwgdGhp
cyksIGxheWVyRmx1c2hUaW1lclByaW9yaXR5KQogICAgICwgbV92aWV3T3ZlcmxheVJvb3RMYXll
cihudWxscHRyKQogewogfQpAQCAtMjI4LDkgKzIzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRTa2lwTmV4dEZyYW1lQmVjYXVzZU9mQ29udGlub3VzSW1tZWRpYXRlRmx1c2hlcyhkb3Vi
bGUKICAgICByZXR1cm4gbGFzdEltbWVkaWF0ZUZsdXNoVGltZSArIG1heER1cmF0aW9uT2ZJbW1l
ZGlhdGVGbHVzaGVzIDwgY3VycmVudDsKIH0KIAotLy8gVXNlIGEgaGlnaGVyIHByaW9yaXR5IHRo
YW4gV2ViQ29yZSB0aW1lcnMuCi1zdGF0aWMgY29uc3QgaW50IGxheWVyRmx1c2hUaW1lclByaW9y
aXR5ID0gR0RLX1BSSU9SSVRZX1JFRFJBVyAtIDE7Ci0KIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogewogICAgIGRvdWJsZSBmaXJlVGltZSA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMjU0LDggKzI1NSw3IEBAIHZvaWQgTGF5ZXJUcmVl
SG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogICAgICAgICBtX2xhc3RJbW1lZGlhdGVG
bHVzaFRpbWUgPSAwOwogICAgIH0KIAotICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2suc2No
ZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkxh
eWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkLCB0aGlzKSwKLSAgICAgICAgc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpj
aHJvbm86OmR1cmF0aW9uPGRvdWJsZT4odGltZVRvTmV4dEZsdXNoKSksIGxheWVyRmx1c2hUaW1l
clByaW9yaXR5KTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLnNjaGVkdWxlKHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVUb05leHRGbHVzaCkpKTsKIH0KIAogYm9vbCBMYXll
clRyZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQpAQCAtMzMxLDcgKzMzMSw3
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2NoZWR1bGVMYXllckZsdXNoKCkKIAogICAgIC8v
IFdlIHVzZSBhIEdMaWIgdGltZXIgYmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGlu
ZyBkdXJpbmcgZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJDb3JlIHRpbWVycywgd2hpY2ggaGF2ZSBh
IGxvd2VyIHByaW9yaXR5LgogICAgIGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5pc1Nj
aGVkdWxlZCgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLnNjaGVkdWxlKCJb
V2ViS2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkxheWVyVHJlZUhvc3RHdGs6Omxh
eWVyRmx1c2hUaW1lckZpcmVkLCB0aGlzKSwgbGF5ZXJGbHVzaFRpbWVyUHJpb3JpdHkpOworICAg
ICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCmluZGV4IGQwYWNkODRmZjhkOGMwMzgxYTVj
ZDg2YTc2ZTU4YmU3NDJlNjYwNmUuLmY0MzEzZGJmOGU3YWY1ODAxMThhNzY2NWU3ODU5YjUzNjY5
YmVjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckxheWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9H
TWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HU291cmNlV3JhcC5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKICAgICBkb3VibGUgbV9s
YXN0SW1tZWRpYXRlRmx1c2hUaW1lOwogICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQ7Ci0gICAgR01haW5Mb29wU291cmNlIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2s7Cisg
ICAgR1NvdXJjZVdyYXA6OlN0YXRpYyBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrOwogICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmlu
ZGV4IDA2NmM0YjA0ZGNkOWZiYjAwOGZkMjQ5NDdiMjFmMjAxYWViZTEyMjcuLjA2ZTU4ODRjOWFi
Mjc0Njg4NWU2YWY2NTE1ZTgyY2I0Y2RlNmI5M2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC0zOCw4ICszOCw4IEBACiAj
aW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZSdW5Mb29wLmg+CiB0eXBlZGVmIFJldGFpblB0cjxD
RlJ1bkxvb3BUaW1lclJlZj4gUGxhdGZvcm1UaW1lclJlZjsKICNlbGlmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KLXR5cGVkZWYgR01haW5Mb29w
U291cmNlIFBsYXRmb3JtVGltZXJSZWY7CisjaW5jbHVkZSA8d3RmL2dsaWIvR1NvdXJjZVdyYXAu
aD4KK3R5cGVkZWYgR1NvdXJjZVdyYXA6OlN0YXRpYyBQbGF0Zm9ybVRpbWVyUmVmOwogI2VsaWYg
UExBVEZPUk0oRUZMKQogdHlwZWRlZiBFY29yZV9UaW1lciogUGxhdGZvcm1UaW1lclJlZjsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9n
dGsvVGVzdFJ1bm5lckd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcAppbmRleCA2YTM2ZWU3NTg5MDY4MmFiZDIxODE5MGJi
NjRiMjY0ZmY5NTU4MzdhLi41MzQ1MmQ1NmNhZGZkMzI0NzMzODY1Y2Q1ZTEzOGYwYWY4NzZmNjdj
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9U
ZXN0UnVubmVyR3RrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV1RS
IHsKIAogdm9pZCBUZXN0UnVubmVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogeworICAgIG1fd2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIuaW5pdGlhbGl6ZSgiW1dUUl0gd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJDYWxsYmFjayIsIFt0aGlzXSB7IHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsg
fSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyKCkKQEAgLTQ4LDggKzQ5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRv
RHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIuaXNTY2hlZHVsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lci5zY2hlZHVsZUFmdGVyRGVsYXkoIltXVFJdIHdhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyQ2FsbGJhY2siLCBbdGhpc10geyB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7
IH0sCi0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMobV90aW1lb3V0KSk7CisgICAg
bV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5zY2hlZHVsZShzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKG1fdGltZW91dCkpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5l
cjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1cmwpCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggNTBmYmZhOTBjYmI3
YWMwYzU5OTFlN2QwNWQzNjk1Mjk2MWRjNzYzYS4uNGI1N2UwYmVlMTFiOTVmMTk1MTA4NmExODgw
YmI2ZmI3NzJjNTEyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVz
dENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RD
b250cm9sbGVyR3RrLmNwcApAQCAtMzAsMTMgKzMwLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1X
ZWJWaWV3LmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgotI2luY2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dTb3VyY2VXcmFwLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGlj
IEdNYWluTG9vcFNvdXJjZSB0aW1lb3V0U291cmNlOworc3RhdGljIEdTb3VyY2VXcmFwOjpTdGF0
aWMgdGltZW91dFNvdXJjZSgiW1dUUl0gVGVzdCB0aW1lb3V0IHNvdXJjZSIsIFtdIHsgZ3RrX21h
aW5fcXVpdCgpOyB9KTsKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiB7CkBA
IC01OCwxMiArNTgsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1S
dW5VbnRpbChib29sJiwgZG91YmxlIHRpbWVvdXQpCiB7Ci0gICAgaWYgKHRpbWVvdXQgPiAwKSB7
Ci0gICAgICAgIHRpbWVvdXRTb3VyY2Uuc2NoZWR1bGVBZnRlckRlbGF5KCJbV1RSXSBUZXN0IHRp
bWVvdXQgc291cmNlIiwgW10gewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGQUlMOiBU
ZXN0Q29udHJvbGxlclJ1bkxvb3AgdGltZWQgb3V0LlxuIik7Ci0gICAgICAgICAgICBndGtfbWFp
bl9xdWl0KCk7Ci0gICAgICAgIH0sIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hy
b25vOjptaWNyb3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVvdXQp
KSk7Ci0gICAgfSBlbHNlCisgICAgaWYgKHRpbWVvdXQgPiAwKQorICAgICAgICB0aW1lb3V0U291
cmNlLnNjaGVkdWxlKHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNy
b3NlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KHRpbWVvdXQpKSk7CisgICAg
ZWxzZQogICAgICAgICB0aW1lb3V0U291cmNlLmNhbmNlbCgpOwogICAgIGd0a19tYWluKCk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263833</attachid>
            <date>2015-10-22 10:18:06 -0700</date>
            <delta_ts>2015-10-22 10:30:53 -0700</delta_ts>
            <desc>Different approach</desc>
            <filename>wtf-persistent-sources.diff</filename>
            <type>text/plain</type>
            <size>13065</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNTgyNWZkMy4uNGQ0NDYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxNS0xMC0yMiAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gQWRkIHBlcnNpc3RlbnQgR1NvdXJjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYSBjdXN0b20gcGVyc2lzdGVudCBtYWluIGxv
b3Agc291cmNlIGZvciB0aGUgR0xpYiBSdW5Mb29wCisgICAgICAgIGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6bWFpbkNv
bnRleHQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBHTWFpbkNvbnRleHQuCisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOgorICAgICAgICAqIHd0Zi9nbGliL01haW5UaHJlYWRHTGliLmNw
cDoKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCk6
IFVzZQorICAgICAgICBSdW5Mb29wOjpkaXNwYXRjaCgpIHRvIHNlbmQgdGFza3MgdG8gdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICAqIHd0Zi9nbGliL1J1bkxvb3BHTGliLmNwcDoKKyAgICAgICAg
KFdURjo6UnVuTG9vcDo6UnVuTG9vcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6On5SdW5Mb29w
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6c3RvcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6
Ondha2VVcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKToK
KyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKToKKyAgICAgICAg
KFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjp1cGRhdGVSZWFkeVRpbWUpOgorICAgICAgICAoV1RG
OjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGlt
ZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2
ZSk6CisgICAgICAgICogd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHA6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKTogVXNlIGEgUnVuTG9vcCBpbiB0aGUgd29y
a2VyCisgICAgICAgIHRocmVhZCBhbmQgd2FpdCB1bnRpbCBpdCdzIGNyZWF0ZWQgdG8gY29udGlu
dWUuCisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKTogVGVybWlt
YXRlIHRoZSB3b3JrZXIgdGhyZWFkIFJ1bkxvb3AuCisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOiBHZXQgdGhlIEdNYWluQ29udGV4dAorICAgICAg
ICBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIFJ1bkxvb3AuCisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6ZGlzcGF0Y2gpOiBVc2UgUnVuTG9vcDo6ZGlzcGF0Y2goKSB0byBzZW5kIHRhc2tzCisgICAg
ICAgIHRvIHRoZSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3Bh
dGNoQWZ0ZXIpOiBHZXQgdGhlIEdNYWluQ29udGV4dCBmcm9tIHRoZQorICAgICAgICB3b3JrZXIg
dGhyZWFkIFJ1bkxvb3AuCisKIDIwMTUtMTAtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSBncmFwaCBub2RlIHdvcmtsaXN0cyBmcm9t
IERGRyBpbnRvIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oIGIvU291
cmNlL1dURi93dGYvUnVuTG9vcC5oCmluZGV4IDZmMzAyMzYuLmM0YTFkNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgK
QEAgLTY3LDcgKzY3LDExIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBydW5Gb3JEdXJhdGlvbihkb3VibGUgZHVyYXRpb24pOwogI2Vu
ZGlmCi0gICAgCisKKyNpZiBVU0UoR0xJQikKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgR01haW5D
b250ZXh0KiBtYWluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkNvbnRleHQuZ2V0KCk7
IH0KKyNlbmRpZgorCiAgICAgY2xhc3MgVGltZXJCYXNlIHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IFJ1bkxvb3A7CiAgICAgcHVibGljOgpAQCAtMTAwLDcgKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIEVjb3JlX1RpbWVyKiBtX3RpbWVyOwogICAgICAgICBib29sIG1faXNSZXBlYXRpbmc7CiAj
ZWxpZiBVU0UoR0xJQikKLSAgICAgICAgR01haW5Mb29wU291cmNlIG1fdGltZXJTb3VyY2U7Cisg
ICAgICAgIHZvaWQgdXBkYXRlUmVhZHlUaW1lKCk7CisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV9zb3VyY2U7CisgICAgICAgIGJvb2wgbV9pc1JlcGVhdGluZyB7IGZhbHNlIH07CisgICAgICAg
IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgbV9maXJlSW50ZXJ2YWwgeyAwIH07CiAjZW5kaWYK
ICAgICB9OwogCkBAIC0xNTUsMTEgKzE2Miw5IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9p
ZCB3YWtlVXBFdmVudCh2b2lkKiBkYXRhLCB2b2lkKiwgdW5zaWduZWQpOwogI2VsaWYgVVNFKEdM
SUIpCi1wdWJsaWM6Ci0gICAgc3RhdGljIGdib29sZWFuIHF1ZXVlV29yayhSdW5Mb29wKik7Ci1w
cml2YXRlOgogICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX21haW5Db250ZXh0OwogICAgIFZl
Y3RvcjxHUmVmUHRyPEdNYWluTG9vcD4+IG1fbWFpbkxvb3BzOworICAgIEdSZWZQdHI8R1NvdXJj
ZT4gbV9zb3VyY2U7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggMmI5YmQzZS4uZTBl
M2VmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKKysrIGIvU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTM5LDYgKzM5LDggQEAKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dSZWZQdHIuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkKQEAgLTEwNyw4ICsxMDks
MTEgQEAgcHJpdmF0ZToKICAgICBkaXNwYXRjaF9xdWV1ZV90IG1fZGlzcGF0Y2hRdWV1ZTsKICNl
bGlmIFBMQVRGT1JNKEdUSykKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFk
OwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKLSAgICBHUmVmUHRy
PEdNYWluTG9vcD4gbV9ldmVudExvb3A7CisgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247
CisgICAgUnVuTG9vcCogbV9ydW5Mb29wOworICAgIExvY2sgbV90ZXJtaW5hdGVSdW5Mb29wQ29u
ZGl0aW9uTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbjsK
ICAgICBHTWFpbkxvb3BTb3VyY2UgbV9zb2NrZXRFdmVudFNvdXJjZTsKICNlbGlmIFBMQVRGT1JN
KEVGTCkKICAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gbV9kaXNwYXRjaFF1ZXVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAppbmRleCA2NDlhOWE1Li5kMmUxMjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKIAotI2luY2x1ZGUgPHd0
Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJl
YWRQbGF0Zm9ybSgpCiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVh
ZCgpCiB7Ci0gICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgi
W1dlYktpdF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPihkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKSk7CisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihkaXNwYXRjaEZ1bmN0aW9uc0Zy
b21NYWluVGhyZWFkKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1
bkxvb3BHTGliLmNwcAppbmRleCA3ZGM0MDc1Li4yNDg2NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1
bkxvb3BHTGliLmNwcApAQCAtMzIsNiArMzIsMjIgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0
YXRpYyBHU291cmNlRnVuY3MgcnVuTG9vcFNvdXJjZUZ1bmN0aW9ucyA9IHsKKyAgICBudWxscHRy
LCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hlY2sKKyAgICAvLyBkaXNwYXRjaAorICAg
IFtdKEdTb3VyY2UqIHNvdXJjZSwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJE
YXRhKSAtPiBnYm9vbGVhbgorICAgIHsKKyAgICAgICAgaWYgKGdfc291cmNlX2dldF9yZWFkeV90
aW1lKHNvdXJjZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7
CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHNvdXJjZSwgLTEpOworICAgICAgICBy
ZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxp
emUKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xv
c3VyZV9tYXJzaGFsbAorfTsKKwogUnVuTG9vcDo6UnVuTG9vcCgpCiB7CiAgICAgbV9tYWluQ29u
dGV4dCA9IGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpOwpAQCAtNDIsMTAgKzU4
LDIxIEBAIFJ1bkxvb3A6OlJ1bkxvb3AoKQogICAgIEdSZWZQdHI8R01haW5Mb29wPiBpbm5lcm1v
c3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX21haW5Db250ZXh0LmdldCgpLCBG
QUxTRSkpOwogICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKICAgICBtX21haW5Mb29wcy5hcHBl
bmQoaW5uZXJtb3N0TG9vcCk7CisKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvdXJjZV9u
ZXcoJnJ1bkxvb3BTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpOworICAgIGdfc291
cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCAiW1dlYktpdF0gUnVuTG9vcCB3b3JrIik7Cisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIC0xKTsKKyAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAt
PiBnYm9vbGVhbiB7CisgICAgICAgIHN0YXRpY19jYXN0PFJ1bkxvb3AqPih1c2VyRGF0YSktPnBl
cmZvcm1Xb3JrKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9LCB0
aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIG1fbWFp
bkNvbnRleHQuZ2V0KCkpOwogfQogCiBSdW5Mb29wOjp+UnVuTG9vcCgpCiB7CisgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CisKICAgICBmb3IgKGludCBpID0gbV9tYWluTG9v
cHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKCFnX21haW5fbG9vcF9p
c19ydW5uaW5nKG1fbWFpbkxvb3BzW2ldLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtODIsNiArMTA5LDggQEAgdm9pZCBSdW5Mb29wOjpydW4oKQogCiB2b2lkIFJ1bkxvb3A6OnN0
b3AoKQogeworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgpLCAtMSk7
CisKICAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJl
LgogICAgIEFTU0VSVCghbV9tYWluTG9vcHMuaXNFbXB0eSgpKTsKICAgICBHUmVmUHRyPEdNYWlu
TG9vcD4gbGFzdE1haW5Mb29wID0gbV9tYWluTG9vcHMubGFzdCgpOwpAQCAtOTEsMzcgKzEyMCw1
NCBAQCB2b2lkIFJ1bkxvb3A6OnN0b3AoKQogCiB2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCiB7Ci0g
ICAgUmVmUHRyPFJ1bkxvb3A+IHJ1bkxvb3AodGhpcyk7Ci0gICAgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KFtydW5Mb29wXSB7Ci0gICAgICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3Jr
KCk7Ci0gICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWluQ29udGV4dC5n
ZXQoKSk7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIGdfZ2V0
X21vbm90b25pY190aW1lKCkpOwogICAgIGdfbWFpbl9jb250ZXh0X3dha2V1cChtX21haW5Db250
ZXh0LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCYg
cnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV9zb3VyY2UoYWRvcHRH
UmVmKGdfc291cmNlX25ldygmcnVuTG9vcFNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2Up
KSkpCiB7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksICJbV2ViS2l0XSBS
dW5Mb29wOjpUaW1lciB3b3JrIik7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3Vy
Y2UuZ2V0KCksIC0xKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCks
IFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIFJ1bkxvb3A6OlRp
bWVyQmFzZSogdGltZXIgPSBzdGF0aWNfY2FzdDxSdW5Mb29wOjpUaW1lckJhc2UqPih1c2VyRGF0
YSk7CisgICAgICAgIHRpbWVyLT5maXJlZCgpOworICAgICAgICBpZiAodGltZXItPm1faXNSZXBl
YXRpbmcpCisgICAgICAgICAgICB0aW1lci0+dXBkYXRlUmVhZHlUaW1lKCk7CisgICAgICAgIHJl
dHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIG1fcnVuTG9vcC5tYWluQ29udGV4dCgpKTsKIH0K
IAogUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIHsKICAgICBzdG9wKCk7CisgICAg
Z19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGlt
ZXJCYXNlOjp1cGRhdGVSZWFkeVRpbWUoKQoreworICAgIGdpbnQ2NCBjdXJyZW50ID0gZ19nZXRf
bW9ub3RvbmljX3RpbWUoKTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3NvdXJjZS5n
ZXQoKSwgbV9maXJlSW50ZXJ2YWwuY291bnQoKSA/IGN1cnJlbnQgKyBtX2ZpcmVJbnRlcnZhbC5j
b3VudCgpIDogY3VycmVudCk7CiB9CiAKIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChk
b3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsKLSAgICBtX3RpbWVyU291cmNlLnNj
aGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKCk+KFt0aGlzLCByZXBlYXRdIHsgZmlyZWQoKTsgcmV0dXJuIHJlcGVhdDsgfSksCi0g
ICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGZpcmVJbnRlcnZhbCkpLCBHX1BSSU9S
SVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fcnVuTG9vcC5tX21haW5Db250ZXh0LmdldCgpKTsKKyAg
ICBzdG9wKCk7CisgICAgbV9maXJlSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91Ymxl
PihmaXJlSW50ZXJ2YWwpKTsKKyAgICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0OworICAgIHVwZGF0
ZVJlYWR5VGltZSgpOwogfQogCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCiB7Ci0g
ICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZSht
X3NvdXJjZS5nZXQoKSwgLTEpOwogfQogCiBib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3Rp
dmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7Cisg
ICAgcmV0dXJuIGdfc291cmNlX2dldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgpKSAhPSAtMTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L1dvcmtRdWV1ZUdMaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVldWVHTGliLmNw
cAppbmRleCBlZTFiNjBiLi4xYjY2NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L1dvcmtRdWV1ZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xp
Yi5jcHAKQEAgLTM3LDExICszNyw2IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRp
b1RocmVhZE5hbWVMaW1pdCA9IDMxOwogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFs
aXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKLSAgICBtX2V2ZW50Q29udGV4dCA9
IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRDb250
ZXh0KTsKLSAgICBtX2V2ZW50TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVu
dENvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKLQogICAg
IC8vIFRoaXMgbmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3Ig
Y29tLmFwcGxlLkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgogICAgIC8vIFdlIGFyZSB1c2luZyB0aG9z
ZSBuYW1lcyBmb3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEg
Y2hhcmFjdGVycywKICAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBm
b3IgdGhyZWFkIG5hbWVzLgpAQCAtNTUsMzMgKzUwLDM3IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TKQogICAgIGlmIChzdHJs
ZW4odGhyZWFkTmFtZSkgPiBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0KQogICAgICAgICB0
aHJlYWROYW1lICs9IHN0cmxlbih0aHJlYWROYW1lKSAtIGtWaXN1YWxTdHVkaW9UaHJlYWROYW1l
TGltaXQ7CiAKLSAgICBHUmVmUHRyPEdNYWluTG9vcD4gZXZlbnRMb29wKG1fZXZlbnRMb29wLmdl
dCgpKTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWROYW1lLCBb
ZXZlbnRMb29wXSB7Ci0gICAgICAgIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQo
Z19tYWluX2xvb3BfZ2V0X2NvbnRleHQoZXZlbnRMb29wLmdldCgpKSk7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3J1bihldmVudExvb3AuZ2V0KCkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5p
dGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBj
cmVhdGVUaHJlYWQodGhyZWFkTmFtZSwgW3RoaXNdIHsKKyAgICAgICAgeworICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKKyAg
ICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CisgICAgICAgICAgICBt
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICB9CisgICAg
ICAgIG1fcnVuTG9vcC0+cnVuKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKKyAgICAgICAgICAgIG1f
cnVuTG9vcCA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Rlcm1pbmF0ZVJ1bkxvb3BDb25kaXRp
b24ubm90aWZ5T25lKCk7CisgICAgICAgIH0KICAgICB9KTsKKyAgICBtX2luaXRpYWxpemVSdW5M
b29wQ29uZGl0aW9uLndhaXQobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKIH0K
IAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiB7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rlcm1pbmF0ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7Cisg
ICAgICAgIGlmIChtX3J1bkxvb3ApIHsKKyAgICAgICAgICAgIG1fcnVuTG9vcC0+c3RvcCgpOwor
ICAgICAgICAgICAgbV90ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uLndhaXQobV90ZXJtaW5hdGVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXgpOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKG1fd29y
a1F1ZXVlVGhyZWFkKSB7CiAgICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7
CiAgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKICAgICB9Ci0KLSAgICBpZiAobV9ldmVu
dExvb3ApIHsKLSAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3Au
Z2V0KCkpKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3Qgc3RhcnRl
ZCB5ZXQsIHNvIHNjaGVkdWxlIGEgbWFpbiBsb29wIHF1aXQgdG8gZW5zdXJlIHRoZSB0aHJlYWQg
ZmluaXNoZXMuCi0gICAgICAgICAgICBHTWFpbkxvb3AqIGV2ZW50TG9vcCA9IG1fZXZlbnRMb29w
LmdldCgpOwotICAgICAgICAgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlIHF1aXQgbWFpbiBsb29wIiwgW2V2ZW50TG9vcF0g
eyBnX21haW5fbG9vcF9xdWl0KGV2ZW50TG9vcCk7IH0sCi0gICAgICAgICAgICAgICAgR19QUklP
UklUWV9ISUdILCBudWxscHRyLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9ldmVudExvb3AgPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fZXZlbnRDb250ZXh0
ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5k
bGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9zZUZ1bmN0aW9uKQpAQCAtMTAzLDcgKzEwMiw3IEBA
IHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2Ny
aXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9pCiAgICAgICAgICAgICByZXR1cm4gR01haW5Mb29wU291
cmNlOjpTdG9wOwogICAgICAgICB9LCBzb2NrZXQuZ2V0KCksIEdfSU9fSU4sCiAgICAgICAgIFt0
aGlzXSB7IGRlcmVmKCk7IH0sCi0gICAgICAgIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgbV9ydW5Mb29wLT5tYWluQ29udGV4dCgpKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnVucmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQpAQCAtMTEzLDE2ICsxMTIsMTUgQEAgdm9pZCBX
b3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQogCiB2b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKLSAgICBy
ZWYoKTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25EZXN0cm95KCJb
V2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNoIiwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwgR19QUklP
UklUWV9ERUZBVUxULAotICAgICAgICBbdGhpc10geyBkZXJlZigpOyB9LCBtX2V2ZW50Q29udGV4
dC5nZXQoKSk7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIG1f
cnVuTG9vcC0+ZGlzcGF0Y2goW3Byb3RlY3RvciwgZnVuY3Rpb25dIHsgZnVuY3Rpb24oKTsgfSk7
CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vj
b25kcyBkdXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKICAgICBy
ZWYoKTsKICAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyIiwgV1RGOjptb3ZlKGZ1
bmN0aW9uKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIFt0aGlzXSB7IGRl
cmVmKCk7IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICAgICAgc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24pLCBHX1BSSU9S
SVRZX0RFRkFVTFQsIFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fcnVuTG9vcC0+bWFpbkNvbnRleHQo
KSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263834</attachid>
            <date>2015-10-22 10:30:53 -0700</date>
            <delta_ts>2015-10-27 07:45:45 -0700</delta_ts>
            <desc>Try to fix EFL build</desc>
            <filename>wtf-persistent-sources.diff</filename>
            <type>text/plain</type>
            <size>13245</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNTgyNWZkMy4uNGQ0NDYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxNS0xMC0yMiAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gQWRkIHBlcnNpc3RlbnQgR1NvdXJjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYSBjdXN0b20gcGVyc2lzdGVudCBtYWluIGxv
b3Agc291cmNlIGZvciB0aGUgR0xpYiBSdW5Mb29wCisgICAgICAgIGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6bWFpbkNv
bnRleHQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBHTWFpbkNvbnRleHQuCisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOgorICAgICAgICAqIHd0Zi9nbGliL01haW5UaHJlYWRHTGliLmNw
cDoKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCk6
IFVzZQorICAgICAgICBSdW5Mb29wOjpkaXNwYXRjaCgpIHRvIHNlbmQgdGFza3MgdG8gdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICAqIHd0Zi9nbGliL1J1bkxvb3BHTGliLmNwcDoKKyAgICAgICAg
KFdURjo6UnVuTG9vcDo6UnVuTG9vcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6On5SdW5Mb29w
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6c3RvcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6
Ondha2VVcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKToK
KyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKToKKyAgICAgICAg
KFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjp1cGRhdGVSZWFkeVRpbWUpOgorICAgICAgICAoV1RG
OjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGlt
ZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2
ZSk6CisgICAgICAgICogd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHA6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKTogVXNlIGEgUnVuTG9vcCBpbiB0aGUgd29y
a2VyCisgICAgICAgIHRocmVhZCBhbmQgd2FpdCB1bnRpbCBpdCdzIGNyZWF0ZWQgdG8gY29udGlu
dWUuCisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKTogVGVybWlt
YXRlIHRoZSB3b3JrZXIgdGhyZWFkIFJ1bkxvb3AuCisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOiBHZXQgdGhlIEdNYWluQ29udGV4dAorICAgICAg
ICBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIFJ1bkxvb3AuCisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6ZGlzcGF0Y2gpOiBVc2UgUnVuTG9vcDo6ZGlzcGF0Y2goKSB0byBzZW5kIHRhc2tzCisgICAg
ICAgIHRvIHRoZSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3Bh
dGNoQWZ0ZXIpOiBHZXQgdGhlIEdNYWluQ29udGV4dCBmcm9tIHRoZQorICAgICAgICB3b3JrZXIg
dGhyZWFkIFJ1bkxvb3AuCisKIDIwMTUtMTAtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSBncmFwaCBub2RlIHdvcmtsaXN0cyBmcm9t
IERGRyBpbnRvIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oIGIvU291
cmNlL1dURi93dGYvUnVuTG9vcC5oCmluZGV4IDZmMzAyMzYuLmU1OTVjNTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgK
QEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBVU0Uo
R0xJQikKLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEVGTCkKQEAgLTY3LDcg
KzY3LDExIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBydW5Gb3JEdXJhdGlvbihkb3VibGUgZHVyYXRpb24pOwogI2VuZGlmCi0gICAg
CisKKyNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKEVGTCkKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgR01haW5Db250ZXh0KiBtYWluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkNvbnRl
eHQuZ2V0KCk7IH0KKyNlbmRpZgorCiAgICAgY2xhc3MgVGltZXJCYXNlIHsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIFJ1bkxvb3A7CiAgICAgcHVibGljOgpAQCAtMTAwLDcgKzEwNCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIEVjb3JlX1RpbWVyKiBtX3RpbWVyOwogICAgICAgICBib29sIG1faXNSZXBl
YXRpbmc7CiAjZWxpZiBVU0UoR0xJQikKLSAgICAgICAgR01haW5Mb29wU291cmNlIG1fdGltZXJT
b3VyY2U7CisgICAgICAgIHZvaWQgdXBkYXRlUmVhZHlUaW1lKCk7CisgICAgICAgIEdSZWZQdHI8
R1NvdXJjZT4gbV9zb3VyY2U7CisgICAgICAgIGJvb2wgbV9pc1JlcGVhdGluZyB7IGZhbHNlIH07
CisgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgbV9maXJlSW50ZXJ2YWwgeyAwIH07
CiAjZW5kaWYKICAgICB9OwogCkBAIC0xNTUsMTEgKzE2Miw5IEBAIHByaXZhdGU6CiAKICAgICBz
dGF0aWMgdm9pZCB3YWtlVXBFdmVudCh2b2lkKiBkYXRhLCB2b2lkKiwgdW5zaWduZWQpOwogI2Vs
aWYgVVNFKEdMSUIpCi1wdWJsaWM6Ci0gICAgc3RhdGljIGdib29sZWFuIHF1ZXVlV29yayhSdW5M
b29wKik7Ci1wcml2YXRlOgogICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX21haW5Db250ZXh0
OwogICAgIFZlY3RvcjxHUmVmUHRyPEdNYWluTG9vcD4+IG1fbWFpbkxvb3BzOworICAgIEdSZWZQ
dHI8R1NvdXJjZT4gbV9zb3VyY2U7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggMmI5
YmQzZS4uZTBlM2VmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKKysr
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTM5LDYgKzM5LDggQEAKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgog
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkKQEAgLTEw
Nyw4ICsxMDksMTEgQEAgcHJpdmF0ZToKICAgICBkaXNwYXRjaF9xdWV1ZV90IG1fZGlzcGF0Y2hR
dWV1ZTsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1
ZXVlVGhyZWFkOwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKLSAg
ICBHUmVmUHRyPEdNYWluTG9vcD4gbV9ldmVudExvb3A7CisgICAgTG9jayBtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BD
b25kaXRpb247CisgICAgUnVuTG9vcCogbV9ydW5Mb29wOworICAgIExvY2sgbV90ZXJtaW5hdGVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fdGVybWluYXRlUnVuTG9vcENv
bmRpdGlvbjsKICAgICBHTWFpbkxvb3BTb3VyY2UgbV9zb2NrZXRFdmVudFNvdXJjZTsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKICAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gbV9kaXNwYXRjaFF1ZXVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAppbmRleCA2NDlhOWE1Li5kMmUx
MjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgaW5pdGlhbGl6
ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09u
TWFpblRocmVhZCgpCiB7Ci0gICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKSk7CisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihkaXNwYXRjaEZ1
bmN0aW9uc0Zyb21NYWluVGhyZWFkKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL1J1bkxvb3BHTGliLmNwcAppbmRleCA3ZGM0MDc1Li5mN2FhYmYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMzIsNiArMzIsMjIgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKK3N0YXRpYyBHU291cmNlRnVuY3MgcnVuTG9vcFNvdXJjZUZ1bmN0aW9ucyA9IHsKKyAg
ICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hlY2sKKyAgICAvLyBkaXNw
YXRjaAorICAgIFtdKEdTb3VyY2UqIHNvdXJjZSwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2lu
dGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbgorICAgIHsKKyAgICAgICAgaWYgKGdfc291cmNlX2dl
dF9yZWFkeV90aW1lKHNvdXJjZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gR19TT1VSQ0Vf
Q09OVElOVUU7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHNvdXJjZSwgLTEpOwor
ICAgICAgICByZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwg
Ly8gZmluYWxpemUKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0
ciwgLy8gY2xvc3VyZV9tYXJzaGFsbAorfTsKKwogUnVuTG9vcDo6UnVuTG9vcCgpCiB7CiAgICAg
bV9tYWluQ29udGV4dCA9IGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpOwpAQCAt
NDIsMTAgKzU4LDIxIEBAIFJ1bkxvb3A6OlJ1bkxvb3AoKQogICAgIEdSZWZQdHI8R01haW5Mb29w
PiBpbm5lcm1vc3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX21haW5Db250ZXh0
LmdldCgpLCBGQUxTRSkpOwogICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKICAgICBtX21haW5M
b29wcy5hcHBlbmQoaW5uZXJtb3N0TG9vcCk7CisKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihn
X3NvdXJjZV9uZXcoJnJ1bkxvb3BTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpOwor
ICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCAiW1dlYktpdF0gUnVuTG9vcCB3
b3JrIik7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIC0xKTsK
KyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIFtdKGdwb2ludGVyIHVz
ZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIHN0YXRpY19jYXN0PFJ1bkxvb3AqPih1c2Vy
RGF0YSktPnBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsK
KyAgICB9LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0
KCksIG1fbWFpbkNvbnRleHQuZ2V0KCkpOwogfQogCiBSdW5Mb29wOjp+UnVuTG9vcCgpCiB7Cisg
ICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CisKICAgICBmb3IgKGludCBpID0g
bV9tYWluTG9vcHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKCFnX21h
aW5fbG9vcF9pc19ydW5uaW5nKG1fbWFpbkxvb3BzW2ldLmdldCgpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtODIsNiArMTA5LDggQEAgdm9pZCBSdW5Mb29wOjpydW4oKQogCiB2b2lkIFJ1
bkxvb3A6OnN0b3AoKQogeworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fc291cmNlLmdl
dCgpLCAtMSk7CisKICAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlz
IGJlIHRoZXJlLgogICAgIEFTU0VSVCghbV9tYWluTG9vcHMuaXNFbXB0eSgpKTsKICAgICBHUmVm
UHRyPEdNYWluTG9vcD4gbGFzdE1haW5Mb29wID0gbV9tYWluTG9vcHMubGFzdCgpOwpAQCAtOTEs
MzcgKzEyMCw1MyBAQCB2b2lkIFJ1bkxvb3A6OnN0b3AoKQogCiB2b2lkIFJ1bkxvb3A6Ondha2VV
cCgpCiB7Ci0gICAgUmVmUHRyPFJ1bkxvb3A+IHJ1bkxvb3AodGhpcyk7Ci0gICAgR01haW5Mb29w
U291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3Jr
Iiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFtydW5Mb29wXSB7Ci0gICAgICAgIHJ1bkxvb3AtPnBl
cmZvcm1Xb3JrKCk7Ci0gICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWlu
Q29udGV4dC5nZXQoKSk7Ci0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fbWFpbkNvbnRleHQu
Z2V0KCkpOworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgpLCBnX2dl
dF9tb25vdG9uaWNfdGltZSgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2Uo
UnVuTG9vcCYgcnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV9zb3Vy
Y2UoYWRvcHRHUmVmKGdfc291cmNlX25ldygmcnVuTG9vcFNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9m
KEdTb3VyY2UpKSkpCiB7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksICJb
V2ViS2l0XSBSdW5Mb29wOjpUaW1lciB3b3JrIik7CisgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3Rp
bWUobV9zb3VyY2UuZ2V0KCksIC0xKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3Vy
Y2UuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIFJ1
bkxvb3A6OlRpbWVyQmFzZSogdGltZXIgPSBzdGF0aWNfY2FzdDxSdW5Mb29wOjpUaW1lckJhc2Uq
Pih1c2VyRGF0YSk7CisgICAgICAgIHRpbWVyLT5maXJlZCgpOworICAgICAgICBpZiAodGltZXIt
Pm1faXNSZXBlYXRpbmcpCisgICAgICAgICAgICB0aW1lci0+dXBkYXRlUmVhZHlUaW1lKCk7Cisg
ICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9LCB0aGlzLCBudWxscHRyKTsK
KyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIG1fcnVuTG9vcC5tYWluQ29udGV4
dCgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIHsKICAgICBzdG9w
KCk7CisgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Cit9CisKK3ZvaWQgUnVu
TG9vcDo6VGltZXJCYXNlOjp1cGRhdGVSZWFkeVRpbWUoKQoreworICAgIGdpbnQ2NCBjdXJyZW50
ID0gZ19nZXRfbW9ub3RvbmljX3RpbWUoKTsKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZSht
X3NvdXJjZS5nZXQoKSwgbV9maXJlSW50ZXJ2YWwuY291bnQoKSA/IGN1cnJlbnQgKyBtX2ZpcmVJ
bnRlcnZhbC5jb3VudCgpIDogY3VycmVudCk7CiB9CiAKIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNl
OjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsKLSAgICBtX3RpbWVy
U291cmNlLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIiLCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+KFt0aGlzLCByZXBlYXRdIHsgZmlyZWQoKTsgcmV0dXJuIHJlcGVh
dDsgfSksCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGZpcmVJbnRlcnZhbCkp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG1fcnVuTG9vcC5tX21haW5Db250ZXh0Lmdl
dCgpKTsKKyAgICBzdG9wKCk7CisgICAgbV9maXJlSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRp
b248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKTsKKyAgICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0Owor
ICAgIHVwZGF0ZVJlYWR5VGltZSgpOwogfQogCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3Rv
cCgpCiB7Ci0gICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKKyAgICBnX3NvdXJjZV9zZXRfcmVh
ZHlfdGltZShtX3NvdXJjZS5nZXQoKSwgLTEpOwogfQogCiBib29sIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6aXNBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1
bGVkKCk7CisgICAgcmV0dXJuIGdfc291cmNlX2dldF9yZWFkeV90aW1lKG1fc291cmNlLmdldCgp
KSAhPSAtMTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVl
dWVHTGliLmNwcAppbmRleCBlZTFiNjBiLi4xYjY2NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvV29y
a1F1ZXVlR0xpYi5jcHAKQEAgLTM3LDExICszNyw2IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qga1Zp
c3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOwogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZv
cm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKLSAgICBtX2V2ZW50
Q29udGV4dCA9IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1f
ZXZlbnRDb250ZXh0KTsKLSAgICBtX2V2ZW50TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9u
ZXcobV9ldmVudENvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRMb29w
KTsKLQogICAgIC8vIFRoaXMgbmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1
bmNoZXIgb3IgY29tLmFwcGxlLkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgogICAgIC8vIFdlIGFyZSB1
c2luZyB0aG9zZSBuYW1lcyBmb3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2Vy
IHRoYW4gMzEgY2hhcmFjdGVycywKICAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFs
IFN0dWRpbyBmb3IgdGhyZWFkIG5hbWVzLgpAQCAtNTUsMzMgKzUwLDM3IEBAIHZvaWQgV29ya1F1
ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TKQogICAg
IGlmIChzdHJsZW4odGhyZWFkTmFtZSkgPiBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0KQog
ICAgICAgICB0aHJlYWROYW1lICs9IHN0cmxlbih0aHJlYWROYW1lKSAtIGtWaXN1YWxTdHVkaW9U
aHJlYWROYW1lTGltaXQ7CiAKLSAgICBHUmVmUHRyPEdNYWluTG9vcD4gZXZlbnRMb29wKG1fZXZl
bnRMb29wLmdldCgpKTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZCh0aHJl
YWROYW1lLCBbZXZlbnRMb29wXSB7Ci0gICAgICAgIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFk
X2RlZmF1bHQoZ19tYWluX2xvb3BfZ2V0X2NvbnRleHQoZXZlbnRMb29wLmdldCgpKSk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihldmVudExvb3AuZ2V0KCkpOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CisgICAgbV93b3JrUXVldWVU
aHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkTmFtZSwgW3RoaXNdIHsKKyAgICAgICAgeworICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11
dGV4KTsKKyAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CisgICAg
ICAgICAgICBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAg
ICB9CisgICAgICAgIG1fcnVuTG9vcC0+cnVuKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKKyAgICAg
ICAgICAgIG1fcnVuTG9vcCA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Rlcm1pbmF0ZVJ1bkxv
b3BDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIH0KICAgICB9KTsKKyAgICBtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uLndhaXQobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11
dGV4KTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiB7CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rlcm1pbmF0ZVJ1bkxvb3BDb25kaXRpb25N
dXRleCk7CisgICAgICAgIGlmIChtX3J1bkxvb3ApIHsKKyAgICAgICAgICAgIG1fcnVuTG9vcC0+
c3RvcCgpOworICAgICAgICAgICAgbV90ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uLndhaXQobV90
ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOworICAgICAgICB9CisgICAgfQorCiAgICAg
aWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7CiAgICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1
ZVRocmVhZCk7CiAgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKICAgICB9Ci0KLSAgICBp
ZiAobV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9l
dmVudExvb3AuZ2V0KCkpKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9v
cC5nZXQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIHRocmVhZCBoYXNu
J3Qgc3RhcnRlZCB5ZXQsIHNvIHNjaGVkdWxlIGEgbWFpbiBsb29wIHF1aXQgdG8gZW5zdXJlIHRo
ZSB0aHJlYWQgZmluaXNoZXMuCi0gICAgICAgICAgICBHTWFpbkxvb3AqIGV2ZW50TG9vcCA9IG1f
ZXZlbnRMb29wLmdldCgpOwotICAgICAgICAgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFu
ZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlIHF1aXQgbWFpbiBsb29wIiwgW2V2
ZW50TG9vcF0geyBnX21haW5fbG9vcF9xdWl0KGV2ZW50TG9vcCk7IH0sCi0gICAgICAgICAgICAg
ICAgR19QUklPUklUWV9ISUdILCBudWxscHRyLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9ldmVudExvb3AgPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fZXZl
bnRDb250ZXh0ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0
RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBm
dW5jdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9zZUZ1bmN0aW9uKQpAQCAtMTAzLDcg
KzEwMiw3IEBAIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQg
ZmlsZURlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9pCiAgICAgICAgICAgICByZXR1cm4gR01h
aW5Mb29wU291cmNlOjpTdG9wOwogICAgICAgICB9LCBzb2NrZXQuZ2V0KCksIEdfSU9fSU4sCiAg
ICAgICAgIFt0aGlzXSB7IGRlcmVmKCk7IH0sCi0gICAgICAgIG1fZXZlbnRDb250ZXh0LmdldCgp
KTsKKyAgICAgICAgbV9ydW5Mb29wLT5tYWluQ29udGV4dCgpKTsKIH0KIAogdm9pZCBXb3JrUXVl
dWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQpAQCAtMTEzLDE2ICsxMTIsMTUg
QEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQogCiB2
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikK
IHsKLSAgICByZWYoKTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25E
ZXN0cm95KCJbV2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNoIiwgV1RGOjptb3ZlKGZ1bmN0aW9u
KSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbdGhpc10geyBkZXJlZigpOyB9LCBtX2V2
ZW50Q29udGV4dC5nZXQoKSk7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gcHJvdGVjdG9yKHRoaXMp
OworICAgIG1fcnVuTG9vcC0+ZGlzcGF0Y2goW3Byb3RlY3RvciwgZnVuY3Rpb25dIHsgZnVuY3Rp
b24oKTsgfSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25v
OjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikK
IHsKICAgICByZWYoKTsKICAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheUFu
ZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyIiwgV1RG
Ojptb3ZlKGZ1bmN0aW9uKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsIFt0
aGlzXSB7IGRlcmVmKCk7IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKKyAgICAgICAgc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24p
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fcnVuTG9vcC0+bWFp
bkNvbnRleHQoKSk7CiB9CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>