<?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>50827</bug_id>
          
          <creation_ts>2010-12-10 10:21:41 -0800</creation_ts>
          <short_desc>[GTK] Add APIs for plugin management</short_desc>
          <delta_ts>2010-12-11 08:31:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>320225</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-10 10:21:41 -0800</bug_when>
    <thetext>In order for clients to write something like about:plugins we need to expose APIs to get the list of active plugins in the session and some basic information about them. First shot at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320230</commentid>
    <comment_count>1</comment_count>
      <attachid>76217</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-10 10:30:52 -0800</bug_when>
    <thetext>Created attachment 76217
webkitplugins.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320258</commentid>
    <comment_count>2</comment_count>
      <attachid>76217</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-10 11:07:51 -0800</bug_when>
    <thetext>Comment on attachment 76217
webkitplugins.diff

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

Great stuff. Lots of nitpicks below and a couple suggestions.

&gt; WebKit/gtk/tests/testwebplugindatabase.c:21
&gt; +#include &lt;unistd.h&gt;

unistd.h should go after the GLib/GTK+ stuff.

&gt; WebKit/gtk/tests/testwebplugindatabase.c:27
&gt; +#if GLIB_CHECK_VERSION(2, 16, 0) &amp;&amp; GTK_CHECK_VERSION(2, 14, 0)

Do we still need this GLib version check?

&gt; WebKit/gtk/tests/testwebplugindatabase.c:37
&gt; +    WebKitWebPluginDatabasePluginList l;
&gt; +    GSList* p;

These should probably be called pluginList and current. If possible in this language, they should be defined where they are first used, otherwise I&apos;d say intialize them to 0.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:30
&gt; +static void mimeTypeFree(WebKitWebPluginMIMEType* mimeType)

This should be freeMimeType so that the verb is first, since it&apos;s not API.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:48
&gt; +static void webkit_web_plugin_finalize(GObject *object)

Asterisk with the typename.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:55
&gt; +    WEBKIT_WEB_PLUGIN(object)-&gt;priv-&gt;~WebKitWebPluginPrivate();

This can just be delete priv. See below.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:60
&gt; +static void webkit_web_plugin_class_init(WebKitWebPluginClass *klass)

Asterisk with the typename.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:64
&gt; +    GObjectClass* gobject_class = (GObjectClass*)klass;

gobjectClass and a C++ style cast?

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:68
&gt; +    g_type_class_add_private(klass, sizeof(WebKitWebPluginPrivate));

See below as well

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:71
&gt; +static void webkit_web_plugin_init(WebKitWebPlugin *plugin)

Asterisk with the typename.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:76
&gt; +    new (priv) WebKitWebPluginPrivate();

I think Company suggested that instead of using WEBKIT_WEB_PLUGIN_GET_PRIVATE and placement new, we can just just use new to allocate the private section here.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:85
&gt; +    WebKitWebPluginPrivate* priv = plugin-&gt;priv;
&gt; +
&gt; +    priv-&gt;corePlugin = package;

Instead of caching something you only use once, I think it makes more sense to do plugin-&gt;priv-&gt;corePlugin = package.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:148
&gt; +    if (!priv-&gt;mimeTypes) {

This should be an early return.

&gt; WebKit/gtk/webkit/webkitwebplugin.h:42
&gt; +
&gt; +typedef struct _WebKitWebPluginMIMEType {
&gt; +    char* name;
&gt; +    char* description;
&gt; +    char** extensions;
&gt; +} WebKitWebPluginMIMEType;
&gt; +

There should probably be some documentation for this structure. In particular to say that extensions is a GLib string list.

&gt; WebKit/gtk/webkit/webkitwebplugin.h:43
&gt; +typedef GSList * WebKitWebPluginMIMETypeList;

I think it makes more sense to just use GSList in the API. I think it makes it clearer how to use the API.

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:32
&gt; +static void webkit_web_plugin_database_dispose(GObject *object)

Asterisk again.

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:43
&gt; +    GObjectClass* gobject_class = (GObjectClass*)klass;

gobjectClass and a C++ style cast?

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:47
&gt; +    g_type_class_add_private(klass, sizeof(WebKitWebPluginDatabasePrivate));

If you use the method I mentioned above, you&apos;ll need to remove this.

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:50
&gt; +static void webkit_web_plugin_database_init(WebKitWebPluginDatabase *database)

Asterisk. :)

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:55
&gt; +    new (priv) WebKitWebPluginDatabasePrivate();

Same suggestion here.

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:115
&gt; +WebKitWebPlugin* webkit_web_plugin_database_get_plugin_for_mimetype(WebKitWebPluginDatabase* database, const char *mimeType)

Another traveling asterisk.

&gt; WebKit/gtk/webkit/webkitwebplugindatabase.cpp:142
&gt; +    return WEBKIT_WEB_PLUGIN_DATABASE(g_object_new(WEBKIT_TYPE_WEB_PLUGIN_DATABASE, 0));

This doesn&apos;t produce a warning?

&gt; WebKit/gtk/webkit/webkitwebview.cpp:5162
&gt; +    static WebKitWebPluginDatabase* database;

This should probably be initialized to 0 explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320632</commentid>
    <comment_count>3</comment_count>
      <attachid>76298</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-11 02:55:20 -0800</bug_when>
    <thetext>Created attachment 76298
webkitplugins.diff

Round two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320633</commentid>
    <comment_count>4</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-11 02:57:14 -0800</bug_when>
    <thetext>(In reply to comment #2)

I&apos;ve pretty much done everything you asked for except...


&gt; &gt; WebKit/gtk/tests/testwebplugindatabase.c:37
&gt; &gt; +    WebKitWebPluginDatabasePluginList l;
&gt; &gt; +    GSList* p;
&gt; 
&gt; These should probably be called pluginList and current. If possible in this language, they should be defined where they are first used, otherwise I&apos;d say intialize them to 0.

I left &apos;p&apos; as it is, as IMHO using that letter for list iterators is more or less as common as using &apos;i&apos; for integer counters. Also no initialization to 0, since both variables are set to an initial value right away.

I&apos;ve also used a RefPtr for the PluginPackage inside WebKitWebPlugin, as discussed yesterday in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320680</commentid>
    <comment_count>5</comment_count>
      <attachid>76298</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-11 07:46:30 -0800</bug_when>
    <thetext>Comment on attachment 76298
webkitplugins.diff

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

&gt; WebKit/gtk/tests/testwebplugindatabase.c:37
&gt; +    WebKitWebView* view = WEBKIT_WEB_VIEW(webkit_web_view_new());
&gt; +    WebKitWebPluginDatabase* database;
&gt; +    GSList* pluginList, *p;
&gt; +    gboolean found = FALSE;
&gt; +

The style guide says nothing about this (yet, MUHAHA), so it&apos;s not worth arguing. Other reviewers have made me change undefined variables in the past.

&gt; WebKit/gtk/tests/testwebplugindatabase.c:46
&gt; +        if (g_strcmp0(webkit_web_plugin_get_name(plugin), &quot;WebKit Test PlugIn&quot;) == 0 &amp;&amp;
&gt; +            g_strcmp0(webkit_web_plugin_get_description(plugin), &quot;Simple Netscape plug-in that handles test content for WebKit&quot;) == 0)

Please change this to something like below before landing:
         if (!g_strcmp0(webkit_web_plugin_get_name(plugin), &quot;WebKit Test PlugIn&quot;) == 0 &amp;&amp;
             !g_strcmp0(webkit_web_plugin_get_description(plugin), &quot;Simple Netscape plug-in that handles test content for WebKit&quot;) == 0)

&gt; WebKit/gtk/tests/testwebplugindatabase.c:68
&gt; +    g_critical(&quot;You will need at least glib-2.16.0 and gtk-2.14.0 to run the unit tests. Doing nothing now.&quot;);

Better update this message.

&gt; WebKit/gtk/webkit/webkitwebplugin.cpp:160
&gt; +        unsigned i;
&gt; +        for (i = 0; i &lt; extensions.size(); i++)
&gt; +            mimeType-&gt;extensions[i] = g_strdup(extensions[i].utf8().data());

This can be for (unsigned i = 0; i &lt; extensions.size(); i++) if you&apos;re feeling saucy.

&gt; WebKit/gtk/webkit/webkitwebplugin.h:41
&gt; + * @extensions: the extensions associated with this MIME type.

Might just want to say that this array is null terminated.

&gt; WebKit/gtk/webkit/webkitwebplugindatabaseprivate.h:37
&gt; +WebKitWebPluginDatabase* webkit_web_plugin_database_new(void);

Probably want to drop the void here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320683</commentid>
    <comment_count>6</comment_count>
      <attachid>76298</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-11 08:31:38 -0800</bug_when>
    <thetext>Comment on attachment 76298
webkitplugins.diff

Committed in r73858.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320684</commentid>
    <comment_count>7</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-11 08:31:48 -0800</bug_when>
    <thetext>Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76217</attachid>
            <date>2010-12-10 10:30:52 -0800</date>
            <delta_ts>2010-12-11 02:55:20 -0800</delta_ts>
            <desc>webkitplugins.diff</desc>
            <filename>webkitplugins.diff</filename>
            <type>text/plain</type>
            <size>31585</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA1YWUwMTBkMDFiOGQxZGEzNzcxMjhlODdhZTcxODE4YjRiMzU2MGIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBG
cmksIDEwIERlYyAyMDEwIDE5OjI0OjU4ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gMjAxMC0xMi0x
MCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBBZGQgQVBJcyBmb3IgcGx1Z2luIG1hbmFnZW1l
bnQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4MjcK
CiAgICAgICAgQWRkIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlIGFuZCBXZWJLaXRXZWJQbHVnaW4g
Y2xhc3NlcyBmb3IgYmFzaWMKICAgICAgICBwbHVnaW4gbWFuYWdlbWVudCBhdCB0aGUgY2xpZW50
IGxldmVsLiBGb3Igbm93IHRoZXkgcHJvdmlkZQogICAgICAgICJyZWFkLW9ubHkiIGFjY2VzcyB0
byB0aGUgcGx1Z2luIGxpc3QuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCBuZXcgZmls
ZXMgdG8gdGhlIGJ1aWxkLgogICAgICAgICogdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmM6
IFRlc3QgdGhhdCB0aGUgZGF0YWJhc2UgY29udGFpbnMKICAgICAgICB0aGUgdGVzdCBwbHVnaW4s
IHdoaWNoIHNob3VsZCBhbHdheXMgYmUgbG9hZGVkLgogICAgICAgICogd2Via2l0L3dlYmtpdC5o
OiBhZGQgbmV3IGhlYWRlcnMuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOiBhZGQg
bmV3IGRlZmluZXMuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcDogQW4gbmV3
IGNsYXNzIHJlcHJlc2VudGluZyBhIHBsdWdpbiBvYmplY3QuCiAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0d2VicGx1Z2luLmg6IGRpdHRvLgogICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRh
dGFiYXNlLmNwcDogQSBuZXcgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBhY3RpdmUg
cGx1Z2lucy4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5oOiBkaXR0
by4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaDogUHJp
dmF0ZSBoZWFkZXIuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oOiBQ
cml2YXRlIGhlYWRlci4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKICAgICAg
ICAod2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKTogcmV0dXJucyB0aGUgV2ViS2l0V2Vi
UGx1Z2luRGF0YWJhc2UgZm9yIHRoaXMgc2Vzc2lvbi4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3Lmg6IGFkZCBtZXRob2QgdG8gaGVhZGVyLgotLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArKysKIFdlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKwogV2ViS2l0L2d0
ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYyAgICAgICAgICAgfCAgIDc0ICsrKysrKysr
KwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAgICAg
IHwgICAgNiArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwICAgICAgICAg
ICAgICB8ICAxNjggKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnBsdWdpbi5oICAgICAgICAgICAgICAgIHwgICA3MiArKysrKysrKysKIFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlLmNwcCAgICAgIHwgIDE0MyArKysrKysrKysr
KysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaCAgICAg
ICAgfCAgIDY1ICsrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRh
YmFzZXByaXZhdGUuaCB8ICAgNDEgKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbnByaXZhdGUuaCAgICAgICAgIHwgICA0NiArKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAgICAgIHwgICAyMyArKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAxMyBmaWxlcyBj
aGFuZ2VkLCA2ODEgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJh
c2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdp
bmRhdGFiYXNlcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjYTM5ZTA4Li42ODk5ZDM2IDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDEwLTEyLTEwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBB
ZGQgQVBJcyBmb3IgcGx1Z2luIG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwODI3CisKKyAgICAgICAgQWRkIFdlYktpdFdlYlBsdWdp
bkRhdGFiYXNlIGFuZCBXZWJLaXRXZWJQbHVnaW4gY2xhc3NlcyBmb3IgYmFzaWMKKyAgICAgICAg
cGx1Z2luIG1hbmFnZW1lbnQgYXQgdGhlIGNsaWVudCBsZXZlbC4gRm9yIG5vdyB0aGV5IHByb3Zp
ZGUKKyAgICAgICAgInJlYWQtb25seSIgYWNjZXNzIHRvIHRoZSBwbHVnaW4gbGlzdC4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4KKyAgICAg
ICAgKiB0ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzogVGVzdCB0aGF0IHRoZSBkYXRhYmFz
ZSBjb250YWlucworICAgICAgICB0aGUgdGVzdCBwbHVnaW4sIHdoaWNoIHNob3VsZCBhbHdheXMg
YmUgbG9hZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDogYWRkIG5ldyBoZWFkZXJzLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGFkZCBuZXcgZGVmaW5lcy4KKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcDogQW4gbmV3IGNsYXNzIHJlcHJlc2VudGlu
ZyBhIHBsdWdpbiBvYmplY3QuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oOiBk
aXR0by4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwOiBBIG5l
dyBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGFjdGl2ZSBwbHVnaW5zLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5oOiBkaXR0by4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmg6IFByaXZhdGUgaGVhZGVyLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5wcml2YXRlLmg6IFByaXZhdGUgaGVhZGVy
LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF9n
ZXRfd2ViX3BsdWdpbl9kYXRhYmFzZSk6IHJldHVybnMgdGhlIFdlYktpdFdlYlBsdWdpbkRhdGFi
YXNlIGZvciB0aGlzIHNlc3Npb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDog
YWRkIG1ldGhvZCB0byBoZWFkZXIuCisKIDIwMTAtMTItMDkgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bSBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggN2FhODA4My4uOTI1N2YyNSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCkBAIC0xMjcsNiArMTI3LDggQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAog
CSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaCBcCiAJJChz
cmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBcCisJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oIFwKKwkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaCBcCiAJJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCkBAIC0xOTUsNiArMTk3LDEw
IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9s
b2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
cmVzb3VyY2UuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAg
XAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAgXAorCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbnByaXZhdGUuaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJw
bHVnaW5kYXRhYmFzZXByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJp
dHlvcmlnaW4uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwKQEAgLTM5MSw2ICszOTcs
NyBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYnNldHRpbmdz
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIFwKIAlQcm9ncmFtcy91bml0
dGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0d2VicGx1
Z2luZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0d2VidmlldyBcCiAJUHJvZ3Jh
bXMvdW5pdHRlc3RzL3Rlc3RrZXlldmVudHMgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0Y29w
eWFuZHBhc3RlCkBAIC00NDYsNiArNDUzLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0d2Vi
ZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3Rz
X3Rlc3R3ZWJmcmFtZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3R3ZWJmcmFtZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKIAor
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYworUHJvZ3JhbXNfdW5pdHRlc3RzX3Rl
c3R3ZWJwbHVnaW5kYXRhYmFzZV9DRkxBR1MgPSAtRFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwg
cHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgJCh3ZWJraXRf
dGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJw
bHVnaW5kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFdlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdHdl
YmJhY2tmb3J3YXJkbGlzdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFt
c191bml0dGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJh
c2UuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjYzJjZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgorCisjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDE2LCAwKSAmJiBHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNCwgMCkKKworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVk
IGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLworZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5n
c19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBn
Y2hhciogZGlyZWN0b3J5KTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9k
YXRhYmFzZV9nZXRfcGx1Z2lucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYlBsdWdpbkRh
dGFiYXNlKiBkYXRhYmFzZTsKKyAgICBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZVBsdWdpbkxpc3Qg
bDsKKyAgICBHU0xpc3QqIHA7CisgICAgZ2Jvb2xlYW4gZm91bmQgPSBGQUxTRTsKKworICAgIHdl
YmtpdF93ZWJfc2V0dGluZ3NfYWRkX2V4dHJhX3BsdWdpbl9kaXJlY3RvcnkodmlldywgVEVTVF9Q
TFVHSU5fRElSKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7CisKKyAg
ICBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfd2ViX3BsdWdpbl9kYXRhYmFzZSgpOworICAgIGwgPSB3
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyhkYXRhYmFzZSk7CisgICAgZm9y
IChwID0gbDsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAgICAgV2ViS2l0V2ViUGx1Z2luKiBwbHVn
aW4gPSAoV2ViS2l0V2ViUGx1Z2luKilwLT5kYXRhOworICAgICAgICBpZiAoZ19zdHJjbXAwKHdl
YmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSA9
PSAwICYmCisgICAgICAgICAgICBnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2Ny
aXB0aW9uKHBsdWdpbiksICJTaW1wbGUgTmV0c2NhcGUgcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVz
dCBjb250ZW50IGZvciBXZWJLaXQiKSA9PSAwKQorICAgICAgICAgICAgZm91bmQgPSBUUlVFOwor
ICAgIH0KKyAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShs
KTsKKyAgICBnX2Fzc2VydChmb3VuZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30K
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGdfdGhyZWFkX2luaXQo
TlVMTCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2VicGx1Z2luZGF0YWJhc2UvZ2V0cGx1Z2lucyIsIHRlc3Rfd2Via2l0
X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMpOworICAgIHJldHVybiBnX3Rlc3RfcnVu
ICgpOworfQorCisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAg
IGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgYXQgbGVhc3QgZ2xpYi0yLjE2LjAgYW5kIGd0ay0y
LjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3RzLiBEb2luZyBub3RoaW5nIG5vdy4iKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IDI0MjhmNjIuLmMwZDBlMzEg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYnBsdWdpbi5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5k
YXRhYmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5k
ZXggMzk5Y2I0Yy4uYjBiNjA3YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTUs
NiArOTUsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNp
b25DbGFzcyBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2kKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzOwogdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRlc0NsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UgICAg
ICAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlBs
dWdpbkRhdGFiYXNlQ2xhc3MgICBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZUNsYXNzOworCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luICAgICAgV2ViS2l0V2ViUGx1Z2luOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbkNsYXNzIFdlYktpdFdlYlBsdWdpbkNsYXNzOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnBsdWdpbi5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODkzNWQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwCkBAIC0wLDAgKzEsMTY4
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtp
dHdlYnBsdWdpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIndl
YmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJwbHVnaW5wcml2YXRlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYlBsdWdpbiwg
d2Via2l0X3dlYl9wbHVnaW4sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIG1pbWVUeXBl
RnJlZShXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVU
eXBlLT5uYW1lKQorICAgICAgICBnX2ZyZWUobWltZVR5cGUtPm5hbWUpOworICAgIGlmIChtaW1l
VHlwZS0+ZGVzY3JpcHRpb24pCisgICAgICAgIGdfZnJlZShtaW1lVHlwZS0+ZGVzY3JpcHRpb24p
OworICAgIGlmIChtaW1lVHlwZS0+ZXh0ZW5zaW9ucykKKyAgICAgICAgZ19zdHJmcmVldihtaW1l
VHlwZS0+ZXh0ZW5zaW9ucyk7CisgICAgZ19zbGljZV9mcmVlKFdlYktpdFdlYlBsdWdpbk1JTUVU
eXBlLCBtaW1lVHlwZSk7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9wbHVnaW5fbWltZV90eXBlX2xp
c3RfZnJlZShXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZUxpc3QgbGlzdCkKK3sKKyAgICBmb3IgKEdT
TGlzdCogcCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KQorICAgICAgICBtaW1lVHlwZUZyZWUoKFdl
YktpdFdlYlBsdWdpbk1JTUVUeXBlKilwLT5kYXRhKTsKKyAgICBnX3NsaXN0X2ZyZWUobGlzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcGx1Z2luX2ZpbmFsaXplKEdPYmplY3QgKm9i
amVjdCkKK3sKKyAgICBXZWJLaXRXZWJQbHVnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9Q
TFVHSU4ob2JqZWN0KS0+cHJpdjsKKworICAgIGlmIChwcml2LT5taW1lVHlwZXMpCisgICAgICAg
IHdlYmtpdF93ZWJfcGx1Z2luX21pbWVfdHlwZV9saXN0X2ZyZWUocHJpdi0+bWltZVR5cGVzKTsK
KworICAgIFdFQktJVF9XRUJfUExVR0lOKG9iamVjdCktPnByaXYtPn5XZWJLaXRXZWJQbHVnaW5Q
cml2YXRlKCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3BsdWdpbl9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcGx1
Z2luX2NsYXNzX2luaXQoV2ViS2l0V2ViUGx1Z2luQ2xhc3MgKmtsYXNzKQoreworICAgIHdlYmtp
dF9pbml0KCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENs
YXNzKilrbGFzczsKKworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl9w
bHVnaW5fZmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNp
emVvZihXZWJLaXRXZWJQbHVnaW5Qcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfcGx1Z2luX2luaXQoV2ViS2l0V2ViUGx1Z2luICpwbHVnaW4pCit7CisgICAgV2ViS2l0V2Vi
UGx1Z2luUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfUExVR0lOX0dFVF9QUklWQVRFKHBsdWdp
bik7CisgICAgcGx1Z2luLT5wcml2ID0gcHJpdjsKKworICAgIG5ldyAocHJpdikgV2ViS2l0V2Vi
UGx1Z2luUHJpdmF0ZSgpOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdFdlYlBsdWdp
bioga2l0TmV3KFdlYkNvcmU6OlBsdWdpblBhY2thZ2UqIHBhY2thZ2UpCit7CisgICAgV2ViS2l0
V2ViUGx1Z2luKiBwbHVnaW4gPSBXRUJLSVRfV0VCX1BMVUdJTihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX1BMVUdJTiwgMCkpOworICAgIFdlYktpdFdlYlBsdWdpblByaXZhdGUqIHByaXYg
PSBwbHVnaW4tPnByaXY7CisKKyAgICBwcml2LT5jb3JlUGx1Z2luID0gcGFja2FnZTsKKworICAg
IHJldHVybiBwbHVnaW47Cit9Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X25h
bWU6CisgKiBAcGx1Z2luOiBhICNXZWJLaXRXZWJQbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
bmFtZSBzdHJpbmcgZm9yIEBwbHVnaW4uCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK2NvbnN0
IGNoYXIqIHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKFdlYktpdFdlYlBsdWdpbiogcGx1Z2lu
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUExVR0lOKHBsdWdp
biksIDApOworCisgICAgV2ViS2l0V2ViUGx1Z2luUHJpdmF0ZSogcHJpdiA9IHBsdWdpbi0+cHJp
djsKKworICAgIGlmICghcHJpdi0+bmFtZS5sZW5ndGgoKSkKKyAgICAgICAgcHJpdi0+bmFtZSA9
IHByaXYtPmNvcmVQbHVnaW4tPm5hbWUoKS51dGY4KCk7CisKKyAgICByZXR1cm4gcHJpdi0+bmFt
ZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9u
OgorICogQHBsdWdpbjogYSAjV2ViS2l0V2ViUGx1Z2luCisgKgorICogUmV0dXJuczogdGhlIGRl
c2NyaXB0aW9uIHN0cmluZyBmb3IgQHBsdWdpbi4KKyAqCisgKiBTaW5jZTogMS4zLjgKKyAqLwor
Y29uc3QgY2hhciogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKFdlYktpdFdlYlBs
dWdpbiogcGx1Z2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
UExVR0lOKHBsdWdpbiksIDApOworCisgICAgV2ViS2l0V2ViUGx1Z2luUHJpdmF0ZSogcHJpdiA9
IHBsdWdpbi0+cHJpdjsKKworICAgIGlmICghcHJpdi0+ZGVzY3JpcHRpb24ubGVuZ3RoKCkpCisg
ICAgICAgIHByaXYtPmRlc2NyaXB0aW9uID0gcHJpdi0+Y29yZVBsdWdpbi0+ZGVzY3JpcHRpb24o
KS51dGY4KCk7CisKKyAgICByZXR1cm4gcHJpdi0+ZGVzY3JpcHRpb24uZGF0YSgpOworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfcGx1Z2luX2dldF9taW1ldHlwZXM6CisgKiBAcGx1Z2luOiBhICNX
ZWJLaXRXZWJQbHVnaW4KKyAqCisgKiBSZXR1cm5zIGFsbCB0aGUgI1dlYktpdFdlYlBsdWdpbk1J
TUVUeXBlIHRoYXQgQHBsdWdpbiBpcyBoYW5kbGluZworICogYXQgdGhlIG1vbWVudC4KKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgY29udGFpbmVyKSAoZWxlbWVudC10eXBlIFdlYktpdFdlYlBs
dWdpbk1JTUVUeXBlKTogYSAjR1NMaXN0IG9mICNXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZQorICoK
KyAqIFNpbmNlOiAxLjMuOAorICovCitXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZUxpc3Qgd2Via2l0
X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1BMVUdJTihwbHVnaW4pLCAwKTsK
KworICAgIFdlYktpdFdlYlBsdWdpblByaXZhdGUqIHByaXYgPSBwbHVnaW4tPnByaXY7CisKKyAg
ICBpZiAoIXByaXYtPm1pbWVUeXBlcykgeworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlv
bnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBXZWJLaXRXZWJQbHVnaW5NSU1F
VHlwZSogbWltZVR5cGUgPSBnX3NsaWNlX25ldzAoV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUpOwor
ICAgICAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+
c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRl
bnNpb25zID0gcHJpdi0+Y29yZVBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChpdC0+Zmly
c3QpOworICAgICAgICAgICAgbWltZVR5cGUtPmV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxnY2hh
cioqPihnX21hbGxvYzAoZXh0ZW5zaW9ucy5zaXplKCkgKyAxKSk7CisgICAgICAgICAgICB1bnNp
Z25lZCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBp
KyspCisgICAgICAgICAgICAgICAgbWltZVR5cGUtPmV4dGVuc2lvbnNbaV0gPSBnX3N0cmR1cChl
eHRlbnNpb25zW2ldLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICBwcml2LT5taW1lVHlw
ZXMgPSBnX3NsaXN0X2FwcGVuZChwcml2LT5taW1lVHlwZXMsIG1pbWVUeXBlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBwcml2LT5taW1lVHlwZXM7Cit9CmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWEz
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4u
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiB3ZWJraXR3ZWJwbHVn
aW5faAorI2RlZmluZSB3ZWJraXR3ZWJwbHVnaW5faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfUExVR0lOICAgICAgICAgICAgKHdlYmtpdF93ZWJf
cGx1Z2luX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfUExVR0lOKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9Q
TFVHSU4sIFdlYktpdFdlYlBsdWdpbikpCisjZGVmaW5lIFdFQktJVF9XRUJfUExVR0lOX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVf
V0VCX1BMVUdJTiwgV2ViS2l0V2ViUGx1Z2luQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
X1BMVUdJTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfUExVR0lOKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9QTFVHSU5fQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9X
RUJfUExVR0lOKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9QTFVHSU5fR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lOLCBX
ZWJLaXRXZWJQbHVnaW5DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW5Q
cml2YXRlIFdlYktpdFdlYlBsdWdpblByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRX
ZWJQbHVnaW5NSU1FVHlwZSB7CisgICAgY2hhciogbmFtZTsKKyAgICBjaGFyKiBkZXNjcmlwdGlv
bjsKKyAgICBjaGFyKiogZXh0ZW5zaW9uczsKK30gV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGU7CisK
K3R5cGVkZWYgR1NMaXN0ICogV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGVMaXN0OworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF93ZWJfcGx1Z2luX21pbWVfdHlwZV9saXN0X2ZyZWUgKFdlYktpdFdl
YlBsdWdpbk1JTUVUeXBlTGlzdCk7CisKK3N0cnVjdCBfV2ViS2l0V2ViUGx1Z2luQ2xhc3Mgewor
ICAgIEdPYmplY3RDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViUGx1
Z2luIHsKKyAgICBHT2JqZWN0IHBhcmVudEluc3RhbmNlOworCisgICAgV2ViS2l0V2ViUGx1Z2lu
UHJpdmF0ZSogcHJpdjsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfcGx1Z2lu
X2dldF90eXBlICAgICAgICAodm9pZCkgR19HTlVDX0NPTlNUOworCitXRUJLSVRfQVBJIGNvbnN0
IGNoYXIqCit3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbmFtZSAgICAgICAgKFdlYktpdFdlYlBsdWdp
biopOworCitXRUJLSVRfQVBJIGNvbnN0IGNoYXIqCit3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVz
Y3JpcHRpb24gKFdlYktpdFdlYlBsdWdpbiopOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlBsdWdp
bk1JTUVUeXBlTGlzdAord2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyAgIChXZWJLaXRX
ZWJQbHVnaW4qKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzY3NTFhNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJwbHVnaW5kYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2
YXRlLmgiCisjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmgiCisjaW5j
bHVkZSAid2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViUGx1
Z2luRGF0YWJhc2UsIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9kaXNwb3NlKEdPYmplY3Qg
Km9iamVjdCkKK3sKKyAgICBXRUJLSVRfV0VCX1BMVUdJTl9EQVRBQkFTRShvYmplY3QpLT5wcml2
LT5+V2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlKCk7CisKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2NsYXNzX2lu
aXQoV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VDbGFzcyAqa2xhc3MpCit7CisgICAgd2Via2l0X2lu
aXQoKTsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3Mq
KWtsYXNzOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF93ZWJfcGx1Z2lu
X2RhdGFiYXNlX2Rpc3Bvc2U7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3Ms
IHNpemVvZihXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfaW5pdChXZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZSAqZGF0YWJhc2UpCit7CisgICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9QTFVHSU5fREFUQUJBU0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UpOworICAg
IGRhdGFiYXNlLT5wcml2ID0gcHJpdjsKKworICAgIG5ldyAocHJpdikgV2ViS2l0V2ViUGx1Z2lu
RGF0YWJhc2VQcml2YXRlKCk7CisKKyAgICBwcml2LT5jb3JlRGF0YWJhc2UgPSBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfcGx1Z2lu
X2RhdGFiYXNlX2xpc3RfZnJlZToKKyAqIEBsaXN0OiBhICNXZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZVBsdWdpbkxpc3QKKyAqCisgKiBGcmVlcyBAbGlzdC4KKyAqCisgKiBTaW5jZTogMS4zLjgKKyAq
Lwordm9pZCB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShXZWJL
aXRXZWJQbHVnaW5EYXRhYmFzZVBsdWdpbkxpc3QgbGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKGxpc3QpOworCisgICAgZm9yIChHU0xpc3QqIHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkK
KyAgICAgICAgZ19vYmplY3RfdW5yZWYocC0+ZGF0YSk7CisKKyAgICBnX3NsaXN0X2ZyZWUobGlz
dCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnM6
CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlCisgKgorICogUmV0dXJu
cyBhbGwgI1dlYktpdFdlYlBsdWdpbiBhdmFpbGFibGUgaW4gQGRhdGFiYXNlLgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIFdlYktpdFdlYlBsdWdpbik6IGEg
I0dTTGlzdCBvZiAjV2ViS2l0V2ViUGx1Z2luCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK1dl
YktpdFdlYlBsdWdpbkRhdGFiYXNlUGx1Z2luTGlzdCB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFz
ZV9nZXRfcGx1Z2lucyhXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9QTFVHSU5fREFUQUJBU0UoZGF0YWJh
c2UpLCAwKTsKKworICAgIEdTTGlzdCogZ1BsdWdpbnMgPSAwOworICAgIGNvbnN0IFZlY3RvcjxQ
bHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBkYXRhYmFzZS0+cHJpdi0+Y29yZURhdGFiYXNlLT5w
bHVnaW5zKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luc1tpXTsK
KyAgICAgICAgZ1BsdWdpbnMgPSBnX3NsaXN0X2FwcGVuZChnUGx1Z2lucywga2l0TmV3KHBsdWdp
bikpOworICAgIH0KKworICAgIHJldHVybiBnUGx1Z2luczsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2luX2Zvcl9taW1ldHlwZToKKyAqIEBkYXRhYmFz
ZTogYSAjV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UKKyAqIEBtaW1lVHlwZTogYSBtaW1lIHR5cGUK
KyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0V2ViUGx1Z2luIHRoYXQgaXMgaGFuZGxpbmcgQG1p
bWVUeXBlIGluIHRoZQorICogQGRhdGFiYXNlLCBvciAlTlVMTCBpZiB0aGVyZSdzIG5vbmUgZG9p
bmcgc28uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNXZWJLaXRXZWJQbHVn
aW4KKyAqCisgKiBTaW5jZTogMS4zLjgKKyAqLworV2ViS2l0V2ViUGx1Z2luKiB3ZWJraXRfd2Vi
X3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2luX2Zvcl9taW1ldHlwZShXZWJLaXRXZWJQbHVnaW5E
YXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm1pbWVUeXBlKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUExVR0lOX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobWltZVR5cGUsIDApOworCisgICAgcmV0dXJuIGtp
dE5ldyhkYXRhYmFzZS0+cHJpdi0+Y29yZURhdGFiYXNlLT5wbHVnaW5Gb3JNSU1FVHlwZShtaW1l
VHlwZSkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3JlZnJlc2g6
CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlCisgKgorICogUmVmcmVz
aGVzIEBkYXRhYmFzZSBhZGRpbmcgbmV3IHBsdWdpbnMgdGhhdCBhcmUgbm93IGluIHVzZSBhbmQK
KyAqIHJlbW92aW5nIHRob3NlIHRoYXQgaGF2ZSBiZWVuIGRpc2FibGVkIG9yIGFyZSBvdGhlcndp
c2Ugbm8gbG9uZ2VyCisgKiBhdmFpbGFibGUuCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK3Zv
aWQgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChXZWJLaXRXZWJQbHVnaW5EYXRh
YmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1BM
VUdJTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgZGF0YWJhc2UtPnByaXYtPmNvcmVEYXRh
YmFzZS0+cmVmcmVzaCgpOworfQorCitXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSogd2Via2l0X3dl
Yl9wbHVnaW5fZGF0YWJhc2VfbmV3KHZvaWQpCit7CisgICAgcmV0dXJuIFdFQktJVF9XRUJfUExV
R0lOX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfUExVR0lOX0RBVEFCQVNF
LCAwKSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5k
YXRhYmFzZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQzYzNjCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaApAQCAtMCww
ICsxLDY1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiB3ZWJraXR3ZWJwbHVnaW5kYXRhYmFz
ZV9oCisjZGVmaW5lIHdlYmtpdHdlYnBsdWdpbmRhdGFiYXNlX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1BMVUdJTl9EQVRBQkFTRSAgICAgICAg
ICAgICh3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfV0VCX1BMVUdJTl9EQVRBQkFTRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lOX0RBVEFCQVNFLCBXZWJLaXRX
ZWJQbHVnaW5EYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9XRUJfUExVR0lOX0RBVEFCQVNFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZ
UEVfV0VCX1BMVUdJTl9EQVRBQkFTRSwgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VDbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19XRUJfUExVR0lOX0RBVEFCQVNFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9QTFVHSU5fREFUQUJB
U0UpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1BMVUdJTl9EQVRBQkFTRV9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQl9QTFVHSU5f
REFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfV0VCX1BMVUdJTl9EQVRBQkFTRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9Q
TFVHSU5fREFUQUJBU0UsIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlQ2xhc3MpKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlIFdlYktpdFdlYlBsdWdpbkRh
dGFiYXNlUHJpdmF0ZTsKK3R5cGVkZWYgR1NMaXN0ICogV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQ
bHVnaW5MaXN0OworCitzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlQ2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViUGx1Z2lu
RGF0YWJhc2UgeworICAgIEdPYmplY3QgcGFyZW50SW5zdGFuY2U7CisKKyAgICBXZWJLaXRXZWJQ
bHVnaW5EYXRhYmFzZVByaXZhdGUqIHByaXY7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCkgR19H
TlVDX0NPTlNUOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNl
X3BsdWdpbnNfbGlzdF9mcmVlICAgICAgIChXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZVBsdWdpbkxp
c3QpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlUGx1Z2luTGlzdAord2Vi
a2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMgICAgICAgICAgICAgKFdlYktpdFdl
YlBsdWdpbkRhdGFiYXNlKik7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViUGx1Z2luKgord2Via2l0
X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbl9mb3JfbWltZXR5cGUgKFdlYktpdFdlYlBs
dWdpbkRhdGFiYXNlKiwgY29uc3QgY2hhciAqKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
d2ViX3BsdWdpbl9kYXRhYmFzZV9yZWZyZXNoICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViUGx1
Z2luRGF0YWJhc2UqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2ExYTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaApAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0
d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0d2VicGx1Z2luZGF0YWJh
c2Vwcml2YXRlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIFBsdWdpbkRhdGFiYXNlOworfQorCitleHRlcm4gIkMiIHsKKworI2RlZmlu
ZSBXRUJLSVRfV0VCX1BMVUdJTl9EQVRBQkFTRV9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9QTFVHSU5fREFUQUJBU0Us
IFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZSkpCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZTsK
K3N0cnVjdCBfV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlIHsKKyAgICBXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZSogY29yZURhdGFiYXNlOworfTsKKworV2ViS2l0V2ViUGx1Z2luRGF0YWJh
c2UqIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX25ldyh2b2lkKTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbnByaXZhdGUuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbnByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJkOWIwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaWZuZGVmIHdlYmtpdHdlYnBsdWdpbnByaXZhdGVfaAorI2RlZmluZSB3
ZWJraXR3ZWJwbHVnaW5wcml2YXRlX2gKKworI2luY2x1ZGUgIndlYmtpdHdlYnBsdWdpbi5oIgor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBs
dWdpblBhY2thZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0V2ViUGx1Z2luKiBr
aXROZXcoV2ViQ29yZTo6UGx1Z2luUGFja2FnZSogcGFja2FnZSk7Cit9CisKK2V4dGVybiAiQyIg
eworCisjZGVmaW5lIFdFQktJVF9XRUJfUExVR0lOX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1BMVUdJTiwgV2ViS2l0
V2ViUGx1Z2luUHJpdmF0ZSkpCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luUHJpdmF0
ZSBXZWJLaXRXZWJQbHVnaW5Qcml2YXRlOworc3RydWN0IF9XZWJLaXRXZWJQbHVnaW5Qcml2YXRl
IHsKKyAgICBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlKiBjb3JlUGx1Z2luOworICAgIENTdHJpbmcg
bmFtZTsKKyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIFdlYktpdFdlYlBsdWdpbk1JTUVU
eXBlTGlzdCBtaW1lVHlwZXM7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAppbmRleCA1MTQ3MDA0Li44MTFmOGVjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lcHJp
dmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAjaW5jbHVkZSAid2Vi
a2l0d2ViaW5zcGVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2
YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKICNpbmNsdWRlIDxnZGsv
Z2Rra2V5c3ltcy5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CkBAIC01MTQ2LDYgKzUx
NDcsMjggQEAgV2ViS2l0Q2FjaGVNb2RlbCB3ZWJraXRfZ2V0X2NhY2hlX21vZGVsKCkKICAgICBy
ZXR1cm4gY2FjaGVNb2RlbDsKIH0KIAorLyoqCisgKiB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0
YWJhc2U6CisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCAjV2ViS2l0V2ViUGx1Z2luRGF0YWJh
c2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dAorICogYWxsIHRoZSBwbHVnaW5zIFdlYktpdCBrbm93
cyBhYm91dCBpbiB0aGlzIGluc3RhbmNlLgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVy
IG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UKKyAqCisgKiBTaW5j
ZTogMS4zLjgKKyAqLworV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIHdlYmtpdF9nZXRfd2ViX3Bs
dWdpbl9kYXRhYmFzZSgpCit7CisgICAgc3RhdGljIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBk
YXRhYmFzZTsKKworICAgIHdlYmtpdF9pbml0KCk7CisKKyAgICBpZiAoIWRhdGFiYXNlKQorICAg
ICAgICBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX25ldygpOworCisgICAg
cmV0dXJuIGRhdGFiYXNlOworfQorCiBHdGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRl
eHRfbWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKaW5kZXggMzRjNGQ1ZS4uOWFiZmVmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
aApAQCAtMzY0LDYgKzM2NCw5IEBAIHdlYmtpdF93ZWJfdmlld19zZXRfZnVsbF9jb250ZW50X3pv
b20gICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKIFdFQktJVF9BUEkg
U291cFNlc3Npb24qCiB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbiAgICAgICAgICAgICAgICAg
ICAgICAodm9pZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UgKgord2Vi
a2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgKHZvaWQpOworCiBX
RUJLSVRfQVBJIGNvbnN0IGdjaGFyKgogd2Via2l0X3dlYl92aWV3X2dldF9lbmNvZGluZyAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICogd2ViVmlldyk7CiAKLS0gCjEu
Ny4yLjMKCg==
</data>
<flag name="review"
          id="67127"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76298</attachid>
            <date>2010-12-11 02:55:20 -0800</date>
            <delta_ts>2010-12-11 08:31:38 -0800</delta_ts>
            <desc>webkitplugins.diff</desc>
            <filename>webkitplugins.diff</filename>
            <type>text/plain</type>
            <size>31472</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA5MDQ3MjMyYjEyN2VkMTFmYzIzYTVmZjkxMDA3ZDY2NzQyOTUwMDE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBG
cmksIDEwIERlYyAyMDEwIDE5OjI0OjU4ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gMjAxMC0xMi0x
MCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBBZGQgQVBJcyBmb3IgcGx1Z2luIG1hbmFnZW1l
bnQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4MjcK
CiAgICAgICAgQWRkIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlIGFuZCBXZWJLaXRXZWJQbHVnaW4g
Y2xhc3NlcyBmb3IgYmFzaWMKICAgICAgICBwbHVnaW4gbWFuYWdlbWVudCBhdCB0aGUgY2xpZW50
IGxldmVsLiBGb3Igbm93IHRoZXkgcHJvdmlkZQogICAgICAgICJyZWFkLW9ubHkiIGFjY2VzcyB0
byB0aGUgcGx1Z2luIGxpc3QuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCBuZXcgZmls
ZXMgdG8gdGhlIGJ1aWxkLgogICAgICAgICogdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmM6
IFRlc3QgdGhhdCB0aGUgZGF0YWJhc2UgY29udGFpbnMKICAgICAgICB0aGUgdGVzdCBwbHVnaW4s
IHdoaWNoIHNob3VsZCBhbHdheXMgYmUgbG9hZGVkLgogICAgICAgICogd2Via2l0L3dlYmtpdC5o
OiBhZGQgbmV3IGhlYWRlcnMuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOiBhZGQg
bmV3IGRlZmluZXMuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcDogQW4gbmV3
IGNsYXNzIHJlcHJlc2VudGluZyBhIHBsdWdpbiBvYmplY3QuCiAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0d2VicGx1Z2luLmg6IGRpdHRvLgogICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRh
dGFiYXNlLmNwcDogQSBuZXcgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBhY3RpdmUg
cGx1Z2lucy4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5oOiBkaXR0
by4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaDogUHJp
dmF0ZSBoZWFkZXIuCiAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oOiBQ
cml2YXRlIGhlYWRlci4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKICAgICAg
ICAod2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKTogcmV0dXJucyB0aGUgV2ViS2l0V2Vi
UGx1Z2luRGF0YWJhc2UgZm9yIHRoaXMgc2Vzc2lvbi4KICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3Lmg6IGFkZCBtZXRob2QgdG8gaGVhZGVyLgotLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArKysKIFdlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKwogV2ViS2l0L2d0
ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYyAgICAgICAgICAgfCAgIDcyICsrKysrKysr
KwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAgICAg
IHwgICAgNiArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwICAgICAgICAg
ICAgICB8ICAxNjYgKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnBsdWdpbi5oICAgICAgICAgICAgICAgIHwgICA4MyArKysrKysrKysrCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgICAgICB8ICAxMzkgKysrKysrKysr
KysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaCAgICAg
ICAgfCAgIDY0ICsrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRh
YmFzZXByaXZhdGUuaCB8ICAgNDEgKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbnByaXZhdGUuaCAgICAgICAgIHwgICA0NiArKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAgICAgIHwgICAyMyArKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAxMyBmaWxlcyBj
aGFuZ2VkLCA2ODMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJh
c2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdp
bmRhdGFiYXNlcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2VicGx1Z2lucHJpdmF0ZS5oCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjYTM5ZTA4Li42ODk5ZDM2IDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDEwLTEyLTEwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBB
ZGQgQVBJcyBmb3IgcGx1Z2luIG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwODI3CisKKyAgICAgICAgQWRkIFdlYktpdFdlYlBsdWdp
bkRhdGFiYXNlIGFuZCBXZWJLaXRXZWJQbHVnaW4gY2xhc3NlcyBmb3IgYmFzaWMKKyAgICAgICAg
cGx1Z2luIG1hbmFnZW1lbnQgYXQgdGhlIGNsaWVudCBsZXZlbC4gRm9yIG5vdyB0aGV5IHByb3Zp
ZGUKKyAgICAgICAgInJlYWQtb25seSIgYWNjZXNzIHRvIHRoZSBwbHVnaW4gbGlzdC4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4KKyAgICAg
ICAgKiB0ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzogVGVzdCB0aGF0IHRoZSBkYXRhYmFz
ZSBjb250YWlucworICAgICAgICB0aGUgdGVzdCBwbHVnaW4sIHdoaWNoIHNob3VsZCBhbHdheXMg
YmUgbG9hZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDogYWRkIG5ldyBoZWFkZXJzLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGFkZCBuZXcgZGVmaW5lcy4KKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcDogQW4gbmV3IGNsYXNzIHJlcHJlc2VudGlu
ZyBhIHBsdWdpbiBvYmplY3QuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oOiBk
aXR0by4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwOiBBIG5l
dyBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGFjdGl2ZSBwbHVnaW5zLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZS5oOiBkaXR0by4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmg6IFByaXZhdGUgaGVhZGVyLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW5wcml2YXRlLmg6IFByaXZhdGUgaGVhZGVy
LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF9n
ZXRfd2ViX3BsdWdpbl9kYXRhYmFzZSk6IHJldHVybnMgdGhlIFdlYktpdFdlYlBsdWdpbkRhdGFi
YXNlIGZvciB0aGlzIHNlc3Npb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDog
YWRkIG1ldGhvZCB0byBoZWFkZXIuCisKIDIwMTAtMTItMDkgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bSBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggN2FhODA4My4uOTI1N2YyNSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCkBAIC0xMjcsNiArMTI3LDggQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAog
CSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaCBcCiAJJChz
cmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBcCisJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oIFwKKwkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2UuaCBcCiAJJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCkBAIC0xOTUsNiArMTk3LDEw
IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9s
b2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
cmVzb3VyY2UuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAg
XAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAgXAorCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbnByaXZhdGUuaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJw
bHVnaW5kYXRhYmFzZXByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJp
dHlvcmlnaW4uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwKQEAgLTM5MSw2ICszOTcs
NyBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYnNldHRpbmdz
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIFwKIAlQcm9ncmFtcy91bml0
dGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0d2VicGx1
Z2luZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0d2VidmlldyBcCiAJUHJvZ3Jh
bXMvdW5pdHRlc3RzL3Rlc3RrZXlldmVudHMgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0Y29w
eWFuZHBhc3RlCkBAIC00NDYsNiArNDUzLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0d2Vi
ZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3Rz
X3Rlc3R3ZWJmcmFtZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3R3ZWJmcmFtZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKIAor
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYworUHJvZ3JhbXNfdW5pdHRlc3RzX3Rl
c3R3ZWJwbHVnaW5kYXRhYmFzZV9DRkxBR1MgPSAtRFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwg
cHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgJCh3ZWJraXRf
dGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3R3ZWJw
bHVnaW5kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFdlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdHdl
YmJhY2tmb3J3YXJkbGlzdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFt
c191bml0dGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJh
c2UuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlMDk0MQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMiwgMTQsIDApCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IHB1YmxpYywgc28gd2Ug
bmVlZCBhbiBleHRlcm4gZGVjbGFyYXRpb24gKi8KK2V4dGVybiB2b2lkIHdlYmtpdF93ZWJfc2V0
dGluZ3NfYWRkX2V4dHJhX3BsdWdpbl9kaXJlY3RvcnkoV2ViS2l0V2ViVmlldyogdmlldywgY29u
c3QgZ2NoYXIqIGRpcmVjdG9yeSk7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9wbHVn
aW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBXZWJLaXRXZWJQbHVn
aW5EYXRhYmFzZSogZGF0YWJhc2U7CisgICAgR1NMaXN0KiBwbHVnaW5MaXN0LCAqcDsKKyAgICBn
Ym9vbGVhbiBmb3VuZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0
cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKKworICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93
ZWJfcGx1Z2luX2RhdGFiYXNlKCk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2lu
X2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5MaXN0
OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChX
ZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7CisgICAgICAgIGlmIChnX3N0cmNtcDAod2Via2l0X3dl
Yl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpID09IDAgJiYK
KyAgICAgICAgICAgIGdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24o
cGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZSBwbHVnLWluIHRoYXQgaGFuZGxlcyB0ZXN0IGNvbnRl
bnQgZm9yIFdlYktpdCIpID09IDApCisgICAgICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgfQor
ICAgIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3BsdWdpbnNfbGlzdF9mcmVlKHBsdWdpbkxp
c3QpOworICAgIGdfYXNzZXJ0KGZvdW5kKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwor
fQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ190aHJlYWRfaW5p
dChOVUxMKTsKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJwbHVnaW5kYXRhYmFzZS9nZXRwbHVnaW5zIiwgdGVzdF93ZWJr
aXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyk7CisgICAgcmV0dXJuIGdfdGVzdF9y
dW4gKCk7Cit9CisKKyNlbHNlCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgZ19jcml0aWNhbCgiWW91IHdpbGwgbmVlZCBhdCBsZWFzdCBnbGliLTIuMTYuMCBhbmQgZ3Rr
LTIuMTQuMCB0byBydW4gdGhlIHVuaXQgdGVzdHMuIERvaW5nIG5vdGhpbmcgbm93LiIpOworICAg
IHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXggMjQyOGY2Mi4uYzBkMGUz
MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0LmgKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3Qu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2VicGx1Z2luLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBsdWdp
bmRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2VicmVzb3VyY2UuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApp
bmRleCAzOTljYjRjLi5iMGI2MDdiIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC05
NSw2ICs5NSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNp
c2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaQogdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXM7CiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSAg
ICAgICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
UGx1Z2luRGF0YWJhc2VDbGFzcyAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlQ2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW4gICAgICBXZWJLaXRXZWJQbHVnaW47Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luQ2xhc3MgV2ViS2l0V2ViUGx1Z2luQ2xhc3M7CisK
IEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2VicGx1Z2luLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNmE2MAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAgLTAsMCArMSwx
NjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Vi
a2l0d2VicGx1Z2luLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAi
d2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnBsdWdpbnByaXZhdGUuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViUGx1Z2lu
LCB3ZWJraXRfd2ViX3BsdWdpbiwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgZnJlZU1J
TUVUeXBlKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWlt
ZVR5cGUtPm5hbWUpCisgICAgICAgIGdfZnJlZShtaW1lVHlwZS0+bmFtZSk7CisgICAgaWYgKG1p
bWVUeXBlLT5kZXNjcmlwdGlvbikKKyAgICAgICAgZ19mcmVlKG1pbWVUeXBlLT5kZXNjcmlwdGlv
bik7CisgICAgaWYgKG1pbWVUeXBlLT5leHRlbnNpb25zKQorICAgICAgICBnX3N0cmZyZWV2KG1p
bWVUeXBlLT5leHRlbnNpb25zKTsKKyAgICBnX3NsaWNlX2ZyZWUoV2ViS2l0V2ViUGx1Z2luTUlN
RVR5cGUsIG1pbWVUeXBlKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3BsdWdpbl9taW1lX3R5cGVf
bGlzdF9mcmVlKEdTTGlzdCogbGlzdCkKK3sKKyAgICBmb3IgKEdTTGlzdCogcCA9IGxpc3Q7IHA7
IHAgPSBwLT5uZXh0KQorICAgICAgICBmcmVlTUlNRVR5cGUoKFdlYktpdFdlYlBsdWdpbk1JTUVU
eXBlKilwLT5kYXRhKTsKKyAgICBnX3NsaXN0X2ZyZWUobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfcGx1Z2luX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRXZWJQbHVnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9QTFVHSU4ob2JqZWN0KS0+cHJp
djsKKworICAgIGlmIChwcml2LT5taW1lVHlwZXMpCisgICAgICAgIHdlYmtpdF93ZWJfcGx1Z2lu
X21pbWVfdHlwZV9saXN0X2ZyZWUocHJpdi0+bWltZVR5cGVzKTsKKworICAgIGRlbGV0ZSBXRUJL
SVRfV0VCX1BMVUdJTihvYmplY3QpLT5wcml2OworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3dlYl9wbHVnaW5fcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3BsdWdpbl9jbGFzc19pbml0KFdlYktpdFdlYlBsdWdpbkNsYXNzKiBr
bGFzcykKK3sKKyAgICB3ZWJraXRfaW5pdCgpOworCisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSByZWludGVycHJldF9jYXN0PEdPYmplY3RDbGFzcyo+KGtsYXNzKTsKKworICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX3BsdWdpbl9maW5hbGl6ZTsKKworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFdlYlBsdWdpblBy
aXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9wbHVnaW5faW5pdChXZWJLaXRX
ZWJQbHVnaW4gKnBsdWdpbikKK3sKKyAgICBXZWJLaXRXZWJQbHVnaW5Qcml2YXRlKiBwcml2ID0g
V0VCS0lUX1dFQl9QTFVHSU5fR0VUX1BSSVZBVEUocGx1Z2luKTsKKyAgICBwbHVnaW4tPnByaXYg
PSBwcml2ID0gbmV3IFdlYktpdFdlYlBsdWdpblByaXZhdGUoKTsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRXZWJQbHVnaW4qIGtpdE5ldyhXZWJDb3JlOjpQbHVnaW5QYWNrYWdlKiBw
YWNrYWdlKQoreworICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gV0VCS0lUX1dFQl9QTFVH
SU4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9QTFVHSU4sIDApKTsKKworICAgIHBsdWdp
bi0+cHJpdi0+Y29yZVBsdWdpbiA9IHBhY2thZ2U7CisKKyAgICByZXR1cm4gcGx1Z2luOworfQor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lOgorICogQHBsdWdpbjogYSAj
V2ViS2l0V2ViUGx1Z2luCisgKgorICogUmV0dXJuczogdGhlIG5hbWUgc3RyaW5nIGZvciBAcGx1
Z2luLgorICoKKyAqIFNpbmNlOiAxLjMuOAorICovCitjb25zdCBjaGFyKiB3ZWJraXRfd2ViX3Bs
dWdpbl9nZXRfbmFtZShXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1BMVUdJTihwbHVnaW4pLCAwKTsKKworICAgIFdlYktp
dFdlYlBsdWdpblByaXZhdGUqIHByaXYgPSBwbHVnaW4tPnByaXY7CisKKyAgICBpZiAoIXByaXYt
Pm5hbWUubGVuZ3RoKCkpCisgICAgICAgIHByaXYtPm5hbWUgPSBwcml2LT5jb3JlUGx1Z2luLT5u
YW1lKCkudXRmOCgpOworCisgICAgcmV0dXJuIHByaXYtPm5hbWUuZGF0YSgpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbjoKKyAqIEBwbHVnaW46IGEgI1dl
YktpdFdlYlBsdWdpbgorICoKKyAqIFJldHVybnM6IHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9y
IEBwbHVnaW4uCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF93
ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1BMVUdJTihwbHVnaW4pLCAwKTsK
KworICAgIFdlYktpdFdlYlBsdWdpblByaXZhdGUqIHByaXYgPSBwbHVnaW4tPnByaXY7CisKKyAg
ICBpZiAoIXByaXYtPmRlc2NyaXB0aW9uLmxlbmd0aCgpKQorICAgICAgICBwcml2LT5kZXNjcmlw
dGlvbiA9IHByaXYtPmNvcmVQbHVnaW4tPmRlc2NyaXB0aW9uKCkudXRmOCgpOworCisgICAgcmV0
dXJuIHByaXYtPmRlc2NyaXB0aW9uLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Bs
dWdpbl9nZXRfbWltZXR5cGVzOgorICogQHBsdWdpbjogYSAjV2ViS2l0V2ViUGx1Z2luCisgKgor
ICogUmV0dXJucyBhbGwgdGhlICNXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSB0aGF0IEBwbHVnaW4g
aXMgaGFuZGxpbmcKKyAqIGF0IHRoZSBtb21lbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGNvbnRhaW5lcikgKGVsZW1lbnQtdHlwZSBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSk6IGEgI0dT
TGlzdCBvZiAjV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUKKyAqCisgKiBTaW5jZTogMS4zLjgKKyAq
LworR1NMaXN0KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKFdlYktpdFdlYlBsdWdp
biogcGx1Z2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUExV
R0lOKHBsdWdpbiksIDApOworCisgICAgV2ViS2l0V2ViUGx1Z2luUHJpdmF0ZSogcHJpdiA9IHBs
dWdpbi0+cHJpdjsKKworICAgIGlmIChwcml2LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiBw
cml2LT5taW1lVHlwZXM7CisKKyAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVU
b0Rlc2NyaXB0aW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpOwor
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVz
Y3JpcHRpb25zLmVuZCgpOworCisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUgPSBnX3NsaWNl
X25ldzAoV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUpOworICAgICAgICBtaW1lVHlwZS0+bmFtZSA9
IGdfc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPmRl
c2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcHJpdi0+Y29yZVBsdWdpbi0+bWltZVRvRXh0
ZW5zaW9ucygpLmdldChpdC0+Zmlyc3QpOworICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9
IHN0YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9jMChleHRlbnNpb25zLnNpemUoKSArIDEpKTsK
KyAgICAgICAgdW5zaWduZWQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dGVuc2lvbnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdfc3Ry
ZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgcHJpdi0+bWltZVR5
cGVzID0gZ19zbGlzdF9hcHBlbmQocHJpdi0+bWltZVR5cGVzLCBtaW1lVHlwZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHByaXYtPm1pbWVUeXBlczsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1
Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwN2Q3MAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5oCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIHdlYmtpdHdlYnBsdWdpbl9oCisjZGVm
aW5lIHdlYmtpdHdlYnBsdWdpbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX1dFQl9QTFVHSU4gICAgICAgICAgICAod2Via2l0X3dlYl9wbHVnaW5fZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9QTFVHSU4ob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1BMVUdJTiwgV2Vi
S2l0V2ViUGx1Z2luKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9QTFVHSU5fQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lO
LCBXZWJLaXRXZWJQbHVnaW5DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfUExVR0lOKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBF
X1dFQl9QTFVHSU4pKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1BMVUdJTl9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQl9QTFVHSU4p
KQorI2RlZmluZSBXRUJLSVRfV0VCX1BMVUdJTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9QTFVHSU4sIFdlYktpdFdlYlBs
dWdpbkNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpblByaXZhdGUgV2Vi
S2l0V2ViUGx1Z2luUHJpdmF0ZTsKKworLyoqCisgKiBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZToK
KyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgTUlNRSB0eXBlLgorICogQGRlc2NyaXB0aW9uOiB0
aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1JTUUgdHlwZS4KKyAqIEBleHRlbnNpb25zOiB0aGUgZXh0
ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBNSU1FIHR5cGUuCisgKgorICogQSBzdHJ1Y3R1
cmUgcmVwcmVzZW50aW5nIG9uZSBvZiB0aGUgTUlNRSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggYQor
ICogcGx1Z2luLiBBICNHU0xpc3Qgb2YgdGhlc2Ugb2JqZWN0cyB3aWxsIGJlIHJldHVybmVkIGJ5
CisgKiAjd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcywgdXNlCisgKiAjd2Via2l0X3dl
Yl9wbHVnaW5fbWltZV90eXBlX2xpc3RfZnJlZSB0byBmcmVlIGl0LgorICoKKyAqIFNpbmNlOiAx
LjMuOAorICovCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUgeworICAg
IGNoYXIqIG5hbWU7CisgICAgY2hhciogZGVzY3JpcHRpb247CisgICAgY2hhcioqIGV4dGVuc2lv
bnM7Cit9IFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF93ZWJfcGx1Z2luX21pbWVfdHlwZV9saXN0X2ZyZWUgKEdTTGlzdCopOworCitzdHJ1Y3QgX1dl
YktpdFdlYlBsdWdpbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbiB7CisgICAgR09iamVjdCBwYXJlbnRJbnN0YW5jZTsK
KworICAgIFdlYktpdFdlYlBsdWdpblByaXZhdGUqIHByaXY7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfd2ViX3BsdWdpbl9nZXRfdHlwZSAgICAgICAgKHZvaWQpIEdfR05VQ19DT05T
VDsKKworV0VCS0lUX0FQSSBjb25zdCBjaGFyKgord2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUg
ICAgICAgIChXZWJLaXRXZWJQbHVnaW4qKTsKKworV0VCS0lUX0FQSSBjb25zdCBjaGFyKgord2Vi
a2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uIChXZWJLaXRXZWJQbHVnaW4qKTsKKworV0VC
S0lUX0FQSSBHU0xpc3QqCit3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzICAgKFdlYktp
dFdlYlBsdWdpbiopOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlLmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41ODRhZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2VicGx1Z2luZGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnBsdWdpbmRhdGFi
YXNlLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIndlYmtpdHBy
aXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXR3ZWJwbHVnaW5wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJQ
bHVnaW5EYXRhYmFzZSwgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1Qp
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFi
YXNlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZUNsYXNzKiBrbGFzcykKK3sKKyAgICB3ZWJraXRfaW5pdCgpOworCisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSByZWludGVycHJldF9jYXN0PEdPYmplY3RDbGFzcyo+KGtsYXNzKTsK
KworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNl
X2Rpc3Bvc2U7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihX
ZWJLaXRXZWJQbHVnaW5EYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9wbHVnaW5fZGF0YWJhc2VfaW5pdChXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSogZGF0YWJh
c2UpCit7CisgICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1dFQl9QTFVHSU5fREFUQUJBU0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UpOworICAgIGRhdGFiYXNl
LT5wcml2ID0gcHJpdjsKKworICAgIHByaXYtPmNvcmVEYXRhYmFzZSA9IFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9wbHVnaW5fZGF0
YWJhc2VfbGlzdF9mcmVlOgorICogQGxpc3Q6IGEgI1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlUGx1
Z2luTGlzdAorICoKKyAqIEZyZWVzIEBsaXN0LgorICoKKyAqIFNpbmNlOiAxLjMuOAorICovCit2
b2lkIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3BsdWdpbnNfbGlzdF9mcmVlKEdTTGlzdCog
bGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKGxpc3QpOworCisgICAgZm9yIChHU0xpc3Qq
IHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocC0+ZGF0
YSk7CisKKyAgICBnX3NsaXN0X2ZyZWUobGlzdCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9w
bHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnM6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdFdlYlBs
dWdpbkRhdGFiYXNlCisgKgorICogUmV0dXJucyBhbGwgI1dlYktpdFdlYlBsdWdpbiBhdmFpbGFi
bGUgaW4gQGRhdGFiYXNlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVu
dC10eXBlIFdlYktpdFdlYlBsdWdpbik6IGEgI0dTTGlzdCBvZiAjV2ViS2l0V2ViUGx1Z2luCisg
KgorICogU2luY2U6IDEuMy44CisgKi8KK0dTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJh
c2VfZ2V0X3BsdWdpbnMoV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUExVR0lOX0RBVEFCQVNFKGRhdGFi
YXNlKSwgMCk7CisKKyAgICBHU0xpc3QqIGdQbHVnaW5zID0gMDsKKyAgICBjb25zdCBWZWN0b3I8
UGx1Z2luUGFja2FnZSo+JiBwbHVnaW5zID0gZGF0YWJhc2UtPnByaXYtPmNvcmVEYXRhYmFzZS0+
cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbnNbaV07
CisgICAgICAgIGdQbHVnaW5zID0gZ19zbGlzdF9hcHBlbmQoZ1BsdWdpbnMsIGtpdE5ldyhwbHVn
aW4pKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ1BsdWdpbnM7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbl9mb3JfbWltZXR5cGU6CisgKiBAZGF0YWJh
c2U6IGEgI1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlCisgKiBAbWltZVR5cGU6IGEgbWltZSB0eXBl
CisgKgorICogUmV0dXJucyB0aGUgI1dlYktpdFdlYlBsdWdpbiB0aGF0IGlzIGhhbmRsaW5nIEBt
aW1lVHlwZSBpbiB0aGUKKyAqIEBkYXRhYmFzZSwgb3IgJU5VTEwgaWYgdGhlcmUncyBub25lIGRv
aW5nIHNvLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjV2ViS2l0V2ViUGx1
Z2luCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK1dlYktpdFdlYlBsdWdpbiogd2Via2l0X3dl
Yl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbl9mb3JfbWltZXR5cGUoV2ViS2l0V2ViUGx1Z2lu
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1BMVUdJTl9EQVRBQkFTRShkYXRhYmFzZSksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG1pbWVUeXBlLCAwKTsKKworICAgIHJldHVybiBr
aXROZXcoZGF0YWJhc2UtPnByaXYtPmNvcmVEYXRhYmFzZS0+cGx1Z2luRm9yTUlNRVR5cGUobWlt
ZVR5cGUpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9yZWZyZXNo
OgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZQorICoKKyAqIFJlZnJl
c2hlcyBAZGF0YWJhc2UgYWRkaW5nIG5ldyBwbHVnaW5zIHRoYXQgYXJlIG5vdyBpbiB1c2UgYW5k
CisgKiByZW1vdmluZyB0aG9zZSB0aGF0IGhhdmUgYmVlbiBkaXNhYmxlZCBvciBhcmUgb3RoZXJ3
aXNlIG5vIGxvbmdlcgorICogYXZhaWxhYmxlLgorICoKKyAqIFNpbmNlOiAxLjMuOAorICovCit2
b2lkIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3JlZnJlc2goV2ViS2l0V2ViUGx1Z2luRGF0
YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9Q
TFVHSU5fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIGRhdGFiYXNlLT5wcml2LT5jb3JlRGF0
YWJhc2UtPnJlZnJlc2goKTsKK30KKworV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIHdlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX25ldyh2b2lkKQoreworICAgIHJldHVybiBXRUJLSVRfV0VCX1BM
VUdJTl9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1BMVUdJTl9EQVRBQkFT
RSwgMCkpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2lu
ZGF0YWJhc2UuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwMmMyNgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbmRhdGFiYXNlLmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgd2Via2l0d2VicGx1Z2luZGF0YWJh
c2VfaAorI2RlZmluZSB3ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9QTFVHSU5fREFUQUJBU0UgICAgICAg
ICAgICAod2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9QTFVHSU5fREFUQUJBU0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1BMVUdJTl9EQVRBQkFTRSwgV2ViS2l0
V2ViUGx1Z2luRGF0YWJhc2UpKQorI2RlZmluZSBXRUJLSVRfV0VCX1BMVUdJTl9EQVRBQkFTRV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9U
WVBFX1dFQl9QTFVHSU5fREFUQUJBU0UsIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX1BMVUdJTl9EQVRBQkFTRShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lOX0RBVEFC
QVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9QTFVHSU5fREFUQUJBU0VfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lO
X0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9QTFVHSU5fREFUQUJBU0VfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9XRUJf
UExVR0lOX0RBVEFCQVNFLCBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZUNsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRXZWJQbHVnaW5E
YXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VDbGFzcyB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudENsYXNzOworfTsKKworc3RydWN0IF9XZWJLaXRXZWJQ
bHVnaW5EYXRhYmFzZSB7CisgICAgR09iamVjdCBwYXJlbnRJbnN0YW5jZTsKKworICAgIFdlYktp
dFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZSogcHJpdjsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF90eXBlICAgICAgICAgICAgICAgICh2b2lk
KSBHX0dOVUNfQ09OU1Q7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9wbHVnaW5fZGF0
YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUgICAgICAgKEdTTGlzdCopOworCitXRUJLSVRfQVBJIEdT
TGlzdCoKK3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zICAgICAgICAgICAg
IChXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSopOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlBsdWdp
bioKK3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5fZm9yX21pbWV0eXBlIChX
ZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSosIGNvbnN0IGNoYXIgKik7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaCAgICAgICAgICAgICAgICAgKFdl
YktpdFdlYlBsdWdpbkRhdGFiYXNlKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmgg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdhMWE0Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmgKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIHdlYmtpdHdlYnBsdWdpbmRhdGFiYXNlcHJpdmF0ZV9oCisjZGVmaW5lIHdlYmtpdHdlYnBs
dWdpbmRhdGFiYXNlcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQbHVnaW5EYXRhYmFzZTsKK30KKworZXh0ZXJuICJDIiB7
CisKKyNkZWZpbmUgV0VCS0lUX1dFQl9QTFVHSU5fREFUQUJBU0VfR0VUX1BSSVZBVEUob2JqKSAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfUExVR0lO
X0RBVEFCQVNFLCBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZVByaXZhdGUpKQordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZVByaXZhdGU7CitzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbkRhdGFiYXNlUHJpdmF0ZSB7CisgICAg
V2ViQ29yZTo6UGx1Z2luRGF0YWJhc2UqIGNvcmVEYXRhYmFzZTsKK307CisKK1dlYktpdFdlYlBs
dWdpbkRhdGFiYXNlKiB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9uZXcodm9pZCk7CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5w
cml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW5wcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYjQ2OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbnByaXZhdGUuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiB3ZWJraXR3ZWJwbHVnaW5wcml2YXRlX2gK
KyNkZWZpbmUgd2Via2l0d2VicGx1Z2lucHJpdmF0ZV9oCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJw
bHVnaW4uaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBQbHVnaW5QYWNrYWdlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdFdl
YlBsdWdpbioga2l0TmV3KFdlYkNvcmU6OlBsdWdpblBhY2thZ2UqIHBhY2thZ2UpOworfQorCitl
eHRlcm4gIkMiIHsKKworI2RlZmluZSBXRUJLSVRfV0VCX1BMVUdJTl9HRVRfUFJJVkFURShvYmop
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9QTFVH
SU4sIFdlYktpdFdlYlBsdWdpblByaXZhdGUpKQordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlBs
dWdpblByaXZhdGUgV2ViS2l0V2ViUGx1Z2luUHJpdmF0ZTsKK3N0cnVjdCBfV2ViS2l0V2ViUGx1
Z2luUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2U+IGNvcmVQbHVn
aW47CisgICAgQ1N0cmluZyBuYW1lOworICAgIENTdHJpbmcgZGVzY3JpcHRpb247CisgICAgR1NM
aXN0KiBtaW1lVHlwZXM7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcAppbmRleCA1MTQ3MDA0Li42MWRlMDM3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lcHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAjaW5jbHVkZSAid2Via2l0
d2ViaW5zcGVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRl
LmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKICNpbmNsdWRlIDxnZGsvZ2Rr
a2V5c3ltcy5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CkBAIC01MTQ2LDYgKzUxNDcs
MjggQEAgV2ViS2l0Q2FjaGVNb2RlbCB3ZWJraXRfZ2V0X2NhY2hlX21vZGVsKCkKICAgICByZXR1
cm4gY2FjaGVNb2RlbDsKIH0KIAorLyoqCisgKiB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJh
c2U6CisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCAjV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2Ug
d2l0aCBpbmZvcm1hdGlvbiBhYm91dAorICogYWxsIHRoZSBwbHVnaW5zIFdlYktpdCBrbm93cyBh
Ym91dCBpbiB0aGlzIGluc3RhbmNlLgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5v
bmUpOiB0aGUgY3VycmVudCAjV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UKKyAqCisgKiBTaW5jZTog
MS4zLjgKKyAqLworV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIHdlYmtpdF9nZXRfd2ViX3BsdWdp
bl9kYXRhYmFzZSgpCit7CisgICAgc3RhdGljIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRh
YmFzZSA9IDA7CisKKyAgICB3ZWJraXRfaW5pdCgpOworCisgICAgaWYgKCFkYXRhYmFzZSkKKyAg
ICAgICAgZGF0YWJhc2UgPSB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9uZXcoKTsKKworICAg
IHJldHVybiBkYXRhYmFzZTsKK30KKwogR3RrTWVudSogd2Via2l0X3dlYl92aWV3X2dldF9jb250
ZXh0X21lbnUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5oCmluZGV4IDM0YzRkNWUuLjlhYmZlZjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmgKQEAgLTM2NCw2ICszNjQsOSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2Z1bGxfY29udGVudF96
b29tICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcsCiBXRUJLSVRfQVBJ
IFNvdXBTZXNzaW9uKgogd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24gICAgICAgICAgICAgICAg
ICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlICoKK3dl
YmtpdF9nZXRfd2ViX3BsdWdpbl9kYXRhYmFzZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwog
V0VCS0lUX0FQSSBjb25zdCBnY2hhcioKIHdlYmtpdF93ZWJfdmlld19nZXRfZW5jb2RpbmcgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqIHdlYlZpZXcpOwogCi0tIAox
LjcuMi4zCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>