<?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>162603</bug_id>
          
          <creation_ts>2016-09-27 03:50:23 -0700</creation_ts>
          <short_desc>[GTK] Switch to use GMenu internally in the context menu implementation</short_desc>
          <delta_ts>2016-09-30 02:22:35 -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>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162776</dependson>
          <blocked>159631</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>iulian.radu67</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233803</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-27 03:50:23 -0700</bug_when>
    <thetext>I always resisted to do this because GtkAction is superior and by far a lot easier to use than all GAction and GMenu APIs, but soon GTK+ will remove all deprecated APIs, so we need a solution for GtkAction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233805</commentid>
    <comment_count>1</comment_count>
      <attachid>289933</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-27 04:03:24 -0700</bug_when>
    <thetext>Created attachment 289933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233826</commentid>
    <comment_count>2</comment_count>
      <attachid>289933</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-27 05:54:51 -0700</bug_when>
    <thetext>Comment on attachment 289933
Patch

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

Thank you!

&gt; Source/WebKit2/ChangeLog:8
&gt; +        Switch to use GAction instead of GtkAtion internally, but still keeping a GtkAction associated to the GAction,

GtkAtion -&gt; GtkAction

&gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:160
&gt; +    GUniquePtr&lt;char&gt; actionName(g_strdup_printf(&quot;action-%&quot; G_GUINT64_FORMAT, ++actionID));

Nit: since it&apos;s a uint64_t rather than a guint64, I would print it with PRIu64

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h:64
&gt; +    HashMap&lt;unsigned long, void*&gt; m_signalHandlers;

I don&apos;t understand, why use void* instead of GAction*? GAction* would obviously be safer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234276</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-28 00:15:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 289933 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289933&amp;action=review
&gt; 
&gt; Thank you!
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:8
&gt; &gt; +        Switch to use GAction instead of GtkAtion internally, but still keeping a GtkAction associated to the GAction,
&gt; 
&gt; GtkAtion -&gt; GtkAction
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:160
&gt; &gt; +    GUniquePtr&lt;char&gt; actionName(g_strdup_printf(&quot;action-%&quot; G_GUINT64_FORMAT, ++actionID));
&gt; 
&gt; Nit: since it&apos;s a uint64_t rather than a guint64, I would print it with
&gt; PRIu64
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h:64
&gt; &gt; +    HashMap&lt;unsigned long, void*&gt; m_signalHandlers;
&gt; 
&gt; I don&apos;t understand, why use void* instead of GAction*? GAction* would
&gt; obviously be safer.

To avoid casts between GAction - GSimpleAction. I don&apos;t think there any risk in using void*, g_signal_handler_disconnect expects a gpointer, and this is used privately only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234285</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-28 00:51:35 -0700</bug_when>
    <thetext>Committed r206505: &lt;http://trac.webkit.org/changeset/206505&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234289</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-28 00:57:26 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; To avoid casts between GAction - GSimpleAction. I don&apos;t think there any risk
&gt; in using void*, g_signal_handler_disconnect expects a gpointer, and this is
&gt; used privately only.

Well it&apos;s your choice, but I would use casts there as usual.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289933</attachid>
            <date>2016-09-27 04:03:24 -0700</date>
            <delta_ts>2016-09-27 05:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-gmenu-crap.diff</filename>
            <type>text/plain</type>
            <size>26067</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYzBkZWE3Li5iNjZhZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTYtMDktMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFN3aXRjaCB0byB1c2UgR01lbnUgaW50ZXJuYWxseSBpbiB0aGUg
Y29udGV4dCBtZW51IGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdG8gdXNlIEdBY3Rpb24gaW5zdGVhZCBvZiBHdGtB
dGlvbiBpbnRlcm5hbGx5LCBidXQgc3RpbGwga2VlcGluZyBhIEd0a0FjdGlvbiBhc3NvY2lhdGVk
IHRvIHRoZSBHQWN0aW9uLAorICAgICAgICBiZWNhdXNlIG91ciBBUEkgZGVwZW5kcyBvbiBHdGtB
Y3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkNvbnRleHRNZW51SXRlbUd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbUd0azo6V2ViQ29udGV4dE1lbnVJ
dGVtR3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtR3RrOjpjcmVhdGVB
Y3Rpb25JZk5lZWRlZCk6IENyZWF0ZSB0aGUgR0FjdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgR3Rr
QWN0aW9uLiBFbnN1cmUgYQorICAgICAgICB1bmlxdWUgbmFtZSBmb3IgdGhlIEdBY3Rpb24sIHNp
bmNlIHRoZSBuYW1lIG5vdyBtYXR0ZXJzLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViQ29udGV4
dE1lbnVJdGVtR3RrLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbUd0azo6
Z3RrQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtR3RrOjpnQWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtR3RrOjpzdWJtZW51SXRl
bXMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNvbnRleHRNZW51SXRlbUFjdGl2YXRlZENhbGxi
YWNrKTogVXNlIHRoZSBHQWN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVBy
b3h5R3RrOjphcHBlbmQpOiBDcmVhdGUgYSBuZXcgR01lbnVJdGVtIGZvciB0aGUgR0FjdGlvbi4K
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6YnVpbGRNZW51KTogQnVp
bGQgYSBHTWVudSBmb3IgdGhlIGdpdmVuIGl0ZW1zLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0TWVudVByb3h5R3RrOjpwb3B1bGF0ZSk6IENyZWF0ZSBhIEdNZW51IGFuZCBiaW5kIGl0IG90
IHRoZSBHdGtNZW51LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpX
ZWJDb250ZXh0TWVudVByb3h5R3RrKTogQ3JlYXRlIHRoZSBHQWN0aW9uR3JvdXAgZm9yIHRoZSBt
ZW51LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjp+V2ViQ29udGV4
dE1lbnVQcm94eUd0ayk6IFJlbW92ZSB0aGUgYWN0aW9uIGdyb3VwIGZyb20gdGhlIEd0a01lbnUu
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmg6CisKIDIw
MTYtMDktMjYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgRGVsZXRlIHNvbWUgdW51c2VkIGNvZGUgZnJvbSByMjAyNjk1CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkNvbnRleHRNZW51SXRlbUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkNvbnRleHRNZW51SXRlbUd0ay5jcHAKaW5kZXggNGJhZjYz
Zi4uYWY0YmFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb250
ZXh0TWVudUl0ZW1HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcApAQCAtMTIyLDQ0ICsxMjIsNjAgQEAgV2ViQ29udGV4dE1lbnVJ
dGVtR3RrOjpXZWJDb250ZXh0TWVudUl0ZW1HdGsoQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBD
b250ZXh0TWUKICAgICA6IFdlYkNvbnRleHRNZW51SXRlbURhdGEodHlwZSwgYWN0aW9uLCB0aXRs
ZSwgZW5hYmxlZCwgY2hlY2tlZCkKIHsKICAgICBBU1NFUlQodHlwZSAhPSBTdWJtZW51VHlwZSk7
Ci0gICAgY3JlYXRlR3RrQWN0aW9uSWZOZWVkZWQoKTsKKyAgICBjcmVhdGVBY3Rpb25JZk5lZWRl
ZCgpOwogfQogCiBXZWJDb250ZXh0TWVudUl0ZW1HdGs6OldlYkNvbnRleHRNZW51SXRlbUd0ayhj
b25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBkYXRhKQogICAgIDogV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YShkYXRhLnR5cGUoKSA9PSBTdWJtZW51VHlwZSA/IEFjdGlvblR5cGUgOiBkYXRhLnR5
cGUoKSwgZGF0YS5hY3Rpb24oKSwgZGF0YS50aXRsZSgpLCBkYXRhLmVuYWJsZWQoKSwgZGF0YS5j
aGVja2VkKCkpCiB7Ci0gICAgY3JlYXRlR3RrQWN0aW9uSWZOZWVkZWQoKTsKKyAgICBjcmVhdGVB
Y3Rpb25JZk5lZWRlZCgpOwogfQogCiBXZWJDb250ZXh0TWVudUl0ZW1HdGs6OldlYkNvbnRleHRN
ZW51SXRlbUd0ayhjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1HdGsmIGRhdGEsIFZlY3RvcjxXZWJD
b250ZXh0TWVudUl0ZW1HdGs+JiYgc3VibWVudSkKICAgICA6IFdlYkNvbnRleHRNZW51SXRlbURh
dGEoQWN0aW9uVHlwZSwgZGF0YS5hY3Rpb24oKSwgZGF0YS50aXRsZSgpLCBkYXRhLmVuYWJsZWQo
KSwgZmFsc2UpCiB7Ci0gICAgbV9hY3Rpb24gPSBkYXRhLmd0a0FjdGlvbigpOworICAgIG1fZ0Fj
dGlvbiA9IEdfU0lNUExFX0FDVElPTihkYXRhLmdBY3Rpb24oKSk7CisgICAgbV9ndGtBY3Rpb24g
PSBkYXRhLmd0a0FjdGlvbigpOwogICAgIG1fc3VibWVudUl0ZW1zID0gV1RGTW92ZShzdWJtZW51
KTsKIH0KIAogV2ViQ29udGV4dE1lbnVJdGVtR3RrOjpXZWJDb250ZXh0TWVudUl0ZW1HdGsoR3Rr
QWN0aW9uKiBhY3Rpb24pCiAgICAgOiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhKEdUS19JU19UT0dH
TEVfQUNUSU9OKGFjdGlvbikgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnLCBTdHJpbmc6OmZyb21VVEY4KGd0a19hY3Rp
b25fZ2V0X2xhYmVsKGFjdGlvbikpLCBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSwg
R1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSA/IGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3Rp
dmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkgOiBmYWxzZSkKIHsKLSAgICBtX2FjdGlvbiA9
IGFjdGlvbjsKKyAgICBtX2d0a0FjdGlvbiA9IGFjdGlvbjsKKyAgICBjcmVhdGVBY3Rpb25JZk5l
ZWRlZCgpOworICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QobV9nQWN0aW9uLmdl
dCgpKSwgIndlYmtpdC1ndGstYWN0aW9uIiwgZ19vYmplY3RfcmVmKG1fZ3RrQWN0aW9uKSwgZ19v
YmplY3RfdW5yZWYpOwogfQogCiBXZWJDb250ZXh0TWVudUl0ZW1HdGs6On5XZWJDb250ZXh0TWVu
dUl0ZW1HdGsoKQogewogfQogCi12b2lkIFdlYkNvbnRleHRNZW51SXRlbUd0azo6Y3JlYXRlR3Rr
QWN0aW9uSWZOZWVkZWQoKQordm9pZCBXZWJDb250ZXh0TWVudUl0ZW1HdGs6OmNyZWF0ZUFjdGlv
bklmTmVlZGVkKCkKIHsKICAgICBpZiAodHlwZSgpID09IFNlcGFyYXRvclR5cGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdVbmlxdWVQdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmlu
dGYoImNvbnRleHQtbWVudS1hY3Rpb24tJWQiLCBhY3Rpb24oKSkpOwotICAgIGlmICh0eXBlKCkg
PT0gQ2hlY2thYmxlQWN0aW9uVHlwZSkgewotICAgICAgICBtX2FjdGlvbiA9IGFkb3B0R1JlZihH
VEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZSgp
LnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24o
YWN0aW9uKCkpKSkpOwotICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKG1fYWN0aW9uLmdldCgpKSwgY2hlY2tlZCgpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9hY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQo
KSwgdGl0bGUoKS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0
aW9uKGFjdGlvbigpKSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShtX2FjdGlvbi5n
ZXQoKSwgZW5hYmxlZCgpKTsKKyAgICBzdGF0aWMgdWludDY0X3QgYWN0aW9uSUQgPSAwOworICAg
IEdVbmlxdWVQdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImFjdGlvbi0lIiBH
X0dVSU5UNjRfRk9STUFULCArK2FjdGlvbklEKSk7CisgICAgaWYgKHR5cGUoKSA9PSBDaGVja2Fi
bGVBY3Rpb25UeXBlKQorICAgICAgICBtX2dBY3Rpb24gPSBhZG9wdEdSZWYoZ19zaW1wbGVfYWN0
aW9uX25ld19zdGF0ZWZ1bChhY3Rpb25OYW1lLmdldCgpLCBudWxscHRyLCBnX3ZhcmlhbnRfbmV3
X2Jvb2xlYW4oY2hlY2tlZCgpKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9nQWN0aW9uID0gYWRv
cHRHUmVmKGdfc2ltcGxlX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgbnVsbHB0cikpOwor
ICAgIGdfc2ltcGxlX2FjdGlvbl9zZXRfZW5hYmxlZChtX2dBY3Rpb24uZ2V0KCksIGVuYWJsZWQo
KSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIEd0a0FjdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkgb25seS4KKyAgICBpZiAoIW1fZ3RrQWN0aW9uKSB7CisgICAgICAgIGlmICh0eXBlKCkg
PT0gQ2hlY2thYmxlQWN0aW9uVHlwZSkgeworICAgICAgICAgICAgbV9ndGtBY3Rpb24gPSBHVEtf
QUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZSgpLnV0
ZjgoKS5kYXRhKCksIG51bGxwdHIsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0
aW9uKCkpKSk7CisgICAgICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKG1fZ3RrQWN0aW9uKSwgY2hlY2tlZCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2d0a0FjdGlvbiA9IGd0a19hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCks
IHRpdGxlKCkudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlv
bihhY3Rpb24oKSkpOworICAgICAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUobV9ndGtBY3Rp
b24sIGVuYWJsZWQoKSk7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qo
bV9nQWN0aW9uLmdldCgpKSwgIndlYmtpdC1ndGstYWN0aW9uIiwgbV9ndGtBY3Rpb24sIGdfb2Jq
ZWN0X3VucmVmKTsKKyAgICB9CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChtX2dBY3Rp
b24uZ2V0KCksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soZ3RrX2FjdGlvbl9hY3RpdmF0ZSksIG1f
Z3RrQWN0aW9uLCBHX0NPTk5FQ1RfU1dBUFBFRCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb250ZXh0TWVudUl0
ZW1HdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29udGV4dE1lbnVJdGVtR3Rr
LmgKaW5kZXggYWE1YmIwZC4uMWRmOGIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJDb250ZXh0TWVudUl0ZW1HdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL1dlYkNvbnRleHRNZW51SXRlbUd0ay5oCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVk
ZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBfR3RrQWN0aW9uIEd0a0Fj
dGlvbjsKK3R5cGVkZWYgc3RydWN0IF9HQWN0aW9uIEdBY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBf
R1NpbXBsZUFjdGlvbiBHU2ltcGxlQWN0aW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAt
NDUsMTMgKzQ3LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgU3VibWVu
dVR5cGUgaW50ZXJuYWxseSwgc28gY2hlY2sgaWYgd2UgaGF2ZSBzdWJtZW51IGl0ZW1zLgogICAg
IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vi
bWVudUl0ZW1zLmlzRW1wdHkoKSA/IFdlYkNvbnRleHRNZW51SXRlbURhdGE6OnR5cGUoKSA6IFdl
YkNvcmU6OlN1Ym1lbnVUeXBlOyB9Ci0gICAgR3RrQWN0aW9uKiBndGtBY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2FjdGlvbi5nZXQoKTsgfQorICAgIEd0a0FjdGlvbiogZ3RrQWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9ndGtBY3Rpb247IH0KKyAgICBHQWN0aW9uKiBnQWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQWN0aW9uKj4obV9nQWN0aW9uLmdldCgpKTsgfQog
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1HdGs+JiBzdWJtZW51SXRlbXMoKSBj
b25zdCB7IHJldHVybiBtX3N1Ym1lbnVJdGVtczsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY3Jl
YXRlR3RrQWN0aW9uSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNyZWF0ZUFjdGlvbklmTmVlZGVkKCk7
CiAKLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gbV9hY3Rpb247CisgICAgR1JlZlB0cjxHU2ltcGxl
QWN0aW9uPiBtX2dBY3Rpb247CisgICAgR3RrQWN0aW9uKiBtX2d0a0FjdGlvbiB7IG51bGxwdHIg
fTsKICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiBtX3N1Ym1lbnVJdGVtczsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1l
bnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRN
ZW51UHJveHlHdGsuY3BwCmluZGV4IDIzYWNiZWQuLjVkNjkxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcApA
QCAtMzYsMTIzICszNiwxMDEgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgor
I2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCi0KIHN0YXRpYyBjb25zdCBjaGFyKiBnQ29udGV4dE1lbnVBY3Rp
b25JZCA9ICJ3ZWJraXQtY29udGV4dC1tZW51LWFjdGlvbiI7CitzdGF0aWMgY29uc3QgY2hhciog
Z0NvbnRleHRNZW51VGl0bGUgPSAid2Via2l0LWNvbnRleHQtbWVudS10aXRsZSI7CitzdGF0aWMg
Y29uc3QgY2hhciogZ0NvbnRleHRNZW51SXRlbUdyb3VwID0gIndlYmtpdENvbnRleHRNZW51IjsK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0
aWMgdm9pZCBjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayhHdGtBY3Rpb24qIGFjdGlv
biwgV2ViUGFnZVByb3h5KiBwYWdlKQorc3RhdGljIHZvaWQgY29udGV4dE1lbnVJdGVtQWN0aXZh
dGVkQ2FsbGJhY2soR0FjdGlvbiogYWN0aW9uLCBHVmFyaWFudCosIFdlYlBhZ2VQcm94eSogcGFn
ZSkKIHsKLSAgICBnYm9vbGVhbiBpc1RvZ2dsZSA9IEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlv
bik7CisgICAgYXV0byogc3RhdGVUeXBlID0gZ19hY3Rpb25fZ2V0X3N0YXRlX3R5cGUoYWN0aW9u
KTsKKyAgICBnYm9vbGVhbiBpc1RvZ2dsZSA9IHN0YXRlVHlwZSAmJiBnX3ZhcmlhbnRfdHlwZV9l
cXVhbChzdGF0ZVR5cGUsIEdfVkFSSUFOVF9UWVBFX0JPT0xFQU4pOworICAgIEdSZWZQdHI8R1Zh
cmlhbnQ+IHN0YXRlID0gaXNUb2dnbGUgPyBhZG9wdEdSZWYoZ19hY3Rpb25fZ2V0X3N0YXRlKGFj
dGlvbikpIDogbnVsbHB0cjsKICAgICBXZWJDb250ZXh0TWVudUl0ZW1EYXRhIGl0ZW0oaXNUb2dn
bGUgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlwZSwKICAgICAgICAgc3RhdGljX2Nh
c3Q8Q29udGV4dE1lbnVBY3Rpb24+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChhY3Rpb24pLCBnQ29udGV4dE1lbnVBY3Rpb25JZCkpKSwKLSAgICAgICAgU3RyaW5n
Ojpmcm9tVVRGOChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pKSwgZ3RrX2FjdGlvbl9nZXRf
c2Vuc2l0aXZlKGFjdGlvbiksCi0gICAgICAgIGlzVG9nZ2xlID8gZ3RrX3RvZ2dsZV9hY3Rpb25f
Z2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSA6IGZhbHNlKTsKKyAgICAgICAg
U3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1QoYWN0aW9uKSwgZ0NvbnRleHRNZW51VGl0bGUpKSksIGdfYWN0aW9uX2dldF9l
bmFibGVkKGFjdGlvbiksCisgICAgICAgIHN0YXRlID8gZ192YXJpYW50X2dldF9ib29sZWFuKHN0
YXRlLmdldCgpKSA6IGZhbHNlKTsKICAgICBwYWdlLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChp
dGVtKTsKIH0KIAotc3RhdGljIHZvaWQgY29udGV4dE1lbnVJdGVtVmlzaWJpbGl0eUNoYW5nZWQo
R3RrQWN0aW9uKiwgR1BhcmFtU3BlYyosIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGNvbnRleHRN
ZW51UHJveHkpCit2b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmFwcGVuZChHTWVudSogbWVu
dSwgY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtR3RrJiBtZW51SXRlbSkKIHsKLSAgICBHdGtNZW51
KiBtZW51ID0gY29udGV4dE1lbnVQcm94eS0+Z3RrTWVudSgpOwotICAgIGlmICghbWVudSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR1VuaXF1ZVB0cjxHTGlzdD4gaXRlbXMoZ3RrX2NvbnRhaW5l
cl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGJvb2wgcHJldmlvdXNW
aXNpYmxlSXRlbUlzTm90QVNlcGFyYXRvciA9IGZhbHNlOwotICAgIEd0a1dpZGdldCogbGFzdEl0
ZW1WaXNpYmxlU2VwYXJhdG9yID0gMDsKLSAgICBmb3IgKEdMaXN0KiBpdGVyID0gaXRlbXMuZ2V0
KCk7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgewotICAgICAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IEdUS19XSURHRVQoaXRlci0+ZGF0YSk7Ci0KLSAgICAgICAgaWYgKEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKHdpZGdldCkpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1Zp
c2libGVJdGVtSXNOb3RBU2VwYXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9z
aG93KHdpZGdldCk7Ci0gICAgICAgICAgICAgICAgbGFzdEl0ZW1WaXNpYmxlU2VwYXJhdG9yID0g
d2lkZ2V0OwotICAgICAgICAgICAgICAgIHByZXZpb3VzVmlzaWJsZUl0ZW1Jc05vdEFTZXBhcmF0
b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGd0a193aWRn
ZXRfaGlkZSh3aWRnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUod2lkZ2V0KSkgewotICAgICAgICAgICAgbGFzdEl0ZW1WaXNpYmxlU2VwYXJhdG9yID0gMDsK
LSAgICAgICAgICAgIHByZXZpb3VzVmlzaWJsZUl0ZW1Jc05vdEFTZXBhcmF0b3IgPSB0cnVlOwot
ICAgICAgICB9CisgICAgdW5zaWduZWQgbG9uZyBzaWduYWxIYW5kbGVySWQ7CisgICAgR1JlZlB0
cjxHTWVudUl0ZW0+IGdNZW51SXRlbTsKKyAgICBHQWN0aW9uKiBhY3Rpb24gPSBtZW51SXRlbS5n
QWN0aW9uKCk7CisgICAgQVNTRVJUKGFjdGlvbik7CisgICAgZ19hY3Rpb25fbWFwX2FkZF9hY3Rp
b24oR19BQ1RJT05fTUFQKGd0a193aWRnZXRfZ2V0X2FjdGlvbl9ncm91cChHVEtfV0lER0VUKG1f
bWVudSksIGdDb250ZXh0TWVudUl0ZW1Hcm91cCkpLCBhY3Rpb24pOworCisgICAgc3dpdGNoICht
ZW51SXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEFjdGlvblR5cGU6CisgICAgY2FzZSBDaGVja2Fi
bGVBY3Rpb25UeXBlOiB7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0
cmR1cF9wcmludGYoIiVzLiVzIiwgZ0NvbnRleHRNZW51SXRlbUdyb3VwLCBnX2FjdGlvbl9nZXRf
bmFtZShhY3Rpb24pKSk7CisgICAgICAgIGdNZW51SXRlbSA9IGFkb3B0R1JlZihnX21lbnVfaXRl
bV9uZXcobWVudUl0ZW0udGl0bGUoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKSk7CisgICAgICAg
IGdfbWVudV9pdGVtX3NldF9hY3Rpb25fYW5kX3RhcmdldF92YWx1ZShnTWVudUl0ZW0uZ2V0KCks
IGFjdGlvbk5hbWUuZ2V0KCksIG51bGxwdHIpOworCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGFjdGlvbiksIGdDb250ZXh0TWVudUFjdGlvbklkLCBHSU5UX1RPX1BPSU5URVIo
bWVudUl0ZW0uYWN0aW9uKCkpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09C
SkVDVChhY3Rpb24pLCBnQ29udGV4dE1lbnVUaXRsZSwgZ19zdHJkdXAobWVudUl0ZW0udGl0bGUo
KS51dGY4KCkuZGF0YSgpKSwgZ19mcmVlKTsKKyAgICAgICAgc2lnbmFsSGFuZGxlcklkID0gZ19z
aWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVJ
dGVtQWN0aXZhdGVkQ2FsbGJhY2spLCBtX3BhZ2UpOworICAgICAgICBtX3NpZ25hbEhhbmRsZXJz
LnNldChzaWduYWxIYW5kbGVySWQsIGFjdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFN1Ym1lbnVUeXBlOiB7CisgICAgICAgIEdSZWZQdHI8R01lbnU+IHN1Ym1lbnUgPSBi
dWlsZE1lbnUobWVudUl0ZW0uc3VibWVudUl0ZW1zKCkpOworICAgICAgICBnTWVudUl0ZW0gPSBh
ZG9wdEdSZWYoZ19tZW51X2l0ZW1fbmV3X3N1Ym1lbnUobWVudUl0ZW0udGl0bGUoKS51dGY4KCku
ZGF0YSgpLCBHX01FTlVfTU9ERUwoc3VibWVudS5nZXQoKSkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgU2VwYXJhdG9yVHlwZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChsYXN0SXRlbVZpc2libGVTZXBh
cmF0b3IpCi0gICAgICAgIGd0a193aWRnZXRfaGlkZShsYXN0SXRlbVZpc2libGVTZXBhcmF0b3Ip
OworICAgIGdfbWVudV9hcHBlbmRfaXRlbShtZW51LCBnTWVudUl0ZW0uZ2V0KCkpOwogfQogCi12
b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmFwcGVuZChHdGtNZW51KiBtZW51LCBjb25zdCBX
ZWJDb250ZXh0TWVudUl0ZW1HdGsmIG1lbnVJdGVtKQorR1JlZlB0cjxHTWVudT4gV2ViQ29udGV4
dE1lbnVQcm94eUd0azo6YnVpbGRNZW51KGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1H
dGs+JiBpdGVtcykKIHsKLSAgICB1bnNpZ25lZCBsb25nIHNpZ25hbEhhbmRsZXJJZDsKLSAgICBH
dGtXaWRnZXQqIGd0a01lbnVJdGVtOwotICAgIGlmIChHdGtBY3Rpb24qIGFjdGlvbiA9IG1lbnVJ
dGVtLmd0a0FjdGlvbigpKSB7Ci0gICAgICAgIGd0a01lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVh
dGVfbWVudV9pdGVtKGFjdGlvbik7Ci0KLSAgICAgICAgc3dpdGNoIChtZW51SXRlbS50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBBY3Rpb25UeXBlOgotICAgICAgICBjYXNlIENoZWNrYWJsZUFjdGlv
blR5cGU6Ci0gICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCBn
Q29udGV4dE1lbnVBY3Rpb25JZCwgR0lOVF9UT19QT0lOVEVSKG1lbnVJdGVtLmFjdGlvbigpKSk7
Ci0gICAgICAgICAgICBzaWduYWxIYW5kbGVySWQgPSBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwg
ImFjdGl2YXRlIiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayks
IG1fcGFnZSk7Ci0gICAgICAgICAgICBtX3NpZ25hbEhhbmRsZXJzLnNldChzaWduYWxIYW5kbGVy
SWQsIGFjdGlvbik7Ci0gICAgICAgICAgICBzaWduYWxIYW5kbGVySWQgPSBnX3NpZ25hbF9jb25u
ZWN0KGFjdGlvbiwgIm5vdGlmeTo6dmlzaWJsZSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVJdGVt
VmlzaWJpbGl0eUNoYW5nZWQpLCB0aGlzKTsKLSAgICAgICAgICAgIG1fc2lnbmFsSGFuZGxlcnMu
c2V0KHNpZ25hbEhhbmRsZXJJZCwgYWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFN1Ym1lbnVUeXBlOiB7Ci0gICAgICAgICAgICBzaWduYWxIYW5kbGVySWQgPSBnX3Np
Z25hbF9jb25uZWN0KGFjdGlvbiwgIm5vdGlmeTo6dmlzaWJsZSIsIEdfQ0FMTEJBQ0soY29udGV4
dE1lbnVJdGVtVmlzaWJpbGl0eUNoYW5nZWQpLCB0aGlzKTsKLSAgICAgICAgICAgIG1fc2lnbmFs
SGFuZGxlcnMuc2V0KHNpZ25hbEhhbmRsZXJJZCwgYWN0aW9uKTsKLSAgICAgICAgICAgIEd0a01l
bnUqIHN1Ym1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtZW51SXRlbS5zdWJtZW51SXRlbXMoKSkKLSAgICAgICAgICAg
ICAgICBhcHBlbmQoc3VibWVudSwgaXRlbSk7Ci0gICAgICAgICAgICBndGtfbWVudV9pdGVtX3Nl
dF9zdWJtZW51KEdUS19NRU5VX0lURU0oZ3RrTWVudUl0ZW0pLCBHVEtfV0lER0VUKHN1Ym1lbnUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VwYXJhdG9y
VHlwZToKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobWVudUl0ZW0udHlw
ZSgpID09IFNlcGFyYXRvclR5cGUpOwotICAgICAgICBndGtNZW51SXRlbSA9IGd0a19zZXBhcmF0
b3JfbWVudV9pdGVtX25ldygpOworICAgIEdSZWZQdHI8R01lbnU+IG1lbnUgPSBhZG9wdEdSZWYo
Z19tZW51X25ldygpKTsKKyAgICBHTWVudSogc2VjdGlvbk1lbnUgPSBtZW51LmdldCgpOworICAg
IGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgIGlmIChpdGVtLnR5cGUo
KSA9PSBTZXBhcmF0b3JUeXBlKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdNZW51PiBzZWN0aW9u
ID0gYWRvcHRHUmVmKGdfbWVudV9uZXcoKSk7CisgICAgICAgICAgICBnX21lbnVfYXBwZW5kX3Nl
Y3Rpb24obWVudS5nZXQoKSwgbnVsbHB0ciwgR19NRU5VX01PREVMKHNlY3Rpb24uZ2V0KCkpKTsK
KyAgICAgICAgICAgIHNlY3Rpb25NZW51ID0gc2VjdGlvbi5nZXQoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBhcHBlbmQoc2VjdGlvbk1lbnUsIGl0ZW0pOwogICAgIH0KIAotICAgIGd0
a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgZ3RrTWVudUl0ZW0pOwot
ICAgIGd0a193aWRnZXRfc2hvdyhndGtNZW51SXRlbSk7CisgICAgcmV0dXJuIG1lbnU7CiB9CiAK
LS8vIFBvcHVsYXRlIHRoZSBjb250ZXh0IG1lbnUgZW5zdXJpbmcgdGhhdDoKLS8vICAtIFRoZXJl
IGFyZW4ndCBzZXBhcmF0b3JzIG5leHQgdG8gZWFjaCBvdGhlci4KLS8vICAtIFRoZXJlIGFyZW4n
dCBzZXBhcmF0b3JzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lbnUuCi0vLyAgLSBUaGVyZSBh
cmVuJ3Qgc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBtZW51Lgotdm9pZCBXZWJDb250ZXh0
TWVudVByb3h5R3RrOjpwb3B1bGF0ZShWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiYgaXRl
bXMpCit2b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxX
ZWJDb250ZXh0TWVudUl0ZW1HdGs+JiBpdGVtcykKIHsKLSAgICBib29sIHByZXZpb3VzSXNTZXBh
cmF0b3IgPSBmYWxzZTsKLSAgICBib29sIGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgV2ViQ29udGV4dE1lbnVJ
dGVtR3RrJiBtZW51SXRlbSA9IGl0ZW1zLmF0KGkpOwotICAgICAgICBpZiAobWVudUl0ZW0udHlw
ZSgpID09IFNlcGFyYXRvclR5cGUpIHsKLSAgICAgICAgICAgIHByZXZpb3VzSXNTZXBhcmF0b3Ig
PSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cHJldmlvdXNJc1NlcGFyYXRvciAmJiAhaXNFbXB0eSkKLSAgICAgICAgICAgIGFwcGVuZChtX21l
bnUsIGl0ZW1zLmF0KGkgLSAxKSk7Ci0gICAgICAgIHByZXZpb3VzSXNTZXBhcmF0b3IgPSBmYWxz
ZTsKLQotICAgICAgICBhcHBlbmQobV9tZW51LCBtZW51SXRlbSk7Ci0gICAgICAgIGlzRW1wdHkg
PSBmYWxzZTsKLSAgICB9CisgICAgR1JlZlB0cjxHTWVudT4gbWVudSA9IGJ1aWxkTWVudShpdGVt
cyk7CisgICAgZ3RrX21lbnVfc2hlbGxfYmluZF9tb2RlbChHVEtfTUVOVV9TSEVMTChtX21lbnUp
LCBHX01FTlVfTU9ERUwobWVudS5nZXQoKSksIG51bGxwdHIsIFRSVUUpOwogfQogCiB2b2lkIFdl
YkNvbnRleHRNZW51UHJveHlHdGs6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29u
dGV4dE1lbnVJdGVtPj4mIGl0ZW1zKQogeworICAgIEdSZWZQdHI8R01lbnU+IG1lbnUgPSBhZG9w
dEdSZWYoZ19tZW51X25ldygpKTsKKyAgICBHTWVudSogc2VjdGlvbk1lbnUgPSBtZW51LmdldCgp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKSB7Ci0gICAgICAgIFdlYkNvbnRl
eHRNZW51SXRlbUd0ayBtZW51aXRlbShpdGVtLT5kYXRhKCkpOwotICAgICAgICBhcHBlbmQobV9t
ZW51LCBtZW51aXRlbSk7CisgICAgICAgIGlmIChpdGVtLT5kYXRhKCkudHlwZSgpID09IFNlcGFy
YXRvclR5cGUpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R01lbnU+IHNlY3Rpb24gPSBhZG9wdEdS
ZWYoZ19tZW51X25ldygpKTsKKyAgICAgICAgICAgIGdfbWVudV9hcHBlbmRfc2VjdGlvbihtZW51
LmdldCgpLCBudWxscHRyLCBHX01FTlVfTU9ERUwoc2VjdGlvbi5nZXQoKSkpOworICAgICAgICAg
ICAgc2VjdGlvbk1lbnUgPSBzZWN0aW9uLmdldCgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgV2ViQ29udGV4dE1lbnVJdGVtR3RrIG1lbnVpdGVtKGl0ZW0tPmRhdGEoKSk7CisgICAg
ICAgICAgICBhcHBlbmQoc2VjdGlvbk1lbnUsIG1lbnVpdGVtKTsKKyAgICAgICAgfQogICAgIH0K
KyAgICBndGtfbWVudV9zaGVsbF9iaW5kX21vZGVsKEdUS19NRU5VX1NIRUxMKG1fbWVudSksIEdf
TUVOVV9NT0RFTChtZW51LmdldCgpKSwgbnVsbHB0ciwgVFJVRSk7CiB9CiAKIHZvaWQgV2ViQ29u
dGV4dE1lbnVQcm94eUd0azo6c2hvdygpCkBAIC0xOTUsNiArMTczLDggQEAgV2ViQ29udGV4dE1l
bnVQcm94eUd0azo6V2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqIHdlYlZpZXcsIFdl
YlBhZ2VQcm94eSYKICAgICAsIG1fcGFnZSgmcGFnZSkKICAgICAsIG1fbWVudShHVEtfTUVOVShn
dGtfbWVudV9uZXcoKSkpCiB7CisgICAgR1JlZlB0cjxHU2ltcGxlQWN0aW9uR3JvdXA+IGdyb3Vw
ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FjdGlvbl9ncm91cF9uZXcoKSk7CisgICAgZ3RrX3dpZGdl
dF9pbnNlcnRfYWN0aW9uX2dyb3VwKEdUS19XSURHRVQobV9tZW51KSwgZ0NvbnRleHRNZW51SXRl
bUdyb3VwLCBHX0FDVElPTl9HUk9VUChncm91cC5nZXQoKSkpOwogICAgIHdlYmtpdFdlYlZpZXdC
YXNlU2V0QWN0aXZlQ29udGV4dE1lbnVQcm94eShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZp
ZXcpLCB0aGlzKTsKIH0KIApAQCAtMjA2LDYgKzE4Niw3IEBAIFdlYkNvbnRleHRNZW51UHJveHlH
dGs6On5XZWJDb250ZXh0TWVudVByb3h5R3RrKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KGhhbmRsZXIudmFsdWUsIGhhbmRsZXIua2V5KTsKICAgICBtX3NpZ25hbEhhbmRs
ZXJzLmNsZWFyKCk7CiAKKyAgICBndGtfd2lkZ2V0X2luc2VydF9hY3Rpb25fZ3JvdXAoR1RLX1dJ
REdFVChtX21lbnUpLCAid2Via2l0Q29udGV4dE1lbnUiLCBudWxscHRyKTsKICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX21lbnUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuaAppbmRleCBmYmUz
NGJhLi4wOTY4YWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YkNvbnRleHRNZW51UHJveHlHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRNZW51UHJveHlHdGsuaApAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgIldl
YkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5
cGVkZWYgc3RydWN0IF9HTWVudSBHTWVudTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ0
LDEyICs0NywxMyBAQCBwdWJsaWM6CiAgICAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtXaWRn
ZXQqLCBXZWJQYWdlUHJveHkmLCBjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJiwgY29uc3Qg
VXNlckRhdGEmKTsKICAgICB+V2ViQ29udGV4dE1lbnVQcm94eUd0aygpOwogCi0gICAgdm9pZCBw
b3B1bGF0ZShWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiYpOworICAgIHZvaWQgcG9wdWxh
dGUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbUd0az4mKTsKICAgICBHdGtNZW51KiBn
dGtNZW51KCkgY29uc3QgeyByZXR1cm4gbV9tZW51OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBz
aG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoR3RrTWVudSosIGNvbnN0IFdlYkNvbnRl
eHRNZW51SXRlbUd0ayYpOworICAgIHZvaWQgYXBwZW5kKEdNZW51KiwgY29uc3QgV2ViQ29udGV4
dE1lbnVJdGVtR3RrJik7CisgICAgR1JlZlB0cjxHTWVudT4gYnVpbGRNZW51KGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1HdGs+Jik7CiAgICAgdm9pZCBwb3B1bGF0ZShjb25zdCBWZWN0
b3I8UmVmUHRyPFdlYkNvbnRleHRNZW51SXRlbT4+Jik7CiAgICAgc3RhdGljIHZvaWQgbWVudVBv
c2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4qLCBXZWJDb250
ZXh0TWVudVByb3h5R3RrKik7CiAKQEAgLTU3LDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKICAgICBHdGtNZW51KiBtX21lbnU7CiAgICAgV2ViQ29yZTo6SW50
UG9pbnQgbV9wb3B1cFBvc2l0aW9uOwotICAgIEhhc2hNYXA8dW5zaWduZWQgbG9uZywgR3RrQWN0
aW9uKj4gbV9zaWduYWxIYW5kbGVyczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIHZvaWQq
PiBtX3NpZ25hbEhhbmRsZXJzOwogfTsKIAogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzE1NGMwMC4uNzQ3YjhjZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2
LTA5LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXSBTd2l0Y2ggdG8gdXNlIEdNZW51IGludGVybmFsbHkgaW4gdGhlIGNvbnRleHQg
bWVudSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlIHNtYXJ0IHNlcGFyYXRvcnMgdGVzdCwgc2luY2UgdGhhdCdzIG5v
dyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgR1RLKy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudVdlYkV4dGVuc2lvbk1lbnUpOiBEZWxldGVkLgor
CiAyMDE2LTA5LTI2ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBTaWVycmEgdG8gdGhlIGZsYWtpbmVzcyBkYXNoYm9hcmQuCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3Bw
CmluZGV4IDdjMGEwZjkuLmNjNzhlMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBAIC03NjEsMTE1ICs3
NjEsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQoQ29udGV4dE1lbnVE
aXNtaXNzZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludAogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZGlz
bWlzc2VkKTsKIH0KIAotY2xhc3MgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OiBwdWJs
aWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCk7Ci0KLSAgICBib29sIGNvbnRleHRNZW51
KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0
UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChj
b250ZXh0TWVudSk7Ci0KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVf
YXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3Rv
Y2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spKTsKLSAgICAgICAg
d2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fRk9SV0FSRCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9h
cHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9j
a19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSkpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0
aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCkpOwotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVf
YXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRv
cigpKTsKLQotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR3RrTWVudSogc2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpCi0g
ICAgewotICAgICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotICAg
ICAgICByZXR1cm4gZ2V0UG9wdXBNZW51KCk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVz
dENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRH
VEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHdGtNZW51KiBtZW51ID0gdGVz
dC0+c2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpOwotICAgIGdfYXNzZXJ0KG1lbnUpOwot
Ci0gICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgbm90IGFkZGVkIHRv
IHRoZSBjb250ZXh0IG1lbnUuCi0gICAgR1VuaXF1ZVB0cjxHTGlzdD4gbWVudUl0ZW1zKGd0a19j
b250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBnX2Fzc2Vy
dF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOwotICAgIEd0
a1dpZGdldCogaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDQpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotCi0gICAgLy8gSGlkaW5nIGEgbWVudSBpdGVtIGJldHdlZW4gdHdvIHNlcGFyYXRvcnMg
aGlkZXMgdGhlIGZvbGxvd2luZyBzZXBhcmF0b3IuCi0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBn
dGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3Rf
bnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2li
bGUoYWN0aW9uLCBGQUxTRSk7Ci0gICAgbWVudUl0ZW1zLnJlc2V0KGd0a19jb250YWluZXJfZ2V0
X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdf
bGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOwotICAgIGl0ZW0gPSBHVEtfV0lE
R0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCgh
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgMSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQo
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgMykpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGd0a19hY3Rpb25f
c2V0X3Zpc2libGUoYWN0aW9uLCBUUlVFKTsKLQotICAgIC8vIFNob3dpbmcgYW4gYWN0aW9uIGJl
dHdlZW4gdHdvIHNlcGFyYXRvcnMgc2hvd3MgdGhlIGhpZGRlbiBzZXBhcmF0b3IuCi0gICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAg
ICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKLSAg
ICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotCi0gICAg
Ly8gVHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgaGlkZGVuIHRvby4KLSAgICBhY3Rpb24gPSBndGtf
YWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUo
YWN0aW9uLCBGQUxTRSk7Ci0gICAgbWVudUl0ZW1zLnJlc2V0KGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xp
c3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYg
Z3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19s
aXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYg
Z3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19s
aXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0p
KTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgp
LCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
ICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLX0KLQogY2xhc3MgQ29udGV4dE1lbnVX
ZWJFeHRlbnNpb25UZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKIHB1YmxpYzoKICAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51V2ViRXh0ZW5zaW9uVGVzdCk7CkBAIC0x
MDMzLDcgKzkyNCw2IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBDb250ZXh0TWVudURpc2FibGVk
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FibGUtbWVudSIsIHRlc3RDb250ZXh0TWVu
dURpc2FibGVNZW51KTsKICAgICBDb250ZXh0TWVudVN1Ym1lbnVUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic3VibWVudSIsIHRlc3RDb250ZXh0TWVudVN1Yk1lbnUpOwogICAgIENvbnRleHRN
ZW51RGlzbWlzc2VkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1lbnUtZGlzbWlzc2VkIiwg
dGVzdENvbnRleHRNZW51RGlzbWlzc2VkKTsKLSAgICBDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9y
c1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzbWFydC1zZXBhcmF0b3JzIiwgdGVzdENvbnRl
eHRNZW51U21hcnRTZXBhcmF0b3JzKTsKICAgICBDb250ZXh0TWVudVdlYkV4dGVuc2lvblRlc3Q6
OmFkZCgiV2ViS2l0V2ViUGFnZSIsICJjb250ZXh0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVXZWJF
eHRlbnNpb25NZW51KTsKICAgICBDb250ZXh0TWVudVdlYkV4dGVuc2lvbk5vZGVUZXN0OjphZGQo
IldlYktpdFdlYlBhZ2UiLCAiY29udGV4dC1tZW51LW5vZGUiLCB0ZXN0Q29udGV4dE1lbnVXZWJF
eHRlbnNpb25Ob2RlKTsKIH0K
</data>
<flag name="review"
          id="313124"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>