<?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>150642</bug_id>
          
          <creation_ts>2015-10-28 16:04:36 -0700</creation_ts>
          <short_desc>[GTK] Use CROSS_PLATFORM_CONTEXT_MENUS</short_desc>
          <delta_ts>2015-11-10 08:08:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1137341</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-10-28 16:04:36 -0700</bug_when>
    <thetext>WebKitGTK+ might be the last port to be using the non-cross platform context menus.

03:56:46 PM) andersca: mrobinson: do you know if WebKitGTK uses CROSS_PLATFORM_CONTEXT_MENUS?
(03:56:47 PM) andersca: mrobinson: I think it might not
(03:59:05 PM) mrobinson: andersca: I am not sure, but I&apos;ll check now.
(03:59:35 PM) andersca: mrobinson: every other port now uses ContextMenu/ContextMenuItem as pure data objects, and then convert them to platform objects right before showing the menu
(04:00:26 PM) mrobinson: andersca: I don&apos;t think GTK+ is using them.
(04:00:57 PM) andersca: mrobinson: should fix that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137344</commentid>
    <comment_count>1</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-10-28 16:10:54 -0700</bug_when>
    <thetext>What needs to be done is that WebKitContextMenu and WebKitContextMenuItem needs to work directly on WebContextMenuItemData instead of the webcore types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139324</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 04:16:49 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; WebKitGTK+ might be the last port to be using the non-cross platform context
&gt; menus.
&gt; 
&gt; 03:56:46 PM) andersca: mrobinson: do you know if WebKitGTK uses
&gt; CROSS_PLATFORM_CONTEXT_MENUS?
&gt; (03:56:47 PM) andersca: mrobinson: I think it might not
&gt; (03:59:05 PM) mrobinson: andersca: I am not sure, but I&apos;ll check now.
&gt; (03:59:35 PM) andersca: mrobinson: every other port now uses
&gt; ContextMenu/ContextMenuItem as pure data objects, and then convert them to
&gt; platform objects right before showing the menu
&gt; (04:00:26 PM) mrobinson: andersca: I don&apos;t think GTK+ is using them.
&gt; (04:00:57 PM) andersca: mrobinson: should fix that :)

really? grepping I only see win and EFL enabling CROSS_PLATFORM_CONTEXT_MENUS. I&apos;ll look at it anyway to switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139387</commentid>
    <comment_count>3</comment_count>
      <attachid>264798</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 10:52:52 -0800</bug_when>
    <thetext>Created attachment 264798
Patch

It was not that easy in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139401</commentid>
    <comment_count>4</comment_count>
      <attachid>264798</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-04 12:19:09 -0800</bug_when>
    <thetext>Comment on attachment 264798
Patch

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

Quite a complex patch... I didn&apos;t review the whole thing, just adding a couple of comments.

&gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:43
&gt; +        return GTK_STOCK_COPY;

Since GtkStock has been deprecated for several years now, you might take this opportunity to get rid of it.

GTK_STOCK_COPY would be replaced with &quot;_Copy&quot;, for example.

See: https://docs.google.com/spreadsheets/d/1HavJQRPpMuq-N0GoN1wJR-9KEGXpKy3-NEPpZZkUGJY/pub?output=html

I guess that could be a follow-up patch, though.

&gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:150
&gt; +void WebContextMenuItemGtk::createGtkActionIfNeeded()

How hard is it to add support for GAction as an alternative to GtkAction?  I wouldn&apos;t expect you to do that in this patch, but Arnaud and I are planning to drop use of GtkAction in Epiphany, so we need a GAction API here in order to keep our custom context menu items.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:-96
&gt; -    bool shouldShowInputMethodsMenu()

Eeep, this was broken for ages and nobody noticed? Anyway, I agree with removing it, but maybe you could do that in a separate patch and backport it to 2.10? It sucks to have broken context menu items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139555</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 22:39:37 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 264798 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264798&amp;action=review
&gt; 
&gt; Quite a complex patch... I didn&apos;t review the whole thing, just adding a
&gt; couple of comments.
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:43
&gt; &gt; +        return GTK_STOCK_COPY;
&gt; 
&gt; Since GtkStock has been deprecated for several years now, you might take
&gt; this opportunity to get rid of it.
&gt; 
&gt; GTK_STOCK_COPY would be replaced with &quot;_Copy&quot;, for example.
&gt; 
&gt; See:
&gt; https://docs.google.com/spreadsheets/d/1HavJQRPpMuq-N0GoN1wJR-9KEGXpKy3-
&gt; NEPpZZkUGJY/pub?output=html
&gt; 
&gt; I guess that could be a follow-up patch, though.

Our API is based on deprecated API GtkAction, so I don&apos;t care if stock actions are deprecated too. I have real bugs and important feature to work on before.

&gt; &gt; Source/WebKit2/Shared/gtk/WebContextMenuItemGtk.cpp:150
&gt; &gt; +void WebContextMenuItemGtk::createGtkActionIfNeeded()
&gt; 
&gt; How hard is it to add support for GAction as an alternative to GtkAction?  I
&gt; wouldn&apos;t expect you to do that in this patch, but Arnaud and I are planning
&gt; to drop use of GtkAction in Epiphany, so we need a GAction API here in order
&gt; to keep our custom context menu items.

Last time I checked it was not that easy, it would probably require a glib version bump to ensure it does everything we need, and it affects the public API. So, I don&apos;t see the point, GtkAction works very well for us.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:-96
&gt; &gt; -    bool shouldShowInputMethodsMenu()
&gt; 
&gt; Eeep, this was broken for ages and nobody noticed? Anyway, I agree with
&gt; removing it, but maybe you could do that in a separate patch and backport it
&gt; to 2.10? It sucks to have broken context menu items.

Yes. Nobody noticed it because nobody uses it. It has been disabled by default in GTK+, and we only show it if gtk-show-input-method-menu setting is enabled. So, in real world we are not showing this menu item enymore, because nobody cares to change that (I don&apos;t even know how to change that setting). But it has never actually worked, I think. We build the menu from gtk_im_multicontext_append_menuitems (which is deprecated, of course). From that menu we create ContextMenuItems that extract the GtkAction associated with gtk_activatable_get_related_action, but those menu items no longer have a GtkAction associated (and I don&apos;t know they ever had it, to be honest). So, we are showing a menu of items that do nothing, because there&apos;s no action to connect to emit the activate signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139556</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 22:45:57 -0800</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:-96
&gt; &gt; -    bool shouldShowInputMethodsMenu()
&gt; 
&gt; Eeep, this was broken for ages and nobody noticed? Anyway, I agree with
&gt; removing it, but maybe you could do that in a separate patch and backport it
&gt; to 2.10? It sucks to have broken context menu items.

I also removed it because it&apos;s a pain to port this code to the new context menu, so I&apos;m not going to port it, and remove it in a follow up patch. Current code doesn&apos;t allow context menu items without a GtkAction, which is the case of input methods menu items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139629</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-05 08:41:13 -0800</bug_when>
    <thetext>Stock items don&apos;t matter much if you like them, it just looked like an easy cleanup to me.

(In reply to comment #5)
&gt; Last time I checked it was not that easy, it would probably require a glib
&gt; version bump to ensure it does everything we need, and it affects the public
&gt; API. So, I don&apos;t see the point, GtkAction works very well for us.

For Epiphany, we will need to use GAction and GMenuModel to get can get a popover menu button. We could use GAction for that and GtkAction for the context menus, but that would be messy, and GtkAction is confusing and not used elsewhere in GNOME anymore, so we don&apos;t want to.

Basically, I want the ability to create WebKitContextMenuItems based on GActions rather than GtkActions. I am hoping the implementation could be layered on top of the current GtkAction implementation; the goal is to ensure the client doesn&apos;t have to use confusing GtkAction, but of course we have to in WebKit. Something I&apos;ll look into eventually, so don&apos;t worry if you don&apos;t want to work on it yourself; I just brought it up since you&apos;ve clearly spent quite some time with the context menus recently, and you understand GtkAction. Anyway, it&apos;s outside the scope of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139979</commentid>
    <comment_count>8</comment_count>
      <attachid>264798</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-06 09:06:05 -0800</bug_when>
    <thetext>Comment on attachment 264798
Patch

Looks really good to me, but probably should have a reviewer who knows the GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140769</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-10 08:08:38 -0800</bug_when>
    <thetext>Committed r192247: &lt;http://trac.webkit.org/changeset/192247&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264798</attachid>
            <date>2015-11-04 10:52:52 -0800</date>
            <delta_ts>2015-11-06 09:21:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-cross-platform-menus.diff</filename>
            <type>text/plain</type>
            <size>66615</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZjY4MjMyOC4uYWI3ZGM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0xMS0wNCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gVXNlIENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDY0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBDUk9TU19QTEFURk9STV9DT05URVhU
X01FTlVTIGZvciBHVEsrIHBvcnQuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAx
NS0xMS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEIzL0Fp
ciBzaG91bGQgdXNlIGJ1YmJsZSBzb3J0IGZvciB0aGVpciBpbnNlcnRpb24gc2V0cywgYmVjYXVz
ZSBpdCdzIGZhc3RlciB0aGFuIHN0ZDo6c3RhYmxlX3NvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDAyMzJh
NDkuLmZiZTYyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtOTMwLDcgKzkzMCw3IEBACiAvKiBTZXQgdXAg
YSBkZWZpbmUgZm9yIGEgY29tbW9uIGVycm9yIHRoYXQgaXMgaW50ZW5kZWQgdG8gY2F1c2UgYSBi
dWlsZCBlcnJvciAtLSB0aHVzIHRoZSBzcGFjZSBhZnRlciBFcnJvci4gKi8KICNkZWZpbmUgV1RG
X1BMQVRGT1JNX0NGTkVUV09SSyBFcnJvciBVU0VfbWFjcm9fc2hvdWxkX2JlX3VzZWRfd2l0aF9D
Rk5FVFdPUksKIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRG
T1JNKEdUSykKICNkZWZpbmUgVVNFX0NST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMgMQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAwYzQ3ZTBiLi5jMTY4ZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTUtMTEtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzZSBDUk9TU19QTEFURk9STV9DT05URVhUX01FTlVT
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA2NDIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
R1RLKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb2xkIGNvbnRleHQgbWVudSBjbGFzc2VzLgorCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnVJ
dGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcDogUmVtb3Zl
ZC4KKwogMjAxNS0xMS0wNCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gU2hpZWxkIHN0cmVhbXMgYWdhaW5zdCB1
c2VyIHJlcGxhY2luZyB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQppbmRleCBhNGQ3ZDc2Li40NDZjNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpA
QCAtMjQxLDggKzI0MSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2d0ay9Db250ZXh0
TWVudUd0ay5jcHAKLSAgICBwbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RH
dGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAppbmRleCAwZjRjNjVmLi5kMGRmMDk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaApAQCAtMzYsOSArMzYsNiBAQAog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNfQ0xBU1MgTlNJbWFnZTsKIE9CSkNfQ0xB
U1MgTlNNZW51SXRlbTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IF9HdGtN
ZW51SXRlbSBHdGtNZW51SXRlbTsKLXR5cGVkZWYgc3RydWN0IF9HdGtBY3Rpb24gR3RrQWN0aW9u
OwogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKQEAgLTE4MCw4ICsx
NzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdHlwZWRlZiBOU01lbnVJdGVtKiBQbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb247Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgdHlwZWRlZiBHdGtNZW51
SXRlbSogUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uOwogI2Vsc2UKICAgICB0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbjsKICNlbmRpZgpAQCAtMjEyLDEwICsyMDcs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBD
b250ZXh0TWVudUl0ZW0gc2hhcmVNZW51SXRlbShjb25zdCBVUkwmIGFic29sdXRlTGlua1VSTCwg
Y29uc3QgVVJMJiBkb3dubG9hZGFibGVNZWRpYVVSTCwgTlNJbWFnZSAqLCBjb25zdCBTdHJpbmcm
IHNlbGVjdGVkVGV4dCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgR3Rr
QWN0aW9uKiBndGtBY3Rpb24oKSBjb25zdDsKLSNlbmRpZgotCiAjaWYgVVNFKENST1NTX1BMQVRG
T1JNX0NPTlRFWFRfTUVOVVMpCiAgICAgICAgIENvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUFj
dGlvbiwgY29uc3QgU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIGNvbnN0IFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpOwogICAgICAgICBleHBsaWNpdCBD
b250ZXh0TWVudUl0ZW0oY29uc3QgUGxhdGZvcm1Db250ZXh0TWVudUl0ZW0mKTsKQEAgLTI0MCwx
MCArMjMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gIW1fcGxhdGZvcm1EZXNjcmlwdGlvbjsgfQogCi0jaWYgUExBVEZPUk0o
R1RLKQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24g
cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLSNlbmRpZgotCiAgICAgICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkg
Y29uc3Q7CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjYmNhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTI0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykK
LQotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQot
ewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsK
LX0KLQotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0
aW9uIG1lbnUpCi0gICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKLXsKLX0KLQotQ29u
dGV4dE1lbnU6On5Db250ZXh0TWVudSgpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlv
bikKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJ
dGVtJiBpdGVtKQotewotICAgIEFTU0VSVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwotCi0gICAg
R1JlZlB0cjxHdGtXaWRnZXQ+IHBsYXRmb3JtSXRlbSA9IEdUS19XSURHRVQoaXRlbS5yZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKLSAgICBBU1NFUlQocGxhdGZvcm1JdGVtKTsKLQotICAg
IGlmIChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChwbGF0Zm9ybUl0
ZW0uZ2V0KCkpKQotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBh
cmVudCksIHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci0KLSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQo
R1RLX01FTlVfU0hFTEwobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgcGxhdGZvcm1JdGVtLmdldCgp
KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1JdGVtLmdldCgpKTsKLX0KLQotdm9pZCBD
b250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQotewotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAgIGd0a193
aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotCi0gICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENv
bnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKLQotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLX0K
LQotdW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0KLSAgICBHVW5pcXVlUHRyPEdMaXN0PiBjaGlsZHJl
bihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbikpKTsKLSAgICByZXR1cm4gZ19saXN0X2xlbmd0aChjaGlsZHJlbi5nZXQoKSk7Ci19
Ci0KLVZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotewotICAgIFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0+IG1lbnVJdGVtVmVjdG9yOwotCi0gICAgR1VuaXF1ZVB0cjxHTGlzdD4gY2hpbGRyZW4oZ3Rr
X2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGludCBp
dGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKLSAgICBtZW51SXRlbVZl
Y3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKLQotICAgIGZvciAoR0xpc3QqIGl0ZW0g
PSBjaGlsZHJlbi5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAg
ICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0
YSk7Ci0gICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVuZChHVEtfTUVOVV9JVEVNKHdp
ZGdldCkpOwotICAgIH0KLQotICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKLX0KLQotUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1NZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRN
ZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKLXsKLSAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUo
Z3RrX21lbnVfbmV3KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1z
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJ
REdFVChzdWJNZW51SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7Ci0gICAg
ICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1J
dGVtKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbSk7Ci0gICAgfQotICAg
IHJldHVybiBtZW51OwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1H
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ODliMTEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TAotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNs
dWRlICJDb250ZXh0TWVudUl0ZW0uaCIKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OICJ3ZWJraXQtY29udGV4dC1tZW51
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0lE
RnJvbUNvbnRleHRNZW51QWN0aW9uKGNvbnN0IENvbnRleHRNZW51QWN0aW9uJiBhY3Rpb24pCi17
Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlM
aW5rVG9DbGlwYm9hcmQ6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0Ns
aXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBi
b2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfQ09QWTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdX
aW5kb3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoK
LSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlu
a1RvRGlzazoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6
Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0FWRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0dvQmFjazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNLOwotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dP
X0ZPUldBUkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1NUT1A7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6Ci0g
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfUkVGUkVTSDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0N1dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DVVQ7Ci0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19QQVNURTsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19E
RUxFVEU7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6Ci0gICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU0VMRUNUX0FMTDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWxsaW5nR3Vlc3M6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnSWdub3JlU3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfTk87Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgotICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX09LOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nl
YXJjaEluU3BvdGxpZ2h0OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
RklORDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFwcGxpY2F0
aW9uOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9JTjsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVBERlpvb21PdXQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
Wk9PTV9PVVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19aT09NX0ZJVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERk5l
eHRQYWdlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0ZPUldBUkQ7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
R09fQkFDSzsKLSAgICAvLyBOZXcgdGFncywgbm90IHBhcnQgb2YgQVBJCi0gICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOwot
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKLSAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19TUEVMTF9DSEVDSzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRN
ZW51OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9GT05UOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVD
VF9GT05UOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKLSAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19CT0xEOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOgotICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX0lUQUxJQzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19VTkRFUkxJTkU7Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X1NFTEVDVF9DT0xPUjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29u
dHJvbHM6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKLSAgICAgICAg
Ly8gTm8gaWNvbiBmb3IgdGhpcy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19GVUxMU0NSRUVOOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc3RhdGljIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBjcmVhdGVQbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb24oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2Vk
KQotewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIHJldHVybiBHVEtf
TUVOVV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpKTsKLQotICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImNvbnRleHQtbWVudS1hY3Rpb24t
JWQiLCBhY3Rpb24pKTsKLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gcGxhdGZvcm1BY3Rpb247Ci0K
LSAgICBpZiAodHlwZSA9PSBDaGVja2FibGVBY3Rpb25UeXBlKSB7Ci0gICAgICAgIHBsYXRmb3Jt
QWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KGFjdGlv
bk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4
dE1lbnVBY3Rpb24oYWN0aW9uKSkpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2Fj
dGl2ZShHVEtfVE9HR0xFX0FDVElPTihwbGF0Zm9ybUFjdGlvbi5nZXQoKSksIGNoZWNrZWQpOwot
ICAgIH0gZWxzZQotICAgICAgICBwbGF0Zm9ybUFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9u
X25ldyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lE
RnJvbUNvbnRleHRNZW51QWN0aW9uKGFjdGlvbikpKTsKLSAgICBndGtfYWN0aW9uX3NldF9zZW5z
aXRpdmUocGxhdGZvcm1BY3Rpb24uZ2V0KCksIGVuYWJsZWQpOwotCi0gICAgR3RrTWVudUl0ZW0q
IGl0ZW0gPSBHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShwbGF0Zm9y
bUFjdGlvbi5nZXQoKSkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGl0ZW0pLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotCi0g
ICAgcmV0dXJuIGl0ZW07Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKCkK
LSAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihudWxscHRyKQotewotfQotCi0vLyBFeHRyYWN0
IHRoZSBBY3Rpb25UeXBlIGZyb20gdGhlIG1lbnUgaXRlbQotQ29udGV4dE1lbnVJdGVtOjpDb250
ZXh0TWVudUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW0pCi0gICAgOiBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24oaXRlbSkKLXsKLSAgICAvLyBEb24ndCBzaG93IGFjY2VsIGxhYmVs
cyBpbiBjb250ZXh0IG1lbnUgaXRlbXMuCi0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rp
b24oKTsKLSAgICBpZiAoIWFjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFndGtf
YWN0aW9uX2dldF9hY2NlbF9wYXRoKGFjdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0
a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZW0pKTsKLSAgICBp
ZiAoR1RLX0lTX0FDQ0VMX0xBQkVMKGNoaWxkKSkKLSAgICAgICAgZ3RrX2FjY2VsX2xhYmVsX3Nl
dF9hY2NlbF9jbG9zdXJlKEdUS19BQ0NFTF9MQUJFTChjaGlsZCksIDApOwotfQotCi1Db250ZXh0
TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudSogc3ViTWVudSkKLXsKLSAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVV9JVEVNKGd0a19tZW51X2l0ZW1fbmV3KCkp
OwotICAgIGlmIChzdWJNZW51KQotICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOwotfQotCi1D
b250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUs
IENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1l
bnUqIHN1Yk1lbnUpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZv
cm1NZW51SXRlbURlc2NyaXB0aW9uKHR5cGUsIGFjdGlvbiwgdGl0bGUsIHRydWUsIGZhbHNlKTsK
LSAgICBpZiAoc3ViTWVudSkKLSAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKLX0KLQotQ29u
dGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBD
b250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxl
ZCwgYm9vbCBjaGVja2VkKQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFibGVkLCBj
aGVja2VkKTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wg
Y2hlY2tlZCwgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKLXsKLSAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24o
U3VibWVudVR5cGUsIGFjdGlvbiwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQpOwotICAgIHNldFN1
Yk1lbnUoc3ViTWVudUl0ZW1zKTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJ
dGVtKCkKLXsKLX0KLQotUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRl
bTo6cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKQotewotICAgIFBsYXRmb3JtTWVudUl0ZW1E
ZXNjcmlwdGlvbiBwbGF0Zm9ybURlc2NyaXB0aW9uID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwot
ICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIHBsYXRmb3JtRGVzY3Jp
cHRpb247Ci19Ci0KLUNvbnRleHRNZW51SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkg
Y29uc3QKLXsKLSAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0obV9wbGF0Zm9ybURl
c2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIFNlcGFyYXRvclR5cGU7Ci0gICAgaWYgKEdUS19J
U19DSEVDS19NRU5VX0lURU0obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJu
IENoZWNrYWJsZUFjdGlvblR5cGU7Ci0gICAgaWYgKGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIFN1Ym1lbnVUeXBlOwotICAg
IHJldHVybiBBY3Rpb25UeXBlOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShD
b250ZXh0TWVudUl0ZW1UeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlw
ZSkKLSAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfc2Vw
YXJhdG9yX21lbnVfaXRlbV9uZXcoKSk7Ci19Ci0KLUNvbnRleHRNZW51QWN0aW9uIENvbnRleHRN
ZW51SXRlbTo6YWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVBY3Rpb24+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCht
X3BsYXRmb3JtRGVzY3JpcHRpb24pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTikpKTsKLX0K
LQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVudUFjdGlvbiBhY3Rp
b24pCi17Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0
aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rpb24p
KTsKLX0KLQotU3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0bGUoKSBjb25zdAotewotICAgIEd0
a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgcmV0dXJuIGFjdGlvbiA/IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSkgOiBTdHJpbmcoKTsKLX0K
LQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCi17
Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uKQot
ICAgICAgICBndGtfYWN0aW9uX3NldF9sYWJlbChhY3Rpb24sIHRpdGxlLnV0ZjgoKS5kYXRhKCkp
OwotfQotCi1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3Jt
U3ViTWVudSgpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiBzdWJNZW51ID0gZ3RrX21lbnVfaXRl
bV9nZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwotICAgIHJldHVybiBzdWJNZW51
ID8gR1RLX01FTlUoc3ViTWVudSkgOiAwOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0
U3ViTWVudShDb250ZXh0TWVudSogbWVudSkKLXsKLSAgICBndGtfbWVudV9pdGVtX3NldF9zdWJt
ZW51KG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgR1RLX1dJREdFVChtZW51LT5yZWxlYXNlUGxhdGZv
cm1EZXNjcmlwdGlvbigpKSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51
KFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCi17Ci0gICAgQ29udGV4dE1l
bnUgbWVudShwbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbihzdWJNZW51SXRlbXMpKTsKLSAgICBzZXRT
dWJNZW51KCZtZW51KTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9v
bCBzaG91bGRDaGVjaykKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwot
ICAgIGlmIChhY3Rpb24gJiYgR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKLSAgICAgICAg
Z3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pLCBz
aG91bGRDaGVjayk7Ci19Ci0KLWJvb2wgQ29udGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QK
LXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIGlmIChhY3Rpb24g
JiYgR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGd0a190b2dn
bGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIENvbnRleHRNZW51SXRlbTo6ZW5hYmxlZCgpIGNvbnN0Ci17
Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICByZXR1cm4gYWN0aW9u
ID8gZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikgOiBmYWxzZTsKLX0KLQotdm9pZCBD
b250ZXh0TWVudUl0ZW06OnNldEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCi17Ci0gICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uKQotICAgICAgICBn
dGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLCBzaG91bGRFbmFibGUpOwotfQotCi1HdGtB
Y3Rpb24qIENvbnRleHRNZW51SXRlbTo6Z3RrQWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUobV9wbGF0
Zm9ybURlc2NyaXB0aW9uKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01F
TlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDUzYTkzOGEuLjZjZDdjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NCBAQAorMjAxNS0xMS0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gVXNlIENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDY0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBDUk9T
U19QTEFURk9STV9DT05URVhUX01FTlVTLiBTaW5jZSB3ZSBjYW4ndCBqdXN0IHVzZQorICAgICAg
ICBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLCBiZWNhdXNlIHdlIG5lZWQgdG8gYmluZCBhIEd0a0Fj
dGlvbiB0byB0aGUKKyAgICAgICAgbWVudSBpdGVtcywgdGhpcyBwYXRjaCBhZGRzIFdlYkNvbnRl
eHRNZW51SXRlbUd0ayB0aGF0IGRlcml2ZXMKKyAgICAgICAgZnJvbSBXZWJDb250ZXh0TWVudUl0
ZW1EYXRhIGFuZCBhZGRzIHRoZSBHdGtBY3Rpb24gYW5kIGl0cyBvd24KKyAgICAgICAgaGFuZGxp
bmcgb2Ygc3VibWVudSBpdGVtcy4gV2ViS2l0Q29udGV4dE1lbnUgYW5kCisgICAgICAgIFdlYktp
dENvbnRleHRNZW51SXRlbSBubyBsb25nZXIgZGVhbCB3aXRoIHRoZSB3aWRnZXRzIChHdGtNZW51
IGFuZAorICAgICAgICBHdGtNZW51SXRlbSksIHRoYXQgYXJlIG5vdyBjcmVhdGVkIGJ5IFdlYkNv
bnRleHRNZW51UHJveHkgd2hlbgorICAgICAgICBidWlsZGluZyB0aGUgcG9wdXAgbWVudS4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIHN1cHBvcnQgZm9yIGlucHV0IG1ldGhv
ZHMgc3VibWVudSwKKyAgICAgICAgc2luY2UgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZCAoYW5kIGRp
c2FibGVkIGJ5IGRlZmF1bHQpIGluIEdUSysgZm9yCisgICAgICAgIGxvbmcgdGltZSwgaXQgaGFz
IG5ldmVyIGFjdHVhbGx5IHdvcmtlZCAoYmVjYXVzZSB0aGUgbWVudSBpdGVtcworICAgICAgICBk
b24ndCBoYXZlIGEgR3RrQWN0aW9uIGFzc29jaWF0ZWQpIGFuZCBpdCBtYWtlcyB0aGUgY29kZSBt
b3JlCisgICAgICAgIGNvbXBsaWNhdGVkIGZvciBubyBiZW5lZml0LgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJDb250ZXh0TWVudUl0ZW1H
dGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Z3RrU3RvY2tJREZyb21Db250ZXh0TWVu
dUFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbUd0azo6V2ViQ29u
dGV4dE1lbnVJdGVtR3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtR3Rr
Ojp+V2ViQ29udGV4dE1lbnVJdGVtR3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1l
bnVJdGVtR3RrOjpjcmVhdGVHdGtBY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogU2hhcmVkL2d0
ay9XZWJDb250ZXh0TWVudUl0ZW1HdGsuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmguCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbnRleHRNZW51SXRlbUd0azo6Z3RrQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVJdGVtR3RrOjpzdWJtZW51SXRlbXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdENvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51UG9w
dWxhdGUpOgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVDcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAod2Via2l0Q29udGV4dE1lbnVTZXRQYXJlbnRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuY3BwOgorICAgICAg
ICAod2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uY3BwOgor
ICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudSk6CisgICAgICAgICh3ZWJr
aXRDb250ZXh0TWVudUl0ZW1DcmVhdGUpOgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVt
VG9XZWJDb250ZXh0TWVudUl0ZW1HdGspOgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVt
VG9XZWJDb250ZXh0TWVudUl0ZW1EYXRhKToKKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXcpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0
b2NrX2FjdGlvbik6CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21f
c3RvY2tfYWN0aW9uX3dpdGhfbGFiZWwpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld193aXRoX3N1Ym1lbnUpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19zZXBhcmF0b3IpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9h
Y3Rpb24pOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rp
b24pOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVt
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
OgorICAgICAgICAod2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUpOgorICAgICAgICAo
Y29udGV4dE1lbnVEaXNtaXNzZWQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0V2ViVmlld1N1
Ym1pdEZvcm1SZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdIYW5kbGVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0V2ViVmll
d0VtaXRSdW5Db2xvckNob29zZXIpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0V2ViVmlld1Jl
cXVlc3RJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2lucyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Y29udGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZXh0TWVudVByb3h5R3RrOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
TWVudVByb3h5R3RrOjpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51
UHJveHlHdGs6OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3Rr
OjpXZWJDb250ZXh0TWVudVByb3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1l
bnVQcm94eUd0azo6fldlYkNvbnRleHRNZW51UHJveHlHdGspOgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0TWVudVByb3h5R3RrOjpndGtNZW51KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHA6CisKIDIwMTUtMTEtMDMgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gQWRkIFNQSSB0byB3YXJt
IGFuIGluaXRpYWwgd2ViIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZDVm
NWVjOS4uMTllY2UyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTcwLDYgKzcwLDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJX
aGVlbEV2ZW50R3RrLmNwcAogICAgIFNoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNwcAogICAgIFNo
YXJlZC9ndGsvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAorICAgIFNoYXJlZC9ndGsvV2Vi
Q29udGV4dE1lbnVJdGVtR3RrLmNwcAogICAgIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNw
cAogCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29udGV4dE1lbnVJdGVtR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29udGV4dE1lbnVJdGVtR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdiMWUxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb250ZXh0TWVudUl0ZW1HdGsuY3BwCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0
ZW1HdGsuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24o
Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdDb3B5OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NPUFk7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRp
YUluTmV3V2luZG93OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NB
VkU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfR09fQkFDSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoK
KyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19GT1JXQVJEOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3RvcDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TVE9QOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnUmVsb2FkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1JFRlJF
U0g7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfQ1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfUEFTVEU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfREVMRVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnU2VsZWN0QWxsOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9BTEw7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAgICByZXR1cm4g
MDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX05POworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVs
bGluZzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PSzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ090aGVyOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX01JU1NJTkdfSU1BR0U7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19GSU5EOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2Vi
OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdPcGVuV2l0aERlZmF1bHRBcHBsaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19PUEVOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1pPT01fSU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tT3V0
OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fT1VUOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtUERGQXV0b1NpemU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9GSVQ7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZOZXh0UGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19HT19GT1JXQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdl
OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgLy8gTmV3IHRhZ3MsIG5v
dCBwYXJ0IG9mIEFQSQorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1BFTExfQ0hFQ0s7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19TRUxFQ1RfRk9OVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfRk9OVDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0JvbGQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQk9MRDsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0l0YWxpYzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19JVEFMSUM7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfVU5ERVJMSU5FOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9y
czoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQ09MT1I7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgorICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnVG9nZ2xlTWVkaWFMb29wOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUlt
YWdlVXJsVG9DbGlwYm9hcmQ6CisgICAgICAgIC8vIE5vIGljb24gZm9yIHRoaXMuCisgICAgICAg
IHJldHVybiAwOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3Jl
ZW46CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRlVMTFNDUkVFTjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1dlYkNvbnRleHRNZW51SXRlbUd0azo6V2Vi
Q29udGV4dE1lbnVJdGVtR3RrKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVB
Y3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hl
Y2tlZCkKKyAgICA6IFdlYkNvbnRleHRNZW51SXRlbURhdGEodHlwZSwgYWN0aW9uLCB0aXRsZSwg
ZW5hYmxlZCwgY2hlY2tlZCkKK3sKKyAgICBjcmVhdGVHdGtBY3Rpb25JZk5lZWRlZCgpOworfQor
CitXZWJDb250ZXh0TWVudUl0ZW1HdGs6OldlYkNvbnRleHRNZW51SXRlbUd0ayhjb25zdCBXZWJD
b250ZXh0TWVudUl0ZW1EYXRhJiBkYXRhKQorICAgIDogV2ViQ29udGV4dE1lbnVJdGVtRGF0YShk
YXRhLnR5cGUoKSwgZGF0YS5hY3Rpb24oKSwgZGF0YS50aXRsZSgpLCBkYXRhLmVuYWJsZWQoKSwg
ZGF0YS5jaGVja2VkKCkpCit7CisgICAgY3JlYXRlR3RrQWN0aW9uSWZOZWVkZWQoKTsKK30KKwor
V2ViQ29udGV4dE1lbnVJdGVtR3RrOjpXZWJDb250ZXh0TWVudUl0ZW1HdGsoY29uc3QgV2ViQ29u
dGV4dE1lbnVJdGVtR3RrJiBkYXRhLCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiYmIHN1
Ym1lbnUpCisgICAgOiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhKFN1Ym1lbnVUeXBlLCBkYXRhLmFj
dGlvbigpLCBkYXRhLnRpdGxlKCksIGRhdGEuZW5hYmxlZCgpLCBmYWxzZSkKK3sKKyAgICBtX2Fj
dGlvbiA9IGRhdGEuZ3RrQWN0aW9uKCk7CisgICAgbV9zdWJtZW51SXRlbXMgPSBXVEY6Om1vdmUo
c3VibWVudSk7Cit9CisKK1dlYkNvbnRleHRNZW51SXRlbUd0azo6V2ViQ29udGV4dE1lbnVJdGVt
R3RrKEd0a0FjdGlvbiogYWN0aW9uKQorICAgIDogV2ViQ29udGV4dE1lbnVJdGVtRGF0YShHVEtf
SVNfVE9HR0xFX0FDVElPTihhY3Rpb24pID8gQ2hlY2thYmxlQWN0aW9uVHlwZSA6IEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZywgU3RyaW5nOjpmcm9tVVRGOChn
dGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pKSwgZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFj
dGlvbiksIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikgPyBndGtfdG9nZ2xlX2FjdGlvbl9n
ZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpIDogZmFsc2UpCit7CisgICAgbV9h
Y3Rpb24gPSBhY3Rpb247Cit9CisKK1dlYkNvbnRleHRNZW51SXRlbUd0azo6fldlYkNvbnRleHRN
ZW51SXRlbUd0aygpCit7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVJdGVtR3RrOjpjcmVhdGVH
dGtBY3Rpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKHR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJk
dXBfcHJpbnRmKCJjb250ZXh0LW1lbnUtYWN0aW9uLSVkIiwgYWN0aW9uKCkpKTsKKyAgICBpZiAo
dHlwZSgpID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKKyAgICAgICAgbV9hY3Rpb24gPSBhZG9w
dEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwg
dGl0bGUoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCBndGtTdG9ja0lERnJvbUNvbnRleHRNZW51
QWN0aW9uKGFjdGlvbigpKSkpKTsKKyAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2
ZShHVEtfVE9HR0xFX0FDVElPTihtX2FjdGlvbi5nZXQoKSksIGNoZWNrZWQoKSk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KGFjdGlvbk5h
bWUuZ2V0KCksIHRpdGxlKCkudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0
TWVudUFjdGlvbihhY3Rpb24oKSkpKTsKKyAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUobV9h
Y3Rpb24uZ2V0KCksIGVuYWJsZWQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb250ZXh0TWVudUl0ZW1HdGsu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29udGV4dE1lbnVJdGVtR3RrLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxNTQ0OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29udGV4dE1lbnVJdGVtR3RrLmgKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkNvbnRleHRNZW51SXRlbUd0a19oCisjZGVmaW5lIFdlYkNvbnRl
eHRNZW51SXRlbUd0a19oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0
eXBlZGVmIHN0cnVjdCBfR3RrQWN0aW9uIEd0a0FjdGlvbjsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkNvbnRleHRNZW51SXRlbUd0ayA6IHB1YmxpYyBXZWJDb250ZXh0TWVudUl0
ZW1EYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXZWJD
b250ZXh0TWVudUl0ZW1HdGsoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVHlwZSwgV2ViQ29yZTo6
Q29udGV4dE1lbnVBY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCA9IHRy
dWUsIGJvb2wgY2hlY2tlZCA9IGZhbHNlKTsKKyAgICBXZWJDb250ZXh0TWVudUl0ZW1HdGsoY29u
c3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOworICAgIFdlYkNvbnRleHRNZW51SXRlbUd0ayhj
b25zdCBXZWJDb250ZXh0TWVudUl0ZW1HdGsmLCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3Rr
PiYmIHN1Ym1lbnUpOworICAgIFdlYkNvbnRleHRNZW51SXRlbUd0ayhHdGtBY3Rpb24qKTsKKyAg
ICB+V2ViQ29udGV4dE1lbnVJdGVtR3RrKCk7CisKKyAgICBHdGtBY3Rpb24qIGd0a0FjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9uLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbUd0az4mIHN1Ym1lbnVJdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3VibWVu
dUl0ZW1zOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVHdGtBY3Rpb25JZk5lZWRlZCgp
OworCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IG1fYWN0aW9uOworICAgIFZlY3RvcjxXZWJDb250
ZXh0TWVudUl0ZW1HdGs+IG1fc3VibWVudUl0ZW1zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZXh0TWVudUl0ZW1HdGtfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuY3BwCmluZGV4
IGU0ZjZjZjAuLjk1YzFkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5jcHAKQEAgLTY4LDE5ICs2OCwxOSBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfY29udGV4dF9tZW51X2NsYXNzX2luaXQoV2ViS2l0Q29udGV4dE1lbnVD
bGFzcyogbGlzdENsYXNzKQogICAgIGdPYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdENvbnRl
eHRNZW51RGlzcG9zZTsKIH0KIAotdm9pZCB3ZWJraXRDb250ZXh0TWVudVBvcHVsYXRlKFdlYktp
dENvbnRleHRNZW51KiBtZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJ
dGVtcykKK3ZvaWQgd2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZShXZWJLaXRDb250ZXh0TWVudSog
bWVudSwgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBjb250ZXh0TWVudUl0ZW1zKQog
ewogICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBtZW51LT5wcml2LT5pdGVtczsgaXRlbTsgaXRlbSA9
IGdfbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogbWVu
dUl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIGNv
bnRleHRNZW51SXRlbXMuYXBwZW5kKENvbnRleHRNZW51SXRlbSh3ZWJraXRDb250ZXh0TWVudUl0
ZW1SZWxlYXNlKG1lbnVJdGVtKSkpOworICAgICAgICBjb250ZXh0TWVudUl0ZW1zLmFwcGVuZCh3
ZWJraXRDb250ZXh0TWVudUl0ZW1Ub1dlYkNvbnRleHRNZW51SXRlbURhdGEobWVudUl0ZW0pKTsK
ICAgICB9CiB9CiAKLXZvaWQgd2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZShXZWJLaXRDb250ZXh0
TWVudSogbWVudSwgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBjb250ZXh0TWVudUl0
ZW1zKQordm9pZCB3ZWJraXRDb250ZXh0TWVudVBvcHVsYXRlKFdlYktpdENvbnRleHRNZW51KiBt
ZW51LCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiYgY29udGV4dE1lbnVJdGVtcykKIHsK
ICAgICBmb3IgKEdMaXN0KiBpdGVtID0gbWVudS0+cHJpdi0+aXRlbXM7IGl0ZW07IGl0ZW0gPSBn
X2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIG1lbnVJ
dGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0tPmRhdGEpOwotICAgICAgICBjb250
ZXh0TWVudUl0ZW1zLmFwcGVuZChXZWJDb250ZXh0TWVudUl0ZW1EYXRhKENvbnRleHRNZW51SXRl
bSh3ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNlKG1lbnVJdGVtKSkpKTsKKyAgICAgICAgY29u
dGV4dE1lbnVJdGVtcy5hcHBlbmQod2Via2l0Q29udGV4dE1lbnVJdGVtVG9XZWJDb250ZXh0TWVu
dUl0ZW1HdGsobWVudUl0ZW0pKTsKICAgICB9CiB9CiAKQEAgLTk0LDE2ICs5NCw2IEBAIFdlYktp
dENvbnRleHRNZW51KiB3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShjb25zdCBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4mCiAgICAgcmV0dXJuIG1lbnU7CiB9CiAKLVdlYktpdENvbnRleHRN
ZW51KiB3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVt
PiYgaXRlbXMpCi17Ci0gICAgV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUgPSB3ZWJraXRfY29udGV4
dF9tZW51X25ldygpOwotICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKQotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X3ByZXBlbmQobWVudSwgd2Via2l0Q29udGV4dE1lbnVJdGVt
Q3JlYXRlKGl0ZW0pKTsKLSAgICBtZW51LT5wcml2LT5pdGVtcyA9IGdfbGlzdF9yZXZlcnNlKG1l
bnUtPnByaXYtPml0ZW1zKTsKLQotICAgIHJldHVybiBtZW51OwotfQotCiB2b2lkIHdlYmtpdENv
bnRleHRNZW51U2V0UGFyZW50SXRlbShXZWJLaXRDb250ZXh0TWVudSogbWVudSwgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtKiBpdGVtKQogewogICAgIG1lbnUtPnByaXYtPnBhcmVudEl0ZW0gPSBpdGVt
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVBY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENvbnRleHRNZW51QWN0aW9ucy5jcHAKaW5kZXggNGVkMjBmYS4uY2YxZGRmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b250ZXh0TWVudUFjdGlvbnMuY3BwCkBAIC0xMzUsOSArMTM1LDkgQEAgQ29udGV4dE1lbnVBY3Rp
b24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRBY3Rpb25UYWcoV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb24gYWMKICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOwog
fQogCi1XZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEZv
ckNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW0qIG1lbnVJdGVtKQorV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0o
Y29uc3QgV2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1HdGsmIG1lbnVJdGVtKQogewotICAgIHN3
aXRjaCAobWVudUl0ZW0tPmFjdGlvbigpKSB7CisgICAgc3dpdGNoIChtZW51SXRlbS5hY3Rpb24o
KSkgewogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb246CiAgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT047CiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluazoKQEAgLTIwMywxMCArMjAzLDEwIEBAIFdlYktpdENvbnRleHRN
ZW51QWN0aW9uIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0Rm9yQ29udGV4dE1lbnVJdGVtKENv
bnRleHRNZW51CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudDoKICAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDsK
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAg
ICByZXR1cm4gbWVudUl0ZW0tPnRpdGxlKCkgPT0gY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVv
SW5OZXdXaW5kb3coKSA/CisgICAgICAgIHJldHVybiBtZW51SXRlbS50aXRsZSgpID09IGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkgPwogICAgICAgICAgICAgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XIDogV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XOwogICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgICAgICByZXR1cm4g
bWVudUl0ZW0tPnRpdGxlKCkgPT0gY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xp
cGJvYXJkKCkgPworICAgICAgICByZXR1cm4gbWVudUl0ZW0udGl0bGUoKSA9PSBjb250ZXh0TWVu
dUl0ZW1UYWdDb3B5VmlkZW9MaW5rVG9DbGlwYm9hcmQoKSA/CiAgICAgICAgICAgICBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJEIDogV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRDsKICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6CiAgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM7CkBAIC0y
MTUsMTIgKzIxNSwxMiBAQCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVu
dUFjdGlvbkdldEZvckNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudQogICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CiAgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOOwogICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6Ci0gICAgICAgIHJldHVybiBtZW51SXRlbS0+
dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSA/CisgICAgICAgIHJldHVy
biBtZW51SXRlbS50aXRsZSgpID09IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpID8KICAg
ICAgICAgICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVkgOiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QQVVTRTsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ01lZGlhTXV0ZToKICAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X01FRElBX01VVEU7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZE1lZGlhVG9E
aXNrOgotICAgICAgICByZXR1cm4gbWVudUl0ZW0tPnRpdGxlKCkgPT0gY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRWaWRlb1RvRGlzaygpID8KKyAgICAgICAgcmV0dXJuIG1lbnVJdGVtLnRpdGxl
KCkgPT0gY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRWaWRlb1RvRGlzaygpID8KICAgICAgICAg
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX1ZJREVPX1RPX0RJU0sgOiBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9BVURJT19UT19ESVNLOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOgogICAgICAgICByZXR1cm4gV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VTVE9NOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25z
UHJpdmF0ZS5oCmluZGV4IGY3NTNiYjkuLmUwMGI4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFj
dGlvbnNQcml2YXRlLmgKQEAgLTIwLDEyICsyMCwxMiBAQAogI2lmbmRlZiBXZWJLaXRDb250ZXh0
TWVudUFjdGlvbnNQcml2YXRlX2gKICNkZWZpbmUgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJp
dmF0ZV9oCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1HdGsuaCIKICNpbmNsdWRlICJX
ZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51
SXRlbS5oPgogCiBib29sIHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoV2ViS2l0
Q29udGV4dE1lbnVBY3Rpb24pOwogV2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24gd2Via2l0Q29u
dGV4dE1lbnVBY3Rpb25HZXRBY3Rpb25UYWcoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24pOwotV2Vi
S2l0Q29udGV4dE1lbnVBY3Rpb24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0
TWVudUl0ZW0oV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKik7CitXZWJLaXRDb250ZXh0TWVudUFj
dGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEZvckNvbnRleHRNZW51SXRlbShjb25zdCBX
ZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbUd0ayYpOwogU3RyaW5nIHdlYmtpdENvbnRleHRNZW51
QWN0aW9uR2V0TGFiZWwoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24pOwogCiAjZW5kaWYgLy8gV2Vi
S2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uY3BwCmluZGV4IDZlN2Ey
N2MuLjU3NmE0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvbnRleHRNZW51SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmNwcApAQCAtMjIsNyArMjIsNyBAQAogCiAj
aW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW0uaCIKLSNp
bmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1l
bnVJdGVtR3RrLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCIKQEAgLTU2LDcgKzU2LDcgQEAgc3RydWN0IF9XZWJL
aXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlIHsKICAgICAgICAgICAgIHdlYmtpdENvbnRleHRNZW51
U2V0UGFyZW50SXRlbShzdWJNZW51LmdldCgpLCAwKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29udGV4dE1lbnVJdGVtPiBtZW51SXRlbTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29udGV4dE1lbnVJdGVtR3RrPiBtZW51SXRlbTsKICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRN
ZW51PiBzdWJNZW51OwogfTsKIApAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRD
b250ZXh0TWVudUl0ZW1TZXRTdWJNZW51KFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSwgR1Jl
ZlB0cgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXRlbS0+cHJpdi0+c3ViTWVudSkKLSAg
ICAgICAgd2Via2l0Q29udGV4dE1lbnVTZXRQYXJlbnRJdGVtKGl0ZW0tPnByaXYtPnN1Yk1lbnUu
Z2V0KCksIDApOworICAgICAgICB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oaXRlbS0+
cHJpdi0+c3ViTWVudS5nZXQoKSwgbnVsbHB0cik7CiAgICAgaXRlbS0+cHJpdi0+c3ViTWVudSA9
IHN1Yk1lbnU7CiAgICAgaWYgKHN1Yk1lbnUpCiAgICAgICAgIHdlYmtpdENvbnRleHRNZW51U2V0
UGFyZW50SXRlbShzdWJNZW51LmdldCgpLCBpdGVtKTsKQEAgLTk0LDcgKzk0LDcgQEAgV2ViS2l0
Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVhdGUoY29uc3QgV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YSYKIHsKICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRf
TUVOVV9JVEVNLCBOVUxMKSk7CiAKLSAgICBpdGVtLT5wcml2LT5tZW51SXRlbSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29udGV4dE1lbnVJdGVtPihpdGVtRGF0YS50eXBlKCksIGl0ZW1EYXRhLmFjdGlv
bigpLCBpdGVtRGF0YS50aXRsZSgpLCBpdGVtRGF0YS5lbmFibGVkKCksIGl0ZW1EYXRhLmNoZWNr
ZWQoKSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNv
bnRleHRNZW51SXRlbUd0az4oaXRlbURhdGEpOwogICAgIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiYgc3ViTWVudSA9IGl0ZW1EYXRhLnN1Ym1lbnUoKTsKICAgICBpZiAoIXN1
Yk1lbnUuaXNFbXB0eSgpKQogICAgICAgICB3ZWJraXRDb250ZXh0TWVudUl0ZW1TZXRTdWJNZW51
KGl0ZW0sIGFkb3B0R1JlZih3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShzdWJNZW51KSkpOwpAQCAt
MTAyLDYwICsxMDIsMjYgQEAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVu
dUl0ZW1DcmVhdGUoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYKICAgICByZXR1cm4gaXRl
bTsKIH0KIAotV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVh
dGUoY29uc3QgQ29udGV4dE1lbnVJdGVtJiBjb3JlSXRlbSkKK1dlYkNvbnRleHRNZW51SXRlbUd0
ayB3ZWJraXRDb250ZXh0TWVudUl0ZW1Ub1dlYkNvbnRleHRNZW51SXRlbUd0ayhXZWJLaXRDb250
ZXh0TWVudUl0ZW0qIGl0ZW0pCiB7Ci0gICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0g
V0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhU
X01FTlVfSVRFTSwgTlVMTCkpOwotCi0gICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbnRleHRNZW51SXRlbT4oY29yZUl0ZW0udHlwZSgpLCBjb3JlSXRlbS5hY3Rp
b24oKSwgY29yZUl0ZW0udGl0bGUoKSwgY29yZUl0ZW0uZW5hYmxlZCgpLCBjb3JlSXRlbS5jaGVj
a2VkKCkpOwotICAgIGlmIChjb3JlSXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6U3VibWVudVR5cGUp
IHsKLSAgICAgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gc3ViTWVudSA9IGNvbnRleHRNZW51
SXRlbVZlY3Rvcihjb3JlSXRlbS5wbGF0Zm9ybVN1Yk1lbnUoKSk7Ci0gICAgICAgIHdlYmtpdENv
bnRleHRNZW51SXRlbVNldFN1Yk1lbnUoaXRlbSwgYWRvcHRHUmVmKHdlYmtpdENvbnRleHRNZW51
Q3JlYXRlKHN1Yk1lbnUpKSk7CisgICAgaWYgKGl0ZW0tPnByaXYtPnN1Yk1lbnUpIHsKKyAgICAg
ICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbUd0az4gc3ViTWVudUl0ZW1zOworICAgICAgICB3
ZWJraXRDb250ZXh0TWVudVBvcHVsYXRlKGl0ZW0tPnByaXYtPnN1Yk1lbnUuZ2V0KCksIHN1Yk1l
bnVJdGVtcyk7CisgICAgICAgIHJldHVybiBXZWJDb250ZXh0TWVudUl0ZW1HdGsoKml0ZW0tPnBy
aXYtPm1lbnVJdGVtLCBXVEY6Om1vdmUoc3ViTWVudUl0ZW1zKSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGl0ZW07Ci19Ci0KLXN0YXRpYyBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdENvbnRl
eHRNZW51SXRlbUNyZWF0ZUZvckd0a0l0ZW0oR3RrTWVudUl0ZW0qIG1lbnVJdGVtKQotewotICAg
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0sIE5VTEwpKTsKLSAgICBp
dGVtLT5wcml2LT5tZW51SXRlbSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGV4dE1lbnVJdGVtPiht
ZW51SXRlbSk7Ci0gICAgd2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudUZyb21HdGtNZW51
KGl0ZW0sIEdUS19NRU5VKGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobWVudUl0ZW0pKSk7Ci0K
LSAgICByZXR1cm4gaXRlbTsKKyAgICByZXR1cm4gKml0ZW0tPnByaXYtPm1lbnVJdGVtOwogfQog
Ci12b2lkIHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnVGcm9tR3RrTWVudShXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0sIEd0a01lbnUqIHN1Yk1lbnUpCi17Ci0gICAgaWYgKCFzdWJN
ZW51KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlUHRyPEdMaXN0PiBjaGlsZHJlbihn
dGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKHN1Yk1lbnUpKSk7Ci0gICAg
aWYgKCFnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgd2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShpdGVtLCBhZG9wdEdSZWYod2Via2l0
X2NvbnRleHRfbWVudV9uZXcoKSkpOwotICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gY2hpbGRy
ZW4uZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgewot
ICAgICAgICBHUmVmUHRyPEd0a1dpZGdldD4gd2lkZ2V0ID0gR1RLX1dJREdFVChsaXN0SXRlbS0+
ZGF0YSk7Ci0gICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQuZ2V0KCkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NP
TlRBSU5FUihzdWJNZW51KSwgd2lkZ2V0LmdldCgpKTsKLSAgICAgICAgR3RrTWVudUl0ZW0qIG1l
bnVJdGVtID0gR1RLX01FTlVfSVRFTSh3aWRnZXQubGVha1JlZigpKTsKLSAgICAgICAgZ19vYmpl
Y3RfZm9yY2VfZmxvYXRpbmcoR19PQkpFQ1QobWVudUl0ZW0pKTsKLSAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoaXRlbS0+cHJpdi0+c3ViTWVudS5nZXQoKSwgd2Via2l0Q29udGV4
dE1lbnVJdGVtQ3JlYXRlRm9yR3RrSXRlbShtZW51SXRlbSkpOwotICAgIH0KLX0KLQotR3RrTWVu
dUl0ZW0qIHdlYmtpdENvbnRleHRNZW51SXRlbVJlbGVhc2UoV2ViS2l0Q29udGV4dE1lbnVJdGVt
KiBpdGVtKQorV2ViQ29udGV4dE1lbnVJdGVtRGF0YSB3ZWJraXRDb250ZXh0TWVudUl0ZW1Ub1dl
YkNvbnRleHRNZW51SXRlbURhdGEoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtKQogewogICAg
IGlmIChpdGVtLT5wcml2LT5zdWJNZW51KSB7Ci0gICAgICAgIFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0+IHN1Yk1lbnVJdGVtczsKKyAgICAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+
IHN1Yk1lbnVJdGVtczsKICAgICAgICAgd2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZShpdGVtLT5w
cml2LT5zdWJNZW51LmdldCgpLCBzdWJNZW51SXRlbXMpOwotICAgICAgICBDb250ZXh0TWVudSBz
dWJNZW51KHBsYXRmb3JtTWVudURlc2NyaXB0aW9uKHN1Yk1lbnVJdGVtcykpOwotICAgICAgICBp
dGVtLT5wcml2LT5tZW51SXRlbS0+c2V0U3ViTWVudSgmc3ViTWVudSk7CisgICAgICAgIHJldHVy
biBXZWJDb250ZXh0TWVudUl0ZW1EYXRhKGl0ZW0tPnByaXYtPm1lbnVJdGVtLT5hY3Rpb24oKSwg
aXRlbS0+cHJpdi0+bWVudUl0ZW0tPnRpdGxlKCksIGl0ZW0tPnByaXYtPm1lbnVJdGVtLT5lbmFi
bGVkKCksIHN1Yk1lbnVJdGVtcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0ZW0tPnByaXYtPm1l
bnVJdGVtLT5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOworICAgIHJldHVybiBXZWJDb250
ZXh0TWVudUl0ZW1EYXRhKGl0ZW0tPnByaXYtPm1lbnVJdGVtLT50eXBlKCksIGl0ZW0tPnByaXYt
Pm1lbnVJdGVtLT5hY3Rpb24oKSwgaXRlbS0+cHJpdi0+bWVudUl0ZW0tPnRpdGxlKCksIGl0ZW0t
PnByaXYtPm1lbnVJdGVtLT5lbmFibGVkKCksIGl0ZW0tPnByaXYtPm1lbnVJdGVtLT5jaGVja2Vk
KCkpOwogfQogCiAvKioKQEAgLTE2OCwxMSArMTM0LDEwIEBAIEd0a01lbnVJdGVtKiB3ZWJraXRD
b250ZXh0TWVudUl0ZW1SZWxlYXNlKFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKICAqLwog
V2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KEd0a0Fj
dGlvbiogYWN0aW9uKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEdUS19JU19BQ1RJT04o
YWN0aW9uKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1RLX0lTX0FDVElPTihhY3Rp
b24pLCBudWxscHRyKTsKIAotICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJ
VF9DT05URVhUX01FTlVfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5V
X0lURU0sIE5VTEwpKTsKLSAgICBpdGVtLT5wcml2LT5tZW51SXRlbSA9IHN0ZDo6bWFrZV91bmlx
dWU8Q29udGV4dE1lbnVJdGVtPihHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRlX21lbnVf
aXRlbShhY3Rpb24pKSk7Ci0gICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0tPnNldEFjdGlvbihDb250
ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25UYWcpOworICAgIFdlYktpdENvbnRleHRNZW51SXRl
bSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfQ09OVEVYVF9NRU5VX0lURU0sIG51bGxwdHIpKTsKKyAgICBpdGVtLT5wcml2LT5tZW51SXRl
bSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29udGV4dE1lbnVJdGVtR3RrPihhY3Rpb24pOwogCiAg
ICAgcmV0dXJuIGl0ZW07CiB9CkBAIC0xOTUsMTEgKzE2MCwxMSBAQCBXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcoR3RrQWN0aW9uKiBhY3Rpb24pCiAg
Ki8KIFdlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19m
cm9tX3N0b2NrX2FjdGlvbihXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCiB7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Tk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NVU1RPTSwgbnVsbHB0cik7CiAKLSAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRf
TUVOVV9JVEVNLCBOVUxMKSk7CisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VC
S0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01F
TlVfSVRFTSwgbnVsbHB0cikpOwogICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9IHdlYmtp
dENvbnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoYWN0aW9uKSA/IENoZWNrYWJsZUFjdGlvblR5
cGUgOiBBY3Rpb25UeXBlOwotICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gc3RkOjptYWtlX3Vu
aXF1ZTxDb250ZXh0TWVudUl0ZW0+KHR5cGUsIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0
aW9uVGFnKGFjdGlvbiksIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwoYWN0aW9uKSk7
CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvbnRleHRN
ZW51SXRlbUd0az4odHlwZSwgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRBY3Rpb25UYWcoYWN0
aW9uKSwgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRMYWJlbChhY3Rpb24pKTsKIAogICAgIHJl
dHVybiBpdGVtOwogfQpAQCAtMjE3LDExICsxODIsMTEgQEAgV2ViS2l0Q29udGV4dE1lbnVJdGVt
KiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdlYktpdENv
bnQKICAqLwogV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X2Zyb21fc3RvY2tfYWN0aW9uX3dpdGhfbGFiZWwoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24g
YWN0aW9uLCBjb25zdCBnY2hhciogbGFiZWwpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
YWN0aW9uID4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYm
IGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSwgbnVsbHB0cik7CiAK
LSAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lU
RU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7Cisg
ICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVN
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgbnVsbHB0cikpOwog
ICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9IHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXND
aGVja2FibGUoYWN0aW9uKSA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlOwotICAg
IGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZXh0TWVudUl0ZW0+
KHR5cGUsIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFnKGFjdGlvbiksIFN0cmlu
Zzo6ZnJvbVVURjgobGFiZWwpKTsKKyAgICBpdGVtLT5wcml2LT5tZW51SXRlbSA9IHN0ZDo6bWFr
ZV91bmlxdWU8V2ViQ29udGV4dE1lbnVJdGVtR3RrPih0eXBlLCB3ZWJraXRDb250ZXh0TWVudUFj
dGlvbkdldEFjdGlvblRhZyhhY3Rpb24pLCBTdHJpbmc6OmZyb21VVEY4KGxhYmVsKSk7CiAKICAg
ICByZXR1cm4gaXRlbTsKIH0KQEAgLTIzNywxNCArMjAyLDE0IEBAIFdlYktpdENvbnRleHRNZW51
SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRo
X2xhYmVsCiAgKi8KIFdlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld193aXRoX3N1Ym1lbnUoY29uc3QgZ2NoYXIqIGxhYmVsLCBXZWJLaXRDb250ZXh0TWVu
dSogc3VibWVudSkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChsYWJlbCwgMCk7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJtZW51KSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGFiZWwsIG51bGxwdHIpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlUoc3VibWVudSksIG51bGxwdHIpOwog
CiAgICAgaWYgKGNoZWNrQW5kV2FybklmTWVudUhhc1BhcmVudEl0ZW0oc3VibWVudSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdlYktpdENvbnRl
eHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0sIE5VTEwpKTsKLSAgICBpdGVtLT5wcml2LT5t
ZW51SXRlbSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGV4dE1lbnVJdGVtPihTdWJtZW51VHlwZSwg
Q29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnLCBTdHJpbmc6OmZyb21VVEY4KGxhYmVs
KSk7CisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVO
VV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgbnVsbHB0
cikpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb250
ZXh0TWVudUl0ZW1HdGs+KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRp
b25UYWcsIFN0cmluZzo6ZnJvbVVURjgobGFiZWwpKTsKICAgICBpdGVtLT5wcml2LT5zdWJNZW51
ID0gc3VibWVudTsKICAgICB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oc3VibWVudSwg
aXRlbSk7CiAKQEAgLTI2MCw4ICsyMjUsOCBAQCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9zdWJtZW51KGNvbnN0IGdjaGFyKiBsYQogICov
CiBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKHZvaWQpCiB7Ci0gICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lU
X0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVf
SVRFTSwgTlVMTCkpOwotICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gc3RkOjptYWtlX3VuaXF1
ZTxDb250ZXh0TWVudUl0ZW0+KFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0
aW9uLCBTdHJpbmcoKSk7CisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lU
X0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVf
SVRFTSwgbnVsbHB0cikpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb250ZXh0TWVudUl0ZW1HdGs+KFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7CiAKICAgICByZXR1cm4gaXRlbTsKIH0KQEAgLTI3Nyw3
ICsyNDIsNyBAQCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9uZXdfc2VwYXJhdG9yKHZvaWQpCiAgKi8KIEd0a0FjdGlvbiogd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9hY3Rpb24oV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtKQogewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0
ZW0pLCBudWxscHRyKTsKIAogICAgIHJldHVybiBpdGVtLT5wcml2LT5tZW51SXRlbS0+Z3RrQWN0
aW9uKCk7CiB9CkBAIC0yOTcsNyArMjYyLDcgQEAgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oV2ViS2l0Q29udGV4dE0KIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRl
bSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CiAKLSAgICByZXR1cm4g
d2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0oaXRlbS0+cHJpdi0+
bWVudUl0ZW0uZ2V0KCkpOworICAgIHJldHVybiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEZv
ckNvbnRleHRNZW51SXRlbSgqaXRlbS0+cHJpdi0+bWVudUl0ZW0pOwogfQogCiAvKioKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
SXRlbVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51SXRlbVByaXZhdGUuaAppbmRleCA3ZDg1ZjI1Li5iZTQ1MmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW1Q
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVJdGVtUHJpdmF0ZS5oCkBAIC0yMCwxMyArMjAsMTIgQEAKICNpZm5kZWYgV2ViS2l0
Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCiAjZGVmaW5lIFdlYktpdENvbnRleHRNZW51SXRlbVBy
aXZhdGVfaAogCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgorI2luY2x1ZGUg
IldlYkNvbnRleHRNZW51SXRlbUd0ay5oIgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRl
bS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAogV2ViS2l0Q29udGV4dE1lbnVJdGVt
KiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhJik7Ci1XZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdENvbnRleHRNZW51SXRl
bUNyZWF0ZShjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mKTsKLUd0a01lbnVJdGVtKiB3
ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNlKFdlYktpdENvbnRleHRNZW51SXRlbSopOwotdm9p
ZCB3ZWJraXRDb250ZXh0TWVudUl0ZW1TZXRTdWJNZW51RnJvbUd0a01lbnUoV2ViS2l0Q29udGV4
dE1lbnVJdGVtKiwgR3RrTWVudSopOworV2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1HdGsgd2Vi
a2l0Q29udGV4dE1lbnVJdGVtVG9XZWJDb250ZXh0TWVudUl0ZW1HdGsoV2ViS2l0Q29udGV4dE1l
bnVJdGVtKik7CitXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGEgd2Via2l0Q29udGV4dE1l
bnVJdGVtVG9XZWJDb250ZXh0TWVudUl0ZW1EYXRhKFdlYktpdENvbnRleHRNZW51SXRlbSopOwog
CiAjZW5kaWYgLy8gV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJp
dmF0ZS5oCmluZGV4IGUwYmFhYjEuLjNlNGNhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oCkBA
IC0yMCwxMyArMjAsMTIgQEAKICNpZm5kZWYgV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlX2gKICNk
ZWZpbmUgV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlX2gKIAotI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51SXRlbURhdGEuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1HdGsuaCIKICNpbmNs
dWRlICJXZWJLaXRDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAog
V2ViS2l0Q29udGV4dE1lbnUqIHdlYmtpdENvbnRleHRNZW51Q3JlYXRlKGNvbnN0IFZlY3RvcjxX
ZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7Ci1XZWJLaXRDb250ZXh0TWVudSogd2Vi
a2l0Q29udGV4dE1lbnVDcmVhdGUoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bT4mKTsKLXZvaWQgd2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZShXZWJLaXRDb250ZXh0TWVudSos
IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+Jik7Cit2b2lkIHdlYmtpdENvbnRleHRN
ZW51UG9wdWxhdGUoV2ViS2l0Q29udGV4dE1lbnUqLCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0
TWVudUl0ZW1HdGs+Jik7CiB2b2lkIHdlYmtpdENvbnRleHRNZW51UG9wdWxhdGUoV2ViS2l0Q29u
dGV4dE1lbnUqLCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwogdm9p
ZCB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oV2ViS2l0Q29udGV4dE1lbnUqLCBXZWJL
aXRDb250ZXh0TWVudUl0ZW0qKTsKIFdlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4
dE1lbnVHZXRQYXJlbnRJdGVtKFdlYktpdENvbnRleHRNZW51Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGRiNDAxODYu
LmJjOWFjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCkBAIC0yMDI3LDUyICsyMDI3LDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3
UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVD
aG9vc2UKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NF
Ul0sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7CiB9CiAKLXN0YXRpYyBib29sIHdlYmtpdFdl
YlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2RzTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQot
ewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdU
S19XSURHRVQod2ViVmlldykpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgZ2Jvb2xlYW4gc2hvd0lucHV0TWV0aG9kTWVudTsKLSAgICBnX29iamVjdF9n
ZXQoc2V0dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRo
b2RNZW51LCBOVUxMKTsKLSAgICByZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKLX0KLQotc3Rh
dGljIGludCBnZXRVbmljb2RlTWVudUl0ZW1Qb3NpdGlvbihXZWJLaXRDb250ZXh0TWVudSogY29u
dGV4dE1lbnUpCi17Ci0gICAgR0xpc3QqIGl0ZW1zID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRf
aXRlbXMoY29udGV4dE1lbnUpOwotICAgIEdMaXN0KiBpdGVyOwotICAgIGludCBpID0gMDsKLSAg
ICBmb3IgKGl0ZXIgPSBpdGVtcywgaSA9IDA7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVy
KSwgKytpKSB7Ci0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9D
T05URVhUX01FTlVfSVRFTShpdGVyLT5kYXRhKTsKLQotICAgICAgICBpZiAod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRl
bSkgPT0gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSkKLSAgICAgICAgICAgIHJl
dHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51SXRlbShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUpCi17Ci0gICAgaWYgKCF3ZWJr
aXRXZWJWaWV3U2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUod2ViVmlldykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFBsYWNlIHRoZSBpbSBjb250ZXh0IG1lbnUgaXRlbSByaWdodCBiZWZv
cmUgdGhlIHVuaWNvZGUgbWVudSBpdGVtCi0gICAgLy8gaWYgaXQncyBwcmVzZW50LgotICAgIGlu
dCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbiA9IGdldFVuaWNvZGVNZW51SXRlbVBvc2l0aW9uKGNv
bnRleHRNZW51KTsKLSAgICBpZiAodW5pY29kZU1lbnVJdGVtUG9zaXRpb24gPT0gLTEpCi0gICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLQotICAgIEd0a0lNQ29udGV4dCogaW1Db250
ZXh0ID0gd2Via2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2ViVmlldykpOwotICAgIEd0a01lbnUqIGltQ29udGV4dE1lbnUgPSBHVEtfTUVOVShndGtfbWVu
dV9uZXcoKSk7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9hcHBlbmRfbWVudWl0ZW1zKEdUS19J
TV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgR1RLX01FTlVfU0hFTEwoaW1Db250ZXh0TWVudSkp
OwotICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogbWVudUl0ZW0gPSB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0lOUFVUX01FVEhPRFMpOwotICAgIHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnVGcm9t
R3RrTWVudShtZW51SXRlbSwgaW1Db250ZXh0TWVudSk7Ci0gICAgd2Via2l0X2NvbnRleHRfbWVu
dV9pbnNlcnQoY29udGV4dE1lbnUsIG1lbnVJdGVtLCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbik7
Ci19Ci0KIHN0YXRpYyB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKEd0a01lbnVTaGVsbCosIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWdu
YWxzW0NPTlRFWFRfTUVOVV9ESVNNSVNTRURdLCAwLCBOVUxMKTsKQEAgLTIwODUsMjEgKzIwMzks
MTcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjb25zdCBWZWN0b3I8V2ViQ28KICAgICBBU1NFUlQoY29udGV4dE1lbnVQcm94
eSk7CiAKICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBjb250ZXh0TWVudSA9IGFkb3B0
R1JlZih3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShwcm9wb3NlZE1lbnUpKTsKLSAgICBpZiAoaGl0
VGVzdFJlc3VsdERhdGEuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIHdlYmtpdFdlYlZpZXdD
cmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51SXRlbSh3ZWJWaWV3LCBjb250ZXh0TWVudS5n
ZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQg
PSBhZG9wdEdSZWYod2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSkp
OwotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNvbnRleHRNZW51RXZlbnQod2Via2l0V2ViVmll
d0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudCh3ZWJWaWV3QmFzZSkpOwotCiAgICAgaWYgKHVzZXJE
YXRhKQogICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3NldF91c2VyX2RhdGEoV0VCS0lUX0NP
TlRFWFRfTUVOVShjb250ZXh0TWVudS5nZXQoKSksIHVzZXJEYXRhKTsKIAorICAgIEdSZWZQdHI8
V2ViS2l0SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IGFkb3B0R1JlZih3ZWJraXRIaXRU
ZXN0UmVzdWx0Q3JlYXRlKGhpdFRlc3RSZXN1bHREYXRhKSk7CisgICAgR1VuaXF1ZVB0cjxHZGtF
dmVudD4gY29udGV4dE1lbnVFdmVudCh3ZWJraXRXZWJWaWV3QmFzZVRha2VDb250ZXh0TWVudUV2
ZW50KHdlYlZpZXdCYXNlKSk7CiAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CiAgICAgZ19zaWdu
YWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NPTlRFWFRfTUVOVV0sIDAsIGNvbnRleHRNZW51Lmdl
dCgpLCBjb250ZXh0TWVudUV2ZW50LmdldCgpLCBoaXRUZXN0UmVzdWx0LmdldCgpLCAmcmV0dXJu
VmFsdWUpOwogICAgIGlmIChyZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPENvbnRleHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtczsKKyAgICBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtR3RrPiBjb250ZXh0TWVudUl0ZW1zOwogICAgIHdlYmtpdENvbnRleHRNZW51
UG9wdWxhdGUoY29udGV4dE1lbnUuZ2V0KCksIGNvbnRleHRNZW51SXRlbXMpOwogICAgIGNvbnRl
eHRNZW51UHJveHktPnBvcHVsYXRlKGNvbnRleHRNZW51SXRlbXMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcApp
bmRleCA1MDAxZDE5Li4yM2FjYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTQ5LDggKzQ5LDggQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0aWMgdm9pZCBjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRD
YWxsYmFjayhHdGtBY3Rpb24qIGFjdGlvbiwgV2ViUGFnZVByb3h5KiBwYWdlKQogewogICAgIGdi
b29sZWFuIGlzVG9nZ2xlID0gR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKTsKLSAgICBXZWJL
aXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGEgaXRlbShpc1RvZ2dsZSA/IFdlYkNvcmU6OkNoZWNr
YWJsZUFjdGlvblR5cGUgOiBXZWJDb3JlOjpBY3Rpb25UeXBlLAotICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpDb250ZXh0TWVudUFjdGlvbj4oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dl
dF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIGdDb250ZXh0TWVudUFjdGlvbklkKSkpLAorICAgIFdl
YkNvbnRleHRNZW51SXRlbURhdGEgaXRlbShpc1RvZ2dsZSA/IENoZWNrYWJsZUFjdGlvblR5cGUg
OiBBY3Rpb25UeXBlLAorICAgICAgICBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oR1BP
SU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIGdDb250ZXh0
TWVudUFjdGlvbklkKSkpLAogICAgICAgICBTdHJpbmc6OmZyb21VVEY4KGd0a19hY3Rpb25fZ2V0
X2xhYmVsKGFjdGlvbikpLCBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSwKICAgICAg
ICAgaXNUb2dnbGUgPyBndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNU
SU9OKGFjdGlvbikpIDogZmFsc2UpOwogICAgIHBhZ2UtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KGl0ZW0pOwpAQCAtODUsNTkgKzg1LDczIEBAIHN0YXRpYyB2b2lkIGNvbnRleHRNZW51SXRlbVZp
c2liaWxpdHlDaGFuZ2VkKEd0a0FjdGlvbiosIEdQYXJhbVNwZWMqLCBXZWJDb250ZXh0CiAgICAg
ICAgIGd0a193aWRnZXRfaGlkZShsYXN0SXRlbVZpc2libGVTZXBhcmF0b3IpOwogfQogCi12b2lk
IFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmFwcGVuZChDb250ZXh0TWVudUl0ZW0mIG1lbnVJdGVt
KQordm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjphcHBlbmQoR3RrTWVudSogbWVudSwgY29u
c3QgV2ViQ29udGV4dE1lbnVJdGVtR3RrJiBtZW51SXRlbSkKIHsKICAgICB1bnNpZ25lZCBsb25n
IHNpZ25hbEhhbmRsZXJJZDsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IG1lbnVJdGVtLmd0a0Fj
dGlvbigpOwotICAgIGlmIChhY3Rpb24pIHsKKyAgICBHdGtXaWRnZXQqIGd0a01lbnVJdGVtOwor
ICAgIGlmIChHdGtBY3Rpb24qIGFjdGlvbiA9IG1lbnVJdGVtLmd0a0FjdGlvbigpKSB7CisgICAg
ICAgIGd0a01lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7CisK
ICAgICAgICAgc3dpdGNoIChtZW51SXRlbS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBY3Rpb25U
eXBlOgogICAgICAgICBjYXNlIENoZWNrYWJsZUFjdGlvblR5cGU6CiAgICAgICAgICAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCBnQ29udGV4dE1lbnVBY3Rpb25JZCwgR0lO
VF9UT19QT0lOVEVSKG1lbnVJdGVtLmFjdGlvbigpKSk7CiAgICAgICAgICAgICBzaWduYWxIYW5k
bGVySWQgPSBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhj
b250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayksIG1fcGFnZSk7CiAgICAgICAgICAgICBt
X3NpZ25hbEhhbmRsZXJzLnNldChzaWduYWxIYW5kbGVySWQsIGFjdGlvbik7Ci0gICAgICAgICAg
ICAvLyBGYWxsIHRocm91Z2guCi0gICAgICAgIGNhc2UgU3VibWVudVR5cGU6CiAgICAgICAgICAg
ICBzaWduYWxIYW5kbGVySWQgPSBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgIm5vdGlmeTo6dmlz
aWJsZSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVJdGVtVmlzaWJpbGl0eUNoYW5nZWQpLCB0aGlz
KTsKICAgICAgICAgICAgIG1fc2lnbmFsSGFuZGxlcnMuc2V0KHNpZ25hbEhhbmRsZXJJZCwgYWN0
aW9uKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1Ym1lbnVUeXBlOiB7Cisg
ICAgICAgICAgICBzaWduYWxIYW5kbGVySWQgPSBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgIm5v
dGlmeTo6dmlzaWJsZSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVJdGVtVmlzaWJpbGl0eUNoYW5n
ZWQpLCB0aGlzKTsKKyAgICAgICAgICAgIG1fc2lnbmFsSGFuZGxlcnMuc2V0KHNpZ25hbEhhbmRs
ZXJJZCwgYWN0aW9uKTsKKyAgICAgICAgICAgIEd0a01lbnUqIHN1Ym1lbnUgPSBHVEtfTUVOVShn
dGtfbWVudV9uZXcoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtZW51
SXRlbS5zdWJtZW51SXRlbXMoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmQoc3VibWVudSwgaXRl
bSk7CisgICAgICAgICAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdUS19NRU5VX0lURU0o
Z3RrTWVudUl0ZW0pLCBHVEtfV0lER0VUKHN1Ym1lbnUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgU2VwYXJhdG9yVHlwZToKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQobWVudUl0ZW0udHlwZSgpID09IFNlcGFyYXRvclR5cGUpOwor
ICAgICAgICBndGtNZW51SXRlbSA9IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpOwogICAg
IH0KIAotICAgIG1fbWVudS5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKKyAgICBndGtfbWVudV9zaGVs
bF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobWVudSksIGd0a01lbnVJdGVtKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3coZ3RrTWVudUl0ZW0pOwogfQogCiAvLyBQb3B1bGF0ZSB0aGUgY29udGV4dCBtZW51
IGVuc3VyaW5nIHRoYXQ6CiAvLyAgLSBUaGVyZSBhcmVuJ3Qgc2VwYXJhdG9ycyBuZXh0IHRvIGVh
Y2ggb3RoZXIuCiAvLyAgLSBUaGVyZSBhcmVuJ3Qgc2VwYXJhdG9ycyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBtZW51LgogLy8gIC0gVGhlcmUgYXJlbid0IHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBv
ZiB0aGUgbWVudS4KLXZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6cG9wdWxhdGUoVmVjdG9y
PENvbnRleHRNZW51SXRlbT4mIGl0ZW1zKQordm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpw
b3B1bGF0ZShWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtR3RrPiYgaXRlbXMpCiB7CiAgICAgYm9v
bCBwcmV2aW91c0lzU2VwYXJhdG9yID0gZmFsc2U7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IENvbnRleHRNZW51SXRlbSYgbWVudUl0ZW0gPSBpdGVtcy5hdChpKTsKKyAgICAgICAgV2ViQ29u
dGV4dE1lbnVJdGVtR3RrJiBtZW51SXRlbSA9IGl0ZW1zLmF0KGkpOwogICAgICAgICBpZiAobWVu
dUl0ZW0udHlwZSgpID09IFNlcGFyYXRvclR5cGUpIHsKICAgICAgICAgICAgIHByZXZpb3VzSXNT
ZXBhcmF0b3IgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocHJldmlvdXNJc1NlcGFyYXRvciAmJiAhaXNFbXB0eSkKLSAgICAgICAgICAgIGFw
cGVuZChpdGVtcy5hdChpIC0gMSkpOworICAgICAgICAgICAgYXBwZW5kKG1fbWVudSwgaXRlbXMu
YXQoaSAtIDEpKTsKICAgICAgICAgcHJldmlvdXNJc1NlcGFyYXRvciA9IGZhbHNlOwogCi0gICAg
ICAgIGFwcGVuZChtZW51SXRlbSk7CisgICAgICAgIGFwcGVuZChtX21lbnUsIG1lbnVJdGVtKTsK
ICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwogICAgIH0KIH0KIAogdm9pZCBXZWJDb250ZXh0TWVu
dVByb3h5R3RrOjpwb3B1bGF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvbnRleHRNZW51SXRl
bT4+JiBpdGVtcykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgIENvbnRleHRNZW51SXRlbSBtZW51aXRlbSA9IGl0ZW1zLmF0KGkpLT5k
YXRhKCkuY29yZSgpOwotICAgICAgICBhcHBlbmQobWVudWl0ZW0pOworICAgIGZvciAoY29uc3Qg
YXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgIFdlYkNvbnRleHRNZW51SXRlbUd0ayBtZW51
aXRlbShpdGVtLT5kYXRhKCkpOworICAgICAgICBhcHBlbmQobV9tZW51LCBtZW51aXRlbSk7CiAg
ICAgfQogfQogCkBAIC0xNjAsNyArMTc0LDkgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3Rr
OjpzaG93KCkKICAgICBpZiAoIWl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgcG9wdWxhdGUoaXRl
bXMpOwogCi0gICAgaWYgKCFtX21lbnUuaXRlbUNvdW50KCkpCisgICAgdW5zaWduZWQgY2hpbGRD
b3VudCA9IDA7CisgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9tZW51
KSwgW10oR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgZGF0YSkgeyAoKnN0YXRpY19jYXN0PHVuc2lnbmVk
Kj4oZGF0YSkpKys7IH0sICZjaGlsZENvdW50KTsKKyAgICBpZiAoIWNoaWxkQ291bnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fcG9wdXBQb3NpdGlvbiA9IGNvbnZlcnRXaWRnZXRQb2ludFRv
U2NyZWVuUG9pbnQobV93ZWJWaWV3LCBtX2NvbnRleHQubWVudUxvY2F0aW9uKCkpOwpAQCAtMTY4
LDggKzE4NCw4IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6c2hvdygpCiAgICAgLy8g
RGlzcGxheSBtZW51IGluaXRpYXRlZCBieSByaWdodCBjbGljayAobW91c2UgYnV0dG9uIHByZXNz
ZWQgPSAzKS4KICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gbV9wYWdlLT5j
dXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpOwogICAgIGNvbnN0IEdka0V2ZW50KiBl
dmVudCA9IG1vdXNlRXZlbnQgPyBtb3VzZUV2ZW50LT5uYXRpdmVFdmVudCgpIDogMDsKLSAgICBn
dGtfbWVudV9hdHRhY2hfdG9fd2lkZ2V0KG1fbWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIEdU
S19XSURHRVQobV93ZWJWaWV3KSwgMCk7Ci0gICAgZ3RrX21lbnVfcG9wdXAobV9tZW51LnBsYXRm
b3JtRGVzY3JpcHRpb24oKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25G
dW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsCisgICAgZ3RrX21lbnVfYXR0YWNoX3Rv
X3dpZGdldChtX21lbnUsIEdUS19XSURHRVQobV93ZWJWaWV3KSwgbnVsbHB0cik7CisgICAgZ3Rr
X21lbnVfcG9wdXAobV9tZW51LCBudWxscHRyLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEd0
a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywKICAgICAgICAg
ICAgICAgICAgICBldmVudCA/IGV2ZW50LT5idXR0b24uYnV0dG9uIDogMywgZXZlbnQgPyBldmVu
dC0+YnV0dG9uLnRpbWUgOiBHREtfQ1VSUkVOVF9USU1FKTsKIH0KIApAQCAtMTc3LDE5ICsxOTMs
MjAgQEAgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6V2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtX
aWRnZXQqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSYKICAgICA6IFdlYkNvbnRleHRNZW51UHJveHko
Y29udGV4dCwgdXNlckRhdGEpCiAgICAgLCBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fcGFn
ZSgmcGFnZSkKKyAgICAsIG1fbWVudShHVEtfTUVOVShndGtfbWVudV9uZXcoKSkpCiB7CiAgICAg
d2Via2l0V2ViVmlld0Jhc2VTZXRBY3RpdmVDb250ZXh0TWVudVByb3h5KFdFQktJVF9XRUJfVklF
V19CQVNFKG1fd2ViVmlldyksIHRoaXMpOwogfQogCiBXZWJDb250ZXh0TWVudVByb3h5R3RrOjp+
V2ViQ29udGV4dE1lbnVQcm94eUd0aygpCiB7Ci0gICAgZ3RrX21lbnVfcG9wZG93bihtX21lbnUu
cGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKKyAgICBndGtfbWVudV9wb3Bkb3duKG1fbWVudSk7CiAK
ICAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBtX3NpZ25hbEhhbmRsZXJzKQogICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoaGFuZGxlci52YWx1ZSwgaGFuZGxlci5rZXkpOwogICAg
IG1fc2lnbmFsSGFuZGxlcnMuY2xlYXIoKTsKIAotICAgIG1fbWVudS5zZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKG51bGxwdHIpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fbWVu
dSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6Om1lbnVQb3NpdGlvbkZ1bmN0
aW9uKEd0a01lbnUqIG1lbnUsIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIFdl
YkNvbnRleHRNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmgKaW5kZXggOGYzYmI4YS4u
OWM4ODkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0TWVudVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJD
b250ZXh0TWVudVByb3h5R3RrLmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEVOQUJMRShDT05U
RVhUX01FTlVTKQogCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtR3RrLmgiCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KIApAQCAtNDQsMTggKzQ0LDE4IEBAIHB1YmxpYzoKICAgICBXZWJDb250ZXh0TWVudVByb3h5
R3RrKEd0a1dpZGdldCosIFdlYlBhZ2VQcm94eSYsIGNvbnN0IENvbnRleHRNZW51Q29udGV4dERh
dGEmLCBjb25zdCBVc2VyRGF0YSYpOwogICAgIH5XZWJDb250ZXh0TWVudVByb3h5R3RrKCk7CiAK
LSAgICB2b2lkIHBvcHVsYXRlKFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+Jik7Ci0g
ICAgR3RrTWVudSogZ3RrTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVudS5wbGF0Zm9ybURlc2Ny
aXB0aW9uKCk7IH0KKyAgICB2b2lkIHBvcHVsYXRlKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1H
dGs+Jik7CisgICAgR3RrTWVudSogZ3RrTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVudTsgfQog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBh
cHBlbmQoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtJik7CisgICAgdm9pZCBhcHBlbmQoR3RrTWVu
dSosIGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbUd0ayYpOwogICAgIHZvaWQgcG9wdWxhdGUoY29u
c3QgVmVjdG9yPFJlZlB0cjxXZWJDb250ZXh0TWVudUl0ZW0+PiYpOwogICAgIHN0YXRpYyB2b2lk
IG1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwg
V2ViQ29udGV4dE1lbnVQcm94eUd0ayopOwogCiAgICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXc7CiAg
ICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Ci0gICAgV2ViQ29yZTo6Q29udGV4dE1lbnUgbV9tZW51
OworICAgIEd0a01lbnUqIG1fbWVudTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3BvcHVwUG9z
aXRpb247CiAgICAgSGFzaE1hcDx1bnNpZ25lZCBsb25nLCBHdGtBY3Rpb24qPiBtX3NpZ25hbEhh
bmRsZXJzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcAppbmRleCAwOTMx
Y2JmLi5mNWZhMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCkBAIC0y
NjQsNyArMjY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGdldEN1c3RvbU1lbnVG
cm9tRGVmYXVsdEl0ZW1zKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBo
aXRUZXN0UmVzdWx0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYgZGVm
YXVsdE1lbnUsIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgbmV3TWVudSwgUmVmUHRy
PEFQSTo6T2JqZWN0PiYgdXNlckRhdGEpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBHUmVmUHRy
PFdlYktpdENvbnRleHRNZW51PiBjb250ZXh0TWVudSA9IGFkb3B0R1JlZih3ZWJraXRDb250ZXh0
TWVudUNyZWF0ZShkZWZhdWx0TWVudSkpOworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRN
ZW51PiBjb250ZXh0TWVudSA9IGFkb3B0R1JlZih3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShraXRJ
dGVtcyhkZWZhdWx0TWVudSkpKTsKICAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJIaXRUZXN0UmVz
dWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0gYWRvcHRHUmVmKHdlYmtpdFdlYkhpdFRlc3RSZXN1bHRD
cmVhdGUoaGl0VGVzdFJlc3VsdCkpOwogICAgICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAg
ICAgICAgZ19zaWduYWxfZW1pdChtX3dlYlBhZ2UsIHNpZ25hbHNbQ09OVEVYVF9NRU5VXSwgMCwg
Y29udGV4dE1lbnUuZ2V0KCksIHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCksICZyZXR1cm5WYWx1ZSk7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWE4
YTExMS4uZGIxNTg4NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTExLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2UgQ1JPU1NfUExBVEZP
Uk1fQ09OVEVYVF9NRU5VUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwNjQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVtb3ZlIHRlc3QgZm9yIGlucHV0IG1ldGhvZHMgc3VibWVudS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwOgor
CiAyMDE1LTExLTAzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTkxOTk1LgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcApp
bmRleCBmMmYwZDZhLi5lMDhlYzc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcApAQCAtOTMsMTcgKzkzLDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFNo
b3dJbnB1dE1ldGhvZHNNZW51KCkKLSAgICB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5n
cyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAg
ICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBn
Ym9vbGVhbiBzaG93SW5wdXRNZXRob2RNZW51OwotICAgICAgICBnX29iamVjdF9nZXQoc2V0dGlu
Z3MsICJndGstc2hvdy1pbnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBO
VUxMKTsKLSAgICAgICAgcmV0dXJuIHNob3dJbnB1dE1ldGhvZE1lbnU7Ci0gICAgfQotCiAgICAg
dm9pZCBjaGVja0FjdGlvblN0YXRlKEd0a0FjdGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkK
ICAgICB7CiAgICAgICAgIGlmIChzdGF0ZSAmIFZpc2libGUpCkBAIC0zNDgsOCArMzM3LDYgQEAg
cHVibGljOgogICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFu
ZEdldE5leHQoaXRlcik7CiAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVD
VF9BTEwsIFZpc2libGUgfCBFbmFibGVkKTsKICAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFNob3dJbnB1dE1ldGhvZHNNZW51KCkpCi0gICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JTlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7CiAgICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVkKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNlbGVjdGlvbjoK
</data>
<flag name="review"
          id="289902"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>