<?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>80509</bug_id>
          
          <creation_ts>2012-03-07 05:37:54 -0800</creation_ts>
          <short_desc>OOM running webgl/sdk/tests/conformance/context/context-creation-and-destruction.html</short_desc>
          <delta_ts>2012-05-18 12:16:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>86037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tomeu Vizoso">tomeu</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>572828</commentid>
    <comment_count>0</comment_count>
    <who name="Tomeu Vizoso">tomeu</who>
    <bug_when>2012-03-07 05:37:54 -0800</bug_when>
    <thetext>Running the test at https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/context/context-creation-and-destruction.html causes the process to run out of memory and ultimately crashes in the GL driver.

Wonder if it&apos;s related to #76225.

This is with the HEADs of both WebKit and Mesa.

gdb --args ./Programs/GtkLauncher --enable-webgl=1 https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/context/context-creation-and-destruction.html

Mesa: User error: GL_OUT_OF_MEMORY in glTexImage
Mesa: User error: GL_OUT_OF_MEMORY in glTexImage2D
Mesa: User error: GL_OUT_OF_MEMORY in glTexImage

Program received signal SIGSEGV, Segmentation fault.
0xaaf85425 in st_validate_attachment (ctx=0xc51e5f8, screen=0x8323418, 
    att=0xc547910, bindings=2) at state_tracker/st_cb_fbo.c:446
446	   format = stObj-&gt;pt-&gt;format;
(gdb) bt
#0  0xaaf85425 in st_validate_attachment (ctx=0xc51e5f8, screen=0x8323418, 
    att=0xc547910, bindings=2) at state_tracker/st_cb_fbo.c:446
#1  0xaaf8571f in st_validate_framebuffer (ctx=0xc51e5f8, fb=0xc547730)
    at state_tracker/st_cb_fbo.c:544
#2  0xaaed29fa in _mesa_test_framebuffer_completeness (ctx=0xc51e5f8, 
    fb=0xc547730) at main/fbobject.c:864
#3  0xaaed5136 in _mesa_CheckFramebufferStatusEXT (target=36160)
    at main/fbobject.c:1884
#4  0xb603d90d in WebCore::GraphicsContext3D::reshapeFBOs (this=0xc479e00, 
    size=...)
    at ../Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:120
#5  0xb603e7ee in WebCore::GraphicsContext3D::reshape (this=0xc479e00, 
    width=2048, height=2048)
    at ../Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:239
#6  0xb6012aa7 in WebCore::WebGLRenderingContext::initializeNewContext (
    this=0xc547a68)
    at ../Source/WebCore/html/canvas/WebGLRenderingContext.cpp:514
#7  0xb6012505 in WebCore::WebGLRenderingContext::WebGLRenderingContext (
    this=0xc547a68, passedCanvas=0xc47b150, context=..., attributes=...)
    at ../Source/WebCore/html/canvas/WebGLRenderingContext.cpp:446
#8  0xb6012163 in WebCore::WebGLRenderingContext::create (canvas=0xc47b150, 
    attrs=0x8fccee0)
    at ../Source/WebCore/html/canvas/WebGLRenderingContext.cpp:415
#9  0xb59f5408 in WebCore::HTMLCanvasElement::getContext (this=0xc47b150, 
    type=..., attrs=0x8fccee0)
    at ../Source/WebCore/html/HTMLCanvasElement.cpp:197
#10 0xb56873a0 in WebCore::JSHTMLCanvasElement::getContext (this=0xac61cd80, 
    exec=0xac0401e8)
    at ../Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp:75
#11 0xb617e9d8 in WebCore::jsHTMLCanvasElementPrototypeFunctionGetContext (
    exec=0xac0401e8) at DerivedSources/WebCore/JSHTMLCanvasElement.cpp:208
#12 0xac632f29 in ?? ()
#13 0xb4be36ef in JSC::JITCode::execute (this=0xabf9cce0, 
    registerFile=0x816258c, callFrame=0xac040038, globalData=0x824a2e8)
    at ../Source/JavaScriptCore/jit/JITCode.h:127
#14 0xb4be09ef in JSC::Interpreter::executeCall (this=0x8162580, 
    callFrame=0xac01fcb4, function=0xac61d880, callType=JSC::CallTypeJS, 
    callData=..., thisValue=..., args=...)
    at ../Source/JavaScriptCore/interpreter/Interpreter.cpp:1270
#15 0xb4c9cc4e in JSC::call (exec=0xac01fcb4, functionObject=..., 
    callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...)
    at ../Source/JavaScriptCore/runtime/CallData.cpp:39
#16 0xb5655f88 in WebCore::JSMainThreadExecState::call (exec=0xac01fcb4, 
    functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., 
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
    args=...) at ../Source/WebCore/bindings/js/JSMainThreadExecState.h:56
#17 0xb56bd8fd in WebCore::ScheduledAction::executeFunctionInContext (
    this=0xc4784c0, globalObject=0xac01fc40, thisValue=..., context=0x8248208)
    at ../Source/WebCore/bindings/js/ScheduledAction.cpp:110
#18 0xb56bdae4 in WebCore::ScheduledAction::execute (this=0xc4784c0, document=
    0x8248100) at ../Source/WebCore/bindings/js/ScheduledAction.cpp:130
#19 0xb56bd6a4 in WebCore::ScheduledAction::execute (this=0xc4784c0, 
    context=0x8248208) at ../Source/WebCore/bindings/js/ScheduledAction.cpp:80
#20 0xb5c483a1 in WebCore::DOMTimer::fired (this=0xc4b6950)
    at ../Source/WebCore/page/DOMTimer.cpp:149
#21 0xb5d9f213 in WebCore::ThreadTimers::sharedTimerFiredInternal (
    this=0x8168580) at ../Source/WebCore/platform/ThreadTimers.cpp:115
#22 0xb5d9f157 in WebCore::ThreadTimers::sharedTimerFired ()
    at ../Source/WebCore/platform/ThreadTimers.cpp:93
#23 0xb6382b41 in WebCore::timeout_cb ()
    at ../Source/WebCore/platform/gtk/SharedTimerGtk.cpp:49
#24 0xb2b393d3 in g_timeout_dispatch (source=0xc087e28, 
    callback=0xb6382b1d &lt;WebCore::timeout_cb(gpointer)&gt;, user_data=0x0)
    at gmain.c:3854
#25 0xb2b37667 in g_main_dispatch (context=0x80815b0) at gmain.c:2510
#26 0xb2b3822d in g_main_context_dispatch (context=0x80815b0) at gmain.c:3047
#27 0xb2b38418 in g_main_context_iterate (context=0x80815b0, block=1, 
    dispatch=1, self=0x821a640) at gmain.c:3118
#28 0xb2b38892 in g_main_loop_run (loop=0x8216b98) at gmain.c:3312
#29 0xb3133155 in gtk_main () from /usr/lib/libgtk-3.so.0
#30 0x0804bca9 in main (argc=1, argv=0xbfffea04)
    at ../Tools/GtkLauncher/main.c:509</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572904</commentid>
    <comment_count>1</comment_count>
    <who name="Tomeu Vizoso">tomeu</who>
    <bug_when>2012-03-07 08:34:43 -0800</bug_when>
    <thetext>I can confirm that the test causes 500 calls to glXCreateNewContext and none to glXDestroyContext. Nouveau crashes rendering the display unusable until a reboot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617113</commentid>
    <comment_count>2</comment_count>
      <attachid>140422</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-06 09:28:38 -0700</bug_when>
    <thetext>Created attachment 140422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625233</commentid>
    <comment_count>3</comment_count>
      <attachid>140422</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-05-16 03:45:05 -0700</bug_when>
    <thetext>Comment on attachment 140422
Patch

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

Looks good to me :), thanks. It fixes the issue reported.

&gt; Source/WebCore/platform/graphics/cairo/GLContext.h:33
&gt; +    static PassOwnPtr&lt;GLContext&gt; createContextForWindow(uint64_t windowHandle, GLContext* sharingContext);

Is there a situation where we do not want to use the static shared context or we can create a new one?

&gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:96
&gt; +
&gt; +

Nit: two lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627909</commentid>
    <comment_count>4</comment_count>
      <attachid>140422</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-18 12:14:15 -0700</bug_when>
    <thetext>Comment on attachment 140422
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/graphics/cairo/GLContext.h:33
&gt;&gt; +    static PassOwnPtr&lt;GLContext&gt; createContextForWindow(uint64_t windowHandle, GLContext* sharingContext);
&gt; 
&gt; Is there a situation where we do not want to use the static shared context or we can create a new one?

Not at the moment, but this situation has a high probability of arising in the future and it&apos;s good, I think, to keep this class general.

&gt;&gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:96
&gt;&gt; +
&gt; 
&gt; Nit: two lines.

Okay. Will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627911</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-18 12:16:11 -0700</bug_when>
    <thetext>Committed r117612: &lt;http://trac.webkit.org/changeset/117612&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140422</attachid>
            <date>2012-05-06 09:28:38 -0700</date>
            <delta_ts>2012-05-18 12:14:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80509-20120506092836.patch</filename>
            <type>text/plain</type>
            <size>23686</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzAwMmFiNmE5ZGJlOGJh
M2FjMGViZmY1NGQ5M2IxMzZiZDU0ZmFjZi4uMTA2OWM4NjhmYTQ0ODQ1NTllMWU2ZTc3Mjc4ZWI1
ZTU3ZjJjNzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDEyLTA1LTA2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAorICAgICAgICBPT00gcnVubmlu
ZyB3ZWJnbC9zZGsvdGVzdHMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWNyZWF0aW9uLWFu
ZC1kZXN0cnVjdGlvbi5odG1sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MDUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5IGJ5IGNvbnRleHQtY3Jl
YXRpb24tYW5kLWRlc3RydWN0aW9uLmh0bWwKKyAgICAgICAgS2hyb25vcyBjb25mb3JtYW5jZSB0
ZXN0IHdoaWNoIHdpbGwgYmUgcGFydCBvZiB0aGUgV2ViS2l0IHJlcG9zaXRvcnkgb25jZQorICAg
ICAgICBidWcgNDQzMTAgaXMgY2xvc2VkLgorCisgICAgICAgIFJld29yayB0aGUgb3duZXJzaGlw
IG9mIEdMQ29udGV4dHMuIEluc3RlYWQgb2YgaGF2aW5nIHRoZW0gbWFuYWdlZCBieSB0aGUKKyAg
ICAgICAgc3RhdGUgb2Ygd2luZG93IG1hcHBpbmcgb3IgcmVtb3ZlZCBieSBjYWxsaW5nIGEgc3Rh
dGljIG1ldGhvZCwgYWx3YXlzIGhhdmUKKyAgICAgICAgdGhlbSBvd25lZCBieSB0aGUgY2FsbGVy
cy4gVGhpcyBtYWtlcyBhbGwgR0xDb250ZXh0IGNyZWF0b3JzIGZhY3RvcnkgbWV0aG9kcworICAg
ICAgICB0aGF0IHJldHVybiBQYXNzT3duUHRyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28g
c3dpdGNoZXMgdGhlIHNoYXJpbmcgY29udGV4dCBmb3IgYSBXZWJWaWV3IGZyb20gdGhlIHdpbmRv
dworICAgICAgICBjb250ZXh0IHRvIGEgZ2xvYmFsIHNoYXJlZCBjb250ZXh0LiBUaGlzIHNpbXBs
aWZpZXMgdGhpbmdzIGdyZWF0bHksIGFsbG93aW5nCisgICAgICAgIHRoZSByZW1vdmFsIG9mIEdM
Q29udGV4dEd0ayBhbmQgbWFrZXMgdGhlIGZhY3RvcnkgY2hhbmdlIGVhc2llci4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbW92ZSBHTENvbnRleHRHdGsuY3BwIGZyb20gdGhl
IHNvdXJjZSBsaXN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KTogQWRk
ZWQsIGdldHRlciBmb3IgdGhlIGdsb2JhbCBzaGFyaW5nIGNvbnRleHQuCisgICAgICAgIChXZWJD
b3JlOjpHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cpOiBBZGRlZCwgYSBmYWN0b3J5
IG1ldGhvZCBmb3IgY3JlYXRpbmcKKyAgICAgICAgd2luZG93IGNvbnRleHRzLgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KTogQWxsb3cgcGFzc2lu
ZyBhIHNoYXJpbmcgY29udGV4dCBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6R0xDb250ZXh0Ojpt
YWtlQ29udGV4dEN1cnJlbnQpOiBBc3NlcnQgdGhhdCB0aGlzIGlzIHRoZSBtYWluIHRocmVhZCwg
dG8KKyAgICAgICAgaW5jcmVhc2UgdGhlIGd1YXJhbnRlZSB0aGF0IHdlIGFyZSBvbmx5IHVzaW5n
IHRoZXNlIGNvbnRleHRzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dDo6Z2V0Q3VycmVudCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dMQ29udGV4dC5oOiBVcGRhdGUgdGhlIGFib3ZlIG1ldGhvZCBzaWduYXR1cmVzIGFu
ZCByZW1vdmUKKyAgICAgICAgY3JlYXRlT2Zmc2NyZWVuQ29udGV4dCwgd2hpY2ggaGFzIGp1c3Qg
YmVlbiBzdWJzdW1lZCBpbnRvIHRoZSBvdGhlciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6IFRoZSBI
b3N0V2luZG93IGlzIG5vIGxvbmdlciBuZWVkZWQKKyAgICAgICAgdG8gZ2V0IHRoZSBzaGFyaW5n
IGNvbnRleHQsIHNvIHdlIGNhbiBzaW1wbGlmeSB0aGluZ3MgcXVpdGUgYSBiaXQgYW5kIG1ha2Ug
YSBwbGF0Zm9ybQorICAgICAgICBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbiBoZXJlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5j
cHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFgu
Y3BwOiBNb2RpZnkgYWxsIHRoZSBmYWN0b3J5IG1ldGhvZHMgdG8gcmV0dXJuIFBhc3NPd25QdHIu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0R3RrLmNwcDogUmVtb3Zl
ZC4KKworMjAxMi0wNS0wNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0NhaXJvXSBJbXBsZW1lbnQgSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSBmb3Ig
QmFja2luZ1N0b3JlQ29weSA9PSBEb250Q29weUJhY2tpbmdTdG9yZQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU3MjgKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IGZhZWRhY2Q1ZTI0NjhmYzg0MTI2NmU2ODdmYTFiMTVlZGVlNWZmZWQuLjVkOWU5NjVmMDI2
OGUzMDQ4MWIzYjNiY2M5ZjhmNjdmYjMzYjY4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAxMi0wNS0wNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5j
b20+CisKKyAgICAgICAgT09NIHJ1bm5pbmcgd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2Nv
bnRleHQvY29udGV4dC1jcmVhdGlvbi1hbmQtZGVzdHJ1Y3Rpb24uaHRtbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA1MDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCBjb250ZXh0IG5vdyBmdWxseSBvd25zIHRoZSBHTENvbnRleHQgZm9yIGl0cworICAg
ICAgICB3aW5kb3cuIFRoaXMgc2ltcGxpZmllcyB0aGlzIHF1aXRlIGEgYml0LiBXZSBhbHNvIHBy
b3Blcmx5IGNsZWFuIGl0IHVwIHdoZW4KKyAgICAgICAgZGVzdHJveWluZyB0aGUgbGF5ZXIgdHJl
ZSwgdG8gZ28gbW9yZSBlYXNpbHkgb24gcmVzb3VyY2VzLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmdsQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisKIDIw
MTItMDUtMDUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIEZpeCB0aGUgR1RLKyBUZXh0dXJlTWFwcGVyIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGJ1
aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzYzN2IzOGM0MTE3YjY3Mzk0
MjEzYzc5ZWY5NTcwMmQ4ZjgzNjU5NS4uMmY1MzZkYjc4ZjkxNDRhZjlkNWU1ODI4NjlmNGM2NDQ3
NDliNjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NzY1LDcgKzQ3NjUs
NiBAQCBpZiBUQVJHRVRfWDExCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKaW5k
ZXggYzcwMzA3ZThlZGUyZGRkNDA5ZmQ2YmZkODBiMGJjMjhlY2E5N2E1Yi4uNmViOTkwNGVjYjJh
MjZkMDc5YTAxYmVhN2RjYmZkZTM2NWZiOTc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwCkBAIC0yMSwyMyArMjEsMzcg
QEAKIAogI2lmIFVTRShPUEVOR0wpCiAKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCiAj
aWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTENvbnRleHRHTFguaCIKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUdMQ29udGV4dDo6R0xDb250ZXh0KCkKK0dMQ29udGV4dCogR0xDb250
ZXh0OjpzaGFyaW5nQ29udGV4dCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKE93blB0cjxHTENvbnRleHQ+LCBzaGFyaW5nLCAoY3JlYXRl
T2Zmc2NyZWVuQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHNoYXJpbmcuZ2V0KCk7Cit9CisKK1Bh
c3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWlu
dDY0X3Qgd2luZG93SGFuZGxlLCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQogeworI2lmIFVT
RShHTFgpCisgICAgcmV0dXJuIEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dCh3aW5kb3dIYW5k
bGUsIHNoYXJpbmdDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOwogfQogCi1H
TENvbnRleHQqIEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dChHTENvbnRleHQqIHNo
YXJpbmcpCitHTENvbnRleHQ6OkdMQ29udGV4dCgpCiB7Ci0gICAgaWYgKHNoYXJpbmcpCi0gICAg
ICAgIHJldHVybiBzaGFyaW5nLT5jcmVhdGVPZmZzY3JlZW5TaGFyaW5nQ29udGV4dCgpOworfQog
CitQYXNzT3duUHRyPEdMQ29udGV4dD4gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0
KEdMQ29udGV4dCogc2hhcmluZykKK3sKICNpZiBVU0UoR0xYKQotICAgIHJldHVybiBHTENvbnRl
eHRHTFg6OmNyZWF0ZUNvbnRleHQoMCwgMCk7CisgICAgcmV0dXJuIEdMQ29udGV4dEdMWDo6Y3Jl
YXRlQ29udGV4dCgwLCBzaGFyaW5nKTsKICNlbmRpZgogfQogCkBAIC01MywxMiArNjcsMTQgQEAg
R0xDb250ZXh0Ojp+R0xDb250ZXh0KCkKIAogYm9vbCBHTENvbnRleHQ6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBnQ3VycmVudENvbnRl
eHQgPSB0aGlzOwogICAgIHJldHVybiB0cnVlOwogfQogCiBHTENvbnRleHQqIEdMQ29udGV4dDo6
Z2V0Q3VycmVudCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZXR1cm4g
Z0N1cnJlbnRDb250ZXh0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCmluZGV4IDhiMmVlZTdjYTIyZjdiNWIwOWI4MjMwYWI2
ZjcyYzE1NzNmNzZhOWQuLmRlMmUwYTY0YmNhYzgxZWU1NDRkNDBiZGFiMDMyYWE0ZWQyOGQ3NGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29u
dGV4dC5oCkBAIC0zMCwxMyArMzAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xD
b250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTENvbnRleHQpOwogcHVibGljOgot
ICAgIHN0YXRpYyBHTENvbnRleHQqIGdldENvbnRleHRGb3JXaWRnZXQoUGxhdGZvcm1XaWRnZXQp
OwotICAgIHN0YXRpYyBHTENvbnRleHQqIGNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoR0xDb250ZXh0
KiBzaGFyaW5nID0gMCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVD
b250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0KiBzaGFyaW5n
Q29udGV4dCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVPZmZzY3Jl
ZW5Db250ZXh0KEdMQ29udGV4dCogc2hhcmluZyA9IDApOwogICAgIHN0YXRpYyBHTENvbnRleHQq
IGdldEN1cnJlbnQoKTsKKyAgICBzdGF0aWMgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCgpOwog
CiAgICAgR0xDb250ZXh0KCk7CiAgICAgdmlydHVhbCB+R0xDb250ZXh0KCk7Ci0gICAgdmlydHVh
bCBHTENvbnRleHQqIGNyZWF0ZU9mZnNjcmVlblNoYXJpbmdDb250ZXh0KCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1
ZmZlcnMoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVm
ZmVyKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA4ZDM5Njky
MTQxOGRkMzFlMTA0MzBhMDk3NmFjZWZmMjY5OGEwMzA0Li4yZjA4M2NjYzZjNjE0OWE3NDk3NDU4
NmQ3ZDllZWQwNTg4ZmQ1YmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApA
QCAtNjMsNyArNjMsNyBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIHJldHVybiBjb250
ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wp
CiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAg
LCBtX2F0dHJzKGF0dHJpYnV0ZXMpCkBAIC03NCw3ICs3NCw3IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBICiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLSAg
ICAsIG1fcHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSh0aGlzLCBob3N0
V2luZG93KSkKKyAgICAsIG1fcHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZSh0aGlzKSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggOTRkNDBlYzVhMzI2NGI5YjNlN2E3OTQwMmQ0OWE3
ODVkOWQ2NTQ0My4uZmYxYmUwNWQ3NTdiZWQyNmZlNTM1ZGE2ZWY1N2ExZGU0MjM4ZjA2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC0zMSwxOSArMzEsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIEhvc3RXaW5kb3cqIHdpbmRvdykKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShjb250ZXh0LCB3aW5kb3cpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZShjb250ZXh0KSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBIb3N0V2luZG93KiB3aW5kb3cpCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQotICAgICwgbV93aW5kb3cod2luZG93KQotI2lmIFBMQVRGT1JNKEdU
SykKLSAgICAsIG1fZ2xDb250ZXh0KEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dChH
TENvbnRleHQ6OmdldENvbnRleHRGb3JXaWRnZXQobV93aW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSkpCi0jZWxzZQotICAgICwgbV9nbENvbnRleHQoR0xDb250ZXh0OjpjcmVhdGVPZmZzY3Jl
ZW5Db250ZXh0KCkpCi0jZW5kaWYKKyAgICAsIG1fZ2xDb250ZXh0KEdMQ29udGV4dDo6Y3JlYXRl
T2Zmc2NyZWVuQ29udGV4dChHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IDcxN2ZkMWQ4ZGM2NDExNWUwNzlj
MGI3MDIyYzdlYjZmYWVmYTRjMGQuLmYxZGJhODIyNTkxMDFkOWQ5ZTZkMTY5MWQwZmE4YWFkNGE5
Nzk4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0zNiw3ICszNiw3
IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB+
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpOwpAQCAt
NDYsMTEgKzQ2LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgSG9zdFdpbmRvdyogbV93aW5kb3c7Ci0gICAg
R0xDb250ZXh0KiBtX2dsQ29udGV4dDsKKyAgICBPd25QdHI8R0xDb250ZXh0PiBtX2dsQ29udGV4
dDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggNjA2MmU0MzgxNTUxMTY2YWFmNDFjMDM0ZmY3NTFm
YzJmNTM4MWEyNi4uYzc5ZjBlYzM3ZjM0NzNhMmJjODJkNWEyM2JhMjMyYzg1Y2MyNmFmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4
dEdMWC5jcHAKQEAgLTgwLDM3ICs4MCwzNSBAQCB2b2lkIEdMQ29udGV4dEdMWDo6Y2xlYW51cEFj
dGl2ZUNvbnRleHRzQXRFeGl0KCkKICAgICBnU2hhcmVkRGlzcGxheSA9IDA7CiB9CiAKLUdMQ29u
dGV4dCogR0xDb250ZXh0R0xYOjpjcmVhdGVPZmZzY3JlZW5TaGFyaW5nQ29udGV4dCgpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQoMCwgbV9jb250ZXh0KTsKLX0KLQotR0xDb250ZXh0R0xY
KiBHTENvbnRleHRHTFg6OmNyZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xYQ29udGV4
dCBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6
OmNyZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4
dCkKIHsKICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOwogICAgIFhXaW5k
b3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhk
aXNwbGF5LCB3aW5kb3csICZhdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mbzsKICAgICB2aXN1
YWxJbmZvLnZpc3VhbGlkID0gWFZpc3VhbElERnJvbVZpc3VhbChhdHRyaWJ1dGVzLnZpc3VhbCk7
CiAKICAgICBpbnQgbnVtUmV0dXJuZWQgPSAwOwogICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZv
TGlzdCA9IFhHZXRWaXN1YWxJbmZvKGRpc3BsYXksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm8s
ICZudW1SZXR1cm5lZCk7Ci0gICAgR0xYQ29udGV4dCBjb250ZXh0ID0gZ2xYQ3JlYXRlQ29udGV4
dChkaXNwbGF5LCB2aXN1YWxJbmZvTGlzdCwgc2hhcmluZ0NvbnRleHQsIFRydWUpOworCisKKyAg
ICBHTFhDb250ZXh0IGdseFNoYXJpbmdDb250ZXh0ID0gc2hhcmluZ0NvbnRleHQgPyBzdGF0aWNf
Y2FzdDxHTENvbnRleHRHTFgqPihzaGFyaW5nQ29udGV4dCktPm1fY29udGV4dCA6IDA7CisgICAg
R0xYQ29udGV4dCBjb250ZXh0ID0gZ2xYQ3JlYXRlQ29udGV4dChkaXNwbGF5LCB2aXN1YWxJbmZv
TGlzdCwgZ2x4U2hhcmluZ0NvbnRleHQsIFRydWUpOwogICAgIFhGcmVlKHZpc3VhbEluZm9MaXN0
KTsKIAogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgLy8gR0xYUGJ1ZmZlciBhbmQgWElEIGFyZSBib3RoIHRoZSBzYW1l
IHR5cGVzIHVuZGVybmVhdGgsIHNvIHdlIGhhdmUgdG8gc2hhcmUKICAgICAvLyBhIGNvbnN0cnVj
dG9yIGhlcmUgd2l0aCB0aGUgd2luZG93IHBhdGguCiAgICAgR0xDb250ZXh0R0xYKiBjb250ZXh0
V3JhcHBlciA9IG5ldyBHTENvbnRleHRHTFgoY29udGV4dCk7CiAgICAgY29udGV4dFdyYXBwZXIt
Pm1fd2luZG93ID0gd2luZG93OwotICAgIHJldHVybiBjb250ZXh0V3JhcHBlcjsKKyAgICByZXR1
cm4gYWRvcHRQdHIoY29udGV4dFdyYXBwZXIpOwogfQogCi1HTENvbnRleHRHTFgqIEdMQ29udGV4
dEdMWDo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQoR0xYQ29udGV4dCBzaGFyaW5nQ29udGV4dCkKK1Bh
c3NPd25QdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZVBidWZmZXJDb250ZXh0
KEdMWENvbnRleHQgc2hhcmluZ0NvbnRleHQpCiB7CiAgICAgaW50IGZiQ29uZmlnQXR0cmlidXRl
c1tdID0gewogICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULApAQCAt
MTI4LDcgKzEyNiw3IEBAIEdMQ29udGV4dEdMWCogR0xDb250ZXh0R0xYOjpjcmVhdGVQYnVmZmVy
Q29udGV4dChHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KQogICAgIEdMWEZCQ29uZmlnKiBjb25m
aWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAm
cmV0dXJuZWRFbGVtZW50cyk7CiAgICAgaWYgKCFyZXR1cm5lZEVsZW1lbnRzKSB7CiAgICAgICAg
IFhGcmVlKGNvbmZpZ3MpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCiAgICAgLy8gV2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCBz
byBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGxhcmdlLgpAQCAtMTM2LDIyICsxMzQs
MjIgQEAgR0xDb250ZXh0R0xYKiBHTENvbnRleHRHTFg6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEdM
WENvbnRleHQgc2hhcmluZ0NvbnRleHQpCiAgICAgR0xYUGJ1ZmZlciBwYnVmZmVyID0gZ2xYQ3Jl
YXRlUGJ1ZmZlcihkaXNwbGF5LCBjb25maWdzWzBdLCBwYnVmZmVyQXR0cmlidXRlcyk7CiAgICAg
aWYgKCFwYnVmZmVyKSB7CiAgICAgICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgR0xYQ29udGV4dCBjb250
ZXh0ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChkaXNwbGF5LCBjb25maWdzWzBdLCBHTFhfUkdCQV9U
WVBFLCBzaGFyaW5nQ29udGV4dCwgR0xfVFJVRSk7CiAgICAgWEZyZWUoY29uZmlncyk7CiAgICAg
aWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAvLyBHTFhQYnVmZmVyIGFuZCBYSUQgYXJlIGJvdGggdGhlIHNhbWUgdHlwZXMgdW5k
ZXJuZWF0aCwgc28gd2UgaGF2ZSB0byBzaGFyZQogICAgIC8vIGEgY29uc3RydWN0b3IgaGVyZSB3
aXRoIHRoZSB3aW5kb3cgcGF0aC4KICAgICBHTENvbnRleHRHTFgqIGNvbnRleHRXcmFwcGVyID0g
bmV3IEdMQ29udGV4dEdMWChjb250ZXh0KTsKICAgICBjb250ZXh0V3JhcHBlci0+bV9wYnVmZmVy
ID0gcGJ1ZmZlcjsKLSAgICByZXR1cm4gY29udGV4dFdyYXBwZXI7CisgICAgcmV0dXJuIGFkb3B0
UHRyKGNvbnRleHRXcmFwcGVyKTsKIH0KIAotR0xDb250ZXh0R0xYKiBHTENvbnRleHRHTFg6OmNy
ZWF0ZVBpeG1hcENvbnRleHQoR0xYQ29udGV4dCBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8
R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZVBpeG1hcENvbnRleHQoR0xYQ29udGV4
dCBzaGFyaW5nQ29udGV4dCkKIHsKICAgICBzdGF0aWMgaW50IHZpc3VhbEF0dHJpYnV0ZXNbXSA9
IHsKICAgICAgICAgR0xYX1JHQkEsCkBAIC0xNjUsMzQgKzE2MywzNCBAQCBHTENvbnRleHRHTFgq
IEdMQ29udGV4dEdMWDo6Y3JlYXRlUGl4bWFwQ29udGV4dChHTFhDb250ZXh0IHNoYXJpbmdDb250
ZXh0KQogICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CiAgICAgWFZpc3Vh
bEluZm8qIHZpc3VhbEluZm8gPSBnbFhDaG9vc2VWaXN1YWwoZGlzcGxheSwgRGVmYXVsdFNjcmVl
bihkaXNwbGF5KSwgdmlzdWFsQXR0cmlidXRlcyk7CiAgICAgaWYgKCF2aXN1YWxJbmZvKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBHTFhDb250ZXh0
IGNvbnRleHQgPSBnbFhDcmVhdGVDb250ZXh0KGRpc3BsYXksIHZpc3VhbEluZm8sIHNoYXJpbmdD
b250ZXh0LCBHTF9UUlVFKTsKICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgWEZyZWUodmlz
dWFsSW5mbyk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBQaXhtYXAgcGl4bWFwID0gWENyZWF0ZVBpeG1hcChkaXNwbGF5LCBEZWZhdWx0
Um9vdFdpbmRvdyhkaXNwbGF5KSwgMSwgMSwgdmlzdWFsSW5mby0+ZGVwdGgpOwogICAgIGlmICgh
cGl4bWFwKSB7CiAgICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgR0xYUGl4bWFwIGdseFBpeG1h
cCA9IGdsWENyZWF0ZUdMWFBpeG1hcChkaXNwbGF5LCB2aXN1YWxJbmZvLCBwaXhtYXApOwogICAg
IGlmICghZ2x4UGl4bWFwKSB7CiAgICAgICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIHBpeG1hcCk7
CiAgICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyBHTENvbnRleHRHTFgoY29u
dGV4dCwgcGl4bWFwLCBnbHhQaXhtYXApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xDb250
ZXh0R0xYKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKSk7CiB9CiAKLUdMQ29udGV4dEdMWCog
R0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMWENvbnRleHQgc2hhcmlu
Z0NvbnRleHQpCitQYXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVD
b250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQpCiB7CiAgICAgaWYg
KCFzaGFyZWREaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgc3RhdGlj
IGJvb2wgc3VjY2VzcyA9IHRydWU7CkBAIC0yMDEsMTcgKzE5OSwxOCBAQCBHTENvbnRleHRHTFgq
IEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJp
bmdDb250ZXh0KQogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogICAgIGlmICgh
c3VjY2VzcykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgR0xDb250ZXh0R0xYKiBjb250ZXh0ID0gd2luZG93ID8gY3JlYXRlV2luZG93Q29udGV4dCh3
aW5kb3csIHNoYXJpbmdDb250ZXh0KSA6IDA7CisgICAgR0xYQ29udGV4dCBnbHhTaGFyaW5nQ29u
dGV4dCA9IHNoYXJpbmdDb250ZXh0ID8gc3RhdGljX2Nhc3Q8R0xDb250ZXh0R0xYKj4oc2hhcmlu
Z0NvbnRleHQpLT5tX2NvbnRleHQgOiAwOworICAgIE93blB0cjxHTENvbnRleHRHTFg+IGNvbnRl
eHQgPSB3aW5kb3cgPyBjcmVhdGVXaW5kb3dDb250ZXh0KHdpbmRvdywgc2hhcmluZ0NvbnRleHQp
IDogbnVsbHB0cjsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIGNvbnRleHQgPSBjcmVhdGVQ
YnVmZmVyQ29udGV4dChzaGFyaW5nQ29udGV4dCk7CisgICAgICAgIGNvbnRleHQgPSBjcmVhdGVQ
YnVmZmVyQ29udGV4dChnbHhTaGFyaW5nQ29udGV4dCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICBjb250ZXh0ID0gY3JlYXRlUGl4bWFwQ29udGV4dChzaGFyaW5nQ29udGV4dCk7CisgICAg
ICAgIGNvbnRleHQgPSBjcmVhdGVQaXhtYXBDb250ZXh0KGdseFNoYXJpbmdDb250ZXh0KTsKICAg
ICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsK
IH0KIAogR0xDb250ZXh0R0xYOjpHTENvbnRleHRHTFgoR0xYQ29udGV4dCBjb250ZXh0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5o
CmluZGV4IDBhN2E5MjRmOTRlNzAwZDhlZmVhZDE3ZjA2YzI0MjJkZTc4MjFlNzkuLjQ4YjY1ODk2
Y2YzYzQzNTkxNGJjOGE0ZmQzZjJiMDE5M2YzNDcxZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTM5LDE0ICszOSwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHTENvbnRleHRHTFggOiBwdWJsaWMgR0xD
b250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTENvbnRleHRHTFgpOwogcHVibGlj
OgotICAgIHN0YXRpYyBHTENvbnRleHRHTFgqIGNyZWF0ZUNvbnRleHQoWElELCBHTFhDb250ZXh0
IHNoYXJpbmdDb250ZXh0ID0gMCk7Ci0gICAgc3RhdGljIEdMQ29udGV4dEdMWCogY3JlYXRlV2lu
ZG93Q29udGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KTsKLSAgICBz
dGF0aWMgR0xDb250ZXh0R0xYKiBjcmVhdGVQYnVmZmVyQ29udGV4dChHTFhDb250ZXh0IHNoYXJp
bmdDb250ZXh0KTsKLSAgICBzdGF0aWMgR0xDb250ZXh0R0xYKiBjcmVhdGVQaXhtYXBDb250ZXh0
KEdMWENvbnRleHQgc2hhcmluZ0NvbnRleHQpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZUFjdGl2
ZUNvbnRleHQoR0xDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0R0xY
PiBjcmVhdGVDb250ZXh0KFhJRCwgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCA9IDApOworICAg
IHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4dEdMWD4gY3JlYXRlV2luZG93Q29udGV4dChYSUQg
d2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KTsKIAogICAgIHZpcnR1YWwgfkdMQ29u
dGV4dEdMWCgpOwotICAgIHZpcnR1YWwgR0xDb250ZXh0KiBjcmVhdGVPZmZzY3JlZW5TaGFyaW5n
Q29udGV4dCgpOwogICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKTsKQEAgLTU2LDYgKzUyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4dEdMWD4gY3JlYXRlUGJ1
ZmZlckNvbnRleHQoR0xYQ29udGV4dCBzaGFyaW5nQ29udGV4dCk7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVQaXhtYXBDb250ZXh0KEdMWENvbnRleHQgc2hhcmlu
Z0NvbnRleHQpOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUFjdGl2ZUNvbnRleHQoR0xDb250ZXh0
Kik7CisKICAgICBzdGF0aWMgdm9pZCBhZGRBY3RpdmVDb250ZXh0KEdMQ29udGV4dEdMWCopOwog
ICAgIHN0YXRpYyB2b2lkIGNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0R3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDYwZDEyYzAyMTFjM2IxZTk2ZWIxNmI4
MjEzNTE2MThlOWNlNjUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLQotI2luY2x1ZGUgIkdMQ29u
dGV4dEdMWC5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhh
c2hNYXA8R3RrV2lkZ2V0KiwgT3duUHRyPEdMQ29udGV4dD4gPiBXaW5kb3dDb250ZXh0TWFwOwot
c3RhdGljIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRvd0NvbnRleHRzTWFwKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFdpbmRvd0NvbnRleHRNYXAsIHdpbmRvd0NvbnRleHRzLCAoKSk7Ci0g
ICAgcmV0dXJuIHdpbmRvd0NvbnRleHRzOwotfQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bkdMQ29u
dGV4dChHdGtXaWRnZXQqIHdpZGdldCwgdm9pZCopCi17Ci0gICAgV2luZG93Q29udGV4dE1hcCYg
d2luZG93Q29udGV4dHMgPSB3aW5kb3dDb250ZXh0c01hcCgpOwotICAgIFdpbmRvd0NvbnRleHRN
YXA6Oml0ZXJhdG9yIGkgPSB3aW5kb3dDb250ZXh0cy5maW5kKHdpZGdldCk7Ci0gICAgaWYgKGkg
IT0gd2luZG93Q29udGV4dHMuZW5kKCkpCi0gICAgICAgIHdpbmRvd0NvbnRleHRzLnJlbW92ZShp
KTsKLX0KLQotR0xDb250ZXh0KiBHTENvbnRleHQ6OmdldENvbnRleHRGb3JXaWRnZXQoR3RrV2lk
Z2V0KiB3aWRnZXQpCi17Ci0gICAgQVNTRVJUKHdpZGdldCk7Ci0KLSAgICBXaW5kb3dDb250ZXh0
TWFwJiB3aW5kb3dDb250ZXh0cyA9IHdpbmRvd0NvbnRleHRzTWFwKCk7Ci0gICAgV2luZG93Q29u
dGV4dE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0NvbnRleHRzTWFwKCkuZmluZCh3aWRnZXQpOwot
ICAgIGlmIChpICE9IHdpbmRvd0NvbnRleHRzLmVuZCgpKQotICAgICAgICByZXR1cm4gaS0+c2Vj
b25kLmdldCgpOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnRleHQgZG9l
c24ndCBoYW5nIGFyb3VuZCBhZnRlciB0aGUgd2luZG93Ci0gICAgLy8gaXMgdW5tYXBwZWQsIHNv
IHdlIG1ha2Ugc3VyZSB0byBjbGVhbiBpdCB1cCBvbmNlIHRoYXQgaGFwcGVucy4KLSAgICBpZiAo
IWdfc2lnbmFsX2hhbmRsZXJfZmluZCh3aWRnZXQsIEdfU0lHTkFMX01BVENIX0ZVTkMsIDAsIDAs
IDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNodXRkb3duR0xDb250ZXh0KSwgMCkpCi0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lkZ2V0LCAidW5tYXAiLCBHX0NBTExCQUNLKHNodXRkb3du
R0xDb250ZXh0KSwgMCk7Ci0KLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSAwOwotCi0jaWYgVVNF
KEdMWCkKLSAgICAvLyBJZiB0aGlzIEdESyB3aW5kb3cgZG9lc24ndCBoYXZlIGl0cyBvd24gbmF0
aXZlIHdpbmRvdyB0aGVuLCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gdXNlIGl0IGZvciByZW5k
ZXJpbmcsIHNpbmNlIHdlJ2xsIGJlIGRyYXdpbmcgb3ZlciBzb21lIG90aGVyIHdpZGdldCdzIGFy
ZWEuCi0gICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lk
Z2V0KTsKLSAgICBjb250ZXh0ID0gZ2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShn
ZGtXaW5kb3cpID8gIEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dChHREtfV0lORE9XX1hJRChn
ZGtXaW5kb3cpKSA6IEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dCgwKTsKLSNlbmRpZgotCi0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHdpbmRvd0NvbnRleHRz
LnNldCh3aWRnZXQsIGFkb3B0UHRyKGNvbnRleHQpKTsKLSAgICByZXR1cm4gY29udGV4dDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgK
aW5kZXggMTEyMGQ4NjdlMTRkODllNjlhZWJlMmM5MWMxYTg3ZTBlOTVhYjBkZC4uM2ZiMWZlMzhi
OTgxYmExYzNhNTZiNGNiMDNhODRlMDU0MzI1ODk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5oCkBAIC03Myw2ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckxheWVyKiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6
R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAjZW5kaWYKIAogICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0KFdlYktpdFdlYlZpZXcqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKaW5kZXggOGM2M2E4NzcyNzM3ODA2NzA1MWQ2NTM0NjhlMTVjNTk3MzM0MzljYS4u
NmJmZGNiNmIzOGE2MDkwNDFjZmE5YTAyNzgyMTc0OGRjYTBmZWJjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAKQEAgLTM1LDYgKzM1LDE0IEBACiAjaW5jbHVkZSA8
Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAorI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpCisjZGVmaW5lIFJlZ2lvbiBYUmVnaW9uCisjZGVmaW5lIEZvbnQgWEZvbnQKKyNk
ZWZpbmUgQ3Vyc29yIFhDdXJzb3IKKyNkZWZpbmUgU2NyZWVuIFhTY3JlZW4KKyNpbmNsdWRlIDxn
ZGsvZ2RreC5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTU5LDEwICs2NywxNyBAQCBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjplbmFibGVkKCkKIAogR0xDb250ZXh0KiBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6Z2xDb250ZXh0KCkKIHsKLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSBHTENvbnRl
eHQ6OmdldENvbnRleHRGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICBpZiAo
IWNvbnRleHQtPmNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBjb250ZXh0OworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQor
ICAgIC8vIEZJWE1FOiBHcmFjZWZ1bGx5IGFjY291bnQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgd2Ug
ZG8gbm90IGhhdmUgYSByZWFsaXplZCB3aW5kb3cuCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBpZiAo
Z2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShnZGtXaW5kb3cpKQorICAgICAgICBt
X2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3coR0RLX1dJTkRPV19Y
SUQoZ2RrV2luZG93KSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
CkBAIC05NCw2ICsxMDksNyBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBncmFwaAogICAgIGlmICghZ3Jh
cGhpY3NMYXllcikgewogICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLmNsZWFyKCk7CiAgICAg
ICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciA9IDA7CisgICAgICAgIG1fY29udGV4dC5jbGVh
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCg==
</data>
<flag name="review"
          id="146266"
          type_id="1"
          status="+"
          setter="alex"
    />
          </attachment>
      

    </bug>

</bugzilla>