<?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>64970</bug_id>
          
          <creation_ts>2011-07-21 12:12:15 -0700</creation_ts>
          <short_desc>[Gtk] Support for client-based geolocation</short_desc>
          <delta_ts>2011-10-19 08:47:59 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>40373</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dbates</cc>
    
    <cc>gustavo</cc>
    
    <cc>jknotten</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>440564</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-07-21 12:12:15 -0700</bug_when>
    <thetext>Currently geolocation support is available through GeolocationService object in WebCore but GeolocationClient should be implemented in WebKit in order to make the use of GeolocationClientMock possible for testing purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440579</commentid>
    <comment_count>1</comment_count>
      <attachid>101628</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-07-21 12:38:22 -0700</bug_when>
    <thetext>Created attachment 101628
Client-based geolocation - the whole package</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440589</commentid>
    <comment_count>2</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-07-21 12:47:34 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=101628) [details]
&gt; Client-based geolocation - the whole package

A bit more description: GeolocationClientGtk utilizes GeoClue in pretty much the same way as GeolocationServiceGtk does. The only significant difference is how position updates and errors are handled and the setting of new requirements when high curracy is requested and client is already updating.

The whole feature is already enabled by default in both build-webkit and configure.ac.

Also included is complete support for testing. Out of 37 tests in fast/dom/Geolocation 36 now pass with one single test remaining skipped because of reported crashing.

Just noted that new files are missing licence headers, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440596</commentid>
    <comment_count>3</comment_count>
      <attachid>101634</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-07-21 12:56:08 -0700</bug_when>
    <thetext>Created attachment 101634
Same patch but now with license headers in new files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440604</commentid>
    <comment_count>4</comment_count>
      <attachid>101634</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-21 13:05:50 -0700</bug_when>
    <thetext>Comment on attachment 101634
Same patch but now with license headers in new files

Attachment 101634 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9192803</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440640</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-21 14:34:06 -0700</bug_when>
    <thetext>If the feature is enabled in configure and build-webkit why is EWS failing to build the patch? Is a clean build required?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440646</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-07-21 14:45:56 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; If the feature is enabled in configure and build-webkit why is EWS failing to build the patch? Is a clean build required?

Yes, I believe a clean build is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447243</commentid>
    <comment_count>7</comment_count>
      <attachid>101634</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-05 09:43:14 -0700</bug_when>
    <thetext>Comment on attachment 101634
Same patch but now with license headers in new files

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

This patch looks pretty good in general, and unskips a ton of tests!  I don&apos;t quite understand why we want to implement client-based geolocation without exposing an API. Is  it necessary just to unskip the tests? Could we somehow create mock locations by interfacing directly with geoclue? If so that would be great, because we could test the geoclue stuff with layout tests.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:56
&gt; +    if (m_geoclueClient)
&gt; +        g_object_unref(m_geoclueClient);
&gt; +
&gt; +    if (m_geocluePosition)
&gt; +        g_object_unref(m_geocluePosition);

It would be better to use GRefPtr instead of handing reference counts manually.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:69
&gt; +    GeoclueMaster* master = geoclue_master_get_default();

Please use GRefPtr here with adoptGref.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:70
&gt; +    GeoclueMasterClient* client = geoclue_master_create_client(master, 0, 0);

Ditto.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:162
&gt; +                                                GeocluePositionFields fields,
&gt; +                                                int timestamp,
&gt; +                                                double latitude,
&gt; +                                                double longitude,
&gt; +                                                double altitude,
&gt; +                                                GeoclueAccuracy* accuracy,
&gt; +                                                GError* error,
&gt; +                                                GeolocationClient* that)
&gt; +{

We don&apos;t typically add newlines to argument lists in function definitions. This function can be static to the file.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:165
&gt; +        g_error_free(error);

Does the callback really need to free the GError?

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:186
&gt; +void GeolocationClient::positionChanged(GeocluePosition*, GeocluePositionFields fields, int timestamp, double latitude, double longitude, double altitude, GeoclueAccuracy* accuracy, GeolocationClient* that)
&gt; +{
&gt; +    if (!(fields &amp; GEOCLUE_POSITION_FIELDS_LATITUDE &amp;&amp; fields &amp; GEOCLUE_POSITION_FIELDS_LONGITUDE)) {
&gt; +        that-&gt;errorOccured(&quot;Position could not be determined.&quot;);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    that-&gt;m_timestamp = timestamp;
&gt; +    that-&gt;m_latitude = latitude;
&gt; +    that-&gt;m_longitude = longitude;
&gt; +    that-&gt;m_altitude = altitude;
&gt; +
&gt; +    GeoclueAccuracyLevel level;
&gt; +    geoclue_accuracy_get_details(accuracy, &amp;level, &amp;that-&gt;m_accuracy, &amp;that-&gt;m_altitudeAccuracy);
&gt; +    that-&gt;updatePosition();
&gt; +}

Shouldn&apos;t this be an instance method?

&gt; Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:495
&gt; +    gchar* cMessage = JSStringCopyUTF8CString(message);
&gt; +    DumpRenderTreeSupportGtk::setMockGeolocationError(view, code, cMessage);
&gt; +    g_free(cMessage);
&gt;  }

Could you use GOwnPtr here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447755</commentid>
    <comment_count>8</comment_count>
      <attachid>101634</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-08-07 09:18:30 -0700</bug_when>
    <thetext>Comment on attachment 101634
Same patch but now with license headers in new files

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

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:56
&gt;&gt; +        g_object_unref(m_geocluePosition);
&gt; 
&gt; It would be better to use GRefPtr instead of handing reference counts manually.

True, that&apos;d look much nicer.

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:70
&gt;&gt; +    GeoclueMasterClient* client = geoclue_master_create_client(master, 0, 0);
&gt; 
&gt; Ditto.

Will be used for both GeoclueMaster and GeoclueMasterClient.

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:162
&gt;&gt; +{
&gt; 
&gt; We don&apos;t typically add newlines to argument lists in function definitions. This function can be static to the file.

Noted.

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:165
&gt;&gt; +        g_error_free(error);
&gt; 
&gt; Does the callback really need to free the GError?

The error originates from the provider GeoClue is currently using, and looking at GeoClue code, the error is not freed anywhere. Because of that I think it would be appropriate that we free it.

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:186
&gt;&gt; +}
&gt; 
&gt; Shouldn&apos;t this be an instance method?

And instance method will be made. Also, because of that, a new callback will be added, positionChangedCallback, for the &apos;position-changed&apos; signal. The callback will then call the GeolocationClient&apos;s positionChanged method in the same way the getPositionCallback callback does.

&gt;&gt; Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:495
&gt;&gt;  }
&gt; 
&gt; Could you use GOwnPtr here?

Will be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447756</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-08-07 09:45:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 101634 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=101634&amp;action=review
&gt; 
&gt; This patch looks pretty good in general, and unskips a ton of tests!  I don&apos;t quite understand why we want to implement client-based geolocation without exposing an API. Is  it necessary just to unskip the tests?

Using client-based geolocation eases the use of the mock geolocation client which is needed for _many_ tests and I&apos;ve started this task pretty much because of that. But if there&apos;s an interest for an API I guess it should be made (though, to be honest, I don&apos;t have much idea on what it would look like).

&gt; Could we somehow create mock locations by interfacing directly with geoclue? If so that would be great, because we could test the geoclue stuff with layout tests.

Great you&apos;ve brought that up. It bugs me that the mock clients are used to only test behavior of WebCore-related functionality of a feature but not the functionality of an external library that we use (in this case GeoClue). But we could test GeoClue behavior by creating a fake provider for testing purposes that would then be used on buildbots. This would then remove the necessity of using GeolocationClientMock. I&apos;ll look how the provider could be updated from DumpRenderTreeSupportGtk class and if this would be functional at all.

But before that I&apos;ll upload the updated patch. And thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447757</commentid>
    <comment_count>10</comment_count>
      <attachid>103182</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-08-07 10:00:16 -0700</bug_when>
    <thetext>Created attachment 103182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479786</commentid>
    <comment_count>11</comment_count>
      <attachid>103182</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-06 22:00:12 -0700</bug_when>
    <thetext>Comment on attachment 103182
Patch

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

Sorry for letting this sit so long. I didn&apos;t really understand what was going on here at first. In general it looks good to me. I think that if this is a feature-preserving replacement for the old system, we should just remove the old system completely.

&gt; Source/WebCore/platform/gtk/GeolocationServiceGtk.cpp:22
&gt; -#if ENABLE(GEOLOCATION)
&gt; +#if ENABLE(GEOLOCATION) &amp;&amp; !ENABLE(CLIENT_BASED_GEOLOCATION)

Is client-based geolocation is a full replacement for this, why not remove this file and make it always on? Is there any loss in functionality?

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:2
&gt; + * Copyright (C) 2011 Zan Dobersek &lt;zandobersek@gmail.com&gt;

You need to preserve the copyright from Source/WebCore/platform/gtk/GeolocationServiceGtk.cpp.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:74
&gt; +    GOwnPtr&lt;GError&gt; error;

Please move this down to where you first use it.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:97
&gt; +    }
&gt; +
&gt; +    GeoclueAccuracyLevel accuracyLevel = m_enableHighAccuracy ? GEOCLUE_ACCURACY_LEVEL_DETAILED : GEOCLUE_ACCURACY_LEVEL_LOCALITY;
&gt; +    gboolean result = geoclue_master_client_set_requirements(client.get(), accuracyLevel, 0,
&gt; +                                                             false, GEOCLUE_RESOURCE_ALL, &amp;error.outPtr());
&gt; +
&gt; +    if (!result) {
&gt; +        errorOccured(error-&gt;message);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    m_geocluePosition = adoptGRef(geoclue_master_client_create_position(client.get(), &amp;error.outPtr()));
&gt; +    if (!m_geocluePosition) {
&gt; +        errorOccured(error-&gt;message);
&gt; +        return;
&gt; +    }
&gt; +

There&apos;s lots of extra newlines in the method. Do you think you can clump related ideas together a bit more?

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:125
&gt; +    if (m_isUpdating) {

Please use an early return here.

&gt; Tools/ChangeLog:13
&gt; +        (createWebView): Create web view after declaring DumpRenderTree mode.

Do you mind explaining why this is important here?

&gt; configure.ac:627
&gt; +                             [enable support for client-based geolocation [default=yes]]),
&gt; +              [],[enable_client_based_geolocation=&quot;yes&quot;])

By enabling this by deafult don&apos;t you disable the normal Geolocation service for all builds? Wouldn&apos;t it be sufficient to enable it only via build-webkit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480145</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-07 11:09:54 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 103182 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103182&amp;action=review
&gt; 
&gt; Sorry for letting this sit so long. I didn&apos;t really understand what was going on here at first. In general it looks good to me. I think that if this is a feature-preserving replacement for the old system, we should just remove the old system completely.
&gt; 

I&apos;m partly to blame for that - I&apos;ve thought a bit about using geoclue instead of the usual mock client as described in comment #9 and then pretty much forgot about it. Thinking about it now, it would be an overkill to develop a provider that would then be deployed on the buildbots. It would also probably cause problems when developers would want to run the tests locally. So, to sum it up, I don&apos;t believe it would pay off.

&gt; &gt; Source/WebCore/platform/gtk/GeolocationServiceGtk.cpp:22
&gt; &gt; -#if ENABLE(GEOLOCATION)
&gt; &gt; +#if ENABLE(GEOLOCATION) &amp;&amp; !ENABLE(CLIENT_BASED_GEOLOCATION)
&gt; 
&gt; Is client-based geolocation is a full replacement for this, why not remove this file and make it always on? Is there any loss in functionality?
&gt; 

There&apos;s no loss in functionality, but the service-based system could be left as a backend at least for a short amount of time, until the client-based solution is showing consistent passing of related tests on the bots. After that, the file would eventually be removed.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:2
&gt; &gt; + * Copyright (C) 2011 Zan Dobersek &lt;zandobersek@gmail.com&gt;
&gt; 
&gt; You need to preserve the copyright from Source/WebCore/platform/gtk/GeolocationServiceGtk.cpp.
&gt; 

You&apos;re right, that&apos;d be a bit unfair on my side.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:97
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    GeoclueAccuracyLevel accuracyLevel = m_enableHighAccuracy ? GEOCLUE_ACCURACY_LEVEL_DETAILED : GEOCLUE_ACCURACY_LEVEL_LOCALITY;
&gt; &gt; +    gboolean result = geoclue_master_client_set_requirements(client.get(), accuracyLevel, 0,
&gt; &gt; +                                                             false, GEOCLUE_RESOURCE_ALL, &amp;error.outPtr());
&gt; &gt; +
&gt; &gt; +    if (!result) {
&gt; &gt; +        errorOccured(error-&gt;message);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    m_geocluePosition = adoptGRef(geoclue_master_client_create_position(client.get(), &amp;error.outPtr()));
&gt; &gt; +    if (!m_geocluePosition) {
&gt; &gt; +        errorOccured(error-&gt;message);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; There&apos;s lots of extra newlines in the method. Do you think you can clump related ideas together a bit more?
&gt; 

I can avoid assigning the result variable and check the return of geoclue_master_client_set_requiremenets directly. That saves two lines. Other than that, I don&apos;t think it&apos;s a good idea to try to push through when an error occurs. 

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:125
&gt; &gt; +    if (m_isUpdating) {
&gt; 
&gt; Please use an early return here.
&gt; 

Noted.

&gt; &gt; Tools/ChangeLog:13
&gt; &gt; +        (createWebView): Create web view after declaring DumpRenderTree mode.
&gt; 
&gt; Do you mind explaining why this is important here?
&gt; 

Noted.

&gt; &gt; configure.ac:627
&gt; &gt; +                             [enable support for client-based geolocation [default=yes]]),
&gt; &gt; +              [],[enable_client_based_geolocation=&quot;yes&quot;])
&gt; 
&gt; By enabling this by deafult don&apos;t you disable the normal Geolocation service for all builds? Wouldn&apos;t it be sufficient to enable it only via build-webkit?

Yes, enabling this by default disables the use of service-based geolocation. If there&apos;s no motivation to have client-based solution enabled in release versions, I can revert this change.

One more thing on the two different approaches of providing geolocation and their subsequent status after this bug is resolved. Both methods are (still) supported in WebCore, so I see no reason why a configuration option should not be available to decide on the approach to be used. But I&apos;d like to see the client-based geolocation being set as default both in configure.ac and build-webkit - there are more tests that cover it and if it comes to enabling the feature in build-webkit but not in configure.ac, this would meant we&apos;re testing client-based geolocation but shipping service-based one. Not a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480229</commentid>
    <comment_count>13</comment_count>
      <attachid>103182</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-07 12:46:04 -0700</bug_when>
    <thetext>Comment on attachment 103182
Patch

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

&gt;&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:97
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; There&apos;s lots of extra newlines in the method. Do you think you can clump related ideas together a bit more?
&gt; 
&gt; I can avoid assigning the result variable and check the return of geoclue_master_client_set_requiremenets directly. That saves two lines. Other than that, I don&apos;t think it&apos;s a good idea to try to push through when an error occurs.

Sorry. Here I meant there were a lot of empty lines. I think they could be reduced by grouping related concepts together. For instance, line 86 and 77, 99, 101 and 104. This is just a nit, but it&apos;s hard to keep track of methods that take up too much vertical space.

&gt;&gt;&gt; configure.ac:627
&gt;&gt;&gt; +              [],[enable_client_based_geolocation=&quot;yes&quot;])
&gt;&gt; 
&gt;&gt; By enabling this by deafult don&apos;t you disable the normal Geolocation service for all builds? Wouldn&apos;t it be sufficient to enable it only via build-webkit?
&gt; 
&gt; Yes, enabling this by default disables the use of service-based geolocation. If there&apos;s no motivation to have client-based solution enabled in release versions, I can revert this change.
&gt; 
&gt; One more thing on the two different approaches of providing geolocation and their subsequent status after this bug is resolved. Both methods are (still) supported in WebCore, so I see no reason why a configuration option should not be available to decide on the approach to be used. But I&apos;d like to see the client-based geolocation being set as default both in configure.ac and build-webkit - there are more tests that cover it and if it comes to enabling the feature in build-webkit but not in configure.ac, this would meant we&apos;re testing client-based geolocation but shipping service-based one. Not a good idea.

It sounds like this API is a solid replacement for old one. It also seems like the difference between the two is totally hidden from the user of the library -- it&apos;s an implementation detail. If that&apos;s the case perhaps we shouldn&apos;t even support the old method.

I also dislike the idea of having the same code (effectively) copied in two places. If you still think that keeping the old code around is a good idea, we should find some way to share the geoclue glue between the two implementations. From what you say and the amount of tests you are unskipping with this patch it seems like client-based geolocation is the way to go. Let me know if I&apos;m misunderstanding things here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480333</commentid>
    <comment_count>14</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-07 15:03:19 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 103182 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103182&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:97
&gt; &gt;&gt;&gt; +
&gt; &gt;&gt; 
&gt; &gt;&gt; There&apos;s lots of extra newlines in the method. Do you think you can clump related ideas together a bit more?
&gt; &gt; 
&gt; &gt; I can avoid assigning the result variable and check the return of geoclue_master_client_set_requiremenets directly. That saves two lines. Other than that, I don&apos;t think it&apos;s a good idea to try to push through when an error occurs.
&gt; 
&gt; Sorry. Here I meant there were a lot of empty lines. I think they could be reduced by grouping related concepts together. For instance, line 86 and 77, 99, 101 and 104. This is just a nit, but it&apos;s hard to keep track of methods that take up too much vertical space.
&gt; 

Ah, no problem, I&apos;ll remove the extra empty lines. But I&apos;ll hold onto not assigning a &apos;result&apos; variable since it would only be used in one place.

&gt; &gt;&gt;&gt; configure.ac:627
&gt; &gt;&gt;&gt; +              [],[enable_client_based_geolocation=&quot;yes&quot;])
&gt; &gt;&gt; 
&gt; &gt;&gt; By enabling this by deafult don&apos;t you disable the normal Geolocation service for all builds? Wouldn&apos;t it be sufficient to enable it only via build-webkit?
&gt; &gt; 
&gt; &gt; Yes, enabling this by default disables the use of service-based geolocation. If there&apos;s no motivation to have client-based solution enabled in release versions, I can revert this change.
&gt; &gt; 
&gt; &gt; One more thing on the two different approaches of providing geolocation and their subsequent status after this bug is resolved. Both methods are (still) supported in WebCore, so I see no reason why a configuration option should not be available to decide on the approach to be used. But I&apos;d like to see the client-based geolocation being set as default both in configure.ac and build-webkit - there are more tests that cover it and if it comes to enabling the feature in build-webkit but not in configure.ac, this would meant we&apos;re testing client-based geolocation but shipping service-based one. Not a good idea.
&gt; 
&gt; It sounds like this API is a solid replacement for old one. It also seems like the difference between the two is totally hidden from the user of the library -- it&apos;s an implementation detail. If that&apos;s the case perhaps we shouldn&apos;t even support the old method.
&gt; 
&gt; I also dislike the idea of having the same code (effectively) copied in two places. If you still think that keeping the old code around is a good idea, we should find some way to share the geoclue glue between the two implementations. From what you say and the amount of tests you are unskipping with this patch it seems like client-based geolocation is the way to go. Let me know if I&apos;m misunderstanding things here.

Ok, I&apos;m convinced. Doubled code really doesn&apos;t sound nice, and, in my opinion, neither does an extra class that shares geoclue code between the two implementations. With client-based geolocation probably being something that eventually all of WebKit ports will move towards, service-based solution wouldn&apos;t be needed, so you&apos;re right about removing it completely.

With client-based geolocation being default and no configuration.ac flags, I&apos;ll still turn on the flag in build-webkit, if that&apos;s ok, just to note what the Gtk port is really using, even though it doesn&apos;t have effect on compilation.

I&apos;ll upload an updated patch tomorrow with all the issues addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480539</commentid>
    <comment_count>15</comment_count>
      <attachid>110268</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-08 04:00:47 -0700</bug_when>
    <thetext>Created attachment 110268
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480554</commentid>
    <comment_count>16</comment_count>
      <attachid>110268</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-08 08:36:00 -0700</bug_when>
    <thetext>Comment on attachment 110268
Updated patch

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

This looks great! I realized that since we need this code for WebKit2 also we&apos;ll have to share it anyway. We can tackle that later though. It only requires hoisting the code out into another class. Please fix the style nits before landing.

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h:126
&gt; +    static void setMockGeolocationPermission(WebKitWebView*, bool);
&gt; +    static void setMockGeolocationPosition(WebKitWebView*, double, double, double);
&gt; +    static void setMockGeolocationError(WebKitWebView*, int, const gchar*);

You should include the parameter names for types that are generic like int, double, and char*.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:33
&gt; +void getPositionCallback(GeocluePosition *position, GeocluePositionFields fields, int timestamp, double latitude, double longitude, double altitude, GeoclueAccuracy* accuracy, GError* error, GeolocationClient* client)

The asterisk in GeocluePosition *position is in the wrong place.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:56
&gt; +    , m_latitude(0.0)
&gt; +    , m_longitude(0.0)
&gt; +    , m_altitude(0.0)
&gt; +    , m_accuracy(0.0)
&gt; +    , m_altitudeAccuracy(0.0)

Here you should use 0 instead of 0.0.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:75
&gt; +        errorOccured(&quot;Could not connect to location provider.&quot;);

I think this string should be prefixed by an underscore so that it can be localized.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:82
&gt; +                                                 false, GEOCLUE_RESOURCE_ALL, &amp;error.outPtr())) {

The indentation looks slightly off here.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:94
&gt; +    geoclue_position_get_position_async(m_geocluePosition.get(), (GeocluePositionCallback)getPositionCallback, this);

Here you should use reinterpret_cast.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:165
&gt; +                                                          true, m_altitude, true, m_altitudeAccuracy, false, 0.0, false, 0.0);

The 0.0 here should just be 0.

&gt; Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.h:27
&gt; +

No newline necessary here.

&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1103
&gt;      DumpRenderTreeSupportGtk::setDumpRenderTreeModeEnabled(true);
&gt;  
&gt; +    WebKitWebView* view = WEBKIT_WEB_VIEW(self_scrolling_webkit_web_view_new());

I think it&apos;s also important to put a little comment here like &quot;It&apos;s important to create the WebvView after entering DumpRenderTree mode.&quot;

&gt; Tools/Scripts/build-webkit:159
&gt; +      define =&gt; &quot;ENABLE_CLIENT_BASED_GEOLOCATION&quot;, default =&gt; (isAppleWebKit() || isGtk()), value =&gt; \$clientBasedGeolocationSupport },

Hopefully this doesn&apos;t lead to a warning about an unknown parameter. If it does, it could mean our bots always build with warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484756</commentid>
    <comment_count>17</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-16 02:19:45 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 110268 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110268&amp;action=review
&gt; 
&gt; This looks great! I realized that since we need this code for WebKit2 also we&apos;ll have to share it anyway. We can tackle that later though. It only requires hoisting the code out into another class. Please fix the style nits before landing.
&gt; 

All the nits are fixed, but I don&apos;t have commit access, so either someone else can push the patch or the commit queue is used. By the way, a complete rebuild is required.

&gt; &gt; Tools/Scripts/build-webkit:159
&gt; &gt; +      define =&gt; &quot;ENABLE_CLIENT_BASED_GEOLOCATION&quot;, default =&gt; (isAppleWebKit() || isGtk()), value =&gt; \$clientBasedGeolocationSupport },
&gt; 
&gt; Hopefully this doesn&apos;t lead to a warning about an unknown parameter. If it does, it could mean our bots always build with warnings.

If you&apos;re having configure warnings in mind, by removing --enable-client-based-geolocation option the warnings will pop up anyway. As said before, it&apos;s just there to note that Gtk port uses this feature. Similarly enabled in build-webkit but not configurable in configure.ac is the ENABLE_INSPECTOR option, which then also causes unrecognized configure option warnings.

Thanks for the reviews!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484953</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-16 23:43:21 -0700</bug_when>
    <thetext>(In reply to comment #17)

&gt; All the nits are fixed, but I don&apos;t have commit access, so either someone else can push the patch or the commit queue is used. By the way, a complete rebuild is required.

Do you mind uploading a new version of the patch? We can use the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485086</commentid>
    <comment_count>19</comment_count>
      <attachid>111252</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-17 05:47:12 -0700</bug_when>
    <thetext>Created attachment 111252
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485087</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 05:48:50 -0700</bug_when>
    <thetext>Attachment 111252 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Last 3072 characters of output:
cessed: True
    deps_parsed: True
    requirements: (&apos;./&apos;, &apos;chromium_deps&apos;, &apos;third_party&apos;)
  
    name: third_party/yasm/source/patched-yasm
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/yasm/source/patched-yasm&apos;)
    should_process: True
    requirements: (&apos;./&apos;, &apos;chromium_deps&apos;, &apos;third_party&apos;)
  
    name: tools/clang
    url: http://src.chromium.org/svn/trunk/src/tools/clang@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/clang@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: tools/generate_stubs
    url: http://src.chromium.org/svn/trunk/src/tools/generate_stubs@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/generate_stubs@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: tools/grit
    url: From(&apos;chromium_deps&apos;, &apos;src/tools/grit&apos;)
    parsed_url: http://grit-i18n.googlecode.com/svn/trunk@6
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;, &apos;chromium_deps&apos;)
  
    name: tools/gritsettings
    url: http://src.chromium.org/svn/trunk/src/tools/gritsettings@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/gritsettings@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: tools/gyp
    url: From(&apos;chromium_deps&apos;, &apos;src/tools/gyp&apos;)
    parsed_url: http://gyp.googlecode.com/svn/trunk@1074
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;, &apos;chromium_deps&apos;)
      name: scons
      url: http://src.chromium.org/svn/trunk/src/third_party/scons@44099
      requirements: (&apos;tools/gyp&apos;,)
  
    name: tools/win
    url: http://src.chromium.org/svn/trunk/src/tools/win@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/win@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: tools/xdisplaycheck
    url: http://src.chromium.org/svn/trunk/src/tools/xdisplaycheck@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/xdisplaycheck@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: ui
    url: http://src.chromium.org/svn/trunk/src/ui@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/ui@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)
  
    name: v8
    url: From(&apos;chromium_deps&apos;, &apos;src/v8&apos;)
    should_process: True
    requirements: (&apos;./&apos;, &apos;chromium_deps&apos;)
  
    name: webkit
    url: http://src.chromium.org/svn/trunk/src/webkit@105777
    parsed_url: http://src.chromium.org/svn/trunk/src/webkit@105777
    should_process: True
    processed: True
    deps_parsed: True
    requirements: (&apos;./&apos;,)

Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485226</commentid>
    <comment_count>21</comment_count>
      <attachid>111252</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-17 09:47:04 -0700</bug_when>
    <thetext>Comment on attachment 111252
Updated patch

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

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:857
&gt; +    double timestamp = g_get_real_time() / 1000000.0;

Whoops small style nit here. Should be 1000000. I&apos;ll fix this and land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485240</commentid>
    <comment_count>22</comment_count>
      <attachid>111252</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-17 10:08:35 -0700</bug_when>
    <thetext>Comment on attachment 111252
Updated patch

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

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:857
&gt;&gt; +    double timestamp = g_get_real_time() / 1000000.0;
&gt; 
&gt; Whoops small style nit here. Should be 1000000. I&apos;ll fix this and land it.

Actually, this is needed to force floating point division. I&apos;ll cq+ this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485258</commentid>
    <comment_count>23</comment_count>
      <attachid>111252</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-17 10:36:35 -0700</bug_when>
    <thetext>Comment on attachment 111252
Updated patch

Attachment 111252 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10096188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485935</commentid>
    <comment_count>24</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-18 03:20:08 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 111252 [details])
&gt; Attachment 111252 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/10096188

This error is expected as the tree would need a complete rebuild when the patch would land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485947</commentid>
    <comment_count>25</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-18 04:11:17 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 111252 [details] [details])
&gt; &gt; Attachment 111252 [details] [details] did not pass gtk-ews (gtk):
&gt; &gt; Output: http://queues.webkit.org/results/10096188
&gt; 
&gt; This error is expected as the tree would need a complete rebuild when the patch would land.

Ok let&apos;s handle it on IRC this afternoon with Gustavo, I can trigger clean builds on the GTK Debug bots.

No need for cq, we should land it manually I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485989</commentid>
    <comment_count>26</comment_count>
      <attachid>111252</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-18 06:02:15 -0700</bug_when>
    <thetext>Comment on attachment 111252
Updated patch

Clearing flags on attachment: 111252

Committed r97746: &lt;http://trac.webkit.org/changeset/97746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485990</commentid>
    <comment_count>27</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-18 06:02:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486060</commentid>
    <comment_count>28</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-10-18 08:16:09 -0700</bug_when>
    <thetext>The build has been hardcoded to depend on geolocation, but geolocation is not enabled by default in configure.ac. Things now fail with:

In file included from ../../Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:22:0:
../../Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.h:27:36: fatal error: geoclue/geoclue-master.h: No such file or directory
compilation terminated.
make[1]: *** [Source/WebKit/gtk/WebCoreSupport/libwebkitgtk_3_0_la-GeolocationClientGtk.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/home/xan/git/webkit/build/normal&apos;
make: *** [install] Error 2

I believe things are missing ENABLE(GEOLOCATION) all over the place? Probably this works in the bots because build-webkit enables geolocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486624</commentid>
    <comment_count>29</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2011-10-19 01:53:07 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; The build has been hardcoded to depend on geolocation, but geolocation is not enabled by default in configure.ac. Things now fail with:
&gt; 
&gt; In file included from ../../Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp:22:0:
&gt; ../../Source/WebKit/gtk/WebCoreSupport/GeolocationClientGtk.h:27:36: fatal error: geoclue/geoclue-master.h: No such file or directory
&gt; compilation terminated.
&gt; make[1]: *** [Source/WebKit/gtk/WebCoreSupport/libwebkitgtk_3_0_la-GeolocationClientGtk.lo] Error 1
&gt; make[1]: *** Waiting for unfinished jobs....
&gt; make[1]: Leaving directory `/home/xan/git/webkit/build/normal&apos;
&gt; make: *** [install] Error 2
&gt; 
&gt; I believe things are missing ENABLE(GEOLOCATION) all over the place? Probably this works in the bots because build-webkit enables geolocation.

Sorry for the stupid mistake. You&apos;re right about the ENABLE flag, but rather than using ENABLE(GEOLOCATION) I&apos;ll post a patch that wraps things into ENABLE(CLIENT_BASED_GEOLOCATION). ENABLE_CLIENT_BASED_GEOLOCATION is defined only if geolocation is enabled, so that should be enough.

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486822</commentid>
    <comment_count>30</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-19 08:38:03 -0700</bug_when>
    <thetext>*** Bug 36053 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486824</commentid>
    <comment_count>31</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-19 08:38:17 -0700</bug_when>
    <thetext>*** Bug 54197 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101628</attachid>
            <date>2011-07-21 12:38:22 -0700</date>
            <delta_ts>2011-07-21 12:56:00 -0700</delta_ts>
            <desc>Client-based geolocation - the whole package</desc>
            <filename>bug-64970-20110721213821.patch</filename>
            <type>text/plain</type>
            <size>30104</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE0NjAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBlZTY1ZmYzODM4MjEwOTNmYmZmNzBjYWNkZmRlZjRlMjYyMDg3OGVhLi41Zjc0
MDY1N2ZjMDdiNThlYTIyYjcwOWVkYWRlZjIyNzRkNjEwNzdhIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDctMjEgIFphbiBEb2Jl
cnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZv
ciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRW5hYmxlIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiBzdXBwb3J0
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMTEtMDctMjAgIFBp
ZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CiAKICAgICAgICAgW1F0XSBRdDUg
QnVpbGQgRml4OiBEaXNhYmxlIHRoZSBsZWdhY3kgbWFjIGFzc2VydCBtYWNyb3MuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
N2ZlOWE5NjQwNjdkY2YzMDI5ZmZkMGI0NTQ5MzQ0OWFlZGE2NmQwMC4uZTE4NmRhMDQxNTVmNGY3
YzliOTIxOTkxZTg3MGQ2YmUzMTEwM2RmZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA3
LTIxICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0
a10gU3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuc2tpcCBnZW9sb2NhdGlvbiB0ZXN0cyB0
aGF0IG5vdyBwYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisKIDIwMTEt
MDctMjEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JF
U1NJT04ocjg4NzU3KTogaW5wdXRbdHlwZT1yYW5nZV0gcmVuZGVycyBpbmNvcnJlY3RseSBpbiBS
VEwgY29udGV4dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZTI5NGI0NGM2MWI3ZGFl
MjYxNTA4ZjFmMzE0MThiNDgyMTIzMWQxYS4uNmJjMzFjYTMzMWEzNDljYTQ1MDA0MGRlOTc0OTg4
ZTY2OGFkZjNmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTgzNCw0MyArODM0LDYg
QEAgZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi1ob3Jpem9udGFsLXNjcm9sbGJhci1pbi1ydGwu
aHRtbAogZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi12ZXJ0aWNhbC1zY3JvbGxiYXItaW4tcnRs
Lmh0bWwKIGZhc3QvZXZlbnRzL3Njcm9sbC1pbi1zY2FsZWQtcGFnZS13aXRoLW92ZXJmbG93LWhp
ZGRlbi5odG1sCiAKLQotIyBOZWVkcyBtb2NrIHN1cHBvcnQsIGFuZCBidWlsZCBzbGF2ZSBHZW9s
b2NhdGlvbiBzZXJ2aWNlCi0jIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYwNTMKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLWV4Y2VwdGlvbi5odG1s
Ci1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC1mb3ItbXVs
dGlwbGUtcmVxdWVzdHMuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNz
aW9uLWFsbG93ZWQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9u
LWRlbmllZC1mb3ItbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9lcnJv
ci5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9u
by1wYWdlLWNhY2hlLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVk
LWFscmVhZHktY2xlYXItd2F0Y2guaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcG9zaXRpb24t
c3RyaW5nLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3JlZW50cmFudC1lcnJvci5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVudHJhbnQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAotZmFz
dC9kb20vR2VvbG9jYXRpb24vcmVlbnRyYW50LXN1Y2Nlc3MuaHRtbAotZmFzdC9kb20vR2VvbG9j
YXRpb24vc3VjY2Vzcy5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi90aW1lb3V0LWNsZWFyLXdh
dGNoLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3RpbWVvdXQuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vdGltZXN0YW1wLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3dhdGNoLmh0bWwK
LWZhc3QvZG9tL0dlb2xvY2F0aW9uL3dpbmRvdy1jbG9zZS1jcmFzaC5odG1sCi0KLSMgTmVlZHMg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKLSMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDE5NwotZmFzdC9kb20vR2VvbG9jYXRpb24vcGFnZS1yZWxvYWQtY2FuY2VsLXBlcm1pc3Np
b24tcmVxdWVzdHMuaHRtbAotCi0jIFdlJ3JlIG5vdCBxdWl0ZSByZWFkeSB0byBydW4gdGhlc2Ug
dGVzdHMsIGJlY2F1c2UgdGhlIHNsYXZlcyBuZWVkCi0jIEdlb2NsdWUgc3VwcG9ydC4gSWYgd2Ug
aW1wbGVtZW50IHN1cHBvcnQgZm9yIHRoZSBtb2NrIGdlb2xvY2F0aW9uIHNlcnZpY2UKLSMgbWF5
YmUgd2UgY2FuIGF2b2lkIHRoaXMuCi0jIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzU2NzQKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVk
LWFscmVhZHktZXJyb3IuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5p
ZWQtYWxyZWFkeS1zdWNjZXNzLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24t
ZGVuaWVkLXN0b3BzLXdhdGNoZXMuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lv
bi1kZW5pZWQuaHRtbAotCiAjIE1pc3NlcyBzZXRNZWRpYVR5cGUoKSBpbXBsZW1lbnRhdGlvbgog
ZmFzdC9tZWRpYS9wcmludC1yZXN0b3Jlcy1wcmV2aW91cy1tZWRpYXR5cGUuaHRtbAogCkBAIC0x
MDE1LDE0ICs5NzgsNiBAQCBmYXN0L2xvYWRlci9udWxsLXJlcXVlc3QtYWZ0ZXItd2lsbFNlbmRS
ZXF1ZXN0Lmh0bWwKIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0
bWwKIGVkaXRpbmcvc2VsZWN0aW9uL2NvbnRleHQtbWVudS1vbi10ZXh0Lmh0bWwKIAotIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxNTMKLWZhc3QvZG9tL0dlb2xv
Y2F0aW9uL2NhbGxiYWNrLXRvLXJlbW90ZS1jb250ZXh0Lmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0
aW9uL2NhbGxiYWNrLXRvLXJlbW90ZS1jb250ZXh0Mi5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlv
bi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGlzY29ubmVjdGVkLWZyYW1lLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3Rl
ZC1mcmFtZS1hbHJlYWR5Lmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1m
cmFtZS1wZXJtaXNzaW9uLWRlbmllZC5odG1sCi0KICMgU29tZSBpbnB1dCB0eXBlPXJhbmdlIHRl
c3RzIGZhaWwgYmVjYXVzZSBvZiB0aGUgc2l6ZSAKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBH
VEsrIHRoZW1lcy4KIGZhc3QvZm9ybXMvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNDBlNGM1OTIwMTQ0NGYxMDkzYmViY2Y2OGRlYzQwY2MwY2Q2MjIxNy4uZDczYjgwYTYy
NWJjN2IwOGUxM2Q0NjZmNWZkZDNlM2I0NTFhNjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDExLTA3LTIxICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgW0d0a10gU3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBmZWF0dXJlIGRl
ZmluZXMgZm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiBmZWF0dXJlIGFuZCBhZGQgY29tcGls
YXRpb24gZ3VhcmQKKyAgICAgICAgdG8gR2VvbG9jYXRpb25TZXJ2aWNlR3RrIHRvIHByZXZlbnQg
aXQgZnJvbSBjb21waWxpbmcgd2hlbiBub3QgbmVlZGVkLgorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHA6
CisKIDIwMTEtMDctMjEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjg4NzU3KTogaW5wdXRbdHlwZT1yYW5nZV0gcmVuZGVycyBpbmNvcnJl
Y3RseSBpbiBSVEwgY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggY2M3NTUzYWZjNDQ4
YmNhMjA3MGExY2IyNjBiZWRiNGQyNjRjZGI4Ny4uMjY5NjZjY2ViMGFjMTA4NTA3OTExYWM2NDA4
YmI2MmM5ZmQxM2U2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTQ1NSw2ICs0NTUsMTUgQEAg
d2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9HRU9MT0NBVElPTj0xCiBlbmRpZiAjIEVORCBF
TkFCTEVfR0VPTE9DQVRJT04KIAogIyAtLS0tCisjIENsaWVudC1iYXNlZCBnZW9sb2NhdGlvbgor
IyAtLS0tCitpZiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OCisKK0ZFQVRVUkVfREVG
SU5FUyArPSBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEKK3dlYmNvcmVfY3BwZmxh
Z3MgKz0gLURFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEKK2VuZGlmICMgRU5EIEVO
QUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04KKworIyAtLS0tCiAjIE1hdGhNTCBzdXBwb3J0
CiAjIC0tLS0KIGlmIEVOQUJMRV9NQVRITUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAKaW5kZXggOGMzZDQ1NmZhZDQwMTQx
MTRjMGJkYWRhNDllNzA1ZTkxMjViOTRlNi4uNGRhN2E5M2IyNWMzM2RmYTE1MGU5OGZmZDFiNzlk
MzBkODI3ZGQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xv
Y2F0aW9uU2VydmljZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dl
b2xvY2F0aW9uU2VydmljZUd0ay5jcHAKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUd0ay5oIgotI2lmIEVOQUJMRShH
RU9MT0NBVElPTikKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pICYmICFFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQogCiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYWQ1NzNmMWUzZWUxNWQxZDdhMmNiYzc5
ZTM5ZGJjOWE2OTUzZGRhOS4uMjI1MWYwNTYzYzIwMzFkMDRkN2FmMWI4NDNkNmY1YTg4MDZlMGVj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTA3LTIxICBaYW4gRG9i
ZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3VwcG9ydCBm
b3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0IGZ1bmN0aW9ucyBm
b3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHRlc3RzCisgICAgICAgIGFuZCBpbXBsZW1lbnQg
R2VvbG9jYXRpb25DbGllbnRHdGsuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5jcHA6IEFkZCBzdXBwb3J0IGZ1bmN0aW9ucyB0byBvcGVyYXRlCisgICAg
ICAgIHdpdGggR2VvbG9jYXRpb25DbGllbnRNb2NrLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpyZXNldEdlb2xvY2F0aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvbkVy
cm9yKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dl
b2xvY2F0aW9uQ2xpZW50R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjpHZW9sb2NhdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50Ojp+R2VvbG9jYXRpb25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2Nh
dGlvbkNsaWVudDo6Z2VvbG9jYXRpb25EZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpHZW9s
b2NhdGlvbkNsaWVudDo6c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNs
aWVudDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5KToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25DbGllbnQ6Omxhc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xp
ZW50OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xp
ZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjpnZXRQb3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9j
YXRpb25DbGllbnQ6OnBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50Ojp1cGRhdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9u
Q2xpZW50OjplcnJvck9jY3VyZWQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0
aW9uQ2xpZW50R3RrLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KTogVXNlIEdlb2xvY2F0aW9uQ2xpZW50
TW9jayBhcyBnZW9sb2NhdGlvbiBjbGllbnQKKyAgICAgICAgd2hlbiBydW5uaW5nIGluIER1bXBS
ZW5kZXJUcmVlLgorCiAyMDExLTA3LTExICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25v
bWUub3JnPgogCiAgICAgICAgIFtHVEtdIEdvb2dsZSBDYWxlbmRhciB0aGlua3Mgd2UncmUgbW9i
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ3NmY3MmNiYWYzMTBmNmY0ZmY1ZTA0
ZGNlZjRhNWEzNjc0Y2I1ODcuLjk2YWVlZWRkN2JiZjM5NDZkZDJkY2ZmZTQ3M2JlN2Q2MzgzMTA0
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0yMDEsNiArMjAxLDggQEAgd2Via2l0
Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TmV0d29ya2luZ0NvbnRleHRHdGsuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuY3BwIFwKKwlTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5oIFwKIAlTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HdGtBZGp1c3RtZW50V2F0Y2hlci5jcHAgXAog
CVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVyLmgg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggNWQ1YTA3ODIyNWViMDFiZTk5Yzdk
Y2E5YjUyZDIwMjdjY2IyZjBmOS4uN2M4MWNlNzgwMmY5YTdmMDk3YjMwODcyOTkyZmZmOWQ3MDFk
ZTdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgorI2luY2x1
ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3Iu
aCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRE9N
V2luZG93LmgiCkBAIC04MDksMyArODEzLDU5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzY2FsZVBhZ2VCeShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBmbG9hdCBzY2FsZUZhCiAK
ICAgICBjb3JlRnJhbWUtPnNjYWxlUGFnZShzY2FsZUZhY3RvciwgSW50UG9pbnQoeCwgeSkpOwog
fQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cmVzZXRHZW9sb2NhdGlvbkNsaWVu
dE1vY2soV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRpY19j
YXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29u
dHJvbGxlcigpLT5jbGllbnQoKSk7CisgICAgbW9jay0+cmVzZXQoKTsKKyNlbmRpZgorfQorCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lv
bihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGFsbG93ZWQpCit7CisjaWYgRU5BQkxFKENM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2sg
PSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5nZW9s
b2NhdGlvbkNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworICAgIG1vY2stPnNldFBlcm1pc3Npb24o
YWxsb3dlZCk7CisjZW5kaWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworI2lmIEVOQUJM
RShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBt
b2NrID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3ZWJWaWV3KS0+
Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmNsaWVudCgpKTsKKworICAgIGRvdWJsZSB0aW1lc3Rh
bXAgPSBnX2dldF9yZWFsX3RpbWUoKSAvIDEwMDAwMDAuMDsKKyAgICBtb2NrLT5zZXRQb3NpdGlv
bihHZW9sb2NhdGlvblBvc2l0aW9uOjpjcmVhdGUodGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0
dWRlLCBhY2N1cmFjeSkpOworI2VuZGlmCit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQg
ZXJyb3JDb2RlLCBjb25zdCBnY2hhciogZXJyb3JNZXNzYWdlKQoreworI2lmIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrID0g
c3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3ZWJWaWV3KS0+Z2VvbG9j
YXRpb25Db250cm9sbGVyKCktPmNsaWVudCgpKTsKKworICAgIEdlb2xvY2F0aW9uRXJyb3I6OkVy
cm9yQ29kZSBjb2RlOworICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7CisgICAgY2FzZSBQb3NpdGlv
bkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRDoKKyAgICAgICAgY29kZSA9IEdlb2xvY2F0aW9uRXJy
b3I6OlBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9zaXRpb25F
cnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29kZSA9
IEdlb2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1vY2stPnNldEVycm9yKEdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0ZShjb2Rl
LCBlcnJvck1lc3NhZ2UpKTsKKyNlbmRpZgorfQorCitpbnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQoreworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04p
CisgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRp
b25DbGllbnRNb2NrKj4oY29yZSh3ZWJWaWV3KS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmNs
aWVudCgpKTsKKyAgICByZXR1cm4gbW9jay0+bnVtYmVyT2ZQZW5kaW5nUGVybWlzc2lvblJlcXVl
c3RzKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5oCmluZGV4IDczYzQ0NWE2Y2YwNzlhOWM3ZjgzMWZhZGM2MzQ5YTNhMGJmZDVmMGIuLjQyZjEx
M2I1MjcwZDNhYTlhNmYxNDQ0NzliMTlhOTIyZDkxNDlkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5oCkBAIC0xMjAsNiArMTIwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHdvcmtlclRocmVhZENvdW50KCk7CiAgICAgc3RhdGljIGJvb2wgd2Via2l0V2ViRnJhbWVTZWxl
Y3Rpb25IYXNTcGVsbGluZ01hcmtlcihXZWJLaXRXZWJGcmFtZSosIGdpbnQgZnJvbSwgZ2ludCBs
ZW5ndGgpOwogCisgICAgc3RhdGljIHZvaWQgcmVzZXRHZW9sb2NhdGlvbkNsaWVudE1vY2soV2Vi
S2l0V2ViVmlldyopOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Np
b24oV2ViS2l0V2ViVmlldyosIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihXZWJLaXRXZWJWaWV3KiwgaW50
LCBjb25zdCBnY2hhciopOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoV2ViS2l0V2ViVmlldyopOworCiBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHNfZHJ0UnVuOwogICAgIHN0YXRpYyBib29sIHNfbGlua3NJbmNsdWRlZEluVGFi
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDViMTJjY2JjYzVlZjJhOTU5MTc1
OTU4NWVjMzNmY2UzNzg4MDFiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNwcApAQCAtMCwwICsxLDE4MyBA
QAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50R3RrLmgi
CisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb25Qb3NpdGlvbi5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZpZXdwcml2YXRlLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitHZW9sb2NhdGlvbkNsaWVudDo6R2VvbG9jYXRpb25DbGll
bnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAg
ICwgbV9nZW9jbHVlQ2xpZW50KDApCisgICAgLCBtX2dlb2NsdWVQb3NpdGlvbigwKQorICAgICwg
bV9sYXRpdHVkZSgwLjApCisgICAgLCBtX2xvbmdpdHVkZSgwLjApCisgICAgLCBtX2FsdGl0dWRl
KDAuMCkKKyAgICAsIG1fYWNjdXJhY3koMC4wKQorICAgICwgbV9hbHRpdHVkZUFjY3VyYWN5KDAu
MCkKKyAgICAsIG1fdGltZXN0YW1wKDApCisgICAgLCBtX2VuYWJsZUhpZ2hBY2N1cmFjeShmYWxz
ZSkKKyAgICAsIG1faXNVcGRhdGluZyhmYWxzZSkKK3sKK30KKworR2VvbG9jYXRpb25DbGllbnQ6
On5HZW9sb2NhdGlvbkNsaWVudCgpCit7CisgICAgaWYgKG1fZ2VvY2x1ZUNsaWVudCkKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVlQ2xpZW50KTsKKworICAgIGlmIChtX2dlb2NsdWVQ
b3NpdGlvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVlUG9zaXRpb24pOworfQor
Cit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCgpCit7CisgICAg
ZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnN0YXJ0VXBkYXRpbmco
KQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKworICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKKyAgICBHZW9jbHVlTWFzdGVyKiBtYXN0ZXIgPSBnZW9jbHVlX21hc3Rlcl9nZXRf
ZGVmYXVsdCgpOworICAgIEdlb2NsdWVNYXN0ZXJDbGllbnQqIGNsaWVudCA9IGdlb2NsdWVfbWFz
dGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLCAwLCAwKTsKKyAgICBnX29iamVjdF91bnJlZihtYXN0
ZXIpOworCisgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKCJDb3VsZCBu
b3QgY29ubmVjdCB0byBsb2NhdGlvbiBwcm92aWRlci4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGFjY3VyYWN5TGV2ZWwgPSBtX2VuYWJsZUhp
Z2hBY2N1cmFjeSA/IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfREVUQUlMRUQgOiBHRU9DTFVFX0FD
Q1VSQUNZX0xFVkVMX0xPQ0FMSVRZOworICAgIGdib29sZWFuIHJlc3VsdCA9IGdlb2NsdWVfbWFz
dGVyX2NsaWVudF9zZXRfcmVxdWlyZW1lbnRzKGNsaWVudCwgYWNjdXJhY3lMZXZlbCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAg
ICAgICBnX29iamVjdF91bnJlZihjbGllbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9nZW9jbHVlUG9zaXRpb24gPSBnZW9jbHVlX21hc3Rlcl9jbGllbnRfY3JlYXRlX3Bvc2l0
aW9uKGNsaWVudCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoIW1fZ2VvY2x1ZVBvc2l0aW9u
KSB7CisgICAgICAgIGVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGNsaWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2dlb2Ns
dWVDbGllbnQgPSBjbGllbnQ7CisKKyAgICBnZW9jbHVlX3Bvc2l0aW9uX2dldF9wb3NpdGlvbl9h
c3luYyhtX2dlb2NsdWVQb3NpdGlvbiwgKEdlb2NsdWVQb3NpdGlvbkNhbGxiYWNrKWdldFBvc2l0
aW9uQ2FsbGJhY2ssIHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChtX2dl
b2NsdWVQb3NpdGlvbiksICJwb3NpdGlvbi1jaGFuZ2VkIiwKKyAgICAgICAgICAgICAgICAgICAg
IEdfQ0FMTEJBQ0socG9zaXRpb25DaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBtX2lzVXBkYXRpbmcg
PSB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpzdG9wVXBkYXRpbmcoKQorewor
ICAgIGlmICghbV9nZW9jbHVlQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVj
dF91bnJlZihtX2dlb2NsdWVQb3NpdGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVl
Q2xpZW50KTsKKworICAgIG1fZ2VvY2x1ZVBvc2l0aW9uID0gMDsKKyAgICBtX2dlb2NsdWVDbGll
bnQgPSAwOworCisgICAgbV9pc1VwZGF0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgR2VvbG9jYXRp
b25DbGllbnQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJsZSkKK3sKKyAgICBtX2Vu
YWJsZUhpZ2hBY2N1cmFjeSA9IGVuYWJsZTsKKworICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgdXBk
YXRpbmcgd2Ugc2hvdWxkIHJlcG9ydCB0aGUgbmV3IHJlcXVpcmVtZW50cyBpbiBvcmRlcgorICAg
IC8vIHRvIGNoYW5nZSB0byBhIG1vcmUgc3VpdGFibGUgcHJvdmlkZXIgaWYgbmVlZGVkLgorICAg
IGlmIChtX2lzVXBkYXRpbmcpIHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAg
ICAgICBHZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0gbV9lbmFibGVIaWdoQWNj
dXJhY3kgPyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDogR0VPQ0xVRV9BQ0NVUkFD
WV9MRVZFTF9MT0NBTElUWTsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ2VvY2x1ZV9tYXN0
ZXJfY2xpZW50X3NldF9yZXF1aXJlbWVudHMobV9nZW9jbHVlQ2xpZW50LCBhY2N1cmFjeUxldmVs
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQdHIo
KSk7CisKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGVycm9yT2NjdXJlZChl
cnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICBzdG9wVXBkYXRpbmcoKTsKKyAgICAgICB9Cisg
ICAgfQorfQorCitXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uKiBHZW9sb2NhdGlvbkNsaWVu
dDo6bGFzdFBvc2l0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7Cit9
CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6Okdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBjb3JlKG1fd2ViVmlldyktPmNocm9tZSgp
LT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoZ2VvbG9jYXRpb24tPmZyYW1l
KCksIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVy
bWlzc2lvblJlcXVlc3QoV2ViQ29yZTo6R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworICAg
IGNvcmUobV93ZWJWaWV3KS0+Y2hyb21lKCktPmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RGb3JGcmFtZShnZW9sb2NhdGlvbi0+ZnJhbWUoKSwgZ2VvbG9jYXRpb24pOworfQorCit2
b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZXRQb3NpdGlvbkNhbGxiYWNrKEdlb2NsdWVQb3NpdGlv
biAqcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVzdGFtcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsYXRpdHVkZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb25naXR1
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgYWx0aXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiBlcnJvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlb2xvY2F0aW9uQ2xpZW50KiB0aGF0KQor
eworICAgIGlmIChlcnJvcikgeworICAgICAgICB0aGF0LT5lcnJvck9jY3VyZWQoZXJyb3ItPm1l
c3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIHBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxh
dGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgdGhhdCk7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25DbGllbnQ6OnBvc2l0aW9uQ2hhbmdlZChHZW9jbHVlUG9zaXRpb24qLCBHZW9j
bHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1ZUFjY3VyYWN5KiBhY2N1
cmFjeSwgR2VvbG9jYXRpb25DbGllbnQqIHRoYXQpCit7CisgICAgaWYgKCEoZmllbGRzICYgR0VP
Q0xVRV9QT1NJVElPTl9GSUVMRFNfTEFUSVRVREUgJiYgZmllbGRzICYgR0VPQ0xVRV9QT1NJVElP
Tl9GSUVMRFNfTE9OR0lUVURFKSkgeworICAgICAgICB0aGF0LT5lcnJvck9jY3VyZWQoIlBvc2l0
aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdGhhdC0+bV90aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgdGhhdC0+bV9sYXRpdHVk
ZSA9IGxhdGl0dWRlOworICAgIHRoYXQtPm1fbG9uZ2l0dWRlID0gbG9uZ2l0dWRlOworICAgIHRo
YXQtPm1fYWx0aXR1ZGUgPSBhbHRpdHVkZTsKKworICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGxl
dmVsOworICAgIGdlb2NsdWVfYWNjdXJhY3lfZ2V0X2RldGFpbHMoYWNjdXJhY3ksICZsZXZlbCwg
JnRoYXQtPm1fYWNjdXJhY3ksICZ0aGF0LT5tX2FsdGl0dWRlQWNjdXJhY3kpOworICAgIHRoYXQt
PnVwZGF0ZVBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnVwZGF0ZVBv
c2l0aW9uKCkKK3sKKyAgICBtX2xhc3RQb3NpdGlvbiA9IFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9z
aXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxkb3VibGU+KG1fdGltZXN0YW1wKSwgbV9sYXRpdHVk
ZSwgbV9sb25naXR1ZGUsIG1fYWNjdXJhY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgbV9hbHRpdHVkZSwgdHJ1ZSwgbV9h
bHRpdHVkZUFjY3VyYWN5LCBmYWxzZSwgMC4wLCBmYWxzZSwgMC4wKTsKKyAgICBjb3JlKG1fd2Vi
VmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9z
aXRpb24uZ2V0KCkpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjplcnJvck9jY3VyZWQo
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25F
cnJvcj4gZXJyb3IgPSBXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yOjpjcmVhdGUoV2ViQ29yZTo6
R2VvbG9jYXRpb25FcnJvcjo6UG9zaXRpb25VbmF2YWlsYWJsZSwgbWVzc2FnZSk7CisgICAgY29y
ZShtX3dlYlZpZXcpLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+ZXJyb3JPY2N1cnJlZChlcnJv
ci5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGRjZDAzOWJhNmE1OTQ1ZWNhYzFlNjgz
ZDEzOTA0YWRjNmU5YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaApAQCAtMCwwICsxLDY2IEBACisjaWZu
ZGVmIEdlb2xvY2F0aW9uQ2xpZW50R3RrX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25DbGllbnRHdGtf
aAorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnQuaCIKKworI2lmIEVOQUJMRShDTElFTlRf
QkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisK
KyNpbmNsdWRlIDxnZW9jbHVlL2dlb2NsdWUtbWFzdGVyLmg+CisjaW5jbHVkZSA8Z2VvY2x1ZS9n
ZW9jbHVlLXBvc2l0aW9uLmg+CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktp
dFdlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR2VvbG9jYXRpb25DbGllbnQgOiBwdWJsaWMg
V2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnQgeworcHVibGljOgorICAgIEdlb2xvY2F0aW9uQ2xp
ZW50KFdlYktpdFdlYlZpZXcqKTsKKworICAgIHZvaWQgZ2VvbG9jYXRpb25EZXN0cm95ZWQoKTsK
KworICAgIHZvaWQgc3RhcnRVcGRhdGluZygpOworICAgIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisK
KyAgICB2b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKTsKKyAgICBXZWJDb3JlOjpHZW9s
b2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsKKworICAgIHZvaWQgcmVxdWVzdFBlcm1p
c3Npb24oV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIGNhbmNlbFBlcm1pc3Npb25S
ZXF1ZXN0KFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CisKK3ByaXZhdGU6CisgICAgfkdlb2xvY2F0
aW9uQ2xpZW50KCk7CisKKyAgICBzdGF0aWMgdm9pZCBwb3NpdGlvbkNoYW5nZWQoR2VvY2x1ZVBv
c2l0aW9uKiwgR2VvY2x1ZVBvc2l0aW9uRmllbGRzLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUsIEdlb2NsdWVBY2N1cmFjeSosIEdlb2xvY2F0aW9uQ2xpZW50Kik7CisgICAgc3RhdGljIHZv
aWQgZ2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVlUG9zaXRpb24qLCBHZW9jbHVlUG9zaXRpb25G
aWVsZHMsIGludCwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgR2VvY2x1ZUFjY3VyYWN5KiwgR0Vy
cm9yKiwgR2VvbG9jYXRpb25DbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlUG9zaXRpb24oKTsK
KyAgICB2b2lkIGVycm9yT2NjdXJlZChjb25zdCBjaGFyKik7CisKKyAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXc7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4g
bV9sYXN0UG9zaXRpb247CisKKyAgICBHZW9jbHVlTWFzdGVyQ2xpZW50KiBtX2dlb2NsdWVDbGll
bnQ7CisgICAgR2VvY2x1ZVBvc2l0aW9uKiBtX2dlb2NsdWVQb3NpdGlvbjsKKworICAgIGRvdWJs
ZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsKKyAgICBkb3VibGUgbV9hbHRp
dHVkZTsKKyAgICBkb3VibGUgbV9hY2N1cmFjeTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZUFjY3Vy
YWN5OworICAgIGludCBtX3RpbWVzdGFtcDsKKworICAgIGJvb2wgbV9lbmFibGVIaWdoQWNjdXJh
Y3k7CisgICAgYm9vbCBtX2lzVXBkYXRpbmc7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjZW5kaWYgLy8g
R2VvbG9jYXRpb25DbGllbnRHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwCmluZGV4IGM3OTg2YjkwMmViNzIxZGEyYTlhN2M2ZTFlMTY1N2Q3NWJlNzFlYjku
LjQyOTU4ZTA2M2JiMWE4ZDMyZjU1NGU4NTQxZDM0MjNhOGUzNzQ4NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJEcmFnQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgog
I2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudEd0ay5oIgogI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtNTUsNiArNTYsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiR093blB0ckd0ay5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgpAQCAtMzM4
OSw4ICszMzkyLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiAgICAgcGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudCo+KG5ldyBEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudEd0ayk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCisgICAgaWYgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZHVtcFJl
bmRlclRyZWVNb2RlRW5hYmxlZCgpKQorICAgICAgICBwYWdlQ2xpZW50cy5nZW9sb2NhdGlvbkNs
aWVudCA9IG5ldyBHZW9sb2NhdGlvbkNsaWVudE1vY2s7CisgICAgZWxzZQorICAgICAgICBwYWdl
Q2xpZW50cy5nZW9sb2NhdGlvbkNsaWVudCA9IG5ldyBXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50
KHdlYlZpZXcpOworI2VuZGlmCisKICAgICBwcml2LT5jb3JlUGFnZSA9IG5ldyBQYWdlKHBhZ2VD
bGllbnRzKTsKIAorI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgaWYg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCgpKQor
ICAgICAgICBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihwYWdlQ2xpZW50cy5n
ZW9sb2NhdGlvbkNsaWVudCktPnNldENvbnRyb2xsZXIocHJpdi0+Y29yZVBhZ2UtPmdlb2xvY2F0
aW9uQ29udHJvbGxlcigpKTsKKyNlbmRpZgorCiAgICAgLy8gUGFnZXMgd2l0aGluIGEgc2FtZSBz
ZXNzaW9uIG5lZWQgdG8gYmUgbGlua2VkIHRvZ2V0aGVyIG90aGVyd2lzZSBzb21lIGZ1bmN0aW9u
YWxpdGllcyBzdWNoCiAgICAgLy8gYXMgdmlzaXRlZCBsaW5rIGNvbG9yYXRpb24gKGFjcm9zcyBw
YWdlcykgYW5kIGNoYW5naW5nIHBvcHVwIHdpbmRvdyBsb2NhdGlvbiB3aWxsIG5vdCB3b3JrLgog
ICAgIC8vIFRvIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2ltcGxlIChhbmQgYmVjYXVzZSBu
byBQYWdlR3JvdXAgQVBJIGV4aXN0IGluIFdlYktpdEdUSyBhdCB0aGUKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MjE5YWU3OWE3NWNhYWFkYjAy
YmY4ZTIzMjAyNWU3MGQ1OTU3NTZiLi43MDgyMWNlZGI0M2UzNzA5MDI3MmU1OTYzODU2NzEwOTJl
MTA5ZTdkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDctMjEgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFzZWQgZ2Vv
bG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHRlc3RpbmcgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHRlc3RzIGlu
IER1bXBSZW5kZXJUcmVlCisgICAgICAgIGFuZCB0dXJuIHNhaWQgZnV0dXJlIG9uIGJ5IGRlZmF1
bHQgZm9yIHRoZSBHdGsgcG9ydC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChyZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVz
KTogUmVzZXQgR2VvbG9jYXRpb25DbGllbnRNb2NrLgorICAgICAgICAoY3JlYXRlV2ViVmlldyk6
IENyZWF0ZSB3ZWIgdmlldyBhZnRlciBkZWNsYXJpbmcgRHVtcFJlbmRlclRyZWUgbW9kZS4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOiBJ
bXBsZW1lbnQgZnVuY3Rpb25zIGZvcgorICAgICAgICBnZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMu
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVy
cm9yKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdl
YmtpdDogVHVybiBvbiBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gc3VwcG9ydCBmb3IgR3RrLgor
CiAyMDExLTA3LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEJ1aWxkYm90IG1hcmtzIGEgbnJ3dCBib3QgcmVkIHdoZW4gdGVzdHMgYXJlIG1pc3NpbmcgcmVz
dWx0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXgg
YzFkNzk1YzU2Mjg5MWZmMjY1OTcyMTgwYWNiOGM4ZDM2YzRiYjE2ZS4uOWQ5YThjMjI3ZjhkNTM0
NTQ4ZjcwZTViNmNhM2U3OGJlNDFiOTEzYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
RHVtcFJlbmRlclRyZWUuY3BwCkBAIC00NzUsNiArNDc1LDggQEAgc3RhdGljIHZvaWQgcmVzZXRE
ZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIGF4Q29udHJvbGxlci0+cmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjbGVh
ck9wZW5lcihtYWluRnJhbWUpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZXNl
dEdlb2xvY2F0aW9uQ2xpZW50TW9jayh3ZWJWaWV3KTsKIH0KIAogc3RhdGljIGJvb2wgdXNlTG9u
Z1J1bm5pbmdTZXJ2ZXJNb2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xMDgyLDEwICsx
MDg0LDEwIEBAIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiwgV2ViCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3
KiBjcmVhdGVXZWJWaWV3KCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7CiAKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisK
ICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAogICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6bG9hZC1zdGFydGVkIiwgd2ViVmlld0xvYWRTdGFydGVkLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6bG9hZC1maW5pc2hlZCIsIHdlYlZpZXdMb2FkRmluaXNo
ZWQsIDAsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcAppbmRleCA5OGNjMWRkOThmYWYyMTcxZWQ4YmZhYTk4M2ZmYzI1NmYwMDZj
YWI5Li5jZGI5MjFjZTA0ODI5ZDJlODZhYTYyZTA5NWIzODUzMDBjZTU0YWM4IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
QEAgLTQ3NCwyNiArNDc0LDQ1IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlCiAKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlz
dCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbih2aWV3LCBsYXRp
dHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdl
KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MjY0LgorICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9u
dGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZp
ZXcpOworCisgICAgZ2NoYXIqIGNNZXNzYWdlID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobWVz
c2FnZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25F
cnJvcih2aWV3LCBjb2RlLCBjTWVzc2FnZSk7CisgICAgZ19mcmVlKGNNZXNzYWdlKTsKIH0KIAog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wg
YWxsb3cpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0
IHRlc3RzLgogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdl
YlZpZXdMaXN0LCAwKSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0X3dl
Yl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24o
dmlldywgYWxsb3cpOwogfQogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgcmV0dXJuIC0xOworICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgcmV0dXJu
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHModmlldyk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggMTYzNmFkMmNhZDc2
OTZjNWQ1YzhmMTEwYjhhMjhkYzk5ZWZkNWFmMS4uMDBmZmM3YmZkMDE3YzQ2ZDdhNmZiYjY2NDY1
ODBjYTY1ZjA5ZWMzNiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysr
IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTE1MSw3ICsxNTEsNyBAQCBteSBAZmVh
dHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyIsIGRl
ZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCB9LAogCiAgICAg
eyBvcHRpb24gPT4gImNsaWVudC1iYXNlZC1nZW9sb2NhdGlvbiIsIGRlc2MgPT4gIlRvZ2dsZSBj
bGllbnQtYmFzZWQgR2VvbG9jYXRpb24gc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04iLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQoKSwg
dmFsdWUgPT4gXCRjbGllbnRCYXNlZEdlb2xvY2F0aW9uU3VwcG9ydCB9LAorICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OIiwgZGVmYXVsdCA9PiAoaXNBcHBs
ZVdlYktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGNsaWVudEJhc2VkR2VvbG9jYXRpb25T
dXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzMy1mbGV4Ym94IiwgZGVzYyA9PiAiVG9n
Z2xlIENTUzMgRmxleGJveCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTUzNf
RkxFWEJPWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRjc3MzRmxleGJveFN1cHBvcnQgfSwK
ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBhYmYxMWE1OGEz
ZjU0OTA4NGNjZjEwNjdlMjU3YmQ5YjQyNjk3NDBlLi5kYzIyMWU3MDhlMTMwMWUyYjg5NWYzNTZk
MmU0Y2FjMTVmYTk2OTQ2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJl
LmFjCkBAIC02MjMsOCArNjIzLDggQEAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9nZW9sb2NhdGlv
bl0pCiBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGNsaWVudC1iYXNlZCBnZW9s
b2NhdGlvbiBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoY2xpZW50X2Jhc2VkX2dlb2xvY2F0aW9u
LAogICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY2xpZW50LWJhc2VkLWdl
b2xvY2F0aW9uXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0
IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gW2RlZmF1bHQ9bm9dXSksCi0gICAgICAgICAg
ICAgIFtdLFtlbmFibGVfY2xpZW50X2Jhc2VkX2dlb2xvY2F0aW9uPSJubyJdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIGNsaWVudC1iYXNlZCBnZW9s
b2NhdGlvbiBbZGVmYXVsdD15ZXNdXSksCisgICAgICAgICAgICAgIFtdLFtlbmFibGVfY2xpZW50
X2Jhc2VkX2dlb2xvY2F0aW9uPSJ5ZXMiXSkKIEFDX01TR19SRVNVTFQoWyRlbmFibGVfY2xpZW50
X2Jhc2VkX2dlb2xvY2F0aW9uXSkKIAogIyBjaGVjayB3aGV0aGVyIHRvIGVuYWJsZSBNYXRoTUwg
c3VwcG9ydAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101634</attachid>
            <date>2011-07-21 12:56:08 -0700</date>
            <delta_ts>2011-08-07 10:00:08 -0700</delta_ts>
            <desc>Same patch but now with license headers in new files</desc>
            <filename>bug-64970-20110721215607.patch</filename>
            <type>text/plain</type>
            <size>31788</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE0OTEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBlZTY1ZmYzODM4MjEwOTNmYmZmNzBjYWNkZmRlZjRlMjYyMDg3OGVhLi41Zjc0
MDY1N2ZjMDdiNThlYTIyYjcwOWVkYWRlZjIyNzRkNjEwNzdhIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDctMjEgIFphbiBEb2Jl
cnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZv
ciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRW5hYmxlIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiBzdXBwb3J0
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMTEtMDctMjAgIFBp
ZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CiAKICAgICAgICAgW1F0XSBRdDUg
QnVpbGQgRml4OiBEaXNhYmxlIHRoZSBsZWdhY3kgbWFjIGFzc2VydCBtYWNyb3MuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MjNjM2ZmNTA3MjQxZDQzZWJmMTllM2UxMWE4ZWVjNjIwNTFkZDdjMC4uNmRiMTVlZTA1ODA5ZjQz
MjY5YTk4ZTgwNmJjYzYwNThhODRkOWQ1ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA3
LTIxICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0
a10gU3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuc2tpcCBnZW9sb2NhdGlvbiB0ZXN0cyB0
aGF0IG5vdyBwYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisKIDIwMTEt
MDctMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW9yZSBD
aHJvbWl1bSByZWJhc2VsaW5lcyBmb3IgcjkxNDc0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApp
bmRleCBlMjk0YjQ0YzYxYjdkYWUyNjE1MDhmMWYzMTQxOGI0ODIxMjMxZDFhLi42YmMzMWNhMzMx
YTM0OWNhNDUwMDQwZGU5NzQ5ODhlNjY4YWRmM2ZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZApAQCAtODM0LDQzICs4MzQsNiBAQCBmYXN0L2V2ZW50cy93aGVlbGV2ZW50LWluLWhvcml6b250
YWwtc2Nyb2xsYmFyLWluLXJ0bC5odG1sCiBmYXN0L2V2ZW50cy93aGVlbGV2ZW50LWluLXZlcnRp
Y2FsLXNjcm9sbGJhci1pbi1ydGwuaHRtbAogZmFzdC9ldmVudHMvc2Nyb2xsLWluLXNjYWxlZC1w
YWdlLXdpdGgtb3ZlcmZsb3ctaGlkZGVuLmh0bWwKIAotCi0jIE5lZWRzIG1vY2sgc3VwcG9ydCwg
YW5kIGJ1aWxkIHNsYXZlIEdlb2xvY2F0aW9uIHNlcnZpY2UKLSMgU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjA1MwotZmFzdC9kb20vR2VvbG9jYXRpb24vY2Fs
bGJhY2stZXhjZXB0aW9uLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlz
c2lvbi1hbGxvd2VkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlv
bi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLWZhc3Qv
ZG9tL0dlb2xvY2F0aW9uL2Vycm9yLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0t
YWdlLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL211bHRpcGxlLXJlcXVlc3RzLmh0bWwKLWZh
c3QvZG9tL0dlb2xvY2F0aW9uL25vLXBhZ2UtY2FjaGUuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRp
b24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1jbGVhci13YXRjaC5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9wb3NpdGlvbi1zdHJpbmcuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcmVl
bnRyYW50LWVycm9yLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3JlZW50cmFudC1wZXJtaXNz
aW9uLWRlbmllZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVudHJhbnQtc3VjY2Vzcy5o
dG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdWNjZXNzLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0
aW9uL3RpbWVvdXQtY2xlYXItd2F0Y2guaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vdGltZW91
dC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi90aW1lc3RhbXAuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vd2F0Y2guaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vd2luZG93LWNsb3NlLWNy
YXNoLmh0bWwKLQotIyBOZWVkcyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MTk3Ci1mYXN0L2RvbS9HZW9sb2NhdGlvbi9wYWdlLXJl
bG9hZC1jYW5jZWwtcGVybWlzc2lvbi1yZXF1ZXN0cy5odG1sCi0KLSMgV2UncmUgbm90IHF1aXRl
IHJlYWR5IHRvIHJ1biB0aGVzZSB0ZXN0cywgYmVjYXVzZSB0aGUgc2xhdmVzIG5lZWQKLSMgR2Vv
Y2x1ZSBzdXBwb3J0LiBJZiB3ZSBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlIG1vY2sgZ2VvbG9j
YXRpb24gc2VydmljZQotIyBtYXliZSB3ZSBjYW4gYXZvaWQgdGhpcy4KLSMgU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTY3NAotZmFzdC9kb20vR2VvbG9jYXRp
b24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5odG1sCi1mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC5odG1sCi0KICMgTWlzc2VzIHNldE1lZGlhVHlw
ZSgpIGltcGxlbWVudGF0aW9uCiBmYXN0L21lZGlhL3ByaW50LXJlc3RvcmVzLXByZXZpb3VzLW1l
ZGlhdHlwZS5odG1sCiAKQEAgLTEwMTUsMTQgKzk3OCw2IEBAIGZhc3QvbG9hZGVyL251bGwtcmVx
dWVzdC1hZnRlci13aWxsU2VuZFJlcXVlc3QuaHRtbAogZWRpdGluZy9zcGVsbGluZy9jb250ZXh0
LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vY29udGV4dC1tZW51LW9u
LXRleHQuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MDE1MwotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQuaHRt
bAotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQyLmh0bWwK
LWZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAotZmFzdC9kb20vR2VvbG9j
YXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLQogIyBTb21l
IGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplIAogIyBvZiB0
aGUgc2xpZGVyIHRodW1iIGluIEdUSysgdGhlbWVzLgogZmFzdC9mb3Jtcy9zbGlkZXItbW91c2Ut
ZXZlbnRzLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZTMzMzhlYTc4N2ZhNTU4MjNhY2MyMjliMDdjZWY3
NzI2ZGNhZTcxLi5hNGQ1NmRhODkyODI5MjNhMGY0NDk1ZmNlYzYwYjFjY2ZjODk5NGM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDctMjEgIFphbiBEb2JlcnNlayAgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFz
ZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGZlYXR1cmUgZGVmaW5lcyBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIGZl
YXR1cmUgYW5kIGFkZCBjb21waWxhdGlvbiBndWFyZAorICAgICAgICB0byBHZW9sb2NhdGlvblNl
cnZpY2VHdGsgdG8gcHJldmVudCBpdCBmcm9tIGNvbXBpbGluZyB3aGVuIG5vdCBuZWVkZWQuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2VvbG9j
YXRpb25TZXJ2aWNlR3RrLmNwcDoKKwogMjAxMS0wNy0yMSAgTWFyayBQaWxncmltICA8cGlsZ3Jp
bUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIExlZ2FjeURlZmF1bHRPcHRpb25hbEFy
Z3VtZW50cyBmbGFnIGZyb20gRmlsZUFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBjYzc1NTNh
ZmM0NDhiY2EyMDcwYTFjYjI2MGJlZGI0ZDI2NGNkYjg3Li4yNjk2NmNjZWIwYWMxMDg1MDc5MTFh
YzY0MDhiYjYyYzlmZDEzZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDU1LDYgKzQ1NSwx
NSBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX0dFT0xPQ0FUSU9OPTEKIGVuZGlmICMg
RU5EIEVOQUJMRV9HRU9MT0NBVElPTgogCiAjIC0tLS0KKyMgQ2xpZW50LWJhc2VkIGdlb2xvY2F0
aW9uCisjIC0tLS0KK2lmIEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04KKworRkVBVFVS
RV9ERUZJTkVTICs9IEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT049MQord2ViY29yZV9j
cHBmbGFncyArPSAtREVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT049MQorZW5kaWYgIyBF
TkQgRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTgorCisjIC0tLS0KICMgTWF0aE1MIHN1
cHBvcnQKICMgLS0tLQogaWYgRU5BQkxFX01BVEhNTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcAppbmRleCA4YzNkNDU2ZmFk
NDAxNDExNGMwYmRhZGE0OWU3MDVlOTEyNWI5NGU2Li40ZGE3YTkzYjI1YzMzZGZhMTUwZTk4ZmZk
MWI3OWQzMGQ4MjdkZDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcApAQCAtMTksNyArMTksNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmgiCi0jaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorI2lmIEVOQUJMRShHRU9MT0NBVElPTikgJiYgIUVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCiAKICNpbmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBhZDU3M2YxZTNlZTE1ZDFkN2Ey
Y2JjNzllMzlkYmM5YTY5NTNkZGE5Li4yMjUxZjA1NjNjMjAzMWQwNGQ3YWYxYjg0M2Q2ZjVhODgw
NmUwZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDctMjEgIFph
biBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBw
b3J0IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIER1bXBSZW5kZXJUcmVlIHN1cHBvcnQgZnVuY3Rp
b25zIGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gdGVzdHMKKyAgICAgICAgYW5kIGltcGxl
bWVudCBHZW9sb2NhdGlvbkNsaWVudEd0ay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBB
ZGQgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcDogQWRkIHN1cHBvcnQgZnVuY3Rpb25zIHRvIG9wZXJhdGUK
KyAgICAgICAgd2l0aCBHZW9sb2NhdGlvbkNsaWVudE1vY2suCisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnJlc2V0R2VvbG9jYXRpb25DbGllbnRNb2NrKToKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbik6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0
aW9uRXJyb3IpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvR2VvbG9jYXRpb25DbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6Okdlb2xvY2F0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6On5HZW9sb2NhdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okdl
b2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6
Okdlb2xvY2F0aW9uQ2xpZW50OjpzdGFydFVwZGF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjpzZXRFbmFibGVIaWdoQWNjdXJhY3kpOgorICAgICAgICAoV2ViS2l0OjpHZW9s
b2NhdGlvbkNsaWVudDo6bGFzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6OmdldFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpH
ZW9sb2NhdGlvbkNsaWVudDo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6OnVwZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9j
YXRpb25DbGllbnQ6OmVycm9yT2NjdXJlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRHdGsuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOiBVc2UgR2VvbG9jYXRpb25D
bGllbnRNb2NrIGFzIGdlb2xvY2F0aW9uIGNsaWVudAorICAgICAgICB3aGVuIHJ1bm5pbmcgaW4g
RHVtcFJlbmRlclRyZWUuCisKIDIwMTEtMDctMTEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGdu
c0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW0dUS10gR29vZ2xlIENhbGVuZGFyIHRoaW5rcyB3ZSdy
ZSBtb2JpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNDc2ZjcyY2JhZjMxMGY2ZjRm
ZjVlMDRkY2VmNGE1YTM2NzRjYjU4Ny4uOTZhZWVlZGQ3YmJmMzk0NmRkMmRjZmZlNDczYmU3ZDYz
ODMxMDQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIwMSw2ICsyMDEsOCBAQCB3
ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVOZXR3b3JraW5nQ29udGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAgXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmggXAog
CVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVyLmNw
cCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNo
ZXIuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCA1ZDVhMDc4MjI1ZWIwMWJl
OTljN2RjYTliNTJkMjAyN2NjYjJmMGY5Li43YzgxY2U3ODAyZjlhN2YwOTdiMzA4NzI5OTJmZmY5
ZDcwMWRlN2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTM1LDYgKzM1LDEwIEBA
CiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR0NDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25F
cnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SlNET01XaW5kb3cuaCIKQEAgLTgwOSwzICs4MTMsNTkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OnNjYWxlUGFnZUJ5KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGZsb2F0IHNjYWxl
RmEKIAogICAgIGNvcmVGcmFtZS0+c2NhbGVQYWdlKHNjYWxlRmFjdG9yLCBJbnRQb2ludCh4LCB5
KSk7CiB9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZXNldEdlb2xvY2F0aW9u
Q2xpZW50TW9jayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworI2lmIEVOQUJMRShDTElFTlRf
QkFTRURfR0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrID0gc3Rh
dGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3ZWJWaWV3KS0+Z2VvbG9jYXRp
b25Db250cm9sbGVyKCktPmNsaWVudCgpKTsKKyAgICBtb2NrLT5yZXNldCgpOworI2VuZGlmCit9
CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25QZXJt
aXNzaW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGJvb2wgYWxsb3dlZCkKK3sKKyNpZiBFTkFC
TEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayog
bW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldykt
Pmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7CisgICAgbW9jay0+c2V0UGVybWlz
c2lvbihhbGxvd2VkKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit7CisjaWYg
RU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1v
Y2sqIG1vY2sgPSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZp
ZXcpLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworCisgICAgZG91YmxlIHRp
bWVzdGFtcCA9IGdfZ2V0X3JlYWxfdGltZSgpIC8gMTAwMDAwMC4wOworICAgIG1vY2stPnNldFBv
c2l0aW9uKEdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZSh0aW1lc3RhbXAsIGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5KSk7CisjZW5kaWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGludCBlcnJvckNvZGUsIGNvbnN0IGdjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisjaWYgRU5BQkxF
KENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1v
Y2sgPSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5n
ZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworCisgICAgR2VvbG9jYXRpb25FcnJv
cjo6RXJyb3JDb2RlIGNvZGU7CisgICAgc3dpdGNoIChlcnJvckNvZGUpIHsKKyAgICBjYXNlIFBv
c2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVEOgorICAgICAgICBjb2RlID0gR2VvbG9jYXRp
b25FcnJvcjo6UGVybWlzc2lvbkRlbmllZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQb3Np
dGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRToKKyAgICBkZWZhdWx0OgorICAgICAgICBj
b2RlID0gR2VvbG9jYXRpb25FcnJvcjo6UG9zaXRpb25VbmF2YWlsYWJsZTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgbW9jay0+c2V0RXJyb3IoR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRl
KGNvZGUsIGVycm9yTWVzc2FnZSkpOworI2VuZGlmCit9CisKK2ludCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NB
VElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2sgPSBzdGF0aWNfY2FzdDxHZW9s
b2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIo
KS0+Y2xpZW50KCkpOworICAgIHJldHVybiBtb2NrLT5udW1iZXJPZlBlbmRpbmdQZXJtaXNzaW9u
UmVxdWVzdHMoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmgKaW5kZXggNzNjNDQ1YTZjZjA3OWE5YzdmODMxZmFkYzYzNDlhM2EwYmZkNWYwYi4u
NDJmMTEzYjUyNzBkM2FhOWE2ZjE0NDQ3OWIxOWE5MjJkOTE0OWQ5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmgKQEAgLTEyMCw2ICsxMjAsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgd29ya2VyVGhyZWFkQ291bnQoKTsKICAgICBzdGF0aWMgYm9vbCB3ZWJraXRXZWJGcmFt
ZVNlbGVjdGlvbkhhc1NwZWxsaW5nTWFya2VyKFdlYktpdFdlYkZyYW1lKiwgZ2ludCBmcm9tLCBn
aW50IGxlbmd0aCk7CiAKKyAgICBzdGF0aWMgdm9pZCByZXNldEdlb2xvY2F0aW9uQ2xpZW50TW9j
ayhXZWJLaXRXZWJWaWV3Kik7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUGVy
bWlzc2lvbihXZWJLaXRXZWJWaWV3KiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oV2ViS2l0V2ViVmlldyosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUp
OworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKFdlYktpdFdlYlZpZXcq
LCBpbnQsIGNvbnN0IGdjaGFyKik7CisgICAgc3RhdGljIGludCBudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhXZWJLaXRXZWJWaWV3Kik7CisKIHByaXZhdGU6CiAg
ICAgc3RhdGljIGJvb2wgc19kcnRSdW47CiAgICAgc3RhdGljIGJvb2wgc19saW5rc0luY2x1ZGVk
SW5UYWJDaGFpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOWIyYjRhZmRhM2RhOGNk
ODhlMWM2YWVlYjVkNzAzN2Q3NjljN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuY3BwCkBAIC0wLDAgKzEs
MjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFphbiBEb2JlcnNlayA8emFuZG9iZXJz
ZWtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0
aW9uQ2xpZW50R3RrLmgiCisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQor
CisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRl
ICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgi
CisjaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZp
ZXdwcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitHZW9sb2NhdGlvbkNsaWVudDo6
R2VvbG9jYXRpb25DbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fd2ViVmll
dyh3ZWJWaWV3KQorICAgICwgbV9nZW9jbHVlQ2xpZW50KDApCisgICAgLCBtX2dlb2NsdWVQb3Np
dGlvbigwKQorICAgICwgbV9sYXRpdHVkZSgwLjApCisgICAgLCBtX2xvbmdpdHVkZSgwLjApCisg
ICAgLCBtX2FsdGl0dWRlKDAuMCkKKyAgICAsIG1fYWNjdXJhY3koMC4wKQorICAgICwgbV9hbHRp
dHVkZUFjY3VyYWN5KDAuMCkKKyAgICAsIG1fdGltZXN0YW1wKDApCisgICAgLCBtX2VuYWJsZUhp
Z2hBY2N1cmFjeShmYWxzZSkKKyAgICAsIG1faXNVcGRhdGluZyhmYWxzZSkKK3sKK30KKworR2Vv
bG9jYXRpb25DbGllbnQ6On5HZW9sb2NhdGlvbkNsaWVudCgpCit7CisgICAgaWYgKG1fZ2VvY2x1
ZUNsaWVudCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVlQ2xpZW50KTsKKworICAg
IGlmIChtX2dlb2NsdWVQb3NpdGlvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVl
UG9zaXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ry
b3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6
OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKworICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHZW9jbHVlTWFzdGVyKiBtYXN0ZXIgPSBnZW9j
bHVlX21hc3Rlcl9nZXRfZGVmYXVsdCgpOworICAgIEdlb2NsdWVNYXN0ZXJDbGllbnQqIGNsaWVu
dCA9IGdlb2NsdWVfbWFzdGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLCAwLCAwKTsKKyAgICBnX29i
amVjdF91bnJlZihtYXN0ZXIpOworCisgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgZXJyb3JP
Y2N1cmVkKCJDb3VsZCBub3QgY29ubmVjdCB0byBsb2NhdGlvbiBwcm92aWRlci4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGFjY3VyYWN5TGV2
ZWwgPSBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA/IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfREVUQUlM
RUQgOiBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0xPQ0FMSVRZOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWlyZW1lbnRzKGNsaWVudCwgYWNjdXJh
Y3lMZXZlbCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQ
dHIoKSk7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3It
Pm1lc3NhZ2UpOworICAgICAgICBnX29iamVjdF91bnJlZihjbGllbnQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9nZW9jbHVlUG9zaXRpb24gPSBnZW9jbHVlX21hc3Rlcl9jbGll
bnRfY3JlYXRlX3Bvc2l0aW9uKGNsaWVudCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoIW1f
Z2VvY2x1ZVBvc2l0aW9uKSB7CisgICAgICAgIGVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7
CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGNsaWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2dlb2NsdWVDbGllbnQgPSBjbGllbnQ7CisKKyAgICBnZW9jbHVlX3Bvc2l0aW9u
X2dldF9wb3NpdGlvbl9hc3luYyhtX2dlb2NsdWVQb3NpdGlvbiwgKEdlb2NsdWVQb3NpdGlvbkNh
bGxiYWNrKWdldFBvc2l0aW9uQ2FsbGJhY2ssIHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVj
dChHX09CSkVDVChtX2dlb2NsdWVQb3NpdGlvbiksICJwb3NpdGlvbi1jaGFuZ2VkIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0socG9zaXRpb25DaGFuZ2VkKSwgdGhpcyk7CisKKyAg
ICBtX2lzVXBkYXRpbmcgPSB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpzdG9w
VXBkYXRpbmcoKQoreworICAgIGlmICghbV9nZW9jbHVlQ2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBnX29iamVjdF91bnJlZihtX2dlb2NsdWVQb3NpdGlvbik7CisgICAgZ19vYmplY3Rf
dW5yZWYobV9nZW9jbHVlQ2xpZW50KTsKKworICAgIG1fZ2VvY2x1ZVBvc2l0aW9uID0gMDsKKyAg
ICBtX2dlb2NsdWVDbGllbnQgPSAwOworCisgICAgbV9pc1VwZGF0aW5nID0gZmFsc2U7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJs
ZSkKK3sKKyAgICBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA9IGVuYWJsZTsKKworICAgIC8vIElmIHdl
J3JlIGFscmVhZHkgdXBkYXRpbmcgd2Ugc2hvdWxkIHJlcG9ydCB0aGUgbmV3IHJlcXVpcmVtZW50
cyBpbiBvcmRlcgorICAgIC8vIHRvIGNoYW5nZSB0byBhIG1vcmUgc3VpdGFibGUgcHJvdmlkZXIg
aWYgbmVlZGVkLgorICAgIGlmIChtX2lzVXBkYXRpbmcpIHsKKyAgICAgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgICAgICBHZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0g
bV9lbmFibGVIaWdoQWNjdXJhY3kgPyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDog
R0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9MT0NBTElUWTsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gZ2VvY2x1ZV9tYXN0ZXJfY2xpZW50X3NldF9yZXF1aXJlbWVudHMobV9nZW9jbHVlQ2xpZW50
LCBhY2N1cmFjeUxldmVsLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEws
ICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAg
IGVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICBzdG9wVXBkYXRpbmco
KTsKKyAgICAgICB9CisgICAgfQorfQorCitXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uKiBH
ZW9sb2NhdGlvbkNsaWVudDo6bGFzdFBvc2l0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9sYXN0UG9z
aXRpb24uZ2V0KCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNz
aW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBjb3JlKG1fd2Vi
VmlldyktPmNocm9tZSgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoZ2Vv
bG9jYXRpb24tPmZyYW1lKCksIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNs
aWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoV2ViQ29yZTo6R2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQoreworICAgIGNvcmUobV93ZWJWaWV3KS0+Y2hyb21lKCktPmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShnZW9sb2NhdGlvbi0+ZnJhbWUoKSwgZ2VvbG9j
YXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZXRQb3NpdGlvbkNhbGxiYWNr
KEdlb2NsdWVQb3NpdGlvbiAqcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVzdGFtcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBs
YXRpdHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBsb25naXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgYWx0aXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiBlcnJvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlb2xvY2F0aW9u
Q2xpZW50KiB0aGF0KQoreworICAgIGlmIChlcnJvcikgeworICAgICAgICB0aGF0LT5lcnJvck9j
Y3VyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRz
LCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgdGhh
dCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnBvc2l0aW9uQ2hhbmdlZChHZW9jbHVl
UG9zaXRpb24qLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1
ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR2VvbG9jYXRpb25DbGllbnQqIHRoYXQpCit7CisgICAgaWYg
KCEoZmllbGRzICYgR0VPQ0xVRV9QT1NJVElPTl9GSUVMRFNfTEFUSVRVREUgJiYgZmllbGRzICYg
R0VPQ0xVRV9QT1NJVElPTl9GSUVMRFNfTE9OR0lUVURFKSkgeworICAgICAgICB0aGF0LT5lcnJv
ck9jY3VyZWQoIlBvc2l0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdGhhdC0+bV90aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAg
dGhhdC0+bV9sYXRpdHVkZSA9IGxhdGl0dWRlOworICAgIHRoYXQtPm1fbG9uZ2l0dWRlID0gbG9u
Z2l0dWRlOworICAgIHRoYXQtPm1fYWx0aXR1ZGUgPSBhbHRpdHVkZTsKKworICAgIEdlb2NsdWVB
Y2N1cmFjeUxldmVsIGxldmVsOworICAgIGdlb2NsdWVfYWNjdXJhY3lfZ2V0X2RldGFpbHMoYWNj
dXJhY3ksICZsZXZlbCwgJnRoYXQtPm1fYWNjdXJhY3ksICZ0aGF0LT5tX2FsdGl0dWRlQWNjdXJh
Y3kpOworICAgIHRoYXQtPnVwZGF0ZVBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25D
bGllbnQ6OnVwZGF0ZVBvc2l0aW9uKCkKK3sKKyAgICBtX2xhc3RQb3NpdGlvbiA9IFdlYkNvcmU6
Okdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxkb3VibGU+KG1fdGltZXN0
YW1wKSwgbV9sYXRpdHVkZSwgbV9sb25naXR1ZGUsIG1fYWNjdXJhY3ksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgbV9hbHRp
dHVkZSwgdHJ1ZSwgbV9hbHRpdHVkZUFjY3VyYWN5LCBmYWxzZSwgMC4wLCBmYWxzZSwgMC4wKTsK
KyAgICBjb3JlKG1fd2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5wb3NpdGlvbkNo
YW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50
OjplcnJvck9jY3VyZWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6R2VvbG9jYXRpb25FcnJvcj4gZXJyb3IgPSBXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yOjpj
cmVhdGUoV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcjo6UG9zaXRpb25VbmF2YWlsYWJsZSwgbWVz
c2FnZSk7CisgICAgY29yZShtX3dlYlZpZXcpLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+ZXJy
b3JPY2N1cnJlZChlcnJvci5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2FiMmZlMzY4
Mzk2YzJkMTc4NzkwMThmN2Y3OWIwMjMzYjZlZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaApAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFphbiBEb2JlcnNlayA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvbkNsaWVudEd0a19oCisjZGVm
aW5lIEdlb2xvY2F0aW9uQ2xpZW50R3RrX2gKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50
LmgiCisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorCisjaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rl
ci5oPgorI2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlvbi5oPgorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBHZW9sb2NhdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdl
b2xvY2F0aW9uQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBHZW9sb2NhdGlvbkNsaWVudChXZWJLaXRXZWJWaWV3Kik7CisKKyAgICB2b2lk
IGdlb2xvY2F0aW9uRGVzdHJveWVkKCk7CisKKyAgICB2b2lkIHN0YXJ0VXBkYXRpbmcoKTsKKyAg
ICB2b2lkIHN0b3BVcGRhdGluZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3ko
Ym9vbCk7CisgICAgV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbiogbGFzdFBvc2l0aW9uKCk7
CisKKyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7Cisg
ICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdChXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwor
Citwcml2YXRlOgorICAgIH5HZW9sb2NhdGlvbkNsaWVudCgpOworCisgICAgc3RhdGljIHZvaWQg
cG9zaXRpb25DaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3NpdGlvbkZpZWxkcywg
aW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBHZW9jbHVlQWNjdXJhY3kqLCBHZW9sb2NhdGlv
bkNsaWVudCopOworICAgIHN0YXRpYyB2b2lkIGdldFBvc2l0aW9uQ2FsbGJhY2soR2VvY2x1ZVBv
c2l0aW9uKiwgR2VvY2x1ZVBvc2l0aW9uRmllbGRzLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUsIEdlb2NsdWVBY2N1cmFjeSosIEdFcnJvciosIEdlb2xvY2F0aW9uQ2xpZW50Kik7CisKKyAg
ICB2b2lkIHVwZGF0ZVBvc2l0aW9uKCk7CisgICAgdm9pZCBlcnJvck9jY3VyZWQoY29uc3QgY2hh
ciopOworCisgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworCisgICAgUmVmUHRyPFdlYkNv
cmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOworCisgICAgR2VvY2x1ZU1h
c3RlckNsaWVudCogbV9nZW9jbHVlQ2xpZW50OworICAgIEdlb2NsdWVQb3NpdGlvbiogbV9nZW9j
bHVlUG9zaXRpb247CisKKyAgICBkb3VibGUgbV9sYXRpdHVkZTsKKyAgICBkb3VibGUgbV9sb25n
aXR1ZGU7CisgICAgZG91YmxlIG1fYWx0aXR1ZGU7CisgICAgZG91YmxlIG1fYWNjdXJhY3k7Cisg
ICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBpbnQgbV90aW1lc3RhbXA7CisKKyAg
ICBib29sIG1fZW5hYmxlSGlnaEFjY3VyYWN5OworICAgIGJvb2wgbV9pc1VwZGF0aW5nOworfTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9H
RU9MT0NBVElPTikKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uQ2xpZW50R3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCBjNzk4NmI5MDJlYjcyMWRh
MmE5YTdjNmUxZTE2NTdkNzViZTcxZWI5Li40Mjk1OGUwNjNiYjFhOGQzMmY1NTRlODU0MWQzNDIz
YThlMzc0ODcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiRHJhZ0NsaWVudEd0ay5oIgogI2luY2x1ZGUg
IkRyYWdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJF
ZGl0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKQEAgLTU1LDYgKzU2
LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyVHlwZXMuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlv
bkNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1
ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJHdGtVdGlsaXRpZXMuaCIKQEAgLTMzODksOCArMzM5MiwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHBhZ2VDbGllbnRz
LmRldmljZU9yaWVudGF0aW9uQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQqPihuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRHdGspOwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIGlmIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAgICAgICAg
cGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcgR2VvbG9jYXRpb25DbGllbnRNb2Nr
OworICAgIGVsc2UKKyAgICAgICAgcGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcg
V2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudCh3ZWJWaWV3KTsKKyNlbmRpZgorCiAgICAgcHJpdi0+
Y29yZVBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CiAKKyNpZiBFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQorICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBS
ZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25D
bGllbnRNb2NrKj4ocGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQpLT5zZXRDb250cm9sbGVy
KHByaXYtPmNvcmVQYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKSk7CisjZW5kaWYKKwogICAg
IC8vIFBhZ2VzIHdpdGhpbiBhIHNhbWUgc2Vzc2lvbiBuZWVkIHRvIGJlIGxpbmtlZCB0b2dldGhl
ciBvdGhlcndpc2Ugc29tZSBmdW5jdGlvbmFsaXRpZXMgc3VjaAogICAgIC8vIGFzIHZpc2l0ZWQg
bGluayBjb2xvcmF0aW9uIChhY3Jvc3MgcGFnZXMpIGFuZCBjaGFuZ2luZyBwb3B1cCB3aW5kb3cg
bG9jYXRpb24gd2lsbCBub3Qgd29yay4KICAgICAvLyBUbyBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2
aW9yIHNpbXBsZSAoYW5kIGJlY2F1c2Ugbm8gUGFnZUdyb3VwIEFQSSBleGlzdCBpbiBXZWJLaXRH
VEsgYXQgdGhlCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMGU1YTg5YzQwNjhiMDc5MjQ0NjVhNzlkOWYzNmY4MGFmMGRiYTM1Yy4uZDYzYzY3ZmEy
ZmNhZmI1YTVhYzc0ZjIyY2EzNmY4NTc3MDkxMjg5YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTA3LTIxICBa
YW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3Vw
cG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0ZXN0aW5nIGNsaWVudC1i
YXNlZCBnZW9sb2NhdGlvbiB0ZXN0cyBpbiBEdW1wUmVuZGVyVHJlZQorICAgICAgICBhbmQgdHVy
biBzYWlkIGZ1dHVyZSBvbiBieSBkZWZhdWx0IGZvciB0aGUgR3RrIHBvcnQuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAocmVzZXRE
ZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyk6IFJlc2V0IEdlb2xvY2F0aW9uQ2xpZW50TW9jay4K
KyAgICAgICAgKGNyZWF0ZVdlYlZpZXcpOiBDcmVhdGUgd2ViIHZpZXcgYWZ0ZXIgZGVjbGFyaW5n
IER1bXBSZW5kZXJUcmVlIG1vZGUuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcDogSW1wbGVtZW50IGZ1bmN0aW9ucyBmb3IKKyAgICAgICAg
Z2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6Cisg
ICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6IFR1cm4gb24gY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uIHN1cHBvcnQgZm9yIEd0ay4KKwogMjAxMS0wNy0yMSAgT2phbiBWYWZhaSAgPG9qYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGNsZWFudXAganNvbnJlc3VsdHMucHkgc3R5bGUgaW4g
cHJlcGFyYXRpb24gZm9yIG1ha2luZyBzb21lIGNoYW5nZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGMxZDc5NWM1NjI4OTFmZjI2NTk3MjE4MGFj
YjhjOGQzNmM0YmIxNmUuLjlkOWE4YzIyN2Y4ZDUzNDU0OGY3MGU1YjZjYTNlNzhiZTQxYjkxM2Eg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNDc1
LDYgKzQ3NSw4IEBAIHN0YXRpYyB2b2lkIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMo
KQogICAgICAgICBheENvbnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y2xlYXJPcGVuZXIobWFpbkZyYW1lKTsKKworICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cmVzZXRHZW9sb2NhdGlvbkNsaWVudE1vY2sod2Vi
Vmlldyk7CiB9CiAKIHN0YXRpYyBib29sIHVzZUxvbmdSdW5uaW5nU2VydmVyTW9kZShpbnQgYXJn
YywgY2hhciAqYXJndltdKQpAQCAtMTA4MiwxMCArMTA4NCwxMCBAQCBzdGF0aWMgdm9pZCB3aWxs
U2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFt
ZSosIFdlYgogCiBzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlV2ViVmlldygpCiB7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREdW1wUmVuZGVyVHJlZU1v
ZGVFbmFibGVkKHRydWUpOwogCisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworCiAgICAgZ19vYmplY3RfY29ubmVjdChHX09C
SkVDVCh2aWV3KSwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmxvYWQtc3RhcnRlZCIs
IHdlYlZpZXdMb2FkU3RhcnRlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omxv
YWQtZmluaXNoZWQiLCB3ZWJWaWV3TG9hZEZpbmlzaGVkLCAwLApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggOThjYzFk
ZDk4ZmFmMjE3MWVkOGJmYWE5ODNmZmMyNTZmMDA2Y2FiOS4uY2RiOTIxY2UwNDgyOWQyZTg2YWE2
MmUwOTViMzg1MzAwY2U1NGFjOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC00NzQsMjYgKzQ3NCw0NSBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Q
cm92aWRlQWxwaGEsIGRvdWJsZQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlv
biBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODI2NC4KKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9W
SUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwor
ICAgIEFTU0VSVCh2aWV3KTsKKworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24odmlldywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kp
OwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJv
cihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsK
KyAgICBpZiAoIXZpZXcpCisgICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJf
dmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIGdjaGFyKiBjTWVzc2Fn
ZSA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKG1lc3NhZ2UpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IodmlldywgY29kZSwgY01lc3NhZ2Up
OworICAgIGdfZnJlZShjTWVzc2FnZSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICBzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb25Db21tb24oYWxsb3cpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICgh
dmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHZpZXcsIGFsbG93KTsKIH0KIAogaW50IExh
eW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0cygpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgotICAgIHJldHVybiAtMTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwor
ICAgIEFTU0VSVCh2aWV3KTsKKworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHZpZXcpOwogfQog
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNT
dHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2Up
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0CmluZGV4IDE2MzZhZDJjYWQ3Njk2YzVkNWM4ZjExMGI4YTI4ZGM5OWVmZDVh
ZjEuLjAwZmZjN2JmZDAxN2M0NmQ3YTZmYmI2NjQ2NTgwY2E2NWYwOWVjMzYgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CkBAIC0xNTEsNyArMTUxLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5lID0+
ICJFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkY2hh
bm5lbE1lc3NhZ2luZ1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJjbGllbnQtYmFzZWQt
Z2VvbG9jYXRpb24iLCBkZXNjID0+ICJUb2dnbGUgY2xpZW50LWJhc2VkIEdlb2xvY2F0aW9uIHN1
cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9O
IiwgZGVmYXVsdCA9PiBpc0FwcGxlV2ViS2l0KCksIHZhbHVlID0+IFwkY2xpZW50QmFzZWRHZW9s
b2NhdGlvblN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NMSUVOVF9CQVNFRF9H
RU9MT0NBVElPTiIsIGRlZmF1bHQgPT4gKGlzQXBwbGVXZWJLaXQoKSB8fCBpc0d0aygpKSwgdmFs
dWUgPT4gXCRjbGllbnRCYXNlZEdlb2xvY2F0aW9uU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24g
PT4gImNzczMtZmxleGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBDU1MzIEZsZXhib3ggc3VwcG9ydCIs
CiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1MzX0ZMRVhCT1giLCBkZWZhdWx0ID0+IDAsIHZh
bHVlID0+IFwkY3NzM0ZsZXhib3hTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg
Yi9jb25maWd1cmUuYWMKaW5kZXggYWJmMTFhNThhM2Y1NDkwODRjY2YxMDY3ZTI1N2JkOWI0MjY5
NzQwZS4uZGMyMjFlNzA4ZTEzMDFlMmI4OTVmMzU2ZDJlNGNhYzE1ZmE5Njk0NiAxMDA2NDQKLS0t
IGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNjIzLDggKzYyMyw4IEBAIEFD
X01TR19SRVNVTFQoWyRlbmFibGVfZ2VvbG9jYXRpb25dKQogQUNfTVNHX0NIRUNLSU5HKFt3aGV0
aGVyIHRvIGVuYWJsZSBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gc3VwcG9ydF0pCiBBQ19BUkdf
RU5BQkxFKGNsaWVudF9iYXNlZF9nZW9sb2NhdGlvbiwKICAgICAgICAgICAgICAgQUNfSEVMUF9T
VFJJTkcoWy0tZW5hYmxlLWNsaWVudC1iYXNlZC1nZW9sb2NhdGlvbl0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtlbmFibGUgc3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0
aW9uIFtkZWZhdWx0PW5vXV0pLAotICAgICAgICAgICAgICBbXSxbZW5hYmxlX2NsaWVudF9iYXNl
ZF9nZW9sb2NhdGlvbj0ibm8iXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJs
ZSBzdXBwb3J0IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gW2RlZmF1bHQ9eWVzXV0pLAor
ICAgICAgICAgICAgICBbXSxbZW5hYmxlX2NsaWVudF9iYXNlZF9nZW9sb2NhdGlvbj0ieWVzIl0p
CiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2NsaWVudF9iYXNlZF9nZW9sb2NhdGlvbl0pCiAKICMg
Y2hlY2sgd2hldGhlciB0byBlbmFibGUgTWF0aE1MIHN1cHBvcnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103182</attachid>
            <date>2011-08-07 10:00:16 -0700</date>
            <delta_ts>2011-10-08 04:00:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64970-20110807190015.patch</filename>
            <type>text/plain</type>
            <size>31150</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1NzMKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCA2OTdmMTFhZWJlNmE2YWRlMDg3NmYyNmUwNjgzM2UxZTU1NjM3YzEzLi41MDdi
N2E4MzkyYmU5MzkwZTEzZjAxZWE2YTRjMTVkM2Y1NmYzYjc4IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgtMDcgIFphbiBEb2Jl
cnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZv
ciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRW5hYmxlIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiBzdXBwb3J0
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMTEtMDgtMDYgIEFy
b24gUm9zZW5iZXJnICA8YXJvc2VuYmVyZ0Bsb2dpdGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjZWU0NjIyYWM3YTllM2ZhZmVkMWU4Mzkz
MTFiNGNkZDcyNGExNGQ0Li45MTAxMjdmNTA5NGFjMjNmNGU5N2IzYmZjY2Y1NDcyM2JmMjQ5ZjE2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgtMDcgIFphbiBEb2JlcnNlayAgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFz
ZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVW5za2lwIGdlb2xvY2F0aW9uIHRlc3RzIHRoYXQgbm93IHBhc3MuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKwogMjAxMS0wOC0wNyAgU2FtIFdoaXRlICA8c2FtdWVs
LndoaXRlQHJvY2hlc3Rlci5lZHU+CiAKICAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIHNlYXJj
aCB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBjYWNoZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApp
bmRleCA3MWVkNzU5ODYzNzg0NzAwNzkxZWYwZTM5ZTJiNjExZTYzYWM0Y2IzLi44YWVmZDVjYzk5
MDNkYzA3MTJlYzlmYjU4ZjBlMDFiZjk5M2IzNDdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZApAQCAtODM4LDQzICs4MzgsNiBAQCBmYXN0L2V2ZW50cy93aGVlbGV2ZW50LWluLWhvcml6b250
YWwtc2Nyb2xsYmFyLWluLXJ0bC5odG1sCiBmYXN0L2V2ZW50cy93aGVlbGV2ZW50LWluLXZlcnRp
Y2FsLXNjcm9sbGJhci1pbi1ydGwuaHRtbAogZmFzdC9ldmVudHMvc2Nyb2xsLWluLXNjYWxlZC1w
YWdlLXdpdGgtb3ZlcmZsb3ctaGlkZGVuLmh0bWwKIAotCi0jIE5lZWRzIG1vY2sgc3VwcG9ydCwg
YW5kIGJ1aWxkIHNsYXZlIEdlb2xvY2F0aW9uIHNlcnZpY2UKLSMgU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjA1MwotZmFzdC9kb20vR2VvbG9jYXRpb24vY2Fs
bGJhY2stZXhjZXB0aW9uLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlz
c2lvbi1hbGxvd2VkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlv
bi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLWZhc3Qv
ZG9tL0dlb2xvY2F0aW9uL2Vycm9yLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0t
YWdlLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL211bHRpcGxlLXJlcXVlc3RzLmh0bWwKLWZh
c3QvZG9tL0dlb2xvY2F0aW9uL25vLXBhZ2UtY2FjaGUuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRp
b24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1jbGVhci13YXRjaC5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9wb3NpdGlvbi1zdHJpbmcuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcmVl
bnRyYW50LWVycm9yLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3JlZW50cmFudC1wZXJtaXNz
aW9uLWRlbmllZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVudHJhbnQtc3VjY2Vzcy5o
dG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdWNjZXNzLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0
aW9uL3RpbWVvdXQtY2xlYXItd2F0Y2guaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vdGltZW91
dC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi90aW1lc3RhbXAuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vd2F0Y2guaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vd2luZG93LWNsb3NlLWNy
YXNoLmh0bWwKLQotIyBOZWVkcyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MTk3Ci1mYXN0L2RvbS9HZW9sb2NhdGlvbi9wYWdlLXJl
bG9hZC1jYW5jZWwtcGVybWlzc2lvbi1yZXF1ZXN0cy5odG1sCi0KLSMgV2UncmUgbm90IHF1aXRl
IHJlYWR5IHRvIHJ1biB0aGVzZSB0ZXN0cywgYmVjYXVzZSB0aGUgc2xhdmVzIG5lZWQKLSMgR2Vv
Y2x1ZSBzdXBwb3J0LiBJZiB3ZSBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlIG1vY2sgZ2VvbG9j
YXRpb24gc2VydmljZQotIyBtYXliZSB3ZSBjYW4gYXZvaWQgdGhpcy4KLSMgU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTY3NAotZmFzdC9kb20vR2VvbG9jYXRp
b24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5odG1sCi1mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC5odG1sCi0KICMgTWlzc2VzIHNldE1lZGlhVHlw
ZSgpIGltcGxlbWVudGF0aW9uCiBmYXN0L21lZGlhL3ByaW50LXJlc3RvcmVzLXByZXZpb3VzLW1l
ZGlhdHlwZS5odG1sCiAKQEAgLTEwMjYsMTQgKzk4OSw2IEBAIGZhc3QvbG9hZGVyL251bGwtcmVx
dWVzdC1hZnRlci13aWxsU2VuZFJlcXVlc3QuaHRtbAogZWRpdGluZy9zcGVsbGluZy9jb250ZXh0
LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vY29udGV4dC1tZW51LW9u
LXRleHQuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MDE1MwotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQuaHRt
bAotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQyLmh0bWwK
LWZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAotZmFzdC9kb20vR2VvbG9j
YXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLQogIyBTb21l
IGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplIAogIyBvZiB0
aGUgc2xpZGVyIHRodW1iIGluIEdUSysgdGhlbWVzLgogZmFzdC9mb3Jtcy9zbGlkZXItbW91c2Ut
ZXZlbnRzLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2U0NDUyOGY0ZmYwODA4NjkxNDgyZDUzY2I0MDEw
YTJlMDA2MjgzLi5lNTgxMmEzMTQxMDM2OGRkNTIzMTg0MGMyYWQxMGFhNTZkYzY2NDYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDgtMDcgIFphbiBEb2JlcnNlayAgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFz
ZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGZlYXR1cmUgZGVmaW5lcyBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIGZl
YXR1cmUgYW5kIGFkZCBjb21waWxhdGlvbiBndWFyZAorICAgICAgICB0byBHZW9sb2NhdGlvblNl
cnZpY2VHdGsgdG8gcHJldmVudCBpdCBmcm9tIGNvbXBpbGluZyB3aGVuIG5vdCBuZWVkZWQuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2VvbG9j
YXRpb25TZXJ2aWNlR3RrLmNwcDoKKwogMjAxMS0wOC0wNyAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgRGlzdHJpYnV0aW9uIGZpeCBmb3IgR1RLKy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZTMzNDg1MzJhMDFhYjRmODg4MDkyNTNlMTc5MGI2ZTE5
MzY1MzBiMC4uNTA0NjdjYzE1OTI4MTBmYWRjNTcwZmI5ZWI0NWMyNTlkYWUyNjM5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTQ1Niw2ICs0NTYsMTUgQEAgd2ViY29yZV9jcHBmbGFncyArPSAt
REVOQUJMRV9HRU9MT0NBVElPTj0xCiBlbmRpZiAjIEVORCBFTkFCTEVfR0VPTE9DQVRJT04KIAog
IyAtLS0tCisjIENsaWVudC1iYXNlZCBnZW9sb2NhdGlvbgorIyAtLS0tCitpZiBFTkFCTEVfQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OCisKK0ZFQVRVUkVfREVGSU5FUyArPSBFTkFCTEVfQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OPTEKK3dlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OPTEKK2VuZGlmICMgRU5EIEVOQUJMRV9DTElFTlRfQkFTRURfR0VP
TE9DQVRJT04KKworIyAtLS0tCiAjIE1hdGhNTCBzdXBwb3J0CiAjIC0tLS0KIGlmIEVOQUJMRV9N
QVRITUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2NhdGlv
blNlcnZpY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9u
U2VydmljZUd0ay5jcHAKaW5kZXggOGMzZDQ1NmZhZDQwMTQxMTRjMGJkYWRhNDllNzA1ZTkxMjVi
OTRlNi4uNGRhN2E5M2IyNWMzM2RmYTE1MGU5OGZmZDFiNzlkMzBkODI3ZGQ5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5j
cHAKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uU2VydmljZUd0ay5oIgotI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyNpZiBFTkFC
TEUoR0VPTE9DQVRJT04pICYmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQogCiAj
aW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggYmFmZjM1MGUyN2ZkNjdlNjI1OTQzMjFjYjVhYzRlMDI5MzEzOGE0Zi4uN2Q1
MTdjNGY4NDIyNTMzYzE2ZTdiNTRjYTg1NDM2ZWFmYjI4ZDU0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQxIEBACisyMDExLTA4LTA3ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uIHRlc3RzCisgICAgICAgIGFuZCBpbXBsZW1lbnQgR2VvbG9jYXRpb25DbGllbnRHdGsu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZpbGVzIHRvIGNvbXBpbGF0aW9uLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6IEFk
ZCBzdXBwb3J0IGZ1bmN0aW9ucyB0byBvcGVyYXRlCisgICAgICAgIHdpdGggR2VvbG9jYXRpb25D
bGllbnRNb2NrLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZXNldEdlb2xv
Y2F0aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
dE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKToKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmdldFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViS2l0Ojpwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Okdl
b2xvY2F0aW9uQ2xpZW50OjpHZW9sb2NhdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okdl
b2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6
Okdlb2xvY2F0aW9uQ2xpZW50OjpzdGFydFVwZGF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjpzZXRFbmFibGVIaWdoQWNjdXJhY3kpOgorICAgICAgICAoV2ViS2l0OjpHZW9s
b2NhdGlvbkNsaWVudDo6bGFzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6R2Vv
bG9jYXRpb25DbGllbnQ6OnBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xv
Y2F0aW9uQ2xpZW50Ojp1cGRhdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uQ2xpZW50OjplcnJvck9jY3VyZWQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xv
Y2F0aW9uQ2xpZW50R3RrLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KTogVXNlIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jayBhcyBnZW9sb2NhdGlvbiBjbGllbnQKKyAgICAgICAgd2hlbiBydW5uaW5nIGluIER1
bXBSZW5kZXJUcmVlLgorCiAyMDExLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29v
Z2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbVGltZWxpbmVdIEhvdmVyIG9uIHBh
aW50IGV2ZW50cyBhbmQgc2VlIHJlY3Qgb3V0bGluZSBhcm91bmQgdGhhdCBhcmVhLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbQppbmRleCBjZGJkMjhiMjg2MzM1M2I2ZmZkNzc3ZDAyNmE2Y2UyYzQz
MTI0ODQ2Li45NmI3OGMwMDY0NWVmYmI0N2MwZTAyNmM0YWMxMjBjYWEwMmMyMGMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjAwLDYgKzIwMCw4IEBAIHdlYmtpdGd0a19zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdD
b250ZXh0R3RrLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNwcCBcCisJU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaCBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HdGtBZGp1c3RtZW50V2F0Y2hlci5oIFwKIAlTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDVkNWEwNzgyMjVlYjAxYmU5OWM3ZGNhOWI1MmQyMDI3
Y2NiMmYwZjkuLjdjODFjZTc4MDJmOWE3ZjA5N2IzMDg3Mjk5MmZmZjlkNzAxZGU3ZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudE1vY2suaCIKKyNpbmNsdWRlICJHZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpA
QCAtODA5LDMgKzgxMyw1OSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2NhbGVQ
YWdlQnkoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZmxvYXQgc2NhbGVGYQogCiAgICAgY29yZUZy
YW1lLT5zY2FsZVBhZ2Uoc2NhbGVGYWN0b3IsIEludFBvaW50KHgsIHkpKTsKIH0KKwordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0R2VvbG9jYXRpb25DbGllbnRNb2NrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElP
TikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2sgPSBzdGF0aWNfY2FzdDxHZW9sb2Nh
dGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+
Y2xpZW50KCkpOworICAgIG1vY2stPnJlc2V0KCk7CisjZW5kaWYKK30KKwordm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24oV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgYm9vbCBhbGxvd2VkKQoreworI2lmIEVOQUJMRShDTElFTlRfQkFTRURf
R0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrID0gc3RhdGljX2Nh
c3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3ZWJWaWV3KS0+Z2VvbG9jYXRpb25Db250
cm9sbGVyKCktPmNsaWVudCgpKTsKKyAgICBtb2NrLT5zZXRQZXJtaXNzaW9uKGFsbG93ZWQpOwor
I2VuZGlmCit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRp
Y19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9u
Q29udHJvbGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZ19nZXRf
cmVhbF90aW1lKCkgLyAxMDAwMDAwLjA7CisgICAgbW9jay0+c2V0UG9zaXRpb24oR2VvbG9jYXRp
b25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJh
Y3kpKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9j
a0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgaW50IGVycm9yQ29kZSwg
Y29uc3QgZ2NoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dF
T0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRpY19jYXN0
PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJv
bGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBHZW9sb2NhdGlvbkVycm9yOjpFcnJvckNvZGUgY29k
ZTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgIGNhc2UgUG9zaXRpb25FcnJvcjo6UEVS
TUlTU0lPTl9ERU5JRUQ6CisgICAgICAgIGNvZGUgPSBHZW9sb2NhdGlvbkVycm9yOjpQZXJtaXNz
aW9uRGVuaWVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvc2l0aW9uRXJyb3I6OlBPU0lU
SU9OX1VOQVZBSUxBQkxFOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGNvZGUgPSBHZW9sb2NhdGlv
bkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBtb2NrLT5zZXRFcnJvcihHZW9sb2NhdGlvbkVycm9yOjpjcmVhdGUoY29kZSwgZXJyb3JNZXNz
YWdlKSk7CisjZW5kaWYKK30KKworaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVy
T2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xv
Y2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9j
ayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7Cisg
ICAgcmV0dXJuIG1vY2stPm51bWJlck9mUGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cygpOworI2Vs
c2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmggYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAppbmRleCA3
M2M0NDVhNmNmMDc5YTljN2Y4MzFmYWRjNjM0OWEzYTBiZmQ1ZjBiLi40MmYxMTNiNTI3MGQzYWE5
YTZmMTQ0NDc5YjE5YTkyMmQ5MTQ5ZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaApAQCAtMTIw
LDYgKzEyMCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGludCB3b3JrZXJUaHJl
YWRDb3VudCgpOwogICAgIHN0YXRpYyBib29sIHdlYmtpdFdlYkZyYW1lU2VsZWN0aW9uSGFzU3Bl
bGxpbmdNYXJrZXIoV2ViS2l0V2ViRnJhbWUqLCBnaW50IGZyb20sIGdpbnQgbGVuZ3RoKTsKIAor
ICAgIHN0YXRpYyB2b2lkIHJlc2V0R2VvbG9jYXRpb25DbGllbnRNb2NrKFdlYktpdFdlYlZpZXcq
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFdlYktpdFdl
YlZpZXcqLCBib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihXZWJLaXRXZWJWaWV3KiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgICAgc3RhdGljIHZv
aWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0V2ViVmlldyosIGludCwgY29uc3QgZ2No
YXIqKTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKFdlYktpdFdlYlZpZXcqKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBz
X2RydFJ1bjsKICAgICBzdGF0aWMgYm9vbCBzX2xpbmtzSW5jbHVkZWRJblRhYkNoYWluOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NjZkZDlhYzA5ZWI1ZjAxZTVlMTcwMmZiMWUyZGQx
N2M5Nzk2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRHdGsuaCIK
KworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJDaHJv
bWUuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJHZW9s
b2NhdGlvblBvc2l0aW9uLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgZ2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVlUG9z
aXRpb24gKnBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0
YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
R2VvY2x1ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR0Vycm9yKiBlcnJvciwgR2VvbG9jYXRpb25DbGll
bnQqIGNsaWVudCkKK3sKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgY2xpZW50LT5lcnJvck9j
Y3VyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNsaWVudC0+cG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9u
LCBmaWVsZHMsIHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3Vy
YWN5KTsKK30KKwordm9pZCBwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayhHZW9jbHVlUG9zaXRpb24q
IHBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1
ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBj
bGllbnQtPnBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0
dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK0dlb2xvY2F0aW9uQ2xp
ZW50OjpHZW9sb2NhdGlvbkNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogbV93
ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX2dlb2NsdWVDbGllbnQoMCkKKyAgICAsIG1fZ2VvY2x1
ZVBvc2l0aW9uKDApCisgICAgLCBtX2xhdGl0dWRlKDAuMCkKKyAgICAsIG1fbG9uZ2l0dWRlKDAu
MCkKKyAgICAsIG1fYWx0aXR1ZGUoMC4wKQorICAgICwgbV9hY2N1cmFjeSgwLjApCisgICAgLCBt
X2FsdGl0dWRlQWNjdXJhY3koMC4wKQorICAgICwgbV90aW1lc3RhbXAoMCkKKyAgICAsIG1fZW5h
YmxlSGlnaEFjY3VyYWN5KGZhbHNlKQorICAgICwgbV9pc1VwZGF0aW5nKGZhbHNlKQoreworfQor
Cit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCgpCit7CisgICAg
ZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnN0YXJ0VXBkYXRpbmco
KQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKworICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKKyAgICBHUmVmUHRyPEdlb2NsdWVNYXN0ZXI+IG1hc3RlciA9IGFkb3B0R1JlZihn
ZW9jbHVlX21hc3Rlcl9nZXRfZGVmYXVsdCgpKTsKKyAgICBHUmVmUHRyPEdlb2NsdWVNYXN0ZXJD
bGllbnQ+IGNsaWVudCA9IGFkb3B0R1JlZihnZW9jbHVlX21hc3Rlcl9jcmVhdGVfY2xpZW50KG1h
c3Rlci5nZXQoKSwgMCwgMCkpOworCisgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgZXJyb3JP
Y2N1cmVkKCJDb3VsZCBub3QgY29ubmVjdCB0byBsb2NhdGlvbiBwcm92aWRlci4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGFjY3VyYWN5TGV2
ZWwgPSBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA/IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfREVUQUlM
RUQgOiBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0xPQ0FMSVRZOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWlyZW1lbnRzKGNsaWVudC5nZXQoKSwg
YWNjdXJhY3lMZXZlbCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsICZlcnJv
ci5vdXRQdHIoKSk7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBlcnJvck9jY3VyZWQo
ZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nZW9jbHVl
UG9zaXRpb24gPSBhZG9wdEdSZWYoZ2VvY2x1ZV9tYXN0ZXJfY2xpZW50X2NyZWF0ZV9wb3NpdGlv
bihjbGllbnQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghbV9nZW9jbHVlUG9z
aXRpb24pIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fZ2VvY2x1ZUNsaWVudCA9IGNsaWVudDsKKworICAgIGdl
b2NsdWVfcG9zaXRpb25fZ2V0X3Bvc2l0aW9uX2FzeW5jKG1fZ2VvY2x1ZVBvc2l0aW9uLmdldCgp
LCAoR2VvY2x1ZVBvc2l0aW9uQ2FsbGJhY2spZ2V0UG9zaXRpb25DYWxsYmFjaywgdGhpcyk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG1fZ2VvY2x1ZVBvc2l0aW9uLmdldCgpKSwg
InBvc2l0aW9uLWNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhwb3Np
dGlvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgbV9pc1VwZGF0aW5nID0gdHJ1ZTsK
K30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBpZiAo
IW1fZ2VvY2x1ZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9nZW9jbHVlUG9zaXRp
b24uY2xlYXIoKTsKKyAgICBtX2dlb2NsdWVDbGllbnQuY2xlYXIoKTsKKworICAgIG1faXNVcGRh
dGluZyA9IGZhbHNlOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpzZXRFbmFibGVIaWdo
QWNjdXJhY3koYm9vbCBlbmFibGUpCit7CisgICAgbV9lbmFibGVIaWdoQWNjdXJhY3kgPSBlbmFi
bGU7CisKKyAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIHdlIHNob3VsZCByZXBvcnQg
dGhlIG5ldyByZXF1aXJlbWVudHMgaW4gb3JkZXIKKyAgICAvLyB0byBjaGFuZ2UgdG8gYSBtb3Jl
IHN1aXRhYmxlIHByb3ZpZGVyIGlmIG5lZWRlZC4KKyAgICBpZiAobV9pc1VwZGF0aW5nKSB7Cisg
ICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR2VvY2x1ZUFjY3VyYWN5TGV2
ZWwgYWNjdXJhY3lMZXZlbCA9IG1fZW5hYmxlSGlnaEFjY3VyYWN5ID8gR0VPQ0xVRV9BQ0NVUkFD
WV9MRVZFTF9ERVRBSUxFRCA6IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfTE9DQUxJVFk7CisgICAg
ICAgIGdib29sZWFuIHJlc3VsdCA9IGdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWlyZW1l
bnRzKG1fZ2VvY2x1ZUNsaWVudC5nZXQoKSwgYWNjdXJhY3lMZXZlbCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsIEdFT0NMVUVfUkVTT1VSQ0VfQUxMLCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3ItPm1lc3NhZ2UpOwor
ICAgICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CisgICAgICAgfQorICAgIH0KK30KKworV2ViQ29y
ZTo6R2VvbG9jYXRpb25Qb3NpdGlvbiogR2VvbG9jYXRpb25DbGllbnQ6Omxhc3RQb3NpdGlvbigp
Cit7CisgICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgpOworfQorCit2b2lkIEdlb2xvY2F0
aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpHZW9sb2NhdGlvbiogZ2VvbG9j
YXRpb24pCit7CisgICAgY29yZShtX3dlYlZpZXcpLT5jaHJvbWUoKS0+cmVxdWVzdEdlb2xvY2F0
aW9uUGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uLT5mcmFtZSgpLCBnZW9sb2NhdGlvbik7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KFdl
YkNvcmU6Okdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBjb3JlKG1fd2ViVmlldykt
PmNocm9tZSgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoZ2Vv
bG9jYXRpb24tPmZyYW1lKCksIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNs
aWVudDo6cG9zaXRpb25DaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3NpdGlvbkZp
ZWxkcyBmaWVsZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5KQoreworICAg
IGlmICghKGZpZWxkcyAmIEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xBVElUVURFICYmIGZpZWxk
cyAmIEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xPTkdJVFVERSkpIHsKKyAgICAgICAgZXJyb3JP
Y2N1cmVkKCJQb3NpdGlvbiBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fdGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIG1fbGF0aXR1
ZGUgPSBsYXRpdHVkZTsKKyAgICBtX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgICBtX2FsdGl0
dWRlID0gYWx0aXR1ZGU7CisKKyAgICBnZW9jbHVlX2FjY3VyYWN5X2dldF9kZXRhaWxzKGFjY3Vy
YWN5LCAwLCAmbV9hY2N1cmFjeSwgJm1fYWx0aXR1ZGVBY2N1cmFjeSk7CisKKyAgICB1cGRhdGVQ
b3NpdGlvbigpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50Ojp1cGRhdGVQb3NpdGlvbigp
Cit7CisgICAgbV9sYXN0UG9zaXRpb24gPSBXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RpbWVzdGFtcCksIG1fbGF0aXR1ZGUsIG1fbG9u
Z2l0dWRlLCBtX2FjY3VyYWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIG1fYWx0aXR1ZGUsIHRydWUsIG1fYWx0aXR1ZGVB
Y2N1cmFjeSwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCk7CisgICAgY29yZShtX3dlYlZpZXcpLT5n
ZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+cG9zaXRpb25DaGFuZ2VkKG1fbGFzdFBvc2l0aW9uLmdl
dCgpKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6ZXJyb3JPY2N1cmVkKGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+IGVy
cm9yID0gV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKFdlYkNvcmU6Okdlb2xvY2F0
aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUsIG1lc3NhZ2UpOworICAgIGNvcmUobV93ZWJW
aWV3KS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmVycm9yT2NjdXJyZWQoZXJyb3IuZ2V0KCkp
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyMGQ1YmI1MGNiZjUyOTE5NDUyZjRkNjRhMzlkYWI3
MTVkODc4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgR2VvbG9jYXRpb25DbGllbnRHdGtfaAorI2RlZmluZSBHZW9sb2NhdGlvbkNsaWVudEd0
a19oCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudC5oIgorCisjaWYgRU5BQkxFKENMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTikKKworI2luY2x1ZGUgIkdSZWZQdHIuaCIKKyNpbmNsdWRlICJH
ZW9sb2NhdGlvblBvc2l0aW9uLmgiCisjaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rlci5o
PgorI2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlvbi5oPgorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBHZW9sb2NhdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdlb2xv
Y2F0aW9uQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBHZW9sb2NhdGlvbkNsaWVudChXZWJLaXRXZWJWaWV3Kik7CisKKyAgICB2b2lkIGdl
b2xvY2F0aW9uRGVzdHJveWVkKCk7CisKKyAgICB2b2lkIHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2
b2lkIHN0b3BVcGRhdGluZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9v
bCk7CisgICAgV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbiogbGFzdFBvc2l0aW9uKCk7CisK
KyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CisgICAg
dm9pZCBjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdChXZWJDb3JlOjpHZW9sb2NhdGlvbiopOworCisg
ICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQoR2VvY2x1ZVBvc2l0aW9uKiwgR2VvY2x1ZVBvc2l0aW9u
RmllbGRzLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIEdlb2NsdWVBY2N1cmFjeSopOwor
ICAgIHZvaWQgZXJyb3JPY2N1cmVkKGNvbnN0IGNoYXIqKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHVwZGF0ZVBvc2l0aW9uKCk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247CisK
KyAgICBHUmVmUHRyPEdlb2NsdWVNYXN0ZXJDbGllbnQ+IG1fZ2VvY2x1ZUNsaWVudDsKKyAgICBH
UmVmUHRyPEdlb2NsdWVQb3NpdGlvbj4gbV9nZW9jbHVlUG9zaXRpb247CisKKyAgICBkb3VibGUg
bV9sYXRpdHVkZTsKKyAgICBkb3VibGUgbV9sb25naXR1ZGU7CisgICAgZG91YmxlIG1fYWx0aXR1
ZGU7CisgICAgZG91YmxlIG1fYWNjdXJhY3k7CisgICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFj
eTsKKyAgICBpbnQgbV90aW1lc3RhbXA7CisKKyAgICBib29sIG1fZW5hYmxlSGlnaEFjY3VyYWN5
OworICAgIGJvb2wgbV9pc1VwZGF0aW5nOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2VuZGlmIC8vIEdl
b2xvY2F0aW9uQ2xpZW50R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcAppbmRleCAxMmZjYjk1MWMxN2ZkMTM1ZjJkYWYxMmZjNTFhODdhMzI2OWUzNjBjLi45
NjA4N2YwNTE3NzhmNWRiMTI3MmE5MDUyNjM0Y2Q4ZDU0N2JlZmUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVk
ZSAiRHJhZ0NsaWVudEd0ay5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKQEAgLTU1LDYgKzU2LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkdl
b2xvY2F0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKQEAgLTM0MDYs
OCArMzQwOSwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgIHBhZ2VDbGllbnRzLmRldmljZU9yaWVudGF0aW9uQ2xpZW50ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnQqPihuZXcgRGV2aWNl
T3JpZW50YXRpb25DbGllbnRHdGspOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQorICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5k
ZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAgICAgICAgcGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGll
bnQgPSBuZXcgR2VvbG9jYXRpb25DbGllbnRNb2NrOworICAgIGVsc2UKKyAgICAgICAgcGFnZUNs
aWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcgV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudCh3
ZWJWaWV3KTsKKyNlbmRpZgorCiAgICAgcHJpdi0+Y29yZVBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xp
ZW50cyk7CiAKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIGlmIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4ocGFnZUNsaWVudHMuZ2Vv
bG9jYXRpb25DbGllbnQpLT5zZXRDb250cm9sbGVyKHByaXYtPmNvcmVQYWdlLT5nZW9sb2NhdGlv
bkNvbnRyb2xsZXIoKSk7CisjZW5kaWYKKwogICAgIC8vIFBhZ2VzIHdpdGhpbiBhIHNhbWUgc2Vz
c2lvbiBuZWVkIHRvIGJlIGxpbmtlZCB0b2dldGhlciBvdGhlcndpc2Ugc29tZSBmdW5jdGlvbmFs
aXRpZXMgc3VjaAogICAgIC8vIGFzIHZpc2l0ZWQgbGluayBjb2xvcmF0aW9uIChhY3Jvc3MgcGFn
ZXMpIGFuZCBjaGFuZ2luZyBwb3B1cCB3aW5kb3cgbG9jYXRpb24gd2lsbCBub3Qgd29yay4KICAg
ICAvLyBUbyBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNpbXBsZSAoYW5kIGJlY2F1c2Ugbm8g
UGFnZUdyb3VwIEFQSSBleGlzdCBpbiBXZWJLaXRHVEsgYXQgdGhlCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjA3NjQwYmFhZmNmYWEwOWM3MDc5
YmNmYWQ2YzZhM2Q1NzljNTEyYi4uOWQxMTQ3ZDhkM2FmNTBhYzFjNWYxOWM3NzI1ZDlmMzJmOGMy
MTQ3NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDExLTA4LTA3ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3VwcG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0ZXN0aW5nIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiB0ZXN0cyBpbiBE
dW1wUmVuZGVyVHJlZQorICAgICAgICBhbmQgdHVybiBzYWlkIGZ1dHVyZSBvbiBieSBkZWZhdWx0
IGZvciB0aGUgR3RrIHBvcnQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAocmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyk6
IFJlc2V0IEdlb2xvY2F0aW9uQ2xpZW50TW9jay4KKyAgICAgICAgKGNyZWF0ZVdlYlZpZXcpOiBD
cmVhdGUgd2ViIHZpZXcgYWZ0ZXIgZGVjbGFyaW5nIER1bXBSZW5kZXJUcmVlIG1vZGUuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDogSW1w
bGVtZW50IGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgZ2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJv
cik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJr
aXQ6IFR1cm4gb24gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHN1cHBvcnQgZm9yIEd0ay4KKwog
MjAxMS0wOC0wNyAgU2FtIFdoaXRlICA8c2FtdWVsLndoaXRlQHJvY2hlc3Rlci5lZHU+CiAKICAg
ICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIHNlYXJjaCB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBj
YWNoZQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXgg
MjMwODFjYzU1YzQxY2VlYmJmZjg3ODFjMTkyNDdhNjQ0M2FmZWNhNi4uMDMwNjQ4ZDhkNjA3YjYy
YzIxYjlhMGE4NGQ4NGU2ZDQ5YTI0MmM0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
RHVtcFJlbmRlclRyZWUuY3BwCkBAIC00NzYsNiArNDc2LDggQEAgc3RhdGljIHZvaWQgcmVzZXRE
ZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIGF4Q29udHJvbGxlci0+cmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjbGVh
ck9wZW5lcihtYWluRnJhbWUpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZXNl
dEdlb2xvY2F0aW9uQ2xpZW50TW9jayh3ZWJWaWV3KTsKIH0KIAogc3RhdGljIGJvb2wgdXNlTG9u
Z1J1bm5pbmdTZXJ2ZXJNb2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xMDgzLDEwICsx
MDg1LDEwIEBAIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiwgV2ViCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3
KiBjcmVhdGVXZWJWaWV3KCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHNlbGZfc2Nyb2xsaW5nX3dlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KICAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7
CiAKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHNlbGZfc2Nyb2xs
aW5nX3dlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JK
RUNUKHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bG9hZC1zdGFydGVkIiwg
d2ViVmlld0xvYWRTdGFydGVkLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bG9h
ZC1maW5pc2hlZCIsIHdlYlZpZXdMb2FkRmluaXNoZWQsIDAsCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCA5OGNjMWRk
OThmYWYyMTcxZWQ4YmZhYTk4M2ZmYzI1NmYwMDZjYWI5Li43NmE5Y2Y4MGJlZjllMTY4N2ZkYTMz
OGY5ZjM2M2NhM2VhZjQxYWQ1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQ3NCwyNiArNDc0LDQ0IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblBy
b3ZpZGVBbHBoYSwgZG91YmxlCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9u
IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI4MjY0LgorICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICghdmlldykKKyAg
ICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgQVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbih2aWV3LCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7
CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9y
KGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOwor
ICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgR093blB0cjxnY2hhcj4g
Y01lc3NhZ2UoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobWVzc2FnZSkpOworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IodmlldywgY29kZSwgY01l
c3NhZ2UuZ2V0KCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Q29tbW9uKGFsbG93KTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVX
KGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKKyAgICBpZiAoIXZpZXcpCisgICAg
ICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAg
IEFTU0VSVCh2aWV3KTsKKworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dl
b2xvY2F0aW9uUGVybWlzc2lvbih2aWV3LCBhbGxvdyk7CiB9CiAKIGludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQog
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4K
LSAgICByZXR1cm4gLTE7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQo
dmlldyk7CisKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyh2aWV3KTsKIH0KIAogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJl
c3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dAppbmRleCAxNjM2YWQyY2FkNzY5NmM1ZDVjOGYxMTBiOGEyOGRjOTllZmQ1YWYxLi4wMGZmYzdi
ZmQwMTdjNDZkN2E2ZmJiNjY0NjU4MGNhNjVmMDllYzM2IDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMTUx
LDcgKzE1MSw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NI
QU5ORUxfTUVTU0FHSU5HIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGNoYW5uZWxNZXNzYWdp
bmdTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY2xpZW50LWJhc2VkLWdlb2xvY2F0aW9u
IiwgZGVzYyA9PiAiVG9nZ2xlIGNsaWVudC1iYXNlZCBHZW9sb2NhdGlvbiBzdXBwb3J0IiwKLSAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTiIsIGRlZmF1bHQg
PT4gaXNBcHBsZVdlYktpdCgpLCB2YWx1ZSA9PiBcJGNsaWVudEJhc2VkR2VvbG9jYXRpb25TdXBw
b3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04i
LCBkZWZhdWx0ID0+IChpc0FwcGxlV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkY2xp
ZW50QmFzZWRHZW9sb2NhdGlvblN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJjc3MzLWZs
ZXhib3giLCBkZXNjID0+ICJUb2dnbGUgQ1NTMyBGbGV4Ym94IHN1cHBvcnQiLAogICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfQ1NTM19GTEVYQk9YIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGNz
czNGbGV4Ym94U3VwcG9ydCB9LApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJl
LmFjCmluZGV4IGIxYjMyZTQyYjg3N2Q5NGEyMTFiMDM5ZDg1OWM2NTE0NzE3MjBjMGEuLjNmZDFh
M2E1YTA5MzkxNDk5YmQxMzgwYWEyNWJjNmQzNDQyYjcwZWMgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3Vy
ZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTYyMyw4ICs2MjMsOCBAQCBBQ19NU0dfUkVTVUxU
KFskZW5hYmxlX2dlb2xvY2F0aW9uXSkKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFi
bGUgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHN1cHBvcnRdKQogQUNfQVJHX0VOQUJMRShjbGll
bnRfYmFzZWRfZ2VvbG9jYXRpb24sCiAgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVu
YWJsZS1jbGllbnQtYmFzZWQtZ2VvbG9jYXRpb25dLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiBbZGVmYXVs
dD1ub11dKSwKLSAgICAgICAgICAgICAgW10sW2VuYWJsZV9jbGllbnRfYmFzZWRfZ2VvbG9jYXRp
b249Im5vIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgc3VwcG9ydCBm
b3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIFtkZWZhdWx0PXllc11dKSwKKyAgICAgICAgICAg
ICAgW10sW2VuYWJsZV9jbGllbnRfYmFzZWRfZ2VvbG9jYXRpb249InllcyJdKQogQUNfTVNHX1JF
U1VMVChbJGVuYWJsZV9jbGllbnRfYmFzZWRfZ2VvbG9jYXRpb25dKQogCiAjIGNoZWNrIHdoZXRo
ZXIgdG8gZW5hYmxlIE1hdGhNTCBzdXBwb3J0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110268</attachid>
            <date>2011-10-08 04:00:47 -0700</date>
            <delta_ts>2011-10-17 05:46:56 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-64970-20111008130045.patch</filename>
            <type>text/plain</type>
            <size>42988</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwMDcKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBmZWNmYTk1MGI5YjQ0OTgwMDg2YmUyM2FlNTVjNzM5Y2Q3NzIzMDNlLi5jMmZl
NjYyMjYwYTJiZTNkNmEzMmRhMzI3NzkwY2QyMzhiODlmNjZlIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMDggIFphbiBEb2Jl
cnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZv
ciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGZsYWcgZm9yIGVuYWJsaW5nIGNsaWVudC1iYXNlZCBn
ZW9sb2NhdGlvbiBzaW5jZQorICAgICAgICBpdCBpcyB1c2VkIGJ5IGRlZmF1bHQgb24gR3RrIHBv
cnQgYW5kIGhlbmNlIG5vdCBjb25maWd1cmFibGUuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6
CisKIDIwMTEtMTAtMDYgIEZhZHkgU2FtdWVsICA8ZnNhbXVlbEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ29kZSBjbGVhbi11cDogTWFrZSBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdC
b3hSZWN0IGFuZCBhc3NvY2lhdGVkIG1ldGhvZHMgY29uc3QgYW5kIG1ha2UgaXRzIHBhcmFtZXRl
ciB1c2VUcmFuc2Zvcm1zIG5vIGxvbmdlciBkZWZhdWx0IHRvIGZhbHNlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGE0ZjY5
YmM2YmYzOTY3ZDMxNmE0N2U1ZTNkYTA0NDMwMGUzMGU2ZS4uNTM4N2RkYWU1OTkxYmJmNTNiZGI3
M2U0ZmJhMjM5NWFhNjU2OWM1NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEwLTA4ICBa
YW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3Vw
cG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuc2tpcCBnZW9sb2NhdGlvbiB0ZXN0cyB0aGF0IG5v
dyBwYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisKIDIwMTEtMTAtMDcg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0pTQ11Ud28gdGVz
dHMgZmFpbHMgYWZ0ZXIgcjk1NDg5ICYgcjk1NDg4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmlu
ZGV4IDIwY2M2NzJmZWU1ZGY5ZjBiNzgxZTc1MmMyYTk4MzA3MWQ5NWZmZGUuLmFmYmRmNGIwOTJk
MWZmNTgwYjJkMjgyMGJmOTAyYWZlNDhjMDc0NjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CkBAIC04OTYsNDMgKzg5Niw2IEBAIGZhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4taG9yaXpvbnRh
bC1zY3JvbGxiYXItaW4tcnRsLmh0bWwKIGZhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4tdmVydGlj
YWwtc2Nyb2xsYmFyLWluLXJ0bC5odG1sCiBmYXN0L2V2ZW50cy9zY3JvbGwtaW4tc2NhbGVkLXBh
Z2Utd2l0aC1vdmVyZmxvdy1oaWRkZW4uaHRtbAogCi0KLSMgTmVlZHMgbW9jayBzdXBwb3J0LCBh
bmQgYnVpbGQgc2xhdmUgR2VvbG9jYXRpb24gc2VydmljZQotIyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MDUzCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxs
YmFjay1leGNlcHRpb24uaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNz
aW9uLWFsbG93ZWQtZm9yLW11bHRpcGxlLXJlcXVlc3RzLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0
aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9u
L2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQtZm9yLW11bHRpcGxlLXJlcXVlc3RzLmh0bWwKLWZh
c3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAotZmFzdC9k
b20vR2VvbG9jYXRpb24vZXJyb3IuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1h
Z2UuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAotZmFz
dC9kb20vR2VvbG9jYXRpb24vbm8tcGFnZS1jYWNoZS5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlv
bi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWNsZWFyLXdhdGNoLmh0bWwKLWZhc3QvZG9tL0dl
b2xvY2F0aW9uL3Bvc2l0aW9uLXN0cmluZy5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVu
dHJhbnQtZXJyb3IuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcmVlbnRyYW50LXBlcm1pc3Np
b24tZGVuaWVkLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3JlZW50cmFudC1zdWNjZXNzLmh0
bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3N1Y2Nlc3MuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRp
b24vdGltZW91dC1jbGVhci13YXRjaC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi90aW1lb3V0
Lmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3RpbWVzdGFtcC5odG1sCi1mYXN0L2RvbS9HZW9s
b2NhdGlvbi93YXRjaC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi93aW5kb3ctY2xvc2UtY3Jh
c2guaHRtbAotCi0jIE5lZWRzIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCi0jIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQxOTcKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3BhZ2UtcmVs
b2FkLWNhbmNlbC1wZXJtaXNzaW9uLXJlcXVlc3RzLmh0bWwKLQotIyBXZSdyZSBub3QgcXVpdGUg
cmVhZHkgdG8gcnVuIHRoZXNlIHRlc3RzLCBiZWNhdXNlIHRoZSBzbGF2ZXMgbmVlZAotIyBHZW9j
bHVlIHN1cHBvcnQuIElmIHdlIGltcGxlbWVudCBzdXBwb3J0IGZvciB0aGUgbW9jayBnZW9sb2Nh
dGlvbiBzZXJ2aWNlCi0jIG1heWJlIHdlIGNhbiBhdm9pZCB0aGlzLgotIyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Njc0Ci1mYXN0L2RvbS9HZW9sb2NhdGlv
bi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0
aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy5odG1sCi1mYXN0L2RvbS9HZW9s
b2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1zdG9wcy13YXRjaGVzLmh0bWwKLWZhc3QvZG9tL0dl
b2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLmh0bWwKLQogIyBNaXNzZXMgc2V0TWVkaWFUeXBl
KCkgaW1wbGVtZW50YXRpb24KIGZhc3QvbWVkaWEvcHJpbnQtcmVzdG9yZXMtcHJldmlvdXMtbWVk
aWF0eXBlLmh0bWwKIApAQCAtMTA4NSwxNCArMTA0OCw2IEBAIGZhc3QvbG9hZGVyL251bGwtcmVx
dWVzdC1hZnRlci13aWxsU2VuZFJlcXVlc3QuaHRtbAogZWRpdGluZy9zcGVsbGluZy9jb250ZXh0
LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vY29udGV4dC1tZW51LW9u
LXRleHQuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MDE1MwotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQuaHRt
bAotZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQyLmh0bWwK
LWZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCi1m
YXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAotZmFzdC9kb20vR2VvbG9j
YXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLQogIyBTb21l
IGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplIAogIyBvZiB0
aGUgc2xpZGVyIHRodW1iIGluIEdUSysgdGhlbWVzLgogZmFzdC9mb3Jtcy9yYW5nZS9zbGlkZXIt
bW91c2UtZXZlbnRzLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiN2UwYTVkMDRiZmNmOTg4MzVjZDk2YTk1
YWU2NjM2MGJkNWVkODZkLi4wZWJlN2MxYjQ4NjMzMjNlMjIxZTk1NjkxZjBiYjA3MTNlNDcyMTc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMDggIFphbiBEb2JlcnNlayAg
PHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGll
bnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGZlYXR1cmUgZGVmaW5lcyBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0
aW9uIHdoZW4gZ2VvbG9jYXRpb24gaXMgZW5hYmxlZCwKKyAgICAgICAgc2luY2UgdGhpcyBpcyB0
aGUgcHJvdmlkaW5nIG1ldGhvZCB0aGF0IGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQuIFJlbW92ZQor
ICAgICAgICBzZXJ2aWNlLWJhc2VkIHByb3ZpZGluZyBtZXRob2QgY29tcGxldGVseSBhcyBpdCBp
cyBub3QgbmVlZGVkIGFueW1vcmUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZl
YXR1cmUgZGVmaW5lcyBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06IFJlbW92ZSBHZW9sb2NhdGlvblNlcnZpY2VHdGsuKiBmaWxlcyBm
cm9tIGNvbXBpbGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZp
Y2VHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNl
cnZpY2VHdGsuaDogUmVtb3ZlZC4KKwogMjAxMS0xMC0wOCAgS2VudCBUYW11cmEgIDx0a2VudEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBvZiBI
VE1MU2VsZWN0RWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2MTI4ODU1OTk2MDhiZTg4
MzU1ZjY3ZmNhMWVmZGYwOWE2MTdiZTEwLi41NWFjYzM4NjBlYTI2NjFiMTViMzA2MTRlZGJjODI1
Y2E5NGVkNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDU0LDggKzQ1NCw4IEBAIGVuZGlm
ICMgRU5EIEVOQUJMRV9GSUxURVJTCiAjIC0tLS0KIGlmIEVOQUJMRV9HRU9MT0NBVElPTgogCi1G
RUFUVVJFX0RFRklORVMgKz0gRU5BQkxFX0dFT0xPQ0FUSU9OPTEKLXdlYmNvcmVfY3BwZmxhZ3Mg
Kz0gLURFTkFCTEVfR0VPTE9DQVRJT049MQorRkVBVFVSRV9ERUZJTkVTICs9IEVOQUJMRV9HRU9M
T0NBVElPTj0xIEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT049MQord2ViY29yZV9jcHBm
bGFncyArPSAtREVOQUJMRV9HRU9MT0NBVElPTj0xIC1ERU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTj0xCiBlbmRpZiAjIEVORCBFTkFCTEVfR0VPTE9DQVRJT04KIAogIyAtLS0tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1ZWZiNzFkMmJjMjBkNTg1NTg5YzNhZDJmYmQz
MjE5ZGMwOTYwNmQwLi40YjI0MWYwNzJjMzVmMTQ5NjZjOGFlMjdkN2JlNWE2MzFkNGVlYzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQwMTcsOCArNDAxNyw2IEBAIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRp
ZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dSZWZQdHJHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ5YTdiNGRmMzg2Yzk5NTYyNWY3YTgzZGMwMTY0MDMyNGE0MmNkMzkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNl
R3RrLmgiCi0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotCi0jaW5jbHVkZSAiR093blB0ci5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0
ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkR1B0cjxHZW9jbHVlQWNjdXJhY3k+KEdlb2NsdWVBY2N1
cmFjeSogYWNjdXJhY3kpCi0gICAgewotICAgICAgICBpZiAoIWFjY3VyYWN5KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGdlb2NsdWVfYWNjdXJhY3lfZnJlZShhY2N1cmFjeSk7Ci0g
ICAgfQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8R2VvbG9jYXRpb25T
ZXJ2aWNlPiBHZW9sb2NhdGlvblNlcnZpY2VHdGs6OmNyZWF0ZShHZW9sb2NhdGlvblNlcnZpY2VD
bGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdlb2xvY2F0aW9uU2Vy
dmljZUd0ayhjbGllbnQpKTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlOjpGYWN0b3J5RnVuY3Rp
b24qIEdlb2xvY2F0aW9uU2VydmljZTo6c19mYWN0b3J5RnVuY3Rpb24gPSAmR2VvbG9jYXRpb25T
ZXJ2aWNlR3RrOjpjcmVhdGU7Ci0KLUdlb2xvY2F0aW9uU2VydmljZUd0azo6R2VvbG9jYXRpb25T
ZXJ2aWNlR3RrKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCogY2xpZW50KQotICAgIDogR2VvbG9j
YXRpb25TZXJ2aWNlKGNsaWVudCkKLSAgICAsIG1fZ2VvY2x1ZUNsaWVudCgwKQotICAgICwgbV9n
ZW9jbHVlUG9zaXRpb24oMCkKLSAgICAsIG1fbGF0aXR1ZGUoMC4wKQotICAgICwgbV9sb25naXR1
ZGUoMC4wKQotICAgICwgbV9hbHRpdHVkZSgwLjApCi0gICAgLCBtX2FsdGl0dWRlQWNjdXJhY3ko
MC4wKQotICAgICwgbV90aW1lc3RhbXAoMCkKLXsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlR3Rr
Ojp+R2VvbG9jYXRpb25TZXJ2aWNlR3RrKCkKLXsKLSAgICBpZiAobV9nZW9jbHVlQ2xpZW50KQot
ICAgICAgICBnX29iamVjdF91bnJlZihtX2dlb2NsdWVDbGllbnQpOwotCi0gICAgaWYgKG1fZ2Vv
Y2x1ZVBvc2l0aW9uKQotICAgICAgICBnX29iamVjdF91bnJlZihtX2dlb2NsdWVQb3NpdGlvbik7
Ci19Ci0KLS8vCi0vLyAxLikgSW5pdGlhbGl6ZSBHZW9jbHVlIHdpdGggb3VyIHJlcXVpcmVtZW50
cwotLy8gMi4pIFRyeSB0byBnZXQgYSBHZW9jbHVlUG9zaXRpb24KLS8vIDMuKSBVcGRhdGUgdGhl
IEluZm9ybWF0aW9uIGFuZCBnZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KLS8vCi0vLyBUT0RPOiBB
bHNvIGdldCBHZW9jbHVlVmVsb2NpdHkgYnV0IHRoZXJlIGlzIG5vIG1hc3RlciBjbGllbnQKLS8v
ICAgICAgIEFQSSBmb3IgdGhhdC4KLS8vCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUd0azo6c3Rh
cnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIG9wdGlvbnMpCi17Ci0gICAgQVNTRVJUKCFtX2dl
b2NsdWVDbGllbnQpOwotCi0gICAgbV9sYXN0UG9zaXRpb24gPSAwOwotICAgIG1fbGFzdEVycm9y
ID0gMDsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHZW9jbHVlTWFzdGVyKiBt
YXN0ZXIgPSBnZW9jbHVlX21hc3Rlcl9nZXRfZGVmYXVsdCgpOwotICAgIEdlb2NsdWVNYXN0ZXJD
bGllbnQqIGNsaWVudCA9IGdlb2NsdWVfbWFzdGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLCAwLCAw
KTsKLSAgICBnX29iamVjdF91bnJlZihtYXN0ZXIpOwotCi0gICAgaWYgKCFjbGllbnQpIHsKLSAg
ICAgICAgc2V0RXJyb3IoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsICJDb3Vs
ZCBub3QgY29ubmVjdCB0byBsb2NhdGlvbiBwcm92aWRlci4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGFjY3VyYWN5TGV2ZWwgPSBH
RU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0xPQ0FMSVRZOwotICAgIGludCB0aW1lb3V0ID0gMDsKLSAg
ICBpZiAob3B0aW9ucykgewotICAgICAgICBhY2N1cmFjeUxldmVsID0gb3B0aW9ucy0+ZW5hYmxl
SGlnaEFjY3VyYWN5KCkgPyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDogR0VPQ0xV
RV9BQ0NVUkFDWV9MRVZFTF9MT0NBTElUWTsKLSAgICAgICAgaWYgKG9wdGlvbnMtPmhhc1RpbWVv
dXQoKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBvcHRpb25zLT50aW1lb3V0KCk7Ci0gICAgfQot
Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ2VvY2x1ZV9tYXN0ZXJfY2xpZW50X3NldF9yZXF1aXJl
bWVudHMoY2xpZW50LCBhY2N1cmFjeUxldmVsLCB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBHRU9DTFVF
X1JFU09VUkNFX0FMTCwgJmVycm9yLm91dFB0cigpKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0g
ICAgICAgIHNldEVycm9yKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBlcnJv
ci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGNsaWVudCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2dlb2NsdWVQb3NpdGlvbiA9IGdlb2NsdWVfbWFz
dGVyX2NsaWVudF9jcmVhdGVfcG9zaXRpb24oY2xpZW50LCAmZXJyb3Iub3V0UHRyKCkpOwotICAg
IGlmICghbV9nZW9jbHVlUG9zaXRpb24pIHsKLSAgICAgICAgc2V0RXJyb3IoUG9zaXRpb25FcnJv
cjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoY2xpZW50KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1f
Z2VvY2x1ZUNsaWVudCA9IGNsaWVudDsKLQotICAgIGdlb2NsdWVfcG9zaXRpb25fZ2V0X3Bvc2l0
aW9uX2FzeW5jKG1fZ2VvY2x1ZVBvc2l0aW9uLCAoR2VvY2x1ZVBvc2l0aW9uQ2FsbGJhY2spZ2V0
UG9zaXRpb25DYWxsYmFjaywgdGhpcyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNU
KG1fZ2VvY2x1ZVBvc2l0aW9uKSwgInBvc2l0aW9uLWNoYW5nZWQiLAotICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhwb3NpdGlvbl9jaGFuZ2VkKSwgdGhpcyk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VHdGs6OnN0b3BVcGRhdGluZygpCi17
Ci0gICAgaWYgKCFtX2dlb2NsdWVDbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2Jq
ZWN0X3VucmVmKG1fZ2VvY2x1ZVBvc2l0aW9uKTsKLSAgICBnX29iamVjdF91bnJlZihtX2dlb2Ns
dWVDbGllbnQpOwotCi0gICAgbV9nZW9jbHVlUG9zaXRpb24gPSAwOwotICAgIG1fZ2VvY2x1ZUNs
aWVudCA9IDA7Ci19Ci0KLUdlb3Bvc2l0aW9uKiBHZW9sb2NhdGlvblNlcnZpY2VHdGs6Omxhc3RQ
b3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgpOwotfQot
Ci1Qb3NpdGlvbkVycm9yKiBHZW9sb2NhdGlvblNlcnZpY2VHdGs6Omxhc3RFcnJvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbGFzdEVycm9yLmdldCgpOwotfQotCi12b2lkIEdlb2xvY2F0aW9u
U2VydmljZUd0azo6dXBkYXRlUG9zaXRpb24oKQotewotICAgIG1fbGFzdEVycm9yID0gMDsKLQot
ICAgIFJlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMgPSBDb29yZGluYXRlczo6Y3JlYXRl
KG1fbGF0aXR1ZGUsIG1fbG9uZ2l0dWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIG1fYWx0aXR1ZGUsIG1fYWNjdXJhY3ks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgbV9hbHRpdHVkZUFjY3VyYWN5LCBmYWxzZSwgMC4wLCBmYWxzZSwgMC4wKTsKLSAg
ICBtX2xhc3RQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFz
ZSgpLCBtX3RpbWVzdGFtcCAqIDEwMDAuMCk7Ci0gICAgcG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpnZXRQb3NpdGlvbkNhbGxiYWNrKEdlb2NsdWVQ
b3NpdGlvbiAqcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVzdGFtcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsYXRpdHVkZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBs
b25naXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgYWx0aXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiBlcnJvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlb2xvY2F0aW9uU2VydmljZUd0
ayogdGhhdCkKLXsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgdGhhdC0+c2V0RXJyb3IoUG9z
aXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAg
ICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwb3Np
dGlvbl9jaGFuZ2VkKHBvc2l0aW9uLCBmaWVsZHMsIHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdp
dHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCB0aGF0KTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNl
cnZpY2VHdGs6OnBvc2l0aW9uX2NoYW5nZWQoR2VvY2x1ZVBvc2l0aW9uKiwgR2VvY2x1ZVBvc2l0
aW9uRmllbGRzIGZpZWxkcywgaW50IHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIEdlb2NsdWVBY2N1cmFjeSogYWNjdXJhY3ksIEdl
b2xvY2F0aW9uU2VydmljZUd0ayogdGhhdCkKLXsKLSAgICBpZiAoIShmaWVsZHMgJiBHRU9DTFVF
X1BPU0lUSU9OX0ZJRUxEU19MQVRJVFVERSAmJiBmaWVsZHMgJiBHRU9DTFVFX1BPU0lUSU9OX0ZJ
RUxEU19MT05HSVRVREUpKSB7Ci0gICAgICAgIHRoYXQtPnNldEVycm9yKFBvc2l0aW9uRXJyb3I6
OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCAiUG9zaXRpb24gY291bGQgbm90IGJlIGRldGVybWluZWQu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGF0LT5tX3RpbWVzdGFtcCA9IHRp
bWVzdGFtcDsKLSAgICB0aGF0LT5tX2xhdGl0dWRlID0gbGF0aXR1ZGU7Ci0gICAgdGhhdC0+bV9s
b25naXR1ZGUgPSBsb25naXR1ZGU7Ci0gICAgdGhhdC0+bV9hbHRpdHVkZSA9IGFsdGl0dWRlOwot
Ci0gICAgR2VvY2x1ZUFjY3VyYWN5TGV2ZWwgbGV2ZWw7Ci0gICAgZ2VvY2x1ZV9hY2N1cmFjeV9n
ZXRfZGV0YWlscyhhY2N1cmFjeSwgJmxldmVsLCAmdGhhdC0+bV9hY2N1cmFjeSwgJnRoYXQtPm1f
YWx0aXR1ZGVBY2N1cmFjeSk7Ci0gICAgdGhhdC0+dXBkYXRlUG9zaXRpb24oKTsKLX0KLQotdm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VHdGs6OnNldEVycm9yKFBvc2l0aW9uRXJyb3I6OkVycm9yQ29k
ZSBlcnJvckNvZGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgbV9sYXN0UG9zaXRpb24g
PSAwOwotICAgIG1fbGFzdEVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwg
U3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7Ci19Ci0KLX0KLSNlbmRpZiAvLyBFTkFCTEUoR0VP
TE9DQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9j
YXRpb25TZXJ2aWNlR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRp
b25TZXJ2aWNlR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYTMwOTA3ZTJh
NTA5MWNhN2UyOThlYjc2MzZmMmZiMWY1MmJjN2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0
aW9uU2VydmljZUd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEdlb2xv
Y2F0aW9uU2VydmljZUd0a19oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUd0a19oCi0jaWYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQotCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgiCi0j
aW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKLSNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCi0jaW5j
bHVkZSAiUmVmUHRyLmgiCi0KLSNpbmNsdWRlIDxnZW9jbHVlL2dlb2NsdWUtbWFzdGVyLmg+Ci0j
aW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLXBvc2l0aW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VHdGsgOiBwdWJsaWMgR2VvbG9jYXRpb25T
ZXJ2aWNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEdlb2xvY2F0
aW9uU2VydmljZT4gY3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwotICAgICAgICB+
R2VvbG9jYXRpb25TZXJ2aWNlR3RrKCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHN0YXJ0VXBk
YXRpbmcoUG9zaXRpb25PcHRpb25zKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRp
bmcoKTsKLQotICAgICAgICBHZW9wb3NpdGlvbiogbGFzdFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
ICAgIFBvc2l0aW9uRXJyb3IqIGxhc3RFcnJvcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgR2VvbG9jYXRpb25TZXJ2aWNlR3RrKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwot
Ci0gICAgICAgIHZvaWQgc2V0RXJyb3IoUG9zaXRpb25FcnJvcjo6RXJyb3JDb2RlLCBjb25zdCBj
aGFyKiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCB1cGRhdGVQb3NpdGlvbigpOwotCi0gICAgICAg
IHN0YXRpYyB2b2lkIHBvc2l0aW9uX2NoYW5nZWQoR2VvY2x1ZVBvc2l0aW9uKiwgR2VvY2x1ZVBv
c2l0aW9uRmllbGRzLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIEdlb2NsdWVBY2N1cmFj
eSosIEdlb2xvY2F0aW9uU2VydmljZUd0ayopOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRQb3Np
dGlvbkNhbGxiYWNrKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3NpdGlvbkZpZWxkcywgaW50
LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBHZW9jbHVlQWNjdXJhY3kqLCBHRXJyb3IqLCBHZW9s
b2NhdGlvblNlcnZpY2VHdGsqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxHZW9w
b3NpdGlvbj4gbV9sYXN0UG9zaXRpb247Ci0gICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBt
X2xhc3RFcnJvcjsKLQotICAgICAgICAvLyBzdGF0ZSBvYmplY3RzCi0gICAgICAgIEdlb2NsdWVN
YXN0ZXJDbGllbnQqIG1fZ2VvY2x1ZUNsaWVudDsKLSAgICAgICAgR2VvY2x1ZVBvc2l0aW9uKiBt
X2dlb2NsdWVQb3NpdGlvbjsKLQotICAgICAgICAvLyBFcnJvciBhbmQgUG9zaXRpb24gc3RhdGUK
LSAgICAgICAgZG91YmxlIG1fbGF0aXR1ZGU7Ci0gICAgICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsK
LSAgICAgICAgZG91YmxlIG1fYWx0aXR1ZGU7Ci0gICAgICAgIGRvdWJsZSBtX2FjY3VyYWN5Owot
ICAgICAgICBkb3VibGUgbV9hbHRpdHVkZUFjY3VyYWN5OwotICAgICAgICBpbnQgbV90aW1lc3Rh
bXA7Ci0gICAgfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCmluZGV4IDJhZDRlMmRlYmZlZDlkMDhjMDI0ZDVmODFiM2JjNDlmZGIzZWM3
MWYuLjE0OTNkYzBlZTBmZDU5Y2U1Mzc2YWYwYmU1NWY1OTk1YjY2NTFiODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMS0xMC0wOCAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHdGtdIFN1cHBvcnQgZm9yIGNsaWVudC1iYXNl
ZCBnZW9sb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjQ5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgRHVtcFJlbmRlclRyZWUgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIGNsaWVudC1iYXNl
ZCBnZW9sb2NhdGlvbiB0ZXN0cworICAgICAgICBhbmQgaW1wbGVtZW50IEdlb2xvY2F0aW9uQ2xp
ZW50R3RrLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gWmVja2UncworICAgICAgICBp
bXBsZW1lbnRhdGlvbiBvZiBHZW9sb2NhdGlvblNlcnZpY2UgY2xhc3MgaW4gV2ViQ29yZSwgd2hp
Y2ggaXMgbm93IHJlZHVuZGFudAorICAgICAgICBhbmQgc3Vic2VxdWVudGx5IHJlbW92ZWQuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIEdlb2xvY2F0aW9uQ2xpZW50R3RrLiogZmls
ZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmNwcDogQWRkIHN1cHBvcnQgZnVuY3Rpb25zIHRvIG9wZXJhdGUKKyAgICAg
ICAgd2l0aCBHZW9sb2NhdGlvbkNsaWVudE1vY2suCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OnJlc2V0R2VvbG9jYXRpb25DbGllbnRNb2NrKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2V0UG9zaXRp
b25DYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OnBvc2l0aW9uQ2hhbmdlZENhbGxiYWNrKToK
KyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6Okdlb2xvY2F0aW9uQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6Omdlb2xvY2F0aW9uRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6OnN0YXJ0VXBkYXRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeSk6Cisg
ICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50OjpsYXN0UG9zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAg
ICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6cG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6OnVwZGF0ZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6OmVycm9yT2NjdXJlZCk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaDogQWRkZWQuCisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQp
OiBVc2UgR2VvbG9jYXRpb25DbGllbnRNb2NrIGFzIGdlb2xvY2F0aW9uIGNsaWVudAorICAgICAg
ICB3aGVuIHJ1bm5pbmcgaW4gRHVtcFJlbmRlclRyZWUuCisKIDIwMTEtMDktMjggIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIE1vdmUgZHJh
Zy1hbmQtZHJvcCBjb2RlIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggZGUwZTg2MGEzN2JhZDk1MmQyMTkwZDM2
ZTA4NTEyMTY1OGViNGE1YS4uZDJlYWJhYjI2ZGY5YWVkNjc4NGMzNGYxMTRiNDFmYzE1MTEwZWEx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIwMCw2ICsyMDAsOCBAQCB3ZWJraXRn
dGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVO
ZXR3b3JraW5nQ29udGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmggXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVyLmNwcCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCBhN2ZkODViMjFjODRkNjc0NjY4ODky
ODdmNjUxMjExZTQ0Yjc1NGUzLi43ZjEzMzRmYzRjNmZkODI2MTcxMGJjYzU5NDlkNWM3OTZkNjI0
MDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0ND
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5o
IgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKQEAgLTgzMCwzICs4MzQsNTkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OnNjYWxlUGFnZUJ5KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGZsb2F0IHNjYWxlRmEKIHsK
ICAgICBjb3JlKHdlYlZpZXcpLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IsIEludFBv
aW50KHgsIHkpKTsKIH0KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0R2Vv
bG9jYXRpb25DbGllbnRNb2NrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisjaWYgRU5BQkxF
KENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1v
Y2sgPSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5n
ZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworICAgIG1vY2stPnJlc2V0KCk7Cisj
ZW5kaWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2Nh
dGlvblBlcm1pc3Npb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgYm9vbCBhbGxvd2VkKQorewor
I2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGll
bnRNb2NrKiBtb2NrID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3
ZWJWaWV3KS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmNsaWVudCgpKTsKKyAgICBtb2NrLT5z
ZXRQZXJtaXNzaW9uKGFsbG93ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkK
K3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9u
Q2xpZW50TW9jayogbW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNv
cmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBk
b3VibGUgdGltZXN0YW1wID0gZ19nZXRfcmVhbF90aW1lKCkgLyAxMDAwMDAwLjA7CisgICAgbW9j
ay0+c2V0UG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVzdGFtcCwgbGF0
aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgaW50IGVycm9yQ29kZSwgY29uc3QgZ2NoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyNp
ZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50
TW9jayogbW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2Vi
VmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBHZW9sb2Nh
dGlvbkVycm9yOjpFcnJvckNvZGUgY29kZTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAg
IGNhc2UgUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQ6CisgICAgICAgIGNvZGUgPSBH
ZW9sb2NhdGlvbkVycm9yOjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGNvZGUgPSBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBtb2NrLT5zZXRFcnJvcihHZW9sb2NhdGlvbkVycm9y
OjpjcmVhdGUoY29kZSwgZXJyb3JNZXNzYWdlKSk7CisjZW5kaWYKK30KKworaW50IER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRpY19j
YXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29u
dHJvbGxlcigpLT5jbGllbnQoKSk7CisgICAgcmV0dXJuIG1vY2stPm51bWJlck9mUGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cygpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuaAppbmRleCAxYTIwM2Q1YTA3NWE1N2ZiNGVmY2ZjMzhhNWE5Zjg1YmJk
ODk5MzkwLi5kZTNiNzE2NDdhNTU0YWZiMzczMjJhOTNhNWNiZmUwMjdhYTRmZjFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuaApAQCAtMTIwLDYgKzEyMCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGludCB3b3JrZXJUaHJlYWRDb3VudCgpOwogICAgIHN0YXRpYyBib29sIHdlYmtp
dFdlYkZyYW1lU2VsZWN0aW9uSGFzU3BlbGxpbmdNYXJrZXIoV2ViS2l0V2ViRnJhbWUqLCBnaW50
IGZyb20sIGdpbnQgbGVuZ3RoKTsKIAorICAgIHN0YXRpYyB2b2lkIHJlc2V0R2VvbG9jYXRpb25D
bGllbnRNb2NrKFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9j
YXRpb25QZXJtaXNzaW9uKFdlYktpdFdlYlZpZXcqLCBib29sKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgZG91YmxlLCBkb3VibGUs
IGRvdWJsZSk7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0
V2ViVmlldyosIGludCwgY29uc3QgZ2NoYXIqKTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFdlYktpdFdlYlZpZXcqKTsKKwogcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2RydFJ1bjsKICAgICBzdGF0aWMgYm9vbCBzX2xpbmtz
SW5jbHVkZWRJblRhYkNoYWluOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwZmZjMDAx
MmI1MTRlMDEwODlhMjUzZjg0ZWEwZjZmNDRmNDM4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAKQEAg
LTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50R3RrLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlv
blBvc2l0aW9uLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3ZvaWQgZ2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVlUG9zaXRpb24g
KnBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1
ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR0Vycm9yKiBlcnJvciwgR2VvbG9jYXRpb25DbGllbnQqIGNs
aWVudCkKK3sKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgY2xpZW50LT5lcnJvck9jY3VyZWQo
ZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNsaWVudC0+cG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uLCBmaWVs
ZHMsIHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5KTsK
K30KKwordm9pZCBwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayhHZW9jbHVlUG9zaXRpb24qIHBvc2l0
aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1ZUFjY3Vy
YWN5KiBhY2N1cmFjeSwgR2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBjbGllbnQt
PnBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK0dlb2xvY2F0aW9uQ2xpZW50OjpH
ZW9sb2NhdGlvbkNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3
KHdlYlZpZXcpCisgICAgLCBtX2dlb2NsdWVDbGllbnQoMCkKKyAgICAsIG1fZ2VvY2x1ZVBvc2l0
aW9uKDApCisgICAgLCBtX2xhdGl0dWRlKDAuMCkKKyAgICAsIG1fbG9uZ2l0dWRlKDAuMCkKKyAg
ICAsIG1fYWx0aXR1ZGUoMC4wKQorICAgICwgbV9hY2N1cmFjeSgwLjApCisgICAgLCBtX2FsdGl0
dWRlQWNjdXJhY3koMC4wKQorICAgICwgbV90aW1lc3RhbXAoMCkKKyAgICAsIG1fZW5hYmxlSGln
aEFjY3VyYWN5KGZhbHNlKQorICAgICwgbV9pc1VwZGF0aW5nKGZhbHNlKQoreworfQorCit2b2lk
IEdlb2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRl
IHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnN0YXJ0VXBkYXRpbmcoKQorewor
ICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKworICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3Rl
cj4gbWFzdGVyID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFzdGVyX2dldF9kZWZhdWx0KCkpOworICAg
IEdSZWZQdHI8R2VvY2x1ZU1hc3RlckNsaWVudD4gY2xpZW50ID0gYWRvcHRHUmVmKGdlb2NsdWVf
bWFzdGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLmdldCgpLCAwLCAwKSk7CisgICAgaWYgKCFjbGll
bnQpIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKCJDb3VsZCBub3QgY29ubmVjdCB0byBsb2NhdGlv
biBwcm92aWRlci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vy
cm9yPiBlcnJvcjsKKyAgICBHZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0gbV9l
bmFibGVIaWdoQWNjdXJhY3kgPyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDogR0VP
Q0xVRV9BQ0NVUkFDWV9MRVZFTF9MT0NBTElUWTsKKyAgICBpZiAoIWdlb2NsdWVfbWFzdGVyX2Ns
aWVudF9zZXRfcmVxdWlyZW1lbnRzKGNsaWVudC5nZXQoKSwgYWNjdXJhY3lMZXZlbCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgR0VP
Q0xVRV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgZXJyb3JPY2N1
cmVkKGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZ2Vv
Y2x1ZVBvc2l0aW9uID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFzdGVyX2NsaWVudF9jcmVhdGVfcG9z
aXRpb24oY2xpZW50LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoIW1fZ2VvY2x1
ZVBvc2l0aW9uKSB7CisgICAgICAgIGVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2dlb2NsdWVDbGllbnQgPSBjbGllbnQ7CisgICAg
Z2VvY2x1ZV9wb3NpdGlvbl9nZXRfcG9zaXRpb25fYXN5bmMobV9nZW9jbHVlUG9zaXRpb24uZ2V0
KCksIChHZW9jbHVlUG9zaXRpb25DYWxsYmFjaylnZXRQb3NpdGlvbkNhbGxiYWNrLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG1fZ2VvY2x1ZVBvc2l0aW9uLmdldCgpKSwg
InBvc2l0aW9uLWNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhwb3Np
dGlvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgbV9pc1VwZGF0aW5nID0gdHJ1ZTsK
K30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBpZiAo
IW1fZ2VvY2x1ZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9nZW9jbHVlUG9zaXRp
b24uY2xlYXIoKTsKKyAgICBtX2dlb2NsdWVDbGllbnQuY2xlYXIoKTsKKworICAgIG1faXNVcGRh
dGluZyA9IGZhbHNlOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpzZXRFbmFibGVIaWdo
QWNjdXJhY3koYm9vbCBlbmFibGUpCit7CisgICAgbV9lbmFibGVIaWdoQWNjdXJhY3kgPSBlbmFi
bGU7CisKKyAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIHdlIHNob3VsZCByZXBvcnQg
dGhlIG5ldyByZXF1aXJlbWVudHMgaW4gb3JkZXIKKyAgICAvLyB0byBjaGFuZ2UgdG8gYSBtb3Jl
IHN1aXRhYmxlIHByb3ZpZGVyIGlmIG5lZWRlZC4gSWYgbm90LCByZXR1cm4uCisgICAgaWYgKCFt
X2lzVXBkYXRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBHZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0gbV9lbmFibGVIaWdo
QWNjdXJhY3kgPyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDogR0VPQ0xVRV9BQ0NV
UkFDWV9MRVZFTF9MT0NBTElUWTsKKyAgICBpZiAoIWdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRf
cmVxdWlyZW1lbnRzKG1fZ2VvY2x1ZUNsaWVudC5nZXQoKSwgYWNjdXJhY3lMZXZlbCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBHRU9D
TFVFX1JFU09VUkNFX0FMTCwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBlcnJvck9jY3Vy
ZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBzdG9wVXBkYXRpbmcoKTsKKyAgICB9Cit9CisK
K1dlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ2xpZW50OjpsYXN0UG9z
aXRpb24oKQoreworICAgIHJldHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsKK30KKwordm9pZCBH
ZW9sb2NhdGlvbkNsaWVudDo6cmVxdWVzdFBlcm1pc3Npb24oV2ViQ29yZTo6R2VvbG9jYXRpb24q
IGdlb2xvY2F0aW9uKQoreworICAgIGNvcmUobV93ZWJWaWV3KS0+Y2hyb21lKCktPnJlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShnZW9sb2NhdGlvbi0+ZnJhbWUoKSwgZ2VvbG9j
YXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVx
dWVzdChXZWJDb3JlOjpHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgY29yZShtX3dl
YlZpZXcpLT5jaHJvbWUoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKGdlb2xvY2F0aW9uLT5mcmFtZSgpLCBnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9j
YXRpb25DbGllbnQ6OnBvc2l0aW9uQ2hhbmdlZChHZW9jbHVlUG9zaXRpb24qLCBHZW9jbHVlUG9z
aXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1ZUFjY3VyYWN5KiBhY2N1cmFjeSkK
K3sKKyAgICBpZiAoIShmaWVsZHMgJiBHRU9DTFVFX1BPU0lUSU9OX0ZJRUxEU19MQVRJVFVERSAm
JiBmaWVsZHMgJiBHRU9DTFVFX1BPU0lUSU9OX0ZJRUxEU19MT05HSVRVREUpKSB7CisgICAgICAg
IGVycm9yT2NjdXJlZCgiUG9zaXRpb24gY291bGQgbm90IGJlIGRldGVybWluZWQuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBt
X2xhdGl0dWRlID0gbGF0aXR1ZGU7CisgICAgbV9sb25naXR1ZGUgPSBsb25naXR1ZGU7CisgICAg
bV9hbHRpdHVkZSA9IGFsdGl0dWRlOworCisgICAgZ2VvY2x1ZV9hY2N1cmFjeV9nZXRfZGV0YWls
cyhhY2N1cmFjeSwgMCwgJm1fYWNjdXJhY3ksICZtX2FsdGl0dWRlQWNjdXJhY3kpOworCisgICAg
dXBkYXRlUG9zaXRpb24oKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6dXBkYXRlUG9z
aXRpb24oKQoreworICAgIG1fbGFzdFBvc2l0aW9uID0gV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3Np
dGlvbjo6Y3JlYXRlKHN0YXRpY19jYXN0PGRvdWJsZT4obV90aW1lc3RhbXApLCBtX2xhdGl0dWRl
LCBtX2xvbmdpdHVkZSwgbV9hY2N1cmFjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBtX2FsdGl0dWRlLCB0cnVlLCBtX2Fs
dGl0dWRlQWNjdXJhY3ksIGZhbHNlLCAwLjAsIGZhbHNlLCAwLjApOworICAgIGNvcmUobV93ZWJW
aWV3KS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPnBvc2l0aW9uQ2hhbmdlZChtX2xhc3RQb3Np
dGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OmVycm9yT2NjdXJlZChj
b25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVy
cm9yPiBlcnJvciA9IFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0ZShXZWJDb3JlOjpH
ZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlLCBtZXNzYWdlKTsKKyAgICBjb3Jl
KG1fd2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5lcnJvck9jY3VycmVkKGVycm9y
LmdldCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZkMzYwZjUyOTU3NzM5
YWQxNWU1YTc3MzVjZDUwZTc3NTk0ZjEzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmgKQEAgLTAsMCArMSw3
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uQ2xpZW50R3RrX2gK
KyNkZWZpbmUgR2VvbG9jYXRpb25DbGllbnRHdGtfaAorCisjaW5jbHVkZSAiR1JlZlB0ci5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3Np
dGlvbi5oIgorCisjaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rlci5oPgorI2luY2x1ZGUg
PGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlvbi5oPgorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
VmlldyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2Nh
dGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50
IDogcHVibGljIFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBHZW9s
b2NhdGlvbkNsaWVudChXZWJLaXRXZWJWaWV3Kik7CisKKyAgICB2b2lkIGdlb2xvY2F0aW9uRGVz
dHJveWVkKCk7CisKKyAgICB2b2lkIHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BVcGRh
dGluZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCk7CisgICAgV2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbiogbGFzdFBvc2l0aW9uKCk7CisKKyAgICB2b2lkIHJl
cXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWxQ
ZXJtaXNzaW9uUmVxdWVzdChXZWJDb3JlOjpHZW9sb2NhdGlvbiopOworCisgICAgdm9pZCBwb3Np
dGlvbkNoYW5nZWQoR2VvY2x1ZVBvc2l0aW9uKiwgR2VvY2x1ZVBvc2l0aW9uRmllbGRzLCBpbnQs
IGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIEdlb2NsdWVBY2N1cmFjeSopOworICAgIHZvaWQgZXJy
b3JPY2N1cmVkKGNvbnN0IGNoYXIqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVBvc2l0
aW9uKCk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247CisKKyAgICBHUmVmUHRy
PEdlb2NsdWVNYXN0ZXJDbGllbnQ+IG1fZ2VvY2x1ZUNsaWVudDsKKyAgICBHUmVmUHRyPEdlb2Ns
dWVQb3NpdGlvbj4gbV9nZW9jbHVlUG9zaXRpb247CisKKyAgICBkb3VibGUgbV9sYXRpdHVkZTsK
KyAgICBkb3VibGUgbV9sb25naXR1ZGU7CisgICAgZG91YmxlIG1fYWx0aXR1ZGU7CisgICAgZG91
YmxlIG1fYWNjdXJhY3k7CisgICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBpbnQg
bV90aW1lc3RhbXA7CisKKyAgICBib29sIG1fZW5hYmxlSGlnaEFjY3VyYWN5OworICAgIGJvb2wg
bV9pc1VwZGF0aW5nOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2Vv
bG9jYXRpb25DbGllbnRHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCmluZGV4IGUwNDU2ZjM5NWRhMzZhM2ZkZjA1MTM2MzJkMDg4OWI4MWUzZjJkYzguLmE3
OTQyODk5ZDhjMzhhMzM5MjhhZWY2ZGRkOWFhYjVjYjJiNzBhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRl
ICJEcmFnQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudEd0ay5oIgogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgpAQCAtNTUsNiArNTYsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb25DbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiR093blB0ckd0ay5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgpAQCAtMzMxNCw4
ICszMzE3LDE2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgcGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudCo+KG5ldyBEZXZpY2VP
cmllbnRhdGlvbkNsaWVudEd0ayk7CiAjZW5kaWYKIAorICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmR1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoKSkKKyAgICAgICAgcGFnZUNsaWVu
dHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcgR2VvbG9jYXRpb25DbGllbnRNb2NrOworICAgIGVs
c2UKKyAgICAgICAgcGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcgV2ViS2l0OjpH
ZW9sb2NhdGlvbkNsaWVudCh3ZWJWaWV3KTsKKwogICAgIHByaXYtPmNvcmVQYWdlID0gbmV3IFBh
Z2UocGFnZUNsaWVudHMpOwogCisgICAgaWYgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZHVt
cFJlbmRlclRyZWVNb2RlRW5hYmxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxHZW9sb2NhdGlv
bkNsaWVudE1vY2sqPihwYWdlQ2xpZW50cy5nZW9sb2NhdGlvbkNsaWVudCktPnNldENvbnRyb2xs
ZXIocHJpdi0+Y29yZVBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpKTsKKwogICAgIC8vIFBh
Z2VzIHdpdGhpbiBhIHNhbWUgc2Vzc2lvbiBuZWVkIHRvIGJlIGxpbmtlZCB0b2dldGhlciBvdGhl
cndpc2Ugc29tZSBmdW5jdGlvbmFsaXRpZXMgc3VjaAogICAgIC8vIGFzIHZpc2l0ZWQgbGluayBj
b2xvcmF0aW9uIChhY3Jvc3MgcGFnZXMpIGFuZCBjaGFuZ2luZyBwb3B1cCB3aW5kb3cgbG9jYXRp
b24gd2lsbCBub3Qgd29yay4KICAgICAvLyBUbyBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNp
bXBsZSAoYW5kIGJlY2F1c2Ugbm8gUGFnZUdyb3VwIEFQSSBleGlzdCBpbiBXZWJLaXRHVEsgYXQg
dGhlCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
OWM3NjhiNDcyODg0ZDc4MjlhOTcxZDU5OTMyNmQyMzM5MzY4MThjMS4uOGQyOGQxZDg3MmU0ZTlk
MTc2YmFjMDdiMzgyOWY4OWY0MzBmYjdkNyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTEwLTA4ICBaYW4gRG9i
ZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0d0a10gU3VwcG9ydCBm
b3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0ZXN0aW5nIGNsaWVudC1iYXNlZCBn
ZW9sb2NhdGlvbiB0ZXN0cyBpbiBEdW1wUmVuZGVyVHJlZS4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChyZXNldERlZmF1bHRzVG9D
b25zaXN0ZW50VmFsdWVzKTogUmVzZXQgR2VvbG9jYXRpb25DbGllbnRNb2NrLgorICAgICAgICAo
Y3JlYXRlV2ViVmlldyk6IENyZWF0ZSB3ZWIgdmlldyBhZnRlciBkZWNsYXJpbmcgRHVtcFJlbmRl
clRyZWUgbW9kZS4KKyAgICAgICAgVGhhdCB3YXkgYSBtb2NrIGNsaWVudCBmb3IgZ2VvbG9jYXRp
b24gaXMgdXNlZCBpbnN0ZWFkIG9mIGEgR2VvQ2x1ZQorICAgICAgICBjbGllbnQgaWYgYSB3ZWIg
dmlldyBpcyBjcmVhdGVkIHdoZW4gdGVzdGluZy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOiBJbXBsZW1lbnQgZnVuY3Rpb25zIGZvcgor
ICAgICAgICBnZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RzKToKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogTm90ZSB0aGF0IHRoZSBHdGsg
cG9ydCBpcyB1c2luZyBjbGllbnQtYmFzZWQKKyAgICAgICAgZ2VvbG9jYXRpb24sIGV2ZW4gdGhv
dWdoIGNoYW5naW5nIHRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0IG9uIGNvbXBpbGF0aW9uLgorCiAy
MDExLTEwLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRk
IGEgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgdG8gZ2FyZGVuLW8tbWF0aWMKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGNkMTE4YzUxZGU5MmY3ZGNi
ODEwYjlmYzk2ODUyYTY4NTc1ZTQ1NjcuLjI5ODAwODQyNmNiOTZkMDcxNDQ0Nzc0YTExOWRlOTEx
ZTVkNGMwZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVy
VHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNw
cApAQCAtNDc4LDYgKzQ3OCw4IEBAIHN0YXRpYyB2b2lkIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3Rl
bnRWYWx1ZXMoKQogICAgICAgICBheENvbnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y2xlYXJPcGVuZXIobWFpbkZyYW1l
KTsKKworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cmVzZXRHZW9sb2NhdGlvbkNsaWVu
dE1vY2sod2ViVmlldyk7CiB9CiAKIHN0YXRpYyBib29sIHVzZUxvbmdSdW5uaW5nU2VydmVyTW9k
ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTA5NiwxMCArMTA5OCwxMCBAQCBzdGF0aWMg
dm9pZCB3aWxsU2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRXZWJGcmFtZSosIFdlYgogCiBzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlV2ViVmlldygp
CiB7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhzZWxmX3Njcm9s
bGluZ193ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXREdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVkKHRydWUpOwogCisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhzZWxmX3Njcm9sbGluZ193ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworCiAgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKICAgICAg
ICAgICAgICAgICAgICAgICJzaWduYWw6OmxvYWQtc3RhcnRlZCIsIHdlYlZpZXdMb2FkU3RhcnRl
ZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmxvYWQtZmluaXNoZWQiLCB3ZWJW
aWV3TG9hZEZpbmlzaGVkLCAwLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9M
YXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggMTY0OTExNTJjMDc4NDNjNzIzNmIzNDI3
MDAyOWRhZDgwNjlkNTY1MS4uMDYwN2Y1MzFlMWFlOGFjYjNjZDQ0ZjEzNDdmMjlhMTkyNmNjMzk2
OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwCkBAIC00NzQsMjYgKzQ3NCw0NCBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJs
ZQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4K
KyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2Rh
dGEod2ViVmlld0xpc3QsIDApKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsK
KworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24odmlldywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwogfQogCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJp
bmdSZWYgbWVzc2FnZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlv
biBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODI2NC4KKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9W
SUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwor
ICAgIEFTU0VSVCh2aWV3KTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGNNZXNzYWdlKEpTU3RyaW5n
Q29weVVURjhDU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKHZpZXcsIGNvZGUsIGNNZXNzYWdlLmdldCgpKTsKIH0K
IAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cisg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRh
KHdlYlZpZXdMaXN0LCAwKSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Np
b24odmlldywgYWxsb3cpOwogfQogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKIHsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgcmV0dXJuIC0xOwor
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyht
YWluRnJhbWUpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHModmlldyk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25m
aWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggZjk1MjA5NTFl
YTAwMTgxNjM4MjY1YzBjZWQ3MGYyOGQ2ZWU5ZDA5Ny4uYTg5MDE3MGViYzFkZWUzN2FjNjZmNTEx
ZTcwNzk3MjU0NTdkYWQ1YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQK
KysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTE1Niw3ICsxNTYsNyBAQCBteSBA
ZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyIs
IGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCB9LAogCiAg
ICAgeyBvcHRpb24gPT4gImNsaWVudC1iYXNlZC1nZW9sb2NhdGlvbiIsIGRlc2MgPT4gIlRvZ2ds
ZSBjbGllbnQtYmFzZWQgR2VvbG9jYXRpb24gc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04iLCBkZWZhdWx0ID0+IGlzQXBwbGVXZWJLaXQo
KSwgdmFsdWUgPT4gXCRjbGllbnRCYXNlZEdlb2xvY2F0aW9uU3VwcG9ydCB9LAorICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OIiwgZGVmYXVsdCA9PiAoaXNB
cHBsZVdlYktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGNsaWVudEJhc2VkR2VvbG9jYXRp
b25TdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzLWZpbHRlcnMiLCBkZXNjID0+ICJU
b2dnbGUgQ1NTIEZpbHRlcnMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1Nf
RklMVEVSUyIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpLCB2YWx1ZSA9PiBcJGNzc0ZpbHRl
cnNTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5k
ZXggMjE3MWQ4ZGM3NTlmNWJhZTUzZDVkODRmZWRjMDBmMDdmNGVlODY4Yi4uNWZhZjMyYzljOGUy
NzFhMmY2M2Y2ZWU3OTY1YWYzNWJiMWQ3Y2FlZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisr
KyBiL2NvbmZpZ3VyZS5hYwpAQCAtNjI3LDE0ICs2MjcsNiBAQCBBQ19BUkdfRU5BQkxFKGdlb2xv
Y2F0aW9uLAogICAgICAgICAgICAgICBbXSxbZW5hYmxlX2dlb2xvY2F0aW9uPSJubyJdKQogQUNf
TVNHX1JFU1VMVChbJGVuYWJsZV9nZW9sb2NhdGlvbl0pCiAKLSMgY2hlY2sgd2hldGhlciB0byBl
bmFibGUgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHN1cHBvcnQKLUFDX01TR19DSEVDS0lORyhb
d2hldGhlciB0byBlbmFibGUgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHN1cHBvcnRdKQotQUNf
QVJHX0VOQUJMRShjbGllbnRfYmFzZWRfZ2VvbG9jYXRpb24sCi0gICAgICAgICAgICAgIEFDX0hF
TFBfU1RSSU5HKFstLWVuYWJsZS1jbGllbnQtYmFzZWQtZ2VvbG9jYXRpb25dLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIGNsaWVudC1iYXNlZCBnZW9s
b2NhdGlvbiBbZGVmYXVsdD1ub11dKSwKLSAgICAgICAgICAgICAgW10sW2VuYWJsZV9jbGllbnRf
YmFzZWRfZ2VvbG9jYXRpb249Im5vIl0pCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX2NsaWVudF9i
YXNlZF9nZW9sb2NhdGlvbl0pCi0KICMgY2hlY2sgd2hldGhlciB0byBlbmFibGUgTWF0aE1MIHN1
cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgTWF0aE1MIHN1cHBvcnRd
KQogQUNfQVJHX0VOQUJMRShtYXRobWwsCkBAIC0xMTY3LDcgKzExNTksNiBAQCBBTV9DT05ESVRJ
T05BTChbRU5BQkxFX1hQQVRIXSxbdGVzdCAiJGVuYWJsZV94cGF0aCIgPSAieWVzIl0pCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX1hTTFRdLFt0ZXN0ICIkZW5hYmxlX3hzbHQiID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9GSUxURVJTXSxbdGVzdCAiJGVuYWJsZV9maWx0ZXJzIiA9
ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfR0VPTE9DQVRJT05dLCBbdGVzdCAiJGVu
YWJsZV9nZW9sb2NhdGlvbiIgPSAieWVzIl0pCi1BTV9DT05ESVRJT05BTChbRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTl0sIFt0ZXN0ICIkZW5hYmxlX2NsaWVudF9iYXNlZF9nZW9sb2Nh
dGlvbiIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX01BVEhNTF0sIFt0ZXN0ICIk
ZW5hYmxlX21hdGhtbCIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX01IVE1MXSwg
W3Rlc3QgIiRlbmFibGVfbWh0bWwiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9W
SURFT10sW3Rlc3QgIiRlbmFibGVfdmlkZW8iID0gInllcyJdKQpAQCAtMTI2MCw3ICsxMjUxLDYg
QEAgRmVhdHVyZXM6CiAgSklUIGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAkZW5hYmxlX2ppdAogIEZpbHRlcnMgc3VwcG9ydCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9maWx0ZXJzCiAgR2VvbG9j
YXRpb24gc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5h
YmxlX2dlb2xvY2F0aW9uCi0gQ2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIHN1cHBvcnQgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NsaWVudF9iYXNlZF9nZW9sb2NhdGlvbgogIEph
dmFTY3JpcHQgZGVidWdnZXIvcHJvZmlsZXIgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgIDog
JGVuYWJsZV9qYXZhc2NyaXB0X2RlYnVnZ2VyCiAgR2FtZXBhZCBzdXBwb3J0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2dhbWVwYWQKICBNYXRoTUwg
c3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFi
bGVfbWF0aG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111252</attachid>
            <date>2011-10-17 05:47:12 -0700</date>
            <delta_ts>2011-10-18 06:02:15 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-64970-20111017144710.patch</filename>
            <type>text/plain</type>
            <size>43185</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjFkOGIxMWQ2YWE5Yzky
NGFlYTA4OTlhMDc5NzA3M2ExMTU0YjMxLi44ZTFhN2MyNTdhNDIzNTNhMWRiZTY4NGM4ZjBmNjQ1
MDQxOGQ3ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMTYgIFphbiBE
b2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0
IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGlu
IFJvYmluc29uLgorCisgICAgICAgIEFkZCBmZWF0dXJlIGRlZmluZXMgZm9yIGNsaWVudC1iYXNl
ZCBnZW9sb2NhdGlvbiB3aGVuIGdlb2xvY2F0aW9uIGlzIGVuYWJsZWQsCisgICAgICAgIHNpbmNl
IHRoaXMgaXMgdGhlIHByb3ZpZGluZyBtZXRob2QgdGhhdCBpcyBub3cgdXNlZCBieSBkZWZhdWx0
LiBSZW1vdmUKKyAgICAgICAgc2VydmljZS1iYXNlZCBwcm92aWRpbmcgbWV0aG9kIGNvbXBsZXRl
bHkgYXMgaXQgaXMgbm90IG5lZWRlZCBhbnltb3JlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZCBmZWF0dXJlIGRlZmluZXMgZm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbi4KKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBSZW1vdmUgR2VvbG9jYXRpb25TZXJ2aWNlR3Rr
LiogZmlsZXMgZnJvbSBjb21waWxhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2VvbG9j
YXRpb25TZXJ2aWNlR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2Vv
bG9jYXRpb25TZXJ2aWNlR3RrLmg6IFJlbW92ZWQuCisKIDIwMTEtMTAtMTcgIEFsZXhhbmRlciBQ
YXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
ZGl0aW5nIENTUyBzZWxlY3RvciBkb2Vzbid0IGZpcmUgb25SZXNvdXJjZUNvbnRlbnRDb21taXR0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjN2FkYjY5ZjhmMzNkZmZlNzU4NDA2ZjJhNTQwNDY0MDBi
ZWFmODdmLi40MjNjYjZiZDNhMmQ1M2YzZmI5MmQ0ZmJhNWNmNzllNTVlMzU0NDk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMTAtMTYgIFphbiBEb2JlcnNlayAgPHph
bmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQt
YmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgor
CisgICAgICAgIEFkZCBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgY2xpZW50
LWJhc2VkIGdlb2xvY2F0aW9uIHRlc3RzCisgICAgICAgIGFuZCBpbXBsZW1lbnQgR2VvbG9jYXRp
b25DbGllbnRHdGsuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBaZWNrZSdzCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIG9mIEdlb2xvY2F0aW9uU2VydmljZSBjbGFzcyBpbiBXZWJDb3Jl
LCB3aGljaCBpcyBub3cgcmVkdW5kYW50CisgICAgICAgIGFuZCBzdWJzZXF1ZW50bHkgcmVtb3Zl
ZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgR2VvbG9jYXRpb25DbGllbnRHdGsu
KiBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuY3BwOiBBZGQgc3VwcG9ydCBmdW5jdGlvbnMgdG8gb3BlcmF0ZQor
ICAgICAgICB3aXRoIEdlb2xvY2F0aW9uQ2xpZW50TW9jay4KKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6cmVzZXRHZW9sb2NhdGlvbkNsaWVudE1vY2spOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRp
b25FcnJvcik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpnZXRQ
b3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6cG9zaXRpb25DaGFuZ2VkQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6R2VvbG9jYXRpb25DbGll
bnQpOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6Z2VvbG9jYXRpb25EZXN0
cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6c3RhcnRVcGRhdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50OjpzdG9wVXBkYXRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5
KToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25DbGllbnQ6Omxhc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbik6Cisg
ICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVz
dCk6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50Ojpwb3NpdGlvbkNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6dXBkYXRlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvbkNsaWVudDo6ZXJyb3JPY2N1cmVkKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5oOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
aW5pdCk6IFVzZSBHZW9sb2NhdGlvbkNsaWVudE1vY2sgYXMgZ2VvbG9jYXRpb24gY2xpZW50Cisg
ICAgICAgIHdoZW4gcnVubmluZyBpbiBEdW1wUmVuZGVyVHJlZS4KKwogMjAxMS0xMC0xMiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHRoZSBpbnRlcmZh
Y2Ugb2YgbG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UgYW5kIHJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoIGNvbnNpc3RlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMGQ3YTFmMGI0NTFjZjM1
ZjYzNWQzNTJhOWQ0M2EwM2M2Y2M1MTU4ZS4uZWVmN2I4YTE5ZWJlMTVmNjdjM2VlZDVjYjhhOWRk
NjllNGExNTIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTQzOCw4ICs0MzgsOCBAQCBlbmRp
ZiAjIEVORCBFTkFCTEVfRklMVEVSUwogIyAtLS0tCiBpZiBFTkFCTEVfR0VPTE9DQVRJT04KIAot
RkVBVFVSRV9ERUZJTkVTICs9IEVOQUJMRV9HRU9MT0NBVElPTj0xCi13ZWJjb3JlX2NwcGZsYWdz
ICs9IC1ERU5BQkxFX0dFT0xPQ0FUSU9OPTEKK0ZFQVRVUkVfREVGSU5FUyArPSBFTkFCTEVfR0VP
TE9DQVRJT049MSBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEKK3dlYmNvcmVfY3Bw
ZmxhZ3MgKz0gLURFTkFCTEVfR0VPTE9DQVRJT049MSAtREVOQUJMRV9DTElFTlRfQkFTRURfR0VP
TE9DQVRJT049MQogZW5kaWYgIyBFTkQgRU5BQkxFX0dFT0xPQ0FUSU9OCiAKICMgLS0tLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNzM1ZGQ2ZjJkNWQyMjZjMjg1OTkxNDExOTdh
NDMxNTMxZDQ0YzQ3MS4uMTUwYjJkYjNlMWVhZDcwYjcwYmVhNjQ0NjlmOTZmM2ZkN2VlMjZkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00MDIzLDggKzQwMjMsNiBAQCB3ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0
aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0OWE3YjRkZjM4NmM5OTU2MjVmN2E4M2RjMDE2NDAzMjRhNDJjZDM5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2Vydmlj
ZUd0ay5oIgotI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLQotI2luY2x1ZGUgIkdPd25QdHIuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAg
dGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R2VvY2x1ZUFjY3VyYWN5PihHZW9jbHVlQWNj
dXJhY3kqIGFjY3VyYWN5KQotICAgIHsKLSAgICAgICAgaWYgKCFhY2N1cmFjeSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBnZW9jbHVlX2FjY3VyYWN5X2ZyZWUoYWNjdXJhY3kpOwot
ICAgIH0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPEdlb2xvY2F0aW9u
U2VydmljZT4gR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpjcmVhdGUoR2VvbG9jYXRpb25TZXJ2aWNl
Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZW9sb2NhdGlvblNl
cnZpY2VHdGsoY2xpZW50KSk7Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZTo6RmFjdG9yeUZ1bmN0
aW9uKiBHZW9sb2NhdGlvblNlcnZpY2U6OnNfZmFjdG9yeUZ1bmN0aW9uID0gJkdlb2xvY2F0aW9u
U2VydmljZUd0azo6Y3JlYXRlOwotCi1HZW9sb2NhdGlvblNlcnZpY2VHdGs6Okdlb2xvY2F0aW9u
U2VydmljZUd0ayhHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqIGNsaWVudCkKLSAgICA6IEdlb2xv
Y2F0aW9uU2VydmljZShjbGllbnQpCi0gICAgLCBtX2dlb2NsdWVDbGllbnQoMCkKLSAgICAsIG1f
Z2VvY2x1ZVBvc2l0aW9uKDApCi0gICAgLCBtX2xhdGl0dWRlKDAuMCkKLSAgICAsIG1fbG9uZ2l0
dWRlKDAuMCkKLSAgICAsIG1fYWx0aXR1ZGUoMC4wKQotICAgICwgbV9hbHRpdHVkZUFjY3VyYWN5
KDAuMCkKLSAgICAsIG1fdGltZXN0YW1wKDApCi17Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZUd0
azo6fkdlb2xvY2F0aW9uU2VydmljZUd0aygpCi17Ci0gICAgaWYgKG1fZ2VvY2x1ZUNsaWVudCkK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVlQ2xpZW50KTsKLQotICAgIGlmIChtX2dl
b2NsdWVQb3NpdGlvbikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZW9jbHVlUG9zaXRpb24p
OwotfQotCi0vLwotLy8gMS4pIEluaXRpYWxpemUgR2VvY2x1ZSB3aXRoIG91ciByZXF1aXJlbWVu
dHMKLS8vIDIuKSBUcnkgdG8gZ2V0IGEgR2VvY2x1ZVBvc2l0aW9uCi0vLyAzLikgVXBkYXRlIHRo
ZSBJbmZvcm1hdGlvbiBhbmQgZ2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uCi0vLwotLy8gVE9ETzog
QWxzbyBnZXQgR2VvY2x1ZVZlbG9jaXR5IGJ1dCB0aGVyZSBpcyBubyBtYXN0ZXIgY2xpZW50Ci0v
LyAgICAgICBBUEkgZm9yIHRoYXQuCi0vLwotYm9vbCBHZW9sb2NhdGlvblNlcnZpY2VHdGs6OnN0
YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQotewotICAgIEFTU0VSVCghbV9n
ZW9jbHVlQ2xpZW50KTsKLQotICAgIG1fbGFzdFBvc2l0aW9uID0gMDsKLSAgICBtX2xhc3RFcnJv
ciA9IDA7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR2VvY2x1ZU1hc3Rlciog
bWFzdGVyID0gZ2VvY2x1ZV9tYXN0ZXJfZ2V0X2RlZmF1bHQoKTsKLSAgICBHZW9jbHVlTWFzdGVy
Q2xpZW50KiBjbGllbnQgPSBnZW9jbHVlX21hc3Rlcl9jcmVhdGVfY2xpZW50KG1hc3RlciwgMCwg
MCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWFzdGVyKTsKLQotICAgIGlmICghY2xpZW50KSB7Ci0g
ICAgICAgIHNldEVycm9yKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCAiQ291
bGQgbm90IGNvbm5lY3QgdG8gbG9jYXRpb24gcHJvdmlkZXIuIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBHZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0g
R0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9MT0NBTElUWTsKLSAgICBpbnQgdGltZW91dCA9IDA7Ci0g
ICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgYWNjdXJhY3lMZXZlbCA9IG9wdGlvbnMtPmVuYWJs
ZUhpZ2hBY2N1cmFjeSgpID8gR0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9ERVRBSUxFRCA6IEdFT0NM
VUVfQUNDVVJBQ1lfTEVWRUxfTE9DQUxJVFk7Ci0gICAgICAgIGlmIChvcHRpb25zLT5oYXNUaW1l
b3V0KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gb3B0aW9ucy0+dGltZW91dCgpOwotICAgIH0K
LQotICAgIGdib29sZWFuIHJlc3VsdCA9IGdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWly
ZW1lbnRzKGNsaWVudCwgYWNjdXJhY3lMZXZlbCwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgR0VPQ0xV
RV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQdHIoKSk7Ci0KLSAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICBzZXRFcnJvcihQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgZXJy
b3ItPm1lc3NhZ2UpOwotICAgICAgICBnX29iamVjdF91bnJlZihjbGllbnQpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9nZW9jbHVlUG9zaXRpb24gPSBnZW9jbHVlX21h
c3Rlcl9jbGllbnRfY3JlYXRlX3Bvc2l0aW9uKGNsaWVudCwgJmVycm9yLm91dFB0cigpKTsKLSAg
ICBpZiAoIW1fZ2VvY2x1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIHNldEVycm9yKFBvc2l0aW9uRXJy
b3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGNsaWVudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBt
X2dlb2NsdWVDbGllbnQgPSBjbGllbnQ7Ci0KLSAgICBnZW9jbHVlX3Bvc2l0aW9uX2dldF9wb3Np
dGlvbl9hc3luYyhtX2dlb2NsdWVQb3NpdGlvbiwgKEdlb2NsdWVQb3NpdGlvbkNhbGxiYWNrKWdl
dFBvc2l0aW9uQ2FsbGJhY2ssIHRoaXMpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVD
VChtX2dlb2NsdWVQb3NpdGlvbiksICJwb3NpdGlvbi1jaGFuZ2VkIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0socG9zaXRpb25fY2hhbmdlZCksIHRoaXMpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpzdG9wVXBkYXRpbmcoKQot
ewotICAgIGlmICghbV9nZW9jbHVlQ2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX29i
amVjdF91bnJlZihtX2dlb2NsdWVQb3NpdGlvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYobV9nZW9j
bHVlQ2xpZW50KTsKLQotICAgIG1fZ2VvY2x1ZVBvc2l0aW9uID0gMDsKLSAgICBtX2dlb2NsdWVD
bGllbnQgPSAwOwotfQotCi1HZW9wb3NpdGlvbiogR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpsYXN0
UG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsKLX0K
LQotUG9zaXRpb25FcnJvciogR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpsYXN0RXJyb3IoKSBjb25z
dAotewotICAgIHJldHVybiBtX2xhc3RFcnJvci5nZXQoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VHdGs6OnVwZGF0ZVBvc2l0aW9uKCkKLXsKLSAgICBtX2xhc3RFcnJvciA9IDA7Ci0K
LSAgICBSZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzID0gQ29vcmRpbmF0ZXM6OmNyZWF0
ZShtX2xhdGl0dWRlLCBtX2xvbmdpdHVkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBtX2FsdGl0dWRlLCBtX2FjY3VyYWN5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRydWUsIG1fYWx0aXR1ZGVBY2N1cmFjeSwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCk7Ci0g
ICAgbV9sYXN0UG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVh
c2UoKSwgbV90aW1lc3RhbXAgKiAxMDAwLjApOwotICAgIHBvc2l0aW9uQ2hhbmdlZCgpOwotfQot
Ci12b2lkIEdlb2xvY2F0aW9uU2VydmljZUd0azo6Z2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVl
UG9zaXRpb24gKnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2VvY2x1ZVBvc2l0aW9uRmllbGRzIGZpZWxkcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lc3RhbXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGF0aXR1ZGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
bG9uZ2l0dWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGFsdGl0dWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2VvY2x1ZUFjY3VyYWN5KiBhY2N1cmFjeSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciogZXJyb3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW9sb2NhdGlvblNlcnZpY2VH
dGsqIHRoYXQpCi17Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIHRoYXQtPnNldEVycm9yKFBv
c2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAg
ICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcG9z
aXRpb25fY2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25n
aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgdGhhdCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25T
ZXJ2aWNlR3RrOjpwb3NpdGlvbl9jaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3Np
dGlvbkZpZWxkcyBmaWVsZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LCBH
ZW9sb2NhdGlvblNlcnZpY2VHdGsqIHRoYXQpCi17Ci0gICAgaWYgKCEoZmllbGRzICYgR0VPQ0xV
RV9QT1NJVElPTl9GSUVMRFNfTEFUSVRVREUgJiYgZmllbGRzICYgR0VPQ0xVRV9QT1NJVElPTl9G
SUVMRFNfTE9OR0lUVURFKSkgewotICAgICAgICB0aGF0LT5zZXRFcnJvcihQb3NpdGlvbkVycm9y
OjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgIlBvc2l0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVk
LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhhdC0+bV90aW1lc3RhbXAgPSB0
aW1lc3RhbXA7Ci0gICAgdGhhdC0+bV9sYXRpdHVkZSA9IGxhdGl0dWRlOwotICAgIHRoYXQtPm1f
bG9uZ2l0dWRlID0gbG9uZ2l0dWRlOwotICAgIHRoYXQtPm1fYWx0aXR1ZGUgPSBhbHRpdHVkZTsK
LQotICAgIEdlb2NsdWVBY2N1cmFjeUxldmVsIGxldmVsOwotICAgIGdlb2NsdWVfYWNjdXJhY3lf
Z2V0X2RldGFpbHMoYWNjdXJhY3ksICZsZXZlbCwgJnRoYXQtPm1fYWNjdXJhY3ksICZ0aGF0LT5t
X2FsdGl0dWRlQWNjdXJhY3kpOwotICAgIHRoYXQtPnVwZGF0ZVBvc2l0aW9uKCk7Ci19Ci0KLXZv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjpzZXRFcnJvcihQb3NpdGlvbkVycm9yOjpFcnJvckNv
ZGUgZXJyb3JDb2RlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIG1fbGFzdFBvc2l0aW9u
ID0gMDsKLSAgICBtX2xhc3RFcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShlcnJvckNvZGUs
IFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi19Ci0jZW5kaWYgLy8gRU5BQkxFKEdF
T0xPQ0FUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xv
Y2F0aW9uU2VydmljZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0
aW9uU2VydmljZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGEzMDkwN2Uy
YTUwOTFjYTdlMjk4ZWI3NjM2ZjJmYjFmNTJiYzdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2Nh
dGlvblNlcnZpY2VHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHZW9s
b2NhdGlvblNlcnZpY2VHdGtfaAotI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VHdGtfaAotI2lm
IEVOQUJMRShHRU9MT0NBVElPTikKLQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgot
I2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2lu
Y2x1ZGUgIlJlZlB0ci5oIgotCi0jaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rlci5oPgot
I2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlvbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlR3RrIDogcHVibGljIEdlb2xvY2F0aW9u
U2VydmljZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxHZW9sb2Nh
dGlvblNlcnZpY2U+IGNyZWF0ZShHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLSAgICAgICAg
fkdlb2xvY2F0aW9uU2VydmljZUd0aygpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdGFydFVw
ZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0
aW5nKCk7Ci0KLSAgICAgICAgR2VvcG9zaXRpb24qIGxhc3RQb3NpdGlvbigpIGNvbnN0OwotICAg
ICAgICBQb3NpdGlvbkVycm9yKiBsYXN0RXJyb3IoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIEdlb2xvY2F0aW9uU2VydmljZUd0ayhHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsK
LQotICAgICAgICB2b2lkIHNldEVycm9yKFBvc2l0aW9uRXJyb3I6OkVycm9yQ29kZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7Ci0gICAgICAgIHZvaWQgdXBkYXRlUG9zaXRpb24oKTsKLQotICAgICAg
ICBzdGF0aWMgdm9pZCBwb3NpdGlvbl9jaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQ
b3NpdGlvbkZpZWxkcywgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBHZW9jbHVlQWNjdXJh
Y3kqLCBHZW9sb2NhdGlvblNlcnZpY2VHdGsqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0UG9z
aXRpb25DYWxsYmFjayhHZW9jbHVlUG9zaXRpb24qLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMsIGlu
dCwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgR2VvY2x1ZUFjY3VyYWN5KiwgR0Vycm9yKiwgR2Vv
bG9jYXRpb25TZXJ2aWNlR3RrKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8R2Vv
cG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwotICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4g
bV9sYXN0RXJyb3I7Ci0KLSAgICAgICAgLy8gc3RhdGUgb2JqZWN0cwotICAgICAgICBHZW9jbHVl
TWFzdGVyQ2xpZW50KiBtX2dlb2NsdWVDbGllbnQ7Ci0gICAgICAgIEdlb2NsdWVQb3NpdGlvbiog
bV9nZW9jbHVlUG9zaXRpb247Ci0KLSAgICAgICAgLy8gRXJyb3IgYW5kIFBvc2l0aW9uIHN0YXRl
Ci0gICAgICAgIGRvdWJsZSBtX2xhdGl0dWRlOwotICAgICAgICBkb3VibGUgbV9sb25naXR1ZGU7
Ci0gICAgICAgIGRvdWJsZSBtX2FsdGl0dWRlOwotICAgICAgICBkb3VibGUgbV9hY2N1cmFjeTsK
LSAgICAgICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFjeTsKLSAgICAgICAgaW50IG1fdGltZXN0
YW1wOwotICAgIH07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggZGUwZTg2MGEzN2JhZDk1MmQyMTkwZDM2ZTA4
NTEyMTY1OGViNGE1YS4uZDJlYWJhYjI2ZGY5YWVkNjc4NGMzNGYxMTRiNDFmYzE1MTEwZWExNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIwMCw2ICsyMDAsOCBAQCB3ZWJraXRndGtf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3
b3JraW5nQ29udGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmggXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVyLmNwcCBcCiAJU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuaCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCAyYjhjMWI5YzUxNzIzZGZlMzNmZTI5N2Rk
YTdlOTNlYjE2NmY1OTQ0Li41NDBmNTNmZTViY2ViYzA1M2RiMzUxMmMwODBiMjA4M2NiNzIyODY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVk
ZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0NDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5k
b3cuaCIKQEAgLTgyOCwzICs4MzIsNTkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNjYWxlUGFnZUJ5KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGZsb2F0IHNjYWxlRmEKIHsKICAg
ICBjb3JlKHdlYlZpZXcpLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IsIEludFBvaW50
KHgsIHkpKTsKIH0KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0R2VvbG9j
YXRpb25DbGllbnRNb2NrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisjaWYgRU5BQkxFKENM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2sg
PSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihjb3JlKHdlYlZpZXcpLT5nZW9s
b2NhdGlvbkNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworICAgIG1vY2stPnJlc2V0KCk7CisjZW5k
aWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlv
blBlcm1pc3Npb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgYm9vbCBhbGxvd2VkKQoreworI2lm
IEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgR2VvbG9jYXRpb25DbGllbnRN
b2NrKiBtb2NrID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY29yZSh3ZWJW
aWV3KS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmNsaWVudCgpKTsKKyAgICBtb2NrLT5zZXRQ
ZXJtaXNzaW9uKGFsbG93ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3sK
KyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jayogbW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUo
d2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBkb3Vi
bGUgdGltZXN0YW1wID0gZ19nZXRfcmVhbF90aW1lKCkgLyAxMDAwMDAwLjA7CisgICAgbW9jay0+
c2V0UG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVzdGFtcCwgbGF0aXR1
ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgaW50IGVycm9yQ29kZSwgY29uc3QgZ2NoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyNpZiBF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9j
ayogbW9jayA9IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmll
dyktPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jbGllbnQoKSk7CisKKyAgICBHZW9sb2NhdGlv
bkVycm9yOjpFcnJvckNvZGUgY29kZTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgIGNh
c2UgUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQ6CisgICAgICAgIGNvZGUgPSBHZW9s
b2NhdGlvbkVycm9yOjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGNvZGUgPSBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBtb2NrLT5zZXRFcnJvcihHZW9sb2NhdGlvbkVycm9yOjpj
cmVhdGUoY29kZSwgZXJyb3JNZXNzYWdlKSk7CisjZW5kaWYKK30KKworaW50IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dF
T0xPQ0FUSU9OKQorICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9jayA9IHN0YXRpY19jYXN0
PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNvcmUod2ViVmlldyktPmdlb2xvY2F0aW9uQ29udHJv
bGxlcigpLT5jbGllbnQoKSk7CisgICAgcmV0dXJuIG1vY2stPm51bWJlck9mUGVuZGluZ1Blcm1p
c3Npb25SZXF1ZXN0cygpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaAppbmRleCAxYTIwM2Q1YTA3NWE1N2ZiNGVmY2ZjMzhhNWE5Zjg1YmJkODk5
MzkwLi5jYzljYzk3Y2M2YWVhMzUyYTM0YWIzMjIzYjM3MjJmNDc2NDM4YzgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaApAQCAtMTIwLDYgKzEyMCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVu
c2lnbmVkIGludCB3b3JrZXJUaHJlYWRDb3VudCgpOwogICAgIHN0YXRpYyBib29sIHdlYmtpdFdl
YkZyYW1lU2VsZWN0aW9uSGFzU3BlbGxpbmdNYXJrZXIoV2ViS2l0V2ViRnJhbWUqLCBnaW50IGZy
b20sIGdpbnQgbGVuZ3RoKTsKIAorICAgIHN0YXRpYyB2b2lkIHJlc2V0R2VvbG9jYXRpb25DbGll
bnRNb2NrKFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25QZXJtaXNzaW9uKFdlYktpdFdlYlZpZXcqLCBib29sIGFsbG93ZWQpOworICAgIHN0YXRpYyB2
b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7CisgICAgc3RhdGljIHZv
aWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoV2ViS2l0V2ViVmlldyosIGludCBlcnJvckNvZGUs
IGNvbnN0IGdjaGFyKiBlcnJvck1lc3NhZ2UpOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQZW5k
aW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoV2ViS2l0V2ViVmlldyopOworCiBwcml2
YXRlOgogICAgIHN0YXRpYyBib29sIHNfZHJ0UnVuOwogICAgIHN0YXRpYyBib29sIHNfbGlua3NJ
bmNsdWRlZEluVGFiQ2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVmOGJkOWIy
MGQwNzQ2NjM0OTdkMTBhMjQ2NDczOWNmOTgxYzY2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50R3RrLmNwcApAQCAt
MCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRHdGsuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVy
LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UG9zaXRpb24uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIgorI2luY2x1ZGUg
PGdsaWIvZ2kxOG4tbGliLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIGdldFBvc2l0
aW9uQ2FsbGJhY2soR2VvY2x1ZVBvc2l0aW9uKiBwb3NpdGlvbiwgR2VvY2x1ZVBvc2l0aW9uRmll
bGRzIGZpZWxkcywgaW50IHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWx0aXR1ZGUsIEdlb2NsdWVBY2N1cmFjeSogYWNjdXJhY3ksIEdFcnJvciog
ZXJyb3IsIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKGVycm9yKSB7Cisg
ICAgICAgIGNsaWVudC0+ZXJyb3JPY2N1cmVkKGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19l
cnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGllbnQtPnBv
c2l0aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25n
aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK3ZvaWQgcG9zaXRpb25DaGFuZ2VkQ2Fs
bGJhY2soR2VvY2x1ZVBvc2l0aW9uKiBwb3NpdGlvbiwgR2VvY2x1ZVBvc2l0aW9uRmllbGRzIGZp
ZWxkcywgaW50IHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWx0aXR1ZGUsIEdlb2NsdWVBY2N1cmFjeSogYWNjdXJhY3ksIEdlb2xvY2F0aW9uQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgY2xpZW50LT5wb3NpdGlvbkNoYW5nZWQocG9zaXRpb24sIGZp
ZWxkcywgdGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3kp
OworfQorCitHZW9sb2NhdGlvbkNsaWVudDo6R2VvbG9jYXRpb25DbGllbnQoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKKyAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICwgbV9nZW9jbHVlQ2xp
ZW50KDApCisgICAgLCBtX2dlb2NsdWVQb3NpdGlvbigwKQorICAgICwgbV9sYXRpdHVkZSgwKQor
ICAgICwgbV9sb25naXR1ZGUoMCkKKyAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAsIG1fYWNjdXJh
Y3koMCkKKyAgICAsIG1fYWx0aXR1ZGVBY2N1cmFjeSgwKQorICAgICwgbV90aW1lc3RhbXAoMCkK
KyAgICAsIG1fZW5hYmxlSGlnaEFjY3VyYWN5KGZhbHNlKQorICAgICwgbV9pc1VwZGF0aW5nKGZh
bHNlKQoreworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3ll
ZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnN0
YXJ0VXBkYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKworICAgIEdS
ZWZQdHI8R2VvY2x1ZU1hc3Rlcj4gbWFzdGVyID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFzdGVyX2dl
dF9kZWZhdWx0KCkpOworICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3RlckNsaWVudD4gY2xpZW50ID0g
YWRvcHRHUmVmKGdlb2NsdWVfbWFzdGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLmdldCgpLCAwLCAw
KSk7CisgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKF8oIkNvdWxkIG5v
dCBjb25uZWN0IHRvIGxvY2F0aW9uIHByb3ZpZGVyLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHZW9jbHVlQWNjdXJhY3lMZXZl
bCBhY2N1cmFjeUxldmVsID0gbV9lbmFibGVIaWdoQWNjdXJhY3kgPyBHRU9DTFVFX0FDQ1VSQUNZ
X0xFVkVMX0RFVEFJTEVEIDogR0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9MT0NBTElUWTsKKyAgICBp
ZiAoIWdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWlyZW1lbnRzKGNsaWVudC5nZXQoKSwg
YWNjdXJhY3lMZXZlbCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCBHRU9DTFVFX1JFU09VUkNFX0FMTCwgJmVycm9yLm91dFB0cigpKSkg
eworICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9nZW9jbHVlUG9zaXRpb24gPSBhZG9wdEdSZWYoZ2VvY2x1ZV9tYXN0
ZXJfY2xpZW50X2NyZWF0ZV9wb3NpdGlvbihjbGllbnQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkp
OworICAgIGlmICghbV9nZW9jbHVlUG9zaXRpb24pIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKGVy
cm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZ2VvY2x1ZUNs
aWVudCA9IGNsaWVudDsKKyAgICBnZW9jbHVlX3Bvc2l0aW9uX2dldF9wb3NpdGlvbl9hc3luYyht
X2dlb2NsdWVQb3NpdGlvbi5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHZW9jbHVlUG9zaXRpb25D
YWxsYmFjaz4oZ2V0UG9zaXRpb25DYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoR19PQkpFQ1QobV9nZW9jbHVlUG9zaXRpb24uZ2V0KCkpLCAicG9zaXRpb24tY2hhbmdlZCIs
CisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHBvc2l0aW9uQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisKKyAgICBtX2lzVXBkYXRpbmcgPSB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0
aW9uQ2xpZW50OjpzdG9wVXBkYXRpbmcoKQoreworICAgIGlmICghbV9nZW9jbHVlQ2xpZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2dlb2NsdWVQb3NpdGlvbi5jbGVhcigpOworICAgIG1f
Z2VvY2x1ZUNsaWVudC5jbGVhcigpOworCisgICAgbV9pc1VwZGF0aW5nID0gZmFsc2U7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25DbGllbnQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJs
ZSkKK3sKKyAgICBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA9IGVuYWJsZTsKKworICAgIC8vIElmIHdl
J3JlIGFscmVhZHkgdXBkYXRpbmcgd2Ugc2hvdWxkIHJlcG9ydCB0aGUgbmV3IHJlcXVpcmVtZW50
cyBpbiBvcmRlcgorICAgIC8vIHRvIGNoYW5nZSB0byBhIG1vcmUgc3VpdGFibGUgcHJvdmlkZXIg
aWYgbmVlZGVkLiBJZiBub3QsIHJldHVybi4KKyAgICBpZiAoIW1faXNVcGRhdGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdlb2NsdWVBY2N1
cmFjeUxldmVsIGFjY3VyYWN5TGV2ZWwgPSBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA/IEdFT0NMVUVf
QUNDVVJBQ1lfTEVWRUxfREVUQUlMRUQgOiBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0xPQ0FMSVRZ
OworICAgIGlmICghZ2VvY2x1ZV9tYXN0ZXJfY2xpZW50X3NldF9yZXF1aXJlbWVudHMobV9nZW9j
bHVlQ2xpZW50LmdldCgpLCBhY2N1cmFjeUxldmVsLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIEdFT0NMVUVfUkVTT1VSQ0VfQUxMLCAm
ZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7
CisgICAgICAgIHN0b3BVcGRhdGluZygpOworICAgIH0KK30KKworV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbiogR2VvbG9jYXRpb25DbGllbnQ6Omxhc3RQb3NpdGlvbigpCit7CisgICAgcmV0
dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50Ojpy
ZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7Cisg
ICAgY29yZShtX3dlYlZpZXcpLT5jaHJvbWUoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lv
bkZvckZyYW1lKGdlb2xvY2F0aW9uLT5mcmFtZSgpLCBnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KFdlYkNvcmU6Okdlb2xv
Y2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBjb3JlKG1fd2ViVmlldyktPmNocm9tZSgpLT5j
YW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoZ2VvbG9jYXRpb24tPmZy
YW1lKCksIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudDo6cG9zaXRp
b25DaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3NpdGlvbkZpZWxkcyBmaWVsZHMs
IGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5KQoreworICAgIGlmICghKGZpZWxk
cyAmIEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xBVElUVURFICYmIGZpZWxkcyAmIEdFT0NMVUVf
UE9TSVRJT05fRklFTERTX0xPTkdJVFVERSkpIHsKKyAgICAgICAgZXJyb3JPY2N1cmVkKF8oIlBv
c2l0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fdGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIG1fbGF0aXR1ZGUgPSBsYXRp
dHVkZTsKKyAgICBtX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgICBtX2FsdGl0dWRlID0gYWx0
aXR1ZGU7CisKKyAgICBnZW9jbHVlX2FjY3VyYWN5X2dldF9kZXRhaWxzKGFjY3VyYWN5LCAwLCAm
bV9hY2N1cmFjeSwgJm1fYWx0aXR1ZGVBY2N1cmFjeSk7CisKKyAgICB1cGRhdGVQb3NpdGlvbigp
OworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50Ojp1cGRhdGVQb3NpdGlvbigpCit7CisgICAg
bV9sYXN0UG9zaXRpb24gPSBXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3RpbWVzdGFtcCksIG1fbGF0aXR1ZGUsIG1fbG9uZ2l0dWRlLCBt
X2FjY3VyYWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsIG1fYWx0aXR1ZGUsIHRydWUsIG1fYWx0aXR1ZGVBY2N1cmFjeSwg
ZmFsc2UsIDAsIGZhbHNlLCAwKTsKKyAgICBjb3JlKG1fd2ViVmlldyktPmdlb2xvY2F0aW9uQ29u
dHJvbGxlcigpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uQ2xpZW50OjplcnJvck9jY3VyZWQoY29uc3QgY2hhciogbWVzc2FnZSkK
K3sKKyAgICBSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcj4gZXJyb3IgPSBXZWJDb3Jl
OjpHZW9sb2NhdGlvbkVycm9yOjpjcmVhdGUoV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcjo6UG9z
aXRpb25VbmF2YWlsYWJsZSwgbWVzc2FnZSk7CisgICAgY29yZShtX3dlYlZpZXcpLT5nZW9sb2Nh
dGlvbkNvbnRyb2xsZXIoKS0+ZXJyb3JPY2N1cnJlZChlcnJvci5nZXQoKSk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xp
ZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNs
aWVudEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NDJlMzk5ZjM3MjZjMTEwMjU2NTNmMzBkNjRmMzEwMzQ1
MDE1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudEd0ay5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBHZW9sb2NhdGlvbkNsaWVudEd0a19oCisjZGVmaW5lIEdlb2xvY2F0aW9u
Q2xpZW50R3RrX2gKKworI2luY2x1ZGUgIkdSZWZQdHIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlv
bkNsaWVudC5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKKyNpbmNsdWRlIDxn
ZW9jbHVlL2dlb2NsdWUtbWFzdGVyLmg+CisjaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLXBvc2l0
aW9uLmg+CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgR2VvbG9jYXRpb25DbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R2Vv
bG9jYXRpb25DbGllbnQgeworcHVibGljOgorICAgIEdlb2xvY2F0aW9uQ2xpZW50KFdlYktpdFdl
YlZpZXcqKTsKKworICAgIHZvaWQgZ2VvbG9jYXRpb25EZXN0cm95ZWQoKTsKKworICAgIHZvaWQg
c3RhcnRVcGRhdGluZygpOworICAgIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisKKyAgICB2b2lkIHNl
dEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKTsKKyAgICBXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0
aW9uKiBsYXN0UG9zaXRpb24oKTsKKworICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oV2ViQ29y
ZTo6R2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIGNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KFdlYkNv
cmU6Okdlb2xvY2F0aW9uKik7CisKKyAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZChHZW9jbHVlUG9z
aXRpb24qLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMsIGludCwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgR2VvY2x1ZUFjY3VyYWN5Kik7CisgICAgdm9pZCBlcnJvck9jY3VyZWQoY29uc3QgY2hhciop
OworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlUG9zaXRpb24oKTsKKworICAgIFdlYktpdFdl
YlZpZXcqIG1fd2ViVmlldzsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0
aW9uPiBtX2xhc3RQb3NpdGlvbjsKKworICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3RlckNsaWVudD4g
bV9nZW9jbHVlQ2xpZW50OworICAgIEdSZWZQdHI8R2VvY2x1ZVBvc2l0aW9uPiBtX2dlb2NsdWVQ
b3NpdGlvbjsKKworICAgIGRvdWJsZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVk
ZTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZTsKKyAgICBkb3VibGUgbV9hY2N1cmFjeTsKKyAgICBk
b3VibGUgbV9hbHRpdHVkZUFjY3VyYWN5OworICAgIGludCBtX3RpbWVzdGFtcDsKKworICAgIGJv
b2wgbV9lbmFibGVIaWdoQWNjdXJhY3k7CisgICAgYm9vbCBtX2lzVXBkYXRpbmc7Cit9OworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvbkNsaWVudEd0a19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggZTA0NTZmMzk1
ZGEzNmEzZmRmMDUxMzYzMmQwODg5YjgxZTNmMmRjOC4uYTc5NDI4OTlkOGMzOGEzMzkyOGFlZjZk
ZGQ5YWFiNWNiMmI3MGFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIKICNp
bmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRWRpdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCkBAIC01
NSw2ICs1Niw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb25DbGllbnRHdGsuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudE1vY2suaCIK
ICNpbmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCkBAIC0zMzE0LDggKzMzMTcsMTYgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBwYWdl
Q2xpZW50cy5kZXZpY2VPcmllbnRhdGlvbkNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRl
dmljZU9yaWVudGF0aW9uQ2xpZW50Kj4obmV3IERldmljZU9yaWVudGF0aW9uQ2xpZW50R3RrKTsK
ICNlbmRpZgogCisgICAgaWYgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZHVtcFJlbmRlclRy
ZWVNb2RlRW5hYmxlZCgpKQorICAgICAgICBwYWdlQ2xpZW50cy5nZW9sb2NhdGlvbkNsaWVudCA9
IG5ldyBHZW9sb2NhdGlvbkNsaWVudE1vY2s7CisgICAgZWxzZQorICAgICAgICBwYWdlQ2xpZW50
cy5nZW9sb2NhdGlvbkNsaWVudCA9IG5ldyBXZWJLaXQ6Okdlb2xvY2F0aW9uQ2xpZW50KHdlYlZp
ZXcpOworCiAgICAgcHJpdi0+Y29yZVBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CiAKKyAg
ICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVk
KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KHBhZ2VDbGll
bnRzLmdlb2xvY2F0aW9uQ2xpZW50KS0+c2V0Q29udHJvbGxlcihwcml2LT5jb3JlUGFnZS0+Z2Vv
bG9jYXRpb25Db250cm9sbGVyKCkpOworCiAgICAgLy8gUGFnZXMgd2l0aGluIGEgc2FtZSBzZXNz
aW9uIG5lZWQgdG8gYmUgbGlua2VkIHRvZ2V0aGVyIG90aGVyd2lzZSBzb21lIGZ1bmN0aW9uYWxp
dGllcyBzdWNoCiAgICAgLy8gYXMgdmlzaXRlZCBsaW5rIGNvbG9yYXRpb24gKGFjcm9zcyBwYWdl
cykgYW5kIGNoYW5naW5nIHBvcHVwIHdpbmRvdyBsb2NhdGlvbiB3aWxsIG5vdCB3b3JrLgogICAg
IC8vIFRvIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2ltcGxlIChhbmQgYmVjYXVzZSBubyBQ
YWdlR3JvdXAgQVBJIGV4aXN0IGluIFdlYktpdEdUSyBhdCB0aGUKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNjFiYWZkY2MxNmU4Y2NhZmU1OGUz
YzdjNmJhMjE4ZTMxMDk2NzkwLi42ZjY2NDQwM2EzNzY0ZmE4YWM4NmVjODM3YTI2N2ZhMGIyODli
NjE1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTEtMTAtMTYgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdt
YWlsLmNvbT4KKworICAgICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9j
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0
OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0ZXN0aW5nIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiB0ZXN0cyBpbiBE
dW1wUmVuZGVyVHJlZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChyZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKTogUmVz
ZXQgR2VvbG9jYXRpb25DbGllbnRNb2NrLgorICAgICAgICAoY3JlYXRlV2ViVmlldyk6IENyZWF0
ZSB3ZWIgdmlldyBhZnRlciBkZWNsYXJpbmcgRHVtcFJlbmRlclRyZWUgbW9kZS4KKyAgICAgICAg
VGhhdCB3YXkgYSBtb2NrIGNsaWVudCBmb3IgZ2VvbG9jYXRpb24gaXMgdXNlZCBpbnN0ZWFkIG9m
IGEgR2VvQ2x1ZQorICAgICAgICBjbGllbnQgaWYgYSB3ZWIgdmlldyBpcyBjcmVhdGVkIHdoZW4g
dGVzdGluZy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xs
ZXJHdGsuY3BwOiBJbXBsZW1lbnQgZnVuY3Rpb25zIGZvcgorICAgICAgICBnZW9sb2NhdGlvbiBs
YXlvdXQgdGVzdHMuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tH
ZW9sb2NhdGlvbkVycm9yKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJl
ck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKToKKyAgICAgICAgKiBTY3Jp
cHRzL2J1aWxkLXdlYmtpdDogTm90ZSB0aGF0IHRoZSBHdGsgcG9ydCBpcyB1c2luZyBjbGllbnQt
YmFzZWQKKyAgICAgICAgZ2VvbG9jYXRpb24sIGV2ZW4gdGhvdWdoIGNoYW5naW5nIHRoaXMgZmxh
ZyBoYXMgbm8gZWZmZWN0IG9uIGNvbXBpbGF0aW9uLgorCiAyMDExLTEwLTE2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoRE9N
X1NUT1JBR0UpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRl
clRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCBjZDExOGM1MWRlOTJmN2RjYjgxMGI5ZmM5Njg1MmE2ODU3NWU0NTY3Li42MzRlMmM3MzRh
MzlkYjQxMGNkY2NjMDdmNzdkNmExNzNhMzY0NDA3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTQ3OCw2ICs0NzgsOCBAQCBzdGF0aWMgdm9pZCBy
ZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICAgICAgYXhDb250cm9sbGVyLT5y
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OmNsZWFyT3BlbmVyKG1haW5GcmFtZSk7CisKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnJlc2V0R2VvbG9jYXRpb25DbGllbnRNb2NrKHdlYlZpZXcpOwogfQogCiBzdGF0aWMgYm9vbCB1
c2VMb25nUnVubmluZ1NlcnZlck1vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTEwOTYs
MTAgKzEwOTgsMTIgQEAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqLCBXZWIKIAogc3RhdGljIFdlYktpdFdl
YlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcoc2VsZl9zY3JvbGxpbmdfd2Via2l0X3dlYl92aWV3X25ldygpKTsKLQorICAg
IC8vIEl0IGlzIGltcG9ydGFudCB0byBkZWNsYXJlIERSVCBpcyBydW5uaW5nIGVhcmx5IHNvIHdo
ZW4gY3JlYXRpbmcKKyAgICAvLyB3ZWIgdmlldyBtb2NrIGNsaWVudHMgYXJlIHVzZWQgaW5zdGVh
ZCBvZiBwcm9wZXIgb25lcy4KICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldER1bXBS
ZW5kZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7CiAKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHNlbGZfc2Nyb2xsaW5nX3dlYmtpdF93ZWJfdmlld19uZXcoKSk7CisK
ICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAogICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6bG9hZC1zdGFydGVkIiwgd2ViVmlld0xvYWRTdGFydGVkLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6bG9hZC1maW5pc2hlZCIsIHdlYlZpZXdMb2FkRmluaXNo
ZWQsIDAsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcAppbmRleCAzZjJjY2M3ZDA1N2I1MDhlMzVmNGUxNjI1NWMzMjg1ZGZkZjkx
ZGJiLi43NzU1MjhiNTk1NDk4M2ViMTBmOTE3Yzg2YTk2MWYxNGM2OTgyZDI5IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
QEAgLTQ3NCwyNiArNDc0LDQ0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlCiAKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlz
dCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbih2aWV3LCBsYXRp
dHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdl
KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MjY0LgorICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9u
dGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAgICAgdmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZp
ZXcpOworCisgICAgR093blB0cjxnY2hhcj4gY01lc3NhZ2UoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcobWVzc2FnZSkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xv
Y2F0aW9uRXJyb3IodmlldywgY29kZSwgY01lc3NhZ2UuZ2V0KCkpOwogfQogCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAg
ICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3Qs
IDApKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbih2aWV3LCBhbGxv
dyk7CiB9CiAKIGludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9y
IEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICByZXR1cm4gLTE7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cyh2aWV3KTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3Ry
aW5nUmVmIGxhbmd1YWdlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQg
Yi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCA0ZTNiMmFmNDg5NTk2MWQyYTIzY2Uz
M2Q4MzJiYzU3NGQ5OTYwYzZkLi5jMDdhZDJhNjk4MGQyYTE3YmZkNDE0ZmFkN2E2ZTQ4MDNhOGU1
MWRmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMTU1LDcgKzE1NSw3IEBAIG15IEBmZWF0dXJlcyA9ICgK
ICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIiwgZGVmYXVsdCA9PiAx
LCB2YWx1ZSA9PiBcJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9
PiAiY2xpZW50LWJhc2VkLWdlb2xvY2F0aW9uIiwgZGVzYyA9PiAiVG9nZ2xlIGNsaWVudC1iYXNl
ZCBHZW9sb2NhdGlvbiBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTiIsIGRlZmF1bHQgPT4gaXNBcHBsZVdlYktpdCgpLCB2YWx1ZSA9PiBc
JGNsaWVudEJhc2VkR2VvbG9jYXRpb25TdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04iLCBkZWZhdWx0ID0+IChpc0FwcGxlV2ViS2l0KCkg
fHwgaXNHdGsoKSksIHZhbHVlID0+IFwkY2xpZW50QmFzZWRHZW9sb2NhdGlvblN1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJjc3MtZmlsdGVycyIsIGRlc2MgPT4gIlRvZ2dsZSBDU1MgRmls
dGVycyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTU19GSUxURVJTIiwgZGVm
YXVsdCA9PiBpc0FwcGxlV2ViS2l0KCksIHZhbHVlID0+IFwkY3NzRmlsdGVyc1N1cHBvcnQgfSwK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxYWRlNjAzMWM5MjliNTBjMjk5Zjc5ZTZhMTQzMWE3MmI0ODVkOTdmLi5mMzJkMTU0
ZTE1NWY3MGRkY2M0NmU4ZTc0MWU4YTBhZWIxMjYxMzQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMTAtMTYgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAg
ICAgICBbR3RrXSBTdXBwb3J0IGZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgorCisgICAgICAgIFVuc2tpcCBnZW9sb2NhdGlv
biB0ZXN0cyB0aGF0IG5vdyBwYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6
CisKIDIwMTEtMTAtMTcgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFZGl0aW5nIENTUyBzZWxlY3RvciBkb2Vzbid0IGZp
cmUgb25SZXNvdXJjZUNvbnRlbnRDb21taXR0ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5k
ZXggZDA1YmM2NWM4MDQ5ZjM3OGFhNzAyYzgyYzE1ZWQ5NWY3NmJlNWNjZi4uYzAyM2VlYTZkZmJi
ODE4NjFiYzBhZmU4MWFiYmI1YjE4OTkzOTZhZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
QEAgLTkwMCw0MyArOTAwLDYgQEAgZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi1ob3Jpem9udGFs
LXNjcm9sbGJhci1pbi1ydGwuaHRtbAogZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi12ZXJ0aWNh
bC1zY3JvbGxiYXItaW4tcnRsLmh0bWwKIGZhc3QvZXZlbnRzL3Njcm9sbC1pbi1zY2FsZWQtcGFn
ZS13aXRoLW92ZXJmbG93LWhpZGRlbi5odG1sCiAKLQotIyBOZWVkcyBtb2NrIHN1cHBvcnQsIGFu
ZCBidWlsZCBzbGF2ZSBHZW9sb2NhdGlvbiBzZXJ2aWNlCi0jIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYwNTMKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxi
YWNrLWV4Y2VwdGlvbi5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Np
b24tYWxsb3dlZC1mb3ItbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRp
b24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1mb3ItbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAotZmFz
dC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCi1mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9lcnJvci5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFn
ZS5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1mYXN0
L2RvbS9HZW9sb2NhdGlvbi9uby1wYWdlLWNhY2hlLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9u
L3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktY2xlYXItd2F0Y2guaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vcG9zaXRpb24tc3RyaW5nLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3JlZW50
cmFudC1lcnJvci5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVudHJhbnQtcGVybWlzc2lv
bi1kZW5pZWQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vcmVlbnRyYW50LXN1Y2Nlc3MuaHRt
bAotZmFzdC9kb20vR2VvbG9jYXRpb24vc3VjY2Vzcy5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlv
bi90aW1lb3V0LWNsZWFyLXdhdGNoLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3RpbWVvdXQu
aHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vdGltZXN0YW1wLmh0bWwKLWZhc3QvZG9tL0dlb2xv
Y2F0aW9uL3dhdGNoLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL3dpbmRvdy1jbG9zZS1jcmFz
aC5odG1sCi0KLSMgTmVlZHMgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLSMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDE5NwotZmFzdC9kb20vR2VvbG9jYXRpb24vcGFnZS1yZWxv
YWQtY2FuY2VsLXBlcm1pc3Npb24tcmVxdWVzdHMuaHRtbAotCi0jIFdlJ3JlIG5vdCBxdWl0ZSBy
ZWFkeSB0byBydW4gdGhlc2UgdGVzdHMsIGJlY2F1c2UgdGhlIHNsYXZlcyBuZWVkCi0jIEdlb2Ns
dWUgc3VwcG9ydC4gSWYgd2UgaW1wbGVtZW50IHN1cHBvcnQgZm9yIHRoZSBtb2NrIGdlb2xvY2F0
aW9uIHNlcnZpY2UKLSMgbWF5YmUgd2UgY2FuIGF2b2lkIHRoaXMuCi0jIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU2NzQKLWZhc3QvZG9tL0dlb2xvY2F0aW9u
L3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRp
b24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNjZXNzLmh0bWwKLWZhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLXN0b3BzLXdhdGNoZXMuaHRtbAotZmFzdC9kb20vR2Vv
bG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQuaHRtbAotCiAjIE1pc3NlcyBzZXRNZWRpYVR5cGUo
KSBpbXBsZW1lbnRhdGlvbgogZmFzdC9tZWRpYS9wcmludC1yZXN0b3Jlcy1wcmV2aW91cy1tZWRp
YXR5cGUuaHRtbAogCkBAIC0xMDg5LDE0ICsxMDUyLDYgQEAgZmFzdC9sb2FkZXIvbnVsbC1yZXF1
ZXN0LWFmdGVyLXdpbGxTZW5kUmVxdWVzdC5odG1sCiBlZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQt
bWVudS1zdWdnZXN0aW9ucy5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi9jb250ZXh0LW1lbnUtb24t
dGV4dC5odG1sCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQw
MTUzCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1yZW1vdGUtY29udGV4dC5odG1s
Ci1mYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1yZW1vdGUtY29udGV4dDIuaHRtbAot
ZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0Lmh0bWwKLWZh
c3QvZG9tL0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1mcmFtZS5odG1sCi1mYXN0L2RvbS9HZW9s
b2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtYWxyZWFkeS5odG1sCi1mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAotCiAjIFNvbWUg
aW5wdXQgdHlwZT1yYW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2YgdGhlIHNpemUgCiAjIG9mIHRo
ZSBzbGlkZXIgdGh1bWIgaW4gR1RLKyB0aGVtZXMuCiBmYXN0L2Zvcm1zL3JhbmdlL3NsaWRlci1t
b3VzZS1ldmVudHMuaHRtbApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4
IDNiYTgzMWM3MTdlN2JkZTFhMzcxYmNlODY5NThiMjUyOTExYzAxMWQuLjhhZWQ0ODFmM2E2MGJm
NWU4ZmNhMGEzY2RmNGI4MDdiMjQ2NjcwMGMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xNiAgWmFuIERvYmVyc2VrICA8emFu
ZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHdGtdIFN1cHBvcnQgZm9yIGNsaWVudC1i
YXNlZCBnZW9sb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjQ5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisK
KyAgICAgICAgUmVtb3ZlIGZsYWcgZm9yIGVuYWJsaW5nIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlv
biBzaW5jZQorICAgICAgICBpdCBpcyB1c2VkIGJ5IGRlZmF1bHQgb24gR3RrIHBvcnQgYW5kIGhl
bmNlIG5vdCBjb25maWd1cmFibGUuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMTEt
MTAtMTcgIFZhbXNoaWtyaXNobmEgWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29tPgogCiAg
ICAgICAgIFt3ZWJraXRdRGVidWcgQnVpbGQgQm90IGZhaWx1cmUKZGlmZiAtLWdpdCBhL2NvbmZp
Z3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjMzI1MWJlM2Q2NzVmZjAwZjUzMDU2OTA1NWNm
ZTM3OTAwNzEwMDUyLi4wZDc2Y2JkNzNkZjcyODFjZWNhMWEwZjc3ZTAyNTdlY2YzN2Y5N2ZmIDEw
MDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC02MzAsMTQgKzYz
MCw2IEBAIEFDX0FSR19FTkFCTEUoZ2VvbG9jYXRpb24sCiAgICAgICAgICAgICAgIFtdLFtlbmFi
bGVfZ2VvbG9jYXRpb249Im5vIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2dlb2xvY2F0aW9u
XSkKIAotIyBjaGVjayB3aGV0aGVyIHRvIGVuYWJsZSBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24g
c3VwcG9ydAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBjbGllbnQtYmFzZWQg
Z2VvbG9jYXRpb24gc3VwcG9ydF0pCi1BQ19BUkdfRU5BQkxFKGNsaWVudF9iYXNlZF9nZW9sb2Nh
dGlvbiwKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNsaWVudC1iYXNl
ZC1nZW9sb2NhdGlvbl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgc3Vw
cG9ydCBmb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIFtkZWZhdWx0PW5vXV0pLAotICAgICAg
ICAgICAgICBbXSxbZW5hYmxlX2NsaWVudF9iYXNlZF9nZW9sb2NhdGlvbj0ibm8iXSkKLUFDX01T
R19SRVNVTFQoWyRlbmFibGVfY2xpZW50X2Jhc2VkX2dlb2xvY2F0aW9uXSkKLQogIyBjaGVjayB3
aGV0aGVyIHRvIGVuYWJsZSBNYXRoTUwgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVy
IHRvIGVuYWJsZSBNYXRoTUwgc3VwcG9ydF0pCiBBQ19BUkdfRU5BQkxFKG1hdGhtbCwKQEAgLTEx
NjksNyArMTE2MSw2IEBAIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFBBVEhdLFt0ZXN0ICIkZW5h
YmxlX3hwYXRoIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFNMVF0sW3Rlc3Qg
IiRlbmFibGVfeHNsdCIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0ZJTFRFUlNd
LFt0ZXN0ICIkZW5hYmxlX2ZpbHRlcnMiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJM
RV9HRU9MT0NBVElPTl0sIFt0ZXN0ICIkZW5hYmxlX2dlb2xvY2F0aW9uIiA9ICJ5ZXMiXSkKLUFN
X0NPTkRJVElPTkFMKFtFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OXSwgW3Rlc3QgIiRl
bmFibGVfY2xpZW50X2Jhc2VkX2dlb2xvY2F0aW9uIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFM
KFtFTkFCTEVfTUFUSE1MXSwgW3Rlc3QgIiRlbmFibGVfbWF0aG1sIiA9ICJ5ZXMiXSkKIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfTUhUTUxdLCBbdGVzdCAiJGVuYWJsZV9taHRtbCIgPSAieWVzIl0p
CiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1ZJREVPXSxbdGVzdCAiJGVuYWJsZV92aWRlbyIgPSAi
eWVzIl0pCkBAIC0xMjYyLDcgKzEyNTMsNiBAQCBGZWF0dXJlczoKICBKSVQgY29tcGlsYXRpb24g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaml0CiAg
RmlsdGVycyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkZW5hYmxlX2ZpbHRlcnMKICBHZW9sb2NhdGlvbiBzdXBwb3J0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZ2VvbG9jYXRpb24KLSBDbGllbnQtYmFzZWQg
Z2VvbG9jYXRpb24gc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY2xp
ZW50X2Jhc2VkX2dlb2xvY2F0aW9uCiAgSmF2YVNjcmlwdCBkZWJ1Z2dlci9wcm9maWxlciBzdXBw
b3J0ICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2phdmFzY3JpcHRfZGVidWdnZXIKICBH
YW1lcGFkIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICRlbmFibGVfZ2FtZXBhZAogIE1hdGhNTCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9tYXRobWwK
</data>

          </attachment>
      

    </bug>

</bugzilla>