<?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>29134</bug_id>
          
          <creation_ts>2009-09-10 11:43:16 -0700</creation_ts>
          <short_desc>[GTK] Add API to access sub resources</short_desc>
          <delta_ts>2009-09-14 19:13:19 -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>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gustavo Noronha (kov)">gustavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jmalonzo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>146269</commentid>
    <comment_count>0</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-10 11:43:16 -0700</bug_when>
    <thetext>We now have API to peek into the data that is used to render the page, but only the main resource is currently accessible. It&apos;s important to also be able to peek at the images, css, javascript, and all other files that compose the page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146284</commentid>
    <comment_count>1</comment_count>
      <attachid>39366</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-10 12:10:48 -0700</bug_when>
    <thetext>Created attachment 39366
proposed API

Points worth noting:

WebView is used to store the hash table because the DataSource object is only created after the first resource was already created; I would appreciate suggestions on where to place the hash table in a way that we don&apos;t need to get to the WebView from the DataSource, since I believe the API should be in the DataSource.

Some things are done in a way that seems a bit convoluted (the main resource handling, for instance), but that is because I really want the resource objects to be exactly the same through their lifetime, so that you can keep objects you get in resource-request-starting, and even compare them with other references to know if they are the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146285</commentid>
    <comment_count>2</comment_count>
      <attachid>39367</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-10 12:14:01 -0700</bug_when>
    <thetext>Created attachment 39367
save as... implementation for epiphany

This is the save operation in Epiphany implemented using the sub resources API. It&apos;s worth noting that if we can agree on the API for 1.1.15, that should probably release with GNOME 2.28, we can get this in to provide this feature for Epiphany soon rather than later. As long as the implementation works and is stable, it can be perfected/refactored afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146319</commentid>
    <comment_count>3</comment_count>
      <attachid>39366</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-10 13:37:23 -0700</bug_when>
    <thetext>Comment on attachment 39366
proposed API

&gt; @@ -799,6 +808,11 @@ void FrameLoaderClient::finishedLoading(WebCore::DocumentLoader* documentLoader)
&gt;  
&gt;  void FrameLoaderClient::provisionalLoadStarted()
&gt;  {
&gt; +    WebKitWebView* webView = getViewFromFrame(m_frame);
&gt; +
&gt; +    if (m_frame == webkit_web_view_get_main_frame(webView))
&gt; +        webkit_web_view_clear_resources(webView);
&gt; +
&gt;      notImplemented();
&gt;  }

My usual question, what else do you need to do here? Either add a comment ar remove the notImplemented().

&gt;  
&gt; @@ -824,6 +838,23 @@ void FrameLoaderClient::dispatchDidFinishLoading(WebCore::DocumentLoader* loader
&gt;  {
&gt;      static_cast&lt;WebKit::DocumentLoader*&gt;(loader)-&gt;decreaseLoadCount(identifier);
&gt;  
&gt; +    WebKitWebView* webView = getViewFromFrame(m_frame);
&gt; +    GOwnPtr&lt;gchar&gt; identifierString(identifierToString(identifier));
&gt; +    WebKitWebResource* webResource = webkit_web_view_get_resource(webView, identifierString.get());
&gt; +
&gt; +    const char* uri = webkit_web_resource_get_uri(webResource);
&gt; +    RefPtr&lt;ArchiveResource&gt; coreResource(loader-&gt;subresource(KURL(KURL(), uri)));
&gt; +
&gt; +    // If coreResource is NULL here, the resource failed to load,
&gt; +    // unless it&apos;s the main resource.
&gt; +    if (!coreResource &amp;&amp; (webResource != webkit_web_view_get_main_resource(webView)))

You don&apos;t really need the parenthesis.

&gt; +
&gt; +    webkit_web_resource_init_with_core_resource(webResource, coreResource.get());
&gt; +
&gt;      // FIXME: This function should notify the application that the resource
&gt;      // finished loading, maybe using a load-status property in the
&gt;      // WebKitWebResource object, similar to what we do for WebKitWebFrame&apos;


&gt; diff --git a/WebKit/gtk/webkit/webkitwebresource.cpp b/WebKit/gtk/webkit/webkitwebresource.cpp
&gt; index 98e781a..17bead1 100644
&gt; --- a/WebKit/gtk/webkit/webkitwebresource.cpp
&gt; +++ b/WebKit/gtk/webkit/webkitwebresource.cpp
&gt; @@ -60,12 +60,14 @@ G_DEFINE_TYPE(WebKitWebResource, webkit_web_resource, G_TYPE_OBJECT);
&gt;  static void webkit_web_resource_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
&gt;  static void webkit_web_resource_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
&gt;  
&gt; -static void webkit_web_resource_cleanup(WebKitWebResource* webResource)
&gt; +static void webkit_web_resource_cleanup(WebKitWebResource* webResource, bool isFinalize)
&gt;  {
&gt;      WebKitWebResourcePrivate* priv = webResource-&gt;priv;
&gt;  
&gt; -    g_free(priv-&gt;uri);
&gt; -    priv-&gt;uri = NULL;
&gt; +    if (isFinalize) {
&gt; +      g_free(priv-&gt;uri);
&gt; +      priv-&gt;uri = NULL;
&gt; +    }
&gt;  
&gt;      g_free(priv-&gt;mimeType);
&gt;      priv-&gt;mimeType = NULL;
&gt; @@ -98,7 +100,7 @@ static void webkit_web_resource_finalize(GObject* object)
&gt;  {
&gt;      WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(object);
&gt;  
&gt; -    webkit_web_resource_cleanup(webResource);
&gt; +    webkit_web_resource_cleanup(webResource, true);
&gt;  
&gt;      G_OBJECT_CLASS(webkit_web_resource_parent_class)-&gt;finalize(object);
&gt;  }
&gt; @@ -230,6 +232,20 @@ WebKitWebResource* webkit_web_resource_new_with_core_resource(PassRefPtr&lt;Archive
&gt;      return webResource;
&gt;  }
&gt;  

Per discussion on IRC it seems this is not useful, and that even cleaning up the resource on init_with_core_resource is also not useful, so I&apos;d say leave it out.

Looks good otherwise, so 1/2 r=me (but we need tests!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146770</commentid>
    <comment_count>4</comment_count>
      <attachid>39481</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-11 15:29:22 -0700</bug_when>
    <thetext>Created attachment 39481
comments addressed, tests added</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146850</commentid>
    <comment_count>5</comment_count>
      <attachid>39481</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-09-11 18:15:31 -0700</bug_when>
    <thetext>Comment on attachment 39481
comments addressed, tests added

&gt; +
&gt; +	https://bugs.webkit.org/show_bug.cgi?id=29134
&gt; +	[GTK] Add API to access sub resources
&gt; +
&gt; +        Implement getting subresources, and improve testing of
&gt; +	main, and sub resources loading.
&gt; +
&gt; +        * WebCoreSupport/FrameLoaderClientGtk.cpp:
&gt; +        (WebKit::identifierToString):
&gt; +        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
&gt; +        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):
&gt; +        (WebKit::FrameLoaderClient::provisionalLoadStarted):
&gt; +        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):
&gt; +        * tests/testwebresource.c:
&gt; +        (server_callback):
&gt; +        (resource_request_starting_cb):
&gt; +        (load_finished_cb):
&gt; +        (test_web_resource_loading):
&gt; +        (resource_request_starting_sub_cb):
&gt; +        (load_finished_sub_cb):
&gt; +        (idle_quit_loop_cb):
&gt; +        (test_web_resource_sub_resource_loading):
&gt; +        (main):
&gt; +        * webkit/webkitprivate.h:
&gt; +        * webkit/webkitwebdatasource.cpp:
&gt; +        (webkit_web_data_source_get_main_resource):
&gt; +        (webkit_web_data_source_get_sub_resources):
&gt; +        * webkit/webkitwebdatasource.h:
&gt; +        * webkit/webkitwebresource.cpp:
&gt; +        (webkit_web_resource_init_with_core_resource):
&gt; +        (webkit_web_resource_get_data):
&gt; +        * webkit/webkitwebview.cpp:
&gt; +        (webkit_web_view_dispose):
&gt; +        (webkit_web_view_finalize):
&gt; +        (webkit_web_view_init):
&gt; +        (webkit_web_view_add_resource):
&gt; +        (webkit_web_view_get_resource):
&gt; +        (webkit_web_view_get_main_resource):
&gt; +        (webkit_web_view_clear_resources):
&gt; +        (webkit_web_view_get_sub_resources):

No need to check the method names unless they have specific comments.

&gt; +static char* identifierToString(unsigned long identifier)

Maybe name this toString instead.

&gt; +    if (!redirectResponse.isNull()) {
&gt; +        // This is a redirect, so we need to update the WebResource&apos;s knowledge
&gt; +        // of the URI.
&gt; +        g_free(webResource-&gt;priv-&gt;uri);
&gt; +        webResource-&gt;priv-&gt;uri = g_strdup(request.url().string().utf8().data());

I would&apos;ve preferred to set the property instead of accessing private members like this. 

&gt; -void FrameLoaderClient::assignIdentifierToInitialRequest(unsigned long, WebCore::DocumentLoader*, const ResourceRequest&amp;)
&gt; +void FrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const ResourceRequest&amp; request)
&gt;  {
&gt; -    notImplemented();
&gt; +    webkit_web_view_add_resource(getViewFromFrame(m_frame), identifierToString(identifier),
&gt; +                                 WEBKIT_WEB_RESOURCE(g_object_new(WEBKIT_TYPE_WEB_RESOURCE, &quot;uri&quot;, request.url().string().utf8().data(), 0)));
&gt;  }
&gt;  
&gt;  void FrameLoaderClient::postProgressStartedNotification()
&gt; @@ -799,7 +815,10 @@ void FrameLoaderClient::finishedLoading(WebCore::DocumentLoader* documentLoader)
&gt;  
&gt;  void FrameLoaderClient::provisionalLoadStarted()
&gt;  {
&gt; -    notImplemented();
&gt; +    WebKitWebView* webView = getViewFromFrame(m_frame);
&gt; +
&gt; +    if (m_frame == webkit_web_view_get_main_frame(webView))
&gt; +        webkit_web_view_clear_resources(webView);
&gt;  }
&gt;  
&gt;  void FrameLoaderClient::didFinishLoad() {
&gt; @@ -824,6 +843,23 @@ void FrameLoaderClient::dispatchDidFinishLoading(WebCore::DocumentLoader* loader
&gt;  {
&gt;      static_cast&lt;WebKit::DocumentLoader*&gt;(loader)-&gt;decreaseLoadCount(identifier);
&gt;  
&gt; +    WebKitWebView* webView = getViewFromFrame(m_frame);
&gt; +    GOwnPtr&lt;gchar&gt; identifierString(identifierToString(identifier));
&gt; +    WebKitWebResource* webResource = webkit_web_view_get_resource(webView, identifierString.get());
&gt; +
&gt; +    const char* uri = webkit_web_resource_get_uri(webResource);
&gt; +    RefPtr&lt;ArchiveResource&gt; coreResource(loader-&gt;subresource(KURL(KURL(), uri)));
&gt; +
&gt; +    // If coreResource is NULL here, the resource failed to load,
&gt; +    // unless it&apos;s the main resource.
&gt; +    if (!coreResource &amp;&amp; webResource != webkit_web_view_get_main_resource(webView))

You could just get the main resource from the data source here.

&gt; +    if (!coreResource)
&gt; +        coreResource = loader-&gt;mainResource().releaseRef();
&gt; +
&gt; +    webkit_web_resource_init_with_core_resource(webResource, coreResource.get());
&gt; +

What&apos;s this for?

&gt; diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
&gt; index c471714..38c6869 100644
&gt; --- a/WebKit/gtk/webkit/webkitprivate.h
&gt; +++ b/WebKit/gtk/webkit/webkitprivate.h
&gt; @@ -140,6 +140,12 @@ extern &quot;C&quot; {
&gt;  
&gt;          gboolean disposing;
&gt;          gboolean usePrimaryForPaste;
&gt; +
&gt; +        // These are hosted here because the DataSource object is
&gt; +        // created too late in the frame loading process.

Can you please expound more about when we need the resource and why it&apos;s too late in the frame loading process? Can we have a resource without a data source/document loader?
Are we doing something different from Mac here?

&gt; +        WebKitWebResource* mainResource;
&gt; +        char* mainResourceIdentifier;
&gt; +        GHashTable* subResources;

Same. Can we have a main resource without a data source/document loader?

&gt;      webkit_web_resource_new_with_core_resource(PassRefPtr&lt;WebCore::ArchiveResource&gt;);
&gt;  
&gt; +    void
&gt; +    webkit_web_resource_init_with_core_resource(WebKitWebResource*, PassRefPtr&lt;WebCore::ArchiveResource&gt;);
&gt; +

You could just add a WebResource param to _new_with_core_resource and check for NULL in the impl.
  
&gt; +    void
&gt; +    webkit_web_view_add_resource(WebKitWebView*, char*, WebKitWebResource*);
&gt; +
&gt; +    WebKitWebResource*
&gt; +    webkit_web_view_get_resource(WebKitWebView*, char*);
&gt; +
&gt; +    WebKitWebResource*
&gt; +    webkit_web_view_get_main_resource(WebKitWebView*);
&gt; +
&gt; +    void
&gt; +    webkit_web_view_clear_resources(WebKitWebView*);
&gt; +
&gt; +    GList*
&gt; +    webkit_web_view_get_sub_resources(WebKitWebView*);

&gt; -    RefPtr&lt;ArchiveResource&gt; coreResource = priv-&gt;loader-&gt;mainResource();
&gt; +    if (priv-&gt;mainresource)
&gt; +        return priv-&gt;mainresource;
&gt;  
&gt; -    ASSERT(coreResource);
&gt; +    WebKitWebFrame* webFrame = webkit_web_data_source_get_web_frame(webDataSource);
&gt; +    WebKitWebView* webView = getViewFromFrame(webFrame);
&gt;  
&gt; -    if (priv-&gt;mainresource)
&gt; -        g_object_unref(priv-&gt;mainresource);
&gt; +    priv-&gt;mainresource = WEBKIT_WEB_RESOURCE(g_object_ref(webkit_web_view_get_main_resource(webView)));
&gt;  
&gt; -    priv-&gt;mainresource = webkit_web_resource_new_with_core_resource(coreResource.release());

How is the view mainresource different from the DS main resource?

r-. We need to clarify why we can&apos;t use DS for these and expound more on difference between WebView resources to DS resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146927</commentid>
    <comment_count>6</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-12 08:00:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; No need to check the method names unless they have specific comments.

This is news to me, but I am happy to remove that crap from my commits =).
 
&gt; &gt; +static char* identifierToString(unsigned long identifier)
&gt; 
&gt; Maybe name this toString instead.

Sounds like a plan.

&gt; &gt; +        g_free(webResource-&gt;priv-&gt;uri);
&gt; &gt; +        webResource-&gt;priv-&gt;uri = g_strdup(request.url().string().utf8().data());
&gt; 
&gt; I would&apos;ve preferred to set the property instead of accessing private members
&gt; like this. 

This involves removing the G_PARAM_CONSTRUCT_ONLY from the property. Are you OK with doing that?

&gt; &gt; +    // If coreResource is NULL here, the resource failed to load,
&gt; &gt; +    // unless it&apos;s the main resource.
&gt; &gt; +    if (!coreResource &amp;&amp; webResource != webkit_web_view_get_main_resource(webView))
&gt; 
&gt; You could just get the main resource from the data source here.

Yeah, but then I have to first get the DataSource object. Since I already have the webView here, this seemed sensible =).

&gt; &gt; +    if (!coreResource)
&gt; &gt; +        coreResource = loader-&gt;mainResource().releaseRef();
&gt; &gt; +
&gt; &gt; +    webkit_web_resource_init_with_core_resource(webResource, coreResource.get());
&gt; &gt; +
&gt; 
&gt; What&apos;s this for?

When the WebResource is first created (in willSendRequest before this patch, in assignIdentifier in this patch), WebCore still does not have the ArchiveResource object for the resource. That object is only created when the resource load is finished. Here we fill the WebResource object we created at assignIdentifier, and gave to the user during willSendRequest with the actual, interesting, data.

&gt; &gt; +        // These are hosted here because the DataSource object is
&gt; &gt; +        // created too late in the frame loading process.
&gt; 
&gt; Can you please expound more about when we need the resource and why it&apos;s too
&gt; late in the frame loading process? Can we have a resource without a data
&gt; source/document loader?
&gt; Are we doing something different from Mac here?

Sure. Yeah, Mac doesn&apos;t use an object to represent the resource itself, it uses an &apos;index&apos; object, that you can use to request the object, and it also stores these objects in its WebView, not in the DataSource, so we are doing exactly like Mac in this regard.

The problem here is that, when a load starts, the DataSource is still not created when the main resource starts loading (during, say, assignIdentifier).

&gt; &gt; +        WebKitWebResource* mainResource;
&gt; &gt; +        char* mainResourceIdentifier;
&gt; &gt; +        GHashTable* subResources;
&gt; 
&gt; Same. Can we have a main resource without a data source/document loader?

Yeah.
 
&gt; &gt;      webkit_web_resource_new_with_core_resource(PassRefPtr&lt;WebCore::ArchiveResource&gt;);
&gt; &gt;  
&gt; &gt; +    void
&gt; &gt; +    webkit_web_resource_init_with_core_resource(WebKitWebResource*, PassRefPtr&lt;WebCore::ArchiveResource&gt;);
&gt; &gt; +
&gt; 
&gt; You could just add a WebResource param to _new_with_core_resource and check for
&gt; NULL in the impl.

Right, but I am not creating a new WebResource object there, so the semantics are quite different. If you look at init_with_core_resource&apos;s implementation you&apos;ll see there&apos;s no g_object_new call there. The important thing to keep in mind here is that we want the same WebResource object to remain throughout the various signals/delegates , so that the user can keep a reference the object he got in resource-request-starting, and even compare his pointer to a pointer he gets later on to know if they are the same. This is important since we don&apos;t give the identifier to the user - the identifier is the pointer.
 
&gt; &gt; -        g_object_unref(priv-&gt;mainresource);
&gt; &gt; +    priv-&gt;mainresource = WEBKIT_WEB_RESOURCE(g_object_ref(webkit_web_view_get_main_resource(webView)));
&gt; &gt;  
&gt; &gt; -    priv-&gt;mainresource = webkit_web_resource_new_with_core_resource(coreResource.release());
&gt; 
&gt; How is the view mainresource different from the DS main resource?

It&apos;s not, they are exactly the same. The view is just holding the stuff, because it exists before the DS is created. DS is still the API that exposes them to the user. This is similar to what Mac is doing, like I said:

void WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader* loader, unsig
ned long identifier, ResourceRequest&amp; request, const ResourceResponse&amp; redirectR
esponse)
{
[...]
    if (implementations-&gt;willSendRequestFunc)
        request = (NSURLRequest *)CallResourceLoadDelegate(implementations-&gt;willSendRequestFunc, webView, @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:), [webView _objectForIdentifier:identifier], request.nsURLRequest(), redirectResponse.nsURLResponse(), dataSource(loader));
}

Notice the [webView _objectForIdentifier:identifier] message here =).
 
&gt; r-. We need to clarify why we can&apos;t use DS for these and expound more on
&gt; difference between WebView resources to DS resources.

I hope I have clarified these points in the comments here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147142</commentid>
    <comment_count>7</comment_count>
      <attachid>39481</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-09-14 12:57:34 -0700</bug_when>
    <thetext>Comment on attachment 39481
comments addressed, tests added

Ok. Possibly renaming get_sub_resources to get_subresources. Also, please fix the agreed changes in the previous comment before landing.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147245</commentid>
    <comment_count>8</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-09-14 19:13:19 -0700</bug_when>
    <thetext>Landed as r48382. I am not sure there was agreement on whether we should make the uri property non-CONSTRUCT_ONLY, so I left it as it was, but we can change it if you guys think it&apos;s a good choice.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39366</attachid>
            <date>2009-09-10 12:10:48 -0700</date>
            <delta_ts>2009-09-11 15:29:22 -0700</delta_ts>
            <desc>proposed API</desc>
            <filename>0001-Implement-getting-sub-resources.patch</filename>
            <type>text/plain</type>
            <size>17308</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBjMmM4ZTg0NTJlYTZjY2ZiNGViMTBjNDVhYzUxMTIwMGM4ZjI1ZWViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGd1c3Rhdm8ubm9yb25o
YUBjb2xsYWJvcmEuY28udWs+CkRhdGU6IFRodSwgMTAgU2VwIDIwMDkgMTM6MjE6MDIgLTAzMDAK
U3ViamVjdDogW1BBVENIXSBJbXBsZW1lbnQgZ2V0dGluZyBzdWIgcmVzb3VyY2VzCgotLS0KIFdl
YktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNSAr
KysrKysrKysKIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwIHwgICA0MSArKysrKysrKysrLS0KIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUu
aCAgICAgICAgICAgICAgICAgIHwgICAyNCArKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJkYXRhc291cmNlLmNwcCAgICAgICAgICB8ICAgMzMgKysrKysrKy0tCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmggICAgICAgICAgICB8ICAgIDMgKwogV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2VicmVzb3VyY2UuY3BwICAgICAgICAgICAgfCAgIDI3ICsrKysr
Ky0KIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAgICAgIHwg
ICA3MyArKysrKysrKysrKysrKysrKysrLQogNyBmaWxlcyBjaGFuZ2VkLCAyMjAgaW5zZXJ0aW9u
cygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
Yi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBlN2NkOGQ3Li4yZWIzNTc2IDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM4IEBACisyMDA5LTA5LTEwICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTM0CisJ
W0dUS10gQWRkIEFQSSB0byBhY2Nlc3Mgc3ViIHJlc291cmNlcworCisgICAgICAgIE5ldyBBUEkg
dG8gcGVlayBhdCBzdWJyZXNvdXJjZXMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJUb1N0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojphc3NpZ25JZGVu
dGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50Ojpwcm92aXNpb25hbExvYWRTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgICogd2Via2l0L3dl
YmtpdHByaXZhdGUuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHA6
CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1Yl9yZXNvdXJjZXMpOgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg6CisgICAgICAgICogd2Via2l0L3dlYmtp
dHdlYnJlc291cmNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfcmVzb3VyY2VfY2xlYW51cCk6
CisgICAgICAgICh3ZWJraXRfd2ViX3Jlc291cmNlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF93ZWJfcmVzb3VyY2VfaW5pdF93aXRoX2NvcmVfcmVzb3VyY2UpOgorICAgICAgICAod2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19hZGRfcmVzb3VyY2UpOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2dldF9yZXNvdXJjZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
cmVzb3VyY2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsZWFyX3Jlc291cmNlcyk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1Yl9yZXNvdXJjZXMpOgorCiAyMDA5LTA5LTA5
ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBkMGYwMTA2Li41MDAwNDRlIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAor
KysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApA
QCAtMiw3ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5
d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMTgzLDYgKzE4MywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OkRvY3VtZQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKKy8vIFdlIGNvbnZlcnQgdGhpcyB0byBzdHJpbmcgYmVjYXVz
ZSBpdCdzIGVhc2llciB0byB1c2Ugc3RyaW5ncyBhcworLy8ga2V5cyBpbiBhIEdIYXNoVGFibGUu
CitzdGF0aWMgY2hhciogaWRlbnRpZmllclRvU3RyaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikKK3sKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlbGQiLCBpZGVudGlmaWVyKTsKK30K
Kwogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVz
cG9uc2UpCiB7CiAgICAgR093blB0cjxXZWJLaXROZXR3b3JrUmVzcG9uc2U+IG5ldHdvcmtSZXNw
b25zZSgwKTsKQEAgLTE5NSwxMCArMjAyLDExIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAg
ICAgICAgIG5ldHdvcmtSZXNwb25zZS5zZXQod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfbmV3X3dp
dGhfY29yZV9yZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKSk7CiAKICAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKLSAgICBHT3duUHRyPFdlYktp
dFdlYlJlc291cmNlPiB3ZWJSZXNvdXJjZShXRUJLSVRfV0VCX1JFU09VUkNFKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9XRUJfUkVTT1VSQ0UsICJ1cmkiLCByZXF1ZXN0LnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIDApKSk7CisgICAgR093blB0cjxnY2hhcj4gaWRlbnRpZmllclN0cmlu
ZyhpZGVudGlmaWVyVG9TdHJpbmcoaWRlbnRpZmllcikpOworICAgIFdlYktpdFdlYlJlc291cmNl
KiB3ZWJSZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfcmVzb3VyY2Uod2ViVmlldywgaWRl
bnRpZmllclN0cmluZy5nZXQoKSk7CiAgICAgR093blB0cjxXZWJLaXROZXR3b3JrUmVxdWVzdD4g
bmV0d29ya1JlcXVlc3Qod2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXdfd2l0aF9jb3JlX3JlcXVl
c3QocmVxdWVzdCkpOwogCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZXNv
dXJjZS1yZXF1ZXN0LXN0YXJ0aW5nIiwgbV9mcmFtZSwgd2ViUmVzb3VyY2UuZ2V0KCksIG5ldHdv
cmtSZXF1ZXN0LmdldCgpLCBuZXR3b3JrUmVzcG9uc2UuZ2V0KCkpOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3ZWJWaWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsIG1fZnJhbWUs
IHdlYlJlc291cmNlLCBuZXR3b3JrUmVxdWVzdC5nZXQoKSwgbmV0d29ya1Jlc3BvbnNlLmdldCgp
KTsKIAogICAgIC8vIEZlZWQgYW55IGNoYW5nZXMgYmFjayBpbnRvIHRoZSBSZXNvdXJjZVJlcXVl
c3Qgb2JqZWN0LgogICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfbWVzc2FnZShuZXR3b3JrUmVxdWVzdC5nZXQoKSk7CkBAIC0yMTAsOSArMjE4LDEw
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgcmVxdWVzdC51cGRhdGVGcm9tU291cE1l
c3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50
aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmFz
c2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfYWRkX3Jlc291
cmNlKGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSksIGlkZW50aWZpZXJUb1N0cmluZyhpZGVudGlm
aWVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9XRUJfUkVTT1VS
Q0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9SRVNPVVJDRSwgInVyaSIsIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgMCkpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCkBAIC03OTksNiArODA4
LDExIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhXZWJDb3JlOjpE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQogeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworCisgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKQorICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfY2xlYXJfcmVzb3VyY2VzKHdlYlZpZXcpOworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IApAQCAtODI0LDYgKzgzOCwyMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlcgogewogICAgIHN0
YXRpY19jYXN0PFdlYktpdDo6RG9jdW1lbnRMb2FkZXIqPihsb2FkZXIpLT5kZWNyZWFzZUxvYWRD
b3VudChpZGVudGlmaWVyKTsKIAorICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3
RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIEdPd25QdHI8Z2NoYXI+IGlkZW50aWZpZXJTdHJpbmco
aWRlbnRpZmllclRvU3RyaW5nKGlkZW50aWZpZXIpKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSog
d2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Jlc291cmNlKHdlYlZpZXcsIGlkZW50
aWZpZXJTdHJpbmcuZ2V0KCkpOworCisgICAgY29uc3QgY2hhciogdXJpID0gd2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJpKHdlYlJlc291cmNlKTsKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBjb3JlUmVzb3VyY2UobG9hZGVyLT5zdWJyZXNvdXJjZShLVVJMKEtVUkwoKSwgdXJpKSkpOwor
CisgICAgLy8gSWYgY29yZVJlc291cmNlIGlzIE5VTEwgaGVyZSwgdGhlIHJlc291cmNlIGZhaWxl
ZCB0byBsb2FkLAorICAgIC8vIHVubGVzcyBpdCdzIHRoZSBtYWluIHJlc291cmNlLgorICAgIGlm
ICghY29yZVJlc291cmNlICYmICh3ZWJSZXNvdXJjZSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fcmVzb3VyY2Uod2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNvcmVS
ZXNvdXJjZSkKKyAgICAgICAgY29yZVJlc291cmNlID0gbG9hZGVyLT5tYWluUmVzb3VyY2UoKS5y
ZWxlYXNlUmVmKCk7CisKKyAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2luaXRfd2l0aF9jb3JlX3Jl
c291cmNlKHdlYlJlc291cmNlLCBjb3JlUmVzb3VyY2UuZ2V0KCkpOworCiAgICAgLy8gRklYTUU6
IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdGlmeSB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgcmVz
b3VyY2UKICAgICAvLyBmaW5pc2hlZCBsb2FkaW5nLCBtYXliZSB1c2luZyBhIGxvYWQtc3RhdHVz
IHByb3BlcnR5IGluIHRoZQogICAgIC8vIFdlYktpdFdlYlJlc291cmNlIG9iamVjdCwgc2ltaWxh
ciB0byB3aGF0IHdlIGRvIGZvciBXZWJLaXRXZWJGcmFtZScKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAppbmRleCBjNDcxNzE0Li4zOGM2ODY5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CkBAIC0xNDAsNiArMTQwLDEyIEBAIGV4dGVybiAiQyIgewogCiAgICAgICAgIGdib29sZWFuIGRp
c3Bvc2luZzsKICAgICAgICAgZ2Jvb2xlYW4gdXNlUHJpbWFyeUZvclBhc3RlOworCisgICAgICAg
IC8vIFRoZXNlIGFyZSBob3N0ZWQgaGVyZSBiZWNhdXNlIHRoZSBEYXRhU291cmNlIG9iamVjdCBp
cworICAgICAgICAvLyBjcmVhdGVkIHRvbyBsYXRlIGluIHRoZSBmcmFtZSBsb2FkaW5nIHByb2Nl
c3MuCisgICAgICAgIFdlYktpdFdlYlJlc291cmNlKiBtYWluUmVzb3VyY2U7CisgICAgICAgIGNo
YXIqIG1haW5SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIEdIYXNoVGFibGUqIHN1YlJlc291
cmNlczsKICAgICB9OwogCiAgICAgI2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRF
KG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVf
V0VCX0ZSQU1FLCBXZWJLaXRXZWJGcmFtZVByaXZhdGUpKQpAQCAtMjAwLDYgKzIwNiw5IEBAIGV4
dGVybiAiQyIgewogICAgIFdlYktpdFdlYlJlc291cmNlKgogICAgIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfbmV3X3dpdGhfY29yZV9yZXNvdXJjZShQYXNzUmVmUHRyPFdlYkNvcmU6OkFyY2hpdmVSZXNv
dXJjZT4pOwogCisgICAgdm9pZAorICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfaW5pdF93aXRoX2Nv
cmVfcmVzb3VyY2UoV2ViS2l0V2ViUmVzb3VyY2UqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkFyY2hp
dmVSZXNvdXJjZT4pOworCiAgICAgLy8gZW5kIFdlYktpdFdlYlJlc291cmNlIHByaXZhdGUKIAog
ICAgIHZvaWQKQEAgLTIyMCw2ICsyMjksMjEgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZAogICAg
IHdlYmtpdF93ZWJfdmlld19yZXF1ZXN0X2Rvd25sb2FkKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UgPSBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKCksIFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSAwKTsKIAorICAgIHZvaWQKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfYWRkX3Jlc291cmNlKFdlYktpdFdlYlZpZXcqLCBjaGFyKiwgV2ViS2l0V2ViUmVzb3Vy
Y2UqKTsKKworICAgIFdlYktpdFdlYlJlc291cmNlKgorICAgIHdlYmtpdF93ZWJfdmlld19nZXRf
cmVzb3VyY2UoV2ViS2l0V2ViVmlldyosIGNoYXIqKTsKKworICAgIFdlYktpdFdlYlJlc291cmNl
KgorICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShXZWJLaXRXZWJWaWV3Kik7
CisKKyAgICB2b2lkCisgICAgd2Via2l0X3dlYl92aWV3X2NsZWFyX3Jlc291cmNlcyhXZWJLaXRX
ZWJWaWV3Kik7CisKKyAgICBHTGlzdCoKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1Yl9yZXNv
dXJjZXMoV2ViS2l0V2ViVmlldyopOworCiAgICAgV2ViS2l0RG93bmxvYWQqCiAgICAgd2Via2l0
X2Rvd25sb2FkX25ld193aXRoX2hhbmRsZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJkYXRhc291cmNlLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3Vy
Y2UuY3BwCmluZGV4IDE1MDY3YTQuLjU4ODcwZTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFzb3VyY2UuY3BwCkBAIC0zNzUsMTQgKzM3NSwxMyBAQCBXZWJLaXRXZWJSZXNvdXJj
ZSogd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShXZWJLaXRXZWJEYXRh
U291cmNlKgogCiAgICAgV2ViS2l0V2ViRGF0YVNvdXJjZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRh
U291cmNlLT5wcml2OwogCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gY29yZVJlc291cmNl
ID0gcHJpdi0+bG9hZGVyLT5tYWluUmVzb3VyY2UoKTsKLQotICAgIEFTU0VSVChjb3JlUmVzb3Vy
Y2UpOwotCiAgICAgaWYgKHByaXYtPm1haW5yZXNvdXJjZSkKLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYocHJpdi0+bWFpbnJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHByaXYtPm1haW5yZXNvdXJj
ZTsKKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X3dlYl9mcmFtZSh3ZWJEYXRhU291cmNlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSk7CiAKLSAgICBwcml2LT5tYWlucmVzb3Vy
Y2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ld193aXRoX2NvcmVfcmVzb3VyY2UoY29yZVJlc291
cmNlLnJlbGVhc2UoKSk7CisgICAgcHJpdi0+bWFpbnJlc291cmNlID0gd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKHdlYlZpZXcpOwogICAgIHJldHVybiBwcml2LT5tYWlucmVzb3Vy
Y2U7CiB9CiAKQEAgLTQxMiwzICs0MTEsMjUgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3VucmVhY2hhYmxlX3VyaShXZWJLaXRXZWJEYXRhU28KICAg
ICBwcml2LT51bnJlYWNoYWJsZVVSTCA9IGdfc3RyZHVwKHVucmVhY2hhYmxlVVJMLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBwcml2LT51bnJlYWNoYWJsZVVSTDsKIH0KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJfcmVzb3VyY2VzCisgKiBAZGF0
YV9zb3VyY2U6IGEgI1dlYktpdFdlYkRhdGFTb3VyY2UKKyAqCisgKiBHaXZlcyB5b3UgYSAjR0xp
c3Qgb2YgI1dlYktpdFdlYlJlc291cmNlIG9iamVjdHMgdGhhdCBjb21wb3NlIHRoZQorICogI1dl
YlZpZXcgdG8gd2hpY2ggdGhpcyAjV2ViS2l0V2ViRGF0YVNvdXJjZSBpcyBhdHRhY2hlZC4KKyAq
CisgKiBSZXR1cm4gdmFsdWU6IGEgI0dMaXN0IG9mICNXZWJLaXRSZXNvdXJjZSBvYmplY3RzOyB0
aGUgb2JqZWN0cyBhcmUKKyAqIG93bmVkIGJ5IFdlYktpdCwgYnV0IHRoZSBHTGlzdCBtdXN0IGJl
IGZyZWVkLgorICoKKyAqIFNpbmNlOiAxLjEuMTUKKyAqLworR0xpc3QqIHdlYmtpdF93ZWJfZGF0
YV9zb3VyY2VfZ2V0X3N1Yl9yZXNvdXJjZXMoV2ViS2l0V2ViRGF0YVNvdXJjZSogd2ViRGF0YVNv
dXJjZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFfU09V
UkNFKHdlYkRhdGFTb3VyY2UpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3dlYl9mcmFtZSh3ZWJEYXRhU291cmNlKTsK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSk7
CisKKyAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2dldF9zdWJfcmVzb3VyY2VzKHdlYlZpZXcp
OworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5o
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oCmluZGV4IGY3MDVkMzgu
LmI2M2IzY2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3Vy
Y2UuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmgKQEAgLTg4
LDYgKzg4LDkgQEAgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSAgICAg
IChXZWJLaXRXZWJEYXRhU291cmNlICAqZGF0YV9zb3VyY2UKIFdFQktJVF9BUEkgR19DT05TVF9S
RVRVUk4gZ2NoYXIgKgogd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfdW5yZWFjaGFibGVfdXJp
ICAgIChXZWJLaXRXZWJEYXRhU291cmNlICAqZGF0YV9zb3VyY2UpOwogCitXRUJLSVRfQVBJIEdM
aXN0Kgord2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3ViX3Jlc291cmNlcyAgICAgIChXZWJL
aXRXZWJEYXRhU291cmNlICAqZGF0YV9zb3VyY2UpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYg
LyogV0VCS0lUX1dFQl9EQVRBX1NPVVJDRV9IICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJy
ZXNvdXJjZS5jcHAKaW5kZXggOThlNzgxYS4uMTdiZWFkMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2VicmVzb3VyY2UuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnJlc291cmNlLmNwcApAQCAtNjAsMTIgKzYwLDE0IEBAIEdfREVGSU5FX1RZUEUoV2Vi
S2l0V2ViUmVzb3VyY2UsIHdlYmtpdF93ZWJfcmVzb3VyY2UsIEdfVFlQRV9PQkpFQ1QpOwogc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYyk7CiBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3Jlc291cmNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKTsK
IAotc3RhdGljIHZvaWQgd2Via2l0X3dlYl9yZXNvdXJjZV9jbGVhbnVwKFdlYktpdFdlYlJlc291
cmNlKiB3ZWJSZXNvdXJjZSkKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcmVzb3VyY2VfY2xlYW51
cChXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2UsIGJvb2wgaXNGaW5hbGl6ZSkKIHsKICAg
ICBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUqIHByaXYgPSB3ZWJSZXNvdXJjZS0+cHJpdjsKIAot
ICAgIGdfZnJlZShwcml2LT51cmkpOwotICAgIHByaXYtPnVyaSA9IE5VTEw7CisgICAgaWYgKGlz
RmluYWxpemUpIHsKKyAgICAgIGdfZnJlZShwcml2LT51cmkpOworICAgICAgcHJpdi0+dXJpID0g
TlVMTDsKKyAgICB9CiAKICAgICBnX2ZyZWUocHJpdi0+bWltZVR5cGUpOwogICAgIHByaXYtPm1p
bWVUeXBlID0gTlVMTDsKQEAgLTk4LDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
cmVzb3VyY2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFdlYlJlc291
cmNlKiB3ZWJSZXNvdXJjZSA9IFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KTsKIAotICAgIHdl
YmtpdF93ZWJfcmVzb3VyY2VfY2xlYW51cCh3ZWJSZXNvdXJjZSk7CisgICAgd2Via2l0X3dlYl9y
ZXNvdXJjZV9jbGVhbnVwKHdlYlJlc291cmNlLCB0cnVlKTsKIAogICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF93ZWJfcmVzb3VyY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0K
QEAgLTIzMCw2ICsyMzIsMjAgQEAgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfbmV3X3dpdGhfY29yZV9yZXNvdXJjZShQYXNzUmVmUHRyPEFyY2hpdmUKICAgICByZXR1cm4g
d2ViUmVzb3VyY2U7CiB9CiAKK3ZvaWQgd2Via2l0X3dlYl9yZXNvdXJjZV9pbml0X3dpdGhfY29y
ZV9yZXNvdXJjZShXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2UsIFBhc3NSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOworCisgICAg
V2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlKiBwcml2ID0gd2ViUmVzb3VyY2UtPnByaXY7CisKKyAg
ICBpZiAocHJpdi0+cmVzb3VyY2UpCisgICAgICAgIHByaXYtPnJlc291cmNlLT5kZXJlZigpOwor
CisgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9jbGVhbnVwKHdlYlJlc291cmNlLCBmYWxzZSk7CisK
KyAgICBwcml2LT5yZXNvdXJjZSA9IHJlc291cmNlLnJlbGVhc2VSZWYoKTsKK30KKwogLyoqCiAg
KiB3ZWJraXRfd2ViX3Jlc291cmNlX25ldzoKICAqIEBkYXRhOiB0aGUgZGF0YSB0byBpbml0aWFs
aXplIHRoZSAjV2ViS2l0V2ViUmVzb3VyY2UKQEAgLTI4NCw2ICszMDAsOSBAQCBHU3RyaW5nKiB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJj
ZSkKIAogICAgIFdlYktpdFdlYlJlc291cmNlUHJpdmF0ZSogcHJpdiA9IHdlYlJlc291cmNlLT5w
cml2OwogCisgICAgaWYgKCFwcml2LT5yZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK
ICAgICBpZiAoIXByaXYtPmRhdGEpCiAgICAgICAgIHByaXYtPmRhdGEgPSBnX3N0cmluZ19uZXdf
bGVuKHByaXYtPnJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcHJpdi0+cmVzb3VyY2UtPmRhdGEo
KS0+c2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2MTdjZTBi
Li5iMzc2N2I0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNiw3ICs2LDcg
QEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIEFsb256byA8am1hbG9uem9AdW5wbHVnZ2Fi
bGUuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwOCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGdu
c0Bnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IENvbGxhYm9yYSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTk5NCw2ICs5OTQsMTYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgICAgICBwcml2LT5wYXN0ZV90YXJnZXRf
bGlzdCA9IE5VTEw7CiAgICAgfQogCisgICAgaWYgKHByaXYtPm1haW5SZXNvdXJjZSkgeworICAg
ICAgICBnX29iamVjdF91bnJlZihwcml2LT5tYWluUmVzb3VyY2UpOworICAgICAgICBwcml2LT5t
YWluUmVzb3VyY2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChwcml2LT5zdWJSZXNvdXJjZXMp
IHsKKyAgICAgICAgZ19oYXNoX3RhYmxlX3VucmVmKHByaXYtPnN1YlJlc291cmNlcyk7CisgICAg
ICAgIHByaXYtPnN1YlJlc291cmNlcyA9IE5VTEw7CisgICAgfQorCiAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIApA
QCAtMTAwMiw2ICsxMDEyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3
LT5wcml2OwogCisgICAgZ19mcmVlKHByaXYtPm1haW5SZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IGdfZnJlZShwcml2LT5lbmNvZGluZyk7CiAgICAgZ19mcmVlKHByaXYtPmN1c3RvbUVuY29kaW5n
KTsKIApAQCAtMjU1OCw2ICsyNTY5LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2lu
aXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPndl
YlNldHRpbmdzLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nf
bm90aWZ5KSwgd2ViVmlldyk7CiAKICAgICBwcml2LT53ZWJXaW5kb3dGZWF0dXJlcyA9IHdlYmtp
dF93ZWJfd2luZG93X2ZlYXR1cmVzX25ldygpOworCisgICAgcHJpdi0+c3ViUmVzb3VyY2VzID0g
Z19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdf
b2JqZWN0X3VucmVmKTsKIH0KIAogR3RrV2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQp
CkBAIC0zODQwLDMgKzM4NTMsNjEgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dldF92aWV3
X3NvdXJjZV9tb2RlIChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcmV0dXJuIEZBTFNF
OwogfQorCisvLyBJbnRlcm5hbCBzdWJyZXNvdXJjZSBtYW5hZ2VtZW50Cit2b2lkIHdlYmtpdF93
ZWJfdmlld19hZGRfcmVzb3VyY2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2hhciogaWRlbnRp
ZmllciwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlKQoreworICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKworICAgIGlmICghcHJpdi0+bWFpblJl
c291cmNlKSB7CisgICAgICAgIHByaXYtPm1haW5SZXNvdXJjZSA9IHdlYlJlc291cmNlOworICAg
ICAgICBwcml2LT5tYWluUmVzb3VyY2VJZGVudGlmaWVyID0gZ19zdHJkdXAoaWRlbnRpZmllcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHByaXYt
PnN1YlJlc291cmNlcywgaWRlbnRpZmllciwgd2ViUmVzb3VyY2UpOworfQorCitXZWJLaXRXZWJS
ZXNvdXJjZSogd2Via2l0X3dlYl92aWV3X2dldF9yZXNvdXJjZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjaGFyKiBpZGVudGlmaWVyKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
ID0gd2ViVmlldy0+cHJpdjsKKyAgICBncG9pbnRlciB3ZWJSZXNvdXJjZSA9IE5VTEw7CisKKyAg
ICBnYm9vbGVhbiByZXNvdXJjZUZvdW5kID0gZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZChw
cml2LT5zdWJSZXNvdXJjZXMsIGlkZW50aWZpZXIsIE5VTEwsICZ3ZWJSZXNvdXJjZSk7CisKKyAg
ICAvLyBUaGUgb25seSByZXNvdXJjZSB3ZSBkbyBub3Qgc3RvcmUgaW4gdGhpcyBoYXNoIHRhYmxl
IGlzIHRoZSBtYWluIQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlc291cmNlRm91bmQgfHwg
Z19zdHJfZXF1YWwoaWRlbnRpZmllciwgcHJpdi0+bWFpblJlc291cmNlSWRlbnRpZmllciksIE5V
TEwpOworCisgICAgaWYgKCF3ZWJSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9yZXNvdXJjZSh3ZWJWaWV3KTsKKworICAgIHJldHVybiBXRUJLSVRfV0VC
X1JFU09VUkNFKHdlYlJlc291cmNlKTsKK30KKworV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IHJldHVybiB3ZWJWaWV3LT5wcml2LT5tYWluUmVzb3VyY2U7Cit9CisKK3ZvaWQgd2Via2l0X3dl
Yl92aWV3X2NsZWFyX3Jlc291cmNlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdl
YktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKworICAgIGdfZnJlZShw
cml2LT5tYWluUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBwcml2LT5tYWluUmVzb3VyY2VJZGVu
dGlmaWVyID0gTlVMTDsKKworICAgIGlmIChwcml2LT5tYWluUmVzb3VyY2UpIHsKKyAgICAgICAg
Z19vYmplY3RfdW5yZWYocHJpdi0+bWFpblJlc291cmNlKTsKKyAgICAgICAgcHJpdi0+bWFpblJl
c291cmNlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+c3ViUmVzb3VyY2VzKQorICAg
ICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlX2FsbChwcml2LT5zdWJSZXNvdXJjZXMpOworfQorCitH
TGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJfcmVzb3VyY2VzKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2
OworICAgIEdMaXN0KiBzdWJSZXNvdXJjZXMgPSBnX2hhc2hfdGFibGVfZ2V0X3ZhbHVlcyhwcml2
LT5zdWJSZXNvdXJjZXMpOworICAgIHJldHVybiBnX2xpc3RfcmVtb3ZlKHN1YlJlc291cmNlcywg
cHJpdi0+bWFpblJlc291cmNlKTsKK30KLS0gCjEuNi4zLjMKCg==
</data>
<flag name="commit-queue"
          id="20456"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39367</attachid>
            <date>2009-09-10 12:14:01 -0700</date>
            <delta_ts>2009-09-10 12:14:01 -0700</delta_ts>
            <desc>save as... implementation for epiphany</desc>
            <filename>0001-Implement-saving-the-page-using-the-DataSource-API.patch</filename>
            <type>text/plain</type>
            <size>11233</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSAzZmRmYTMyYjQ5ZThhYjA1OTYwYzdiNjBkMjVmNWU3Y2JkOTk1MGQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CkRhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTQ6NTk6MDcgLTAzMDAKU3ViamVjdDogW1BBVENIXSBJ
bXBsZW1lbnQgc2F2aW5nIHRoZSBwYWdlIHVzaW5nIHRoZSBEYXRhU291cmNlIEFQSQoKLS0tCiBl
bWJlZC9lcGh5LXdlYi12aWV3LmMgfCAgMjM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKy0KIGVtYmVkL2VwaHktd2ViLXZpZXcuaCB8ICAgIDIgKwogc3Jj
L3dpbmRvdy1jb21tYW5kcy5jIHwgICA0OCArKysrKysrLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDI3
NSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9lbWJlZC9lcGh5
LXdlYi12aWV3LmMgYi9lbWJlZC9lcGh5LXdlYi12aWV3LmMKaW5kZXggNDk5ZmI4Ni4uNGE4NjYy
ZSAxMDA2NDQKLS0tIGEvZW1iZWQvZXBoeS13ZWItdmlldy5jCisrKyBiL2VtYmVkL2VwaHktd2Vi
LXZpZXcuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDI7IGlu
ZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCiAvKgotICogIENv
cHlyaWdodCDCqSAyMDA4IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogIENvcHlyaWdodCDCqSAy
MDA4LCAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQogICogIENvcHlyaWdodCDCqSAyMDA5IEln
YWxpYSBTLkwuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMTI1LDMgKzIxMjUsMjQwIEBAIGVw
aHlfd2ViX3ZpZXdfZ2V0X3RpdGxlX2NvbXBvc2l0ZSAoRXBoeVdlYlZpZXcgKnZpZXcpCiAgIHJl
dHVybiB0aXRsZSAhPSBOVUxMID8gdGl0bGUgOiAiIjsKIH0KIAorc3RhdGljIHZvaWQKK2VwaHlf
d2ViX3ZpZXdfc2F2ZV9zdWJfcmVzb3VyY2Vfc3RhcnQgKEdMaXN0ICpzdWJyZXNvdXJjZXMsIGNo
YXIgKmRlc3RpbmF0aW9uX3VyaSk7CisKK3N0YXRpYyB2b2lkCitlcGh5X3dlYl92aWV3X2Nsb3Nl
X2NiIChHT3V0cHV0U3RyZWFtICpvc3RyZWFtLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR1N0cmlu
ZyAqZGF0YSkKK3sKKyAgR0xpc3QgKnN1YnJlc291cmNlczsKKyAgY2hhciAqc3ViX2Rlc3RpbmF0
aW9uX3VyaTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICBzdWJyZXNvdXJjZXMgPSAoR0xp
c3QqKWdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAob3N0cmVhbSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcGh5LXdlYi12aWV3LXNhdmUtc3VicmVz
b3VyY2VzIik7CisKKyAgc3ViX2Rlc3RpbmF0aW9uX3VyaSA9IChjaGFyKilnX29iamVjdF9nZXRf
ZGF0YSAoR19PQkpFQ1QgKG9zdHJlYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZXBoeS13ZWItdmlldy1zYXZlLWRlc3QtdXJpIik7CisKKwln
X291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChvc3RyZWFtLCByZXN1bHQsICZlcnJvcik7Cisg
IGdfb2JqZWN0X3VucmVmIChvc3RyZWFtKTsKKworCWlmIChlcnJvcikgeworICAgIGdfbGlzdF9m
cmVlIChzdWJyZXNvdXJjZXMpOworICAgIGdfZnJlZSAoc3ViX2Rlc3RpbmF0aW9uX3VyaSk7Cisg
ICAgZ19jcml0aWNhbCAoIlVuYWJsZSB0byB3cml0ZSB0byBmaWxlOiAlcyIsIGVycm9yLT5tZXNz
YWdlKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCXJldHVybjsKKwl9CisKKyAgaWYgKCFz
dWJyZXNvdXJjZXMgfHwgIXN1YnJlc291cmNlcy0+bmV4dCkgeworICAgIGdfbGlzdF9mcmVlIChz
dWJyZXNvdXJjZXMpOworICAgIGdfZnJlZSAoc3ViX2Rlc3RpbmF0aW9uX3VyaSk7CisgICAgcmV0
dXJuOworICB9CisKKyAgc3VicmVzb3VyY2VzID0gc3VicmVzb3VyY2VzLT5uZXh0OworICBlcGh5
X3dlYl92aWV3X3NhdmVfc3ViX3Jlc291cmNlX3N0YXJ0IChzdWJyZXNvdXJjZXMsIHN1Yl9kZXN0
aW5hdGlvbl91cmkpOworfQorCitzdGF0aWMgdm9pZAorZXBoeV93ZWJfdmlld19zYXZlX3dyaXRl
X2NiIChHT3V0cHV0U3RyZWFtICpvc3RyZWFtLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR1N0cmlu
ZyAqZGF0YSkKK3sKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgIGdzc2l6ZSB3cml0dGVuOwor
CisgIHdyaXR0ZW4gPSBnX291dHB1dF9zdHJlYW1fd3JpdGVfZmluaXNoIChvc3RyZWFtLCByZXN1
bHQsICZlcnJvcik7CisgIGlmIChlcnJvcikgeworICAgIEdMaXN0ICpzdWJyZXNvdXJjZXM7Cisg
ICAgY2hhciAqc3ViX2Rlc3RpbmF0aW9uX3VyaTsKKworICAgIHN1YnJlc291cmNlcyA9IChHTGlz
dCopZ19vYmplY3RfZ2V0X2RhdGEgKEdfT0JKRUNUIChvc3RyZWFtKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcGh5LXdlYi12aWV3LXNhdmUtc3VicmVz
b3VyY2VzIik7CisgICAgZ19saXN0X2ZyZWUgKHN1YnJlc291cmNlcyk7CisKKyAgICBzdWJfZGVz
dGluYXRpb25fdXJpID0gKGNoYXIqKWdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAob3N0cmVh
bSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImVwaHktd2ViLXZpZXctc2F2ZS1kZXN0LXVyaSIpOworICAgIGdfZnJlZSAoc3ViX2Rlc3RpbmF0
aW9uX3VyaSk7CisKKyAgICBnX3N0cmluZ19mcmVlIChkYXRhLCBGQUxTRSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYgKG9zdHJlYW0pOworCisgICAgZ19jcml0aWNhbCAoIlVuYWJsZSB0byB3cml0ZSB0
byBmaWxlOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3Ip
OworICAgIHJldHVybjsKKyAgfQorCisgIGlmICh3cml0dGVuID09IGRhdGEtPmxlbikgeworICAg
IGdfc3RyaW5nX2ZyZWUgKGRhdGEsIEZBTFNFKTsKKyAgICBnX291dHB1dF9zdHJlYW1fY2xvc2Vf
YXN5bmMgKG9zdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWVwaHlfd2ViX3ZpZXdfY2xv
c2VfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICByZXR1
cm47CisgIH0KKworICBkYXRhLT5sZW4gLT0gd3JpdHRlbjsKKyAgZGF0YS0+c3RyICs9IHdyaXR0
ZW47CisKKyAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChvc3RyZWFtLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0ciwgZGF0YS0+bGVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayllcGh5X3dlYl92aWV3X3Nh
dmVfd3JpdGVfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7Cit9CisK
K3N0YXRpYyB2b2lkCitlcGh5X3dlYl92aWV3X3NhdmVfcmVwbGFjZV9jYiAoR0ZpbGUgKmZpbGUs
IEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBHU3RyaW5nICpjb25zdF9kYXRhKQoreworICBHRmlsZU91
dHB1dFN0cmVhbSAqb3N0cmVhbTsKKyAgR0xpc3QgKnN1YnJlc291cmNlczsKKyAgY2hhciAqc3Vi
X2Rlc3RpbmF0aW9uX3VyaTsKKyAgR1N0cmluZyAqZGF0YTsKKyAgR0Vycm9yICplcnJvciA9IE5V
TEw7CisKKyAgc3VicmVzb3VyY2VzID0gKEdMaXN0KilnX29iamVjdF9nZXRfZGF0YSAoR19PQkpF
Q1QgKGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXBoeS13ZWItdmlldy1zYXZlLXN1YnJlc291cmNlcyIpOworCisgIHN1Yl9kZXN0aW5hdGlvbl91
cmkgPSAoY2hhciopZ19vYmplY3RfZ2V0X2RhdGEgKEdfT0JKRUNUIChmaWxlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwaHktd2ViLXZpZXct
c2F2ZS1kZXN0LXVyaSIpOworCisgIG9zdHJlYW0gPSBnX2ZpbGVfcmVwbGFjZV9maW5pc2ggKGZp
bGUsIHJlc3VsdCwgJmVycm9yKTsKKyAgaWYgKGVycm9yKSB7CisgICAgZ19jcml0aWNhbCAoIkZh
aWxlZCB0byBzYXZlIHBhZ2U6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfbGlzdF9mcmVl
IChzdWJyZXNvdXJjZXMpOworICAgIGdfZnJlZSAoc3ViX2Rlc3RpbmF0aW9uX3VyaSk7CisgICAg
Z19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGNvbnN0X2Rh
dGEpIHsKKyAgICBkYXRhID0gZ19zdHJpbmdfc2l6ZWRfbmV3IChjb25zdF9kYXRhLT5sZW4pOwor
ICAgIGRhdGEtPnN0ciA9IGNvbnN0X2RhdGEtPnN0cjsKKyAgICBkYXRhLT5sZW4gPSBjb25zdF9k
YXRhLT5sZW47CisgIH0gZWxzZQorICAgIGRhdGEgPSBnX3N0cmluZ19uZXcgKCIiKTsKKworICAv
KiBJZiB3ZSBoYXZlIHN1YnJlc291cmNlcyB0byBoYW5kbGUsIHBhc3MgdGhlIGluZm9ybWF0aW9u
IGFsb25nICovCisgIGlmIChzdWJyZXNvdXJjZXMpIHsKKyAgICBnX29iamVjdF9zZXRfZGF0YSAo
R19PQkpFQ1QgKG9zdHJlYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAiZXBoeS13ZWItdmll
dy1zYXZlLXN1YnJlc291cmNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNl
cyk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKG9zdHJlYW0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAiZXBoeS13ZWItdmlldy1zYXZlLWRlc3QtdXJpIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgc3ViX2Rlc3RpbmF0aW9uX3VyaSk7CisgIH0KKworICBnX291dHB1dF9z
dHJlYW1fd3JpdGVfYXN5bmMgKEdfT1VUUFVUX1NUUkVBTSAob3N0cmVhbSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RyLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWVwaHlfd2ViX3ZpZXdfc2F2
ZV93cml0ZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKK30KKwor
c3RhdGljIHZvaWQKK2VwaHlfd2ViX3ZpZXdfc2F2ZV9zdWJfcmVzb3VyY2Vfc3RhcnQgKEdMaXN0
ICpzdWJyZXNvdXJjZXMsIGNoYXIgKmRlc3RpbmF0aW9uX3VyaSkKK3sKKyAgV2ViS2l0V2ViUmVz
b3VyY2UgKnJlc291cmNlOworICBHRmlsZSAqZmlsZTsKKyAgY2hhciAqcmVzb3VyY2VfdXJpOwor
ICBjaGFyICpyZXNvdXJjZV9uYW1lOworICBjb25zdCBHU3RyaW5nICpkYXRhOworCisgIHJlc291
cmNlID0gV0VCS0lUX1dFQl9SRVNPVVJDRSAoc3VicmVzb3VyY2VzLT5kYXRhKTsKKworICByZXNv
dXJjZV91cmkgPSAoY2hhciopd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpIChyZXNvdXJjZSk7
CisgIHJlc291cmNlX25hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChyZXNvdXJjZV91cmkpOwor
CisgIHJlc291cmNlX3VyaSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLyVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbl91cmksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfbmFtZSk7CisKKyAgZmlsZSA9IGdfZmlsZV9uZXdf
Zm9yX3VyaSAocmVzb3VyY2VfdXJpKTsKKyAgZ19mcmVlIChyZXNvdXJjZV91cmkpOworCisgIGdf
b2JqZWN0X3NldF9kYXRhIChHX09CSkVDVCAoZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAi
ZXBoeS13ZWItdmlldy1zYXZlLWRlc3QtdXJpIiwKKyAgICAgICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uX3VyaSk7CisKKyAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChmaWxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICJlcGh5LXdlYi12aWV3LXNhdmUtc3VicmVzb3VyY2VzIiwKKyAg
ICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlcyk7CisKKyAgZGF0YSA9IHdlYmtpdF93ZWJf
cmVzb3VyY2VfZ2V0X2RhdGEgKHJlc291cmNlKTsKKworICBnX2ZpbGVfcmVwbGFjZV9hc3luYyAo
ZmlsZSwgTlVMTCwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQ1JFQVRF
X1JFUExBQ0VfREVTVElOQVRJT058R19GSUxFX0NSRUFURV9QUklWQVRFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spZXBoeV93ZWJfdmlld19zYXZlX3JlcGxhY2VfY2Is
CisgICAgICAgICAgICAgICAgICAgICAgICAoR1N0cmluZyopZGF0YSk7CisKKyAgZ19vYmplY3Rf
dW5yZWYgKGZpbGUpOworfQorCitzdGF0aWMgdm9pZAorZXBoeV93ZWJfdmlld19zYXZlX3N1Yl9y
ZXNvdXJjZXMgKEVwaHlXZWJWaWV3ICp2aWV3LCBjb25zdCBjaGFyICp1cmksIEdMaXN0ICpzdWJy
ZXNvdXJjZXMpCit7CisgIEdGaWxlICpmaWxlOworICBjaGFyICpmaWxlbmFtZTsKKyAgY2hhciAq
ZG90cG9zOworICBjaGFyICpkaXJlY3RvcnlfdXJpOworICBjaGFyICpkZXN0aW5hdGlvbl91cmk7
CisgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgIC8qIGZpbGVuYW1lIG9mIHRoZSBtYWluIHJl
c291cmNlIHdpdGhvdXQgZXh0ZW5zaW9uICovCisgIGZpbGVuYW1lID0gZ19wYXRoX2dldF9iYXNl
bmFtZSAodXJpKTsKKyAgZG90cG9zID0gZ19zdHJyc3RyIChmaWxlbmFtZSwgIi4iKTsKKyAgaWYg
KGRvdHBvcykKKyAgICAqZG90cG9zID0gJ1wwJzsKKworICBkaXJlY3RvcnlfdXJpID0gZ19wYXRo
X2dldF9kaXJuYW1lICh1cmkpOworICBkZXN0aW5hdGlvbl91cmkgPSBnX3N0cmR1cF9wcmludGYg
KF8oIiVzLyVzIEZpbGVzIiksIGRpcmVjdG9yeV91cmksIGZpbGVuYW1lKTsKKworICBnX2ZyZWUg
KGZpbGVuYW1lKTsKKyAgZ19mcmVlIChkaXJlY3RvcnlfdXJpKTsKKworICBmaWxlID0gZ19maWxl
X25ld19mb3JfdXJpIChkZXN0aW5hdGlvbl91cmkpOworICBpZiAoIWdfZmlsZV9tYWtlX2RpcmVj
dG9yeSAoZmlsZSwgTlVMTCwgJmVycm9yKSkgeworICAgIGdfY3JpdGljYWwgKCJDb3VsZCBub3Qg
Y3JlYXRlIGRpcmVjdG9yeTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgZ19lcnJvcl9mcmVl
IChlcnJvcik7CisgICAgZ19vYmplY3RfdW5yZWYgKGZpbGUpOworICAgIHJldHVybjsKKyAgfQor
ICBnX29iamVjdF91bnJlZiAoZmlsZSk7CisKKyAgLyogTm93LCBsZXQncyBzdGFydCBzYXZpbmcg
c3ViIHJlc291cmNlcyAqLworICBlcGh5X3dlYl92aWV3X3NhdmVfc3ViX3Jlc291cmNlX3N0YXJ0
IChzdWJyZXNvdXJjZXMsIGRlc3RpbmF0aW9uX3VyaSk7Cit9CisKK3ZvaWQKK2VwaHlfd2ViX3Zp
ZXdfc2F2ZSAoRXBoeVdlYlZpZXcgKnZpZXcsIGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgV2ViS2l0
V2ViRnJhbWUgKmZyYW1lOworICBXZWJLaXRXZWJEYXRhU291cmNlICpkYXRhX3NvdXJjZTsKKyAg
R0xpc3QgKnN1YnJlc291cmNlczsKKyAgY29uc3QgR1N0cmluZyAqZGF0YTsKKyAgR0ZpbGUgKmZp
bGU7CisKKyAgLyogU2F2ZSBtYWluIHJlc291cmNlICovCisgIGZyYW1lID0gd2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lIChXRUJLSVRfV0VCX1ZJRVcodmlldykpOworICBkYXRhX3NvdXJj
ZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlIChmcmFtZSk7CisgIGRhdGEgPSB3
ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9kYXRhIChkYXRhX3NvdXJjZSk7CisKKyAgZmlsZSA9
IGdfZmlsZV9uZXdfZm9yX3VyaSAodXJpKTsKKyAgZ19maWxlX3JlcGxhY2VfYXN5bmMgKGZpbGUs
IE5VTEwsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0NSRUFURV9SRVBM
QUNFX0RFU1RJTkFUSU9OfEdfRklMRV9DUkVBVEVfUFJJVkFURSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IChHQXN5bmNSZWFkeUNhbGxiYWNrKWVwaHlfd2ViX3ZpZXdfc2F2ZV9yZXBsYWNlX2NiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgKEdTdHJpbmcqKWRhdGEpOworCisgIGdfb2JqZWN0X3VucmVm
IChmaWxlKTsKKworICAvKiBJZiBzdWJyZXNvdXJjZXMgZXhpc3QsIHNhdmUgdGhlbSAqLworICBz
dWJyZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJfcmVzb3VyY2VzIChk
YXRhX3NvdXJjZSk7CisgIGlmICghc3VicmVzb3VyY2VzKQorICAgIHJldHVybjsKKworICBlcGh5
X3dlYl92aWV3X3NhdmVfc3ViX3Jlc291cmNlcyAodmlldywgdXJpLCBzdWJyZXNvdXJjZXMpOwor
fQpkaWZmIC0tZ2l0IGEvZW1iZWQvZXBoeS13ZWItdmlldy5oIGIvZW1iZWQvZXBoeS13ZWItdmll
dy5oCmluZGV4IGQ1MGJmNGYuLjI5ZjFiZDMgMTAwNjQ0Ci0tLSBhL2VtYmVkL2VwaHktd2ViLXZp
ZXcuaAorKysgYi9lbWJlZC9lcGh5LXdlYi12aWV3LmgKQEAgLTIyOSw2ICsyMjksOCBAQCB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICBlcGh5X3dlYl92aWV3X3NldF9sb2FkaW5nX3RpdGxlICAg
ICAgIChFcGh5V2ViVmlldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfYWRkcmVzcyk7CiB2b2lkICAgICAgICAgICAgICAgICAgICAgICBlcGh5X3dlYl92aWV3
X3BvcHVwc19tYW5hZ2VyX3Jlc2V0ICAgIChFcGh5V2ViVmlldyAgICAgICAgICAgICAgICAgICAg
ICp2aWV3KTsKIAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgZXBoeV93ZWJfdmlld19zYXZl
ICAgICAgICAgICAgICAgICAgICAoRXBoeVdlYlZpZXcgICAgICAgICAgICAgICAgICAgICAqdmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnVyaSk7CiAKIEdf
RU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL3NyYy93aW5kb3ctY29tbWFuZHMuYyBiL3NyYy93aW5k
b3ctY29tbWFuZHMuYwppbmRleCBjODE5YWM1Li4yZjkwYmQzIDEwMDY0NAotLS0gYS9zcmMvd2lu
ZG93LWNvbW1hbmRzLmMKKysrIGIvc3JjL3dpbmRvdy1jb21tYW5kcy5jCkBAIC0yNzcsNiArMjc3
LDMyIEBAIG9wZW5fcmVzcG9uc2VfY2IgKEd0a0RpYWxvZyAqZGlhbG9nLCBpbnQgcmVzcG9uc2Us
IEVwaHlXaW5kb3cgKndpbmRvdykKIAlndGtfd2lkZ2V0X2Rlc3Ryb3kgKEdUS19XSURHRVQgKGRp
YWxvZykpOwogfQogCitzdGF0aWMgdm9pZAorc2F2ZV9yZXNwb25zZV9jYiAoR3RrRGlhbG9nICpk
aWFsb2csIGludCByZXNwb25zZSwgRXBoeUVtYmVkICplbWJlZCkKK3sKKwlpZiAocmVzcG9uc2Ug
PT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKKwl7CisJCWNoYXIgKnVyaSwgKmNvbnZlcnRlZDsKKwor
CQl1cmkgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmkgKEdUS19GSUxFX0NIT09TRVIgKGRpYWxv
ZykpOworCQlpZiAodXJpICE9IE5VTEwpCisJCXsKKwkJCWNvbnZlcnRlZCA9IGdfZmlsZW5hbWVf
dG9fdXRmOCAodXJpLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlmIChjb252ZXJ0ZWQg
IT0gTlVMTCkKKwkJCXsKKwkJCQlFcGh5V2ViVmlldyAqd2ViX3ZpZXcgPSBlcGh5X2VtYmVkX2dl
dF93ZWJfdmlldyAoZW1iZWQpOworCQkJCWVwaHlfd2ViX3ZpZXdfc2F2ZSAod2ViX3ZpZXcsIGNv
bnZlcnRlZCk7CisJCQl9CisKKwkJCWdfZnJlZSAoY29udmVydGVkKTsKKwkJCWdfZnJlZSAodXJp
KTsKKwkgICAgICAgIH0KKwl9CisKKwlndGtfd2lkZ2V0X2Rlc3Ryb3kgKEdUS19XSURHRVQgKGRp
YWxvZykpOworfQorCiB2b2lkCiB3aW5kb3dfY21kX2ZpbGVfb3BlbiAoR3RrQWN0aW9uICphY3Rp
b24sCiAJCSAgICAgIEVwaHlXaW5kb3cgKndpbmRvdykKQEAgLTMwMSwyNSArMzI3LDIxIEBAIHdp
bmRvd19jbWRfZmlsZV9zYXZlX2FzIChHdGtBY3Rpb24gKmFjdGlvbiwKIHsKIAlFcGh5RW1iZWQg
KmVtYmVkOwogCUVwaHlFbWJlZFBlcnNpc3QgKnBlcnNpc3Q7CisJRXBoeUZpbGVDaG9vc2VyICpk
aWFsb2c7CiAKIAllbWJlZCA9IGVwaHlfZW1iZWRfY29udGFpbmVyX2dldF9hY3RpdmVfY2hpbGQg
KEVQSFlfRU1CRURfQ09OVEFJTkVSICh3aW5kb3cpKTsKIAlnX3JldHVybl9pZl9mYWlsIChlbWJl
ZCAhPSBOVUxMKTsKIAotCXBlcnNpc3QgPSBFUEhZX0VNQkVEX1BFUlNJU1QKLQkJKGdfb2JqZWN0
X25ldyAoRVBIWV9UWVBFX0VNQkVEX1BFUlNJU1QsIE5VTEwpKTsKLQotCWVwaHlfZW1iZWRfcGVy
c2lzdF9zZXRfZW1iZWQgKHBlcnNpc3QsIGVtYmVkKTsKLQllcGh5X2VtYmVkX3BlcnNpc3Rfc2V0
X2ZjX3RpdGxlIChwZXJzaXN0LCBfKCJTYXZlIEFzIikpOwotCWVwaHlfZW1iZWRfcGVyc2lzdF9z
ZXRfZmNfcGFyZW50IChwZXJzaXN0LEdUS19XSU5ET1cgKHdpbmRvdykpOwotCi0JZXBoeV9lbWJl
ZF9wZXJzaXN0X3NldF9mbGFncwotCQkocGVyc2lzdCwgRVBIWV9FTUJFRF9QRVJTSVNUX01BSU5E
T0MgfCBFUEhZX0VNQkVEX1BFUlNJU1RfQVNLX0RFU1RJTkFUSU9OKTsKLQllcGh5X2VtYmVkX3Bl
cnNpc3Rfc2V0X3BlcnNpc3Rfa2V5Ci0JCShwZXJzaXN0LCBDT05GX1NUQVRFX1NBVkVfRElSKTsK
KwlkaWFsb2cgPSBlcGh5X2ZpbGVfY2hvb3Nlcl9uZXcgKF8oIlNhdmUiKSwKKwkJCQkJR1RLX1dJ
REdFVCAod2luZG93KSwKKwkJCQkJR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwKKwkJCQkJ
Q09ORl9TVEFURV9TQVZFX0RJUiwKKwkJCQkJRVBIWV9GSUxFX0ZJTFRFUl9BTExfU1VQUE9SVEVE
KTsKIAotCWVwaHlfZW1iZWRfcGVyc2lzdF9zYXZlIChwZXJzaXN0KTsKKwlnX3NpZ25hbF9jb25u
ZWN0IChkaWFsb2csICJyZXNwb25zZSIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNhdmVfcmVzcG9uc2Vf
Y2IpLCBlbWJlZCk7CiAKLQlnX29iamVjdF91bnJlZiAoR19PQkpFQ1QocGVyc2lzdCkpOworCWd0
a193aWRnZXRfc2hvdyAoR1RLX1dJREdFVCAoZGlhbG9nKSk7CiB9CiAKIHZvaWQKLS0gCjEuNi4z
LjMKCg==
</data>
<flag name="commit-queue"
          id="20457"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39481</attachid>
            <date>2009-09-11 15:29:22 -0700</date>
            <delta_ts>2009-09-14 12:57:33 -0700</delta_ts>
            <desc>comments addressed, tests added</desc>
            <filename>0001-Implement-getting-subresources-and-improve-testing-o.patch</filename>
            <type>text/plain</type>
            <size>25709</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA4MzIwM2I4ZWJhZTlkZWYwYmIzMjc3NTI2OTRkODZhNDc4ZGVhNjk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGd1c3Rhdm8ubm9yb25o
YUBjb2xsYWJvcmEuY28udWs+CkRhdGU6IEZyaSwgMTEgU2VwIDIwMDkgMTg6MDk6NTggLTAzMDAK
U3ViamVjdDogW1BBVENIXSBJbXBsZW1lbnQgZ2V0dGluZyBzdWJyZXNvdXJjZXMsIGFuZCBpbXBy
b3ZlIHRlc3Rpbmcgb2YgcmVzb3VyY2UgbG9hZGluZwoKLS0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDQgKysrKysKIFdlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIHwgICA0OCArKysrKy0KIFdl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMgICAgICAgICAgICAgICAgIHwgIDE4MSAr
KysrKysrKysrKysrKysrKysrLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAg
ICAgICAgICAgICAgICAgfCAgIDI0ICsrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0
YXNvdXJjZS5jcHAgICAgICAgICAgfCAgIDMyICsrKy0KIFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFzb3VyY2UuaCAgICAgICAgICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJyZXNvdXJjZS5jcHAgICAgICAgICAgICB8ICAgMTUgKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAgICAgIHwgICA3MyArKysrKysrKy0KIDgg
ZmlsZXMgY2hhbmdlZCwgNDAwIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
ZTdjZDhkNy4uZDIzOWQzNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wOS0xMSAgR3VzdGF2
byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCWh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTEzNAorCVtHVEtdIEFkZCBBUEkgdG8gYWNjZXNzIHN1YiBy
ZXNvdXJjZXMKKworICAgICAgICBJbXBsZW1lbnQgZ2V0dGluZyBzdWJyZXNvdXJjZXMsIGFuZCBp
bXByb3ZlIHRlc3Rpbmcgb2YKKwltYWluLCBhbmQgc3ViIHJlc291cmNlcyBsb2FkaW5nLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjppZGVudGlmaWVyVG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QpOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6
CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExv
YWRpbmcpOgorICAgICAgICAqIHRlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jOgorICAgICAgICAoc2Vy
dmVyX2NhbGxiYWNrKToKKyAgICAgICAgKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IpOgor
ICAgICAgICAobG9hZF9maW5pc2hlZF9jYik6CisgICAgICAgICh0ZXN0X3dlYl9yZXNvdXJjZV9s
b2FkaW5nKToKKyAgICAgICAgKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKToKKyAg
ICAgICAgKGxvYWRfZmluaXNoZWRfc3ViX2NiKToKKyAgICAgICAgKGlkbGVfcXVpdF9sb29wX2Ni
KToKKyAgICAgICAgKHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKToKKyAg
ICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwOgorICAgICAgICAod2Via2l0X3dlYl9k
YXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9zdWJfcmVzb3VyY2VzKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZGF0
YXNvdXJjZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5jcHA6CisgICAg
ICAgICh3ZWJraXRfd2ViX3Jlc291cmNlX2luaXRfd2l0aF9jb3JlX3Jlc291cmNlKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEpOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYWRkX3Jlc291cmNlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19nZXRfcmVzb3VyY2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGVhcl9yZXNv
dXJjZXMpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zdWJfcmVzb3VyY2VzKToKKwog
MjAwOS0wOS0wOSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggZDBmMDEwNi4uNjUxMDI3
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENo
cmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTE4Myw2ICsxODMsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1
bWUKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCisvLyBXZSBjb252ZXJ0IHRoaXMgdG8gc3Ry
aW5nIGJlY2F1c2UgaXQncyBlYXNpZXIgdG8gdXNlIHN0cmluZ3MgYXMKKy8vIGtleXMgaW4gYSBH
SGFzaFRhYmxlLgorc3RhdGljIGNoYXIqIGlkZW50aWZpZXJUb1N0cmluZyh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiJWxkIiwgaWRlbnRp
Zmllcik7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1
ZXN0KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZWRpcmVjdFJlc3BvbnNlKQogewogICAgIEdPd25QdHI8V2ViS2l0TmV0d29ya1Jlc3BvbnNlPiBu
ZXR3b3JrUmVzcG9uc2UoMCk7CkBAIC0xOTUsMTAgKzIwMiwxOCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciog
bG9hZGVyLAogICAgICAgICBuZXR3b3JrUmVzcG9uc2Uuc2V0KHdlYmtpdF9uZXR3b3JrX3Jlc3Bv
bnNlX25ld193aXRoX2NvcmVfcmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSkpOwogCiAgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7Ci0gICAgR093
blB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gd2ViUmVzb3VyY2UoV0VCS0lUX1dFQl9SRVNPVVJDRShn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCAidXJpIiwgcmVxdWVzdC51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAwKSkpOworICAgIEdPd25QdHI8Z2NoYXI+IGlkZW50
aWZpZXJTdHJpbmcoaWRlbnRpZmllclRvU3RyaW5nKGlkZW50aWZpZXIpKTsKKyAgICBXZWJLaXRX
ZWJSZXNvdXJjZSogd2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Jlc291cmNlKHdl
YlZpZXcsIGlkZW50aWZpZXJTdHJpbmcuZ2V0KCkpOwogICAgIEdPd25QdHI8V2ViS2l0TmV0d29y
a1JlcXVlc3Q+IG5ldHdvcmtSZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3X3dpdGhf
Y29yZV9yZXF1ZXN0KHJlcXVlc3QpKTsKIAotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJW
aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsIG1fZnJhbWUsIHdlYlJlc291cmNlLmdl
dCgpLCBuZXR3b3JrUmVxdWVzdC5nZXQoKSwgbmV0d29ya1Jlc3BvbnNlLmdldCgpKTsKKyAgICBp
ZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHJl
ZGlyZWN0LCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgV2ViUmVzb3VyY2UncyBrbm93bGVkZ2UK
KyAgICAgICAgLy8gb2YgdGhlIFVSSS4KKyAgICAgICAgZ19mcmVlKHdlYlJlc291cmNlLT5wcml2
LT51cmkpOworICAgICAgICB3ZWJSZXNvdXJjZS0+cHJpdi0+dXJpID0gZ19zdHJkdXAocmVxdWVz
dC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nIiwgbV9m
cmFtZSwgd2ViUmVzb3VyY2UsIG5ldHdvcmtSZXF1ZXN0LmdldCgpLCBuZXR3b3JrUmVzcG9uc2Uu
Z2V0KCkpOwogCiAgICAgLy8gRmVlZCBhbnkgY2hhbmdlcyBiYWNrIGludG8gdGhlIFJlc291cmNl
UmVxdWVzdCBvYmplY3QuCiAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X2dldF9tZXNzYWdlKG5ldHdvcmtSZXF1ZXN0LmdldCgpKTsKQEAgLTIxMCw5ICsy
MjUsMTAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3Qo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICByZXF1ZXN0LnVwZGF0ZUZyb21T
b3VwTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6YXNzaWdu
SWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZywgV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQordm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHdlYmtpdF93ZWJfdmlld19hZGRf
cmVzb3VyY2UoZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKSwgaWRlbnRpZmllclRvU3RyaW5nKGlk
ZW50aWZpZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1dFQl9S
RVNPVVJDRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCAidXJpIiwgcmVx
dWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAwKSkpOwogfQogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkKQEAgLTc5OSw3
ICs4MTUsMTAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsK
KworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJW
aWV3KSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2NsZWFyX3Jlc291cmNlcyh3ZWJWaWV3KTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZCgpIHsKQEAgLTgyNCw2
ICs4NDMsMjMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2Fk
aW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIKIHsKICAgICBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkRvY3VtZW50TG9hZGVyKj4obG9hZGVyKS0+ZGVjcmVhc2VMb2FkQ291bnQoaWRlbnRp
Zmllcik7CiAKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZSht
X2ZyYW1lKTsKKyAgICBHT3duUHRyPGdjaGFyPiBpZGVudGlmaWVyU3RyaW5nKGlkZW50aWZpZXJU
b1N0cmluZyhpZGVudGlmaWVyKSk7CisgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNl
ID0gd2Via2l0X3dlYl92aWV3X2dldF9yZXNvdXJjZSh3ZWJWaWV3LCBpZGVudGlmaWVyU3RyaW5n
LmdldCgpKTsKKworICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3VyaSh3ZWJSZXNvdXJjZSk7CisgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gY29yZVJlc291
cmNlKGxvYWRlci0+c3VicmVzb3VyY2UoS1VSTChLVVJMKCksIHVyaSkpKTsKKworICAgIC8vIElm
IGNvcmVSZXNvdXJjZSBpcyBOVUxMIGhlcmUsIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZCwK
KyAgICAvLyB1bmxlc3MgaXQncyB0aGUgbWFpbiByZXNvdXJjZS4KKyAgICBpZiAoIWNvcmVSZXNv
dXJjZSAmJiB3ZWJSZXNvdXJjZSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
d2ViVmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY29yZVJlc291cmNlKQorICAg
ICAgICBjb3JlUmVzb3VyY2UgPSBsb2FkZXItPm1haW5SZXNvdXJjZSgpLnJlbGVhc2VSZWYoKTsK
KworICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfaW5pdF93aXRoX2NvcmVfcmVzb3VyY2Uod2ViUmVz
b3VyY2UsIGNvcmVSZXNvdXJjZS5nZXQoKSk7CisKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBzaG91bGQgbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByZXNvdXJjZQogICAgIC8v
IGZpbmlzaGVkIGxvYWRpbmcsIG1heWJlIHVzaW5nIGEgbG9hZC1zdGF0dXMgcHJvcGVydHkgaW4g
dGhlCiAgICAgLy8gV2ViS2l0V2ViUmVzb3VyY2Ugb2JqZWN0LCBzaW1pbGFyIHRvIHdoYXQgd2Ug
ZG8gZm9yIFdlYktpdFdlYkZyYW1lJwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
d2VicmVzb3VyY2UuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKaW5kZXgg
Y2I5YTBkOS4uYzlkYTU4YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicmVz
b3VyY2UuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCkBAIC0xOSwx
NiArMTksNjcgQEAKIAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgogCiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDE2LCAwKSAmJiBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKIAorI2RlZmluZSBJTkRFWF9IVE1MICI8aHRtbD48
L2h0bWw+IgorI2RlZmluZSBNQUlOX0hUTUwgIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9
XCJqYXZhc2NyaXB0XCIgc3JjPVwiL2phdmFzY3JpcHQuanNcIj48L3NjcmlwdD48L2hlYWQ+PGJv
ZHk+PGgxPmhhaDwvaDE+PC9odG1sPiIKKyNkZWZpbmUgSkFWQVNDUklQVCAiZnVuY3Rpb24gYmxh
aCAoKSB7IHZhciBhID0gMTsgfSIKKworR01haW5Mb29wKiBsb29wOworU291cFNlc3Npb24gKnNl
c3Npb247CitjaGFyICpiYXNlX3VyaTsKK1dlYktpdFdlYlJlc291cmNlKiBtYWluX3Jlc291cmNl
OworV2ViS2l0V2ViUmVzb3VyY2UqIHN1Yl9yZXNvdXJjZTsKKwogdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZTsKICAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3OwogfSBXZWJSZXNvdXJjZUZpeHR1cmU7CiAKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVz
dGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayAoU291cFNlcnZlciAqc2VydmVy
LCBTb3VwTWVzc2FnZSAqbXNnLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBH
SGFzaFRhYmxlICpxdWVyeSwKKyAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQgKmNv
bnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVU
SE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAobXNnLCBTT1VQX1NU
QVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgLyogUmVk
aXJlY3QgKi8KKyAgICBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkp
OworCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXNwb25zZV9o
ZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhdGlvbiIs
ICIvaW5kZXguaHRtbCIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvaW5k
ZXguaHRtbCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNw
b25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZ
X0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5ERVhfSFRNTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKElOREVYX0hUTUwpKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL21haW4uaHRtbCIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUFJTl9IVE1MLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmxlbiAoTUFJTl9IVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bCAocGF0aCwgIi9qYXZhc2NyaXB0LmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU09VUF9NRU1PUllfQ09QWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKQVZBU0NSSVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAo
SkFWQVNDUklQVCkpOworICAgIH0KKworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUg
KG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYl9yZXNvdXJjZV9maXh0
dXJlX3NldHVwKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQogewogICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKQEAgLTg5LDEzICsxNDAsMjcgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwK
IAogc3RhdGljIHZvaWQgcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19jYihXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2Uq
IHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIFdlYktpdE5ldHdv
cmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2ludGVyIGRhdGEpCiB7Ci0gICAgZ2Jvb2xlYW4qIGJl
ZW5fdGhlcmUgPSBkYXRhOwotICAgICpiZWVuX3RoZXJlID0gVFJVRTsKKyAgICBnaW50KiBiZWVu
X3RoZXJlID0gZGF0YTsKKyAgICAqYmVlbl90aGVyZSA9ICpiZWVuX3RoZXJlICsgMTsKKworICAg
IGlmICgqYmVlbl90aGVyZSA9PSAxKSB7CisgICAgICAgIGdfYXNzZXJ0KCFtYWluX3Jlc291cmNl
KTsKKyAgICAgICAgbWFpbl9yZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOwog
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVz
b3VyY2UpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIGJhc2VfdXJp
KTsKIAotICAgIC8qIENhbmNlbCB0aGUgcmVxdWVzdC4gKi8KLSAgICB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7CisgICAgICAgIC8qIFRoaXMg
c2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSByZXNwb25zZSBtdXN0IGJlIE5VTEwgKi8KKyAg
ICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKKyAgICB9IGVsc2UgaWYgKCpiZWVuX3RoZXJlID09
IDIpIHsKKyAgICAgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2luZGV4Lmh0bWwi
LCBiYXNlX3VyaSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgdXJpKTsKKworICAgICAgICAvKiBDYW5jZWwg
dGhlIHJlcXVlc3QuICovCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShy
ZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAgICBnX2ZyZWUodXJpKTsKKyAgICB9CiB9
CiAKIHN0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIGdwb2ludGVyIGRhdGEpCkBAIC0xMDQsMTMgKzE2
OSwxOSBAQCBzdGF0aWMgdm9pZCBsb2FkX2ZpbmlzaGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAogICAgICpiZWVuX3RoZXJlID0gVFJVRTsK
IAogICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyks
ID09LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CiB9CiAK
IHN0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcoKQogewogICAgIFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
Ci0gICAgZ2Jvb2xlYW4gYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nID0gRkFMU0U7
CisgICAgZ2ludCBiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcgPSAwOwogICAgIGdi
b29sZWFuIGJlZW5fdG9fbG9hZF9maW5pc2hlZCA9IEZBTFNFOworICAgIFdlYktpdFdlYkZyYW1l
KiB3ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwogCiAgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViX3ZpZXcpOwogCkBAIC0xMjIsMTkgKzE5MywxMTIgQEAgc3RhdGljIHZvaWQgdGVz
dF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCiAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KGxvYWRfZmluaXNoZWRfY2IpLAogICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fbG9hZF9m
aW5pc2hlZCk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsICJodHRw
Oi8vZ25vbWUub3JnLyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywg
YmFzZV91cmkpOworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVkaWF0ZWx5LCBi
ZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICAKKyAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViX3Zp
ZXcpOworICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uo
d2ViX2ZyYW1lKTsKIAotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVl
c3Rfc3RhcnRpbmcsID09LCBUUlVFKTsKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFf
c291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291
cmNlKTsKKyAgICAKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0
X3N0YXJ0aW5nLCA9PSwgMik7CiAgICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fbG9hZF9maW5p
c2hlZCwgPT0sIFRSVUUpOwogCiAgICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOworICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitzdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0
X3N0YXJ0aW5nX3N1Yl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUq
IHdlYl9mcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHJlcXVlc3QsIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgaWYgKCFtYWluX3Jlc291cmNlKQorICAgICAgICBtYWluX3Jlc291
cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7CisgICAgZWxzZQorICAgICAgICBzdWJf
cmVzb3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKK30KKworc3RhdGljIHZvaWQg
bG9hZF9maW5pc2hlZF9zdWJfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJfZnJhbWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGlkbGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRh
dGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7CisgICAgV2Vi
S2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7CisgICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7
CisgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJp
KTsKKworICAgIG1haW5fcmVzb3VyY2UgPSBOVUxMOworICAgIAorICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFy
dGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rf
c3RhcnRpbmdfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJfdmlldywgImxvYWQtZmluaXNoZWQiLAorICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX3N1Yl9jYiksCisgICAgICAgICAgICAgICAg
ICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgdXJp
KTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIFRoZSBtYWluIHJlc291
cmNlIHNob3VsZCBiZSBsb2FkZWQ7IG5vdyBsZXQncyB3YWl0IGZvciB0aGUgc3ViLXJlc291cmNl
IHRvIGxvYWQgKi8KKyAgICBnX2lkbGVfYWRkKGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgCisgICAgZ19hc3NlcnQobWFpbl9yZXNvdXJj
ZSAmJiBzdWJfcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UgIT0gc3ViX3Jl
c291cmNlKTsKKworICAgIHdlYl9mcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFt
ZSh3ZWJfdmlldyk7CisgICAgZGF0YV9zb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRh
X3NvdXJjZSh3ZWJfZnJhbWUpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJj
ZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhX3NvdXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7CisgICAg
Z19vYmplY3RfdW5yZWYobWFpbl9yZXNvdXJjZSk7CisKKyAgICBzdWJfcmVzb3VyY2VzID0gd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3ViX3Jlc291cmNlcyhkYXRhX3NvdXJjZSk7CisgICAg
Z19hc3NlcnQoc3ViX3Jlc291cmNlcyk7CisgICAgZ19hc3NlcnQoIXN1Yl9yZXNvdXJjZXMtPm5l
eHQpOworCisgICAgZ19hc3NlcnQoV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5k
YXRhKSA9PSBzdWJfcmVzb3VyY2UpOworICAgIAorICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3
KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKIH0KIAogaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogeworICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKKyAgICBTb3VwVVJJKiBz
b3VwX3VyaTsKKwogICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7CiAgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOwogCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBf
U0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIp
OworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2Fs
bGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcgKCJodHRw
Oi8vMTI3LjAuMC4xLyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgc291cF91
cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisg
ICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsKKyAgICBz
b3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKwogICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvIik7CiAgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9n
ZXRfdXJsIiwKICAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291
cmNlX2ZpeHR1cmVfc2V0dXAsCkBAIC0xNTMsNiArMzE3LDcgQEAgaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF9kYXRhLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CiAKICAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsIHRlc3Rfd2ViX3Jlc291cmNlX2xv
YWRpbmcpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVz
b3VyY2VfbG9hZGluZyIsIHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKTsK
IAogICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CmluZGV4IGM0NzE3MTQuLjM4YzY4NjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAg
LTE0MCw2ICsxNDAsMTIgQEAgZXh0ZXJuICJDIiB7CiAKICAgICAgICAgZ2Jvb2xlYW4gZGlzcG9z
aW5nOwogICAgICAgICBnYm9vbGVhbiB1c2VQcmltYXJ5Rm9yUGFzdGU7CisKKyAgICAgICAgLy8g
VGhlc2UgYXJlIGhvc3RlZCBoZXJlIGJlY2F1c2UgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGlzCisg
ICAgICAgIC8vIGNyZWF0ZWQgdG9vIGxhdGUgaW4gdGhlIGZyYW1lIGxvYWRpbmcgcHJvY2Vzcy4K
KyAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2UqIG1haW5SZXNvdXJjZTsKKyAgICAgICAgY2hhciog
bWFpblJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgR0hhc2hUYWJsZSogc3ViUmVzb3VyY2Vz
OwogICAgIH07CiAKICAgICAjZGVmaW5lIFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUob2Jq
KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJf
RlJBTUUsIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSkpCkBAIC0yMDAsNiArMjA2LDkgQEAgZXh0ZXJu
ICJDIiB7CiAgICAgV2ViS2l0V2ViUmVzb3VyY2UqCiAgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9u
ZXdfd2l0aF9jb3JlX3Jlc291cmNlKFBhc3NSZWZQdHI8V2ViQ29yZTo6QXJjaGl2ZVJlc291cmNl
Pik7CiAKKyAgICB2b2lkCisgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9pbml0X3dpdGhfY29yZV9y
ZXNvdXJjZShXZWJLaXRXZWJSZXNvdXJjZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6QXJjaGl2ZVJl
c291cmNlPik7CisKICAgICAvLyBlbmQgV2ViS2l0V2ViUmVzb3VyY2UgcHJpdmF0ZQogCiAgICAg
dm9pZApAQCAtMjIwLDYgKzIyOSwyMSBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkCiAgICAgd2Vi
a2l0X3dlYl92aWV3X3JlcXVlc3RfZG93bmxvYWQoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSA9IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UoKSwgV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSA9IDApOwogCisgICAgdm9pZAorICAgIHdlYmtpdF93ZWJfdmll
d19hZGRfcmVzb3VyY2UoV2ViS2l0V2ViVmlldyosIGNoYXIqLCBXZWJLaXRXZWJSZXNvdXJjZSop
OworCisgICAgV2ViS2l0V2ViUmVzb3VyY2UqCisgICAgd2Via2l0X3dlYl92aWV3X2dldF9yZXNv
dXJjZShXZWJLaXRXZWJWaWV3KiwgY2hhciopOworCisgICAgV2ViS2l0V2ViUmVzb3VyY2UqCisg
ICAgd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKFdlYktpdFdlYlZpZXcqKTsKKwor
ICAgIHZvaWQKKyAgICB3ZWJraXRfd2ViX3ZpZXdfY2xlYXJfcmVzb3VyY2VzKFdlYktpdFdlYlZp
ZXcqKTsKKworICAgIEdMaXN0KgorICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc3ViX3Jlc291cmNl
cyhXZWJLaXRXZWJWaWV3Kik7CisKICAgICBXZWJLaXREb3dubG9hZCoKICAgICB3ZWJraXRfZG93
bmxvYWRfbmV3X3dpdGhfaGFuZGxlKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmRhdGFzb3VyY2UuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5j
cHAKaW5kZXggMTUwNjdhNC4uMmUyMGIxOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZGF0YXNvdXJjZS5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YXNvdXJjZS5jcHAKQEAgLTM3NSwxNCArMzc1LDE0IEBAIFdlYktpdFdlYlJlc291cmNlKiB3
ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKFdlYktpdFdlYkRhdGFTb3Vy
Y2UqCiAKICAgICBXZWJLaXRXZWJEYXRhU291cmNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFTb3Vy
Y2UtPnByaXY7CiAKLSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBjb3JlUmVzb3VyY2UgPSBw
cml2LT5sb2FkZXItPm1haW5SZXNvdXJjZSgpOworICAgIGlmIChwcml2LT5tYWlucmVzb3VyY2Up
CisgICAgICAgIHJldHVybiBwcml2LT5tYWlucmVzb3VyY2U7CiAKLSAgICBBU1NFUlQoY29yZVJl
c291cmNlKTsKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF93ZWJfZnJhbWUod2ViRGF0YVNvdXJjZSk7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUpOwogCi0gICAgaWYgKHByaXYtPm1h
aW5yZXNvdXJjZSkKLSAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+bWFpbnJlc291cmNlKTsK
KyAgICBwcml2LT5tYWlucmVzb3VyY2UgPSBXRUJLSVRfV0VCX1JFU09VUkNFKGdfb2JqZWN0X3Jl
Zih3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldykpKTsKIAotICAgIHBy
aXYtPm1haW5yZXNvdXJjZSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfbmV3X3dpdGhfY29yZV9yZXNv
dXJjZShjb3JlUmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcHJpdi0+bWFpbnJlc291
cmNlOwogfQogCkBAIC00MTIsMyArNDEyLDI1IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJr
aXRfd2ViX2RhdGFfc291cmNlX2dldF91bnJlYWNoYWJsZV91cmkoV2ViS2l0V2ViRGF0YVNvCiAg
ICAgcHJpdi0+dW5yZWFjaGFibGVVUkwgPSBnX3N0cmR1cCh1bnJlYWNoYWJsZVVSTC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gcHJpdi0+dW5yZWFjaGFibGVVUkw7CiB9CisK
Ky8qKgorICogd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3ViX3Jlc291cmNlcworICogQGRh
dGFfc291cmNlOiBhICNXZWJLaXRXZWJEYXRhU291cmNlCisgKgorICogR2l2ZXMgeW91IGEgI0dM
aXN0IG9mICNXZWJLaXRXZWJSZXNvdXJjZSBvYmplY3RzIHRoYXQgY29tcG9zZSB0aGUKKyAqICNX
ZWJWaWV3IHRvIHdoaWNoIHRoaXMgI1dlYktpdFdlYkRhdGFTb3VyY2UgaXMgYXR0YWNoZWQuCisg
KgorICogUmV0dXJuIHZhbHVlOiBhICNHTGlzdCBvZiAjV2ViS2l0UmVzb3VyY2Ugb2JqZWN0czsg
dGhlIG9iamVjdHMgYXJlCisgKiBvd25lZCBieSBXZWJLaXQsIGJ1dCB0aGUgR0xpc3QgbXVzdCBi
ZSBmcmVlZC4KKyAqCisgKiBTaW5jZTogMS4xLjE1CisgKi8KK0dMaXN0KiB3ZWJraXRfd2ViX2Rh
dGFfc291cmNlX2dldF9zdWJfcmVzb3VyY2VzKFdlYktpdFdlYkRhdGFTb3VyY2UqIHdlYkRhdGFT
b3VyY2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBX1NP
VVJDRSh3ZWJEYXRhU291cmNlKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF93ZWJfZnJhbWUod2ViRGF0YVNvdXJjZSk7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUp
OworCisgICAgcmV0dXJuIHdlYmtpdF93ZWJfdmlld19nZXRfc3ViX3Jlc291cmNlcyh3ZWJWaWV3
KTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2Uu
aCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaAppbmRleCBmNzA1ZDM4
Li5iNjNiM2NhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291
cmNlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oCkBAIC04
OCw2ICs4OCw5IEBAIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UgICAg
ICAoV2ViS2l0V2ViRGF0YVNvdXJjZSAgKmRhdGFfc291cmNlCiBXRUJLSVRfQVBJIEdfQ09OU1Rf
UkVUVVJOIGdjaGFyICoKIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3VucmVhY2hhYmxlX3Vy
aSAgICAoV2ViS2l0V2ViRGF0YVNvdXJjZSAgKmRhdGFfc291cmNlKTsKIAorV0VCS0lUX0FQSSBH
TGlzdCoKK3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1Yl9yZXNvdXJjZXMgICAgICAoV2Vi
S2l0V2ViRGF0YVNvdXJjZSAgKmRhdGFfc291cmNlKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
IC8qIFdFQktJVF9XRUJfREFUQV9TT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2VicmVzb3VyY2UuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
cmVzb3VyY2UuY3BwCmluZGV4IDk4ZTc4MWEuLmU5OTVlMDggMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJyZXNvdXJjZS5jcHAKQEAgLTIzMCw2ICsyMzAsMTggQEAgV2ViS2l0V2ViUmVzb3Vy
Y2UqIHdlYmtpdF93ZWJfcmVzb3VyY2VfbmV3X3dpdGhfY29yZV9yZXNvdXJjZShQYXNzUmVmUHRy
PEFyY2hpdmUKICAgICByZXR1cm4gd2ViUmVzb3VyY2U7CiB9CiAKK3ZvaWQgd2Via2l0X3dlYl9y
ZXNvdXJjZV9pbml0X3dpdGhfY29yZV9yZXNvdXJjZShXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVz
b3VyY2UsIFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSkKK3sKKyAgICBBU1NF
UlQocmVzb3VyY2UpOworCisgICAgV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlKiBwcml2ID0gd2Vi
UmVzb3VyY2UtPnByaXY7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2UpCisgICAgICAgIHByaXYt
PnJlc291cmNlLT5kZXJlZigpOworCisgICAgcHJpdi0+cmVzb3VyY2UgPSByZXNvdXJjZS5yZWxl
YXNlUmVmKCk7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl9yZXNvdXJjZV9uZXc6CiAgKiBAZGF0
YTogdGhlIGRhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgI1dlYktpdFdlYlJlc291cmNlCkBAIC0yODQs
NiArMjk2LDkgQEAgR1N0cmluZyogd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShXZWJLaXRX
ZWJSZXNvdXJjZSogd2ViUmVzb3VyY2UpCiAKICAgICBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUq
IHByaXYgPSB3ZWJSZXNvdXJjZS0+cHJpdjsKIAorICAgIGlmICghcHJpdi0+cmVzb3VyY2UpCisg
ICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKCFwcml2LT5kYXRhKQogICAgICAgICBwcml2
LT5kYXRhID0gZ19zdHJpbmdfbmV3X2xlbihwcml2LT5yZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCks
IHByaXYtPnJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKaW5kZXggNjE3Y2UwYi4uYjM3NjdiNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKQEAgLTYsNyArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEphbiBBbG9u
em8gPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggR3Vz
dGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICog
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAo
QykgMjAwOSBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05OTQsNiArOTk0LDE2IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgcHJpdi0+cGFzdGVfdGFyZ2V0X2xpc3QgPSBOVUxMOwogICAgIH0KIAorICAgIGlmIChwcml2
LT5tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+bWFpblJlc291
cmNlKTsKKyAgICAgICAgcHJpdi0+bWFpblJlc291cmNlID0gTlVMTDsKKyAgICB9CisKKyAgICBp
ZiAocHJpdi0+c3ViUmVzb3VyY2VzKSB7CisgICAgICAgIGdfaGFzaF90YWJsZV91bnJlZihwcml2
LT5zdWJSZXNvdXJjZXMpOworICAgICAgICBwcml2LT5zdWJSZXNvdXJjZXMgPSBOVUxMOworICAg
IH0KKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5k
aXNwb3NlKG9iamVjdCk7CiB9CiAKQEAgLTEwMDIsNiArMTAxMiw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhvYmplY3QpOwogICAgIFdlYktpdFdlYlZpZXdQ
cml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKIAorICAgIGdfZnJlZShwcml2LT5tYWluUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICBnX2ZyZWUocHJpdi0+ZW5jb2RpbmcpOwogICAgIGdfZnJl
ZShwcml2LT5jdXN0b21FbmNvZGluZyk7CiAKQEAgLTI1NTgsNiArMjU2OSw4IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19z
aWduYWxfY29ubmVjdChwcml2LT53ZWJTZXR0aW5ncywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2Vi
a2l0X3dlYl92aWV3X3NldHRpbmdzX25vdGlmeSksIHdlYlZpZXcpOwogCiAgICAgcHJpdi0+d2Vi
V2luZG93RmVhdHVyZXMgPSB3ZWJraXRfd2ViX3dpbmRvd19mZWF0dXJlc19uZXcoKTsKKworICAg
IHByaXYtPnN1YlJlc291cmNlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn
X3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CiB9CiAKIEd0a1dpZGdldCogd2Vi
a2l0X3dlYl92aWV3X25ldyh2b2lkKQpAQCAtMzg0MCwzICszODUzLDYxIEBAIGdib29sZWFuIHdl
YmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZSAoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKIAogICAgIHJldHVybiBGQUxTRTsKIH0KKworLy8gSW50ZXJuYWwgc3VicmVzb3VyY2UgbWFu
YWdlbWVudAordm9pZCB3ZWJraXRfd2ViX3ZpZXdfYWRkX3Jlc291cmNlKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNoYXIqIGlkZW50aWZpZXIsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJj
ZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisK
KyAgICBpZiAoIXByaXYtPm1haW5SZXNvdXJjZSkgeworICAgICAgICBwcml2LT5tYWluUmVzb3Vy
Y2UgPSB3ZWJSZXNvdXJjZTsKKyAgICAgICAgcHJpdi0+bWFpblJlc291cmNlSWRlbnRpZmllciA9
IGdfc3RyZHVwKGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ19o
YXNoX3RhYmxlX2luc2VydChwcml2LT5zdWJSZXNvdXJjZXMsIGlkZW50aWZpZXIsIHdlYlJlc291
cmNlKTsKK30KKworV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdF93ZWJfdmlld19nZXRfcmVzb3Vy
Y2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgZ3BvaW50ZXIgd2Vi
UmVzb3VyY2UgPSBOVUxMOworCisgICAgZ2Jvb2xlYW4gcmVzb3VyY2VGb3VuZCA9IGdfaGFzaF90
YWJsZV9sb29rdXBfZXh0ZW5kZWQocHJpdi0+c3ViUmVzb3VyY2VzLCBpZGVudGlmaWVyLCBOVUxM
LCAmd2ViUmVzb3VyY2UpOworCisgICAgLy8gVGhlIG9ubHkgcmVzb3VyY2Ugd2UgZG8gbm90IHN0
b3JlIGluIHRoaXMgaGFzaCB0YWJsZSBpcyB0aGUgbWFpbiEKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChyZXNvdXJjZUZvdW5kIHx8IGdfc3RyX2VxdWFsKGlkZW50aWZpZXIsIHByaXYtPm1haW5S
ZXNvdXJjZUlkZW50aWZpZXIpLCBOVUxMKTsKKworICAgIGlmICghd2ViUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisK
KyAgICByZXR1cm4gV0VCS0lUX1dFQl9SRVNPVVJDRSh3ZWJSZXNvdXJjZSk7Cit9CisKK1dlYktp
dFdlYlJlc291cmNlKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+bWFpblJlc291cmNl
OworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19jbGVhcl9yZXNvdXJjZXMoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXct
PnByaXY7CisKKyAgICBnX2ZyZWUocHJpdi0+bWFpblJlc291cmNlSWRlbnRpZmllcik7CisgICAg
cHJpdi0+bWFpblJlc291cmNlSWRlbnRpZmllciA9IE5VTEw7CisKKyAgICBpZiAocHJpdi0+bWFp
blJlc291cmNlKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm1haW5SZXNvdXJjZSk7
CisgICAgICAgIHByaXYtPm1haW5SZXNvdXJjZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHBy
aXYtPnN1YlJlc291cmNlcykKKyAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZV9hbGwocHJpdi0+
c3ViUmVzb3VyY2VzKTsKK30KKworR0xpc3QqIHdlYmtpdF93ZWJfdmlld19nZXRfc3ViX3Jlc291
cmNlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBHTGlzdCogc3ViUmVzb3VyY2VzID0gZ19oYXNo
X3RhYmxlX2dldF92YWx1ZXMocHJpdi0+c3ViUmVzb3VyY2VzKTsKKyAgICByZXR1cm4gZ19saXN0
X3JlbW92ZShzdWJSZXNvdXJjZXMsIHByaXYtPm1haW5SZXNvdXJjZSk7Cit9Ci0tIAoxLjYuMy4z
Cgo=
</data>
<flag name="review"
          id="20577"
          type_id="1"
          status="+"
          setter="jmalonzo"
    />
    <flag name="commit-queue"
          id="20578"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>