<?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>230257</bug_id>
          
          <creation_ts>2021-09-14 05:37:58 -0700</creation_ts>
          <short_desc>[GTK][a11y] Add implementation of component interface when building with ATSPI</short_desc>
          <delta_ts>2021-10-18 05:43:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230255</dependson>
          <blocked>230253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793261</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-09-14 05:37:58 -0700</bug_when>
    <thetext>Implement the component interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801994</commentid>
    <comment_count>1</comment_count>
      <attachid>440592</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-08 04:47:15 -0700</bug_when>
    <thetext>Created attachment 440592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802028</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-08 07:25:54 -0700</bug_when>
    <thetext>The API test failures must be unrelated, this patch only affects a11y and when building with atspi enabled, which is disabled by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802045</commentid>
    <comment_count>3</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-08 07:43:20 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; Created attachment 440592 [details]
&gt; Patch

--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
+++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h

+    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;

nodeForID belongs to the tree not to the isolated object. I think it is a better design to keep it in AXIsolatedTree. Do you have a reason to move it to AXIsolatedObject?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802054</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-08 07:59:02 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #3)
&gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; Created attachment 440592 [details]
&gt; &gt; Patch
&gt; 
&gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; 
&gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; 
&gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; to AXIsolatedObject?

Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR actually. Since WTR calls accessibility api from the web process main thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s always expected to be called from the secondary thread (nodeForID only works from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first thing AXIsolatedObject::accessibilityHitTest() is retrieveValueFromMainThread() but main thread is blocked. So, I split it adding AccessibilityObjectAtspi::objectAtPoint() that is always called by the main thread and does the coordinate conversion + accessibilityHitTest(). When called from the main thread (WTR only) it&apos;s called directly and the wrapper object returned. When called from the AX thread I need the nodeForID() call to get the wrapper from the isolated object. 

I agree nodeForID doesn&apos;t belong to AXIsolatedObject, so the other solution would be to just make AXIsolatedObject::tree() public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802064</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-08 08:11:03 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; 
&gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; 
&gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; to AXIsolatedObject?
&gt; 
&gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; actually. Since WTR calls accessibility api from the web process main
&gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; always expected to be called from the secondary thread (nodeForID only works
&gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; wrapper object returned. When called from the AX thread I need the
&gt; nodeForID() call to get the wrapper from the isolated object. 

Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper() should work in all objects, isolated or live.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802069</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-08 08:23:07 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #5)
&gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; 
&gt; &gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; &gt; 
&gt; &gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; &gt; to AXIsolatedObject?
&gt; &gt; 
&gt; &gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; &gt; actually. Since WTR calls accessibility api from the web process main
&gt; &gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; &gt; always expected to be called from the secondary thread (nodeForID only works
&gt; &gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; &gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; &gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; &gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; &gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; &gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; &gt; wrapper object returned. When called from the AX thread I need the
&gt; &gt; nodeForID() call to get the wrapper from the isolated object. 
&gt; 
&gt; Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper()
&gt; should work in all objects, isolated or live.

hmm, I&apos;m not sure it&apos;s ok to get the wrapper from the main thread, I assumed that AXIsolatedObject::accessibilityHitTest() returned the AXID because it&apos;s safe to send the id from main to AX thread, but not the wrapper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802122</commentid>
    <comment_count>7</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-08 09:29:46 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; (In reply to Andres Gonzalez from comment #5)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; &gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; &gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; &gt; &gt; to AXIsolatedObject?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; &gt; &gt; actually. Since WTR calls accessibility api from the web process main
&gt; &gt; &gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; &gt; &gt; always expected to be called from the secondary thread (nodeForID only works
&gt; &gt; &gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; &gt; &gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; &gt; &gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; &gt; &gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; &gt; &gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; &gt; &gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; &gt; &gt; wrapper object returned. When called from the AX thread I need the
&gt; &gt; &gt; nodeForID() call to get the wrapper from the isolated object. 
&gt; &gt; 
&gt; &gt; Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper()
&gt; &gt; should work in all objects, isolated or live.
&gt; 
&gt; hmm, I&apos;m not sure it&apos;s ok to get the wrapper from the main thread, I assumed
&gt; that AXIsolatedObject::accessibilityHitTest() returned the AXID because it&apos;s
&gt; safe to send the id from main to AX thread, but not the wrapper?

Let&apos;s go back for a moment to the origin of the problem. As you said, you couldn&apos;t use AccessibilityController::executeOnAXThreadAndWait for HitTest because HitTest  will dispatch back to the main thread that it would be waiting, resulting in deadlock. The way we worked around this was by:

AccessibilityController::executeOnAXThreadAndWait calls
AXThread::dispatch that in turn calls
axThread.wakeUpRunLoop

On Mac wakeUpRunLoop does

void AXThread::wakeUpRunLoop()
{
    CFRunLoopSourceSignal(m_threadRunLoopSource.get());
    CFRunLoopWakeUp(m_threadRunLoop.get());
}

But it is a no-op in GTK. Could we try something equivalent in GTK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802132</commentid>
    <comment_count>8</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-08 09:55:38 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #7)
&gt; (In reply to Carlos Garcia Campos from comment #6)
&gt; &gt; (In reply to Andres Gonzalez from comment #5)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; &gt; &gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; &gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; &gt; &gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; &gt; &gt; &gt; to AXIsolatedObject?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; &gt; &gt; &gt; actually. Since WTR calls accessibility api from the web process main
&gt; &gt; &gt; &gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; &gt; &gt; &gt; always expected to be called from the secondary thread (nodeForID only works
&gt; &gt; &gt; &gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; &gt; &gt; &gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; &gt; &gt; &gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; &gt; &gt; &gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; &gt; &gt; &gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; &gt; &gt; &gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; &gt; &gt; &gt; wrapper object returned. When called from the AX thread I need the
&gt; &gt; &gt; &gt; nodeForID() call to get the wrapper from the isolated object. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper()
&gt; &gt; &gt; should work in all objects, isolated or live.
&gt; &gt; 
&gt; &gt; hmm, I&apos;m not sure it&apos;s ok to get the wrapper from the main thread, I assumed
&gt; &gt; that AXIsolatedObject::accessibilityHitTest() returned the AXID because it&apos;s
&gt; &gt; safe to send the id from main to AX thread, but not the wrapper?
&gt; 
&gt; Let&apos;s go back for a moment to the origin of the problem. As you said, you
&gt; couldn&apos;t use AccessibilityController::executeOnAXThreadAndWait for HitTest
&gt; because HitTest  will dispatch back to the main thread that it would be
&gt; waiting, resulting in deadlock. The way we worked around this was by:
&gt; 
&gt; AccessibilityController::executeOnAXThreadAndWait calls
&gt; AXThread::dispatch that in turn calls
&gt; axThread.wakeUpRunLoop
&gt; 
&gt; On Mac wakeUpRunLoop does
&gt; 
&gt; void AXThread::wakeUpRunLoop()
&gt; {
&gt;     CFRunLoopSourceSignal(m_threadRunLoopSource.get());
&gt;     CFRunLoopWakeUp(m_threadRunLoop.get());
&gt; }
&gt; 
&gt; But it is a no-op in GTK. Could we try something equivalent in GTK?

The issue is not unique to HitTest, but you would have the same problem for any call into the API that needs to dispatch to the main thread. So we need to find a general solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802444</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-10 00:44:46 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #7)
&gt; (In reply to Carlos Garcia Campos from comment #6)
&gt; &gt; (In reply to Andres Gonzalez from comment #5)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; &gt; &gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; &gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; &gt; &gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; &gt; &gt; &gt; to AXIsolatedObject?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; &gt; &gt; &gt; actually. Since WTR calls accessibility api from the web process main
&gt; &gt; &gt; &gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; &gt; &gt; &gt; always expected to be called from the secondary thread (nodeForID only works
&gt; &gt; &gt; &gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; &gt; &gt; &gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; &gt; &gt; &gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; &gt; &gt; &gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; &gt; &gt; &gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; &gt; &gt; &gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; &gt; &gt; &gt; wrapper object returned. When called from the AX thread I need the
&gt; &gt; &gt; &gt; nodeForID() call to get the wrapper from the isolated object. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper()
&gt; &gt; &gt; should work in all objects, isolated or live.
&gt; &gt; 
&gt; &gt; hmm, I&apos;m not sure it&apos;s ok to get the wrapper from the main thread, I assumed
&gt; &gt; that AXIsolatedObject::accessibilityHitTest() returned the AXID because it&apos;s
&gt; &gt; safe to send the id from main to AX thread, but not the wrapper?
&gt; 
&gt; Let&apos;s go back for a moment to the origin of the problem. As you said, you
&gt; couldn&apos;t use AccessibilityController::executeOnAXThreadAndWait for HitTest
&gt; because HitTest  will dispatch back to the main thread that it would be
&gt; waiting, resulting in deadlock. The way we worked around this was by:
&gt; 
&gt; AccessibilityController::executeOnAXThreadAndWait calls
&gt; AXThread::dispatch that in turn calls
&gt; axThread.wakeUpRunLoop
&gt; 
&gt; On Mac wakeUpRunLoop does
&gt; 
&gt; void AXThread::wakeUpRunLoop()
&gt; {
&gt;     CFRunLoopSourceSignal(m_threadRunLoopSource.get());
&gt;     CFRunLoopWakeUp(m_threadRunLoop.get());
&gt; }
&gt; 
&gt; But it is a no-op in GTK. Could we try something equivalent in GTK?

hmm, I don&apos;t understand how waking up the AX thread helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802445</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-10 00:45:14 -0700</bug_when>
    <thetext>The AX thread run loop I meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802446</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-10 00:52:57 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #8)
&gt; (In reply to Andres Gonzalez from comment #7)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #6)
&gt; &gt; &gt; (In reply to Andres Gonzalez from comment #5)
&gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; &gt; &gt; &gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Created attachment 440592 [details]
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; &gt; +++ a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;AXIsolatedObject&gt; nodeForID(AXID) const;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; nodeForID belongs to the tree not to the isolated object. I think it is a
&gt; &gt; &gt; &gt; &gt; &gt; better design to keep it in AXIsolatedTree. Do you have a reason to move it
&gt; &gt; &gt; &gt; &gt; &gt; to AXIsolatedObject?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Yes, I need it in AccessibilityObjectAtspi::hitTest() only because of WTR
&gt; &gt; &gt; &gt; &gt; actually. Since WTR calls accessibility api from the web process main
&gt; &gt; &gt; &gt; &gt; thread, I can&apos;t use AXIsolatedObject::accessibilityHitTest() because it&apos;s
&gt; &gt; &gt; &gt; &gt; always expected to be called from the secondary thread (nodeForID only works
&gt; &gt; &gt; &gt; &gt; from the a11y thread). I can&apos;t use callOnAXthreadAndWait, because first
&gt; &gt; &gt; &gt; &gt; thing AXIsolatedObject::accessibilityHitTest() is
&gt; &gt; &gt; &gt; &gt; retrieveValueFromMainThread() but main thread is blocked. So, I split it
&gt; &gt; &gt; &gt; &gt; adding AccessibilityObjectAtspi::objectAtPoint() that is always called by
&gt; &gt; &gt; &gt; &gt; the main thread and does the coordinate conversion + accessibilityHitTest().
&gt; &gt; &gt; &gt; &gt; When called from the main thread (WTR only) it&apos;s called directly and the
&gt; &gt; &gt; &gt; &gt; wrapper object returned. When called from the AX thread I need the
&gt; &gt; &gt; &gt; &gt; nodeForID() call to get the wrapper from the isolated object. 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can&apos;t you get the wrapper from the isolated object? AXCoreObject::wrapper()
&gt; &gt; &gt; &gt; should work in all objects, isolated or live.
&gt; &gt; &gt; 
&gt; &gt; &gt; hmm, I&apos;m not sure it&apos;s ok to get the wrapper from the main thread, I assumed
&gt; &gt; &gt; that AXIsolatedObject::accessibilityHitTest() returned the AXID because it&apos;s
&gt; &gt; &gt; safe to send the id from main to AX thread, but not the wrapper?
&gt; &gt; 
&gt; &gt; Let&apos;s go back for a moment to the origin of the problem. As you said, you
&gt; &gt; couldn&apos;t use AccessibilityController::executeOnAXThreadAndWait for HitTest
&gt; &gt; because HitTest  will dispatch back to the main thread that it would be
&gt; &gt; waiting, resulting in deadlock. The way we worked around this was by:
&gt; &gt; 
&gt; &gt; AccessibilityController::executeOnAXThreadAndWait calls
&gt; &gt; AXThread::dispatch that in turn calls
&gt; &gt; axThread.wakeUpRunLoop
&gt; &gt; 
&gt; &gt; On Mac wakeUpRunLoop does
&gt; &gt; 
&gt; &gt; void AXThread::wakeUpRunLoop()
&gt; &gt; {
&gt; &gt;     CFRunLoopSourceSignal(m_threadRunLoopSource.get());
&gt; &gt;     CFRunLoopWakeUp(m_threadRunLoop.get());
&gt; &gt; }
&gt; &gt; 
&gt; &gt; But it is a no-op in GTK. Could we try something equivalent in GTK?
&gt; 
&gt; The issue is not unique to HitTest, but you would have the same problem for
&gt; any call into the API that needs to dispatch to the main thread. So we need
&gt; to find a general solution.

I managed to handle all other cases by just splitting the methods, a common one that always runs in the main thread (or simply calls retrieveValueFromMainThread) and the one that is always expected to be called from the AX thread. For requests coming from the ATSPI service I use the method that is expected to be called from the AX thread and calls the common one. From WTR I call the common one directly from the main thread, since retrieveValueFromMainThread just calls the lambda if already in the main thread. That&apos;s the advantage of using the WebCore wrappers directly from WTR, without any a11y toolkit in the middle. There are a few cases like children() that I always run from the AX thread in WTR because those don&apos;t schedule a main thread task.

I have the WTR changes in a local commit that I plan to land after landing the text interface support, that&apos;s why you still see stubs for everything when building with atspi.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803704</commentid>
    <comment_count>12</comment_count>
      <attachid>441055</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-13 04:43:09 -0700</bug_when>
    <thetext>Created attachment 441055
Patch

Removed the cross-platform changes in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803727</commentid>
    <comment_count>13</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-13 06:23:59 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #12)
&gt; Created attachment 441055 [details]
&gt; Patch
&gt; 
&gt; Removed the cross-platform changes in the end.

Sorry that is taking me long to get back. So you are not doing layout tests for HitTest? 

I have to look at the question concerning the runloop wakeup. The intention at least was to wakeup the main thread to avoid the deadlock, but there may be a bug.

Concerning LayoutTests calling different functions than the actual AT client, we would like to avoid that as a way to go in the backdoor. I think it would be good that the LayoutTests JS uses the same entry points into accessibility as a real client would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803736</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-13 06:38:03 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #13)
&gt; (In reply to Carlos Garcia Campos from comment #12)
&gt; &gt; Created attachment 441055 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Removed the cross-platform changes in the end.
&gt; 
&gt; Sorry that is taking me long to get back.

No problem!

&gt; So you are not doing layout tests
&gt; for HitTest? 

Yes, but the WTR support is not upstream yet, and ATSPI implementation is disabled by default because it&apos;s still work in progress, so no bots are running tests with ATSPI.

&gt; I have to look at the question concerning the runloop wakeup. The intention
&gt; at least was to wakeup the main thread to avoid the deadlock, but there may
&gt; be a bug.

But the main loop is blocked in a semaphore, or weaking up the main thread loop in the AX thread makes the code scheduled for the main thread to run in the AX thread?

&gt; Concerning LayoutTests calling different functions than the actual AT
&gt; client, we would like to avoid that as a way to go in the backdoor. I think
&gt; it would be good that the LayoutTests JS uses the same entry points into
&gt; accessibility as a real client would.

They will end up running the same code. In any case, I think it will be easier to discuss the WTR implementation once I submit the patch for it. I plan to upstream the text implementation after the component one, and then add the initial WTR support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805544</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-18 05:43:24 -0700</bug_when>
    <thetext>Committed r284367 (243152@main): &lt;https://commits.webkit.org/243152@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440592</attachid>
            <date>2021-10-08 04:47:15 -0700</date>
            <delta_ts>2021-10-13 04:43:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-component.diff</filename>
            <type>text/plain</type>
            <size>36549</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDdhZWI3NGEyZmMuLjJmYWY1M2UxNjU2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQzIEBACisyMDIxLTEwLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2Yg
Y29tcG9uZW50IGludGVyZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50ZXJmYWNl
c0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWls
ZEludGVyZmFjZXMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5T2JqZWN0Q29tcG9uZW50QXRzcGkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6b2JqZWN0QXRQb2ludCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmhpdFRlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplbGVtZW50UmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmZvY3Vz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6b3Bh
Y2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnNjcm9sbFRvTWFrZVZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpzY3JvbGxUb1BvaW50IGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6cmVnaXN0ZXJPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmZyYW1lUmVjdCBjb25zdCk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwvQ29tcG9uZW50LnhtbDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6Om5vZGVGb3JJRCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpjaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpB
WElzb2xhdGVkT2JqZWN0OjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRPYmplY3Q6Omluc2VydE1hdGhQYWlycyk6CisgICAgICAgIChXZWJDb3JlOjpB
WElzb2xhdGVkT2JqZWN0OjpwYXJlbnRPYmplY3RVbmlnbm9yZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVu
VmVjdG9yRm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaDoKKwogMjAyMS0xMC0wOCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZvbnQtZmFtaWxpZXMgaW5zaWRl
IEBmb250LXBhbGV0dGUtdmFsdWVzIG5lZWQgdG8gYmUgY2FzZSBpbnNlbnNpdGl2ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzR1RLLnR4dAppbmRleCAzY2RmM2U4MWVlMzUuLjYwMzczNjM1YzEzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKQEAgLTQxLDYgKzQxLDcgQEAgYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCiAKIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmNw
cAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwCithY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAKIGFj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAKIGFjY2Vzc2liaWxp
dHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmgK
aW5kZXggZWE3NjI3YjllZTUxLi4wZWFhMjViMTlhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1z
LmgKQEAgLTIzMSw2ICsyMzEsMzMgQEAgZW51bSBSZWxhdGlvbiB7CiAgICAgTGFzdERlZmluZWRS
ZWxhdGlvbiwKIH07CiAKK2VudW0gQ29vcmRpbmF0ZVR5cGUgeworICAgIFNjcmVlbkNvb3JkaW5h
dGVzLAorICAgIFdpbmRvd0Nvb3JkaW5hdGVzLAorICAgIFBhcmVudENvb3JkaW5hdGVzLAorfTsK
KworZW51bSBDb21wb25lbnRMYXllciB7CisgICAgSW52YWxpZExheWVyLAorICAgIEJhY2tncm91
bmRMYXllciwKKyAgICBDYW52YXNMYXllciwKKyAgICBXaWRnZXRMYXllciwKKyAgICBNZGlMYXll
ciwKKyAgICBQb3B1cExheWVyLAorICAgIE92ZXJsYXlMYXllciwKKyAgICBXaW5kb3dMYXllciwK
K307CisKK2VudW0gU2Nyb2xsVHlwZSB7CisgICAgVG9wTGVmdCwKKyAgICBCb3R0b21SaWdodCwK
KyAgICBUb3BFZGdlLAorICAgIEJvdHRvbUVkZ2UsCisgICAgTGVmdEVkZ2UsCisgICAgUmlnaHRF
ZGdlLAorICAgIEFueXdoZXJlCit9OworCiB9IC8vIG5hbWVzcGFjZSBBdHNwaQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggNjk4MTc0
MTc0NDI0Li44YTU0M2I0Y2E4MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAg
LTQwLDcgKzQwLDcgQEAgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpjcmVhdGUoQVhDb3JlT2JqZWN0KiBjb3IKIAogT3B0aW9uU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmludGVyZmFjZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQogewotICAgIE9w
dGlvblNldDxJbnRlcmZhY2U+IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNjZXNzaWJsZSB9
OworICAgIE9wdGlvblNldDxJbnRlcmZhY2U+IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNj
ZXNzaWJsZSwgSW50ZXJmYWNlOjpDb21wb25lbnQgfTsKIAogICAgIHJldHVybiBpbnRlcmZhY2Vz
OwogfQpAQCAtNDI0LDYgKzQyNCw4IEBAIGNvbnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpwYXRoKCkKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHREJ1c0ludGVyZmFjZUlu
Zm8qLCBHREJ1c0ludGVyZmFjZVZUYWJsZSo+PiBpbnRlcmZhY2VzOwogICAgICAgICBpZiAobV9p
bnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6QWNjZXNzaWJsZSkpCiAgICAgICAgICAgICBp
bnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtp
dF9hY2Nlc3NpYmxlX2ludGVyZmFjZSksICZzX2FjY2Vzc2libGVGdW5jdGlvbnMgfSk7CisgICAg
ICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpDb21wb25lbnQpKQorICAg
ICAgICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5m
byo+KCZ3ZWJraXRfY29tcG9uZW50X2ludGVyZmFjZSksICZzX2NvbXBvbmVudEZ1bmN0aW9ucyB9
KTsKICAgICAgICAgbV9wYXRoID0gYXRzcGlSb290LT5hdHNwaSgpLnJlZ2lzdGVyT2JqZWN0KCp0
aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsKICAgICB9CiAKQEAgLTEwMzUsNiArMTAzNyw4IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRC
dWlsZGVyKiBidWlsZGVyKSBjb25zdAogICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkFjY2Vzc2libGUp
KQogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRfYWNj
ZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7CisgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJ
bnRlcmZhY2U6OkNvbXBvbmVudCkpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWls
ZGVyLCAicyIsIHdlYmtpdF9jb21wb25lbnRfaW50ZXJmYWNlLm5hbWUpOwogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRl
cikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCmluZGV4IDU2NjMwZWVhYzViMy4uNTcw
NDhmODQ0MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3Bp
L0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKQEAgLTIyLDYgKzIyLDcgQEAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlBdHNwaS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KQEAgLTQyLDcgKzQz
LDggQEAgcHVibGljOgogICAgIH5BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkoKSA9IGRlZmF1bHQ7
CiAKICAgICBlbnVtIGNsYXNzIEludGVyZmFjZSA6IHVpbnQ4X3QgewotICAgICAgICBBY2Nlc3Np
YmxlID0gMSA8PCAwCisgICAgICAgIEFjY2Vzc2libGUgPSAxIDw8IDAsCisgICAgICAgIENvbXBv
bmVudCA9IDEgPDwgMQogICAgIH07CiAgICAgY29uc3QgT3B0aW9uU2V0PEludGVyZmFjZT4mIGlu
dGVyZmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyZmFjZXM7IH0KIApAQCAtNzUsNiArNzcs
MTEgQEAgcHVibGljOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXMoKSBj
b25zdDsKICAgICBIYXNoTWFwPHVpbnQzMl90LCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaT4+PiByZWxhdGlvbk1hcCgpIGNvbnN0OwogCisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpKiBoaXRUZXN0KGNvbnN0IEludFBvaW50JiwgdWludDMyX3QpIGNvbnN0OworICAg
IEludFJlY3QgZWxlbWVudFJlY3QodWludDMyX3QpIGNvbnN0OworICAgIHZvaWQgc2Nyb2xsVG9N
YWtlVmlzaWJsZSh1aW50MzJfdCkgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxUb1BvaW50KGNvbnN0
IEludFBvaW50JiwgdWludDMyX3QpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaShBWENvcmVPYmplY3QqKTsKIApAQCAtODksOSArOTYsMTQg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkUmVsYXRpb25TZXQoR1ZhcmlhbnRCdWlsZGVyKikg
Y29uc3Q7CiAgICAgdm9pZCBidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7
CiAKKyAgICBBWENvcmVPYmplY3QqIG9iamVjdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCB1aW50
MzJfdCkgY29uc3Q7CisgICAgYm9vbCBmb2N1cygpIGNvbnN0OworICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdDsKKwogICAgIHN0YXRpYyBPcHRpb25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9y
T2JqZWN0KEFYQ29yZU9iamVjdCYpOwogCiAgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxl
IHNfYWNjZXNzaWJsZUZ1bmN0aW9uczsKKyAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUg
c19jb21wb25lbnRGdW5jdGlvbnM7CiAKICAgICBBWENvcmVPYmplY3QqIG1fYXhPYmplY3QgeyBu
dWxscHRyIH07CiAgICAgQVhDb3JlT2JqZWN0KiBtX2NvcmVPYmplY3QgeyBudWxscHRyIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wNTBmMWU0OWRiNmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RDb21wb25lbnRBdHNwaS5jcHAKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaS5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVT
RShBVFNQSSkKKyNpbmNsdWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUF0c3BpRW51bXMuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dEQnVzSW50
ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19jb21wb25lbnRGdW5jdGlv
bnMgPSB7CisgICAgLy8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9k
TmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKKyAgICAgICAgYXRzcGlP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1l
dGhvZE5hbWUsICJDb250YWlucyIpKSB7CisgICAgICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlOworICAgICAgICAgICAgZ192YXJpYW50X2dldChw
YXJhbWV0ZXJzLCAiKGlpdSkiLCAmeCwgJnksICZjb29yZGluYXRlVHlwZSk7CisgICAgICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFy
aWFudF9uZXcoIihiKSIsICEhYXRzcGlPYmplY3QtPmhpdFRlc3QoeyB4LCB5IH0sIGNvb3JkaW5h
dGVUeXBlKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdl
dEFjY2Vzc2libGVBdFBvaW50IikpIHsKKyAgICAgICAgICAgIGludCB4LCB5OworICAgICAgICAg
ICAgdWludDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBh
cmFtZXRlcnMsICIoaWl1KSIsICZ4LCAmeSwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAg
IGF1dG8qIHdyYXBwZXIgPSBhdHNwaU9iamVjdC0+aGl0VGVzdCh7IHgsIHkgfSwgY29vcmRpbmF0
ZVR5cGUpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1
ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoQChzbykpIiwgd3JhcHBlciA/IHdyYXBwZXIt
PnJlZmVyZW5jZSgpIDogYXRzcGlPYmplY3QtPnJvb3QoKS0+YXRzcGkoKS5udWxsUmVmZXJlbmNl
KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRFeHRl
bnRzIikpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlOworICAgICAgICAg
ICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHUpIiwgJmNvb3JkaW5hdGVUeXBlKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVjdCA9IGF0c3BpT2JqZWN0LT5lbGVtZW50UmVjdChjb29yZGluYXRl
VHlwZSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVl
KGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIigoaWlpaSkpIiwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHZXRQb3NpdGlvbiIpKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBjb29yZGluYXRlVHlwZTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywg
Iih1KSIsICZjb29yZGluYXRlVHlwZSk7CisgICAgICAgICAgICBhdXRvIHJlY3QgPSBhdHNwaU9i
amVjdC0+ZWxlbWVudFJlY3QoY29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIo
aWkpIiwgcmVjdC54KCksIHJlY3QueSgpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiR2V0U2l6ZSIpKSB7CisgICAgICAgICAgICBhdXRvIHJlY3QgPSBhdHNw
aU9iamVjdC0+ZWxlbWVudFJlY3QoQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpQYXJlbnRDb29yZGlu
YXRlcyk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVl
KGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihpaSkiLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRM
YXllciIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1
ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBBdHNwaTo6Q29tcG9uZW50TGF5ZXI6
OldpZGdldExheWVyKSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwg
IkdldE1ESVpPcmRlciIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3Jl
dHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIobikiLCAwKSk7CisgICAgICAg
IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdyYWJGb2N1cyIpKQorICAgICAgICAg
ICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zh
cmlhbnRfbmV3KCIoYikiLCBhdHNwaU9iamVjdC0+Zm9jdXMoKSkpOworICAgICAgICBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBbHBoYSIpKQorICAgICAgICAgICAgZ19kYnVz
X21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3
KCIoZCkiLCBhdHNwaU9iamVjdC0+b3BhY2l0eSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0
cmNtcDAobWV0aG9kTmFtZSwgIlNjcm9sbFRvIikpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNj
cm9sbFR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodSkiLCAm
c2Nyb2xsVHlwZSk7CisgICAgICAgICAgICBhdHNwaU9iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJs
ZShzY3JvbGxUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1
cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgVFJVRSkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNjcm9sbFRvUG9pbnQiKSkgewor
ICAgICAgICAgICAgaW50IHgsIHk7CisgICAgICAgICAgICB1aW50MzJfdCBjb29yZGluYXRlVHlw
ZTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih1aWkpIiwgJmNvb3Jk
aW5hdGVUeXBlLCAmeCwgJnkpOworICAgICAgICAgICAgYXRzcGlPYmplY3QtPnNjcm9sbFRvUG9p
bnQoeyB4LCB5IH0sIGNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2Rf
aW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwg
VFJVRSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNldEV4
dGVudHMiKSB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRQb3NpdGlvbiIpIHx8ICFnX3N0
cmNtcDAobWV0aG9kTmFtZSwgIlNldFNpemUiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2Rf
aW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1Is
IEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAgfSwKKyAgICAvLyBnZXRfcHJv
cGVydHkKKyAgICBudWxscHRyLAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRyLAor
ICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCitBWENvcmVPYmplY3QqIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6b2JqZWN0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVp
bnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICBtX2NvcmVPYmplY3Qt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgSW50UG9pbnQgY29udmVydGVkUG9pbnQgPSBwb2ludDsK
KyAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmll
dygpKSB7CisgICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBB
dHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzOgorICAgICAgICAgICAgY29u
dmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMocG9pbnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dD
b29yZGluYXRlczoKKyAgICAgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gZnJhbWVWaWV3LT53aW5k
b3dUb0NvbnRlbnRzKHBvaW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0
c3BpOjpDb29yZGluYXRlVHlwZTo6UGFyZW50Q29vcmRpbmF0ZXM6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQ2hpbGRyZW5J
Zk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QtPmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnZlcnRlZFBvaW50KTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50
MzJfdCBjb29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIGNvcmVPYmplY3QgPSBvYmplY3RBdFBvaW50KHBvaW50LCBjb29y
ZGluYXRlVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gY29yZU9iamVjdC0+d3JhcHBlcigpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fYXhPYmplY3QpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBheElEID0gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEFYSUQ+KFt0aGlzLCAmcG9pbnQsIGNvb3JkaW5h
dGVUeXBlXSgpIC0+IEFYSUQgeworICAgICAgICBpZiAoYXV0byogY29yZU9iamVjdCA9IG9iamVj
dEF0UG9pbnQocG9pbnQsIGNvb3JkaW5hdGVUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBjb3Jl
T2JqZWN0LT5vYmplY3RJRCgpOworCisgICAgICAgIHJldHVybiBJbnZhbGlkQVhJRDsKKyAgICB9
KTsKKworICAgIGlmIChhdXRvIGF4T2JqZWN0ID0gZG93bmNhc3Q8QVhJc29sYXRlZE9iamVjdD4o
Km1fYXhPYmplY3QpLm5vZGVGb3JJRChheElEKSkKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53
cmFwcGVyKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSW50UmVjdCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmVsZW1lbnRSZWN0KHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25z
dAoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8SW50UmVjdD4oW3RoaXMsIGNvb3JkaW5hdGVUeXBlXSgpIC0+IEludFJlY3QgeworICAgICAg
ICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICAgICAgYXV0byByZWN0ID0gc25hcHBlZEludFJlY3QobV9jb3JlT2Jq
ZWN0LT5lbGVtZW50UmVjdCgpKTsKKyAgICAgICAgYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2Jq
ZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgICAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgICAgIHJldHVybiByZWN0OworCisgICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5cGUpIHsK
KyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzOgor
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAg
ICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzOgorICAg
ICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICAg
ICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlBhcmVudENvb3JkaW5hdGVzOgorICAgICAg
ICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0pOworfQorCitib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6Zm9jdXMoKSBjb25zdAoreworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9heE9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBtX2F4T2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gbV9heE9iamVjdC0+aXNGb2N1
c2VkKCk7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6b3BhY2l0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRo
cmVhZDxmbG9hdD4oW3RoaXNdKCkgLT4gZmxvYXQgeworICAgICAgICBpZiAobV9jb3JlT2JqZWN0
KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
ICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IG1fY29yZU9iamVjdC0+cmVuZGVyZXIoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5vcGFjaXR5KCk7CisKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzY3JvbGxU
b01ha2VWaXNpYmxlKHVpbnQzMl90IHNjcm9sbFR5cGUpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJp
bGl0eTo6cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFt0aGlzLCBzY3JvbGxUeXBlXSB7Cisg
ICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnblg7CisgICAgICAgIFNj
cm9sbEFsaWdubWVudCBhbGlnblk7CisgICAgICAgIHN3aXRjaCAoc2Nyb2xsVHlwZSkgeworICAg
ICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpUb3BMZWZ0OgorICAgICAgICAgICAgYWxpZ25Y
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdheXM7CisgICAgICAgICAgICBhbGlnblkg
PSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkJvdHRvbVJpZ2h0OgorICAgICAgICAgICAg
YWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblJpZ2h0QWx3YXlzOworICAgICAgICAgICAg
YWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpUb3BFZGdlOgorICAgICAg
ICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpCb3R0b21FZGdlOgorICAgICAgICAgICAgLy8gQWxp
Z24gdG8gYSBwYXJ0aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBhbHdheXMgdGhl
IGNsb3Nlc3QgZWRnZS4KKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25DZW50ZXJJZk5lZWRlZDsKKyAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6
YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0
c3BpOjpTY3JvbGxUeXBlOjpMZWZ0RWRnZToKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlw
ZTo6UmlnaHRFZGdlOgorICAgICAgICAgICAgLy8gQWxpZ24gdG8gYSBwYXJ0aWN1bGFyIGVkZ2Ug
aXMgbm90IHN1cHBvcnRlZCwgaXQncyBhbHdheXMgdGhlIGNsb3Nlc3QgZWRnZS4KKyAgICAgICAg
ICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKKyAgICAg
ICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpBbnl3aGVy
ZToKKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5l
ZWRlZDsKKyAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJ
Zk5lZWRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbV9jb3Jl
T2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxlKHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFs
LCBhbGlnblgsIGFsaWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0p
OworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9Q
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25z
dAoreworICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGhp
cywgcG9pbnQsIGNvb3JkaW5hdGVUeXBlXSB7CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisg
ICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAg
IGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEludFBv
aW50IGNvbnZlcnRlZFBvaW50KHBvaW50KTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVUeXBlID09
IEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkp
CisgICAgICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9jb3JlT2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KGNvbnZlcnRlZFBvaW50KTsK
KyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCmlu
ZGV4IDgyYjU3ODkyYzRiMi4uMDg5NmUxMGU1YjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5j
cHAKQEAgLTExOCw2ICsxMTgsNyBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5
Um9vdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICAgICBHVmFyaWFu
dEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUo
ImFzIikpOwogCiAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJz
Iiwgd2Via2l0X2FjY2Vzc2libGVfaW50ZXJmYWNlLm5hbWUpOworICAgICAgICAgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAicyIsIHdlYmtpdF9jb21wb25lbnRfaW50ZXJmYWNl
Lm5hbWUpOwogICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1
ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYXMpIiwgJmJ1aWxkZXIpKTsKICAgICAgICAg
fQogICAgIH0sCkBAIC0xNTYsNiArMTU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
OjpyZWdpc3Rlck9iamVjdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYKICAg
ICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxH
REJ1c0ludGVyZmFjZUluZm8qLCBHREJ1c0ludGVyZmFjZVZUYWJsZSo+PiBpbnRlcmZhY2VzOwog
ICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVyZmFjZUluZm8qPigm
d2Via2l0X2FjY2Vzc2libGVfaW50ZXJmYWNlKSwgJnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyB9KTsK
KyAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4o
JndlYmtpdF9jb21wb25lbnRfaW50ZXJmYWNlKSwgJnNfY29tcG9uZW50RnVuY3Rpb25zIH0pOwog
ICAgIG1fYXRzcGkucmVnaXN0ZXJSb290KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKQEAgLTIzNiw2ICsyMzgsNyBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OnNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIp
IGNvbnN0CiAKICAgICBHVmFyaWFudEJ1aWxkZXIgaW50ZXJmYWNlcyA9IEdfVkFSSUFOVF9CVUlM
REVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImFzIikpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZCgmaW50ZXJmYWNlcywgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7Cisg
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZpbnRlcmZhY2VzLCAicyIsIHdlYmtpdF9jb21wb25l
bnRfaW50ZXJmYWNlLm5hbWUpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAi
QGFzIiwgZ192YXJpYW50X25ldygiYXMiLCAmaW50ZXJmYWNlcykpOwogCiAgICAgZ192YXJpYW50
X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgIiIpOwpAQCAtMjUxLDYgKzI1NCw3MiBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqIGJ1aWxk
ZXIpIGNvbnN0CiAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAYXUiLCBnX3Zh
cmlhbnRfYnVpbGRlcl9lbmQoJnN0YXRlcykpOwogfQogCitHREJ1c0ludGVyZmFjZVZUYWJsZSBB
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzX2NvbXBvbmVudEZ1bmN0aW9ucyA9IHsKKyAgICAvLyBt
ZXRob2RfY2FsbAorICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3Qg
Z2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCog
cGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1
c2VyRGF0YSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
ICAgICBhdXRvJiByb290T2JqZWN0ID0gKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb290QXRz
cGkqPih1c2VyRGF0YSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJDb250
YWlucyIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJv
cl9saXRlcmFsKGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX05PVF9TVVBQ
T1JURUQsICIiKTsKKyAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0
QWNjZXNzaWJsZUF0UG9pbnQiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlv
bl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19F
UlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0
aG9kTmFtZSwgIkdldEV4dGVudHMiKSkgeworICAgICAgICAgICAgdWludDMyX3QgY29vcmRpbmF0
ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodSkiLCAmY29v
cmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgYXV0byByZWN0ID0gcm9vdE9iamVjdC5mcmFtZVJl
Y3QoY29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9u
X3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoKGlpaWkpKSIsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0UG9zaXRpb24iKSkgeworICAgICAg
ICAgICAgdWludDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0
KHBhcmFtZXRlcnMsICIodSkiLCAmY29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgYXV0byBy
ZWN0ID0gcm9vdE9iamVjdC5mcmFtZVJlY3QoY29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zhcmlh
bnRfbmV3KCIoKGlpKSkiLCByZWN0LngoKSwgcmVjdC55KCkpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRTaXplIikpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVjdCA9IHJvb3RPYmplY3QuZnJhbWVSZWN0KEF0c3BpOjpDb29yZGluYXRlVHlwZTo6UGFyZW50
Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoKGlpKSkiLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5h
bWUsICJHZXRMYXllciIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3Jl
dHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBBdHNwaTo6Q29tcG9u
ZW50TGF5ZXI6OldpZGdldExheWVyKSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0
aG9kTmFtZSwgIkdldE1ESVpPcmRlciIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIobikiLCAwKSk7
CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdyYWJGb2N1cyIpKQor
ICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcl9saXRlcmFs
KGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsICIi
KTsKKyAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0QWxwaGEiKSkK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGQpIiwgMS4wKSk7CisgICAgICAgIGVsc2UgaWYgKCghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJTZXRFeHRlbnRzIikpIHx8ICFnX3N0cmNtcDAobWV0aG9kTmFt
ZSwgIlNldFBvc2l0aW9uIikgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2V0U2l6ZSIpIHx8
ICFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNjcm9sbFRvIikgfHwgIWdfc3RyY21wMChtZXRob2RO
YW1lLCAiU2Nyb2xsVG9Qb2ludCIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl9lcnJvcl9saXRlcmFsKGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVT
X0VSUk9SX05PVF9TVVBQT1JURUQsICIiKTsKKyAgICB9LAorICAgIC8vIGdldF9wcm9wZXJ0eQor
ICAgIG51bGxwdHIsCisgICAgLy8gc2V0X3Byb3BlcnR5LAorICAgIG51bGxwdHIsCisgICAgLy8g
cGFkZGluZworICAgIG51bGxwdHIKK307CisKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVJvb3RBdHNw
aTo6ZnJhbWVSZWN0KHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25zdAoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxJbnRSZWN0PihbdGhpcywgY29vcmRpbmF0ZVR5cGVd
KCkgLT4gSW50UmVjdCB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgICAgICBhdXRvKiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKTsKKyAgICAgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgICAgICByZXR1cm4geyB9Owor
CisgICAgICAgIGF1dG8gZnJhbWVSZWN0ID0gZnJhbWVWaWV3LT5mcmFtZVJlY3QoKTsKKyAgICAg
ICAgc3dpdGNoIChjb29yZGluYXRlVHlwZSkgeworICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGlu
YXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXM6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3
LT5jb250ZW50c1RvU2NyZWVuKGZyYW1lUmVjdCk7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3Jk
aW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KTsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29v
cmRpbmF0ZVR5cGU6OlBhcmVudENvb3JkaW5hdGVzOgorICAgICAgICAgICAgcmV0dXJuIGZyYW1l
UmVjdDsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5oCmluZGV4
IGVjMTliZTFiZjBhNS4uYzAwZDYyZGRkMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaApAQCAt
MjEsNiArMjEsNyBAQAogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGkuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtNTQsNyArNTUsMTAgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKGNvbnN0IFBhZ2UmLCBB
Y2Nlc3NpYmlsaXR5QXRzcGkmKTsKIAorICAgIEludFJlY3QgZnJhbWVSZWN0KHVpbnQzMl90KSBj
b25zdDsKKwogICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX2FjY2Vzc2libGVGdW5j
dGlvbnM7CisgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfY29tcG9uZW50RnVuY3Rp
b25zOwogCiAgICAgQWNjZXNzaWJpbGl0eUF0c3BpJiBtX2F0c3BpOwogICAgIFdlYWtQdHI8UGFn
ZT4gbV9wYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNw
aS94bWwvQ29tcG9uZW50LnhtbCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
eG1sL0NvbXBvbmVudC54bWwKaW5kZXggOTQwNTZmZjliYjZhLi5hZmVmYWI4ZWIyMzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbXBvbmVudC54
bWwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwvQ29tcG9uZW50
LnhtbApAQCAtNzQsMTIgKzc0LDE0IEBACiAKICAgPG1ldGhvZCBuYW1lPSJTY3JvbGxUbyI+CiAg
ICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJ0eXBlIiB0eXBlPSJ1Ii8+CisgICAgPGFyZyBk
aXJlY3Rpb249Im91dCIgdHlwZT0iYiIvPgogICA8L21ldGhvZD4KIAogICA8bWV0aG9kIG5hbWU9
IlNjcm9sbFRvUG9pbnQiPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0idHlwZSIgdHlw
ZT0idSIvPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ieCIgdHlwZT0iaSIvPgogICAg
IDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ieSIgdHlwZT0iaSIvPgorICAgIDxhcmcgZGlyZWN0
aW9uPSJvdXQiIHR5cGU9ImIiLz4KICAgPC9tZXRob2Q+CiAKIDwvaW50ZXJmYWNlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCA4YzkxMDQ0ZTcyMTguLjA3ZjZmMjVmODljZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTQ5MiwxMCArNDkyLDE1IEBAIHZvaWQgQVhJ
c29sYXRlZE9iamVjdDo6c2V0UGFyZW50KEFYSUQgcGFyZW50KQogICAgIG1fcGFyZW50SUQgPSBw
YXJlbnQ7CiB9CiAKK1JlZlB0cjxBWElzb2xhdGVkT2JqZWN0PiBBWElzb2xhdGVkT2JqZWN0Ojpu
b2RlRm9ySUQoQVhJRCBheElEKSBjb25zdAoreworICAgIHJldHVybiB0cmVlKCktPm5vZGVGb3JJ
RChheElEKTsKK30KKwogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhB
Y2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGls
ZElEIDogbV9jaGlsZHJlbklEcykgewotICAgICAgICBpZiAoYXV0byBjaGlsZCA9IHRyZWUoKS0+
bm9kZUZvcklEKGNoaWxkSUQpKQorICAgICAgICBpZiAoYXV0byBjaGlsZCA9IG5vZGVGb3JJRChj
aGlsZElEKSkKICAgICAgICAgICAgIGNoaWxkLT5kZXRhY2hGcm9tUGFyZW50KCk7CiAgICAgfQog
ICAgIG1fY2hpbGRyZW5JRHMuY2xlYXIoKTsKQEAgLTUyNCw3ICs1MjksNyBAQCBjb25zdCBBWENv
cmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgQVhJc29sYXRlZE9iamVjdDo6
Y2hpbGRyZW4oYm9vbAogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICBtX2NoaWxkcmVuLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbklEcy5zaXplKCkpOwogICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGRJRCA6IG1fY2hpbGRyZW5JRHMpIHsKLSAgICAgICAgaWYgKGF1dG8gY2hp
bGQgPSB0cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKSkKKyAgICAgICAgaWYgKGF1dG8gY2hpbGQg
PSBub2RlRm9ySUQoY2hpbGRJRCkpCiAgICAgICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFw
cGVuZChjaGlsZCk7CiAgICAgfQogICAgIHJldHVybiBtX2NoaWxkcmVuOwpAQCAtNTg2LDcgKzU5
MSw3IEBAIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6Y2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCBjb2x1bW5JbmRleCwgdW5zaWduCiAgICAgICAgIHJldHVybiBJbnZhbGlkQVhJ
RDsKICAgICB9KTsKIAotICAgIHJldHVybiB0cmVlKCktPm5vZGVGb3JJRChjZWxsSUQpLmdldCgp
OworICAgIHJldHVybiBub2RlRm9ySUQoY2VsbElEKS5nZXQoKTsKIH0KIAogdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+JiB0
ZXh0cykgY29uc3QKQEAgLTYyNSw5ICs2MzAsOSBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Omlu
c2VydE1hdGhQYWlycyhWZWN0b3I8c3RkOjpwYWlyPEFYSUQsIEFYSUQ+PiYgaXNvbGF0ZWRQYQog
ewogICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGlzb2xhdGVkUGFpcnMpIHsKICAgICAgICAg
QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXIgcHJlc2NyaXB0UGFpcjsKLSAgICAgICAg
aWYgKGF1dG8gY29yZU9iamVjdCA9IHRyZWUoKS0+bm9kZUZvcklEKHBhaXIuZmlyc3QpLmdldCgp
KQorICAgICAgICBpZiAoYXV0byBjb3JlT2JqZWN0ID0gbm9kZUZvcklEKHBhaXIuZmlyc3QpLmdl
dCgpKQogICAgICAgICAgICAgcHJlc2NyaXB0UGFpci5maXJzdCA9IGNvcmVPYmplY3Q7Ci0gICAg
ICAgIGlmIChhdXRvIGNvcmVPYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChwYWlyLnNlY29uZCku
Z2V0KCkpCisgICAgICAgIGlmIChhdXRvIGNvcmVPYmplY3QgPSBub2RlRm9ySUQocGFpci5zZWNv
bmQpLmdldCgpKQogICAgICAgICAgICAgcHJlc2NyaXB0UGFpci5zZWNvbmQgPSBjb3JlT2JqZWN0
OwogICAgICAgICBwYWlycy5hcHBlbmQocHJlc2NyaXB0UGFpcik7CiAgICAgfQpAQCAtNjUyLDcg
KzY1Nyw3IEBAIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6Zm9jdXNlZFVJRWxlbWVu
dCgpIGNvbnN0CiAgICAgCiBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnBhcmVudE9i
amVjdFVuaWdub3JlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyZWUoKS0+bm9kZUZvcklEKHBh
cmVudCgpKS5nZXQoKTsKKyAgICByZXR1cm4gbm9kZUZvcklEKHBhcmVudCgpKS5nZXQoKTsKIH0K
IAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpzY3JvbGxCYXIoQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQpAQCAtNzgzLDcgKzc4OCw3IEBAIEFYQ29yZU9iamVj
dCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zCiAgICAgICAgIHJldHVybiBJbnZhbGlkQVhJRDsKICAgICB9KTsKIAotICAg
IHJldHVybiB0cmVlKCktPm5vZGVGb3JJRChheElEKS5nZXQoKTsKKyAgICByZXR1cm4gbm9kZUZv
cklEKGF4SUQpLmdldCgpOwogfQogCiBJbnRQb2ludCBBWElzb2xhdGVkT2JqZWN0OjppbnRQb2lu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKQEAgLTgw
Myw3ICs4MDgsNyBAQCBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Om9iamVjdEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZQogICAgICAgICBbXSAoYXV0byYp
IHsgcmV0dXJuIEludmFsaWRBWElEOyB9CiAgICAgKTsKIAotICAgIHJldHVybiB0cmVlKCktPm5v
ZGVGb3JJRChub2RlSUQpLmdldCgpOworICAgIHJldHVybiBub2RlRm9ySUQobm9kZUlEKS5nZXQo
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTk0MSw3ICs5NDYsNyBAQCB2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OmZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZQogICAgIFZlY3RvcjxBWElEPiBjaGlsZElEcyA9IHZlY3RvckF0dHJp
YnV0ZVZhbHVlPEFYSUQ+KHByb3BlcnR5TmFtZSk7CiAgICAgY2hpbGRyZW4ucmVzZXJ2ZUNhcGFj
aXR5KGNoaWxkSURzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDogY2hp
bGRJRHMpIHsKLSAgICAgICAgaWYgKGF1dG8gb2JqZWN0ID0gdHJlZSgpLT5ub2RlRm9ySUQoY2hp
bGRJRCkpCisgICAgICAgIGlmIChhdXRvIG9iamVjdCA9IG5vZGVGb3JJRChjaGlsZElEKSkKICAg
ICAgICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChvYmplY3QpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuaAppbmRleCA0NzExYzE5MDM3ZjUuLjhjMWZlMzVmM2RjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0RldGFjaGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFBhcmVudChBWElE
KTsKKyAgICBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gbm9kZUZvcklEKEFYSUQpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFj
aG1lbnRUeXBlKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA5ODY0Zjk3ZGE0OTUuLjg5NTU0ZTMxMTE0OCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDIxLTEwLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2YgY29tcG9uZW50IGludGVy
ZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBjb21wb25lbnQgaW50ZXJm
YWNlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHkuY3BwOgorICAgICAgICAodGVzdENvbXBvbmVudEhpdFRlc3QpOgorICAg
ICAgICAodGVzdENvbXBvbmVudFNjcm9sbFRvKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIw
MjEtMTAtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdW1dQRV0gUmVtb3ZlIHRoZSBzdXBwb3J0IHRvIGJ1aWxkIHdpdGggaW50ZXJu
YWwgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCmluZGV4IGM4MDJjOTdiOGZm
MC4uZjhlMzVkZWFjOGRkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC03MTMs
NiArNzEzLDk2IEBAIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlU3RhdGVDaGFuZ2VkKEFjY2Vz
c2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGV2ZW50cyA9IHsgfTsKIH0K
IAorc3RhdGljIHZvaWQgdGVzdENvbXBvbmVudEhpdFRlc3QoQWNjZXNzaWJpbGl0eVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBiYXNlRGlyKGdfc3RyZHVwX3ByaW50ZigiZmlsZTovLyVzLyIsIFRlc3Q6
OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSkpOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAg
ICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPGltZyBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIHNyYz0nYmxhbmsuaWNvJyB3aWR0aD01
IGhlaWdodD01PjwvaW1nPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4i
LAorICAgICAgICBiYXNlRGlyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsK
KyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOwor
CisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIu
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
Y291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAgICBhdXRvIGlt
ZyA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVu
dFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQ09N
UE9ORU5UKGltZy5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8QXRzcGlSZWN0PiByZWN0KGF0c3Bp
X2NvbXBvbmVudF9nZXRfZXh0ZW50cyhBVFNQSV9DT01QT05FTlQoaW1nLmdldCgpKSwgQVRTUElf
Q09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHJlY3Qu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocmVjdC0+eCwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQocmVjdC0+eSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocmVjdC0+
d2lkdGgsID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHJlY3QtPmhlaWdodCwgPT0sIDUp
OworICAgIEdVbmlxdWVQdHI8QXRzcGlQb2ludD4gcG9pbnQoYXRzcGlfY29tcG9uZW50X2dldF9w
b3NpdGlvbihBVFNQSV9DT01QT05FTlQoaW1nLmdldCgpKSwgQVRTUElfQ09PUkRfVFlQRV9XSU5E
T1csIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHBvaW50LmdldCgpKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHJlY3QtPngsID09LCBwb2ludC0+eCk7CisgICAgZ19hc3NlcnRfY21w
dWludChyZWN0LT55LCA9PSwgcG9pbnQtPnkpOworICAgIEdVbmlxdWVQdHI8QXRzcGlQb2ludD4g
c2l6ZShhdHNwaV9jb21wb25lbnRfZ2V0X3NpemUoQVRTUElfQ09NUE9ORU5UKGltZy5nZXQoKSks
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHNpemUuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoc2l6ZS0+eCwgPT0sIHJlY3QtPndpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHNpemUtPnksID09LCByZWN0LT5oZWlnaHQpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlf
Y29tcG9uZW50X2NvbnRhaW5zKEFUU1BJX0NPTVBPTkVOVChpbWcuZ2V0KCkpLCByZWN0LT54LCBy
ZWN0LT55LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2ZhbHNlKGF0c3BpX2NvbXBvbmVudF9jb250YWlucyhBVFNQSV9DT01QT05FTlQoaW1nLmdldCgp
KSwgcmVjdC0+eCArIHJlY3QtPndpZHRoLCByZWN0LT55ICsgcmVjdC0+aGVpZ2h0LCBBVFNQSV9D
T09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGF1dG8gYWNjZXNzaWJsZSA9IGFkb3B0
R1JlZihhdHNwaV9jb21wb25lbnRfZ2V0X2FjY2Vzc2libGVfYXRfcG9pbnQoQVRTUElfQ09NUE9O
RU5UKGRvY3VtZW50V2ViLmdldCgpKSwgcmVjdC0+eCwgcmVjdC0+eSwgQVRTUElfQ09PUkRfVFlQ
RV9XSU5ET1csIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKGFjY2Vzc2libGUuZ2V0KCkg
PT0gaW1nLmdldCgpKTsKKyAgICBhY2Nlc3NpYmxlID0gYWRvcHRHUmVmKGF0c3BpX2NvbXBvbmVu
dF9nZXRfYWNjZXNzaWJsZV9hdF9wb2ludChBVFNQSV9DT01QT05FTlQoZG9jdW1lbnRXZWIuZ2V0
KCkpLCByZWN0LT54ICsgcmVjdC0+d2lkdGgsIHJlY3QtPnkgKyByZWN0LT5oZWlnaHQsIEFUU1BJ
X0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhY2Nlc3Np
YmxlLmdldCgpID09IGRvY3VtZW50V2ViLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENv
bXBvbmVudFNjcm9sbFRvKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPnNob3dJbldpbmRvdyg2NDAsIDQ4MCk7CisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBiYXNlRGlyKGdfc3RyZHVwX3ByaW50ZigiZmlsZTovLyVzLyIsIFRlc3Q6OmdldFJlc291cmNl
c0RpcigpLmRhdGEoKSkpOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+Igor
ICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPHA+VG9wPC9wPiIKKyAgICAgICAgIiAg
ICA8aW1nIHNyYz0nYmxhbmsuaWNvJyB3aWR0aD0yMDAgaGVpZ2h0PTYwMD48L2ltZz4iCisgICAg
ICAgICIgICAgPHA+Qm90dG9tPC9wPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwv
aHRtbD4iLAorICAgICAgICBiYXNlRGlyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRp
b24oKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQo
KSkpOworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0
QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1l
bnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMyk7CisKKyAgICBh
dXRvIHRvcCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChk
b2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElf
SVNfQ09NUE9ORU5UKHRvcC5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8QXRzcGlQb2ludD4gdG9w
UG9zaXRpb25CZWZvcmVTY3JvbGxpbmcoYXRzcGlfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVFNQ
SV9DT01QT05FTlQodG9wLmdldCgpKSwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodG9wUG9zaXRpb25CZWZvcmVTY3JvbGxpbmctPnksID4s
IDApOworICAgIGdfYXNzZXJ0X2NtcGludCh0b3BQb3NpdGlvbkJlZm9yZVNjcm9sbGluZy0+eSwg
PCwgNDgwKTsKKworICAgIGF1dG8gYm90dG9tID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAyLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19DT01QT05FTlQoYm90dG9tLmdldCgpKSk7CisgICAgR1Vu
aXF1ZVB0cjxBdHNwaVBvaW50PiBib3R0b21Qb3NpdGlvbkJlZm9yZVNjcm9sbGluZyhhdHNwaV9j
b21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUU1BJX0NPTVBPTkVOVChib3R0b20uZ2V0KCkpLCBBVFNQ
SV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGludChib3R0
b21Qb3NpdGlvbkJlZm9yZVNjcm9sbGluZy0+eSwgPiwgNDgwKTsKKworICAgIGF0c3BpX2NvbXBv
bmVudF9zY3JvbGxfdG8oQVRTUElfQ09NUE9ORU5UKGJvdHRvbS5nZXQoKSksIEFUU1BJX1NDUk9M
TF9BTllXSEVSRSwgbnVsbHB0cik7CisKKyAgICBHVW5pcXVlUHRyPEF0c3BpUG9pbnQ+IHRvcFBv
c2l0aW9uQWZ0ZXJTY3JvbGxpbmcoYXRzcGlfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVFNQSV9D
T01QT05FTlQodG9wLmdldCgpKSwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodG9wUG9zaXRpb25BZnRlclNjcm9sbGluZy0+eSwgPCwgMCk7
CisgICAgR1VuaXF1ZVB0cjxBdHNwaVBvaW50PiBib3R0b21Qb3NpdGlvbkFmdGVyU2Nyb2xsaW5n
KGF0c3BpX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRTUElfQ09NUE9ORU5UKGJvdHRvbS5nZXQo
KSksIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGJvdHRvbVBvc2l0aW9uQWZ0ZXJTY3JvbGxpbmctPnksIDwsIDQ4MCk7CisKKyAgICBhdHNw
aV9jb21wb25lbnRfc2Nyb2xsX3RvX3BvaW50KEFUU1BJX0NPTVBPTkVOVCh0b3AuZ2V0KCkpLCBB
VFNQSV9DT09SRF9UWVBFX1dJTkRPVywgdG9wUG9zaXRpb25CZWZvcmVTY3JvbGxpbmctPngsIHRv
cFBvc2l0aW9uQmVmb3JlU2Nyb2xsaW5nLT55LCBudWxscHRyKTsKKyAgICB0b3BQb3NpdGlvbkFm
dGVyU2Nyb2xsaW5nLnJlc2V0KGF0c3BpX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRTUElfQ09N
UE9ORU5UKHRvcC5nZXQoKSksIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRvcFBvc2l0aW9uQmVmb3JlU2Nyb2xsaW5nLT54LCA9PSwgdG9w
UG9zaXRpb25BZnRlclNjcm9sbGluZy0+eCk7CisgICAgZ19hc3NlcnRfY21waW50KHRvcFBvc2l0
aW9uQmVmb3JlU2Nyb2xsaW5nLT55LCA9PSwgdG9wUG9zaXRpb25BZnRlclNjcm9sbGluZy0+eSk7
Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJX
ZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2libGUvYmFzaWMtaGllcmFyY2h5IiwgdGVzdEFj
Y2Vzc2libGVCYXNpY0hpZXJhcmNoeSk7CkBAIC03MjEsNiArODExLDggQEAgdm9pZCBiZWZvcmVB
bGwoKQogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAi
YWNjZXNzaWJsZS9hdHRyaWJ1dGVzIiwgdGVzdEFjY2Vzc2libGVBdHRyaWJ1dGVzKTsKICAgICBB
Y2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2libGUv
c3RhdGUiLCB0ZXN0QWNjZXNzaWJsZVN0YXRlKTsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRk
KCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2libGUvc3RhdGUtY2hhbmdlZCIsIHRlc3RB
Y2Nlc3NpYmxlU3RhdGVDaGFuZ2VkKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJL
aXRBY2Nlc3NpYmlsaXR5IiwgImNvbXBvbmVudC9oaXQtdGVzdCIsIHRlc3RDb21wb25lbnRIaXRU
ZXN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5Iiwg
ImNvbXBvbmVudC9zY3JvbGwtdG8iLCB0ZXN0Q29tcG9uZW50U2Nyb2xsVG8pOwogfQogCiB2b2lk
IGFmdGVyQWxsKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441055</attachid>
            <date>2021-10-13 04:43:09 -0700</date>
            <delta_ts>2021-10-18 04:38:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-component.diff</filename>
            <type>text/plain</type>
            <size>31172</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZTMxZWRmNjU2ZDguLjhiY2EzOTI2Nzk0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMwIEBACisyMDIxLTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2Yg
Y29tcG9uZW50IGludGVyZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50ZXJmYWNl
c0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWls
ZEludGVyZmFjZXMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eU9iamVjdENvbXBvbmVudEF0c3BpLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmhpdFRlc3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplbGVtZW50UmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmZvY3VzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6b3BhY2l0eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRvTWFr
ZVZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpzY3JvbGxUb1BvaW50IGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3Bp
L0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJvb3RBdHNwaTo6cmVnaXN0ZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OmZyYW1lUmVjdCBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmg6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hdHNwaS94bWwvQ29tcG9uZW50LnhtbDoKKwogMjAyMS0xMC0xMyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVg6IEJ1aWxkIHdp
dGggaXNvbGF0ZWQgdHJlZSBlbmFibGUgaXMgYnJva2VuIHNpbmNlIHIyODQwNzUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKaW5kZXggM2NkZjNlODFlZTM1Li42MDM3MzYzNWMxMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNH
VEsudHh0CkBAIC00MSw2ICs0MSw3IEBAIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcAogCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAK
IGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29tcG9uZW50QXRzcGkuY3BwCiBhY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5
L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCmlu
ZGV4IGVhNzYyN2I5ZWU1MS4uMGVhYTI1YjE5YTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5o
CkBAIC0yMzEsNiArMjMxLDMzIEBAIGVudW0gUmVsYXRpb24gewogICAgIExhc3REZWZpbmVkUmVs
YXRpb24sCiB9OwogCitlbnVtIENvb3JkaW5hdGVUeXBlIHsKKyAgICBTY3JlZW5Db29yZGluYXRl
cywKKyAgICBXaW5kb3dDb29yZGluYXRlcywKKyAgICBQYXJlbnRDb29yZGluYXRlcywKK307CisK
K2VudW0gQ29tcG9uZW50TGF5ZXIgeworICAgIEludmFsaWRMYXllciwKKyAgICBCYWNrZ3JvdW5k
TGF5ZXIsCisgICAgQ2FudmFzTGF5ZXIsCisgICAgV2lkZ2V0TGF5ZXIsCisgICAgTWRpTGF5ZXIs
CisgICAgUG9wdXBMYXllciwKKyAgICBPdmVybGF5TGF5ZXIsCisgICAgV2luZG93TGF5ZXIsCit9
OworCitlbnVtIFNjcm9sbFR5cGUgeworICAgIFRvcExlZnQsCisgICAgQm90dG9tUmlnaHQsCisg
ICAgVG9wRWRnZSwKKyAgICBCb3R0b21FZGdlLAorICAgIExlZnRFZGdlLAorICAgIFJpZ2h0RWRn
ZSwKKyAgICBBbnl3aGVyZQorfTsKKwogfSAvLyBuYW1lc3BhY2UgQXRzcGkKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwCmluZGV4IGRjNTA2MmY1
OGIxOC4uMjRmZTVkNTMzN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwCkBAIC00
MSw3ICs0MSw3IEBAIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6Y3JlYXRlKEFYQ29yZU9iamVjdCogY29yCiAKIE9wdGlvblNldDxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZT4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpp
bnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYgY29yZU9iamVjdCkKIHsKLSAgICBPcHRp
b25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzID0geyBJbnRlcmZhY2U6OkFjY2Vzc2libGUgfTsK
KyAgICBPcHRpb25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzID0geyBJbnRlcmZhY2U6OkFjY2Vz
c2libGUsIEludGVyZmFjZTo6Q29tcG9uZW50IH07CiAKICAgICByZXR1cm4gaW50ZXJmYWNlczsK
IH0KQEAgLTQyNSw2ICs0MjUsOCBAQCBjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6cGF0aCgpCiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0RCdXNJbnRlcmZhY2VJbmZv
KiwgR0RCdXNJbnRlcmZhY2VWVGFibGUqPj4gaW50ZXJmYWNlczsKICAgICAgICAgaWYgKG1faW50
ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkFjY2Vzc2libGUpKQogICAgICAgICAgICAgaW50
ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5mbyo+KCZ3ZWJraXRf
YWNjZXNzaWJsZV9pbnRlcmZhY2UpLCAmc19hY2Nlc3NpYmxlRnVuY3Rpb25zIH0pOworICAgICAg
ICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6Q29tcG9uZW50KSkKKyAgICAg
ICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVyZmFjZUluZm8q
Pigmd2Via2l0X2NvbXBvbmVudF9pbnRlcmZhY2UpLCAmc19jb21wb25lbnRGdW5jdGlvbnMgfSk7
CiAgICAgICAgIG1fcGF0aCA9IGF0c3BpUm9vdC0+YXRzcGkoKS5yZWdpc3Rlck9iamVjdCgqdGhp
cywgV1RGTW92ZShpbnRlcmZhY2VzKSk7CiAgICAgfQogCkBAIC0xMDM2LDYgKzEwMzgsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZhY2VzKEdWYXJpYW50QnVp
bGRlciogYnVpbGRlcikgY29uc3QKICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpBY2Nlc3NpYmxlKSkK
ICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgd2Via2l0X2FjY2Vz
c2libGVfaW50ZXJmYWNlLm5hbWUpOworICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50
ZXJmYWNlOjpDb21wb25lbnQpKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRl
ciwgInMiLCB3ZWJraXRfY29tcG9uZW50X2ludGVyZmFjZS5uYW1lKTsKIH0KIAogdm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0Fj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAppbmRleCA1NjYzMGVlYWM1YjMuLjU4OTA1
YTI4MzgwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCkBAIC0yMiw2ICsyMiw3IEBACiAj
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5QXRzcGkuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CkBAIC00Miw3ICs0Myw4
IEBAIHB1YmxpYzoKICAgICB+QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKCkgPSBkZWZhdWx0Owog
CiAgICAgZW51bSBjbGFzcyBJbnRlcmZhY2UgOiB1aW50OF90IHsKLSAgICAgICAgQWNjZXNzaWJs
ZSA9IDEgPDwgMAorICAgICAgICBBY2Nlc3NpYmxlID0gMSA8PCAwLAorICAgICAgICBDb21wb25l
bnQgPSAxIDw8IDEKICAgICB9OwogICAgIGNvbnN0IE9wdGlvblNldDxJbnRlcmZhY2U+JiBpbnRl
cmZhY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmZhY2VzOyB9CiAKQEAgLTc1LDYgKzc3LDEx
IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29u
c3Q7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKIAorICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaSogaGl0VGVzdChjb25zdCBJbnRQb2ludCYsIHVpbnQzMl90KSBjb25zdDsKKyAgICBJ
bnRSZWN0IGVsZW1lbnRSZWN0KHVpbnQzMl90KSBjb25zdDsKKyAgICB2b2lkIHNjcm9sbFRvTWFr
ZVZpc2libGUodWludDMyX3QpIGNvbnN0OworICAgIHZvaWQgc2Nyb2xsVG9Qb2ludChjb25zdCBJ
bnRQb2ludCYsIHVpbnQzMl90KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGkoQVhDb3JlT2JqZWN0Kik7CiAKQEAgLTg5LDkgKzk2LDEzIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBidWlsZFJlbGF0aW9uU2V0KEdWYXJpYW50QnVpbGRlciopIGNv
bnN0OwogICAgIHZvaWQgYnVpbGRJbnRlcmZhY2VzKEdWYXJpYW50QnVpbGRlciopIGNvbnN0Owog
CisgICAgYm9vbCBmb2N1cygpIGNvbnN0OworICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdDsKKwog
ICAgIHN0YXRpYyBPcHRpb25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29y
ZU9iamVjdCYpOwogCiAgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfYWNjZXNzaWJs
ZUZ1bmN0aW9uczsKKyAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jb21wb25lbnRG
dW5jdGlvbnM7CiAKICAgICBBWENvcmVPYmplY3QqIG1fYXhPYmplY3QgeyBudWxscHRyIH07CiAg
ICAgQVhDb3JlT2JqZWN0KiBtX2NvcmVPYmplY3QgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21w
b25lbnRBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5mYTNlMTk4NWZmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21wb25lbnRB
dHNwaS5jcHAKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaS5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKKyNp
bmNsdWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3Bp
RW51bXMuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19jb21wb25lbnRGdW5jdGlvbnMgPSB7CisgICAg
Ly8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNv
bnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1Zhcmlh
bnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKKyAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJD
b250YWlucyIpKSB7CisgICAgICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAgICAgIHVpbnQzMl90
IGNvb3JkaW5hdGVUeXBlOworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAi
KGlpdSkiLCAmeCwgJnksICZjb29yZGluYXRlVHlwZSk7CisgICAgICAgICAgICBnX2RidXNfbWV0
aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihi
KSIsICEhYXRzcGlPYmplY3QtPmhpdFRlc3QoeyB4LCB5IH0sIGNvb3JkaW5hdGVUeXBlKSkpOwor
ICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEFjY2Vzc2libGVB
dFBvaW50IikpIHsKKyAgICAgICAgICAgIGludCB4LCB5OworICAgICAgICAgICAgdWludDMyX3Qg
Y29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIo
aWl1KSIsICZ4LCAmeSwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGF1dG8qIHdyYXBw
ZXIgPSBhdHNwaU9iamVjdC0+aGl0VGVzdCh7IHgsIHkgfSwgY29vcmRpbmF0ZVR5cGUpOworICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBnX3ZhcmlhbnRfbmV3KCIoQChzbykpIiwgd3JhcHBlciA/IHdyYXBwZXItPnJlZmVyZW5jZSgp
IDogYXRzcGlPYmplY3QtPnJvb3QoKS0+YXRzcGkoKS5udWxsUmVmZXJlbmNlKCkpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRFeHRlbnRzIikpIHsKKyAg
ICAgICAgICAgIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlOworICAgICAgICAgICAgZ192YXJpYW50
X2dldChwYXJhbWV0ZXJzLCAiKHUpIiwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGF1
dG8gcmVjdCA9IGF0c3BpT2JqZWN0LT5lbGVtZW50UmVjdChjb29yZGluYXRlVHlwZSk7CisgICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIigoaWlpaSkpIiwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJHZXRQb3NpdGlvbiIpKSB7CisgICAgICAgICAgICB1aW50MzJfdCBjb29yZGluYXRl
VHlwZTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih1KSIsICZjb29y
ZGluYXRlVHlwZSk7CisgICAgICAgICAgICBhdXRvIHJlY3QgPSBhdHNwaU9iamVjdC0+ZWxlbWVu
dFJlY3QoY29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaWkpIiwgcmVjdC54
KCksIHJlY3QueSgpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1l
LCAiR2V0U2l6ZSIpKSB7CisgICAgICAgICAgICBhdXRvIHJlY3QgPSBhdHNwaU9iamVjdC0+ZWxl
bWVudFJlY3QoQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpQYXJlbnRDb29yZGluYXRlcyk7CisgICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIihpaSkiLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRMYXllciIpKQorICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBBdHNwaTo6Q29tcG9uZW50TGF5ZXI6OldpZGdldExheWVy
KSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldE1ESVpPcmRl
ciIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIobikiLCAwKSk7CisgICAgICAgIGVsc2UgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIkdyYWJGb2N1cyIpKQorICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIo
YikiLCBhdHNwaU9iamVjdC0+Zm9jdXMoKSkpOworICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAw
KG1ldGhvZE5hbWUsICJHZXRBbHBoYSIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoZCkiLCBhdHNw
aU9iamVjdC0+b3BhY2l0eSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9k
TmFtZSwgIlNjcm9sbFRvIikpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNjcm9sbFR5cGU7Cisg
ICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodSkiLCAmc2Nyb2xsVHlwZSk7
CisgICAgICAgICAgICBhdHNwaU9iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZShzY3JvbGxUeXBl
KTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52
b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgVFJVRSkpOworICAgICAgICB9IGVsc2UgaWYg
KCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNjcm9sbFRvUG9pbnQiKSkgeworICAgICAgICAgICAg
aW50IHgsIHk7CisgICAgICAgICAgICB1aW50MzJfdCBjb29yZGluYXRlVHlwZTsKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih1aWkpIiwgJmNvb3JkaW5hdGVUeXBlLCAm
eCwgJnkpOworICAgICAgICAgICAgYXRzcGlPYmplY3QtPnNjcm9sbFRvUG9pbnQoeyB4LCB5IH0s
IGNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9y
ZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgVFJVRSkpOworICAg
ICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNldEV4dGVudHMiKSB8fCAh
Z19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRQb3NpdGlvbiIpIHx8ICFnX3N0cmNtcDAobWV0aG9k
TmFtZSwgIlNldFNpemUiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9y
ZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJP
Ul9OT1RfU1VQUE9SVEVELCAiIik7CisgICAgfSwKKyAgICAvLyBnZXRfcHJvcGVydHkKKyAgICBu
dWxscHRyLAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRyLAorICAgIC8vIHBhZGRp
bmcKKyAgICBudWxscHRyCit9OworCitBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6aGl0VGVzdChjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90
IGNvb3JkaW5hdGVUeXBlKSBjb25zdAoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4oW3RoaXMs
ICZwb2ludCwgY29vcmRpbmF0ZVR5cGVdKCkgLT4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiB7
CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgSW50UG9pbnQgY29udmVydGVkUG9pbnQg
PSBwb2ludDsKKyAgICAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fY29yZU9iamVjdC0+ZG9j
dW1lbnRGcmFtZVZpZXcoKSkgeworICAgICAgICAgICAgc3dpdGNoIChjb29yZGluYXRlVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5h
dGVzOgorICAgICAgICAgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gZnJhbWVWaWV3LT5zY3JlZW5U
b0NvbnRlbnRzKHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKKyAgICAgICAgICAg
ICAgICBjb252ZXJ0ZWRQb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhwb2ludCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGlu
YXRlVHlwZTo6UGFyZW50Q29vcmRpbmF0ZXM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUNoaWxk
cmVuSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvcmVPYmplY3QgPSBtX2NvcmVP
YmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnZlcnRlZFBvaW50KSkKKyAgICAgICAgICAg
IHJldHVybiBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfSk7Cit9CisKK0ludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplbGVtZW50
UmVjdCh1aW50MzJfdCBjb29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEludFJlY3Q+KFt0aGlzLCBjb29y
ZGluYXRlVHlwZV0oKSAtPiBJbnRSZWN0IHsKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKKyAg
ICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAg
aWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIGF1
dG8gcmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1fY29yZU9iamVjdC0+ZWxlbWVudFJlY3QoKSk7Cisg
ICAgICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXco
KTsKKyAgICAgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgICAgICByZXR1cm4gcmVjdDsKKwor
ICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7CisgICAgICAgIGNhc2UgQXRzcGk6OkNv
b3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlczoKKyAgICAgICAgICAgIHJldHVybiBmcmFt
ZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVjdCk7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3Jk
aW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5h
dGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKKyAgICAgICAgICAgIHJldHVybiByZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9KTsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmZvY3VzKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYXhPYmpl
Y3QtPnNldEZvY3VzZWQodHJ1ZSk7CisgICAgbV9heE9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CisgICAgcmV0dXJuIG1fYXhPYmplY3QtPmlzRm9jdXNlZCgpOworfQorCitmbG9hdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6Om9wYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8ZmxvYXQ+KFt0aGlzXSgpIC0+
IGZsb2F0IHsKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIG1fY29yZU9i
amVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3Qp
CisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBt
X2NvcmVPYmplY3QtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0
eWxlKCkub3BhY2l0eSgpOworCisgICAgICAgIHJldHVybiAxOworICAgIH0pOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9NYWtlVmlzaWJsZSh1aW50MzJfdCBz
Y3JvbGxUeXBlKSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9u
TWFpblRocmVhZChbdGhpcywgc2Nyb2xsVHlwZV0geworICAgICAgICBpZiAobV9jb3JlT2JqZWN0
KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
ICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBT
Y3JvbGxBbGlnbm1lbnQgYWxpZ25YOworICAgICAgICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25ZOwor
ICAgICAgICBzd2l0Y2ggKHNjcm9sbFR5cGUpIHsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xs
VHlwZTo6VG9wTGVmdDoKKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25MZWZ0QWx3YXlzOworICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGln
blRvcEFsd2F5czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0c3BpOjpTY3Jv
bGxUeXBlOjpCb3R0b21SaWdodDoKKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25SaWdodEFsd2F5czsKKyAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Cb3R0b21BbHdheXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
dHNwaTo6U2Nyb2xsVHlwZTo6VG9wRWRnZToKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlw
ZTo6Qm90dG9tRWRnZToKKyAgICAgICAgICAgIC8vIEFsaWduIHRvIGEgcGFydGljdWxhciBlZGdl
IGlzIG5vdCBzdXBwb3J0ZWQsIGl0J3MgYWx3YXlzIHRoZSBjbG9zZXN0IGVkZ2UuCisgICAgICAg
ICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAg
ICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6TGVmdEVk
Z2U6CisgICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlJpZ2h0RWRnZToKKyAgICAgICAg
ICAgIC8vIEFsaWduIHRvIGEgcGFydGljdWxhciBlZGdlIGlzIG5vdCBzdXBwb3J0ZWQsIGl0J3Mg
YWx3YXlzIHRoZSBjbG9zZXN0IGVkZ2UuCisgICAgICAgICAgICBhbGlnblggPSBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CisgICAgICAgICAgICBhbGlnblkgPSBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6QW55d2hlcmU6CisgICAgICAgICAgICBhbGlnblgg
PSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBhbGln
blkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29yZU9iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZSh7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgYWxpZ25YLCBhbGlnblksIFNob3Vs
ZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50LCB1aW50MzJfdCBjb29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
OjpwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoW3RoaXMsIHBvaW50LCBjb29yZGluYXRlVHlw
ZV0geworICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0
LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbnRQb2ludCBjb252ZXJ0ZWRQb2ludChwb2lu
dCk7CisgICAgICAgIGlmIChjb29yZGluYXRlVHlwZSA9PSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6
OlNjcmVlbkNvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0g
bV9jb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpKQorICAgICAgICAgICAgICAgIGNvbnZl
cnRlZFBvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lVmlldy0+c2NyZWVu
VG9Db250ZW50cyhwb2ludCkpOworICAgICAgICB9CisgICAgICAgIG1fY29yZU9iamVjdC0+c2Ny
b2xsVG9HbG9iYWxQb2ludChjb252ZXJ0ZWRQb2ludCk7CisgICAgfSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0Uo
QVRTUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0Fj
Y2Vzc2liaWxpdHlSb290QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAppbmRleCA0MTQzNWFjZDBjYWUuLjZkNjFm
NjI2ZjJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCkBAIC0xMTgsNiArMTE4LDcgQEAg
R0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c19hY2Nlc3NpYmxl
RnVuY3Rpb25zID0gewogICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZB
UklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhcyIpKTsKIAogICAgICAgICAgICAg
Z192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAicyIsIHdlYmtpdF9hY2Nlc3NpYmxlX2lu
dGVyZmFjZS5uYW1lKTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRl
ciwgInMiLCB3ZWJraXRfY29tcG9uZW50X2ludGVyZmFjZS5uYW1lKTsKICAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50
X25ldygiKGFzKSIsICZidWlsZGVyKSk7CiAgICAgICAgIH0KICAgICB9LApAQCAtMTU2LDYgKzE1
Nyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6cmVnaXN0ZXJPYmplY3QoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmCiAgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0RCdXNJbnRlcmZhY2VJbmZvKiwgR0RC
dXNJbnRlcmZhY2VWVGFibGUqPj4gaW50ZXJmYWNlczsKICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7
IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF9hY2Nlc3NpYmxlX2ludGVy
ZmFjZSksICZzX2FjY2Vzc2libGVGdW5jdGlvbnMgfSk7CisgICAgaW50ZXJmYWNlcy5hcHBlbmQo
eyBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5mbyo+KCZ3ZWJraXRfY29tcG9uZW50X2ludGVy
ZmFjZSksICZzX2NvbXBvbmVudEZ1bmN0aW9ucyB9KTsKICAgICBtX2F0c3BpLnJlZ2lzdGVyUm9v
dCgqdGhpcywgV1RGTW92ZShpbnRlcmZhY2VzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCkBAIC0yMzYsNiArMjM4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpz
ZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdAogCiAgICAgR1ZhcmlhbnRC
dWlsZGVyIGludGVyZmFjZXMgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBF
KCJhcyIpKTsKICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmludGVyZmFjZXMsICJzIiwgd2Vi
a2l0X2FjY2Vzc2libGVfaW50ZXJmYWNlLm5hbWUpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZCgmaW50ZXJmYWNlcywgInMiLCB3ZWJraXRfY29tcG9uZW50X2ludGVyZmFjZS5uYW1lKTsKICAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIkBhcyIsIGdfdmFyaWFudF9uZXcoImFz
IiwgJmludGVyZmFjZXMpKTsKIAogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAi
cyIsICIiKTsKQEAgLTI1MSw2ICsyNTQsNzIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
OjpzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdAogICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChidWlsZGVyLCAiQGF1IiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZzdGF0
ZXMpKTsKIH0KIAorR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6
c19jb21wb25lbnRGdW5jdGlvbnMgPSB7CisgICAgLy8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1
c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBj
b25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9k
SW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgYXV0byYgcm9vdE9iamVjdCA9
ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4odXNlckRhdGEpOworICAgICAg
ICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiQ29udGFpbnMiKSkKKyAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0aW9uLCBH
X0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAgICAgIGVs
c2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEFjY2Vzc2libGVBdFBvaW50IikpCisg
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9yX2xpdGVyYWwo
aW52b2NhdGlvbiwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfTk9UX1NVUFBPUlRFRCwgIiIp
OworICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRFeHRlbnRzIikp
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlOworICAgICAgICAgICAgZ192
YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHUpIiwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAg
ICAgIGF1dG8gcmVjdCA9IHJvb3RPYmplY3QuZnJhbWVSZWN0KGNvb3JkaW5hdGVUeXBlKTsKKyAg
ICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKChpaWlpKSkiLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0
aG9kTmFtZSwgIkdldFBvc2l0aW9uIikpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGNvb3JkaW5h
dGVUeXBlOworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHUpIiwgJmNv
b3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gcmVjdCA9IHJvb3RPYmplY3QuZnJhbWVS
ZWN0KGNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlv
bl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKChpaSkpIiwgcmVjdC54
KCksIHJlY3QueSgpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1l
LCAiR2V0U2l6ZSIpKSB7CisgICAgICAgICAgICBhdXRvIHJlY3QgPSByb290T2JqZWN0LmZyYW1l
UmVjdChBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlBhcmVudENvb3JkaW5hdGVzKTsKKyAgICAgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192
YXJpYW50X25ldygiKChpaSkpIiwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TGF5ZXIiKSkKKyAgICAg
ICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwg
Z192YXJpYW50X25ldygiKHUpIiwgQXRzcGk6OkNvbXBvbmVudExheWVyOjpXaWRnZXRMYXllcikp
OworICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRNRElaT3JkZXIi
KSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52
b2NhdGlvbiwgZ192YXJpYW50X25ldygiKG4pIiwgMCkpOworICAgICAgICBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHcmFiRm9jdXMiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRo
b2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0aW9uLCBHX0RCVVNfRVJS
T1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAgICAgIGVsc2UgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEFscGhhIikpCisgICAgICAgICAgICBnX2RidXNfbWV0
aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihk
KSIsIDEuMCkpOworICAgICAgICBlbHNlIGlmICgoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2V0
RXh0ZW50cyIpKSB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRQb3NpdGlvbiIpIHx8ICFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIlNldFNpemUiKSB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUs
ICJTY3JvbGxUbyIpIHx8ICFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNjcm9sbFRvUG9pbnQiKSkK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJh
bChpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAi
Iik7CisgICAgfSwKKyAgICAvLyBnZXRfcHJvcGVydHkKKyAgICBudWxscHRyLAorICAgIC8vIHNl
dF9wcm9wZXJ0eSwKKyAgICBudWxscHRyLAorICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9
OworCitJbnRSZWN0IEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmZyYW1lUmVjdCh1aW50MzJfdCBj
b29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8SW50UmVjdD4oW3RoaXMsIGNvb3JkaW5hdGVUeXBlXSgpIC0+IEludFJlY3QgeworICAgICAg
ICBpZiAoIW1fcGFnZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byog
ZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgICAgIGlmICghZnJh
bWVWaWV3KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBhdXRvIGZyYW1lUmVj
dCA9IGZyYW1lVmlldy0+ZnJhbWVSZWN0KCk7CisgICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5
cGUpIHsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5h
dGVzOgorICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihmcmFt
ZVJlY3QpOworICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRp
bmF0ZXM6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZy
YW1lUmVjdCk7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpQYXJlbnRDb29y
ZGluYXRlczoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVJlY3Q7CisgICAgICAgIH0KKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNF
KEFUU1BJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaAppbmRleCBmNjg2YWY5ODY1MjUuLmEyNzVmM2Zk
ZTQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5Um9vdEF0c3BpLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2lmIEVO
QUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eUF0c3BpLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KQEAgLTU0LDcgKzU1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQWNj
ZXNzaWJpbGl0eVJvb3RBdHNwaShQYWdlJiwgQWNjZXNzaWJpbGl0eUF0c3BpJik7CiAKKyAgICBJ
bnRSZWN0IGZyYW1lUmVjdCh1aW50MzJfdCkgY29uc3Q7CisKICAgICBzdGF0aWMgR0RCdXNJbnRl
cmZhY2VWVGFibGUgc19hY2Nlc3NpYmxlRnVuY3Rpb25zOworICAgIHN0YXRpYyBHREJ1c0ludGVy
ZmFjZVZUYWJsZSBzX2NvbXBvbmVudEZ1bmN0aW9uczsKIAogICAgIEFjY2Vzc2liaWxpdHlBdHNw
aSYgbV9hdHNwaTsKICAgICBXZWFrUHRyPFBhZ2U+IG1fcGFnZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbXBvbmVudC54bWwgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL3htbC9Db21wb25lbnQueG1sCmluZGV4IDk0MDU2
ZmY5YmI2YS4uYWZlZmFiOGViMjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL3htbC9Db21wb25lbnQueG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkveG1sL0NvbXBvbmVudC54bWwKQEAgLTc0LDEyICs3NCwxNCBAQAogCiAg
IDxtZXRob2QgbmFtZT0iU2Nyb2xsVG8iPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0i
dHlwZSIgdHlwZT0idSIvPgorICAgIDxhcmcgZGlyZWN0aW9uPSJvdXQiIHR5cGU9ImIiLz4KICAg
PC9tZXRob2Q+CiAKICAgPG1ldGhvZCBuYW1lPSJTY3JvbGxUb1BvaW50Ij4KICAgICA8YXJnIGRp
cmVjdGlvbj0iaW4iIG5hbWU9InR5cGUiIHR5cGU9InUiLz4KICAgICA8YXJnIGRpcmVjdGlvbj0i
aW4iIG5hbWU9IngiIHR5cGU9ImkiLz4KICAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9Inki
IHR5cGU9ImkiLz4KKyAgICA8YXJnIGRpcmVjdGlvbj0ib3V0IiB0eXBlPSJiIi8+CiAgIDwvbWV0
aG9kPgogCiA8L2ludGVyZmFjZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA4N2FhM2M3ODUyYWUuLjE1ZTQ5OGVkZjdjNyAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDIxLTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2YgY29tcG9uZW50IGludGVy
ZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBjb21wb25lbnQgaW50ZXJm
YWNlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHkuY3BwOgorICAgICAgICAodGVzdENvbXBvbmVudEhpdFRlc3QpOgorICAg
ICAgICAodGVzdENvbXBvbmVudFNjcm9sbFRvKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIw
MjEtMTAtMTIgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtBcHBsZVNpbGljb25dIFN1cHBvcnQgbmF0aXZlIHNpbXVsYXRvciB0ZXN0aW5nCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNz
aWJpbGl0eS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2Vi
S2l0QWNjZXNzaWJpbGl0eS5jcHAKaW5kZXggYzgwMmM5N2I4ZmYwLi5mOGUzNWRlYWM4ZGQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKQEAgLTcxMyw2ICs3MTMsOTYgQEAgc3RhdGlj
IHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgZXZlbnRzID0geyB9OwogfQogCitzdGF0aWMgdm9pZCB0ZXN0
Q29tcG9uZW50SGl0VGVzdChBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VE
aXIoZ19zdHJkdXBfcHJpbnRmKCJmaWxlOi8vJXMvIiwgVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCku
ZGF0YSgpKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAg
ICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDoxOyB0b3A6MScgc3JjPSdibGFuay5pY28nIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+Igor
ICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIGJhc2VEaXIu
Z2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgYXV0byB0
ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0X3RydWUo
QVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRvY3VtZW50
V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5n
ZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKworICAgIGF1dG8gaW1nID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19DT01QT05FTlQoaW1nLmdldCgpKSk7
CisgICAgR1VuaXF1ZVB0cjxBdHNwaVJlY3Q+IHJlY3QoYXRzcGlfY29tcG9uZW50X2dldF9leHRl
bnRzKEFUU1BJX0NPTVBPTkVOVChpbWcuZ2V0KCkpLCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwocmVjdC5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfY21wdWludChyZWN0LT54LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wdWludChyZWN0LT55
LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wdWludChyZWN0LT53aWR0aCwgPT0sIDUpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQocmVjdC0+aGVpZ2h0LCA9PSwgNSk7CisgICAgR1VuaXF1ZVB0cjxB
dHNwaVBvaW50PiBwb2ludChhdHNwaV9jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUU1BJX0NPTVBP
TkVOVChpbWcuZ2V0KCkpLCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAg
IGdfYXNzZXJ0X25vbm51bGwocG9pbnQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocmVj
dC0+eCwgPT0sIHBvaW50LT54KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHJlY3QtPnksID09LCBw
b2ludC0+eSk7CisgICAgR1VuaXF1ZVB0cjxBdHNwaVBvaW50PiBzaXplKGF0c3BpX2NvbXBvbmVu
dF9nZXRfc2l6ZShBVFNQSV9DT01QT05FTlQoaW1nLmdldCgpKSwgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X25vbm51bGwoc2l6ZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChzaXplLT54
LCA9PSwgcmVjdC0+d2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoc2l6ZS0+eSwgPT0sIHJl
Y3QtPmhlaWdodCk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9jb21wb25lbnRfY29udGFpbnMo
QVRTUElfQ09NUE9ORU5UKGltZy5nZXQoKSksIHJlY3QtPngsIHJlY3QtPnksIEFUU1BJX0NPT1JE
X1RZUEVfV0lORE9XLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfZmFsc2UoYXRzcGlfY29tcG9u
ZW50X2NvbnRhaW5zKEFUU1BJX0NPTVBPTkVOVChpbWcuZ2V0KCkpLCByZWN0LT54ICsgcmVjdC0+
d2lkdGgsIHJlY3QtPnkgKyByZWN0LT5oZWlnaHQsIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBu
dWxscHRyKSk7CisgICAgYXV0byBhY2Nlc3NpYmxlID0gYWRvcHRHUmVmKGF0c3BpX2NvbXBvbmVu
dF9nZXRfYWNjZXNzaWJsZV9hdF9wb2ludChBVFNQSV9DT01QT05FTlQoZG9jdW1lbnRXZWIuZ2V0
KCkpLCByZWN0LT54LCByZWN0LT55LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikp
OworICAgIGdfYXNzZXJ0X3RydWUoYWNjZXNzaWJsZS5nZXQoKSA9PSBpbWcuZ2V0KCkpOworICAg
IGFjY2Vzc2libGUgPSBhZG9wdEdSZWYoYXRzcGlfY29tcG9uZW50X2dldF9hY2Nlc3NpYmxlX2F0
X3BvaW50KEFUU1BJX0NPTVBPTkVOVChkb2N1bWVudFdlYi5nZXQoKSksIHJlY3QtPnggKyByZWN0
LT53aWR0aCwgcmVjdC0+eSArIHJlY3QtPmhlaWdodCwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1cs
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKGFjY2Vzc2libGUuZ2V0KCkgPT0gZG9jdW1l
bnRXZWIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29tcG9uZW50U2Nyb2xsVG8oQWNj
ZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93KDY0MCwgNDgwKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEaXIoZ19zdHJkdXBf
cHJpbnRmKCJmaWxlOi8vJXMvIiwgVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgpKSk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIK
KyAgICAgICAgIiAgICA8cD5Ub3A8L3A+IgorICAgICAgICAiICAgIDxpbWcgc3JjPSdibGFuay5p
Y28nIHdpZHRoPTIwMCBoZWlnaHQ9NjAwPjwvaW1nPiIKKyAgICAgICAgIiAgICA8cD5Cb3R0b208
L3A+IgorICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIGJh
c2VEaXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
YXV0byB0ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0
X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRv
Y3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVu
dFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAzKTsKKworICAgIGF1dG8gdG9wID0gYWRvcHRHUmVm
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAw
LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19DT01QT05FTlQodG9wLmdl
dCgpKSk7CisgICAgR1VuaXF1ZVB0cjxBdHNwaVBvaW50PiB0b3BQb3NpdGlvbkJlZm9yZVNjcm9s
bGluZyhhdHNwaV9jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUU1BJX0NPTVBPTkVOVCh0b3AuZ2V0
KCkpLCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh0b3BQb3NpdGlvbkJlZm9yZVNjcm9sbGluZy0+eSwgPiwgMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHRvcFBvc2l0aW9uQmVmb3JlU2Nyb2xsaW5nLT55LCA8LCA0ODApOworCisgICAgYXV0
byBib3R0b20gPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgo
ZG9jdW1lbnRXZWIuZ2V0KCksIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX0NPTVBPTkVOVChib3R0b20uZ2V0KCkpKTsKKyAgICBHVW5pcXVlUHRyPEF0c3BpUG9pbnQ+
IGJvdHRvbVBvc2l0aW9uQmVmb3JlU2Nyb2xsaW5nKGF0c3BpX2NvbXBvbmVudF9nZXRfcG9zaXRp
b24oQVRTUElfQ09NUE9ORU5UKGJvdHRvbS5nZXQoKSksIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9X
LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KGJvdHRvbVBvc2l0aW9uQmVmb3JlU2Ny
b2xsaW5nLT55LCA+LCA0ODApOworCisgICAgYXRzcGlfY29tcG9uZW50X3Njcm9sbF90byhBVFNQ
SV9DT01QT05FTlQoYm90dG9tLmdldCgpKSwgQVRTUElfU0NST0xMX0FOWVdIRVJFLCBudWxscHRy
KTsKKworICAgIEdVbmlxdWVQdHI8QXRzcGlQb2ludD4gdG9wUG9zaXRpb25BZnRlclNjcm9sbGlu
ZyhhdHNwaV9jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUU1BJX0NPTVBPTkVOVCh0b3AuZ2V0KCkp
LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0b3BQb3NpdGlvbkFmdGVyU2Nyb2xsaW5nLT55LCA8LCAwKTsKKyAgICBHVW5pcXVlUHRyPEF0
c3BpUG9pbnQ+IGJvdHRvbVBvc2l0aW9uQWZ0ZXJTY3JvbGxpbmcoYXRzcGlfY29tcG9uZW50X2dl
dF9wb3NpdGlvbihBVFNQSV9DT01QT05FTlQoYm90dG9tLmdldCgpKSwgQVRTUElfQ09PUkRfVFlQ
RV9XSU5ET1csIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYm90dG9tUG9zaXRpb25B
ZnRlclNjcm9sbGluZy0+eSwgPCwgNDgwKTsKKworICAgIGF0c3BpX2NvbXBvbmVudF9zY3JvbGxf
dG9fcG9pbnQoQVRTUElfQ09NUE9ORU5UKHRvcC5nZXQoKSksIEFUU1BJX0NPT1JEX1RZUEVfV0lO
RE9XLCB0b3BQb3NpdGlvbkJlZm9yZVNjcm9sbGluZy0+eCwgdG9wUG9zaXRpb25CZWZvcmVTY3Jv
bGxpbmctPnksIG51bGxwdHIpOworICAgIHRvcFBvc2l0aW9uQWZ0ZXJTY3JvbGxpbmcucmVzZXQo
YXRzcGlfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVFNQSV9DT01QT05FTlQodG9wLmdldCgpKSwg
QVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dG9wUG9zaXRpb25CZWZvcmVTY3JvbGxpbmctPngsID09LCB0b3BQb3NpdGlvbkFmdGVyU2Nyb2xs
aW5nLT54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodG9wUG9zaXRpb25CZWZvcmVTY3JvbGxpbmct
PnksID09LCB0b3BQb3NpdGlvbkFmdGVyU2Nyb2xsaW5nLT55KTsKK30KKwogdm9pZCBiZWZvcmVB
bGwoKQogewogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHki
LCAiYWNjZXNzaWJsZS9iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QWNjZXNzaWJsZUJhc2ljSGllcmFy
Y2h5KTsKQEAgLTcyMSw2ICs4MTEsOCBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgQWNjZXNzaWJp
bGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL2F0dHJpYnV0
ZXMiLCB0ZXN0QWNjZXNzaWJsZUF0dHJpYnV0ZXMpOwogICAgIEFjY2Vzc2liaWxpdHlUZXN0Ojph
ZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNzaWJsZS9zdGF0ZSIsIHRlc3RBY2Nlc3Np
YmxlU3RhdGUpOwogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxp
dHkiLCAiYWNjZXNzaWJsZS9zdGF0ZS1jaGFuZ2VkIiwgdGVzdEFjY2Vzc2libGVTdGF0ZUNoYW5n
ZWQpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAi
Y29tcG9uZW50L2hpdC10ZXN0IiwgdGVzdENvbXBvbmVudEhpdFRlc3QpOworICAgIEFjY2Vzc2li
aWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiY29tcG9uZW50L3Njcm9sbC10
byIsIHRlc3RDb21wb25lbnRTY3JvbGxUbyk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQo=
</data>
<flag name="review"
          id="465175"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>