<?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>174633</bug_id>
          
          <creation_ts>2017-07-18 09:35:50 -0700</creation_ts>
          <short_desc>Web Automation: implicit navigations don&apos;t cause browsing context switch</short_desc>
          <delta_ts>2017-07-21 03:22:37 -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>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174670</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1330008</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-18 09:35:50 -0700</bug_when>
    <thetext>I&apos;ve noticed this debugging testShouldFocusOnTheReplacementWhenAFrameFollowsALinkToA_TopTargetedPage. The situation is something like this:

1. a frame set is loaded
2. switch frame to any frame in the set
3. get a link from the subframe and click it
4. a new page is loaded in the main frame
5. find an element that is in the new page

from 3 to 4 there&apos;s actually a browsing context switch, but web driver doesn&apos;t know about it. The subrame from which the navigation happened is still the current browsing context, and it&apos;s still referenced in WebAutomationSession (frames are never removed from the maps) and in WebAutomationSessionProxy (the script object is still protected, and pending callbacks if any are nos dispatched, it seems we are leaking the frame in the web process). So, step 5 is still trying to find the element in the previous frame, and since the frame is still alive, the evaluateJavaScriptFunction is called, but the element is not found and returns a no such element error. This would be even more problematic if the previous page had an element matching the find command. I&apos;m not sure how to solve this, if the frame was not leaked in the wen process, at least we could get a no such frame error, and handle it as special case, switching to top level and trying again. Something like that is done in chromium:

if (attempt == 2) {
   // Switch to main frame and retry command if subframe no longer exists.                                                                                                                 
   session-&gt;SwitchToTopFrame();
}

I don&apos;t like this approach that much, but if there&apos;s no other way, at least we should do it only when error returned is no such frame, (and there&apos;s an active browsing context, of course).

Any other ideas? Did you solve that in safaridriver somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330147</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-18 15:08:55 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #0)
&gt; I&apos;ve noticed this debugging
&gt; testShouldFocusOnTheReplacementWhenAFrameFollowsALinkToA_TopTargetedPage.
&gt; The situation is something like this:
&gt; 
&gt; 1. a frame set is loaded
&gt; 2. switch frame to any frame in the set
&gt; 3. get a link from the subframe and click it
&gt; 4. a new page is loaded in the main frame
&gt; 5. find an element that is in the new page
&gt; 
&gt; from 3 to 4 there&apos;s actually a browsing context switch, but web driver
&gt; doesn&apos;t know about it. The subrame from which the navigation happened is
&gt; still the current browsing context, and it&apos;s still referenced in
&gt; WebAutomationSession (frames are never removed from the maps) and in
&gt; WebAutomationSessionProxy (the script object is still protected, and pending
&gt; callbacks if any are nos dispatched, it seems we are leaking the frame in
&gt; the web process). So, step 5 is still trying to find the element in the
&gt; previous frame, and since the frame is still alive, the
&gt; evaluateJavaScriptFunction is called, but the element is not found and
&gt; returns a no such element error. This would be even more problematic if the
&gt; previous page had an element matching the find command.

Great investigation!

&gt; I&apos;m not sure how to
&gt; solve this, if the frame was not leaked in the web process, at least we
&gt; could get a no such frame error, and handle it as special case, switching to
&gt; top level and trying again. Something like that is done in chromium:
&gt; 
&gt; if (attempt == 2) {
&gt;    // Switch to main frame and retry command if subframe no longer exists.  
&gt; 
&gt;    session-&gt;SwitchToTopFrame();
&gt; }
&gt; 
&gt; I don&apos;t like this approach that much, but if there&apos;s no other way, at least
&gt; we should do it only when error returned is no such frame, (and there&apos;s an
&gt; active browsing context, of course).
&gt; 
&gt; Any other ideas? Did you solve that in safaridriver somehow?

No we haven&apos;t solved this. This is probably the cause of many nonspecific bugs we get with unexpected &quot;element not found&quot; errors.

What about changing the context in WebAutomationSession::navigationOccurredForPage() if needed, and sending a notification out to the driver that the current top level context changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330167</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-18 15:31:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/33387797&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330571</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-20 00:09:36 -0700</bug_when>
    <thetext>We are not actually leaking frames, it&apos;s that they are kept alive in the page cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330575</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-20 00:50:58 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #1)
&gt; (In reply to Carlos Garcia Campos from comment #0)
&gt; &gt; I&apos;ve noticed this debugging
&gt; &gt; testShouldFocusOnTheReplacementWhenAFrameFollowsALinkToA_TopTargetedPage.
&gt; &gt; The situation is something like this:
&gt; &gt; 
&gt; &gt; 1. a frame set is loaded
&gt; &gt; 2. switch frame to any frame in the set
&gt; &gt; 3. get a link from the subframe and click it
&gt; &gt; 4. a new page is loaded in the main frame
&gt; &gt; 5. find an element that is in the new page
&gt; &gt; 
&gt; &gt; from 3 to 4 there&apos;s actually a browsing context switch, but web driver
&gt; &gt; doesn&apos;t know about it. The subrame from which the navigation happened is
&gt; &gt; still the current browsing context, and it&apos;s still referenced in
&gt; &gt; WebAutomationSession (frames are never removed from the maps) and in
&gt; &gt; WebAutomationSessionProxy (the script object is still protected, and pending
&gt; &gt; callbacks if any are nos dispatched, it seems we are leaking the frame in
&gt; &gt; the web process). So, step 5 is still trying to find the element in the
&gt; &gt; previous frame, and since the frame is still alive, the
&gt; &gt; evaluateJavaScriptFunction is called, but the element is not found and
&gt; &gt; returns a no such element error. This would be even more problematic if the
&gt; &gt; previous page had an element matching the find command.
&gt; 
&gt; Great investigation!
&gt; 
&gt; &gt; I&apos;m not sure how to
&gt; &gt; solve this, if the frame was not leaked in the web process, at least we
&gt; &gt; could get a no such frame error, and handle it as special case, switching to
&gt; &gt; top level and trying again. Something like that is done in chromium:
&gt; &gt; 
&gt; &gt; if (attempt == 2) {
&gt; &gt;    // Switch to main frame and retry command if subframe no longer exists.  
&gt; &gt; 
&gt; &gt;    session-&gt;SwitchToTopFrame();
&gt; &gt; }
&gt; &gt; 
&gt; &gt; I don&apos;t like this approach that much, but if there&apos;s no other way, at least
&gt; &gt; we should do it only when error returned is no such frame, (and there&apos;s an
&gt; &gt; active browsing context, of course).
&gt; &gt; 
&gt; &gt; Any other ideas? Did you solve that in safaridriver somehow?
&gt; 
&gt; No we haven&apos;t solved this. This is probably the cause of many nonspecific
&gt; bugs we get with unexpected &quot;element not found&quot; errors.
&gt; 
&gt; What about changing the context in
&gt; WebAutomationSession::navigationOccurredForPage() if needed, and sending a
&gt; notification out to the driver that the current top level context changed?

I think we can simply clear the m_handleWebFrameMap there, because no frames can be resolved before the page loads, any frame cached there at that point is for previous page. Then, any operation on a stale frame will end up on a non such frame error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330588</commentid>
    <comment_count>5</comment_count>
      <attachid>315979</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-20 04:40:46 -0700</bug_when>
    <thetext>Created attachment 315979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330589</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-20 04:42:07 -0700</bug_when>
    <thetext>Attachment 315979 did not pass style-queue:


ERROR: Source/WebDriver/Session.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebDriver/Session.cpp:930:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330590</commentid>
    <comment_count>7</comment_count>
      <attachid>315980</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-20 04:44:06 -0700</bug_when>
    <thetext>Created attachment 315980
Patch

Oops, submitted the wrong patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330690</commentid>
    <comment_count>8</comment_count>
      <attachid>315980</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-20 11:15:25 -0700</bug_when>
    <thetext>Comment on attachment 315980
Patch

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

r+ with change

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:468
&gt; +        m_handleWebFrameMap.clear();

You need to clear m_webFrameHandleMap too, as they are inversed lookup tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330949</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-21 03:22:37 -0700</bug_when>
    <thetext>Committed r219723: &lt;http://trac.webkit.org/changeset/219723&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315979</attachid>
            <date>2017-07-20 04:40:46 -0700</date>
            <delta_ts>2017-07-20 04:44:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wd-wait-for-navigations.diff</filename>
            <type>text/plain</type>
            <size>31506</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkRyaXZl
ci9DaGFuZ2VMb2cKaW5kZXggZmZkYWMxYTUxMDAuLjlhMWNlNzE5MzVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA3LTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBXZWJEcml2ZXI6IHdhaXQgdW50aWwgbmF2aWdh
dGlvbiBpcyBjb21wbGV0ZSBiZWZvcmUgcnVubmluZyBuZXcgY29tbWFuZHMgYW5kIGFmdGVyIGEg
Y2xpY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDY3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
IGFyZSBhbHJlYWR5IHdhaXRpbmcgZm9yIG5hdmlnYXRpb24gdG8gY29tcGxldGUgYWZ0ZXIgbmF2
aWdhdGlvbiBjb21tYW5kcyAoZ28sIGJhY2ssIGZvcndhcmQsIHJlZnJlc2gpLCBidXQKKyAgICAg
ICAgdGhlIHNwZWMgc2F5cyB3ZSBzaG91bGQgYWx3YXlzIHdhaXQgYmVmb3JlIGV4ZWN1dGluZyBh
IG5ldyBjb21tYW5kIGFuZCBhbHNvIGFmdGVyIGEgY2xpY2suIFRoaXMgaXMgY2F1c2luZyB0ZXN0
CisgICAgICAgIHRlc3RTaG91bGRCZUFibGVUb05hdmlnYXRlQmFja0luVGhlQnJvd3Nlckhpc3Rv
cnlJblByZXNlbmNlT2ZJZnJhbWVzIHRvIHNpbWV0aW1lcyBmYWlsLCBiZWNhdXNlIGl0IGRvZXMg
LmNsaWNrKCkKKyAgICAgICAgKyAudGl0bGUgYW5kIGV4cGVjdHMgdGhlIHRpdGxlIHRvIHRiZSB0
aGUgb25lIG9mIHRoZSBwYWdlIGxvYWRlZCBieSB0aGUgY2xpY2suIFNpbmNlIHRoZSBsb2FkIGhh
cHBlbnMgdmVyeSBmYXN0LAorICAgICAgICB0aGUgdGVzdCB1c3VhbGx5IHBhc3NlcywgYnV0IGlu
IGEgcmVhbCBjYXNlIHdpdGggYSBzbG93ZXIgbG9hZCwgdGhlIHRpdGxlIG9mIHRoZSBwcmV2aW91
cyBwYWdlIHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgICAgbW9zdCBvZiB0aGUgdGltZXMuCisKKyAg
ICAgICAgNi4zIFByb2Nlc3NpbmcgTW9kZWwuIFN0ZXAgNy4gV2FpdCBmb3IgbmF2aWdhdGlvbiB0
byBjb21wbGV0ZS4gSWYgdGhpcyByZXR1cm5zIGFuIGVycm9yIHJldHVybiBpdHMgdmFsdWUgYW5k
CisgICAgICAgIGp1bXAgdG8gc3RlcCAxIGluIHRoaXMgb3ZlcmFsbCBhbGdvcml0aG0sIG90aGVy
d2lzZSBjb250aW51ZS4KKyAgICAgICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8j
cHJvY2Vzc2luZy1tb2RlbAorCisgICAgICAgIDE0LjEgRWxlbWVudCBDbGljay4gU3RlcCAxMC4g
SWYgdGhlIGNsaWNrIGNhdXNlcyBuYXZpZ2F0aW9uOiAxLiBSdW4gdGhlIHBvc3QtbmF2aWdhdGlv
biBjaGVja3MgYW5kIHJldHVybiBpdHMKKyAgICAgICAgdmFsdWUgaWYgaXQgaXMgYW4gZXJyb3Iu
IDIuIFRyeSB0byB3YWl0IGZvciBuYXZpZ2F0aW9uIHRvIGNvbXBsZXRlLgorICAgICAgICBodHRw
czovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNlbGVtZW50LWNsaWNrCisKKyAgICAgICAgKiBT
ZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRp
b25Ub0NvbXBsZXRlKTogU2VuZCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUgbWVzc2FnZSB0
byB0aGUgYnJvd3NlciB0bworICAgICAgICB3YWl0IGZvciBhbnkgcGVuZGluZyBuYXZpZ2F0aW9u
IG9mIGN1cnJlbnQgYnJvd3NpbmcgY29udGV4dCB0byBjb21wbGV0ZS4KKyAgICAgICAgKFdlYkRy
aXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsaWNrKTogQ2FsbCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoKSBhZnRlciB0aGUgY2xpY2suCisgICAgICAgICogU2Vzc2lvbi5oOgorICAgICAgICAq
IFdlYkRyaXZlclNlcnZpY2UuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2
aWNlOjpnbyk6IFdhaXQgZm9yIG5hdmlnYXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSBydW5uaW5n
IHRoZSBjb21tYW5kLgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXRD
dXJyZW50VVJMKTogRGl0dG8uCisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6
OmJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Zm9y
d2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpyZWZy
ZXNoKTogRGl0dG8uCisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmdldFRp
dGxlKTogRGl0dG8uCisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnN3aXRj
aFRvRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
c3dpdGNoVG9QYXJlbnRGcmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpmaW5kRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpmaW5kRWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZXhlY3V0ZVNjcmlwdCk6IERpdHRvLgorICAgICAgICAoV2ViRHJp
dmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpleGVjdXRlQXN5bmNTY3JpcHQpOiBEaXR0by4KKwogMjAx
Ny0wNy0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgV2ViRHJpdmVyOiBjb3JyZWN0bHkgaGFuZGxlIG1haW4gZnJhbWUgaGFuZGxlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIv
U2Vzc2lvbi5jcHAKaW5kZXggZmRkMjRkZmJiZWQuLmNmYmJiZWZmY2VhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5jcHAKQEAgLTk0Miw2ICs5NDIsMzIgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50QXR0cmli
dXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGF0dHJpYnUKICAgICB9
KTsKIH0KIAordm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBp
ZiAoIW1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaFdp
bmRvdykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYnJvd3NpbmdDb250ZXh0SGFuZGxlIiksIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAgaWYgKG1fYnJvd3NpbmdDb250
ZXh0KQorICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhh
bmRsZSIpLCBtX2Jyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKyAgICBtX2hvc3QtPnNlbmRDb21t
YW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgid2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlIiks
IFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgeworICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvcikgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuZXJyb3JDb2RlKCkgPT0gQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hGcmFt
ZSkgeworICAgICAgICAgICAgICAgIC8vIE5hdmlnYXRpb24gZGVzdHJveWVkIHRoZSBjdXJyZW50
IGZyYW1lLCBzd2l0Y2ggdG8gdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIGlnbm9yZSB0
aGUgZXJyb3IuCisgICAgICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoc3RkOjpu
dWxsb3B0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcygpKTsKKyAgICB9KTsKK30KKwogdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xp
Y2soY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0KSB7CkBAIC05NjAsNiArOTg2LDggQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xpY2so
Y29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKICAg
ICAgICAgLy8gRklYTUU6IHRoZSBjZW50ZXIgb2YgdGhlIGJvdW5kaW5nIGJveCBpcyBub3QgYWx3
YXlzIHBhcnQgb2YgdGhlIGVsZW1lbnQuCiAgICAgICAgIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9u
KHJlY3QudmFsdWUoKS5vcmlnaW4ueCArIHJlY3QudmFsdWUoKS5zaXplLndpZHRoIC8gMiwgcmVj
dC52YWx1ZSgpLm9yaWdpbi55ICsgcmVjdC52YWx1ZSgpLnNpemUuaGVpZ2h0IC8gMiwKICAgICAg
ICAgICAgIE1vdXNlQnV0dG9uOjpMZWZ0LCBNb3VzZUludGVyYWN0aW9uOjpTaW5nbGVDbGljaywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9u
VG9Db21wbGV0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oIGIvU291cmNlL1dlYkRyaXZlci9T
ZXNzaW9uLmgKaW5kZXggMTlkNTg1ZWZmMDQuLjEzN2I4MmFkZmUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViRHJpdmVyL1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uaApA
QCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4g
aW1wbGljaXQ7CiAgICAgfTsKIAorICAgIHZvaWQgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYpOwogICAgIHZvaWQgY3JlYXRlVG9w
TGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJik7
CiAgICAgdm9pZCBjbG9zZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmKTsKICAg
ICB2b2lkIGdldFRpbWVvdXRzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcCBiL1NvdXJj
ZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKaW5kZXggZjdmMWY3NzJiMmYuLmY4MjA0
NGQwMzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKQEAgLTQxMCw0NyAr
NDEwLDk4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z28oUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBzZXNzaW9uLT5nbyh1cmwsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBzZXNzaW9uLT53YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoW3Nlc3Npb24sIHVybCA9IFdU
Rk1vdmUodXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQu
aXNFcnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3Vs
dCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlc3Npb24tPmdv
KHVybCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOwogfQogCiB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OmdldEN1cnJlbnRVUkwoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIC8vIMKnOS4yIEdldCBDdXJyZW50IFVSTC4KICAgICAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNnZXQtY3VycmVudC11cmwKLSAgICBpZiAoYXV0byBz
ZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21w
bGV0aW9uSGFuZGxlcikpCisgICAgYXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRl
V2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgaWYgKCFzZXNz
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXNzaW9uLT53YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUoW3Nlc3Npb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
cmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBzZXNz
aW9uLT5nZXRDdXJyZW50VVJMKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpiYWNrKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICAvLyDCpzkuMyBCYWNrLgogICAgIC8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi93ZWJkcml2ZXIvI2JhY2sKLSAgICBpZiAoYXV0byBzZXNzaW9uID0gZmluZFNlc3Np
b25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCisg
ICAgYXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0
ZXJzLCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXNzaW9uLT53YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoW3Nlc3Npb24s
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRS
ZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkg
eworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBzZXNzaW9uLT5iYWNrKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
Ojpmb3J3YXJkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyDC
pzkuNCBGb3J3YXJkLgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Zv
cndhcmQKLSAgICBpZiAoYXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVy
cm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCisgICAgYXV0byBzZXNzaW9uID0g
ZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXNzaW9u
LT53YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoW3Nlc3Npb24sIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11
dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgICAgICBzZXNzaW9uLT5mb3J3YXJkKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpyZWZyZXNoKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyDCpzkuNSBSZWZyZXNoLgog
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI3JlZnJlc2gKLSAgICBpZiAo
YXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJz
LCBjb21wbGV0aW9uSGFuZGxlcikpCisgICAgYXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNv
bXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgaWYg
KCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXNzaW9uLT53YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGUoW3Nlc3Npb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAg
ICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAg
ICBzZXNzaW9uLT5yZWZyZXNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRUaXRsZShSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgLy8gwqc5LjYgR2V0IFRpdGxlLgogICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2dldC10aXRsZQotICAgIGlmIChhdXRvIHNlc3Np
b24gPSBmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRp
b25IYW5kbGVyKSkKKyAgICBhdXRvIHNlc3Npb24gPSBmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRo
RXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBpZiAoIXNlc3Npb24p
CisgICAgICAgIHJldHVybjsKKworICAgIHNlc3Npb24tPndhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZShbc2Vzc2lvbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1
bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHNlc3Npb24t
PmdldFRpdGxlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRXaW5kb3dIYW5kbGUoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtNTYyLDE1ICs2MTMsMzAgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
Ojpzd2l0Y2hUb0ZyYW1lKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVu
Y3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlc3Npb24tPnN3aXRjaFRvRnJhbWUo
V1RGTW92ZShmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHNlc3Np
b24tPndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShbc2Vzc2lvbiwgZnJhbWVJRCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYm
IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvcigpKSB7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlc3Npb24tPnN3aXRjaFRvRnJhbWUoV1RGTW92
ZShmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOwogfQogCiB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvUGFyZW50RnJhbWUoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIC8vIMKnMTAuNiBTd2l0Y2ggVG8gUGFyZW50IEZy
YW1lLgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI3N3aXRjaC10by1w
YXJlbnQtZnJhbWUKLSAgICBpZiAoYXV0byBzZXNzaW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRl
V2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCisgICAgYXV0byBzZXNz
aW9uID0gZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0
aW9uSGFuZGxlcik7CisgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBz
ZXNzaW9uLT53YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoW3Nlc3Npb24sIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgICAgICBzZXNzaW9uLT5zd2l0Y2hUb1BhcmVudEZyYW1lKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBmaW5kRWxlbWVudE9yQ29tcGxldGVXaXRoRXJyb3IoSW5zcGVjdG9yT2JqZWN0
JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC02MDgsNyArNjc0LDEzIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Zmlu
ZEVsZW1lbnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAg
ICAgaWYgKCFmaW5kU3RyYXRlZ3lBbmRTZWxlY3Rvck9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFt
ZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyLCBzdHJhdGVneSwgc2VsZWN0b3IpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzZXNzaW9uLT5maW5kRWxlbWVudHMoc3RyYXRlZ3ksIHNlbGVjdG9yLCBT
ZXNzaW9uOjpGaW5kRWxlbWVudHNNb2RlOjpTaW5nbGUsIGVtcHR5U3RyaW5nKCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBzZXNzaW9uLT53YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoW3Nlc3Npb24sIHN0cmF0ZWd5ID0gV1RGTW92ZShzdHJhdGVneSksIHNlbGVjdG9yID0g
V1RGTW92ZShzZWxlY3RvciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
cmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXNz
aW9uLT5maW5kRWxlbWVudHMoc3RyYXRlZ3ksIHNlbGVjdG9yLCBTZXNzaW9uOjpGaW5kRWxlbWVu
dHNNb2RlOjpTaW5nbGUsIGVtcHR5U3RyaW5nKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kRWxlbWVudHMoUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNjIzLDcgKzY5NSwxMyBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OmZpbmRFbGVtZW50cyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IHBhcmFtZXRlcnMsIEZ1bmN0aQogICAgIGlmICghZmluZFN0cmF0ZWd5QW5kU2VsZWN0b3JPckNv
bXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlciwgc3RyYXRlZ3ks
IHNlbGVjdG9yKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Vzc2lvbi0+ZmluZEVsZW1lbnRz
KHN0cmF0ZWd5LCBzZWxlY3RvciwgU2Vzc2lvbjo6RmluZEVsZW1lbnRzTW9kZTo6TXVsdGlwbGUs
IGVtcHR5U3RyaW5nKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBzZXNzaW9u
LT53YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoW3Nlc3Npb24sIHN0cmF0ZWd5ID0gV1RGTW92
ZShzdHJhdGVneSksIHNlbGVjdG9yID0gV1RGTW92ZShzZWxlY3RvciksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQp
IG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzZXNzaW9uLT5maW5kRWxlbWVudHMoc3RyYXRlZ3ksIHNlbGVj
dG9yLCBTZXNzaW9uOjpGaW5kRWxlbWVudHNNb2RlOjpNdWx0aXBsZSwgZW1wdHlTdHJpbmcoKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOwogfQogCiB2b2lkIFdlYkRyaXZl
clNlcnZpY2U6OmZpbmRFbGVtZW50RnJvbUVsZW1lbnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtODg0LDcgKzk2MiwxMyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmV4
ZWN1dGVTY3JpcHQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdAog
ICAgIGlmICghZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFt
ZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyLCBzY3JpcHQsIGFyZ3VtZW50cykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNlc3Npb24tPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCBXVEZNb3ZlKGFyZ3Vt
ZW50cyksIFNlc3Npb246OkV4ZWN1dGVTY3JpcHRNb2RlOjpTeW5jLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgc2Vzc2lvbi0+d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKFtz
ZXNzaW9uLCBzY3JpcHQgPSBXVEZNb3ZlKHNjcmlwdCksIGFyZ3VtZW50cyA9IFdURk1vdmUoYXJn
dW1lbnRzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Q29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQuaXNF
cnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlc3Npb24tPmV4ZWN1
dGVTY3JpcHQoc2NyaXB0LCBXVEZNb3ZlKGFyZ3VtZW50cyksIFNlc3Npb246OkV4ZWN1dGVTY3Jp
cHRNb2RlOjpTeW5jLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZXhlY3V0ZUFzeW5jU2NyaXB0KFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTkwMCw3ICs5ODQsMTMgQEAgdm9pZCBXZWJEcml2ZXJT
ZXJ2aWNlOjpleGVjdXRlQXN5bmNTY3JpcHQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzLAogICAgIGlmICghZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJy
b3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyLCBzY3JpcHQsIGFyZ3VtZW50cykpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHNlc3Npb24tPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCBXVEZN
b3ZlKGFyZ3VtZW50cyksIFNlc3Npb246OkV4ZWN1dGVTY3JpcHRNb2RlOjpBc3luYywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHNlc3Npb24tPndhaXRGb3JOYXZpZ2F0aW9uVG9D
b21wbGV0ZShbc2Vzc2lvbiwgc2NyaXB0ID0gV1RGTW92ZShzY3JpcHQpLCBhcmd1bWVudHMgPSBX
VEZNb3ZlKGFyZ3VtZW50cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
cmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXNz
aW9uLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgV1RGTW92ZShhcmd1bWVudHMpLCBTZXNzaW9uOjpF
eGVjdXRlU2NyaXB0TW9kZTo6QXN5bmMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViRHJpdmVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFlM2FhMmM5
YmZmLi5iMGUxODhlMDc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxNy0wNy0yMCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2Vi
RHJpdmVyOiB3YWl0IHVudGlsIG5hdmlnYXRpb24gaXMgY29tcGxldGUgYmVmb3JlIHJ1bm5pbmcg
bmV3IGNvbW1hbmRzIGFuZCBhZnRlciBhIGNsaWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlIG1l
dGhvZCB0byBBdXRvbWF0aW9uIHRvIGFsbG93IFdlYkRyaXZlciB0byB3YWl0IGZvciBwZW5kaW5n
IG5hdmlnYXRpb25zIHRvCisgICAgICAgIGNvbXBsZXRlLiBUaGUgbmV3IG1ldGhvZCBhbHJlYWR5
IHJlY2VpdmVzIHBhZ2UgbG9hZCBzdHJhdGVneSBhbmQgdGltZW91dCwgYnV0IHRoZXkgYXJlIG5v
dCBpbXBsZW1lbnRlZCB5ZXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRv
bWF0aW9uLmpzb246IEFkZCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUgbWV0aG9kIGFuZCBQ
YWdlTG9hZFN0cmF0ZWd5IG5ldyB0eXBlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZSk6IENhbGwgd2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlT25QYWdlIG9yCisgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZU9uRnJhbWUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGN1cnJlbnQgYm9yd3NpbmcgY29u
dGV4dCBpcyB0aGUgbWFpbiBmcmFtZSBvciBub3QuCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UpOiBDaGVjayBp
ZiB0aGVyZSdzIGFuIG9uZ29pbmcgbG9hZCBmb3IgdGhlIHBhZ2UsCisgICAgICAgIGFuZCB3YWl0
IGZvciBpdCB0byBjb21wbGV0ZSBpZiBuZWVkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKTogQ2hlY2sg
aWYgdGhlcmUncyBhbiBvbmdvaW5nIGxvYWQgZm9yIHRoZSBmcmFtZSwKKyAgICAgICAgYW5kIHdh
aXQgZm9yIGl0IHRvIGNvbXBsZXRlIGlmIG5lZWRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQXV0
b21hdGlvblNlc3Npb246Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KTogVXNlIHdhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgpIG5vdy4KKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJv
d3NpbmdDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjpuYXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFtZSk6IFJlbmFtZWQgc2luY2UgaXQgbm93IHJl
Y2VpdmVzIHRoZSBub3RpZmljYXRpb24gZm9yCisgICAgICAgIGFsbCB0aGUgZnJhbWVzLiBDb21w
bGV0ZSBwYWdlIG9wZXJhdGlvbnMgb2YgaXQncyBhIG1haW4gZnJhbWUsIG9yIGZyYW1lIG9wZXJh
dGlvbnMgb3RoZXJ3aXNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKTogTm90
aWZ5IGFib3V0IGFsbCBmcmFtZXMsIG5vdCBvbmx5IHRoZSBtYWluIG9uZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkaWRGYWlsTG9hZEZvckZyYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1l
KTogRGl0dG8uCisKIDIwMTctMDctMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFdlYkRyaXZlcjogaGFuZGxlIGludmFsaWQgc2VsZWN0b3Ig
ZXJyb3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21h
dGlvbi5qc29uCmluZGV4IGIzZjJhMzMxM2MxLi4zN2VhODc4N2NiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTYyLDYg
KzYyLDE2IEBACiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJQYWdlTG9hZFN0cmF0ZWd5IiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgcGFn
ZSBsb2FkIHN0cmF0ZWdpZXMuIiwKKyAgICAgICAgICAgICJlbnVtIjogWworICAgICAgICAgICAg
ICAgICJOb25lIiwKKyAgICAgICAgICAgICAgICAiRWFnZXIiLAorICAgICAgICAgICAgICAgICJO
b3JtYWwiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAg
ICJpZCI6ICJCcm93c2luZ0NvbnRleHQiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGhhbmRsZSByZXByZXNlbnRpbmcgYW4gb3Bl
biB3aW5kb3cgb3IgdGFiIGluIHRoZSBhdXRvbWF0aW9uIHNlc3Npb24uIiwKQEAgLTI5Niw2ICsz
MDYsMTcgQEAKICAgICAgICAgICAgICJhc3luYyI6IHRydWUKICAgICAgICAgfSwKICAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAid2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJXYWl0IGZvciBwZW5kaW5nIG5hdmlnYXRpb24gdG8g
Y29tcGxldGUuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgIiRyZWYiOiAiQnJvd3NpbmdDb250
ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9yIHRoZSBicm93c2luZyBj
b250ZXh0IGluIHdoaWNoIHdhaXQgZm9yIHBlbmRpbmcgbmF2aWdhdGlvbiB0byBjb21wbGV0ZS4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZUhhbmRsZSIsICIkcmVmIjogIkZy
YW1lSGFuZGxlIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUg
Zm9yIHRoZSBmcmFtZSBpbiB3aGljaCB3YWl0IGZvciBwZW5kaW5nIG5hdmlnYXRpb24gdG8gY29t
cGxldGUuIFRoZSBtYWluIGZyYW1lIGlzIHVzZWQgaWYgdGhpcyBwYXJhbWV0ZXIgZW1wdHkgc3Ry
aW5nIG9yIGV4Y2x1ZGVkLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhZ2VMb2Fk
U3RyYXRlZ3kiLCAiJHJlZiI6ICJQYWdlTG9hZFN0cmF0ZWd5IiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRoZSBwYWdlIGxvYWQgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gZGV0ZXJt
aW5pbmcgd2hlbiBuYXZpZ2F0aW9uIGlzIGNvbXBsZXRlLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBhZ2VMb2FkVGltZW91dCIsICJ0eXBlIjogImludGVnZXIiLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQg
dGhlIG5hdmlnYXRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY29tcGxldGVkIGluLCBvdGhlcndpc2Ug
YSA8Y29kZT5UaW1lb3V0PC9jb2RlPiBlcnJvciBpcyByZXR1cm5lZC4iIH0KKyAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKICAg
ICAgICAgICAgICJuYW1lIjogImluc3BlY3RCcm93c2luZ0NvbnRleHQiLAogICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkluc3BlY3QgdGhlIHNwZWNpZmllZCBicm93c2luZyBjb250ZXh0IHVz
aW5nIFdlYiBJbnNwZWN0b3IuIiwKICAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDA2Y2E4YTQyMGRhLi4yNWE1ZGM0ZTlmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTM3NSwxNyArMzc1LDYwIEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bmF2aWdhdGVC
cm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3
YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CisgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihX
aW5kb3dOb3RGb3VuZCk7CiAKLSAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ05hdmln
YXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlclBhZ2UudGFrZShwYWdlLT5wYWdlSUQo
KSkpCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBwYWdlIGxvYWQgc3RyYXRlZ3kgYW5kIHRpbWVv
dXQuCisKKyAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAhb3B0aW9uYWxGcmFtZUhhbmRs
ZS0+aXNFbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQg
PSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRpb25hbEZyYW1lSGFuZGxlKTsKKyAgICAgICAgaWYg
KCFmcmFtZUlEKQorICAgICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVO
b3RGb3VuZCk7CisgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcGFnZS0+cHJvY2Vzcygp
LndlYkZyYW1lKGZyYW1lSUQudmFsdWUoKSk7CisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAg
ICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKKyAgICAgICAg
d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZSgqZnJhbWUsIFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25Q
YWdlKCpwYWdlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZShXZWJQYWdlUHJveHkmIHBh
Z2UsIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+JiYgY2Fs
bGJhY2spCit7CisgICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5C
cm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpCisgICAg
ICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFN
RShUaW1lb3V0KSk7CisKKyAgICBpZiAoIXBhZ2UucGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygp
KSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVuZGluZ05hdmlnYXRpb25J
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlclBhZ2Uuc2V0KHBhZ2UucGFnZUlEKCksIFdURk1v
dmUoY2FsbGJhY2spKTsKK30KKwordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5h
dmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZShXZWJGcmFtZVByb3h5JiBmcmFtZSwgUmVmPEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBpZiAoYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ05hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4
dENhbGxiYWNrc1BlckZyYW1lLnRha2UoZnJhbWUuZnJhbWVJRCgpKSkKICAgICAgICAgY2FsbGJh
Y2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQp
KTsKLSAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQ
YWdlLnNldChwYWdlLT5wYWdlSUQoKSwgV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgaWYgKGZy
YW1lLmZyYW1lTG9hZFN0YXRlKCkuc3RhdGUoKSA9PSBGcmFtZUxvYWRTdGF0ZTo6U3RhdGU6OkZp
bmlzaGVkKSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVuZGluZ05hdmln
YXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlckZyYW1lLnNldChmcmFtZS5mcmFtZUlE
KCksIFdURk1vdmUoY2FsbGJhY2spKTsKK30KKwordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPE5hdmlnYXRl
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit7CisgICAgV2ViUGFnZVByb3h5
KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAg
ICBwYWdlLT5sb2FkUmVxdWVzdChXZWJDb3JlOjpVUkwoV2ViQ29yZTo6VVJMKCksIHVybCkpOwor
ICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgV1RGTW92ZShjYWxs
YmFjaykpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBoYW5kbGUsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNr
KQpAQCAtMzk0LDEzICs0MzcsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJ
bkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvcgogICAgIGlmICgh
cGFnZSkKICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQp
OwogCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5Ccm93c2lu
Z0NvbnRleHRDYWxsYmFja3NQZXJQYWdlLnRha2UocGFnZS0+cGFnZUlEKCkpKQotICAgICAgICBj
YWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUoVGlt
ZW91dCkpOwotCi0gICAgaWYgKHBhZ2UtPmdvQmFjaygpKQotICAgICAgICBtX3BlbmRpbmdOYXZp
Z2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQYWdlLnNldChwYWdlLT5wYWdlSUQo
KSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbGJhY2stPnNlbmRT
dWNjZXNzKCk7CisgICAgcGFnZS0+Z29CYWNrKCk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdvRm9yd2Fy
ZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCkBAIC00MDksMTMgKzQ0Nyw4
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0
KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVyCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBGQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBpZiAoYXV0byBj
YWxsYmFjayA9IG1fcGVuZGluZ05hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1Bl
clBhZ2UudGFrZShwYWdlLT5wYWdlSUQoKSkpCi0gICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVy
ZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KSk7Ci0KLSAgICBpZiAo
cGFnZS0+Z29Gb3J3YXJkKCkpCi0gICAgICAgIG1fcGVuZGluZ05hdmlnYXRpb25JbkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrc1BlclBhZ2Uuc2V0KHBhZ2UtPnBhZ2VJRCgpLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICBw
YWdlLT5nb0ZvcndhcmQoKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQpAQCAtNDI0LDE3ICs0NTcsMTkgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVy
cm9yU3QKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGlmIChhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nTmF2
aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyUGFnZS50YWtlKHBhZ2UtPnBhZ2VJ
RCgpKSkKLSAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5F
RF9FUlJPUl9OQU1FKFRpbWVvdXQpKTsKLSAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5Ccm93c2lu
Z0NvbnRleHRDYWxsYmFja3NQZXJQYWdlLnNldChwYWdlLT5wYWdlSUQoKSwgV1RGTW92ZShjYWxs
YmFjaykpOwotCiAgICAgcGFnZS0+cmVsb2FkKHsgfSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25U
b0NvbXBsZXRlT25QYWdlKCpwYWdlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZvclBhZ2UoY29uc3QgV2ViUGFn
ZVByb3h5JiBwYWdlKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bmF2aWdhdGlvbk9jY3Vy
cmVkRm9yRnJhbWUoY29uc3QgV2ViRnJhbWVQcm94eSYgZnJhbWUpCiB7Ci0gICAgaWYgKGF1dG8g
Y2FsbGJhY2sgPSBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQ
ZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpCi0gICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vz
cyhJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUo
KSkgeworICAgICAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ05hdmlnYXRpb25JbkJy
b3dzaW5nQ29udGV4dENhbGxiYWNrc1BlclBhZ2UudGFrZShmcmFtZS5wYWdlKCktPnBhZ2VJRCgp
KSkKKyAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fcGVu
ZGluZ05hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlckZyYW1lLnRha2UoZnJh
bWUuZnJhbWVJRCgpKSkKKyAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246Omluc3BlY3RvckZyb250ZW5kTG9hZGVkKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaAppbmRleCBlNWZiNWYwOWU1My4uY2FjNmNjZDFhNDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdlYlByb2Nlc3NQb29sKiBw
cm9jZXNzUG9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KICAgICB2b2lkIHNl
dFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sKik7CiAKLSAgICB2b2lkIG5hdmlnYXRpb25PY2N1
cnJlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCBuYXZpZ2F0aW9uT2Nj
dXJyZWRGb3JGcmFtZShjb25zdCBXZWJGcmFtZVByb3h5Jik7CiAgICAgdm9pZCBpbnNwZWN0b3JG
cm9udGVuZExvYWRlZChjb25zdCBXZWJQYWdlUHJveHkmKTsKICAgICB2b2lkIGtleWJvYXJkRXZl
bnRzRmx1c2hlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5Jik7CiAKQEAgLTExNSw2ICsxMTUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRl
eHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFJlZjxHb0ZvcndhcmRJ
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbG9hZEJy
b3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVm
PFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFt
ZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNv
bnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBldmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgYXJndW1l
bnRzLCBjb25zdCBib29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQs
IGNvbnN0IGludCogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQsIFJlZjxJbnNwZWN0b3I6OkF1dG9t
YXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9u
Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24o
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0IFN0cmluZyYg
bW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZpZXJzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ+JiB1cGRhdGVkUG9zaXRpb24pIG92ZXJyaWRlOwogICAg
IHZvaWQgcGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
aW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwpAQCAtMTUyLDYgKzE1Myw5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGhhbmRs
ZUZvcldlYkZyYW1lSUQodWludDY0X3QgZnJhbWVJRCk7CiAgICAgU3RyaW5nIGhhbmRsZUZvcldl
YkZyYW1lUHJveHkoY29uc3QgV2ViRnJhbWVQcm94eSYpOwogCisgICAgdm9pZCB3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoV2ViUGFnZVByb3h5JiwgUmVmPEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4mJik7CisgICAgdm9pZCB3YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGVPbkZyYW1lKFdlYkZyYW1lUHJveHkmLCBSZWY8SW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPiYmKTsKKwogICAgIC8vIEltcGxlbWVudGVkIGlu
IGdlbmVyYXRlZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHAuCiAgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBv
dmVycmlkZTsKIApAQCAtMTk3LDYgKzIwMSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJp
bmcsIHVpbnQ2NF90PiBtX2hhbmRsZVdlYkZyYW1lTWFwOwogCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+IG1f
cGVuZGluZ05hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlclBhZ2U7CisgICAg
SGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZT4+IG1fcGVuZGluZ05hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNr
c1BlckZyYW1lOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiBtX3BlbmRpbmdJbnNwZWN0b3JDYWxsYmFja3NQ
ZXJQYWdlOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiBtX3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRD
YWxsYmFja3NQZXJQYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCA1MjRjMTUyZjQ2Mi4uNzdmYmEyOTA0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzM3Myw5ICszMzczLDkgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQKICAgICBpZiAoaXNNYWluRnJhbWUpCiAgICAgICAgIG1fcGFnZUxvYWRTdGF0ZS5k
aWRGaW5pc2hMb2FkKHRyYW5zYWN0aW9uKTsKIAotICAgIGlmIChpc01haW5GcmFtZSAmJiBtX2Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24pIHsKKyAgICBpZiAobV9jb250cm9sbGVkQnlBdXRvbWF0aW9u
KSB7CiAgICAgICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IHByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCi0gICAgICAgICAgICBhdXRvbWF0aW9uU2Vz
c2lvbi0+bmF2aWdhdGlvbk9jY3VycmVkRm9yUGFnZSgqdGhpcyk7CisgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+bmF2aWdhdGlvbk9jY3VycmVkRm9yRnJhbWUoKmZyYW1lKTsKICAgICB9
CiAKICAgICBmcmFtZS0+ZGlkRmluaXNoTG9hZCgpOwpAQCAtMzQxNCw5ICszNDE0LDkgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgbmF2aWdhdGlvbklELAogICAgIGlmIChpc01haW5GcmFtZSkKICAgICAgICAgbV9wYWdl
TG9hZFN0YXRlLmRpZEZhaWxMb2FkKHRyYW5zYWN0aW9uKTsKIAotICAgIGlmIChpc01haW5GcmFt
ZSAmJiBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pIHsKKyAgICBpZiAobV9jb250cm9sbGVkQnlB
dXRvbWF0aW9uKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IHByb2Nl
c3MoKS5wcm9jZXNzUG9vbCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCi0gICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+bmF2aWdhdGlvbk9jY3VycmVkRm9yUGFnZSgqdGhpcyk7CisgICAgICAg
ICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+bmF2aWdhdGlvbk9jY3VycmVkRm9yRnJhbWUoKmZyYW1l
KTsKICAgICB9CiAKICAgICBmcmFtZS0+ZGlkRmFpbExvYWQoKTsKQEAgLTM0NTEsOSArMzQ1MSw5
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QKICAgICBpZiAoaXNNYWluRnJhbWUpCiAgICAgICAg
IG1fcGFnZUxvYWRTdGF0ZS5kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKHRyYW5zYWN0aW9uLCB1
cmwpOwogCi0gICAgaWYgKGlzTWFpbkZyYW1lICYmIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikg
eworICAgIGlmIChtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pIHsKICAgICAgICAgaWYgKGF1dG8q
IGF1dG9tYXRpb25TZXNzaW9uID0gcHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNl
c3Npb24oKSkKLSAgICAgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5uYXZpZ2F0aW9uT2NjdXJy
ZWRGb3JQYWdlKCp0aGlzKTsKKyAgICAgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5uYXZpZ2F0
aW9uT2NjdXJyZWRGb3JGcmFtZSgqZnJhbWUpOwogICAgIH0KIAogICAgIG1fcGFnZUxvYWRTdGF0
ZS5jbGVhclBlbmRpbmdBUElSZXF1ZXN0VVJMKHRyYW5zYWN0aW9uKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315980</attachid>
            <date>2017-07-20 04:44:06 -0700</date>
            <delta_ts>2017-07-20 11:15:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wd-stale-frames.diff</filename>
            <type>text/plain</type>
            <size>3027</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYjBlMTg4ZTA3NGMuLjY4OWFkNjE0NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDMwIEBACiAyMDE3LTA3LTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAorICAgICAgICBXZWIgQXV0b21hdGlvbjogaW1wbGljaXQgbmF2aWdhdGlvbnMgZG9u
J3QgY2F1c2UgYnJvd3NpbmcgY29udGV4dCBzd2l0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDYzMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzMzODc3OTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2hlbiBhIG5ldyBwYWdlIGxvYWQgcmVwbGFjZXMgdGhlIGN1cnJlbnQgZnJhbWVzZXQsIGZv
ciBleGFtcGxlIHdoZW4gYSBsaW5rIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dCBoYXMg
YQorICAgICAgICBfdG9wIHRhcmdldCwgdGhlcmUncyBubyBleHBsaWNpdCBjb250ZXh0IHN3aXRj
aCwgc28gdGhlIHdlYiBkcml2ZXIgZG9lc24ndCBrbm93IHRoYXQgdGhlIGN1cnJlbnQgYnJvd3Np
bmcKKyAgICAgICAgY29udGV4dCBpcyBubyBsb25nZXIgdmFsaWQuIEZvbGxvd2luZyBjb21tYW5k
cyB3aWxsIHN0aWxsIGJlIHVzaW5nIHRoZSBwcmV2aW91cyBmcmFtZSBhcyB0aGUgY3VycmVudCBi
cm93c2luZworICAgICAgICBjb250ZXh0LCBidXQgdGhleSBkb24ndCBmYWlsIHdpdGggbm8gc3Vj
aCBmcmFtZSBiZWNhdXNlIHRoZSBmcmFtZSBpcyBzdGlsbCBhbGl2ZSBpbiB0aGUgcGFnZSBjYWNo
ZSBhbmQKKyAgICAgICAgcmVmZXJlbmNlZCBpbiB0aGUgaW50ZXJuYWwgbWFwcyB1c2VkIGluIGJv
dGggVUkgYW5kIHdlYiBwcm9jZXNzZXMuIFRoaXMgY2F1c2VzIHRlc3QKKyAgICAgICAgdGVzdFNo
b3VsZEZvY3VzT25UaGVSZXBsYWNlbWVudFdoZW5BRnJhbWVGb2xsb3dzQUxpbmtUb0FfVG9wVGFy
Z2V0ZWRQYWdlIHRvIGZhaWwsIHNpbmNlIGl0IGV4cGVjdHMgYSBubyBzdWNoCisgICAgICAgIGZy
YW1lIGV4Y2VwdGlvbi4gV2hlbiBhIG5ldyBwYWdlIG5hdmlnYXRpb24gaGFwcGVucyB3ZSBjYW4g
c2ltcGx5IHJlbW92ZSByZWZlcmVuY2VzIHRvIGZyYW1lcyBmcm9tCisgICAgICAgIG1faGFuZGxl
V2ViRnJhbWVNYXAgaW4gV2ViQXV0b21hdGlvblNlc3Npb24sIGJlY2F1c2UgYW55IGV4aXN0aW5n
IGZyYW1lIHJlZmVyZW5jZSBpbiB0aGUgbWFwIHNob3VsZCBiZSBmb3IgYQorICAgICAgICBwcmV2
aW91cyBwYWdlLiBXaXRoIHRoaXMsIGJlZm9yZSB0aGUgbmV4dCBjb21tYW5kIGlzIGV4ZWN1dGVk
LCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUgd2lsbCBiZSBjYWxsZWQgYW5kIGl0CisgICAg
ICAgIHdpbGwgZmFpbCB3aXRoIG5vIHN1Y2ggZnJhbWUsIGNvbmRpdGlvbiB0aGF0IGlzIGhhbmRs
ZWQgdG8gc3dpdGNoIHRvIHRoZSB0b3AgbGV2ZWwgYnJvd3NlciBjb250ZXh0LiBUaGUgdGVzdAor
ICAgICAgICBzdGlsbCBmYWlscywgYmVjYXVzZSB0aGUgZmluZCBlbGVtZW50IGNvbW1hbmQgaXMg
Y2FsbGVkIHdpdGggdGhlIHRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0LCByZXR1cm5pbmcgbm8g
c3VjaAorICAgICAgICBlbGVtZW50LCBpbnN0ZWFkIG9mIG5vIHN1Y2ggZnJhbWUuIFRoaXMgaXMg
Y29uc2lzdGVudCB3aXRoIENocm9tZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZvckZyYW1lKTogQ2xlYXIgdGhlIG1faGFuZGxl
V2ViRnJhbWVNYXAgd2hlbiBhIG5ldyBwYWdlIGxvYWQKKyAgICAgICAgZmluaXNoZWQuCisKKzIw
MTctMDctMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFdlYkRyaXZlcjogd2FpdCB1bnRpbCBuYXZpZ2F0aW9uIGlzIGNvbXBsZXRlIGJlZm9y
ZSBydW5uaW5nIG5ldyBjb21tYW5kcyBhbmQgYWZ0ZXIgYSBjbGljawogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NjcwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAKaW5kZXggMjVhNWRjNGU5ZjkuLmE5MGUwNDk5NThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcApAQCAtNDY0LDYgKzQ2NCw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlbG9h
ZEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0CiB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFtZShjb25zdCBXZWJG
cmFtZVByb3h5JiBmcmFtZSkKIHsKICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAg
ICAgICAvLyBOZXcgcGFnZSBsb2FkZWQsIGNsZWFyIGZyYW1lIGhhbmRsZXMgcHJldmlvdXNseSBj
YWNoZWQuCisgICAgICAgIG1faGFuZGxlV2ViRnJhbWVNYXAuY2xlYXIoKTsKICAgICAgICAgaWYg
KGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxs
YmFja3NQZXJQYWdlLnRha2UoZnJhbWUucGFnZSgpLT5wYWdlSUQoKSkpCiAgICAgICAgICAgICBj
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfSBl
bHNlIHsK
</data>
<flag name="review"
          id="336707"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>