<?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>49649</bug_id>
          
          <creation_ts>2010-11-17 00:13:23 -0800</creation_ts>
          <short_desc>[GTK] On-demand event-listeners for DOM event signals</short_desc>
          <delta_ts>2011-03-18 10:26:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38576</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310150</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-11-17 00:13:23 -0800</bug_when>
    <thetext>GLib signals are currently used to implement events in GObject DOM bindings. Since it&apos;s not possible to know what signals the user is going to connect, an event listener is added in every node for every signal when object is constructed. Xan proposed two possible solutions: modify glib/gobject to add a way to notify the user when a signal is connected/disconnected, or add api to webkit dom bindings so that the user can add event listeners, something like webkit_dom_event_target_add_event_listener (target, listener);
Second option is less GObject-y, so the preferred solution is the first one although it depends on whether a patch for this is accepted in gobject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310151</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-11-17 00:33:39 -0800</bug_when>
    <thetext>See https://bugzilla.gnome.org/show_bug.cgi?id=635054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338692</commentid>
    <comment_count>2</comment_count>
      <attachid>79866</attachid>
    <who name="David Keijser">keijser</who>
    <bug_when>2011-01-23 07:25:31 -0800</bug_when>
    <thetext>Created attachment 79866
replaces use of signals with callbacks

patch replaces use of signals with manual callbacks for DOM events. This allows getting a callback in the capture phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339878</commentid>
    <comment_count>3</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-01-25 13:13:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=79866) [details]
&gt; replaces use of signals with callbacks
&gt; 
&gt; patch replaces use of signals with manual callbacks for DOM events. This allows getting a callback in the capture phase.

Assuming we end up doing this the patch looks largely sane (would need to fix all the style issues, do a proper ChangeLog, etc. See http://webkit.org/coding/contributing.html).

The only debate topic would be whether we want to keep the signal-like names or just expose directly the DOM names. I think both options have their pros and cons :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339889</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-25 13:37:04 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The only debate topic would be whether we want to keep the signal-like names or just expose directly the DOM names. I think both options have their pros and cons :)

I support a patch like this. Perhaps it could exist in tandem with the signal approach once GLib has the proper infrastructure.

In my opinion, the principle of least surprise suggests that whatever_add_event_listener should accept the same event name you pass to whateverInstance.addEventListener.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340929</commentid>
    <comment_count>5</comment_count>
      <attachid>80347</attachid>
    <who name="David Keijser">keijser</who>
    <bug_when>2011-01-27 10:40:49 -0800</bug_when>
    <thetext>Created attachment 80347
now with code in the proper style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340943</commentid>
    <comment_count>6</comment_count>
      <attachid>80347</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-27 10:58:27 -0800</bug_when>
    <thetext>Comment on attachment 80347
now with code in the proper style

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

This seems good to me, but I think we still need to decide what approach we&apos;re taking to the API. I&apos;m in favor of having both signals and *_add_event_listener. The signal names will be GLib-style and the *_add_event_listeners taking DOM-style event names. Signals could be added when GLib has proper support for detecting when handlers are attached.

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:74
&gt; +    (*(void (*)(GObject*, WebKitDOMEvent*, void*))m_handler)(m_object, gobjectEvent, m_userData);

If possible this should be a static_cast or reinterpret_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367176</commentid>
    <comment_count>7</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-03-14 13:27:16 -0700</bug_when>
    <thetext>OK, I think we should start thinking about merging this.

One idea after going through the patch again: we should add a GObject interface that defines what classes can receive events, and add the add/remove listener methods there. That way we can get rid of duplicated functions for Node/DOMWindow and have a cleaner API. Makes sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367182</commentid>
    <comment_count>8</comment_count>
      <attachid>80347</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-14 13:33:50 -0700</bug_when>
    <thetext>Comment on attachment 80347
now with code in the proper style

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1088
&gt; +WEBKIT_API gboolean
&gt; +${lowerCaseIfaceName}_add_event_listener(${className}* self, const char* eventName, GCallback handler, gboolean useCapture, gpointer user_data);

An interface may mean these will go away, but WebKit-style dictates that there should be no newline after the return type for these methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367189</commentid>
    <comment_count>9</comment_count>
      <attachid>80347</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-14 13:44:00 -0700</bug_when>
    <thetext>Comment on attachment 80347
now with code in the proper style

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1088
&gt;&gt; +${lowerCaseIfaceName}_add_event_listener(${className}* self, const char* eventName, GCallback handler, gboolean useCapture, gpointer user_data);
&gt; 
&gt; An interface may mean these will go away, but WebKit-style dictates that there should be no newline after the return type for these methods.

Sorry. Let me clarify. This particular line is okay. Our style guidelines are kind of wonky. For header files we use the style you are using here. Below, for the implementation files, we do not add the newline and use WebKit style everywhere. The GObject binding code has the wrong style many places, but we are trying to fix it as we go along.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1100
&gt; +WEBKIT_API gboolean
&gt; +${lowerCaseIfaceName}_add_event_listener(${className}* self, const char* eventName, GCallback handler, gboolean useCapture, gpointer user_data)
&gt; +{
&gt; +    ${coreSelf}
&gt; +    return WebCore::GObjectEventListener::addEventListener(G_OBJECT (self), coreSelf, eventName, handler, useCapture, user_data);
&gt; +}

So for instance here, you would not use the newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369686</commentid>
    <comment_count>10</comment_count>
      <attachid>86173</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-03-18 09:57:15 -0700</bug_when>
    <thetext>Created attachment 86173
eventlistener.diff

Proposed patch. There will be some style warnings in the event target header, as usual...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369689</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-18 10:00:27 -0700</bug_when>
    <thetext>Attachment 86173 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:80:  webkit_dom_event_target_add_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:95:  webkit_dom_event_target_remove_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testdomdomwindow.c&quot;
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Extra space between GCallback and handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:47:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:48:  Extra space between gpointer and userData  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:51:  Extra space between GCallback and handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:52:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64:  Extra space between GCallback and handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:65:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:62:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:66:  Extra space between gpointer and userData  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:70:  Extra space between GCallback and handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:68:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:71:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Total errors found: 14 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369695</commentid>
    <comment_count>12</comment_count>
      <attachid>86173</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-18 10:10:42 -0700</bug_when>
    <thetext>Comment on attachment 86173
eventlistener.diff

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

Nice!

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:87
&gt; +    WebKitDOMEventTargetIface* iface;
&gt; +
&gt; +    g_return_val_if_fail(WEBKIT_DOM_IS_EVENT_TARGET(target), FALSE);
&gt; +    g_return_val_if_fail(eventName, FALSE);
&gt; +
&gt; +    iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);

You&apos;d save a few lines by moving the the declaration of iface to where you first use it.

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:102
&gt; +    WebKitDOMEventTargetIface* iface;
&gt; +
&gt; +    g_return_val_if_fail(WEBKIT_DOM_IS_EVENT_TARGET(target), FALSE);
&gt; +    g_return_val_if_fail(eventName, FALSE);
&gt; +
&gt; +    iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);

Ditto.

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:52
&gt; +
&gt; +    gboolean      (* add_event_listener)(WebKitDOMEventTarget* target,
&gt; +                                         const char          * eventName,
&gt; +                                         GCallback             handler,
&gt; +                                         gboolean              bubble,
&gt; +                                         gpointer              userData);
&gt; +    gboolean      (* remove_event_listener)(WebKitDOMEventTarget* target,
&gt; +                                            const char          * eventName,
&gt; +                                            GCallback             handler,
&gt; +                                            gboolean              bubble);

The asterisk placement seems inconsistent here.

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:72
&gt; +WEBKIT_API gboolean  webkit_dom_event_target_add_event_listener(WebKitDOMEventTarget *target,
&gt; +                                                                const char           *eventName,
&gt; +                                                                GCallback             handler,
&gt; +                                                                gboolean              bubble,
&gt; +                                                                gpointer              userData);
&gt; +
&gt; +WEBKIT_API gboolean  webkit_dom_event_target_remove_event_listener(WebKitDOMEventTarget *target,
&gt; +                                                                   const char           *eventName,
&gt; +                                                                   GCallback             handler,
&gt; +                                                                   gboolean              bubble);
&gt; +

And here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369705</commentid>
    <comment_count>13</comment_count>
      <attachid>86173</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-03-18 10:26:17 -0700</bug_when>
    <thetext>Comment on attachment 86173
eventlistener.diff

Committed as r81486 with those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369706</commentid>
    <comment_count>14</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-03-18 10:26:38 -0700</bug_when>
    <thetext>Closing. Thanks David for the patch!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79866</attachid>
            <date>2011-01-23 07:25:31 -0800</date>
            <delta_ts>2011-01-27 10:40:49 -0800</delta_ts>
            <desc>replaces use of signals with callbacks</desc>
            <filename>0001-Replace-signals-on-DOM-with-manual-callbacks.patch</filename>
            <type>text/plain</type>
            <size>14467</size>
            <attacher name="David Keijser">keijser</attacher>
            
              <data encoding="base64">RnJvbSAwYjJiZGE4NmY0ZDc4NThiYjdhZGU4YjEzNTJmMTAzODFiMWQwOWNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBrZWlzIDxrZWlqc2VyQGdtYWlsLmNvbT4KRGF0ZTogU3VuLCAy
MyBKYW4gMjAxMSAxNDo1MTo1NiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFJlcGxhY2Ugc2lnbmFs
cyBvbiBET00gd2l0aCBtYW51YWwgY2FsbGJhY2tzCgotLS0KIC4uLi9iaW5kaW5ncy9nb2JqZWN0
L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcCAgICAgIHwgICAxNSArKy0KIC4uLi9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmggICAgICAgIHwgICAzMSArKysrLS0KIC4uLi9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtICAgICAgIHwgIDEzMiArKysr
Ky0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRv
dy5jICAgICAgICAgfCAgICA2ICstCiA0IGZpbGVzIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyks
IDExNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDI3NDMyYjkuLmU2NGMxM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50
TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVj
dEV2ZW50TGlzdGVuZXIuY3BwCkBAIC0yOSwxMyArMjksMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1HT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVj
dCogb2JqZWN0LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgY2hhciogZG9t
RXZlbnROYW1lLCBjb25zdCBjaGFyKiBzaWduYWxOYW1lKQorR09iamVjdEV2ZW50TGlzdGVuZXI6
OkdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93KiB3aW5kb3cs
IE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIs
IGJvb2wgY2FwdHVyZSwgdm9pZCogdXNlcl9kYXRhKQogICAgIDogRXZlbnRMaXN0ZW5lcihHT2Jq
ZWN0RXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgLCBtX29iamVjdChvYmplY3QpCiAgICAgLCBtX2Nv
cmVOb2RlKG5vZGUpCiAgICAgLCBtX2NvcmVXaW5kb3cod2luZG93KQogICAgICwgbV9kb21FdmVu
dE5hbWUoZG9tRXZlbnROYW1lKQotICAgICwgbV9zaWduYWxOYW1lKHNpZ25hbE5hbWUpCisgICAg
LCBtX2hhbmRsZXIoaGFuZGxlcikKKyAgICAsIG1fY2FwdHVyZShjYXB0dXJlKQorICAgICwgbV91
c2VyX2RhdGEodXNlcl9kYXRhKQogewogICAgIEFTU0VSVCghbV9jb3JlV2luZG93IHx8ICFtX2Nv
cmVOb2RlKTsKIApAQCAtNTcsMjcgKzU5LDI2IEBAIHZvaWQgR09iamVjdEV2ZW50TGlzdGVuZXI6
OmdvYmplY3REZXN0cm95ZWQoKQogICAgIC8vIGRlc3RydWN0b3IgYXMgYSBzaWRlIGVmZmVjdCBh
bmQgd2UgbXVzdCBiZSBpbiB0aGUgcHJvcGVyIHN0YXRlIHRvIHByZXZlbnQgZ19vYmplY3Rfd2Vh
a191bnJlZi4KICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBtX2NvcmVXaW5kb3cpIHsKICAg
ICAgICAgbV9jb3JlV2luZG93ID0gMDsKLSAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3Rl
bmVyKG1fZG9tRXZlbnROYW1lLmRhdGEoKSwgdGhpcywgZmFsc2UpOworICAgICAgICB3aW5kb3ct
PnJlbW92ZUV2ZW50TGlzdGVuZXIobV9kb21FdmVudE5hbWUuZGF0YSgpLCB0aGlzLCBtX2NhcHR1
cmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9IG1fY29yZU5v
ZGU7CiAgICAgbV9jb3JlTm9kZSA9IDA7IC8vIFNlZSBhYm92ZS4KLSAgICBub2RlLT5yZW1vdmVF
dmVudExpc3RlbmVyKG1fZG9tRXZlbnROYW1lLmRhdGEoKSwgdGhpcywgZmFsc2UpOworICAgIG5v
ZGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIobV9kb21FdmVudE5hbWUuZGF0YSgpLCB0aGlzLCBtX2Nh
cHR1cmUpOwogfQogCiB2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQogewotICAgIGdib29sZWFuIGhhbmRs
ZWQgPSBGQUxTRTsKICAgICBXZWJLaXRET01FdmVudCogZ29iamVjdEV2ZW50ID0gV0VCS0lUX0RP
TV9FVkVOVChXZWJLaXQ6OmtpdChldmVudCkpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X29iamVjdCwgbV9zaWduYWxOYW1lLmRhdGEoKSwgZ29iamVjdEV2ZW50LCAmaGFuZGxlZCk7Cisg
ICAgKCoodm9pZCAoKikoR09iamVjdCosIFdlYktpdERPTUV2ZW50Kix2b2lkKikpbV9oYW5kbGVy
KShtX29iamVjdCwgZ29iamVjdEV2ZW50LCBtX3VzZXJfZGF0YSk7CiAgICAgZ19vYmplY3RfdW5y
ZWYoZ29iamVjdEV2ZW50KTsKIH0KIAogYm9vbCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6b3BlcmF0
b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKICAgICBpZiAoY29uc3QgR09i
amVjdEV2ZW50TGlzdGVuZXIqIGdvYmplY3RFdmVudExpc3RlbmVyID0gR09iamVjdEV2ZW50TGlz
dGVuZXI6OmNhc3QoJmxpc3RlbmVyKSkKLSAgICAgICAgcmV0dXJuIG1fc2lnbmFsTmFtZSA9PSBn
b2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9zaWduYWxOYW1lICYmIG1fb2JqZWN0ID09IGdvYmplY3RF
dmVudExpc3RlbmVyLT5tX29iamVjdDsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IGdvYmpl
Y3RFdmVudExpc3RlbmVyLT5tX29iamVjdCAmJiBtX2hhbmRsZXIgPT0gZ29iamVjdEV2ZW50TGlz
dGVuZXItPm1faGFuZGxlcjsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAppbmRl
eCBlZjE2MzdhLi40MDdmMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCkBAIC0yNywyNCArMjcsMzcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HT2JqZWN0IEdP
YmplY3Q7Cit0eXBlZGVmIHZvaWQgKCpHQ2FsbGJhY2spICh2b2lkKTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3Rl
bmVyIHsKIHB1YmxpYzoKIAotICAgIHN0YXRpYyB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoR09iamVj
dCogb2JqZWN0LCBET01XaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBj
b25zdCBjaGFyKiBzaWduYWxOYW1lKQorICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIo
R09iamVjdCogb2JqZWN0LCBET01XaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciogZG9tRXZlbnRO
YW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlLCB2b2lkKiB1c2VyX2RhdGEp
CiAgICAgewotICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFk
b3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIHdpbmRvdywgMCwgZG9tRXZl
bnROYW1lLCBzaWduYWxOYW1lKSkpOwotICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIo
ZG9tRXZlbnROYW1lLCBsaXN0ZW5lci5yZWxlYXNlKCksIGZhbHNlKTsKKyAgICAgICAgUmVmUHRy
PEdPYmplY3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50
TGlzdGVuZXIob2JqZWN0LCB3aW5kb3csIDAsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSwgdXNlcl9kYXRhKSkpOworICAgICAgICByZXR1cm4gd2luZG93LT5hZGRFdmVudExpc3Rl
bmVyKGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgTm9k
ZSogbm9kZSwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBjb25zdCBjaGFyKiBzaWduYWxOYW1l
KQorICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBOb2Rl
KiBub2RlLCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29s
IHVzZUNhcHR1cmUsIHZvaWQqIHVzZXJfZGF0YSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIoYWRvcHRSZWYobmV3IEdPYmplY3RFdmVudExpc3Rl
bmVyKG9iamVjdCwgMCwgbm9kZSwgZG9tRXZlbnROYW1lLCBzaWduYWxOYW1lKSkpOwotICAgICAg
ICBub2RlLT5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIucmVsZWFzZSgp
LCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxHT2JqZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIo
YWRvcHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKG9iamVjdCwgMCwgbm9kZSwgZG9tRXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCB1c2VyX2RhdGEpKSk7CisgICAgICAgIHJldHVy
biBub2RlLT5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIucmVsZWFzZSgp
LCB1c2VDYXB0dXJlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVFdmVudExpc3Rl
bmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIGRvbUV2
ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKKwl7CisJCUdPYmpl
Y3RFdmVudExpc3RlbmVyIGtleShvYmplY3QsIHdpbmRvdywgMCwgZG9tRXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlLCAwKTsKKwkJcmV0dXJuIHdpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUpOworCX0KKworICAgIHN0YXRpYyBib29s
IHJlbW92ZUV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBOb2RlKiBub2RlLCBjb25zdCBj
aGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisJ
eworCQlHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCAwLCBub2RlLCBkb21FdmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUsIDApOworCQlyZXR1cm4gbm9kZS0+cmVtb3ZlRXZlbnRM
aXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUpOworCX0KKwogICAgIHN0YXRp
YyB2b2lkIGdvYmplY3REZXN0cm95ZWRDYWxsYmFjayhHT2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIsIEdPYmplY3QqKQogICAgIHsKICAgICAgICAgbGlzdGVuZXItPmdvYmplY3REZXN0cm95
ZWQoKTsKQEAgLTYwLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKTsKIAogcHJpdmF0ZToKLSAgICBHT2JqZWN0
RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IGNoYXIqIGRv
bUV2ZW50TmFtZSwgY29uc3QgY2hhciogc2lnbmFsTmFtZSk7CisgICAgR09iamVjdEV2ZW50TGlz
dGVuZXIoR09iamVjdCosIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBjaGFyKiBkb21FdmVudE5h
bWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJfZGF0YSk7CiAg
ICAgfkdPYmplY3RFdmVudExpc3RlbmVyKCk7CiAgICAgdm9pZCBnb2JqZWN0RGVzdHJveWVkKCk7
CiAKQEAgLTczLDcgKzg2LDkgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBtX2NvcmVOb2RlOwogICAg
IERPTVdpbmRvdyogbV9jb3JlV2luZG93OwogICAgIENTdHJpbmcgbV9kb21FdmVudE5hbWU7Ci0g
ICAgQ1N0cmluZyBtX3NpZ25hbE5hbWU7CisJR0NhbGxiYWNrIG1faGFuZGxlcjsKKwlib29sIG1f
Y2FwdHVyZTsKKyAgICB2b2lkKiBtX3VzZXJfZGF0YTsKIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckdPYmplY3QucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JHT2JqZWN0LnBtCmluZGV4IGVkNzZkMDguLjMxNjBiMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5w
bQpAQCAtNDU5LDg5ICs0NTksNiBAQCBFT0YKICAgICBwdXNoKEB0eHRJbnN0YWxsUHJvcHMsICIj
ZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKIH0KIAotbXkgJWJyZWFrV29yZHMgPSAoImJlZm9yZSIgPT4gMSwgImNhbiIgPT4gMSwgImNv
bnRleHQiID0+IDEsICJkYmwiID0+IDEsICJkcmFnIiA9PiAxLAotICAgICAgICAgICAgICAgICAg
ImRyYWciID0+IDEsICJkdXJhdGlvbiIgPT4gMSwgImhhcyIgPT4gMSwgImtleSIgPT4gMSwgImxv
YWRlZCIgPT4gMSwKLSAgICAgICAgICAgICAgICAgICJtb3VzZSIgPT4gMSwgInBhZ2UiID0+IDEs
ICJwb3AiID0+IDEsICJyYXRlIiA9PiAxLCAic2VsZWN0IiA9PiAxLAotICAgICAgICAgICAgICAg
ICAgInRpbWUiID0+IDEsICJ0b3VjaCIgPT4gMSwgInZvbHVtZSIgPT4gMSk7Ci0KLXN1YiBTcGxp
dEV2ZW50TGlzdGVuZXJBdHRyTmFtZSB7Ci0gICAgbXkgJGF0dHJOYW1lID0gc2hpZnQ7Ci0KLSAg
ICBteSBAbWF0Y2hlcyA9IGdyZXAgeyAkYXR0ck5hbWUgPX4gL14kXy8gfSBrZXlzICglYnJlYWtX
b3Jkcyk7Ci0KLSAgICBpZiAoQG1hdGNoZXMgJiYgKGxlbmd0aCAkbWF0Y2hlc1swXSA8IGxlbmd0
aCAkYXR0ck5hbWUpKSB7Ci0gICAgICAgICRhdHRyTmFtZSA9ICRtYXRjaGVzWzBdIC4gIi0iIC4g
c3Vic3RyKCRhdHRyTmFtZSwgbGVuZ3RoICRtYXRjaGVzWzBdKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gJGF0dHJOYW1lOwotfQotCi1zdWIgRXZlbnRTaWduYWxOYW1lIHsKLSAgICBteSAkYXR0ck5h
bWUgPSBzaGlmdDsKLSAgICBteSAkbmFtZSA9IFNwbGl0RXZlbnRMaXN0ZW5lckF0dHJOYW1lKCRh
dHRyTmFtZSkgLiAiLWV2ZW50IjsKLQotICAgIHJldHVybiAkbmFtZTsKLX0KLQotc3ViIEdlbmVy
YXRlRXZlbnRMaXN0ZW5lciB7Ci0gICAgbXkgJG5hbWUgPSBzaGlmdDsKLSAgICBteSAkb2JqZWN0
ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKLQotICAgIG15ICRnb2Jq
ZWN0U2lnbmFsTmFtZSA9IEV2ZW50U2lnbmFsTmFtZSgkbmFtZSk7Ci0KLSAgICBteSAkdHh0SW5z
dGFsbFNpZ25hbCA9IDw8ICJFT0YiOwotICAgIGdfc2lnbmFsX25ldygiJHtnb2JqZWN0U2lnbmFs
TmFtZX0iLAotICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnb2JqZWN0Q2xhc3Mp
LAotICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAw
LAotICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCi0gICAg
ICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAotICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9ET01fRVZFTlQgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7Ci0KLUVPRgotICAg
IHB1c2goQHR4dEluc3RhbGxTaWduYWxzLCAkdHh0SW5zdGFsbFNpZ25hbCk7Ci0KLSAgICBteSAk
e2xpc3RlbmVyTmFtZX0gPSAkbmFtZSAuICJMaXN0ZW5lciI7Ci0KLSAgICBteSAkdHh0SW5zdGFs
bEV2ZW50TGlzdGVuZXIgPSA8PCAiRU9GIjsKLSAgICBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihvYmplY3QsIGNvcmVPYmplY3QsICIke25hbWV9IiwgIiR7
Z29iamVjdFNpZ25hbE5hbWV9Iik7Ci1FT0YKLSAgICBwdXNoKEB0eHRJbnN0YWxsRXZlbnRMaXN0
ZW5lcnMsICR0eHRJbnN0YWxsRXZlbnRMaXN0ZW5lcik7Ci0KLSAgICAkaW1wbEluY2x1ZGVzeyJ3
ZWJraXQvV2ViS2l0RE9NRXZlbnQuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJHT2JqZWN0
RXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotfQotCi1teSBAZXZlbnRTaWduYWxOYW1lcyA9ICgKLSAg
ICAjIFVzZXIgSW50ZXJmYWNlIEV2ZW50IHR5cGVzCi0gICAgImZvY3VzIiwgImJsdXIiLAotICAg
ICMgQmFzaWMgRXZlbnQgdHlwZXMKLSAgICAibG9hZCIsICJ1bmxvYWQiLCAiYWJvcnQiLCAiZXJy
b3IiLCAic2VsZWN0IiwgImNoYW5nZSIsICJmb3JtY2hhbmdlIiwgInN1Ym1pdCIsICJyZXNldCIs
Ci0gICAgInJlc2l6ZSIsICJzY3JvbGwiLAotICAgICMgTW91c2UgRXZlbnQgdHlwZXMKLSAgICAi
Y2xpY2siLCAiZGJsY2xpY2siLCAibW91c2Vkb3duIiwgIm1vdXNldXAiLAotICAgICJtb3VzZW1v
dmUiLCAibW91c2VvdmVyIiwgIm1vdXNlb3V0IiwKLSAgICAjIE1vdXNlIFdoZWVsIEV2ZW50IHR5
cGVzCi0gICAgIm1vdXNld2hlZWwiLAotICAgICMgS2V5Ym9hcmQgRXZlbnQgdHlwZXMKLSAgICAi
a2V5ZG93biIsICJrZXlwcmVzcyIsICJrZXl1cCIsCi0gICAgIyAtLSBFdmVudHMgbm90IGluIHRo
ZSBzcGVjIGJ1dCBkZWZpbmVkIGluIFdlYktpdAotICAgICMgTWVkaWEgRXZlbnQgdHlwZXMsCi0g
ICAgImxvYWRzdGFydCIsICJwcm9ncmVzcyIsICJzdXNwZW5kIiwgImVtcHRpZWQiLCAic3RhbGxl
ZCIsICJwbGF5IiwKLSAgICAibG9hZGVkbWV0YWRhdGEiLCAibG9hZGVkZGF0YSIsICJ3YWl0aW5n
IiwgInBsYXlpbmciLCAiY2FucGxheSIsCi0gICAgImNhbnBsYXl0aHJvdWdoIiwgInNlZWtpbmci
LCAic2Vla2VkIiwgInRpbWV1cGRhdGUiLCAiZW5kZWQiLAotICAgICJyYXRlY2hhbmdlIiwgImR1
cmF0aW9uY2hhbmdlIiwgInZvbHVtZWNoYW5nZSIsCi0gICAgIyBEcmFnIGFuZCBEcm9wIEV2ZW50
IHR5cGVzCi0gICAgImRyYWciLCAiZHJhZ2VuZCIsICJkcmFnZW50ZXIiLCAiZHJhZ2xlYXZlIiwg
ImRyYWdvdmVyIiwgImRyYWdzdGFydCIsICJkcm9wIiwKLSAgICAjIEN1dCBhbmQgUGFzdGUgRXZl
bnQgdHlwZXMKLSAgICAiYmVmb3JlY3V0IiwgImN1dCIsICJiZWZvcmVjb3B5IiwgImNvcHkiLCAi
YmVmb3JlcGFzdGUiLCAicGFzdGUiLAotICAgICMgQW5pbWF0aW9ucwotICAgICJ3ZWJraXRhbmlt
YXRpb25lbmQiLCAid2Via2l0YW5pbWF0aW9uc3RhcnQiLCAid2Via2l0YW5pbWF0aW9uaXRlcmF0
aW9uIiwKLSAgICAjIE90aGVyCi0gICAgImNvbnRleHRtZW51IiwgImlucHV0IiwgImZvcm1pbnB1
dCIsICJpbnZhbGlkIiwgInNlYXJjaCIsICJzZWxlY3RzdGFydCIpOwotCiBzdWIgR2VuZXJhdGVQ
cm9wZXJ0aWVzIHsKICAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZU5hbWUsICRkYXRhTm9kZSkg
PSBAXzsKIApAQCAtNjEwLDE1ICs1MjcsNiBAQCBFT0YKICAgICAgICAgfQogICAgIH0KIAotICAg
ICMgV2UgbmVlZCB0byBkZWZpbmUgYWxsIHRoZSBldmVudHMgdGhlcmUgYXJlIGluIGFsbCBiYXNl
IGNsYXNzZXMKLSAgICAjIHRoYXQgaW1wbGVtZW50IEV2ZW50VGFyZ2V0LiBGb3Igbm93IHdlIG9u
bHkgY2FyZSBhYm91dCB0aGVzZQotICAgICMgdHdvLgotICAgIGlmICgkaW50ZXJmYWNlTmFtZSBl
cSAiTm9kZSIgfHwgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgZm9y
ZWFjaCBteSAkc2lnbmFsTmFtZSAoQGV2ZW50U2lnbmFsTmFtZXMpIHsKLSAgICAgICAgICAgIEdl
bmVyYXRlRXZlbnRMaXN0ZW5lcigkc2lnbmFsTmFtZSwgJG9iamVjdCwgJGludGVyZmFjZU5hbWUp
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVzaChAY0JvZHlQcml2LCAifTtcblxuIik7CiAK
ICAgICAkdHh0R2V0UHJvcCA9IDw8ICJFT0YiOwpAQCAtNjY5LDEzICs1NzcsNiBAQCBzdGF0aWMg
dm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
RU9GCiAgICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOwogCi0gICAgaWYgKHNjYWxh
ciBAdHh0SW5zdGFsbEV2ZW50TGlzdGVuZXJzID4gMCkgewotICAgICAgICAkaW1wbENvbnRlbnQg
PSA8PCAiRU9GIjsKLSAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNU
KG9iamVjdCktPmNvcmVPYmplY3QpOwotRU9GCi0gICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENv
bnRlbnQpOwotICAgIH0KLQogICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogQHR4dEluc3Rh
bGxFdmVudExpc3RlbmVycwogICAgIGlmIChHX09CSkVDVF9DTEFTUygke2xvd2VyQ2FzZUlmYWNl
TmFtZX1fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0xMTc3LDYgKzEwNzgsMzkgQEAg
RU9GCiAgICAgJG9iamVjdC0+R2VuZXJhdGVQcm9wZXJ0aWVzKCRpbnRlcmZhY2VOYW1lLCAkZGF0
YU5vZGUpOwogICAgICRvYmplY3QtPkdlbmVyYXRlRnVuY3Rpb25zKCRpbnRlcmZhY2VOYW1lLCAk
ZGF0YU5vZGUpOwogCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOb2RlIiB8fCAkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXQv
V2ViS2l0RE9NRXZlbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siR09iamVjdEV2
ZW50TGlzdGVuZXIuaCJ9ID0gMTsKKyAgICAgICAgbXkgJGRlY2FtZWxpemUgPSBkZWNhbWVsaXpl
KCRjbGFzc05hbWUpOworICAgICAgICBteSAkY29yZVNlbGYgPSBHZXRDb3JlT2JqZWN0KCRpbnRl
cmZhY2VOYW1lLCAiY29yZVNlbGYiLCAic2VsZiIpOworICAgICAgICBteSAkZXZlbnRMaXN0ZW5l
ckggPSA8PCAiRU9GIjsKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KKyR7bG93ZXJDYXNlSWZhY2VOYW1l
fV9hZGRfZXZlbnRfbGlzdGVuZXIoJHtjbGFzc05hbWV9KiBzZWxmLCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlLCBncG9pbnRlciB1
c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCiske2xvd2VyQ2FzZUlmYWNlTmFtZX1f
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKCR7Y2xhc3NOYW1lfSogc2VsZiwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSk7CitFT0YKKwor
ICAgICAgICBteSAkZXZlbnRMaXN0ZW5lckMgPSA8PCAiRU9GIjsKK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KKyR7bG93ZXJDYXNlSWZhY2VOYW1lfV9hZGRfZXZlbnRfbGlzdGVuZXIoJHtjbGFzc05hbWV9
KiBzZWxmLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgJHtjb3JlU2VsZn0KKyAg
ICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QgKHNlbGYpLCBjb3JlU2VsZiwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
LCB1c2VyX2RhdGEpOworfQorCitXRUJLSVRfQVBJIGdib29sZWFuCiske2xvd2VyQ2FzZUlmYWNl
TmFtZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKCR7Y2xhc3NOYW1lfSogc2VsZiwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyAgICAke2NvcmVTZWxmfQorICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCAoc2VsZiksIGNvcmVTZWxmLCBldmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorRU9GCisKKyAgICAgICAgcHVzaChAaEJvZHks
ICRldmVudExpc3RlbmVySCk7CisgICAgICAgIHB1c2goQGNCb2R5LCAkZXZlbnRMaXN0ZW5lckMp
OworICAgIH0KKwogICAgIG15ICR3cmFwTWV0aG9kID0gPDwgIkVPRiI7CiBuYW1lc3BhY2UgV2Vi
S2l0IHsKICR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfSogY29yZU9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21k
b213aW5kb3cuYwppbmRleCBiMTU1NThlLi4yOWM0OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQg
bG9hZF9ldmVudF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBz
cGVjLCBEb21Eb20KIHsKICAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CiAgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPmRvbVdp
bmRvdywgImNsaWNrLWV2ZW50IiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmaXh0dXJl
KTsKKyAgICAgICAgd2Via2l0X2RvbV9kb21fd2luZG93X2FkZF9ldmVudF9saXN0ZW5lciAoZml4
dHVyZS0+ZG9tV2luZG93LCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksIGZh
bHNlLCBmaXh0dXJlKTsKIAogICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZB
TFNFKTsKICAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldyksIDEsIDApOwpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9t
X2RvbXZpZXdfc2lnbmFscyhEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkCiAKICAgICBmaXh0dXJlLT5kb21XaW5kb3cgPSBkb21XaW5kb3c7CiAKLSAgICBnX3NpZ25h
bF9jb25uZWN0KGZpeHR1cmUtPmRvbVdpbmRvdywgImxvYWQtZXZlbnQiLCBHX0NBTExCQUNLKGxv
YWRlZENhbGxiYWNrKSwgZml4dHVyZSk7CisgICAgd2Via2l0X2RvbV9kb21fd2luZG93X2FkZF9l
dmVudF9saXN0ZW5lciAoZml4dHVyZS0+ZG9tV2luZG93LCAibG9hZCIsIEdfQ0FMTEJBQ0sobG9h
ZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0
dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1
cmUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJlKTsKIApA
QCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5kb21XaW5kb3csIDAs
IDAsIDAsIGNsaWVudFgsIGNsaWVudFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJVF9ET01fRVZFTlRf
VEFSR0VUKGVsZW1lbnQpKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChlbGVtZW50LCAiY2xp
Y2stZXZlbnQiLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgd2Vi
a2l0X2RvbV9ub2RlX2FkZF9ldmVudF9saXN0ZW5lciAoV0VCS0lUX0RPTV9OT0RFIChlbGVtZW50
KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOwogICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKICAgICAgICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQo
ZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKICAgICB9Ci0tIAoxLjcuNC5yYzIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80347</attachid>
            <date>2011-01-27 10:40:49 -0800</date>
            <delta_ts>2011-03-18 09:57:15 -0700</delta_ts>
            <desc>now with code in the proper style</desc>
            <filename>0001-Replace-signals-on-DOM-with-manual-callbacks.patch</filename>
            <type>text/plain</type>
            <size>16431</size>
            <attacher name="David Keijser">keijser</attacher>
            
              <data encoding="base64">RnJvbSAyMzY0OGZiOTVmYmU5OGU0ZGFlMDQ4ZjNlOTBkODIxZjhjZjg4ZjMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBrZWlzIDxrZWlqc2VyQGdtYWlsLmNvbT4KRGF0ZTogU3VuLCAy
MyBKYW4gMjAxMSAxNDo1MTo1NiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFJlcGxhY2Ugc2lnbmFs
cyBvbiBET00gd2l0aCBtYW51YWwgY2FsbGJhY2tzCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysrCiAuLi4vYmluZGluZ3Mv
Z29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAgICAgICB8ICAgMTUgKystCiAuLi4vYmlu
ZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oICAgICAgICB8ICAgMzEgKysrKy0t
CiAuLi4vYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbSAgICAgICB8ICAx
MzIgKysrKystLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxMiArKwogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGRvbWRvbXdpbmRvdy5jICAgICAgICAgfCAgICA2ICstCiA2IGZpbGVzIGNoYW5nZWQsIDEwMiBp
bnNlcnRpb25zKCspLCAxMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI3ZDA4OGIuLjQ5
NmY4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wMS0yNiAgRGF2aWQgS2Vp
anNlciAgPGtlaWpzZXJAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtHVEtdIE9uLWRlbWFuZCBldmVudC1saXN0ZW5lcnMgZm9yIERP
TSBldmVudCBzaWduYWxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTY0OQorCisgICAgICAgIFJlcGxhY2UgdXNlIG9mIHNpZ25hbHMgd2l0aCBtYW51
YWwgY2FsbGJhY2tzIGhvb2tlZCB1cCB3aXRoCisgICAgICAgIHdlYmtpdF9kb21fKG5vZGV8ZG9t
X3dpbmRvdylfYWRkX2V2ZW50X2xpc3RlbmVyIGFuZAorICAgICAgICB3ZWJraXRfZG9tXyhub2Rl
fGRvbV93aW5kb3cpX3JlbW92ZV9ldmVudF9saXN0ZW5lcgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gKE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVj
dEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmdvYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yR09iamVjdC5wbToKKwogMjAxMS0wMS0yNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0
ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmNwcAppbmRleCAyNzQzMmI5Li5kZDEyMjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcApAQCAt
MjksMTMgKzI5LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR09iamVjdEV2ZW50TGlz
dGVuZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93KiB3
aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgY29uc3QgY2hhciog
c2lnbmFsTmFtZSkKK0dPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiBvYmplY3QsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBjaGFy
KiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVz
ZXJEYXRhKQogICAgIDogRXZlbnRMaXN0ZW5lcihHT2JqZWN0RXZlbnRMaXN0ZW5lclR5cGUpCiAg
ICAgLCBtX29iamVjdChvYmplY3QpCiAgICAgLCBtX2NvcmVOb2RlKG5vZGUpCiAgICAgLCBtX2Nv
cmVXaW5kb3cod2luZG93KQogICAgICwgbV9kb21FdmVudE5hbWUoZG9tRXZlbnROYW1lKQotICAg
ICwgbV9zaWduYWxOYW1lKHNpZ25hbE5hbWUpCisgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKKyAg
ICAsIG1fY2FwdHVyZShjYXB0dXJlKQorICAgICwgbV91c2VyRGF0YSh1c2VyRGF0YSkKIHsKICAg
ICBBU1NFUlQoIW1fY29yZVdpbmRvdyB8fCAhbV9jb3JlTm9kZSk7CiAKQEAgLTU3LDI3ICs1OSwy
NiBAQCB2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkKCkKICAgICAv
LyBkZXN0cnVjdG9yIGFzIGEgc2lkZSBlZmZlY3QgYW5kIHdlIG11c3QgYmUgaW4gdGhlIHByb3Bl
ciBzdGF0ZSB0byBwcmV2ZW50IGdfb2JqZWN0X3dlYWtfdW5yZWYuCiAgICAgaWYgKERPTVdpbmRv
dyogd2luZG93ID0gbV9jb3JlV2luZG93KSB7CiAgICAgICAgIG1fY29yZVdpbmRvdyA9IDA7Ci0g
ICAgICAgIHdpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihtX2RvbUV2ZW50TmFtZS5kYXRhKCks
IHRoaXMsIGZhbHNlKTsKKyAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKG1fZG9t
RXZlbnROYW1lLmRhdGEoKSwgdGhpcywgbV9jYXB0dXJlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIE5vZGUqIG5vZGUgPSBtX2NvcmVOb2RlOwogICAgIG1fY29yZU5vZGUgPSAwOyAv
LyBTZWUgYWJvdmUuCi0gICAgbm9kZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihtX2RvbUV2ZW50TmFt
ZS5kYXRhKCksIHRoaXMsIGZhbHNlKTsKKyAgICBub2RlLT5yZW1vdmVFdmVudExpc3RlbmVyKG1f
ZG9tRXZlbnROYW1lLmRhdGEoKSwgdGhpcywgbV9jYXB0dXJlKTsKIH0KIAogdm9pZCBHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50
KiBldmVudCkKIHsKLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgV2ViS2l0RE9N
RXZlbnQqIGdvYmplY3RFdmVudCA9IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQp
KTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9vYmplY3QsIG1fc2lnbmFsTmFtZS5kYXRh
KCksIGdvYmplY3RFdmVudCwgJmhhbmRsZWQpOworICAgICgqKHZvaWQgKCopKEdPYmplY3QqLCBX
ZWJLaXRET01FdmVudCosIHZvaWQqKSltX2hhbmRsZXIpKG1fb2JqZWN0LCBnb2JqZWN0RXZlbnQs
IG1fdXNlckRhdGEpOwogICAgIGdfb2JqZWN0X3VucmVmKGdvYmplY3RFdmVudCk7CiB9CiAKIGJv
b2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
bGlzdGVuZXIpCiB7CiAgICAgaWYgKGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKiBnb2JqZWN0
RXZlbnRMaXN0ZW5lciA9IEdPYmplY3RFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5lcikpCi0g
ICAgICAgIHJldHVybiBtX3NpZ25hbE5hbWUgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXItPm1fc2ln
bmFsTmFtZSAmJiBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9vYmplY3Q7Cisg
ICAgICAgIHJldHVybiBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9vYmplY3Qg
JiYgbV9oYW5kbGVyID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX2hhbmRsZXI7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKaW5kZXggZWYxNjM3YS4uOTYzYWYyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlz
dGVuZXIuaApAQCAtMjcsMjIgKzI3LDM1IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiB0eXBlZGVmIHN0cnVjdCBfR09iamVjdCBHT2JqZWN0OwordHlwZWRlZiB2b2lkICgqR0Nh
bGxiYWNrKSAodm9pZCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR09iamVjdEV2
ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAKLSAgICBzdGF0
aWMgdm9pZCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93KiB3aW5k
b3csIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgY29uc3QgY2hhciogc2lnbmFsTmFtZSkKKyAg
ICBzdGF0aWMgYm9vbCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93
KiB3aW5kb3csIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJv
b2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCiAgICAgewotICAgICAgICBSZWZQdHI8R09i
amVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0
ZW5lcihvYmplY3QsIHdpbmRvdywgMCwgZG9tRXZlbnROYW1lLCBzaWduYWxOYW1lKSkpOwotICAg
ICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBsaXN0ZW5lci5yZWxl
YXNlKCksIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEdPYmplY3RFdmVudExpc3RlbmVyPiBsaXN0
ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVuZXIob2JqZWN0LCB3aW5kb3csIDAs
IGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgdXNlckRhdGEpKSk7CisgICAgICAg
IHJldHVybiB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBsaXN0ZW5lci5y
ZWxlYXNlKCksIHVzZUNhcHR1cmUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFkZEV2ZW50
TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBkb21FdmVu
dE5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hbE5hbWUpCisgICAgc3RhdGljIGJvb2wgYWRkRXZlbnRM
aXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIGRvbUV2ZW50
TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEp
CiAgICAgewotICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFk
b3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIDAsIG5vZGUsIGRvbUV2ZW50
TmFtZSwgc2lnbmFsTmFtZSkpKTsKLSAgICAgICAgbm9kZS0+YWRkRXZlbnRMaXN0ZW5lcihkb21F
dmVudE5hbWUsIGxpc3RlbmVyLnJlbGVhc2UoKSwgZmFsc2UpOworICAgICAgICBSZWZQdHI8R09i
amVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0
ZW5lcihvYmplY3QsIDAsIG5vZGUsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwg
dXNlckRhdGEpKSk7CisgICAgICAgIHJldHVybiBub2RlLT5hZGRFdmVudExpc3RlbmVyKGRvbUV2
ZW50TmFtZSwgbGlzdGVuZXIucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRE9NV2luZG93
KiB3aW5kb3csIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJv
b2wgdXNlQ2FwdHVyZSkKKyAgICB7CisgICAgICAgIEdPYmplY3RFdmVudExpc3RlbmVyIGtleShv
YmplY3QsIHdpbmRvdywgMCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCAwKTsK
KyAgICAgICAgcmV0dXJuIHdpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUs
ICZrZXksIHVzZUNhcHR1cmUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50
TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBkb21FdmVu
dE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisgICAgeworICAgICAg
ICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCAwLCBub2RlLCBkb21FdmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUsIDApOworICAgICAgICByZXR1cm4gbm9kZS0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUpOwogICAgIH0KIAogICAg
IHN0YXRpYyB2b2lkIGdvYmplY3REZXN0cm95ZWRDYWxsYmFjayhHT2JqZWN0RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIsIEdPYmplY3QqKQpAQCAtNjAsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpOwogCiBwcml2
YXRlOgotICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqLCBET01XaW5kb3cqLCBOb2Rl
KiwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBjb25zdCBjaGFyKiBzaWduYWxOYW1lKTsKKyAg
ICBHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0
IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgY2FwdHVyZSwgdm9p
ZCogdXNlckRhdGEpOwogICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwogICAgIHZvaWQgZ29i
amVjdERlc3Ryb3llZCgpOwogCkBAIC03Myw3ICs4Niw5IEBAIHByaXZhdGU6CiAgICAgTm9kZSog
bV9jb3JlTm9kZTsKICAgICBET01XaW5kb3cqIG1fY29yZVdpbmRvdzsKICAgICBDU3RyaW5nIG1f
ZG9tRXZlbnROYW1lOwotICAgIENTdHJpbmcgbV9zaWduYWxOYW1lOworICAgIEdDYWxsYmFjayBt
X2hhbmRsZXI7CisgICAgYm9vbCBtX2NhcHR1cmU7CisgICAgdm9pZCogbV91c2VyRGF0YTsKIH07
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCmluZGV4IGVkNzZkMDguLjMx
NjBiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckdPYmplY3QucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yR09iamVjdC5wbQpAQCAtNDU5LDg5ICs0NTksNiBAQCBFT0YKICAgICBwdXNo
KEB0eHRJbnN0YWxsUHJvcHMsICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAotbXkgJWJyZWFrV29yZHMgPSAoImJlZm9yZSIg
PT4gMSwgImNhbiIgPT4gMSwgImNvbnRleHQiID0+IDEsICJkYmwiID0+IDEsICJkcmFnIiA9PiAx
LAotICAgICAgICAgICAgICAgICAgImRyYWciID0+IDEsICJkdXJhdGlvbiIgPT4gMSwgImhhcyIg
PT4gMSwgImtleSIgPT4gMSwgImxvYWRlZCIgPT4gMSwKLSAgICAgICAgICAgICAgICAgICJtb3Vz
ZSIgPT4gMSwgInBhZ2UiID0+IDEsICJwb3AiID0+IDEsICJyYXRlIiA9PiAxLCAic2VsZWN0IiA9
PiAxLAotICAgICAgICAgICAgICAgICAgInRpbWUiID0+IDEsICJ0b3VjaCIgPT4gMSwgInZvbHVt
ZSIgPT4gMSk7Ci0KLXN1YiBTcGxpdEV2ZW50TGlzdGVuZXJBdHRyTmFtZSB7Ci0gICAgbXkgJGF0
dHJOYW1lID0gc2hpZnQ7Ci0KLSAgICBteSBAbWF0Y2hlcyA9IGdyZXAgeyAkYXR0ck5hbWUgPX4g
L14kXy8gfSBrZXlzICglYnJlYWtXb3Jkcyk7Ci0KLSAgICBpZiAoQG1hdGNoZXMgJiYgKGxlbmd0
aCAkbWF0Y2hlc1swXSA8IGxlbmd0aCAkYXR0ck5hbWUpKSB7Ci0gICAgICAgICRhdHRyTmFtZSA9
ICRtYXRjaGVzWzBdIC4gIi0iIC4gc3Vic3RyKCRhdHRyTmFtZSwgbGVuZ3RoICRtYXRjaGVzWzBd
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJGF0dHJOYW1lOwotfQotCi1zdWIgRXZlbnRTaWduYWxO
YW1lIHsKLSAgICBteSAkYXR0ck5hbWUgPSBzaGlmdDsKLSAgICBteSAkbmFtZSA9IFNwbGl0RXZl
bnRMaXN0ZW5lckF0dHJOYW1lKCRhdHRyTmFtZSkgLiAiLWV2ZW50IjsKLQotICAgIHJldHVybiAk
bmFtZTsKLX0KLQotc3ViIEdlbmVyYXRlRXZlbnRMaXN0ZW5lciB7Ci0gICAgbXkgJG5hbWUgPSBz
aGlmdDsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZU5hbWUgPSBz
aGlmdDsKLQotICAgIG15ICRnb2JqZWN0U2lnbmFsTmFtZSA9IEV2ZW50U2lnbmFsTmFtZSgkbmFt
ZSk7Ci0KLSAgICBteSAkdHh0SW5zdGFsbFNpZ25hbCA9IDw8ICJFT0YiOwotICAgIGdfc2lnbmFs
X25ldygiJHtnb2JqZWN0U2lnbmFsTmFtZX0iLAotICAgICAgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhnb2JqZWN0Q2xhc3MpLAotICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFT
VCwKLSAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11
bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwLAotICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9C
T09MRUFOX19PQkpFQ1QsCi0gICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAotICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fRVZFTlQgfCBHX1NJR05BTF9UWVBFX1NUQVRJ
Q19TQ09QRSk7Ci0KLUVPRgotICAgIHB1c2goQHR4dEluc3RhbGxTaWduYWxzLCAkdHh0SW5zdGFs
bFNpZ25hbCk7Ci0KLSAgICBteSAke2xpc3RlbmVyTmFtZX0gPSAkbmFtZSAuICJMaXN0ZW5lciI7
Ci0KLSAgICBteSAkdHh0SW5zdGFsbEV2ZW50TGlzdGVuZXIgPSA8PCAiRU9GIjsKLSAgICBXZWJD
b3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihvYmplY3QsIGNvcmVP
YmplY3QsICIke25hbWV9IiwgIiR7Z29iamVjdFNpZ25hbE5hbWV9Iik7Ci1FT0YKLSAgICBwdXNo
KEB0eHRJbnN0YWxsRXZlbnRMaXN0ZW5lcnMsICR0eHRJbnN0YWxsRXZlbnRMaXN0ZW5lcik7Ci0K
LSAgICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXQvV2ViS2l0RE9NRXZlbnQuaCJ9ID0gMTsKLSAgICAk
aW1wbEluY2x1ZGVzeyJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotfQotCi1teSBAZXZl
bnRTaWduYWxOYW1lcyA9ICgKLSAgICAjIFVzZXIgSW50ZXJmYWNlIEV2ZW50IHR5cGVzCi0gICAg
ImZvY3VzIiwgImJsdXIiLAotICAgICMgQmFzaWMgRXZlbnQgdHlwZXMKLSAgICAibG9hZCIsICJ1
bmxvYWQiLCAiYWJvcnQiLCAiZXJyb3IiLCAic2VsZWN0IiwgImNoYW5nZSIsICJmb3JtY2hhbmdl
IiwgInN1Ym1pdCIsICJyZXNldCIsCi0gICAgInJlc2l6ZSIsICJzY3JvbGwiLAotICAgICMgTW91
c2UgRXZlbnQgdHlwZXMKLSAgICAiY2xpY2siLCAiZGJsY2xpY2siLCAibW91c2Vkb3duIiwgIm1v
dXNldXAiLAotICAgICJtb3VzZW1vdmUiLCAibW91c2VvdmVyIiwgIm1vdXNlb3V0IiwKLSAgICAj
IE1vdXNlIFdoZWVsIEV2ZW50IHR5cGVzCi0gICAgIm1vdXNld2hlZWwiLAotICAgICMgS2V5Ym9h
cmQgRXZlbnQgdHlwZXMKLSAgICAia2V5ZG93biIsICJrZXlwcmVzcyIsICJrZXl1cCIsCi0gICAg
IyAtLSBFdmVudHMgbm90IGluIHRoZSBzcGVjIGJ1dCBkZWZpbmVkIGluIFdlYktpdAotICAgICMg
TWVkaWEgRXZlbnQgdHlwZXMsCi0gICAgImxvYWRzdGFydCIsICJwcm9ncmVzcyIsICJzdXNwZW5k
IiwgImVtcHRpZWQiLCAic3RhbGxlZCIsICJwbGF5IiwKLSAgICAibG9hZGVkbWV0YWRhdGEiLCAi
bG9hZGVkZGF0YSIsICJ3YWl0aW5nIiwgInBsYXlpbmciLCAiY2FucGxheSIsCi0gICAgImNhbnBs
YXl0aHJvdWdoIiwgInNlZWtpbmciLCAic2Vla2VkIiwgInRpbWV1cGRhdGUiLCAiZW5kZWQiLAot
ICAgICJyYXRlY2hhbmdlIiwgImR1cmF0aW9uY2hhbmdlIiwgInZvbHVtZWNoYW5nZSIsCi0gICAg
IyBEcmFnIGFuZCBEcm9wIEV2ZW50IHR5cGVzCi0gICAgImRyYWciLCAiZHJhZ2VuZCIsICJkcmFn
ZW50ZXIiLCAiZHJhZ2xlYXZlIiwgImRyYWdvdmVyIiwgImRyYWdzdGFydCIsICJkcm9wIiwKLSAg
ICAjIEN1dCBhbmQgUGFzdGUgRXZlbnQgdHlwZXMKLSAgICAiYmVmb3JlY3V0IiwgImN1dCIsICJi
ZWZvcmVjb3B5IiwgImNvcHkiLCAiYmVmb3JlcGFzdGUiLCAicGFzdGUiLAotICAgICMgQW5pbWF0
aW9ucwotICAgICJ3ZWJraXRhbmltYXRpb25lbmQiLCAid2Via2l0YW5pbWF0aW9uc3RhcnQiLCAi
d2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uIiwKLSAgICAjIE90aGVyCi0gICAgImNvbnRleHRtZW51
IiwgImlucHV0IiwgImZvcm1pbnB1dCIsICJpbnZhbGlkIiwgInNlYXJjaCIsICJzZWxlY3RzdGFy
dCIpOwotCiBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzIHsKICAgICBteSAoJG9iamVjdCwgJGludGVy
ZmFjZU5hbWUsICRkYXRhTm9kZSkgPSBAXzsKIApAQCAtNjEwLDE1ICs1MjcsNiBAQCBFT0YKICAg
ICAgICAgfQogICAgIH0KIAotICAgICMgV2UgbmVlZCB0byBkZWZpbmUgYWxsIHRoZSBldmVudHMg
dGhlcmUgYXJlIGluIGFsbCBiYXNlIGNsYXNzZXMKLSAgICAjIHRoYXQgaW1wbGVtZW50IEV2ZW50
VGFyZ2V0LiBGb3Igbm93IHdlIG9ubHkgY2FyZSBhYm91dCB0aGVzZQotICAgICMgdHdvLgotICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIgfHwgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyIpIHsKLSAgICAgICAgZm9yZWFjaCBteSAkc2lnbmFsTmFtZSAoQGV2ZW50U2lnbmFsTmFt
ZXMpIHsKLSAgICAgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lcigkc2lnbmFsTmFtZSwgJG9i
amVjdCwgJGludGVyZmFjZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVzaChAY0Jv
ZHlQcml2LCAifTtcblxuIik7CiAKICAgICAkdHh0R2V0UHJvcCA9IDw8ICJFT0YiOwpAQCAtNjY5
LDEzICs1NzcsNiBAQCBzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0
ZWQoR09iamVjdCogb2JqZWN0KQogRU9GCiAgICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRl
bnQpOwogCi0gICAgaWYgKHNjYWxhciBAdHh0SW5zdGFsbEV2ZW50TGlzdGVuZXJzID4gMCkgewot
ICAgICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSAgICBXZWJDb3JlOjoke2ludGVyZmFj
ZU5hbWV9KiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1l
fSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotRU9GCi0gICAgcHVz
aChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOwotICAgIH0KLQogICAgICRpbXBsQ29udGVudCA9
IDw8ICJFT0YiOwogQHR4dEluc3RhbGxFdmVudExpc3RlbmVycwogICAgIGlmIChHX09CSkVDVF9D
TEFTUygke2xvd2VyQ2FzZUlmYWNlTmFtZX1fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBA
IC0xMTc3LDYgKzEwNzgsMzkgQEAgRU9GCiAgICAgJG9iamVjdC0+R2VuZXJhdGVQcm9wZXJ0aWVz
KCRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUpOwogICAgICRvYmplY3QtPkdlbmVyYXRlRnVuY3Rp
b25zKCRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUpOwogCisgICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJOb2RlIiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJ3ZWJraXQvV2ViS2l0RE9NRXZlbnQuaCJ9ID0gMTsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siR09iamVjdEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsKKyAgICAgICAgbXkgJGRl
Y2FtZWxpemUgPSBkZWNhbWVsaXplKCRjbGFzc05hbWUpOworICAgICAgICBteSAkY29yZVNlbGYg
PSBHZXRDb3JlT2JqZWN0KCRpbnRlcmZhY2VOYW1lLCAiY29yZVNlbGYiLCAic2VsZiIpOworICAg
ICAgICBteSAkZXZlbnRMaXN0ZW5lckggPSA8PCAiRU9GIjsKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
KyR7bG93ZXJDYXNlSWZhY2VOYW1lfV9hZGRfZXZlbnRfbGlzdGVuZXIoJHtjbGFzc05hbWV9KiBz
ZWxmLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlLCBncG9pbnRlciB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCisk
e2xvd2VyQ2FzZUlmYWNlTmFtZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKCR7Y2xhc3NOYW1lfSog
c2VsZiwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSk7CitFT0YKKworICAgICAgICBteSAkZXZlbnRMaXN0ZW5lckMgPSA8PCAiRU9G
IjsKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KKyR7bG93ZXJDYXNlSWZhY2VOYW1lfV9hZGRfZXZlbnRf
bGlzdGVuZXIoJHtjbGFzc05hbWV9KiBzZWxmLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxs
YmFjayBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlLCBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisgICAgJHtjb3JlU2VsZn0KKyAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QgKHNlbGYpLCBjb3JlU2VsZiwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlLCB1c2VyX2RhdGEpOworfQorCitXRUJLSVRfQVBJIGdib29s
ZWFuCiske2xvd2VyQ2FzZUlmYWNlTmFtZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKCR7Y2xhc3NO
YW1lfSogc2VsZiwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICAke2NvcmVTZWxmfQorICAgIHJldHVybiBXZWJDb3Jl
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCAoc2Vs
ZiksIGNvcmVTZWxmLCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorRU9GCisK
KyAgICAgICAgcHVzaChAaEJvZHksICRldmVudExpc3RlbmVySCk7CisgICAgICAgIHB1c2goQGNC
b2R5LCAkZXZlbnRMaXN0ZW5lckMpOworICAgIH0KKwogICAgIG15ICR3cmFwTWV0aG9kID0gPDwg
IkVPRiI7CiBuYW1lc3BhY2UgV2ViS2l0IHsKICR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNl
TmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZU9iamVjdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA5MTJjOTQ4Li5hN2NiYTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMDEtMjYgIERhdmlkIEtlaWpzZXIgIDxrZWlqc2VyQGdtYWlsLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBPbi1kZW1h
bmQgZXZlbnQtbGlzdGVuZXJzIGZvciBET00gZXZlbnQgc2lnbmFscworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk2NDkKKworICAgICAgICAqIHRlc3Rz
L3Rlc3Rkb21kb213aW5kb3cuYzoKKyAgICAgICAgKGxvYWRfZXZlbnRfY2FsbGJhY2spOgorICAg
ICAgICAodGVzdF9kb21fZG9tdmlld19zaWduYWxzKToKKyAgICAgICAgKGxvYWRfc3RhdHVzX2Nh
bGxiYWNrKToKKwogMjAxMS0wMS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jIGIvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jCmluZGV4IGIxNTU1OGUuLjI5YzQ5
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cu
YworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKQEAgLTEw
NSw3ICsxMDUsNyBAQCBzdGF0aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbQogewogICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsK
ICAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZml4dHVyZS0+ZG9tV2luZG93LCAiY2xpY2stZXZlbnQiLCBHX0NBTExCQUNL
KGNsaWNrZWRDYWxsYmFjayksIGZpeHR1cmUpOworICAgICAgICB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfYWRkX2V2ZW50X2xpc3RlbmVyIChmaXh0dXJlLT5kb21XaW5kb3csICJjbGljayIsIEdfQ0FM
TEJBQ0soY2xpY2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOwogCiAgICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwogICAgICAgICBndGtfdGVzdF93aWRnZXRf
Y2xpY2soR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgMSwgMCk7CkBAIC0xMjUsNyArMTI1
LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19zaWduYWxzKERvbURvbXZpZXdGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGQKIAogICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9
IGRvbVdpbmRvdzsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+ZG9tV2luZG93LCAi
bG9hZC1ldmVudCIsIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLCBmaXh0dXJlKTsKKyAgICB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfYWRkX2V2ZW50X2xpc3RlbmVyIChmaXh0dXJlLT5kb21XaW5k
b3csICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsK
ICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FM
TEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0
dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9ldmVu
dF9jYWxsYmFjayksIGZpeHR1cmUpOwogCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQg
bG9hZF9zdGF0dXNfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyog
c3BlYywgRG9tRG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeHR1cmUtPmRvbVdpbmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwg
RkFMU0UsIEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KGVsZW1lbnQsICJjbGljay1ldmVudCIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9j
YiksIGZpeHR1cmUpOworICAgICAgICB3ZWJraXRfZG9tX25vZGVfYWRkX2V2ZW50X2xpc3RlbmVy
IChXRUJLSVRfRE9NX05PREUgKGVsZW1lbnQpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRf
Y2IpLCBmYWxzZSwgZml4dHVyZSk7CiAgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQg
PT0gRkFMU0UpOwogICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dChXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgZXZlbnQsIE5VTEwpOwogICAgIH0K
LS0gCjEuNy40LnJjMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86173</attachid>
            <date>2011-03-18 09:57:15 -0700</date>
            <delta_ts>2011-03-18 10:26:17 -0700</delta_ts>
            <desc>eventlistener.diff</desc>
            <filename>eventlistener.diff</filename>
            <type>text/plain</type>
            <size>24326</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBiMzI1Mjk5ZDM0MDA0NGFiZTNjZGU4YjkzOGE4MWVlOGNhZWZlODlhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBrZWlzIDxrZWlqc2VyQGdtYWlsLmNvbT4KRGF0ZTogU3VuLCAy
MyBKYW4gMjAxMSAxNDo1MTo1NiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFNvdXJjZS9XZWJDb3Jl
OgoKMjAxMS0wMy0xOCAgRGF2aWQgS2VpanNlciAgPGtlaWpzZXJAZ21haWwuY29tPiBhbmQgWGFu
IExvcGV6IDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgogICAgICAgIFtHVEtdIE9uLWRlbWFuZCBldmVudC1saXN0ZW5lcnMgZm9yIERPTSBl
dmVudCBzaWduYWxzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ5NjQ5CgogICAgICAgIEFkZCBleHBsaWNpdCBFdmVudFRhcmdldCBBUEkgdG8gYWRkL3Jl
bW92ZSBldmVudCBsaXN0ZW5lcnMgaW5zdGVhZAogICAgICAgIG9mIHVzaW5nIEdTaWduYWwsIHdo
aWNoIGR1ZSB0byBpbnRlcm5hbCBsaW1pdGF0aW9ucyBpbiBnbGliIG1ha2VzCiAgICAgICAgdXMg
cHJlZW1wdGl2ZWx5IGFkZCBsaXN0ZW5lcnMgZm9yIGFsbCBldmVudCB0eXBlcy4KCiAgICAgICAg
KiBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcDogYWRkIG5ldwogICAg
ICAgIGFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0ZW5lciBtZXRob2RzLCBhbmQgc21h
bGwKICAgICAgICByZWZhY3RvcmluZyB0byBzdG9yZSBhbiBFdmVudFRhcmdldCBpbnRlcm5hbGx5
IGluc3RlYWQgb2YgYSBET00KICAgICAgICBub2RlLCB3aGljaCBpcyBtb3JlIGdlbmVyaWMgYW5k
IGNhbiBiZSByZXVzZWQgaW4gbW9yZSBjYXNlcy4KICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3Qv
R09iamVjdEV2ZW50TGlzdGVuZXIuaDogZGl0dG8uCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcDoKICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKTogbmV3IGlmYWNlIG1ldGhvZCB0bwogICAgICAgIGFkZCBh
biBldmVudCBsaXN0ZW5lci4KICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKTogbmV3IGlmYWNlIG1ldGhvZAogICAgICAgIHRvIHJlbW92ZSBhbiBl
dmVudCBsaXN0ZW5lci4KICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaDogYWRkIG5ldyBpZmFjZSBtZXRob2RzLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogY2hhbmdlIGNvZGUgZ2VuZXJhdGlvbgogICAgICAg
IGFjY29yZGluZ2x5LgoKU291cmNlL1dlYktpdC9ndGs6CgoyMDExLTAzLTE4ICBEYXZpZCBLZWlq
c2VyICA8a2VpanNlckBnbWFpbC5jb20+IGFuZCBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29t
PgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gT24t
ZGVtYW5kIGV2ZW50LWxpc3RlbmVycyBmb3IgRE9NIGV2ZW50IHNpZ25hbHMKICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk2NDkKCiAgICAgICAgKiB0ZXN0
cy90ZXN0ZG9tZG9td2luZG93LmM6IHVwZGF0ZSB1bml0IHRlc3RzIGZvciBuZXcgQVBJcy4KICAg
ICAgICAobG9hZF9ldmVudF9jYWxsYmFjayk6IGRpdHRvLgogICAgICAgICh0ZXN0X2RvbV9kb212
aWV3X3NpZ25hbHMpOiBkaXR0by4KICAgICAgICAobG9hZF9zdGF0dXNfY2FsbGJhY2spOiBkaXR0
by4KLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMjUgKysrKwogLi4uL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwICAgICAgfCAgIDMxICsrKy0tLQogLi4uL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50
TGlzdGVuZXIuaCAgICAgICAgfCAgIDM1ICsrKystLQogLi4uL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuY3BwICAgICAgfCAgIDMwICsrKysrCiAuLi4vYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oICAgICAgICB8ICAgMjEgKysrKwogLi4uL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0gICAgICAgfCAgMTE3ICsrKy0tLS0t
LS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTIgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5k
b3cuYyAgICAgICAgIHwgICAgNiArLQogOCBmaWxlcyBjaGFuZ2VkLCAxNDkgaW5zZXJ0aW9ucygr
KSwgMTI4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZGM5OGY1Li40NDY4ZDMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDMtMTggIERhdmlkIEtlaWpzZXIgIDxrZWlq
c2VyQGdtYWlsLmNvbT4gYW5kIFhhbiBMb3BleiA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gT24tZGVtYW5k
IGV2ZW50LWxpc3RlbmVycyBmb3IgRE9NIGV2ZW50IHNpZ25hbHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NjQ5CisKKyAgICAgICAgQWRkIGV4cGxp
Y2l0IEV2ZW50VGFyZ2V0IEFQSSB0byBhZGQvcmVtb3ZlIGV2ZW50IGxpc3RlbmVycyBpbnN0ZWFk
CisgICAgICAgIG9mIHVzaW5nIEdTaWduYWwsIHdoaWNoIGR1ZSB0byBpbnRlcm5hbCBsaW1pdGF0
aW9ucyBpbiBnbGliIG1ha2VzCisgICAgICAgIHVzIHByZWVtcHRpdmVseSBhZGQgbGlzdGVuZXJz
IGZvciBhbGwgZXZlbnQgdHlwZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dPYmpl
Y3RFdmVudExpc3RlbmVyLmNwcDogYWRkIG5ldworICAgICAgICBhZGRFdmVudExpc3RlbmVyL3Jl
bW92ZUV2ZW50TGlzdGVuZXIgbWV0aG9kcywgYW5kIHNtYWxsCisgICAgICAgIHJlZmFjdG9yaW5n
IHRvIHN0b3JlIGFuIEV2ZW50VGFyZ2V0IGludGVybmFsbHkgaW5zdGVhZCBvZiBhIERPTQorICAg
ICAgICBub2RlLCB3aGljaCBpcyBtb3JlIGdlbmVyaWMgYW5kIGNhbiBiZSByZXVzZWQgaW4gbW9y
ZSBjYXNlcy4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVy
Lmg6IGRpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuY3BwOgorICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3Rl
bmVyKTogbmV3IGlmYWNlIG1ldGhvZCB0bworICAgICAgICBhZGQgYW4gZXZlbnQgbGlzdGVuZXIu
CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIp
OiBuZXcgaWZhY2UgbWV0aG9kCisgICAgICAgIHRvIHJlbW92ZSBhbiBldmVudCBsaXN0ZW5lci4K
KyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0Lmg6IGFkZCBu
ZXcgaWZhY2UgbWV0aG9kcy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JHT2JqZWN0LnBtOiBjaGFuZ2UgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGFjY29yZGluZ2x5
LgorCiAyMDExLTAzLTE4ICBKYXJra28gU2Fra2luZW4gIDxqYXJra28uai5zYWtraW5lbkBnbWFp
bC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuY3BwCmluZGV4IDI3NDMyYjkuLjZkNDc4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3Bw
CkBAIC0yOSw1NSArMjksNTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBET01XaW5k
b3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBjb25zdCBj
aGFyKiBzaWduYWxOYW1lKQordHlwZWRlZiB2b2lkICgqR09iamVjdEV2ZW50TGlzdGVuZXJDYWxs
YmFjaykoR09iamVjdCosIFdlYktpdERPTUV2ZW50Kiwgdm9pZCopOworCitHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBET01XaW5kb3cq
IHdpbmRvdywgRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBH
Q2FsbGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lkKiB1c2VyRGF0YSkKICAgICA6IEV2
ZW50TGlzdGVuZXIoR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICwgbV9vYmplY3Qob2Jq
ZWN0KQotICAgICwgbV9jb3JlTm9kZShub2RlKQorICAgICwgbV9jb3JlVGFyZ2V0KHRhcmdldCkK
ICAgICAsIG1fY29yZVdpbmRvdyh3aW5kb3cpCiAgICAgLCBtX2RvbUV2ZW50TmFtZShkb21FdmVu
dE5hbWUpCi0gICAgLCBtX3NpZ25hbE5hbWUoc2lnbmFsTmFtZSkKKyAgICAsIG1faGFuZGxlciho
YW5kbGVyKQorICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgLCBtX3VzZXJEYXRhKHVzZXJE
YXRhKQogewotICAgIEFTU0VSVCghbV9jb3JlV2luZG93IHx8ICFtX2NvcmVOb2RlKTsKKyAgICBB
U1NFUlQoIW1fY29yZVdpbmRvdyB8fCAhbV9jb3JlVGFyZ2V0KTsKIAogICAgIGdfb2JqZWN0X3dl
YWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50
TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOwogfQogCiBHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6fkdPYmplY3RFdmVudExpc3RlbmVyKCkKIHsKLSAgICBpZiAoIW1fY29y
ZVdpbmRvdyAmJiAhbV9jb3JlTm9kZSkKKyAgICBpZiAoIW1fY29yZVdpbmRvdyAmJiAhbV9jb3Jl
VGFyZ2V0KQogICAgICAgICByZXR1cm47CiAgICAgZ19vYmplY3Rfd2Vha191bnJlZihtX29iamVj
dCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6Omdv
YmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOwogfQogCiB2b2lkIEdPYmplY3RFdmVudExp
c3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkKCkKIHsKLSAgICBBU1NFUlQoIW1fY29yZVdpbmRvdyB8
fCAhbV9jb3JlTm9kZSk7CisgICAgQVNTRVJUKCFtX2NvcmVXaW5kb3cgfHwgIW1fY29yZVRhcmdl
dCk7CiAKLSAgICAvLyBXZSBtdXN0IHNldCBtX2NvcmVXaW5kb3cgYW5kIG1fY29yZU5vZGUgdG8g
bnVsbCwgYmVjYXVzZSByZW1vdmVFdmVudExpc3RlbmVyIG1heSBjYWxsIHRoZQorICAgIC8vIFdl
IG11c3Qgc2V0IG1fY29yZVdpbmRvdyBhbmQgbV9jb3JlVGFyZ2V0IHRvIG51bGwsIGJlY2F1c2Ug
cmVtb3ZlRXZlbnRMaXN0ZW5lciBtYXkgY2FsbCB0aGUKICAgICAvLyBkZXN0cnVjdG9yIGFzIGEg
c2lkZSBlZmZlY3QgYW5kIHdlIG11c3QgYmUgaW4gdGhlIHByb3BlciBzdGF0ZSB0byBwcmV2ZW50
IGdfb2JqZWN0X3dlYWtfdW5yZWYuCiAgICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gbV9jb3Jl
V2luZG93KSB7CiAgICAgICAgIG1fY29yZVdpbmRvdyA9IDA7Ci0gICAgICAgIHdpbmRvdy0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihtX2RvbUV2ZW50TmFtZS5kYXRhKCksIHRoaXMsIGZhbHNlKTsKKyAg
ICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKG1fZG9tRXZlbnROYW1lLmRhdGEoKSwg
dGhpcywgbV9jYXB0dXJlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5vZGUqIG5v
ZGUgPSBtX2NvcmVOb2RlOwotICAgIG1fY29yZU5vZGUgPSAwOyAvLyBTZWUgYWJvdmUuCi0gICAg
bm9kZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihtX2RvbUV2ZW50TmFtZS5kYXRhKCksIHRoaXMsIGZh
bHNlKTsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gbV9jb3JlVGFyZ2V0OworICAgIG1fY29y
ZVRhcmdldCA9IDA7IC8vIFNlZSBhYm92ZS4KKyAgICB0YXJnZXQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIobV9kb21FdmVudE5hbWUuZGF0YSgpLCB0aGlzLCBtX2NhcHR1cmUpOwogfQogCiB2b2lkIEdP
YmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXZlbnQqIGV2ZW50KQogewotICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAgICBXZWJL
aXRET01FdmVudCogZ29iamVjdEV2ZW50ID0gV0VCS0lUX0RPTV9FVkVOVChXZWJLaXQ6OmtpdChl
dmVudCkpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX29iamVjdCwgbV9zaWduYWxOYW1l
LmRhdGEoKSwgZ29iamVjdEV2ZW50LCAmaGFuZGxlZCk7CisgICAgcmVpbnRlcnByZXRfY2FzdDxH
T2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrPihtX2hhbmRsZXIpKG1fb2JqZWN0LCBnb2JqZWN0
RXZlbnQsIG1fdXNlckRhdGEpOwogICAgIGdfb2JqZWN0X3VucmVmKGdvYmplY3RFdmVudCk7CiB9
CiAKIGJvb2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0
ZW5lciYgbGlzdGVuZXIpCiB7CiAgICAgaWYgKGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKiBn
b2JqZWN0RXZlbnRMaXN0ZW5lciA9IEdPYmplY3RFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5l
cikpCi0gICAgICAgIHJldHVybiBtX3NpZ25hbE5hbWUgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXIt
Pm1fc2lnbmFsTmFtZSAmJiBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9vYmpl
Y3Q7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9v
YmplY3QgJiYgbV9oYW5kbGVyID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX2hhbmRsZXI7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKaW5kZXggZWYxNjM3YS4uOThiODA4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRM
aXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuaApAQCAtMjEsMjggKzIxLDQxIEBACiAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiB0eXBlZGVmIHN0cnVjdCBfR09iamVjdCBHT2JqZWN0Owor
dHlwZWRlZiB2b2lkICgqR0NhbGxiYWNrKSAodm9pZCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgR09iamVjdEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBw
dWJsaWM6CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVj
dCwgRE9NV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgY29uc3QgY2hh
ciogc2lnbmFsTmFtZSkKKyAgICBzdGF0aWMgYm9vbCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3Qq
IG9iamVjdCwgRE9NV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nh
bGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCiAgICAgewot
ICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKG5l
dyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIHdpbmRvdywgMCwgZG9tRXZlbnROYW1lLCBz
aWduYWxOYW1lKSkpOwotICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnRO
YW1lLCBsaXN0ZW5lci5yZWxlYXNlKCksIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEdPYmplY3RF
dmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVuZXIo
b2JqZWN0LCB3aW5kb3csIDAsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgdXNl
ckRhdGEpKSk7CisgICAgICAgIHJldHVybiB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZl
bnROYW1lLCBsaXN0ZW5lci5yZWxlYXNlKCksIHVzZUNhcHR1cmUpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBOb2RlKiBub2RlLCBj
b25zdCBjaGFyKiBkb21FdmVudE5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hbE5hbWUpCisgICAgc3Rh
dGljIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wg
dXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCiAgICAgewotICAgICAgICBSZWZQdHI8R09iamVj
dEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5l
cihvYmplY3QsIDAsIG5vZGUsIGRvbUV2ZW50TmFtZSwgc2lnbmFsTmFtZSkpKTsKLSAgICAgICAg
bm9kZS0+YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGxpc3RlbmVyLnJlbGVhc2UoKSwg
ZmFsc2UpOworICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFk
b3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIDAsIHRhcmdldCwgZG9tRXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCB1c2VyRGF0YSkpKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGxpc3RlbmVyLnJlbGVhc2Uo
KSwgdXNlQ2FwdHVyZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihHT2JqZWN0KiBvYmplY3QsIERPTVdpbmRvdyogd2luZG93LCBjb25zdCBjaGFyKiBkb21F
dmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisgICAgeworICAg
ICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCB3aW5kb3csIDAsIGRvbUV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgMCk7CisgICAgICAgIHJldHVybiB3aW5kb3ctPnJl
bW92ZUV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCAma2V5LCB1c2VDYXB0dXJlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwg
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sg
aGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQorICAgIHsKKyAgICAgICAgR09iamVjdEV2ZW50TGlz
dGVuZXIga2V5KG9iamVjdCwgMCwgdGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUsIDApOworICAgICAgICByZXR1cm4gdGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVyKGRv
bUV2ZW50TmFtZSwgJmtleSwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKEdPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwg
R09iamVjdCopCkBAIC02MCw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBvdGhlcik7CiAKIHByaXZhdGU6Ci0gICAgR09i
amVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCosIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBjaGFy
KiBkb21FdmVudE5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hbE5hbWUpOworICAgIEdPYmplY3RFdmVu
dExpc3RlbmVyKEdPYmplY3QqLCBET01XaW5kb3cqLCBFdmVudFRhcmdldCosIGNvbnN0IGNoYXIq
IGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgY2FwdHVyZSwgdm9pZCogdXNl
ckRhdGEpOwogICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwogICAgIHZvaWQgZ29iamVjdERl
c3Ryb3llZCgpOwogCkBAIC03MCwxMCArODMsMTIgQEAgcHJpdmF0ZToKIAogICAgIC8vIFdlIGRv
IG5vdCBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlc2UgV2ViQ29yZSBvYmplY3RzLCBi
ZWNhdXNlCiAgICAgLy8gd2Ugb25seSB1c2UgdGhlbSB3aGVuIHRoZSBHT2JqZWN0IGFuZCB0aHVz
IHRoZSBXZWJDb3JlIG9iamVjdCBpcyBhbGl2ZS4KLSAgICBOb2RlKiBtX2NvcmVOb2RlOworICAg
IEV2ZW50VGFyZ2V0KiBtX2NvcmVUYXJnZXQ7CiAgICAgRE9NV2luZG93KiBtX2NvcmVXaW5kb3c7
CiAgICAgQ1N0cmluZyBtX2RvbUV2ZW50TmFtZTsKLSAgICBDU3RyaW5nIG1fc2lnbmFsTmFtZTsK
KyAgICBHQ2FsbGJhY2sgbV9oYW5kbGVyOworICAgIGJvb2wgbV9jYXB0dXJlOworICAgIHZvaWQq
IG1fdXNlckRhdGE7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3Bw
CmluZGV4IGYyYjFhOTQuLmM1ZmZhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCkBAIC03Nyw2ICs3Nywz
NiBAQCB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdAogICAgICAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQodGFyZ2V0LCBldmVudCwgZXJyb3IpOwogfQogCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxl
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBp
ZmFjZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlRfVEFS
R0VUKHRhcmdldCksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChldmVudE5hbWUs
IEZBTFNFKTsKKworICAgIGlmYWNlID0gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNF
KHRhcmdldCk7CisKKyAgICBpZiAoaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcikKKyAgICAgICAg
cmV0dXJuIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIGJ1YmJsZSwgdXNlckRhdGEpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFu
ZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQoreworICAgIFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9U
QVJHRVQodGFyZ2V0KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFt
ZSwgRkFMU0UpOworCisgICAgaWZhY2UgPSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZB
Q0UodGFyZ2V0KTsKKworICAgIGlmIChpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKQorICAg
ICAgICByZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgYnViYmxlKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBjb3JlKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01FdmVudFRhcmdldC5oCmluZGV4IDIwNmFiYzcuLmYyYTQ5NjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFy
Z2V0LmgKQEAgLTQwLDYgKzQwLDE2IEBAIHN0cnVjdCBfV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSB7CiAgICAgdm9pZCAgICAgICAgICAoKiBkaXNwYXRjaF9ldmVudCkoV2ViS2l0RE9NRXZlbnRU
YXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRET01FdmVudCogICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yKiogICAgICAgICAgICAgIGVycm9yKTsKKworICAgIGdib29sZWFuICAgICAg
KCogYWRkX2V2ZW50X2xpc3RlbmVyKShXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAg
ICogZXZlbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
Q2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJE
YXRhKTsKKyAgICBnYm9vbGVhbiAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAqIGV2ZW50TmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhh
bmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29s
ZWFuICAgICAgICAgICAgICBidWJibGUpOwogfTsKIAogCkBAIC00OSw2ICs1OSwxNyBAQCBXRUJL
SVRfQVBJIHZvaWQgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnQgICAgICAgKmV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKIAorV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0ICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50TmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAg
ICAgICAgICAgYnViYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyRGF0YSk7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9l
dmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgICAgICAgICAgICpldmVudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAg
ICAgICAgIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSk7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXZWJLaXRET01FdmVudFRhcmdldF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JH
T2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
R09iamVjdC5wbQppbmRleCBlZDc2ZDA4Li4zODA2Yjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTQ1
OSw4OSArNDU5LDYgQEAgRU9GCiAgICAgcHVzaChAdHh0SW5zdGFsbFByb3BzLCAiI2VuZGlmIC8q
ICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAK
LW15ICVicmVha1dvcmRzID0gKCJiZWZvcmUiID0+IDEsICJjYW4iID0+IDEsICJjb250ZXh0IiA9
PiAxLCAiZGJsIiA9PiAxLCAiZHJhZyIgPT4gMSwKLSAgICAgICAgICAgICAgICAgICJkcmFnIiA9
PiAxLCAiZHVyYXRpb24iID0+IDEsICJoYXMiID0+IDEsICJrZXkiID0+IDEsICJsb2FkZWQiID0+
IDEsCi0gICAgICAgICAgICAgICAgICAibW91c2UiID0+IDEsICJwYWdlIiA9PiAxLCAicG9wIiA9
PiAxLCAicmF0ZSIgPT4gMSwgInNlbGVjdCIgPT4gMSwKLSAgICAgICAgICAgICAgICAgICJ0aW1l
IiA9PiAxLCAidG91Y2giID0+IDEsICJ2b2x1bWUiID0+IDEpOwotCi1zdWIgU3BsaXRFdmVudExp
c3RlbmVyQXR0ck5hbWUgewotICAgIG15ICRhdHRyTmFtZSA9IHNoaWZ0OwotCi0gICAgbXkgQG1h
dGNoZXMgPSBncmVwIHsgJGF0dHJOYW1lID1+IC9eJF8vIH0ga2V5cyAoJWJyZWFrV29yZHMpOwot
Ci0gICAgaWYgKEBtYXRjaGVzICYmIChsZW5ndGggJG1hdGNoZXNbMF0gPCBsZW5ndGggJGF0dHJO
YW1lKSkgewotICAgICAgICAkYXR0ck5hbWUgPSAkbWF0Y2hlc1swXSAuICItIiAuIHN1YnN0cigk
YXR0ck5hbWUsIGxlbmd0aCAkbWF0Y2hlc1swXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICRhdHRy
TmFtZTsKLX0KLQotc3ViIEV2ZW50U2lnbmFsTmFtZSB7Ci0gICAgbXkgJGF0dHJOYW1lID0gc2hp
ZnQ7Ci0gICAgbXkgJG5hbWUgPSBTcGxpdEV2ZW50TGlzdGVuZXJBdHRyTmFtZSgkYXR0ck5hbWUp
IC4gIi1ldmVudCI7Ci0KLSAgICByZXR1cm4gJG5hbWU7Ci19Ci0KLXN1YiBHZW5lcmF0ZUV2ZW50
TGlzdGVuZXIgewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0
OwotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7Ci0KLSAgICBteSAkZ29iamVjdFNpZ25h
bE5hbWUgPSBFdmVudFNpZ25hbE5hbWUoJG5hbWUpOwotCi0gICAgbXkgJHR4dEluc3RhbGxTaWdu
YWwgPSA8PCAiRU9GIjsKLSAgICBnX3NpZ25hbF9uZXcoIiR7Z29iamVjdFNpZ25hbE5hbWV9IiwK
LSAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ29iamVjdENsYXNzKSwKLSAgICAg
ICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKLSAgICAg
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAotICAgICAgICAgICAg
ICAgICBHX1RZUEVfQk9PTEVBTiwgMSwKLSAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9N
X0VWRU5UIHwgR19TSUdOQUxfVFlQRV9TVEFUSUNfU0NPUEUpOwotCi1FT0YKLSAgICBwdXNoKEB0
eHRJbnN0YWxsU2lnbmFscywgJHR4dEluc3RhbGxTaWduYWwpOwotCi0gICAgbXkgJHtsaXN0ZW5l
ck5hbWV9ID0gJG5hbWUgLiAiTGlzdGVuZXIiOwotCi0gICAgbXkgJHR4dEluc3RhbGxFdmVudExp
c3RlbmVyID0gPDwgIkVPRiI7Ci0gICAgV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIob2JqZWN0LCBjb3JlT2JqZWN0LCAiJHtuYW1lfSIsICIke2dvYmplY3RT
aWduYWxOYW1lfSIpOwotRU9GCi0gICAgcHVzaChAdHh0SW5zdGFsbEV2ZW50TGlzdGVuZXJzLCAk
dHh0SW5zdGFsbEV2ZW50TGlzdGVuZXIpOwotCi0gICAgJGltcGxJbmNsdWRlc3sid2Via2l0L1dl
YktpdERPTUV2ZW50LmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siR09iamVjdEV2ZW50TGlz
dGVuZXIuaCJ9ID0gMTsKLX0KLQotbXkgQGV2ZW50U2lnbmFsTmFtZXMgPSAoCi0gICAgIyBVc2Vy
IEludGVyZmFjZSBFdmVudCB0eXBlcwotICAgICJmb2N1cyIsICJibHVyIiwKLSAgICAjIEJhc2lj
IEV2ZW50IHR5cGVzCi0gICAgImxvYWQiLCAidW5sb2FkIiwgImFib3J0IiwgImVycm9yIiwgInNl
bGVjdCIsICJjaGFuZ2UiLCAiZm9ybWNoYW5nZSIsICJzdWJtaXQiLCAicmVzZXQiLAotICAgICJy
ZXNpemUiLCAic2Nyb2xsIiwKLSAgICAjIE1vdXNlIEV2ZW50IHR5cGVzCi0gICAgImNsaWNrIiwg
ImRibGNsaWNrIiwgIm1vdXNlZG93biIsICJtb3VzZXVwIiwKLSAgICAibW91c2Vtb3ZlIiwgIm1v
dXNlb3ZlciIsICJtb3VzZW91dCIsCi0gICAgIyBNb3VzZSBXaGVlbCBFdmVudCB0eXBlcwotICAg
ICJtb3VzZXdoZWVsIiwKLSAgICAjIEtleWJvYXJkIEV2ZW50IHR5cGVzCi0gICAgImtleWRvd24i
LCAia2V5cHJlc3MiLCAia2V5dXAiLAotICAgICMgLS0gRXZlbnRzIG5vdCBpbiB0aGUgc3BlYyBi
dXQgZGVmaW5lZCBpbiBXZWJLaXQKLSAgICAjIE1lZGlhIEV2ZW50IHR5cGVzLAotICAgICJsb2Fk
c3RhcnQiLCAicHJvZ3Jlc3MiLCAic3VzcGVuZCIsICJlbXB0aWVkIiwgInN0YWxsZWQiLCAicGxh
eSIsCi0gICAgImxvYWRlZG1ldGFkYXRhIiwgImxvYWRlZGRhdGEiLCAid2FpdGluZyIsICJwbGF5
aW5nIiwgImNhbnBsYXkiLAotICAgICJjYW5wbGF5dGhyb3VnaCIsICJzZWVraW5nIiwgInNlZWtl
ZCIsICJ0aW1ldXBkYXRlIiwgImVuZGVkIiwKLSAgICAicmF0ZWNoYW5nZSIsICJkdXJhdGlvbmNo
YW5nZSIsICJ2b2x1bWVjaGFuZ2UiLAotICAgICMgRHJhZyBhbmQgRHJvcCBFdmVudCB0eXBlcwot
ICAgICJkcmFnIiwgImRyYWdlbmQiLCAiZHJhZ2VudGVyIiwgImRyYWdsZWF2ZSIsICJkcmFnb3Zl
ciIsICJkcmFnc3RhcnQiLCAiZHJvcCIsCi0gICAgIyBDdXQgYW5kIFBhc3RlIEV2ZW50IHR5cGVz
Ci0gICAgImJlZm9yZWN1dCIsICJjdXQiLCAiYmVmb3JlY29weSIsICJjb3B5IiwgImJlZm9yZXBh
c3RlIiwgInBhc3RlIiwKLSAgICAjIEFuaW1hdGlvbnMKLSAgICAid2Via2l0YW5pbWF0aW9uZW5k
IiwgIndlYmtpdGFuaW1hdGlvbnN0YXJ0IiwgIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsCi0g
ICAgIyBPdGhlcgotICAgICJjb250ZXh0bWVudSIsICJpbnB1dCIsICJmb3JtaW5wdXQiLCAiaW52
YWxpZCIsICJzZWFyY2giLCAic2VsZWN0c3RhcnQiKTsKLQogc3ViIEdlbmVyYXRlUHJvcGVydGll
cyB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUpID0gQF87CiAK
QEAgLTYxMCwxNSArNTI3LDYgQEAgRU9GCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAjIFdlIG5l
ZWQgdG8gZGVmaW5lIGFsbCB0aGUgZXZlbnRzIHRoZXJlIGFyZSBpbiBhbGwgYmFzZSBjbGFzc2Vz
Ci0gICAgIyB0aGF0IGltcGxlbWVudCBFdmVudFRhcmdldC4gRm9yIG5vdyB3ZSBvbmx5IGNhcmUg
YWJvdXQgdGhlc2UKLSAgICAjIHR3by4KLSAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vZGUi
IHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgIGZvcmVhY2ggbXkg
JHNpZ25hbE5hbWUgKEBldmVudFNpZ25hbE5hbWVzKSB7Ci0gICAgICAgICAgICBHZW5lcmF0ZUV2
ZW50TGlzdGVuZXIoJHNpZ25hbE5hbWUsICRvYmplY3QsICRpbnRlcmZhY2VOYW1lKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHB1c2goQGNCb2R5UHJpdiwgIn07XG5cbiIpOwogCiAgICAgJHR4
dEdldFByb3AgPSA8PCAiRU9GIjsKQEAgLTY2OSwxMyArNTc3LDYgQEAgc3RhdGljIHZvaWQgJHts
b3dlckNhc2VJZmFjZU5hbWV9X2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIEVPRgogICAg
IHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKIAotICAgIGlmIChzY2FsYXIgQHR4dElu
c3RhbGxFdmVudExpc3RlbmVycyA+IDApIHsKLSAgICAgICAgJGltcGxDb250ZW50ID0gPDwgIkVP
RiI7Ci0gICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
LT5jb3JlT2JqZWN0KTsKLUVPRgotICAgIHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsK
LSAgICB9Ci0KICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKIEB0eHRJbnN0YWxsRXZlbnRM
aXN0ZW5lcnMKICAgICBpZiAoR19PQkpFQ1RfQ0xBU1MoJHtsb3dlckNhc2VJZmFjZU5hbWV9X3Bh
cmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQpAQCAtODMzLDggKzczNCw3IEBAIHN1YiBHZW5lcmF0
ZUZ1bmN0aW9uIHsKICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KSB7CiAgICAgICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7CiAgICAgICAg
IGlmICgkcGFyYW1JRExUeXBlIGVxICJFdmVudExpc3RlbmVyIiB8fCAkcGFyYW1JRExUeXBlIGVx
ICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikgewotICAgICAgICAgICAgcHVzaChAaEJvZHksICJc
bi8qIFRPRE86IGV2ZW50IGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSAqL1xuXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGNCb2R5LCAiXG4vKiBUT0RPOiBldmVudCBmdW5jdGlvbiAke2Z1bmN0aW9u
TmFtZX0gKi9cblxuIik7CisgICAgICAgICAgICAjIEV2ZW50TGlzdGVuZXJzIGFyZSBoYW5kbGVk
IGVsc2V3aGVyZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhZGRJ
bmNsdWRlSW5Cb2R5KCRwYXJhbUlETFR5cGUpOwpAQCAtMTI4Myw2ICsxMTgzLDcgQEAgc3ViIEdl
bmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5v
ZGUtPm5hbWU7CiAgICAgbXkgJGRlY2FtZWxpemUgPSBGaXhVcERlY2FtZWxpemVkTmFtZShkZWNh
bWVsaXplKCRpbnRlcmZhY2VOYW1lKSk7CiAKKyAgICAkaW1wbEluY2x1ZGVzeyJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50VGFy
Z2V0LmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
fSA9IDE7CiAKQEAgLTEzMDEsOSArMTIwMiwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tXyR7
ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldAog
ICAgIH0KIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBo
YW5kbGVyLCBnYm9vbGVhbiBidWJibGUpCit7CisgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1l
fSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUpOworfQorCiBzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQogewogICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
JHtkZWNhbWVsaXplfV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBp
ZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcjsKIH0KIAogRU9GCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMDhiZjdh
Yi4uMGNmZTg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTAzLTE4
ICBEYXZpZCBLZWlqc2VyICA8a2VpanNlckBnbWFpbC5jb20+IGFuZCBYYW4gTG9wZXogPHhsb3Bl
ekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIE9uLWRlbWFuZCBldmVudC1saXN0ZW5lcnMgZm9yIERPTSBldmVudCBzaWdu
YWxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTY0
OQorCisgICAgICAgICogdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jOiB1cGRhdGUgdW5pdCB0ZXN0
cyBmb3IgbmV3IEFQSXMuCisgICAgICAgIChsb2FkX2V2ZW50X2NhbGxiYWNrKTogZGl0dG8uCisg
ICAgICAgICh0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMpOiBkaXR0by4KKyAgICAgICAgKGxvYWRf
c3RhdHVzX2NhbGxiYWNrKTogZGl0dG8uCisKIDIwMTEtMDMtMTYgIEpvc2VwaCBQZWNvcmFybyAg
PGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cu
YwppbmRleCBiMTU1NThlLi4wZDkzNDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGRvbWRvbXdpbmRvdy5jCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgbG9hZF9ldmVu
dF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21E
b20KIHsKICAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXMod2ViVmlldyk7CiAgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5J
U0hFRCkgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPmRvbVdpbmRvdywgImNs
aWNrLWV2ZW50IiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmaXh0dXJlKTsKKyAgICAg
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01f
RVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xp
Y2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOwogCiAgICAgICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwogICAgICAgICBndGtfdGVzdF93aWRnZXRfY2xpY2soR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgMSwgMCk7CkBAIC0xMjUsNyArMTI1LDcgQEAgc3Rh
dGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19zaWduYWxzKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGQKIAogICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRv
dzsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+ZG9tV2luZG93LCAibG9hZC1ldmVu
dCIsIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLCBmaXh0dXJlKTsKKyAgICB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQo
Zml4dHVyZS0+ZG9tV2luZG93KSwgImxvYWQiLCBHX0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwg
ZmFsc2UsIGZpeHR1cmUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAi
bWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKICAgICBnX3Np
Z25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhsb2FkX2V2ZW50X2NhbGxiYWNrKSwgZml4dHVyZSk7CiAKQEAgLTE3Niw3ICsxNzYs
NyBAQCBzdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21EbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRY
LCBjbGllbnRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50
KSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZWxlbWVudCwgImNsaWNrLWV2ZW50IiwgR19D
QUxMQkFDSyhjbGlja2VkX2NiKSwgZml4dHVyZSk7CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50
KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOwogICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKICAgICAgICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQo
ZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKICAgICB9Ci0tIAoxLjcuMy40Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>