<?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>199402</bug_id>
          
          <creation_ts>2019-07-02 05:36:52 -0700</creation_ts>
          <short_desc>[GTK] Crash in webkitWebViewBaseRenderHostFileDescriptor</short_desc>
          <delta_ts>2020-01-07 11:15:46 -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>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ykonotopov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1549532</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-07-02 05:36:52 -0700</bug_when>
    <thetext>From this backtrace:

                Stack trace of thread 764:
                #0  0x00007fbbc42b16df _Z41webkitWebViewBaseRenderHostFileDescriptorP18_WebKitWebViewBase (libwebkit2gtk-4.0.so.37)
                #1  0x00007fbbc42a1c6a _ZN6WebKit14PageClientImpl18hostFileDescriptorEv (libwebkit2gtk-4.0.so.37)
                #2  0x00007fbbc41d33d0 _ZN6WebKit12WebPageProxy18creationParametersERNS_15WebProcessProxyERNS_16DrawingAreaProxyE (libwebkit2gtk-4.0.so.37)
                #3  0x00007fbbc41d38f0 _ZN6WebKit12WebPageProxy17initializeWebPageEv (libwebkit2gtk-4.0.so.37)
                #4  0x00007fbbc41d3aed _ZN6WebKit12WebPageProxy27finishAttachingToWebProcessENS0_13IsProcessSwapE (libwebkit2gtk-4.0.so.37)
                #5  0x00007fbbc41d3e8e _ZN6WebKit12WebPageProxy11loadRequestEON7WebCore15ResourceRequestENS1_28ShouldOpenExternalURLsPolicyEPN3API6ObjectE (libwebkit2gtk-4.0.so.37)
                #6  0x00007fbbc4292f6a webkit_web_view_load_uri (libwebkit2gtk-4.0.so.37)
                #7  0x00007fbbc7e2bee2 ephy_web_view_load_url (libephymain.so)
                #8  0x00007fbbc7e2f96a ephy_web_view_load_homepage (libephymain.so)
                #9  0x00007fbbc7e0c2f6 ephy_window_open_link (libephymain.so)
                #10 0x00007fbbc1a36bb8 ffi_call_unix64 (libffi.so.6)
                #11 0x00007fbbc1a363b4 ffi_call (libffi.so.6)
                #12 0x00007fbbc73f024d g_cclosure_marshal_generic (libgobject-2.0.so.0)
                #13 0x00007fbbc73ef742 g_closure_invoke (libgobject-2.0.so.0)
                #14 0x00007fbbc7402cf6 signal_emit_unlocked_R (libgobject-2.0.so.0)
                #15 0x00007fbbc740b94e g_signal_emit_valist (libgobject-2.0.so.0)
                #16 0x00007fbbc740c963 g_signal_emit (libgobject-2.0.so.0)
                #17 0x00007fbbc7df6fff ephy_link_open (libephymain.so)
                #18 0x00007fbbc7e00f8a ephy_session_resume (libephymain.so)
                #19 0x00007fbbc73ef996 _g_closure_invoke_va (libgobject-2.0.so.0)
                #20 0x00007fbbc740c31c g_signal_emit_valist (libgobject-2.0.so.0)
                #21 0x00007fbbc740c963 g_signal_emit (libgobject-2.0.so.0)
                #22 0x00007fbbc751c5f8 g_application_real_local_command_line (libgio-2.0.so.0)
                #23 0x00007fbbc751c7b2 g_application_run (libgio-2.0.so.0)
                #24 0x00005594709be096 main (epiphany)
                #25 0x00007fbbc6f45f13 __libc_start_main (libc.so.6)
                #26 0x00005594709be31e _start (epiphany)

We can see a crash here, probably because acceleratedBackingStore is null:

#if USE(WPE_RENDERER)
int webkitWebViewBaseRenderHostFileDescriptor(WebKitWebViewBase* webkitWebViewBase)
{
    return webkitWebViewBase-&gt;priv-&gt;acceleratedBackingStore-&gt;renderHostFileDescriptor();
}
#endif

It can happen if AcceleratedBackingStore::create returns null. AcceleratedBackingStore::create has a release assert to make sure that never happens directly, but AcceleratedBackingStoreWayland::create and AcceleratedBackingStoreX11::create do not. Both can return null for various reasons. The crash occurs on a VM image that&apos;s probably either got broken OpenGL or a missing GL extension, but it&apos;s impossible to tell which from this backtrace because the crash occurs too late.

I suggest we either make WebKitWebViewBase expect and handle the case where acceleratedBackingStore is null, or else crash earlier with a RELEASE_ASSERT in AcceleratedBackingStoreWayland::create and AcceleratedBackingStoreX11::create when it&apos;s not. Ideally line number of the crash would indicate why creation failed, e.g.:

RELEASE_ASSERT(display.supportsXComposite());
RELEASE_ASSERT(display.supportsXDamage(s_damageEventBase, s_damageErrorBase));

Missing information:

 * I don&apos;t know whether X11 or Wayland is being used here, but it&apos;s probably not relevant to this bug because both can return null
 * I don&apos;t have an actual proper backtrace from gdb, but I think we see what&apos;s going wrong without it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549533</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-07-02 05:40:28 -0700</bug_when>
    <thetext>BTW USE(WPE_RENDERER) is obviously enabled and very recent libwpe and wpebackend-fdo is in use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553860</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-18 03:37:49 -0700</bug_when>
    <thetext>Yes, this is because OpenGL is not available, or any of the extensions not present. In some cases we don&apos;t null check because when hw acceleration is not available HardwareAccelerationManager disables AC mode, so we know those methods will never be called. However, in the case of WPE renderer we are not doing all the required checks in HardwareAccelerationManager and some places like webkitWebViewBaseRenderHostFileDescriptor() are always called and null-check is always required. So, we have a combinations of issues here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553865</commentid>
    <comment_count>3</comment_count>
      <attachid>374372</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-18 03:48:01 -0700</bug_when>
    <thetext>Created attachment 374372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553866</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-18 03:49:38 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553871</commentid>
    <comment_count>5</comment_count>
      <attachid>374372</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-07-18 04:10:44 -0700</bug_when>
    <thetext>Comment on attachment 374372
Patch

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

&gt; Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:76
&gt; -std::unique_ptr&lt;AcceleratedBackingStoreWayland&gt; AcceleratedBackingStoreWayland::create(WebPageProxy&amp; webPage)
&gt; +bool AcceleratedBackingStoreWayland::checkRequirements()
&gt;  {
&gt;  #if USE(WPE_RENDERER)
&gt;      if (!glImageTargetTexture2D) {
&gt;          if (!wpe_fdo_initialize_for_egl_display(PlatformDisplay::sharedDisplay().eglDisplay()))
&gt; -            return nullptr;
&gt; +            return false;
&gt;  
&gt;          std::unique_ptr&lt;WebCore::GLContext&gt; eglContext = GLContext::createOffscreenContext();
&gt;          if (!eglContext)
&gt; -            return nullptr;
&gt; +            return false;

Hmm, you sure this is a good idea? This does a lot of serious work under the guise of a checkRequirements function. I don&apos;t think a reasonable programmer calling AcceleratedBackingStore::checkRequirements would expect a function with this name to be setting up graphics resources like this. I think it&apos;s only a naming problem; you could call it AcceleratedBackingStore::setup or something like that, for example. (Although that too is an odd name for a static method....)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553878</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-18 05:00:52 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; Comment on attachment 374372 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374372&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:76
&gt; &gt; -std::unique_ptr&lt;AcceleratedBackingStoreWayland&gt; AcceleratedBackingStoreWayland::create(WebPageProxy&amp; webPage)
&gt; &gt; +bool AcceleratedBackingStoreWayland::checkRequirements()
&gt; &gt;  {
&gt; &gt;  #if USE(WPE_RENDERER)
&gt; &gt;      if (!glImageTargetTexture2D) {
&gt; &gt;          if (!wpe_fdo_initialize_for_egl_display(PlatformDisplay::sharedDisplay().eglDisplay()))
&gt; &gt; -            return nullptr;
&gt; &gt; +            return false;
&gt; &gt;  
&gt; &gt;          std::unique_ptr&lt;WebCore::GLContext&gt; eglContext = GLContext::createOffscreenContext();
&gt; &gt;          if (!eglContext)
&gt; &gt; -            return nullptr;
&gt; &gt; +            return false;
&gt; 
&gt; Hmm, you sure this is a good idea? This does a lot of serious work under the
&gt; guise of a checkRequirements function. I don&apos;t think a reasonable programmer
&gt; calling AcceleratedBackingStore::checkRequirements would expect a function
&gt; with this name to be setting up graphics resources like this. I think it&apos;s
&gt; only a naming problem; you could call it AcceleratedBackingStore::setup or
&gt; something like that, for example. (Although that too is an odd name for a
&gt; static method....)

It&apos;s just caching global stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553901</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-18 07:42:54 -0700</bug_when>
    <thetext>Committed r247563: &lt;https://trac.webkit.org/changeset/247563&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602867</commentid>
    <comment_count>8</comment_count>
    <who name="Yuri Konotopov">ykonotopov</who>
    <bug_when>2020-01-05 10:33:26 -0800</bug_when>
    <thetext>This change breaks Liferea compilation in headless (without X or Wayland) environment, because it calls webkit_settings_new() while compilling GIR XML.

As I see it&apos;s not possible to call webkit_settings_new in headless environment now because it fails in WebKit::AcceleratedBackingStore::checkRequirements ().
Is it desired behavior?

Backtrace follows.
#0  0x00007f520aba0ae0 in raise () from /lib64/libc.so.6
[Current thread is 1 (Thread 0x7f52060b3a00 (LWP 53958))]
(gdb) bt full
#0  0x00007f520aba0ae0 in raise () from /lib64/libc.so.6
No symbol table info available.
#1  0x00007f520ab8c2c4 in abort () from /lib64/libc.so.6
No symbol table info available.
#2  0x00007f520d7f2f77 in CRASH_WITH_INFO(...) ()
    at DerivedSources/ForwardingHeaders/wtf/Assertions.h:658
No locals.
#3  WebKit::AcceleratedBackingStore::checkRequirements ()
    at  webkit-gtk-2.26.2/work/webkitgtk-2.26.2/Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.cpp:56
No locals.
#4  0x00007f520dc3b27b in WebKit::HardwareAccelerationManager::HardwareAccelerationManager (
    this=0x7f5210209530 &lt;WebKit::HardwareAccelerationManager::singleton()::manager&gt;)
    at  webkit-gtk-2.26.2/work/webkitgtk-2.26.2/Source/WebKit/UIProcess/gtk/HardwareAccelerationManager.cpp:55
        disableCompositing = &lt;optimized out&gt;
        forceCompositing = &lt;optimized out&gt;
        disableCompositing = &lt;optimized out&gt;
        forceCompositing = &lt;optimized out&gt;
#5  0x00007f520dc3b2fc in WTF::NeverDestroyed&lt;WebKit::HardwareAccelerationManager&gt;::NeverDestroyed&lt;&gt;() (this=0x7f5210209530 &lt;WebKit::HardwareAccelerationManager::singleton()::manager&gt;)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include/g++-v9/new:174
No locals.
#6  WebKit::HardwareAccelerationManager::singleton ()
    at  webkit-gtk-2.26.2/work/webkitgtk-2.26.2/Source/WebKit/UIProcess/gtk/HardwareAccelerationManager.cpp:36
        manager = {m_storage = {__data = &quot;\001&quot;, __align = {&lt;No data fields&gt;}}}
#7  0x00007f520dc441ad in WebKit::WebPreferences::platformInitializeStore (this=0x7f52046fe000)
    at  webkit-gtk-2.26.2/work/webkitgtk-2.26.2/Source/WebKit/UIProcess/gtk/WebPreferencesGtk.cpp:37
No locals.
#8  0x00007f520daf3e72 in WebKit::WebPreferences::create (identifier=..., keyPrefix=..., globalDebugKeyPrefix=...) at DerivedSources/ForwardingHeaders/wtf/ThreadSafeRefCounted.h:37
No locals.
#9  0x00007f520db96d04 in _WebKitSettingsPrivate::_WebKitSettingsPrivate (this=0x55acc9cd2b80) at DerivedSources/ForwardingHeaders/wtf/RefPtr.h:56
No locals.
#10 0x00007f520af2b129 in g_type_create_instance () from /usr/lib64/libgobject-2.0.so.0
No symbol table info available.
#11 0x00007f520af0d1ed in ?? () from /usr/lib64/libgobject-2.0.so.0
No symbol table info available.
#12 0x00007f520af0ed5d in g_object_new_with_properties () from /usr/lib64/libgobject-2.0.so.0
No symbol table info available.
#13 0x00007f520af0f779 in g_object_new () from /usr/lib64/libgobject-2.0.so.0
No symbol table info available.
#14 0x00007f520db914ba in webkit_settings_new () at  webkit-gtk-2.26.2/work/webkitgtk-2.26.2/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp:1535
No locals.
#15 0x000055acc93b249f in liferea_webkit_impl_init (self=0x7f51f800dd00) at webkit.c:380
        disable_javascript = 21932
        enable_plugins = 48
        font = &lt;optimized out&gt;
        fontSize = &lt;optimized out&gt;
        security_manager = &lt;optimized out&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603677</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-01-07 11:15:46 -0800</bug_when>
    <thetext>I think you can just remove the RELEASE_ASSERT() from AcceleratedBackingStore::checkRequirements. There&apos;s no reason that should crash in headless mode. A crash is only warranted if AcceleratedBackingStore::create gets called.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374372</attachid>
            <date>2019-07-18 03:48:01 -0700</date>
            <delta_ts>2019-07-18 04:10:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-disable-ac.diff</filename>
            <type>text/plain</type>
            <size>15191</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODZiNGJkZDZlMzQuLjYwZDExOTZjYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDE5LTA3LTE4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBDcmFzaCBpbiB3ZWJraXRXZWJWaWV3QmFzZVJlbmRlckhv
c3RGaWxlRGVzY3JpcHRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk5NDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlcmUgYXJlIHR3byBwcm9ibGVtcyBoZXJlOgorCisgICAgICAgICAtIFdlIG5l
ZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNoZWNrcyB3ZSBkbyBpbiBIYXJkd2FyZUFjY2VsZXJhdGlv
bk1hbmFnZXIgdG8gZGlzYWJsZSBBQyBtb2RlIGFyZSB0aGUgc2FtZQorICAgICAgICAgICBhcyB0
aGUgb25lcyBkb25lIGluIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlIGNyZWF0ZSgpIG1ldGhvZHMu
IFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBXUEUgcmVuZGVyZXIuCisgICAgICAgICAtIFNvbWUg
b2YgdGhlIHBsYWNlcyB3aGVyZSBhY2NlbGVyYXRlQmFja2luZ1N0b3JlIGlzIHVzZWQsIGNhbiBi
ZSBjYWxsZWQgZXZlbiBpZiBBQyBtb2RlIGlzIGRpc2FibGVkLCBzbyB3ZQorICAgICAgICAgICBu
ZWVkIHRvIG51bGwtY2hlY2sgdGhlcmUgYmVmb3JlIHVzaW5nIHRoZSBiYWNraW5nIHN0b3JlLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmF3KTogQWRkIGFuIGFzc2VydCB0byBlbnN1cmUgYWNj
ZWxlcmF0ZUJhY2tpbmdTdG9yZSBpcyBub3QgbnVsbHB0ciBoZXJlLgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTog
RGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VNYWtlR0xDb250ZXh0
Q3VycmVudCk6IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdl
YlByb2Nlc3MpOiBOdWxsLWNoZWNrIGFjY2VsZXJhdGVCYWNraW5nU3RvcmUgYmVmb3JlIHVzaW5n
IGl0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VQYWdlQ2xvc2VkKTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVJlbmRlckhvc3RGaWxlRGVzY3JpcHRvcik6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZTo6Y2hlY2tSZXF1aXJlbWVudHMp
OiBDYWxsIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6Y2hlY2tSZXF1aXJlbWVudHMo
KQorICAgICAgICBvciBBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMTo6Y2hlY2tSZXF1aXJlbWVu
dHMoKSBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgZGlzcGxheS4KKyAgICAgICAgKFdlYktpdDo6
QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSk6IFJldHVybiBlYXJseSBpZiBBQyBtb2Rl
IGlzIGRpc2FibGVkIGluIEhhcmR3YXJlQWNjZWxlcmF0aW9uTWFuYWdlci4KKyAgICAgICAgKiBV
SVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQ6OmNoZWNrUmVxdWlyZW1lbnRzKTog
Q2hlY2sgcmVxdWlyZW1lbnRzIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaW4gV2F5bGFuZC4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjpjcmVhdGUp
OiBBc3NlcnQgdGhhdCByZXF1aXJlbWVudHMgYXJlIHByZXNlbnQuCisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTE6OmNoZWNrUmVxdWlyZW1lbnRzKTogQ2hlY2sg
cmVxdWlyZW1lbnRzIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaW4gWDExLgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMTo6Y3JlYXRlKTogQXNzZXJ0IHRoYXQg
cmVxdWlyZW1lbnRzIGFyZSBwcmVzZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQWNjZWxl
cmF0ZWRCYWNraW5nU3RvcmVYMTEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0hhcmR3YXJl
QWNjZWxlcmF0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkhhcmR3YXJlQWNjZWxl
cmF0aW9uTWFuYWdlcjo6SGFyZHdhcmVBY2NlbGVyYXRpb25NYW5hZ2VyKTogVXNlCisgICAgICAg
IEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlOjpjaGVja1JlcXVpcmVtZW50cygpIHRvIGRlY2lkZSB3
aGV0aGVyIHRvIGRpc2FibGUgQUMgbW9kZS4KKwogMjAxOS0wNy0xNyAgTWVnYW4gR2FyZG5lciAg
PG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEVhcmx5IE91dCBvZiBwb3NpdGlv
bkluZm9tYXRpb24gY2hlY2sgaWYgcG9zc2libGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYWExOGJkMTYxYmIu
LjFiOWRkOGQxZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNTg1LDkgKzU4NSwxMCBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBj
cikKICAgICBpZiAoc2hvd2luZ05hdmlnYXRpb25TbmFwc2hvdCkKICAgICAgICAgY2Fpcm9fcHVz
aF9ncm91cChjcik7CiAKLSAgICBpZiAoZHJhd2luZ0FyZWEtPmlzSW5BY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpKQorICAgIGlmIChkcmF3aW5nQXJlYS0+aXNJbkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKHdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVy
YXRlZEJhY2tpbmdTdG9yZSk7CiAgICAgICAgIHdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRl
ZEJhY2tpbmdTdG9yZS0+cGFpbnQoY3IsIGNsaXBSZWN0KTsKLSAgICBlbHNlIHsKKyAgICB9IGVs
c2UgewogICAgICAgICBXZWJDb3JlOjpSZWdpb24gdW5wYWludGVkUmVnaW9uOyAvLyBUaGlzIGlz
IHNpbXBseSB1bnVzZWQuCiAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjciwgY2xpcFJlY3Qs
IHVucGFpbnRlZFJlZ2lvbik7CiAgICAgfQpAQCAtMTY2MywyMSArMTY2NCwyNSBAQCB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlja0NvdW50ZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlKQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7CisgICAgQVNTRVJUKHdlYmtp
dFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZSk7CiAgICAgd2Via2l0
V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT51cGRhdGUobGF5ZXJU
cmVlQ29udGV4dCk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VVcGRhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7CisgICAgQVNTRVJUKHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZSk7CiAgICAgd2Vi
a2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT51cGRhdGUobGF5
ZXJUcmVlQ29udGV4dCk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQog
eworICAgIEFTU0VSVCh3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5n
U3RvcmUpOwogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdT
dG9yZS0+dXBkYXRlKExheWVyVHJlZUNvbnRleHQoKSk7CiB9CiAKIGJvb2wgd2Via2l0V2ViVmll
d0Jhc2VNYWtlR0xDb250ZXh0Q3VycmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmll
d0Jhc2UpCiB7CisgICAgQVNTRVJUKHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRl
ZEJhY2tpbmdTdG9yZSk7CiAgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKQEAgLTE3MDAs
OCArMTcwNSwxMCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNz
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZQogICAgIGd0a193aWRnZXRfcXVl
dWVfcmVzaXplX25vX3JlZHJhdyhHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSk7CiAKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJp
djsKLSAgICBhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlD
b29yZGluYXRlZEdyYXBoaWNzKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKLSAg
ICB3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHdlYmtp
dFdlYlZpZXdCYXNlLCBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29udGV4dCgpKTsKKyAgICBpZiAo
cHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgYXV0byogZHJhd2luZ0Fy
ZWEgPSBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcyo+KHBy
aXYtPnBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7CisgICAgICAgIHByaXYtPmFjY2VsZXJhdGVk
QmFja2luZ1N0b3JlLT51cGRhdGUoZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvbnRleHQoKSk7Cisg
ICAgfQogCiAgICAgaWYgKHByaXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlcikKICAgICAgICAgcHJp
di0+dmlld0dlc3R1cmVDb250cm9sbGVyLT5jb25uZWN0VG9Qcm9jZXNzKCk7CkBAIC0xNzEzLDcg
KzE3MjAsOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZQogCiB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlUGFnZUNsb3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0g
ICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT51cGRh
dGUoTGF5ZXJUcmVlQ29udGV4dCgpKTsKKyAgICBpZiAod2Via2l0V2ViVmlld0Jhc2UtPnByaXYt
PmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJp
di0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnVwZGF0ZSh7IH0pOwogfQogCiBSZWZQdHI8V2Vi
S2l0OjpWaWV3U25hcHNob3Q+IHdlYmtpdFdlYlZpZXdCYXNlVGFrZVZpZXdTbmFwc2hvdChXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCkBAIC0xODE3LDYgKzE4MjUsOCBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2hvd0Vtb2ppQ2hvb3NlcihXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2UsIGNvbgogI2lmIFVTRShXUEVfUkVOREVSRVIpCiBpbnQgd2Via2l0
V2ViVmlld0Jhc2VSZW5kZXJIb3N0RmlsZURlc2NyaXB0b3IoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YmtpdFdlYlZpZXdCYXNlKQogeworICAgIGlmICghd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFj
Y2VsZXJhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS0+cmVuZGVySG9z
dEZpbGVEZXNjcmlwdG9yKCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IGQ2ZjI4NzY2
MDRlLi4zOTA5YWE0MmZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuaCIKIAor
I2luY2x1ZGUgIkhhcmR3YXJlQWNjZWxlcmF0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxheS5oPgpAQCAtNDEsOCArNDIsMjYgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK2Jvb2wgQWNjZWxlcmF0ZWRC
YWNraW5nU3RvcmU6OmNoZWNrUmVxdWlyZW1lbnRzKCkKK3sKKyNpZiBQTEFURk9STShXQVlMQU5E
KSAmJiBVU0UoRUdMKQorICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50
eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpXYXlsYW5kKQorICAgICAgICByZXR1cm4g
QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjpjaGVja1JlcXVpcmVtZW50cygpOworI2Vu
ZGlmCisjaWYgUExBVEZPUk0oWDExKQorICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpCisgICAgICAgIHJl
dHVybiBBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMTo6Y2hlY2tSZXF1aXJlbWVudHMoKTsKKyNl
bmRpZgorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZT4gQWNjZWxl
cmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCiB7CisgICAg
aWYgKCFIYXJkd2FyZUFjY2VsZXJhdGlvbk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhblVzZUhhcmR3
YXJlQWNjZWxlcmF0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAjaWYgUExBVEZP
Uk0oV0FZTEFORCkgJiYgVVNFKEVHTCkKICAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWRE
aXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZCkKICAgICAg
ICAgcmV0dXJuIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6Y3JlYXRlKHdlYlBhZ2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNr
aW5nU3RvcmUuaAppbmRleCAzYTAzYjYxMWVhMy4uMTgyMjY0YzY5NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS5oCkBA
IC00MSw2ICs0MSw3IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIEFjY2VsZXJhdGVkQmFj
a2luZ1N0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2NlbGVyYXRlZEJhY2tpbmdT
dG9yZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHN0YXRpYyBib29s
IGNoZWNrUmVxdWlyZW1lbnRzKCk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVy
YXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYpOwogICAgIHZpcnR1YWwgfkFj
Y2VsZXJhdGVkQmFja2luZ1N0b3JlKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxh
bmQuY3BwCmluZGV4IGNhMThiODFjYTEzLi4zODMxMDAwNTg4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3Jl
V2F5bGFuZC5jcHAKQEAgLTY0LDE5ICs2NCwxOSBAQCBzdGF0aWMgUEZOR0xFR0xJTUFHRVRBUkdF
VFRFWFRVUkUyRE9FU1BST0MgZ2xJbWFnZVRhcmdldFRleHR1cmUyRDsKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVy
YXRlZEJhY2tpbmdTdG9yZVdheWxhbmQ+IEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6
Y3JlYXRlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKK2Jvb2wgQWNjZWxlcmF0ZWRCYWNraW5nU3Rv
cmVXYXlsYW5kOjpjaGVja1JlcXVpcmVtZW50cygpCiB7CiAjaWYgVVNFKFdQRV9SRU5ERVJFUikK
ICAgICBpZiAoIWdsSW1hZ2VUYXJnZXRUZXh0dXJlMkQpIHsKICAgICAgICAgaWYgKCF3cGVfZmRv
X2luaXRpYWxpemVfZm9yX2VnbF9kaXNwbGF5KFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eSgpLmVnbERpc3BsYXkoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R0xD
b250ZXh0PiBlZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCk7
CiAgICAgICAgIGlmICghZWdsQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghZWdsQ29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0xFUz4gZ2xFeHRlbnNpb25zID0gc3RkOjptYWtlX3Vu
aXF1ZTxFeHRlbnNpb25zM0RPcGVuR0xFUz4obnVsbHB0ciwgIGZhbHNlKTsKQEAgLTg5LDEyICs4
OSwxOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kPiBB
Y2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQ6OgogCiAgICAgaWYgKCFnbEltYWdlVGFyZ2V0
VGV4dHVyZTJEKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQWNjZWxlcmF0ZWRCYWNraW5nU3Rv
cmVXUEUgcmVxdWlyZXMgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRC4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKICNlbHNlCi0gICAgaWYgKCFXYXlsYW5kQ29tcG9zaXRvcjo6c2luZ2xldG9uKCkuaXNS
dW5uaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXYXlsYW5kQ29t
cG9zaXRvcjo6c2luZ2xldG9uKCkuaXNSdW5uaW5nKCk7CiAjZW5kaWYKK30KKworc3RkOjp1bmlx
dWVfcHRyPEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZD4gQWNjZWxlcmF0ZWRCYWNraW5n
U3RvcmVXYXlsYW5kOjpjcmVhdGUoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIEFTU0VS
VChjaGVja1JlcXVpcmVtZW50cygpKTsKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vs
ZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZD4obmV3IEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5
bGFuZCh3ZWJQYWdlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuaAppbmRleCA0MWU4MGRl
MjFiZC4uNTgyNmJjY2U5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmgKQEAgLTUyLDYgKzUy
LDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVX
YXlsYW5kIGZpbmFsIDogcHVibGljIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBjaGVja1JlcXVpcmVt
ZW50cygpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRCYWNraW5nU3Rv
cmVXYXlsYW5kPiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CiAgICAgfkFjY2VsZXJhdGVkQmFja2lu
Z1N0b3JlV2F5bGFuZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
dGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTEuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExLmNwcAppbmRleCBhNTQwNzMyMjc5MC4u
NzFiMWU4NjgxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZVgxMS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExLmNwcApAQCAtMTAzLDExICsxMDMsMTUgQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPERhbWFnZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+PiBtX25v
dGlmeUZ1bmN0aW9uczsKIH07CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZEJhY2tpbmdT
dG9yZVgxMT4gQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTE6OmNyZWF0ZShXZWJQYWdlUHJveHkm
IHdlYlBhZ2UpCitib29sIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExOjpjaGVja1JlcXVpcmVt
ZW50cygpCiB7CiAgICAgYXV0byYgZGlzcGxheSA9IGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgx
MT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpOwotICAgIGlmICghZGlzcGxheS5z
dXBwb3J0c1hDb21wb3NpdGUoKSB8fCAhZGlzcGxheS5zdXBwb3J0c1hEYW1hZ2Uoc19kYW1hZ2VF
dmVudEJhc2UsIHNfZGFtYWdlRXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIGRpc3BsYXkuc3VwcG9ydHNYQ29tcG9zaXRlKCkgJiYgZGlzcGxheS5zdXBwb3J0
c1hEYW1hZ2Uoc19kYW1hZ2VFdmVudEJhc2UsIHNfZGFtYWdlRXJyb3JCYXNlKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExPiBBY2NlbGVyYXRlZEJhY2tp
bmdTdG9yZVgxMTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKK3sKKyAgICBBU1NFUlQo
Y2hlY2tSZXF1aXJlbWVudHMoKSk7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVy
YXRlZEJhY2tpbmdTdG9yZVgxMT4obmV3IEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExKHdlYlBh
Z2UpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2Vs
ZXJhdGVkQmFja2luZ1N0b3JlWDExLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNj
ZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTEuaAppbmRleCBhOGIzYTkyMWE3YS4uMjY4OTI2NTljZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tp
bmdTdG9yZVgxMS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRl
ZEJhY2tpbmdTdG9yZVgxMS5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsK
IGNsYXNzIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDExIGZpbmFsIDogcHVibGljIEFjY2VsZXJh
dGVkQmFja2luZ1N0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2NlbGVyYXRlZEJh
Y2tpbmdTdG9yZVgxMSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHN0
YXRpYyBib29sIGNoZWNrUmVxdWlyZW1lbnRzKCk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYpOwogICAg
IH5BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvSGFyZHdhcmVBY2NlbGVyYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9IYXJkd2FyZUFjY2VsZXJhdGlvbk1hbmFnZXIuY3BwCmlu
ZGV4IGNlY2VlYzNjYjQ0Li4yZGVlMjgxNzU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0hhcmR3YXJlQWNjZWxlcmF0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL0hhcmR3YXJlQWNjZWxlcmF0aW9uTWFuYWdlci5jcHAKQEAg
LTI2LDIwICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZHdhcmVB
Y2NlbGVyYXRpb25NYW5hZ2VyLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXkuaD4KLQotI2lmIFBMQVRGT1JN
KFgxMSkKLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxheVgxMS5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXQVlMQU5EKQotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0jaW5jbHVkZSA8
d3BlL2Zkby1lZ2wuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2F5bGFuZENvbXBvc2l0b3IuaCIKLSNl
bmRpZgotI2VuZGlmCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuaCIKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY1LDMyICs1Miwx
MCBAQCBIYXJkd2FyZUFjY2VsZXJhdGlvbk1hbmFnZXI6OkhhcmR3YXJlQWNjZWxlcmF0aW9uTWFu
YWdlcigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBQTEFURk9STShYMTEpCi0gICAg
aWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQbGF0Zm9ybURp
c3BsYXk6OlR5cGU6OlgxMSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5ID0gZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSk7Ci0gICAg
ICAgIE9wdGlvbmFsPGludD4gZGFtYWdlQmFzZSwgZXJyb3JCYXNlOwotICAgICAgICBpZiAoIWRp
c3BsYXkuc3VwcG9ydHNYQ29tcG9zaXRlKCkgfHwgIWRpc3BsYXkuc3VwcG9ydHNYRGFtYWdlKGRh
bWFnZUJhc2UsIGVycm9yQmFzZSkpIHsKLSAgICAgICAgICAgIG1fY2FuVXNlSGFyZHdhcmVBY2Nl
bGVyYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkgJiYgVVNFKEVHTCkKLSAgICBpZiAoUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6
VHlwZTo6V2F5bGFuZCkgewotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0gICAgICAgIGlmICghd3Bl
X2Zkb19pbml0aWFsaXplX2Zvcl9lZ2xfZGlzcGxheShQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXkoKS5lZ2xEaXNwbGF5KCkpKSB7Ci0gICAgICAgICAgICBtX2NhblVzZUhhcmR3YXJlQWNj
ZWxlcmF0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgIGlmICghV2F5bGFuZENvbXBvc2l0b3I6OnNpbmdsZXRvbigpLmlzUnVubmluZygp
KSB7Ci0gICAgICAgICAgICBtX2NhblVzZUhhcmR3YXJlQWNjZWxlcmF0aW9uID0gZmFsc2U7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgorICAgIGlmICghQWNjZWxlcmF0
ZWRCYWNraW5nU3RvcmU6OmNoZWNrUmVxdWlyZW1lbnRzKCkpIHsKKyAgICAgICAgbV9jYW5Vc2VI
YXJkd2FyZUFjY2VsZXJhdGlvbiA9IGZhbHNlOworICAgICAgICByZXR1cm47CiAgICAgfQotI2Vu
ZGlmCiAKICAgICBjb25zdCBjaGFyKiBmb3JjZUNvbXBvc2l0aW5nID0gZ2V0ZW52KCJXRUJLSVRf
Rk9SQ0VfQ09NUE9TSVRJTkdfTU9ERSIpOwogICAgIGlmIChmb3JjZUNvbXBvc2l0aW5nICYmIHN0
cmNtcChmb3JjZUNvbXBvc2l0aW5nLCAiMCIpKQo=
</data>
<flag name="review"
          id="390166"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>