<?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>181601</bug_id>
          
          <creation_ts>2018-01-12 10:59:53 -0800</creation_ts>
          <short_desc>Layout Test http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access.html is flaky</short_desc>
          <delta_ts>2019-02-01 11:34:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=183616</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryan Haddad">ryanhaddad</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jlewis3</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sroberts</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388858</commentid>
    <comment_count>0</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-01-12 10:59:53 -0800</bug_when>
    <thetext>The following layout test is flaky on High Sierra Release WK2

http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access.html

Probable cause:

This test appears to have been flaky since it was added in https://trac.webkit.org/r226235

Flakiness Dashboard:

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2FstorageAccess%2Frequest-and-grant-access-then-detach-should-not-have-access.html

--- /Volumes/Data/slave/highsierra-release-tests-wk2/build/layout-test-results/http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access-expected.txt
+++ /Volumes/Data/slave/highsierra-release-tests-wk2/build/layout-test-results/http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access-actual.txt
@@ -3,9 +3,4 @@
 On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
 
 
-PASS Storage access was granted. document.cookie == firstPartyCookie=value, cookies seen server-side == {&quot;firstPartyCookie&quot;:&quot;value&quot;}
-PASS PASS. document.cookie == , cookies seen server-side == &quot;No cookies&quot;
-PASS successfullyParsed is true
 
-TEST COMPLETE
-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388859</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-12 11:01:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/36475837&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392769</commentid>
    <comment_count>2</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-24 14:32:26 -0800</bug_when>
    <thetext>*** Bug 181605 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392775</commentid>
    <comment_count>3</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-24 14:39:47 -0800</bug_when>
    <thetext>Marked as flaky: https://trac.webkit.org/changeset/227574/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395292</commentid>
    <comment_count>4</comment_count>
      <attachid>332832</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-01-31 18:39:40 -0800</bug_when>
    <thetext>Created attachment 332832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395311</commentid>
    <comment_count>5</comment_count>
      <attachid>332832</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-31 19:28:01 -0800</bug_when>
    <thetext>Comment on attachment 332832
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:91
&gt; +- (void)_hasStorageAccessEntry:(NSString *)host completionHandler:(void (^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

Give this a WKWebView* from which you get the pageID instead of host.  Have the return value be an NSDictionary&lt;_WKFrameHandle*, NSString*&gt; to get the storage access entries for this WKWebView.

&gt; Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:180
&gt; +    boolean hasStorageAccessEntry(DOMString hostName);

What if we had this return a promise so we don&apos;t need to add more synchronous stuff?
I think the promise should give you an array of partitions instead of just a bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395315</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-01-31 19:52:45 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #5)
&gt; Comment on attachment 332832 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332832&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:91
&gt; &gt; +- (void)_hasStorageAccessEntry:(NSString *)host completionHandler:(void (^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; Give this a WKWebView* from which you get the pageID instead of host.  Have
&gt; the return value be an NSDictionary&lt;_WKFrameHandle*, NSString*&gt; to get the
&gt; storage access entries for this WKWebView.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:180
&gt; &gt; +    boolean hasStorageAccessEntry(DOMString hostName);
&gt; 
&gt; What if we had this return a promise so we don&apos;t need to add more
&gt; synchronous stuff?
&gt; I think the promise should give you an array of partitions instead of just a
&gt; bool.

Note that I do not believe we support promises in TestRunner IDL (which uses its own bindings generator). We do support callbacks though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396081</commentid>
    <comment_count>7</comment_count>
      <attachid>333024</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-02-02 18:11:24 -0800</bug_when>
    <thetext>Created attachment 333024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396399</commentid>
    <comment_count>8</comment_count>
      <attachid>333024</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-02-05 10:56:15 -0800</bug_when>
    <thetext>Comment on attachment 333024
Patch

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

&gt; Tools/WebKitTestRunner/TestController.cpp:2674
&gt; +//    auto* dataStore = WKContextGetWebsiteDataStore(platformContext());

Please don&apos;t land this commented-out code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396400</commentid>
    <comment_count>9</comment_count>
      <attachid>333098</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-02-05 11:01:37 -0800</bug_when>
    <thetext>Created attachment 333098
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396403</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-02-05 11:03:06 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; Comment on attachment 333024 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333024&amp;action=review
&gt; 
&gt; &gt; Tools/WebKitTestRunner/TestController.cpp:2674
&gt; &gt; +//    auto* dataStore = WKContextGetWebsiteDataStore(platformContext());
&gt; 
&gt; Please don&apos;t land this commented-out code.

It was intended as a friendly gesture to the Linux maintainers. Will remove.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396427</commentid>
    <comment_count>11</comment_count>
      <attachid>333098</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-05 11:35:18 -0800</bug_when>
    <thetext>Comment on attachment 333098
Patch for landing

Clearing flags on attachment: 333098

Committed r228109: &lt;https://trac.webkit.org/changeset/228109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396428</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-05 11:35:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396607</commentid>
    <comment_count>13</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-02-05 16:46:51 -0800</bug_when>
    <thetext>The commit doesn&apos;t seem to have fixed the flakiness of the test:

https://build.webkit.org/results/Apple%20High%20Sierra%20Release%20WK2%20(Tests)/r228129%20(2753)/results.html
https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20WK2%20(Tests)/builds/2753</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396623</commentid>
    <comment_count>14</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-02-05 17:14:20 -0800</bug_when>
    <thetext>I will add additional logging to the test output to see if we can understand why the bots see these failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501192</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-02-01 11:34:05 -0800</bug_when>
    <thetext>Test is still flaky, also being flaky on Mojave WK2 and Debug.

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2FstorageAccess%2Frequest-and-grant-access-then-detach-should-not-have-access.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332832</attachid>
            <date>2018-01-31 18:39:40 -0800</date>
            <delta_ts>2018-02-02 18:11:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181601-20180131183939.patch</filename>
            <type>text/plain</type>
            <size>39234</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNzk0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE4LTAxLTMxICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQ
STogQWRkIHRlc3RSdW5uZXIuaGFzU3RvcmFnZUFjY2Vzc0VudHJ5KCkgZ2V0dGVyIHRvIG1ha2Ug
dGVzdGluZyBlYXNpZXIgYW5kIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTYwMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzY0NzU4Mzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0IHVwZGF0ZWQuCisKKyAgICAgICAgaHR0cC90
ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1z
aG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwKKyAgICAgICAgd2FzIGZvdW5kIHRvIGJlIGZsYWt5
LiBXaXRoIHRoZSB0ZXN0UnVubmVyLmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSgpIGdldHRlcgorICAg
ICAgICBpdCdzIHBvc3NpYmxlIHRvIGNoZWNrIGFjY2VzcyBldmVuIGlmIGEgZnJhbWUgZG9lc24n
dCByZXNwb25kIHRpbWVseSB0bworICAgICAgICBwb3N0TWVzc2FnZSBhZnRlciBkZXRhY2ggYW5k
IGF0dGFjaC4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpo
YXNTdG9yYWdlQWNjZXNzRW50cnkgY29uc3QpOgorCiAyMDE4LTAxLTMxICBKYXZpZXIgRmVybmFu
ZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIGlubGluZS1ibG9jayBiYXNl
bGluZSBub3QgY29tcHV0ZWQgY29ycmVjdGx5IGZvciB2ZXJ0aWNhbC1scgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oCShyZXZpc2lvbiAyMjc5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUHJldmFsZW50RG9t
YWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucyk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBoYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWUoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFp
biwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzU3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNTdG9yYWdl
QWNjZXNzRW50cnkoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbikgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBTdHJpbmcm
IHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVTdG9yYWdlQWNjZXNzRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlE
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVN0b3JhZ2VBY2Nlc3NGb3JBbGxGcmFt
ZXNPblBhZ2UodWludDY0X3QgcGFnZUlEKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Q0ZOZXQuY3BwCShyZXZpc2lvbiAyMjc5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDYgKzMwNCwyNCBAQCBib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6aGFzU3RvcmFn
ZUFjCiAgICAgcmV0dXJuIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShnZXRQYXJ0aXRpb25pbmdE
b21haW4ocmVxdWVzdC51cmwoKSksIGdldFBhcnRpdGlvbmluZ0RvbWFpbihyZXF1ZXN0LmZpcnN0
UGFydHlGb3JDb29raWVzKCkpLCBmcmFtZUlELCBwYWdlSUQpOwogfQogCitib29sIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6aGFzU3RvcmFnZUFjY2Vzc0VudHJ5KGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VEb21haW4pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBwYWdlSUQgOiBtX2ZyYW1lc0dyYW50
ZWRTdG9yYWdlQWNjZXNzLmtleXMoKSkgeworICAgICAgICBhdXRvIGl0MSA9IG1fZnJhbWVzR3Jh
bnRlZFN0b3JhZ2VBY2Nlc3MuZmluZChwYWdlSUQpOworICAgICAgICBpZiAoaXQxID09IG1fZnJh
bWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZUlEIDogaXQxLT52YWx1ZS5rZXlzKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXQyID0gaXQxLT52YWx1ZS5maW5kKGZyYW1lSUQpOworICAgICAgICAg
ICAgaWYgKGl0MiA9PSBpdDEtPnZhbHVlLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGl0Mi0+dmFsdWUgPT0gcmVzb3VyY2VEb21haW4pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorICAgIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdyYW50U3RvcmFnZUFjY2Vz
c0ZvckZyYW1lKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmly
c3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKQogewogICAg
IFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5RG9tYWluKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Mjc5NDcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE4LTAxLTMxICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQSTogQWRkIHRlc3RSdW5uZXIuaGFzU3RvcmFn
ZUFjY2Vzc0VudHJ5KCkgZ2V0dGVyIHRvIG1ha2UgdGVzdGluZyBlYXNpZXIgYW5kIG1vcmUgZXhw
bGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MTYwMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzY0NzU4Mzc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNz
L3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNj
ZXNzLmh0bWwKKyAgICAgICAgd2FzIGZvdW5kIHRvIGJlIGZsYWt5LiBXaXRoIHRoZSB0ZXN0UnVu
bmVyLmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSgpIGdldHRlcgorICAgICAgICBpdCdzIHBvc3NpYmxl
IHRvIGNoZWNrIGFjY2VzcyBldmVuIGlmIGEgZnJhbWUgZG9lc24ndCByZXNwb25kIHRpbWVseSB0
bworICAgICAgICBwb3N0TWVzc2FnZSBhZnRlciBkZXRhY2ggYW5kIGF0dGFjaC4gCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpoYXNTdG9yYWdlQWNjZXNzRW50cnkpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfaGFz
U3RvcmFnZUFjY2Vzc0VudHJ5OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTdG9yYWdlQWNjZXNzRW50cnkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aGFzU3RvcmFnZUFjY2Vzc0VudHJ5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NBbmRTZXRUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
Lmg6CisKIDIwMTgtMDEtMzEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI3OTQyLgpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJl
dmlzaW9uIDIyNzkwNCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDE0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6Omhhc1N0b3JhZ2VBY2Nlc3NGb3IKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6Omhhc1N0b3JhZ2VBY2Nlc3NFbnRyeShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAg
ICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpTdG9yYWdlQWNjZXNzUmVxdWVzdFJlc3VsdChuZXR3b3JrU3RvcmFnZVNlc3Npb24t
Pmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeShyZXNvdXJjZURvbWFpbiksIGNvbnRleHRJZCksIDApOwor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBh
cnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKICAgICBib29sIGlzU3RvcmFnZUdyYW50ZWQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9u
IDIyNzkwNCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICNpZiBIQVZFKENG
TkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKICAgICB2b2lkIHVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzKFBBTDo6U2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZG9tYWluc1RvUGFydGl0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9t
YWluc1RvQmxvY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9OZWl0aGVyUGFydGl0
aW9uTm9yQmxvY2ssIGJvb2wgc2hvdWxkQ2xlYXJGaXJzdCk7CiAgICAgdm9pZCBoYXNTdG9yYWdl
QWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21h
aW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCB1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgaGFzU3RvcmFnZUFj
Y2Vzc0VudHJ5KFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCB1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmlu
ZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCB1
aW50NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlUHJldmFsZW50RG9tYWlucyhQQUw6
OlNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyNzkwNCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTg0
LDYgKzg0LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZQogI2lm
IEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAgIFVwZGF0ZVByZXZhbGVu
dERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvUGFydGl0aW9uLCBWZWN0b3I8U3RyaW5nPiBkb21h
aW5zVG9CbG9jaywgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJs
b2NrLCBib29sIHNob3VsZENsZWFyRmlyc3QpCiAgICAgSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1l
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHJlc291cmNlRG9tYWluLCBTdHJpbmcg
Zmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCB1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgSGFzU3RvcmFnZUFjY2Vzc0VudHJ5KFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgU3RyaW5nIHJlc291cmNlRG9tYWluLCB1aW50NjRfdCBjb250ZXh0SWQpCiAg
ICAgR3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBT
dHJpbmcgcmVzb3VyY2VEb21haW4sIFN0cmluZyBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBSZW1vdmVQ
cmV2YWxlbnREb21haW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgVmVjdG9yPFN0cmluZz4g
ZG9tYWluc1dpdGhJbnRlcmFjdGlvbik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAkocmV2aXNpb24gMjI3OTA0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDExICsxNTEs
MTIgQEAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdAogICAgIHJldHVy
biBtZXJnZWREYXRlczsKIH0KIAotV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5LCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIHRlc3RpbmdD
YWxsYmFjaywgYm9vbCBpc0VwaGVtZXJhbCwgVXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0
aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyJiYgdXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0
aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyLCBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVy
JiYgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciwgR3JhbnRTdG9yYWdlQWNjZXNzRm9y
RnJhbWVIYW5kbGVyJiYgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyLCBSZW1vdmVQ
cmV2YWxlbnREb21haW5zSGFuZGxlciYmIHJlbW92ZURvbWFpbnNIYW5kbGVyKQorV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29u
c3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBGdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIHRlc3RpbmdDYWxsYmFjaywgYm9vbCBpc0VwaGVtZXJhbCwgVXBk
YXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyJiYgdXBk
YXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyLCBIYXNT
dG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyJiYgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFu
ZGxlciwgSGFzU3RvcmFnZUFjY2Vzc0VudHJ5SGFuZGxlciYmIGhhc1N0b3JhZ2VBY2Nlc3NFbnRy
eUhhbmRsZXIsIEdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciYmIGdyYW50U3RvcmFn
ZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciwgUmVtb3ZlUHJldmFsZW50RG9tYWluc0hhbmRsZXImJiBy
ZW1vdmVEb21haW5zSGFuZGxlcikKICAgICA6IG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVl
IiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVdGlsaXR5KSkKICAg
ICAsIG1fcGVyc2lzdGVudFN0b3JhZ2UoKnRoaXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnksIGlzRXBoZW1lcmFsID8gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlOjpJc1JlYWRPbmx5OjpZZXMgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2U6OklzUmVhZE9ubHk6Ok5vKQogICAgICwgbV91cGRhdGVQcmV2YWxlbnREb21haW5zVG9Q
YXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIoV1RGTW92ZSh1cGRhdGVQcmV2YWxlbnREb21h
aW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIpKQogICAgICwgbV9oYXNTdG9yYWdl
QWNjZXNzRm9yRnJhbWVIYW5kbGVyKFdURk1vdmUoaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFu
ZGxlcikpCisgICAgLCBtX2hhc1N0b3JhZ2VBY2Nlc3NFbnRyeUhhbmRsZXIoV1RGTW92ZShoYXNT
dG9yYWdlQWNjZXNzRW50cnlIYW5kbGVyKSkKICAgICAsIG1fZ3JhbnRTdG9yYWdlQWNjZXNzRm9y
RnJhbWVIYW5kbGVyKFdURk1vdmUoZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKSkK
ICAgICAsIG1fcmVtb3ZlRG9tYWluc0hhbmRsZXIoV1RGTW92ZShyZW1vdmVEb21haW5zSGFuZGxl
cikpCiAgICAgLCBtX2RhaWx5VGFza3NUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKQpAQCAtMjgwLDYg
KzI4MSwxNSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzCiAgICAg
fSk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdl
QWNjZXNzRW50cnkoU3RyaW5nJiYgaG9zdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAg
IG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3QpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgbV9oYXNT
dG9yYWdlQWNjZXNzRW50cnlIYW5kbGVyKHByaW1hcnlEb21haW4sIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICB9KTsKK30KKwogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
cXVlc3RTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJh
bWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlv
bkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKHN1YkZyYW1l
SG9zdCAhPSB0b3BGcmFtZUhvc3QpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIy
NzkwNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTIgQEAgY2xhc3MgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGZpbgogcHVibGljOgogICAgIHVzaW5nIFVwZGF0ZVBy
ZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciA9IFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUGFydGl0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBk
b21haW5zVG9OZWl0aGVyUGFydGl0aW9uTm9yQmxvY2ssIFNob3VsZENsZWFyRmlyc3QpPjsKICAg
ICB1c2luZyBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0
eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkZ1bmN0aW9u
PHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKT47CisgICAgdXNpbmcgSGFzU3RvcmFn
ZUFjY2Vzc0VudHJ5SGFuZGxlciA9IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHJl
c291cmNlRG9tYWluLCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxi
YWNrKT47CiAgICAgdXNpbmcgR3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyID0gV1RG
OjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmlu
ZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBX
VEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCB3YXNHcmFudGVkKT4mJiBjYWxsYmFjayk+OwogICAgIHVz
aW5nIFJlbW92ZVByZXZhbGVudERvbWFpbnNIYW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkIChj
b25zdCBWZWN0b3I8U3RyaW5nPiYpPjsKLSAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSwgRnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJik+JiYgdGVzdGluZ0NhbGxi
YWNrLCBib29sIGlzRXBoZW1lcmFsLCBVcGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25P
ckJsb2NrQ29va2llc0hhbmRsZXImJiB1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25P
ckJsb2NrQ29va2llc0hhbmRsZXIgPSBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBTaG91bGRDbGVhckZpcnN0KSB7
IH0sIEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXImJiBoYXNTdG9yYWdlQWNjZXNzRm9y
RnJhbWVIYW5kbGVyID0gW10oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3Qs
IHVpbnQ2NF90LCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYpIHsgfSwgR3JhbnRTdG9yYWdl
QWNjZXNzRm9yRnJhbWVIYW5kbGVyJiYgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVy
ID0gW10oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYpIHsgfSwgUmVtb3ZlUHJldmFsZW50RG9tYWluc0hh
bmRsZXImJiByZW1vdmVEb21haW5zSGFuZGxlciA9IFtdIChjb25zdCBWZWN0b3I8U3RyaW5nPiYp
IHsgfSkKKyAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgRnVuY3Rp
b248dm9pZCAoY29uc3QgU3RyaW5nJik+JiYgdGVzdGluZ0NhbGxiYWNrLCBib29sIGlzRXBoZW1l
cmFsLCBVcGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRs
ZXImJiB1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRs
ZXIgPSBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBTaG91bGRDbGVhckZpcnN0KSB7IH0sIEhhc1N0b3JhZ2VBY2Nl
c3NGb3JGcmFtZUhhbmRsZXImJiBoYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyID0gW10o
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYpIHsgfSwgSGFzU3RvcmFnZUFjY2Vzc0VudHJ5SGFuZGxlciYm
IGhhc1N0b3JhZ2VBY2Nlc3NFbnRyeUhhbmRsZXIgPSBbXShjb25zdCBTdHJpbmcmLCBGdW5jdGlv
bjx2b2lkKGJvb2wpPiYmKSB7IH0sIEdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciYm
IGdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciA9IFtdKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wp
PiYmKSB7IH0sIFJlbW92ZVByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYgcmVtb3ZlRG9tYWluc0hh
bmRsZXIgPSBbXSAoY29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0pCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUocmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgV1RGTW92ZSh0ZXN0aW5nQ2FsbGJhY2spLCBpc0Vw
aGVtZXJhbCwgV1RGTW92ZSh1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2Nr
Q29va2llc0hhbmRsZXIpLCBXVEZNb3ZlKGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIp
LCBXVEZNb3ZlKGdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciksIFdURk1vdmUocmVt
b3ZlRG9tYWluc0hhbmRsZXIpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
LCBXVEZNb3ZlKHRlc3RpbmdDYWxsYmFjayksIGlzRXBoZW1lcmFsLCBXVEZNb3ZlKHVwZGF0ZVBy
ZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciksIFdURk1vdmUo
aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciksIFdURk1vdmUoaGFzU3RvcmFnZUFjY2Vz
c0VudHJ5SGFuZGxlciksIFdURk1vdmUoZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVy
KSwgV1RGTW92ZShyZW1vdmVEb21haW5zSGFuZGxlcikpKTsKICAgICB9CiAKICAgICB+V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CkBAIC04NCw2ICs4NSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFZlY3RvcjxXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiYmIG9yaWdpbnMpOwogCiAgICAgdm9pZCBoYXNTdG9yYWdlQWNj
ZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
Ym9vbCk+JiYgY2FsbGJhY2spOworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzc0VudHJ5KFN0cmlu
ZyYmIGhvc3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgcmVx
dWVzdFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFt
ZUhvc3QsIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9u
SGFuZGxlcjx2b2lkIChib29sKT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2Vzc0NhbGxiYWNrKGJvb2wgd2FzR3JhbnRlZCwgdWludDY0X3QgY29udGV4dElkKTsKIApA
QCAtMTQ1LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25z
dCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUoY29uc3QgU3RyaW5nJiwgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiB0ZXN0aW5n
Q2FsbGJhY2ssIGJvb2wgaXNFcGhlbWVyYWwsIFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRp
dGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciYmLCBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5k
bGVyJiYsIEdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlciYmLCBSZW1vdmVQcmV2YWxl
bnREb21haW5zSGFuZGxlciYmKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
Y29uc3QgU3RyaW5nJiwgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiB0ZXN0aW5nQ2Fs
bGJhY2ssIGJvb2wgaXNFcGhlbWVyYWwsIFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlv
bk9yQmxvY2tDb29raWVzSGFuZGxlciYmLCBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVy
JiYsIEhhc1N0b3JhZ2VBY2Nlc3NFbnRyeUhhbmRsZXImJiwgR3JhbnRTdG9yYWdlQWNjZXNzRm9y
RnJhbWVIYW5kbGVyJiYsIFJlbW92ZVByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYpOwogCiAgICAg
dm9pZCByZW1vdmVEYXRhUmVjb3JkcygpOwogCkBAIC0yMDEsNiArMjAzLDcgQEAgcHJpdmF0ZToK
IAogICAgIFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFu
ZGxlciBtX3VwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFu
ZGxlcjsKICAgICBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyIG1faGFzU3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lSGFuZGxlcjsKKyAgICBIYXNTdG9yYWdlQWNjZXNzRW50cnlIYW5kbGVyIG1f
aGFzU3RvcmFnZUFjY2Vzc0VudHJ5SGFuZGxlcjsKICAgICBHcmFudFN0b3JhZ2VBY2Nlc3NGb3JG
cmFtZUhhbmRsZXIgbV9ncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXI7CiAgICAgUmVt
b3ZlUHJldmFsZW50RG9tYWluc0hhbmRsZXIgbV9yZW1vdmVEb21haW5zSGFuZGxlcjsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyMjc5MDQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
NDYsNiArNjQ2LDIwIEBAICsgKHZvaWQpX2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3IK
ICAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9y
QWxsT3JpZ2lucygpOwogfQogCistICh2b2lkKV9oYXNTdG9yYWdlQWNjZXNzRW50cnk6KE5TU3Ry
aW5nICopaG9zdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0
YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOworICAgIGlmICghc3RvcmUpIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoTk8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKTsKKyAgICBzdG9yZS0+aGFzU3RvcmFnZUFjY2Vzc0VudHJ5KGhvc3QsIFtjb21w
bGV0aW9uSGFuZGxlckNvcHldKGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlckNvcHkoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfSk7Cit9CisK
IEBlbmQKIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmgJKHJldmlzaW9uIDIyNzkwNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDYgKzg4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogLSAo
dm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmVNb2RpZmllZFNpbmNlSG91cnM6KHVuc2lnbmVkKWhvdXJzIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEz
KSwgaW9zKDExLjApKTsKIC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2s6KG51bGxhYmxlIHZvaWQgKF4pKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmlu
ZyAqKSljYWxsYmFjayBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMyksIGlvcygxMS4wKSk7
CistICh2b2lkKV9oYXNTdG9yYWdlQWNjZXNzRW50cnk6KE5TU3RyaW5nICopaG9zdCBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiArICh2b2lkKV9hbGxv
d1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cAkocmV2aXNpb24gMjI3OTA0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDYgKzQyMCwxNCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Omhhc1N0b3JhZ2VBY2NlCiAgICAgc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6Okhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShzZXNzaW9uSUQs
IHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIGNvbnRl
eHRJZCksIDApOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Omhhc1N0b3JhZ2VBY2Nl
c3NFbnRyeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VE
b21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAg
YXV0byBjb250ZXh0SWQgPSBuZXh0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb250ZXh0SWQoKTsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RvcmFnZUFjY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tNYXAuYWRk
KGNvbnRleHRJZCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6Okhhc1N0b3JhZ2VBY2Nlc3NFbnRyeShzZXNzaW9uSUQsIHJlc291cmNlRG9tYWluLCBj
b250ZXh0SWQpLCAwKTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpncmFudFN0b3Jh
Z2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY2FsbGJhY2spCiB7CiAgICAgYXV0byBjb250ZXh0SWQgPSBuZXh0UmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NDb250ZXh0SWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMjc5MDQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAKICNpZiBIQVZFKENGTkVU
V09SS19TVE9SQUdFX1BBUlRJVElPTklORykKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3NGb3JG
cmFtZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOworICAgIHZvaWQg
aGFzU3RvcmFnZUFjY2Vzc0VudHJ5KFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291
cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdy
YW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJl
c291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
YWxsYmFjayk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIyNzkw
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAyLDYgKzEyMDIsMTIgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzRgogICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKS0+aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKG1fc2Vzc2lvbklELCByZXNvdXJj
ZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxi
YWNrKSk7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzc0VudHJ5
SGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wgaGFzQWNjZXNzKT4mJiBjYWxsYmFjaykKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpLT5oYXNTdG9yYWdlQWNjZXNzRW50cnkobV9zZXNzaW9uSUQsIHJlc291cmNlRG9tYWlu
LCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4s
IGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNHcmFudGVkKT4m
JiBjYWxsYmFjaykKIHsKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCkBAIC0xNDM2LDYgKzE0NDIsOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmVuYWJsZVJl
c291cmNlTG9hCiAgICAgICAgIHVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxv
Y2tDb29raWVzKGRvbWFpbnNUb1BhcnRpdGlvbiwgZG9tYWluc1RvQmxvY2ssIGRvbWFpbnNUb05l
aXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgc2hvdWxkQ2xlYXJGaXJzdCk7CiAgICAgfSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VE
b21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYXNBY2Nl
c3MpPiYmIGNhbGxiYWNrKSB7CiAgICAgICAgIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRs
ZXIocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RG
TW92ZShjYWxsYmFjaykpOworICAgIH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIChjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wgaGFzQWNjZXNzKT4mJiBjYWxsYmFjaykgeworICAgICAgICBoYXNTdG9yYWdlQWNj
ZXNzRW50cnlIYW5kbGVyKHJlc291cmNlRG9tYWluLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
fSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCB3YXNHcmFudGVkKT4mJiBjYWxsYmFjaykgewogICAgICAgICBncmFudFN0b3JhZ2VBY2Nlc3NG
b3JGcmFtZUhhbmRsZXIocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQs
IHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3Zl
KSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAyMjc5MDQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9Q
QVJUSVRJT05JTkcpCiAgICAgdm9pZCB1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25P
ckJsb2NrQ29va2llcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUGFydGl0aW9uLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBkb21haW5zVG9OZWl0aGVyUGFydGl0aW9uTm9yQmxvY2ssIFNob3VsZENsZWFyRmlyc3QpOwog
ICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihjb25zdCBTdHJpbmcmIHJl
c291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wg
aGFzQWNjZXNzKT4mJiBjYWxsYmFjayk7CisgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzRW50cnlI
YW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCBoYXNBY2Nlc3MpPiYmKTsKICAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ZvckZy
YW1lSGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZp
cnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgd2FzR3JhbnRlZCk+JiYgY2FsbGJhY2spOwogICAg
IHZvaWQgcmVtb3ZlUHJldmFsZW50RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
cyk7CiAgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3Ry
aW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdU
Rjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY2FsbGJhY2spOwpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3
OTQ3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTgtMDEtMzEgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RvcmFnZSBBY2Nlc3MgQVBJOiBBZGQgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNjZXNzRW50
cnkoKSBnZXR0ZXIgdG8gbWFrZSB0ZXN0aW5nIGVhc2llciBhbmQgbW9yZSBleHBsaWNpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjAxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zNjQ3NTgzNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1h
bmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbAor
ICAgICAgICB3YXMgZm91bmQgdG8gYmUgZmxha3kuIFdpdGggdGhlIHRlc3RSdW5uZXIuaGFzU3Rv
cmFnZUFjY2Vzc0VudHJ5KCkgZ2V0dGVyCisgICAgICAgIGl0J3MgcG9zc2libGUgdG8gY2hlY2sg
YWNjZXNzIGV2ZW4gaWYgYSBmcmFtZSBkb2Vzbid0IHJlc3BvbmQgdGltZWx5IHRvCisgICAgICAg
IHBvc3RNZXNzYWdlIGFmdGVyIGRldGFjaCBhbmQgYXR0YWNoLiAKKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RvcmFnZUFjY2Vzc0VudHJ5KToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYXNTdG9yYWdlQWNjZXNzRW50cnkpOgorCiAyMDE4
LTAxLTMxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyNzk0Mi4KSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIyNzkwNCkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYg
KzE4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRl
RGF0YVJlbW92YWwoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRl
KCk7CiAKKyAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NFbnRyeShXS1N0cmluZ1JlZiBob3N0TmFt
ZSk7CisKICAgICBXS0FycmF5UmVmIG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVuUGFuZWxGaWxlVVJMcy5nZXQoKTsgfQogICAgIHZvaWQgc2V0T3BlblBhbmVsRmlsZVVS
THMoV0tBcnJheVJlZiBmaWxlVVJMcykgeyBtX29wZW5QYW5lbEZpbGVVUkxzID0gZmlsZVVSTHM7
IH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDIyNzkwNCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsNyArODM1LDE2IEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgV0tDb29raWVNYW5hZ2VyU2V0U3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuY29udGV4dCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICAKKworICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzU3RvcmFnZUFjY2Vzc0VudHJ5Iikp
IHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYm9vbCBoYXNTdG9y
YWdlQWNjZXNzRW50cnkgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzU3RvcmFnZUFj
Y2Vzc0VudHJ5KGhvc3ROYW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1
bHQoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKGhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUiKSkgewog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9u
IDIyNzkwNCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw3ICs3OTMsMTYgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYgogICAgIAogICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9Ci0gICAgCisKK2Jv
b2wgVGVzdFJ1bm5lcjo6aGFzU3RvcmFnZUFjY2Vzc0VudHJ5KEpTU3RyaW5nUmVmIGhvc3ROYW1l
KQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzU3RvcmFnZUFjY2Vzc0VudHJ5IikpOwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOworICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gMDsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOworICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKTsKK30KKwog
ZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1lKCkKIHsKICAgICByZXR1cm4gY3VycmVudFRp
bWUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMjc5MDQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYg
KzI4MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7
CiAgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sKTsKICAg
ICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOworICAgIGJvb2wgaGFzU3Rv
cmFnZUFjY2Vzc0VudHJ5KEpTU3RyaW5nUmVmIGhvc3ROYW1lKTsKIAogICAgIC8vIEN1c3RvbSBm
dWxsIHNjcmVlbiBiZWhhdmlvci4KICAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhh
dmlvcihib29sIHZhbHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0K
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjI3OTA0KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVy
IHsKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbGVhbiBhY2NlcHQpOwogICAg
IHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbGVhbiBlbmFibGVk
KTsKICAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7
CisgICAgYm9vbGVhbiBoYXNTdG9yYWdlQWNjZXNzRW50cnkoRE9NU3RyaW5nIGhvc3ROYW1lKTsK
IAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNlLCBET01T
dHJpbmcgdmFsdWUpOwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RD
b250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
b2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyMjc5MDQpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ1Niw2ICs0NTYsMjAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc1Jl
c2V0VG9DbwogewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV07CiB9CisK
K2Jvb2wgVGVzdENvbnRyb2xsZXI6Omhhc1N0b3JhZ2VBY2Nlc3NFbnRyeShXS1N0cmluZ1JlZiBo
b3N0TmFtZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgaXNEYXRhUmVhZHkgPSBmYWxzZTsKKyAgICBf
X2Jsb2NrIGJvb2wgaGFzU3RvcmFnZUFjY2VzcyA9IGZhbHNlOworICAgIFtnbG9iYWxXZWJWaWV3
Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9oYXNTdG9yYWdlQWNjZXNzRW50cnk6dG9O
U1N0cmluZyhob3N0TmFtZSkgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIF9oYXNTdG9yYWdlQWNj
ZXNzKSB7CisgICAgICAgIGhhc1N0b3JhZ2VBY2Nlc3MgPSBfaGFzU3RvcmFnZUFjY2VzczsKKyAg
ICAgICAgaXNEYXRhUmVhZHkgPSB0cnVlOworICAgIH1dOworICAgIHBsYXRmb3JtUnVuVW50aWwo
aXNEYXRhUmVhZHksIDApOworICAgIAorICAgIHJldHVybiBoYXNTdG9yYWdlQWNjZXNzOworfQor
CiAjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjc5NDcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMyBAQAorMjAxOC0wMS0zMSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9yYWdlIEFjY2VzcyBBUEk6IEFkZCB0ZXN0UnVubmVy
Lmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSgpIGdldHRlciB0byBtYWtlIHRlc3RpbmcgZWFzaWVyIGFu
ZCBtb3JlIGV4cGxpY2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODE2MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2NDc1ODM3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHAvdGVzdHMvc3Rv
cmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5v
dC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAgIHdhcyBmb3VuZCB0byBiZSBmbGFreS4gV2l0aCB0
aGUgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNjZXNzRW50cnkoKSBnZXR0ZXIKKyAgICAgICAgaXQn
cyBwb3NzaWJsZSB0byBjaGVjayBhY2Nlc3MgZXZlbiBpZiBhIGZyYW1lIGRvZXNuJ3QgcmVzcG9u
ZCB0aW1lbHkgdG8KKyAgICAgICAgcG9zdE1lc3NhZ2UgYWZ0ZXIgZGV0YWNoIGFuZCBhdHRhY2gu
IAorCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50
LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNj
ZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBodHRwL3Rlc3Rz
L3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tbmF2aWdhdGUtc2hv
dWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAgICAgICBubyBsb25nZXIgbWFya2VkIGFz
IGZsYWt5LiBOb3RlIHRoYXQgdGhlIHdyb25nIHRlc3Qgd2FzIG1hcmtlZCBmbGFreS4gSXQgc2hv
dWxkIGhhdmUgYmVlbgorICAgICAgICAgICAgaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVl
c3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0
bWwuCisKIDIwMTgtMDEtMzEgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgaW5saW5lLWJsb2NrIGJhc2VsaW5lIG5vdCBjb21wdXRlZCBjb3JyZWN0
bHkgZm9yIHZlcnRpY2FsLWxyCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2VB
Y2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2
ZS1hY2Nlc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hv
dWxkLW5vdC1oYXZlLWFjY2Vzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyNzkwNCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nl
c3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTQsNyArNCw4IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEEKIAogCiBQQVNTIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkLiBkb2N1bWVudC5j
b29raWUgPT0gZmlyc3RQYXJ0eUNvb2tpZT12YWx1ZSwgY29va2llcyBzZWVuIHNlcnZlci1zaWRl
ID09IHsiZmlyc3RQYXJ0eUNvb2tpZSI6InZhbHVlIn0KLVBBU1MgUEFTUy4gZG9jdW1lbnQuY29v
a2llID09ICwgY29va2llcyBzZWVuIHNlcnZlci1zaWRlID09ICJObyBjb29raWVzIgorUEFTUyBU
aGVyZSBpcyBhIHN0b3JhZ2UgYWNjZXNzIGVudHJ5IGZvciBsb2NhbGhvc3QuCitQQVNTIFRoZXJl
IGlzIG5vIHN0b3JhZ2UgYWNjZXNzIGVudHJ5IGZvciBsb2NhbGhvc3QgYWZ0ZXIgaWZyYW1lIGRl
dGFjaC4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdy
YW50LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5k
LWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwJKHJl
dmlzaW9uIDIyNzkwNCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9y
ZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vz
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyOCArMjMsMzMgQEAKICAgICAgICAgfQogCiAg
ICAgICAgIGNvbnN0IGlmcmFtZUlEID0gIlRoZUlmcmFtZVRoYXRSZXF1ZXN0c1N0b3JhZ2VBY2Nl
c3MiOwotICAgICAgICBmdW5jdGlvbiBhc2tJZnJhbWVJZkl0SGFzU3RvcmFnZUFjY2VzcygpIHsK
LSAgICAgICAgICAgIHZhciBpZnJhbWVDb250ZW50V2luZG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWZyYW1lSUQpLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgICAgICBpZnJhbWVDb250ZW50
V2luZG93LnBvc3RNZXNzYWdlKCJyZXBvcnRCYWNrQ29va2llcyIsICJodHRwOi8vbG9jYWxob3N0
OjgwMDAiKTsKKyAgICAgICAgZnVuY3Rpb24gYXNrSWZJZnJhbWVIYXNTdG9yYWdlQWNjZXNzKCkg
eworICAgICAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSgibG9j
YWxob3N0IikpCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiVGhlcmUgaXMgbm8gc3RvcmFn
ZSBhY2Nlc3MgZW50cnkgZm9yIGxvY2FsaG9zdCBhZnRlciBpZnJhbWUgZGV0YWNoLiIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGhlcmUgaXMgc3Rp
bGwgYSBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3IgbG9jYWxob3N0IGFmdGVyIGlmcmFtZSBkZXRh
Y2guIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBmdW5jdGlvbiBkZXRhY2hJZnJhbWVBbmRBc2tXaGV0aGVySXRTdGlsbEhh
c1N0b3JhZ2VBY2Nlc3MoKSB7CisgICAgICAgIGZ1bmN0aW9uIGRldGFjaElmcmFtZUFuZENoZWNr
V2hldGhlckl0U3RpbGxIYXNTdG9yYWdlQWNjZXNzKCkgeworICAgICAgICAgICAgaWYgKHRlc3RS
dW5uZXIuaGFzU3RvcmFnZUFjY2Vzc0VudHJ5KCJsb2NhbGhvc3QiKSkKKyAgICAgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCJUaGVyZSBpcyBhIHN0b3JhZ2UgYWNjZXNzIGVudHJ5IGZvciBsb2NhbGhv
c3QuIik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJU
aGVyZSBpcyBubyBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3IgbG9jYWxob3N0LiIpOworICAgICAg
ICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgdmFy
IHRoZUlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlmcmFtZUlEKTsKLSAgICAgICAg
ICAgIHRoZUlmcmFtZS5vbmxvYWQgPSBhc2tJZnJhbWVJZkl0SGFzU3RvcmFnZUFjY2VzczsKKyAg
ICAgICAgICAgIHRoZUlmcmFtZS5vbmxvYWQgPSBhc2tJZklmcmFtZUhhc1N0b3JhZ2VBY2Nlc3M7
CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmFw
cGVuZENoaWxkKHRoZUlmcmFtZSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBleHBlY3Rl
ZFBhc3NNZXNzYWdlcyA9IDI7Ci0gICAgICAgIHZhciBwYXNzTWVzc2FnZXNSZWNlaXZlZCA9IDA7
CiAgICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KSB7CiAgICAgICAgICAgICBp
ZiAoZXZlbnQub3JpZ2luID09PSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwIikgewogICAgICAgICAg
ICAgICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoIlBBU1MiKSAhPT0gLTEpIHsKICAgICAgICAg
ICAgICAgICAgICAgdGVzdFBhc3NlZChldmVudC5kYXRhLnJlcGxhY2UoIlBBU1MgIiwgIiIpKTsK
LSAgICAgICAgICAgICAgICAgICAgcGFzc01lc3NhZ2VzUmVjZWl2ZWQrKzsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhc3NNZXNzYWdlc1JlY2VpdmVkID49IGV4cGVjdGVkUGFzc01lc3NhZ2Vz
KQotICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hJZnJhbWVBbmRBc2tXaGV0
aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgZGV0YWNo
SWZyYW1lQW5kQ2hlY2tXaGV0aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKGV2ZW50LmRh
dGEpOwogICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CkBAIC02MCwxNCArNjUsNyBA
QAogICAgICAgICAgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50
Lm9mZnNldFdpZHRoIC8gMjsKICAgICAgICAgICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CiAgICAgICAgICAgICBVSUhlbHBlci5h
Y3RpdmF0ZUF0KGNlbnRlclgsIGNlbnRlclkpLnRoZW4oCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigiZXNjYXBlIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiTm8gZXZlbnRTZW5kZXIuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uICgpIHsgfSwKICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlByb21pc2UgcmVqZWN0ZWQuIik7CiAgICAg
ICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKQEAgLTc3LDggKzc1LDggQEAKIAogICAgICAg
ICBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgICAgICAgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9u
Lmhhc2ggIT09ICIjZWxlbWVudEFjdGl2YXRlZCIpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmF0
ZUVsZW1lbnQoaWZyYW1lSUQpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhh
c2ggPSAiZWxlbWVudEFjdGl2YXRlZCI7CisgICAgICAgICAgICAgICAgYWN0aXZhdGVFbGVtZW50
KGlmcmFtZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC05OSw2ICs5Nyw4IEBA
CiAgICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keT4KLTxpZnJhbWUgc2FuZGJveD0iYWxsb3ct
c3RvcmFnZS1hY2Nlc3MtYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXNjcmlwdHMgYWxsb3ctc2Ft
ZS1vcmlnaW4gYWxsb3ctbW9kYWxzIiBvbmxvYWQ9InJ1blRlc3QoKSIgaWQ9IlRoZUlmcmFtZVRo
YXRSZXF1ZXN0c1N0b3JhZ2VBY2Nlc3MiIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3N0b3Jh
Z2VBY2Nlc3MvcmVzb3VyY2VzL3JlcXVlc3Qtc3RvcmFnZS1hY2Nlc3MtaWZyYW1lLmh0bWwjdXNl
clNob3VsZEdyYW50QWNjZXNzLHVzZXJTaG91bGRCZUNvbnN1bHRlZCxwb2xpY3lTaG91bGRHcmFu
dEFjY2VzcyI+PC9pZnJhbWU+Cis8ZGl2PgorICAgIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc3Rv
cmFnZS1hY2Nlc3MtYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1v
cmlnaW4gYWxsb3ctbW9kYWxzIiBvbmxvYWQ9InJ1blRlc3QoKSIgaWQ9IlRoZUlmcmFtZVRoYXRS
ZXF1ZXN0c1N0b3JhZ2VBY2Nlc3MiIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3N0b3JhZ2VB
Y2Nlc3MvcmVzb3VyY2VzL3JlcXVlc3Qtc3RvcmFnZS1hY2Nlc3MtaWZyYW1lLmh0bWwjdXNlclNo
b3VsZEdyYW50QWNjZXNzLHVzZXJTaG91bGRCZUNvbnN1bHRlZCxwb2xpY3lTaG91bGRHcmFudEFj
Y2VzcyI+PC9pZnJhbWU+Cis8L2Rpdj4KIDwvYm9keT4KIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBl
Y3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0
RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMjc5MDQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc2MCw4ICs3NjAsNyBA
QCBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdXNlci1pCiBbIEhpZ2hTaWVycmEr
IF0gaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL2hhcy1zdG9yYWdlLWFjY2Vzcy1mcm9tLXByZXZh
bGVudC1kb21haW4td2l0aC1ub24tcmVjZW50LXVzZXItaW50ZXJhY3Rpb24uaHRtbCBbIFBhc3Mg
XQogWyBIaWdoU2llcnJhKyBdIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9oYXMtc3RvcmFnZS1h
Y2Nlc3MtZnJvbS1wcmV2YWxlbnQtZG9tYWluLXdpdGgtcmVjZW50LXVzZXItaW50ZXJhY3Rpb24u
aHRtbCBbIFBhc3MgXQogWyBIaWdoU2llcnJhKyBdIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9y
ZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vz
cy5odG1sIFsgUGFzcyBdCi0KLXdlYmtpdC5vcmcvYi8xODE2MDEgWyBIaWdoU2llcnJhKyBSZWxl
YXNlIF0gaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10
aGVuLW5hdmlnYXRlLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbCBbIFBhc3MgRmFpbHVyZSBd
CitbIEhpZ2hTaWVycmErIFJlbGVhc2UgXSBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVz
dC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tbmF2aWdhdGUtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5o
dG1sIFsgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xNzM4NjEgWyBSZWxlYXNlIF0gaHR0cC90ZXN0
cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUuaHRtbCBb
IFBhc3MgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTczODYxIFsgUmVsZWFzZSBdIGh0dHAvdGVz
dHMvd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRlLWNyb3NzLW9yaWdpbi1mcmFtZS5odG1s
IFsgUGFzcyBUaW1lb3V0IF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333024</attachid>
            <date>2018-02-02 18:11:24 -0800</date>
            <delta_ts>2018-02-05 11:01:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181601-20180202181123.patch</filename>
            <type>text/plain</type>
            <size>38354</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE4LTAyLTAyICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQ
STogQWRkIHRlc3RSdW5uZXIuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoKSB0byBtYWtlIHRl
c3RpbmcgZWFzaWVyIGFuZCBtb3JlIGV4cGxpY2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2
NDc1ODM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgdGVzdCB1cGRhdGVkLgorCisgICAgICAgIGh0dHAvdGVz
dHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hv
dWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAgIHdhcyBmb3VuZCB0byBiZSBmbGFreS4g
V2l0aCB0aGUgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNjZXNzRW50cnkoKSBnZXR0ZXIKKyAgICAg
ICAgaXQncyBwb3NzaWJsZSB0byBjaGVjayBhY2Nlc3MgZXZlbiBpZiBhIGZyYW1lIGRvZXNuJ3Qg
cmVzcG9uZCB0aW1lbHkgdG8KKyAgICAgICAgcG9zdE1lc3NhZ2UgYWZ0ZXIgZGV0YWNoIGFuZCBh
dHRhY2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcyBjb25zdCk6CisKIDIwMTgtMDItMDIgIERvbiBPbG1zdGVh
ZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBSZW1vdmUgV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycyBkaXJlY3RvcnkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkocmV2aXNpb24gMjI3
OTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVByZXZhbGVudERvbWFpbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnMpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzU3RvcmFnZUFjY2Vz
c0ZvckZyYW1lKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmly
c3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IGdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBncmFudFN0b3JhZ2VBY2Nl
c3NGb3JGcmFtZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZp
cnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVTdG9yYWdlQWNjZXNzRm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZVN0b3JhZ2VBY2Nlc3NGb3JBbGxGcmFtZXNPblBhZ2UodWludDY0X3QgcGFnZUlEKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMjc5NzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNG
TmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNyBAQCBib29sIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6aGFzU3RvcmFnZUFjCiAgICAgcmV0dXJuIGhhc1N0b3JhZ2VBY2Nlc3NG
b3JGcmFtZShnZXRQYXJ0aXRpb25pbmdEb21haW4ocmVxdWVzdC51cmwoKSksIGdldFBhcnRpdGlv
bmluZ0RvbWFpbihyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpLCBmcmFtZUlELCBwYWdl
SUQpOwogfQogCitWZWN0b3I8U3RyaW5nPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVz
OworICAgIGZvciAoYXV0byYgcGFnZUlEIDogbV9mcmFtZXNHcmFudGVkU3RvcmFnZUFjY2Vzcy5r
ZXlzKCkpIHsKKyAgICAgICAgYXV0byBpdDEgPSBtX2ZyYW1lc0dyYW50ZWRTdG9yYWdlQWNjZXNz
LmZpbmQocGFnZUlEKTsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZUlEIDogaXQxLT52YWx1ZS5r
ZXlzKCkpCisgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChpdDEtPnZhbHVlLmZpbmQoZnJhbWVJ
RCktPnZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisgICAgCiB2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUoY29uc3QgU3Ry
aW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGZpcnN0
UGFydHlEb21haW4pOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODA0MCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTgtMDIt
MDIgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcmFn
ZSBBY2Nlc3MgQVBJOiBBZGQgdGVzdFJ1bm5lci5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcygp
IHRvIG1ha2UgdGVzdGluZyBlYXNpZXIgYW5kIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTYwMQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzY0NzU4Mzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFj
Y2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwKKyAgICAgICAgd2Fz
IGZvdW5kIHRvIGJlIGZsYWt5LiBXaXRoIHRoZSB0ZXN0UnVubmVyLmhhc1N0b3JhZ2VBY2Nlc3NF
bnRyeSgpIGdldHRlcgorICAgICAgICBpdCdzIHBvc3NpYmxlIHRvIGNoZWNrIGFjY2VzcyBldmVu
IGlmIGEgZnJhbWUgZG9lc24ndCByZXNwb25kIHRpbWVseSB0bworICAgICAgICBwb3N0TWVzc2Fn
ZSBhZnRlciBkZXRhY2ggYW5kIGF0dGFjaC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX2dldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRBbGxT
dG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzUmVzdWx0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE4LTAyLTAyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDb25maWd1cmUgc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSBvbiB0aGUgd2ViIHNpdGUgZGF0YSBzdG9yZSBh
bmQgbW92ZSBpdCB0byBhIENhY2hlcyBzdWJmb2xkZXIgYXMgYSBkZWZhdWx0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNp
b24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw2ICszNjEsMTQgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aGFzU3RvcmFnZUFjY2Vzc0ZvcgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgaWYgKGF1
dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFn
ZVNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6QWxsU3RvcmFnZUFjY2Vzc0VudHJp
ZXNSZXN1bHQobmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
cygpLCBjb250ZXh0SWQpLCAwKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4s
IGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCB1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgYm9vbCBpc1N0b3JhZ2VHcmFu
dGVkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyMjc5NzMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBA
QCBwdWJsaWM6CiAjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCiAgICAg
dm9pZCB1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llcyhQQUw6
OlNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1BhcnRpdGlvbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrLCBib29sIHNob3VsZENsZWFyRmlyc3Qp
OwogICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4s
IHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFBBTDo6U2Vzc2lvbklELCB1aW50
NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYg
Zmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCB1aW50
NjRfdCBjb250ZXh0SWQpOwogICAgIHZvaWQgcmVtb3ZlUHJldmFsZW50RG9tYWlucyhQQUw6OlNl
c3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyNzk3MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTg0LDYg
Kzg0LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZQogI2lmIEhB
VkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAgIFVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
VmVjdG9yPFN0cmluZz4gZG9tYWluc1RvUGFydGl0aW9uLCBWZWN0b3I8U3RyaW5nPiBkb21haW5z
VG9CbG9jaywgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2Nr
LCBib29sIHNob3VsZENsZWFyRmlyc3QpCiAgICAgSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHJlc291cmNlRG9tYWluLCBTdHJpbmcgZmly
c3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCB1aW50NjRf
dCBjb250ZXh0SWQpCisgICAgR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgR3JhbnRTdG9yYWdlQWNjZXNz
Rm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgcmVzb3VyY2VEb21haW4s
IFN0cmluZyBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIHVpbnQ2NF90IGNvbnRleHRJZCkKICAgICBSZW1vdmVQcmV2YWxlbnREb21haW5zKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhJbnRlcmFjdGlv
bik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkocmV2aXNpb24gMjI3OTczKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorI2lt
cG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJXS0hUVFBDb29raWVTdG9yZUludGVybmFsLmgi
CiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldLV2Vic2l0ZURhdGFSZWNvcmRJbnRl
cm5hbC5oIgpAQCAtNjQ2LDYgKzY0NywxOCBAQCArICh2b2lkKV9hbGxvd1dlYnNpdGVEYXRhUmVj
b3Jkc0ZvckFsbE9yCiAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKTsKIH0KIAorLSAodm9pZClfZ2V0QWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRvbWFpbnMpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUo
KS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIGRvbWFpbnMpIHsKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaURvbWFpbnM7CisgICAgICAgIGFwaURvbWFpbnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYg
ZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgICAgIGFwaURvbWFpbnMudW5jaGVja2VkQXBwZW5k
KEFQSTo6U3RyaW5nOjpjcmVhdGUoZG9tYWluKSk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIod3JhcHBlcihBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlEb21haW5zKSkpKTsKKyAg
ICB9KTsKK30KKwogQGVuZAogCiAjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VyczoodW5zaWduZWQpaG91cnMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOwogLSAodm9pZClfc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjazoobnVsbGFibGUgdm9pZCAoXikoV0tXZWJzaXRlRGF0YVN0b3Jl
ICosIE5TU3RyaW5nICopKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwg
aW9zKDExLjApKTsKKy0gKHZvaWQpX2dldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzOih2b2lkIChe
KShOU0FycmF5PE5TU3RyaW5nICo+ICpkb21haW5zKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKICsgKHZvaWQp
X2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIEBlbmQKIApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCShyZXZpc2lvbiAyMjc5NzMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNiArNDMz
LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3RvcmFnZUFjY2Vzc1IKICAgICBhdXRv
IGNhbGxiYWNrID0gbV9zdG9yYWdlQWNjZXNzUmVzcG9uc2VDYWxsYmFja01hcC50YWtlKGNvbnRl
eHRJZCk7CiAgICAgY2FsbGJhY2sod2FzR3JhbnRlZCk7CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYg
Y2FsbGJhY2spCit7CisgICAgYXV0byBjb250ZXh0SWQgPSBuZXh0UmVxdWVzdFN0b3JhZ2VBY2Nl
c3NDb250ZXh0SWQoKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXNDYWxsYmFja01hcC5hZGQoY29udGV4dElkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoc2Vz
c2lvbklELCBjb250ZXh0SWQpLCAwKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
bGxTdG9yYWdlQWNjZXNzRW50cmllc1Jlc3VsdChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMsIHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9hbGxTdG9yYWdlQWNj
ZXNzRW50cmllc0NhbGxiYWNrTWFwLnRha2UoY29udGV4dElkKTsKKyAgICBjYWxsYmFjayhXVEZN
b3ZlKGRvbWFpbnMpKTsKK30KICNlbmRpZgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNl
bmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lv
biAyMjc5NzMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAKICNp
ZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKICAgICB2b2lkIGhhc1N0b3Jh
Z2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURv
bWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1
aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2sp
OworICAgIHZvaWQgZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoUEFMOjpTZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJik7CiAgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY2FsbGJhY2spOwogI2VuZGlmCiAKQEAgLTEzNCw2ICsxMzUsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCiAgICAgdm9p
ZCBzdG9yYWdlQWNjZXNzUmVxdWVzdFJlc3VsdChib29sIHdhc0dyYW50ZWQsIHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCBhbGxTdG9yYWdlQWNjZXNzRW50cmllc1Jlc3VsdChWZWN0b3I8
U3RyaW5nPiYmIGRvbWFpbnMsIHVpbnQ2NF90IGNvbnRleHRJZCk7CiAjZW5kaWYKIAogICAgIC8v
IFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50CkBAIC0xNTcsNiArMTU5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIEhhc2hNYXA8dWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBzdWNjZXNz
KT4+IG1fd3JpdGVCbG9iVG9GaWxlUGF0aENhbGxiYWNrTWFwOwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHdhc0dyYW50ZWQpPj4gbV9zdG9y
YWdlQWNjZXNzUmVzcG9uc2VDYWxsYmFja01hcDsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+PiBtX2FsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyNzk3MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDYsNCArNDYsNSBAQCBtZXNzYWdlcyAtPiBOZXR3
b3JrUHJvY2Vzc1Byb3h5IExlZ2FjeVJlCiAjZW5kaWYKICNpZiBIQVZFKENGTkVUV09SS19TVE9S
QUdFX1BBUlRJVElPTklORykKICAgICBTdG9yYWdlQWNjZXNzUmVxdWVzdFJlc3VsdChib29sIHdh
c0dyYW50ZWQsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBBbGxTdG9yYWdlQWNjZXNzRW50cmll
c1Jlc3VsdChWZWN0b3I8U3RyaW5nPiBkb21haW5zLCB1aW50NjRfdCBjb250ZXh0SWQpCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMDIsNiArMTIwMiwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc1N0b3JhZ2VB
Y2Nlc3NGCiAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5oYXNTdG9yYWdl
QWNjZXNzRm9yRnJhbWUobV9zZXNzaW9uSUQsIHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9t
YWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAordm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY2FsbGJhY2spCit7CisgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKS0+Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY2FsbGJhY2spKTsKK30KKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpncmFu
dFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFp
biwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHdhc0dyYW50ZWQp
PiYmIGNhbGxiYWNrKQogewogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDIyNzk3MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDYgKzEyMyw3IEBAIHB1YmxpYzoKICNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdF
X1BBUlRJVElPTklORykKICAgICB2b2lkIHVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlv
bk9yQmxvY2tDb29raWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9QYXJ0aXRpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgU2hvdWxkQ2xlYXJGaXJzdCk7
CiAgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4m
Jik7CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3Ry
aW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIHdhc0dyYW50ZWQpPiYmIGNhbGxiYWNrKTsKICAgICB2b2lkIHJlbW92ZVByZXZhbGVu
dERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpOwogICAgIHZvaWQgaGFzU3Rv
cmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwg
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQgKGJvb2wpPiYmIGNhbGxiYWNrKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODA0MCkKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE4LTAyLTAyICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQ
STogQWRkIHRlc3RSdW5uZXIuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoKSB0byBtYWtlIHRl
c3RpbmcgZWFzaWVyIGFuZCBtb3JlIGV4cGxpY2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2
NDc1ODM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1k
ZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAgIHdhcyBmb3VuZCB0byBi
ZSBmbGFreS4gV2l0aCB0aGUgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNjZXNzRW50cnkoKSBnZXR0
ZXIKKyAgICAgICAgaXQncyBwb3NzaWJsZSB0byBjaGVjayBhY2Nlc3MgZXZlbiBpZiBhIGZyYW1l
IGRvZXNuJ3QgcmVzcG9uZCB0aW1lbHkgdG8KKyAgICAgICAgcG9zdE1lc3NhZ2UgYWZ0ZXIgZGV0
YWNoIGFuZCBhdHRhY2guCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgICAgIEp1c3QgbW92
ZWQgZm9yIHNvdXJjZSBmaWxlIGdyb3VwaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgICAgICBOb3Rl
IHRoYXQgdGhpcyBpcyBqdXN0IHN0dWJiZWQgb3V0LCBpLmUuIG5vdCBpbXBsZW1lbnRlZC4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNz
RW50cmllcyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KToKKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIENvY29hLXNwZWNpZmljIHZlcnNpb24gb2YgdGhp
cyB0ZXN0IGluZnJhc3RydWN0dXJlLgorCiAyMDE4LTAyLTAyICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBXM0MgdGVzdCBleHBvcnRlciBzaG91bGQgYWxsb3cg
ZXhwb3J0aW5nIG5ld2x5IGFkZGVkIGZpbGVzCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NjgsNiArMjY2
OCwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvCiAgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoZGF0YVN0b3Jl
KTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMo
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgQyBBUEkgdmVyc2lvbiBvZiB0aGlzIHRlc3Qs
IHNvbWV0aGluZyBsaWtlIHRoaXM6CisvLyAgICBhdXRvKiBkYXRhU3RvcmUgPSBXS0NvbnRleHRH
ZXRXZWJzaXRlRGF0YVN0b3JlKHBsYXRmb3JtQ29udGV4dCgpKTsKKy8vICAgIEdldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOworLy8gICAgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoZGF0YVN0b3JlLCAmY29u
dGV4dCwgZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk7CisvLyAgICBpZiAoIWNv
bnRleHQuZG9uZSkKKy8vICAgICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG1fY3VycmVudElu
dm9jYXRpb24tPnNob3J0VGltZW91dCgpKTsKK30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHVibGljOgogICAgIHZvaWQgc3RhdGlz
dGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpOwogICAgIHZvaWQgc3RhdGlzdGlj
c1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAorICAgIHZvaWQgZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMoKTsKKwogICAgIFdLQXJyYXlSZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7
IHJldHVybiBtX29wZW5QYW5lbEZpbGVVUkxzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRPcGVuUGFu
ZWxGaWxlVVJMcyhXS0FycmF5UmVmIGZpbGVVUkxzKSB7IG1fb3BlblBhbmVsRmlsZVVSTHMgPSBm
aWxlVVJMczsgfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcAkocmV2aXNpb24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52
b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNSw3ICs4MzUsMTIgQEAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICBXS0Nvb2tpZU1hbmFnZXJT
ZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1ZShhY2Nl
cHQpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyIpKSB7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5nZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcygpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMTM1MSw2ICsxMzU2LDE3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNl
dFBhcnRpdGlvbk9yQmwKICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOwogfQogCit2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlQWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsK
KyAgICAKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkoQWRv
cHRXSywgV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBk
b21haW5zKQorICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkp
LmdldCgpKTsKKyAgICAKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30KKwogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKSk7CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCShyZXZpc2lvbiAyMjc5NzMp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRDbGVhclN0YXRpc3Rp
Y3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCk7CiAgICAgdm9pZCBkaWRTZXRQYXJ0aXRpb25P
ckJsb2NrQ29va2llc0Zvckhvc3QoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhWZWN0b3I8U3RyaW5nPiYgZG9tYWlucyk7CiAKICAgICB2b2lkIGRpZFJlbW92
ZUFsbFNlc3Npb25DcmVkZW50aWFscygpOwogICAgIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJl
dmlzaW9uIDIyNzk3MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDI0IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG8KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiQ2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKSB7CisgICAgICAgIEFT
U0VSVChtZXNzYWdlQm9keSk7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKTsKKworICAgICAgICBXS0FycmF5UmVmIGRvbWFpbnNB
cnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBzaXplID0gV0tBcnJheUdldFNpemUoZG9tYWluc0FycmF5KTsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gZG9tYWluczsKKyAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNp
emUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5
LCBpKTsKKyAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgZG9tYWlucy5hcHBlbmQodG9XVEZTdHJp
bmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgIH0KKworICAgICAg
ICBtX3Rlc3RSdW5uZXItPmNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxs
YmFjayhkb21haW5zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbERpZFJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFsc0NhbGxiYWNrIikpIHsKICAgICAgICAgbV90ZXN0UnVubmVyLT5jYWxsRGlk
UmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMjc5NzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTIsNiAr
NjUyLDcgQEAgZW51bSB7CiAgICAgU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQs
CiAgICAgU3RhdGlzdGljc0RpZENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNr
SUQsCiAgICAgU3RhdGlzdGljc0RpZFNldFBhcnRpdGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdENh
bGxiYWNrSUQsCisgICAgQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFja0lELAogICAgIERp
ZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrSUQsCiAgICAgR2V0QXBwbGljYXRp
b25NYW5pZmVzdENhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENhbGxiYWNrSUQgPSAxMDAK
QEAgLTc4NSwxNSArNzg2LDYgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRDb29raWVTdG9yYWdlUGFy
dGl0aQogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVu
YWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIAot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7Ci19Ci0gICAgCiBkb3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQogewogICAg
IHJldHVybiBjdXJyZW50VGltZSgpOwpAQCAtMTY4NSw2ICsxNjc3LDQ3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXMKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZUFj
Y2Vzc0FQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQiKSk7CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkp
OworICAgIAorICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxs
YmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKKyAgICAK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIikpOwor
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJh
Y2soVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWlu
RnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworICAgIAorICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlsi
KTsKKyAgICBib29sIGZpcnN0RG9tYWluID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6
IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKGZpcnN0RG9tYWluKQorICAgICAgICAgICAgZmlyc3RE
b21haW4gPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlwiIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKKyAgICB9CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJdIik7CisgICAgCisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1Zh
bHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisKKyAgICBjYWxs
VGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgMSwg
JnJlc3VsdCk7Cit9CisKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5l
Y3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMjc5
NzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw2IEBAIHB1YmxpYzoKICAgICAvLyBDb29r
aWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CiAgICAg
dm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lk
IHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogCiAgICAgLy8gQ3VzdG9tIGZ1bGwg
c2NyZWVuIGJlaGF2aW9yLgogICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9y
KGJvb2wgdmFsdWUpIHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1ZTsgfQpAQCAt
Mzk5LDYgKzM5OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbENsZWFyVGhy
b3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCisgICAgLy8gU3RvcmFnZSBBY2Nlc3MgQVBJCisgICAg
dm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sKTsKKyAgICB2b2lkIGdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKEpTVmFsdWVSZWYgY2FsbGJhY2spOworICAgIHZvaWQgY2FsbERp
ZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBk
b21haW5zKTsKKwogICAgIC8vIE9wZW4gcGFuZWwKICAgICB2b2lkIHNldE9wZW5QYW5lbEZpbGVz
KEpTVmFsdWVSZWYpOwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9u
IDIyNzk3MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNiBAQCBpbnRl
cmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgLy8gQ29va2llcyB0ZXN0aW5nCiAgICAgdm9pZCBzZXRB
bHdheXNBY2NlcHRDb29raWVzKGJvb2xlYW4gYWNjZXB0KTsKICAgICB2b2lkIHNldENvb2tpZVN0
b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7Ci0gICAgdm9pZCBzZXRT
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogCiAgICAgdm9pZCBvdmVy
cmlkZVByZWZlcmVuY2UoRE9NU3RyaW5nIHByZWZlcmVuY2UsIERPTVN0cmluZyB2YWx1ZSk7CiAK
QEAgLTI5OCw2ICsyOTcsMTAgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc3Rh
dGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbChvYmplY3QgY2FsbGJhY2spOwog
ICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAorICAgIC8vIFN0
b3JhZ2UgQWNjZXNzIEFQSQorICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9v
bGVhbiBlbmFibGVkKTsKKyAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG9iamVj
dCBjYWxsYmFjayk7CisKICAgICAvLyBPcGVuIHBhbmVsCiAgICAgdm9pZCBzZXRPcGVuUGFuZWxG
aWxlcyhvYmplY3QgZmlsZXNBcnJheSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9uIDIyNzk3MykK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDU2LDYgKzQ1NiwxOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpz
dGF0aXN0aWNzUmVzZXRUb0NvCiB7CiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndl
YnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlXTsKIH0KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJp
ZXMoKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
IF9nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllczpeKE5TQXJyYXk8TlNTdHJpbmcgKj4gKm5zRG9t
YWlucykgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOworICAgICAgICBkb21haW5z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnNEb21haW5zLmNvdW50KTsKKyAgICAgICAgZm9yIChO
U1N0cmluZyAqZG9tYWluIDogbnNEb21haW5zKQorICAgICAgICAgICAgZG9tYWlucy51bmNoZWNr
ZWRBcHBlbmQoZG9tYWluKTsKKyAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkUmVjZWl2
ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKGRvbWFpbnMpOworICAgIH1dOworfQorCiAjZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMjgwNDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMyBAQAorMjAxOC0wMi0wMiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBTdG9yYWdlIEFjY2VzcyBBUEk6IEFkZCB0ZXN0UnVubmVyLmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKCkgdG8gbWFrZSB0ZXN0aW5nIGVhc2llciBhbmQgbW9yZSBleHBs
aWNpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
NjAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjQ3NTgzNz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3Mv
cmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nl
c3MuaHRtbAorICAgICAgICB3YXMgZm91bmQgdG8gYmUgZmxha3kuIFdpdGggdGhlIHRlc3RSdW5u
ZXIuaGFzU3RvcmFnZUFjY2Vzc0VudHJ5KCkgZ2V0dGVyCisgICAgICAgIGl0J3MgcG9zc2libGUg
dG8gY2hlY2sgYWNjZXNzIGV2ZW4gaWYgYSBmcmFtZSBkb2Vzbid0IHJlc3BvbmQgdGltZWx5IHRv
CisgICAgICAgIHBvc3RNZXNzYWdlIGFmdGVyIGRldGFjaCBhbmQgYXR0YWNoLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVu
LWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0
YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nl
c3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tbmF2aWdhdGUtc2hvdWxkLW5vdC1oYXZl
LWFjY2Vzcy5odG1sCisgICAgICAgICAgICBubyBsb25nZXIgbWFya2VkIGFzIGZsYWt5LiBOb3Rl
IHRoYXQgdGhlIHdyb25nIHRlc3Qgd2FzIG1hcmtlZCBmbGFreS4gSXQgc2hvdWxkIGhhdmUgYmVl
bgorICAgICAgICAgICAgaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50
LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwuCisKIDIwMTgt
MDItMDIgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVi
YXNlbGluZSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLzJkY29udGV4dC9pbWFnZWJp
dG1hcC9jcmVhdGVJbWFnZUJpdG1hcC1pbnZhbGlkLWFyZ3MuaHRtbCBmb3IgaU9TLgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFj
Y2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1h
bmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyMjc5NzMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3Jh
Z2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3Qt
aGF2ZS1hY2Nlc3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsOCBAQCBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBTdG9yYWdl
IGFjY2VzcyB3YXMgZ3JhbnRlZC4gZG9jdW1lbnQuY29va2llID09IGZpcnN0UGFydHlDb29raWU9
dmFsdWUsIGNvb2tpZXMgc2VlbiBzZXJ2ZXItc2lkZSA9PSB7ImZpcnN0UGFydHlDb29raWUiOiJ2
YWx1ZSJ9Ci1QQVNTIFBBU1MuIGRvY3VtZW50LmNvb2tpZSA9PSAsIGNvb2tpZXMgc2VlbiBzZXJ2
ZXItc2lkZSA9PSAiTm8gY29va2llcyIKK1BBU1MgVGhlcmUgaXMgYSBzdG9yYWdlIGFjY2VzcyBl
bnRyeSBmb3IgbG9jYWxob3N0LgorUEFTUyBUaGVyZSBpcyBubyBzdG9yYWdlIGFjY2VzcyBlbnRy
eSBmb3IgbG9jYWxob3N0IGFmdGVyIGlmcmFtZSBkZXRhY2guCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hv
dWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gt
c2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCShyZXZpc2lvbiAyMjc5NzMpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRo
ZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMjggKzIzLDQ3IEBACiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBpZnJhbWVJRCA9ICJU
aGVJZnJhbWVUaGF0UmVxdWVzdHNTdG9yYWdlQWNjZXNzIjsKLSAgICAgICAgZnVuY3Rpb24gYXNr
SWZyYW1lSWZJdEhhc1N0b3JhZ2VBY2Nlc3MoKSB7Ci0gICAgICAgICAgICB2YXIgaWZyYW1lQ29u
dGVudFdpbmRvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlmcmFtZUlEKS5jb250ZW50V2lu
ZG93OwotICAgICAgICAgICAgaWZyYW1lQ29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgicmVwb3J0
QmFja0Nvb2tpZXMiLCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwIik7CisgICAgICAgIGZ1bmN0aW9u
IGFza0lmSWZyYW1lU3RpbGxIYXNTdG9yYWdlQWNjZXNzKCkgeworICAgICAgICAgICAgdGVzdFJ1
bm5lci5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhmdW5jdGlvbiAoYXJyYXlPZkRvbWFpbnMp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZEb21haW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcnJheU9mRG9tYWluc1tpXSA9PT0gImxvY2FsaG9zdCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHBhc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3Nl
ZCgiVGhlcmUgaXMgbm8gc3RvcmFnZSBhY2Nlc3MgZW50cnkgZm9yIGxvY2FsaG9zdCBhZnRlciBp
ZnJhbWUgZGV0YWNoLiIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiVGhlcmUgaXMgc3RpbGwgYSBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3Ig
bG9jYWxob3N0IGFmdGVyIGlmcmFtZSBkZXRhY2guIik7CisgICAgICAgICAgICAgICAgZmluaXNo
VGVzdCgpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBk
ZXRhY2hJZnJhbWVBbmRBc2tXaGV0aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKSB7Ci0gICAg
ICAgICAgICB2YXIgdGhlSWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWZyYW1lSUQp
OwotICAgICAgICAgICAgdGhlSWZyYW1lLm9ubG9hZCA9IGFza0lmcmFtZUlmSXRIYXNTdG9yYWdl
QWNjZXNzOwotICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXS5hcHBlbmRDaGlsZCh0aGVJZnJhbWUpOworICAgICAgICBmdW5jdGlvbiBkZXRhY2hJZnJh
bWVBbmRDaGVja1doZXRoZXJJdFN0aWxsSGFzU3RvcmFnZUFjY2VzcygpIHsKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoZnVuY3Rpb24gKGFycmF5T2ZE
b21haW5zKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZkRvbWFpbnMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T2ZEb21haW5zW2ldID09PSAibG9jYWxob3N0
IikgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChwYXNzZWQpCisgICAgICAgICAgICAgICAgICAgIHRl
c3RQYXNzZWQoIlRoZXJlIGlzIGEgc3RvcmFnZSBhY2Nlc3MgZW50cnkgZm9yIGxvY2FsaG9zdC4i
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
IlRoZXJlIGlzIG5vIHN0b3JhZ2UgYWNjZXNzIGVudHJ5IGZvciBsb2NhbGhvc3QuIik7CisgICAg
ICAgICAgICAgICAgdmFyIHRoZUlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlmcmFt
ZUlEKTsKKyAgICAgICAgICAgICAgICB0aGVJZnJhbWUub25sb2FkID0gYXNrSWZJZnJhbWVTdGls
bEhhc1N0b3JhZ2VBY2Nlc3M7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZCh0aGVJZnJhbWUpOworICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBleHBlY3RlZFBhc3NNZXNzYWdlcyA9IDI7
Ci0gICAgICAgIHZhciBwYXNzTWVzc2FnZXNSZWNlaXZlZCA9IDA7CiAgICAgICAgIGZ1bmN0aW9u
IHJlY2VpdmVNZXNzYWdlKGV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luID09
PSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwIikgewogICAgICAgICAgICAgICAgIGlmIChldmVudC5k
YXRhLmluZGV4T2YoIlBBU1MiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgdGVzdFBh
c3NlZChldmVudC5kYXRhLnJlcGxhY2UoIlBBU1MgIiwgIiIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcGFzc01lc3NhZ2VzUmVjZWl2ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NN
ZXNzYWdlc1JlY2VpdmVkID49IGV4cGVjdGVkUGFzc01lc3NhZ2VzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXRhY2hJZnJhbWVBbmRBc2tXaGV0aGVySXRTdGlsbEhhc1N0b3Jh
Z2VBY2Nlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgZGV0YWNoSWZyYW1lQW5kQ2hlY2tXaGV0
aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKGV2ZW50LmRhdGEpOwogICAgICAgICAgICAg
ICAgICAgICBmaW5pc2hUZXN0KCk7CkBAIC02MCwxNCArNzksNyBAQAogICAgICAgICAgICAgdmFy
IGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsK
ICAgICAgICAgICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9m
ZnNldEhlaWdodCAvIDI7CiAgICAgICAgICAgICBVSUhlbHBlci5hY3RpdmF0ZUF0KGNlbnRlclgs
IGNlbnRlclkpLnRoZW4oCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnRTZW5kZXIua2V5RG93bigiZXNjYXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiTm8gZXZlbnRTZW5kZXIu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgp
IHsgfSwKICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRlc3RGYWlsZWQoIlByb21pc2UgcmVqZWN0ZWQuIik7CiAgICAgICAgICAgICAgICAgICAgIGZp
bmlzaFRlc3QoKTsKQEAgLTc3LDggKzg5LDggQEAKIAogICAgICAgICBmdW5jdGlvbiBydW5UZXN0
KCkgewogICAgICAgICAgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggIT09ICIjZWxlbWVu
dEFjdGl2YXRlZCIpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmF0ZUVsZW1lbnQoaWZyYW1lSUQp
OwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAiZWxlbWVudEFjdGl2
YXRlZCI7CisgICAgICAgICAgICAgICAgYWN0aXZhdGVFbGVtZW50KGlmcmFtZUlEKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC05OSw2ICsxMTEsOCBAQAogICAgIDwvc2NyaXB0Pgog
PC9oZWFkPgogPGJvZHk+Ci08aWZyYW1lIHNhbmRib3g9ImFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5
LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LW1v
ZGFscyIgb25sb2FkPSJydW5UZXN0KCkiIGlkPSJUaGVJZnJhbWVUaGF0UmVxdWVzdHNTdG9yYWdl
QWNjZXNzIiBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zdG9yYWdlQWNjZXNzL3Jlc291cmNl
cy9yZXF1ZXN0LXN0b3JhZ2UtYWNjZXNzLWlmcmFtZS5odG1sI3VzZXJTaG91bGRHcmFudEFjY2Vz
cyx1c2VyU2hvdWxkQmVDb25zdWx0ZWQscG9saWN5U2hvdWxkR3JhbnRBY2Nlc3MiPjwvaWZyYW1l
PgorPGRpdj4KKyAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5LXVz
ZXItYWN0aXZhdGlvbiBhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LW1vZGFs
cyIgb25sb2FkPSJydW5UZXN0KCkiIGlkPSJUaGVJZnJhbWVUaGF0UmVxdWVzdHNTdG9yYWdlQWNj
ZXNzIiBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zdG9yYWdlQWNjZXNzL3Jlc291cmNlcy9y
ZXF1ZXN0LXN0b3JhZ2UtYWNjZXNzLWlmcmFtZS5odG1sI3VzZXJTaG91bGRHcmFudEFjY2Vzcyx1
c2VyU2hvdWxkQmVDb25zdWx0ZWQscG9saWN5U2hvdWxkR3JhbnRBY2Nlc3MiPjwvaWZyYW1lPgor
PC9kaXY+CiA8L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2
aXNpb24gMjI3OTczKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0
YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03NjAsOCArNzYwLDcgQEAgaHR0cC90ZXN0cy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3VzZXItaQogWyBIaWdoU2llcnJhKyBdIGh0dHAvdGVzdHMvc3Rv
cmFnZUFjY2Vzcy9oYXMtc3RvcmFnZS1hY2Nlc3MtZnJvbS1wcmV2YWxlbnQtZG9tYWluLXdpdGgt
bm9uLXJlY2VudC11c2VyLWludGVyYWN0aW9uLmh0bWwgWyBQYXNzIF0KIFsgSGlnaFNpZXJyYSsg
XSBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvaGFzLXN0b3JhZ2UtYWNjZXNzLWZyb20tcHJldmFs
ZW50LWRvbWFpbi13aXRoLXJlY2VudC11c2VyLWludGVyYWN0aW9uLmh0bWwgWyBQYXNzIF0KIFsg
SGlnaFNpZXJyYSsgXSBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQt
YWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbCBbIFBhc3MgXQot
Ci13ZWJraXQub3JnL2IvMTgxNjAxIFsgSGlnaFNpZXJyYSsgUmVsZWFzZSBdIGh0dHAvdGVzdHMv
c3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1uYXZpZ2F0ZS1zaG91
bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQorWyBIaWdoU2llcnJhKyBd
IGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1u
YXZpZ2F0ZS1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwgWyBQYXNzIF0KIAogd2Via2l0Lm9y
Zy9iLzE3Mzg2MSBbIFJlbGVhc2UgXSBodHRwL3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNh
bmRpZGF0ZS1zYW1lLW9yaWdpbi1mcmFtZS5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIHdlYmtpdC5v
cmcvYi8xNzM4NjEgWyBSZWxlYXNlIF0gaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1j
YW5kaWRhdGUtY3Jvc3Mtb3JpZ2luLWZyYW1lLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333098</attachid>
            <date>2018-02-05 11:01:37 -0800</date>
            <delta_ts>2018-02-05 11:35:18 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-181601-20180205110136.patch</filename>
            <type>text/plain</type>
            <size>37994</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE4LTAyLTA1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQ
STogQWRkIHRlc3RSdW5uZXIuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoKSB0byBtYWtlIHRl
c3RpbmcgZWFzaWVyIGFuZCBtb3JlIGV4cGxpY2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2
NDc1ODM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0IHVwZGF0ZWQuCisKKyAgICAgICAgaHR0cC90
ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1z
aG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwKKyAgICAgICAgd2FzIGZvdW5kIHRvIGJlIGZsYWt5
LiBXaXRoIHRoZSB0ZXN0UnVubmVyLmhhc1N0b3JhZ2VBY2Nlc3NFbnRyeSgpIGdldHRlcgorICAg
ICAgICBpdCdzIHBvc3NpYmxlIHRvIGNoZWNrIGFjY2VzcyBldmVuIGlmIGEgZnJhbWUgZG9lc24n
dCByZXNwb25kIHRpbWVseSB0bworICAgICAgICBwb3N0TWVzc2FnZSBhZnRlciBkZXRhY2ggYW5k
IGF0dGFjaC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Np
b25DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Omdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIGNvbnN0KToKKwogMjAxOC0wMi0wMiAgRG9uIE9sbXN0
ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFJlbW92ZSBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzIGRpcmVjdG9yeQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCShyZXZpc2lvbiAy
Mjc5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUHJldmFsZW50RG9tYWlucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWlucyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzRm9yRnJhbWUoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBm
aXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdyYW50U3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYg
Zmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVN0b3JhZ2VBY2Nlc3NGb3JGcmFtZSh1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlU3RvcmFnZUFjY2Vzc0ZvckFsbEZyYW1lc09uUGFnZSh1aW50NjRfdCBwYWdlSUQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Np
b25DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIyNzk3MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE3IEBAIGJvb2wgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpoYXNTdG9yYWdlQWMKICAgICByZXR1cm4gaGFzU3RvcmFnZUFjY2Vz
c0ZvckZyYW1lKGdldFBhcnRpdGlvbmluZ0RvbWFpbihyZXF1ZXN0LnVybCgpKSwgZ2V0UGFydGl0
aW9uaW5nRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSksIGZyYW1lSUQsIHBh
Z2VJRCk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJp
ZXM7CisgICAgZm9yIChhdXRvJiBwYWdlSUQgOiBtX2ZyYW1lc0dyYW50ZWRTdG9yYWdlQWNjZXNz
LmtleXMoKSkgeworICAgICAgICBhdXRvIGl0MSA9IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nl
c3MuZmluZChwYWdlSUQpOworICAgICAgICBmb3IgKGF1dG8mIGZyYW1lSUQgOiBpdDEtPnZhbHVl
LmtleXMoKSkKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKGl0MS0+dmFsdWUuZmluZChmcmFt
ZUlEKS0+dmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gZW50cmllczsKK30KKyAgICAKIHZvaWQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBT
dHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICAgICBVTlVTRURfUEFSQU0oZmly
c3RQYXJ0eURvbWFpbik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MDQwKQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxOC0w
Mi0wNSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9y
YWdlIEFjY2VzcyBBUEk6IEFkZCB0ZXN0UnVubmVyLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KCkgdG8gbWFrZSB0ZXN0aW5nIGVhc2llciBhbmQgbW9yZSBleHBsaWNpdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjAxCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zNjQ3NTgzNz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFu
dC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAg
IHdhcyBmb3VuZCB0byBiZSBmbGFreS4gV2l0aCB0aGUgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNj
ZXNzRW50cnkoKSBnZXR0ZXIKKyAgICAgICAgaXQncyBwb3NzaWJsZSB0byBjaGVjayBhY2Nlc3Mg
ZXZlbiBpZiBhIGZyYW1lIGRvZXNuJ3QgcmVzcG9uZCB0aW1lbHkgdG8KKyAgICAgICAgcG9zdE1l
c3NhZ2UgYWZ0ZXIgZGV0YWNoIGFuZCBhdHRhY2guCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9nZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllczpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjphbGxTdG9yYWdlQWNjZXNzRW50cmllc1Jlc3VsdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKwogMjAxOC0wMi0wMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29uZmlndXJlIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkgb24gdGhlIHdlYiBzaXRlIGRhdGEgc3Rv
cmUgYW5kIG1vdmUgaXQgdG8gYSBDYWNoZXMgc3ViZm9sZGVyIGFzIGEgZGVmYXVsdApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJl
dmlzaW9uIDIyNzk3MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDE0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6Omhhc1N0b3JhZ2VBY2Nlc3NGb3IKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgY29udGV4dElkKQoreworICAgIGlm
IChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzUmVzdWx0KG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMoKSwgY29udGV4dElkKSwgMCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z3JhbnRTdG9yYWdlQWNjZXNzRm9y
RnJhbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291cmNlRG9t
YWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY29udGV4dElkKQogewogICAgIGJvb2wgaXNTdG9yYWdl
R3JhbnRlZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3
LDcgQEAgcHVibGljOgogI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQog
ICAgIHZvaWQgdXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXMo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9QYXJ0aXRpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgYm9vbCBzaG91bGRDbGVhckZp
cnN0KTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCwg
Y29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9t
YWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhQQUw6OlNlc3Npb25JRCwg
dWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1l
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJp
bmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwg
dWludDY0X3QgY29udGV4dElkKTsKICAgICB2b2lkIHJlbW92ZVByZXZhbGVudERvbWFpbnMoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMjc5NzMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw2ICs4NCw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmUKICNp
ZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKICAgICBVcGRhdGVQcmV2YWxl
bnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNUb1BhcnRpdGlvbiwgVmVjdG9yPFN0cmluZz4gZG9t
YWluc1RvQmxvY2ssIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JC
bG9jaywgYm9vbCBzaG91bGRDbGVhckZpcnN0KQogICAgIEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyByZXNvdXJjZURvbWFpbiwgU3RyaW5n
IGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgdWlu
dDY0X3QgY29udGV4dElkKQorICAgIEdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgY29udGV4dElkKQogICAgIEdyYW50U3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHJlc291cmNlRG9t
YWluLCBTdHJpbmcgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgUmVtb3ZlUHJldmFsZW50RG9tYWlucyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoSW50ZXJh
Y3Rpb24pOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDIyNzk3MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
KyNpbXBvcnQgIkFQSVN0cmluZy5oIgogI2ltcG9ydCAiV0tIVFRQQ29va2llU3RvcmVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV0tOU0FycmF5LmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhUmVjb3Jk
SW50ZXJuYWwuaCIKQEAgLTY0Niw2ICs2NDcsMTggQEAgKyAodm9pZClfYWxsb3dXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcgogICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJz
aXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCk7CiB9CiAKKy0gKHZvaWQpX2dldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzOih2b2lkICheKShOU0FycmF5PE5TU3RyaW5nICo+ICpkb21haW5zKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBkb21haW5zKSB7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlEb21haW5zOworICAgICAgICBhcGlEb21haW5z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZG9tYWlucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnMpCisgICAgICAgICAgICBhcGlEb21haW5zLnVuY2hlY2tlZEFw
cGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGRvbWFpbikpOworCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHdyYXBwZXIoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpRG9tYWlucykpKSk7
CisgICAgfSk7Cit9CisKIEBlbmQKIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIyNzk3MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIs
IF9XS1dlYnNpdAogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnM6KHVuc2lnbmVkKWhvdXJzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6KG51bGxhYmxlIHZvaWQgKF4pKFdLV2Vic2l0ZURhdGFT
dG9yZSAqLCBOU1N0cmluZyAqKSljYWxsYmFjayBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4x
MyksIGlvcygxMS4wKSk7CistICh2b2lkKV9nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllczoodm9p
ZCAoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqZG9tYWlucykpY29tcGxldGlvbkhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiArICh2
b2lkKV9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiBAZW5kCiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAkocmV2aXNpb24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYg
KzQzMywyMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN0b3JhZ2VBY2Nlc3NSCiAgICAg
YXV0byBjYWxsYmFjayA9IG1fc3RvcmFnZUFjY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tNYXAudGFrZShj
b250ZXh0SWQpOwogICAgIGNhbGxiYWNrKHdhc0dyYW50ZWQpOwogfQorCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMp
PiYmIGNhbGxiYWNrKQoreworICAgIGF1dG8gY29udGV4dElkID0gbmV4dFJlcXVlc3RTdG9yYWdl
QWNjZXNzQ29udGV4dElkKCk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2FsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzQ2FsbGJhY2tNYXAuYWRkKGNvbnRleHRJZCwgV1RGTW92ZShjYWxsYmFjaykpOwor
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KHNlc3Npb25JRCwgY29udGV4dElkKSwgMCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6YWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNSZXN1bHQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5z
LCB1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byBjYWxsYmFjayA9IG1fYWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXNDYWxsYmFja01hcC50YWtlKGNvbnRleHRJZCk7CisgICAgY2FsbGJhY2so
V1RGTW92ZShkb21haW5zKSk7Cit9CiAjZW5kaWYKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2
aXNpb24gMjI3OTczKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgog
CiAjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCiAgICAgdm9pZCBoYXNT
dG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxi
YWNrKTsKKyAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYpOwog
ICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwg
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNhbGxiYWNrKTsKICNlbmRpZgogCkBAIC0xMzQsNiArMTM1LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAg
IHZvaWQgc3RvcmFnZUFjY2Vzc1JlcXVlc3RSZXN1bHQoYm9vbCB3YXNHcmFudGVkLCB1aW50NjRf
dCBjb250ZXh0SWQpOworICAgIHZvaWQgYWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNSZXN1bHQoVmVj
dG9yPFN0cmluZz4mJiBkb21haW5zLCB1aW50NjRfdCBjb250ZXh0SWQpOwogI2VuZGlmCiAKICAg
ICAvLyBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudApAQCAtMTU3LDYgKzE1OSw3IEBAIHByaXZhdGU6
CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgc3Vj
Y2Vzcyk+PiBtX3dyaXRlQmxvYlRvRmlsZVBhdGhDYWxsYmFja01hcDsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNHcmFudGVkKT4+IG1f
c3RvcmFnZUFjY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tNYXA7CisgICAgSGFzaE1hcDx1aW50NjRfdCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPj4gbV9hbGxT
dG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMjc5NzMp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQgKzQ2LDUgQEAgbWVzc2FnZXMgLT4g
TmV0d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZQogI2VuZGlmCiAjaWYgSEFWRShDRk5FVFdPUktf
U1RPUkFHRV9QQVJUSVRJT05JTkcpCiAgICAgU3RvcmFnZUFjY2Vzc1JlcXVlc3RSZXN1bHQoYm9v
bCB3YXNHcmFudGVkLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXNSZXN1bHQoVmVjdG9yPFN0cmluZz4gZG9tYWlucywgdWludDY0X3QgY29udGV4dElkKQog
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIyNzk3MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAyLDYgKzEyMDIsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNTdG9y
YWdlQWNjZXNzRgogICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+aGFzU3Rv
cmFnZUFjY2Vzc0ZvckZyYW1lKG1fc2Vzc2lvbklELCByZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0
eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNhbGxiYWNrKQoreworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VE
b21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNHcmFu
dGVkKT4mJiBjYWxsYmFjaykKIHsKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAyMjc5NzMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpCiAgICAgdm9pZCB1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0
aXRpb25PckJsb2NrQ29va2llcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUGFydGl0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zVG9OZWl0aGVyUGFydGl0aW9uTm9yQmxvY2ssIFNob3VsZENsZWFyRmly
c3QpOwogICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihjb25zdCBTdHJp
bmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wgaGFzQWNjZXNzKT4mJiBjYWxsYmFjayk7CisgICAgdm9pZCBnZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlu
cyk+JiYpOwogICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0
IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwg
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCB3YXNHcmFudGVkKT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCByZW1vdmVQcmV2
YWxlbnREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKTsKICAgICB2b2lkIGhh
c1N0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhv
c3QsIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkIChib29sKT4mJiBjYWxsYmFjayk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgwNDApCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxOC0wMi0wNSAgSm9o
biBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9yYWdlIEFjY2Vz
cyBBUEk6IEFkZCB0ZXN0UnVubmVyLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKCkgdG8gbWFr
ZSB0ZXN0aW5nIGVhc2llciBhbmQgbW9yZSBleHBsaWNpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8zNjQ3NTgzNz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3Mt
dGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAgICAgIHdhcyBmb3Vu
ZCB0byBiZSBmbGFreS4gV2l0aCB0aGUgdGVzdFJ1bm5lci5oYXNTdG9yYWdlQWNjZXNzRW50cnko
KSBnZXR0ZXIKKyAgICAgICAgaXQncyBwb3NzaWJsZSB0byBjaGVjayBhY2Nlc3MgZXZlbiBpZiBh
IGZyYW1lIGRvZXNuJ3QgcmVzcG9uZCB0aW1lbHkgdG8KKyAgICAgICAgcG9zdE1lc3NhZ2UgYWZ0
ZXIgZGV0YWNoIGFuZCBhdHRhY2guCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgICAgIEp1
c3QgbW92ZWQgZm9yIHNvdXJjZSBmaWxlIGdyb3VwaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OmNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgICAg
ICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHN0dWJiZWQgb3V0LCBpLmUuIG5vdCBpbXBsZW1lbnRl
ZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2Nv
YS5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKToKKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIENvY29hLXNwZWNpZmljIHZlcnNpb24g
b2YgdGhpcyB0ZXN0IGluZnJhc3RydWN0dXJlLgorCiAyMDE4LTAyLTAyICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBXM0MgdGVzdCBleHBvcnRlciBzaG91bGQg
YWxsb3cgZXhwb3J0aW5nIG5ld2x5IGFkZGVkIGZpbGVzCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjI3OTczKQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Njgs
NiArMjY2OCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvCiAg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoZGF0
YVN0b3JlKTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgQyBBUEkgdmVyc2lvbiBvZiB0aGlz
IHRlc3QuCit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIyNzk3MykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0
LDYgKzE4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlKCk7CiAKKyAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKCk7CisKICAgICBX
S0FycmF5UmVmIG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuUGFuZWxG
aWxlVVJMcy5nZXQoKTsgfQogICAgIHZvaWQgc2V0T3BlblBhbmVsRmlsZVVSTHMoV0tBcnJheVJl
ZiBmaWxlVVJMcykgeyBtX29wZW5QYW5lbEZpbGVVUkxzID0gZmlsZVVSTHM7IH0KIApJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIyNzk3
MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MzUsNyArODM1LDEyIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdElu
dm9jYXRpb246OmQKICAgICAgICAgV0tDb29raWVNYW5hZ2VyU2V0U3RvcmFnZUFjY2Vzc0FQSUVu
YWJsZWQoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KLSAgICAKKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSkgeworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJp
ZXMoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZSIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZShXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzNTEsNiAr
MTM1NiwxNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQYXJ0aXRpb25PckJsCiAgICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKIH0KIAor
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFZl
Y3RvcjxTdHJpbmc+JiBkb21haW5zKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7CisgICAgCisgICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgV0tB
cnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoZG9tYWluLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgCisgICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7Cit9CisKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25D
cmVkZW50aWFscygpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlbW92ZUFs
bFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIikpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uaAkocmV2aXNpb24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRh
UmVtb3ZhbCgpOwogICAgIHZvaWQgZGlkU2V0UGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNGb3JIb3N0
KCk7CisgICAgdm9pZCBkaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnMpOwogCiAgICAgdm9pZCBkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlh
bHMoKTsKICAgICAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMjc5NzMpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCwyNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpk
aWRSZWNlaXZlTWVzc2FnZVRvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxEaWRSZWNlaXZlQWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMiKSkgeworICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOwor
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBl
SUQoKSk7CisKKyAgICAgICAgV0tBcnJheVJlZiBkb21haW5zQXJyYXkgPSBzdGF0aWNfY2FzdDxX
S0FycmF5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc2l6ZSA9IFdLQXJyYXlHZXRT
aXplKGRvbWFpbnNBcnJheSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CisgICAg
ICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBp
ZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKQorICAg
ICAgICAgICAgICAgIGRvbWFpbnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAgICAgbV90ZXN0UnVubmVyLT5jYWxs
RGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2soZG9tYWlucyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFj
ayIpKSB7CiAgICAgICAgIG1fdGVzdFJ1bm5lci0+Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFsc0NhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNp
b24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDYgKzY1Miw3IEBAIGVudW0gewogICAg
IFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NEaWRD
bGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NE
aWRTZXRQYXJ0aXRpb25PckJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFja0lELAorICAgIEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwKICAgICBEaWRSZW1vdmVBbGxTZXNzaW9uQ3Jl
ZGVudGlhbHNDYWxsYmFja0lELAogICAgIEdldEFwcGxpY2F0aW9uTWFuaWZlc3RDYWxsYmFja0lE
LAogICAgIEZpcnN0VUlTY3JpcHRDYWxsYmFja0lEID0gMTAwCkBAIC03ODUsMTUgKzc4Niw2IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGkKICAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkIikp
OwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwotfQotICAgIAogZG91
YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1lKCkKIHsKICAgICByZXR1cm4gY3VycmVudFRpbWUo
KTsKQEAgLTE2ODUsNiArMTY3Nyw0NyBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzCiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIp
OwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0b3JhZ2VBY2Nlc3NBUElF
bmFibGVkIikpOworICAgIAorICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKKyAgICAKKyAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCit7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXNDYWxsYmFja0lELCBjYWxsYmFjayk7CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERp
ZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBk
b21haW5zKQoreworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbIik7CisgICAgYm9vbCBmaXJzdERv
bWFpbiA9IHRydWU7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7CisgICAgICAg
IGlmIChmaXJzdERvbWFpbikKKyAgICAgICAgICAgIGZpcnN0RG9tYWluID0gZmFsc2U7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChkb21haW4pOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIik7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXSIp
OworICAgIAorICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmlu
Zyhjb250ZXh0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworCisgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhB
bGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIDEsICZyZXN1bHQpOworfQorCiAjaWYg
UExBVEZPUk0oTUFDKQogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWdu
ZWQgaW5kZXgpCiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjI3OTczKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4MCw3ICsyODAsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ29va2llcyB0ZXN0aW5nCiAgICAgdm9p
ZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wpOwogICAgIHZvaWQgc2V0Q29va2llU3RvcmFn
ZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZChib29sKTsKIAogICAgIC8vIEN1c3RvbSBmdWxsIHNjcmVlbiBiZWhhdmlvci4KICAg
ICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1fY3Vz
dG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KQEAgLTM5OSw2ICszOTgsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgc3RhdGlzdGljc0NhbGxDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWxDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKIAorICAgIC8vIFN0b3JhZ2UgQWNjZXNzIEFQSQorICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vz
c0FQSUVuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYgZG9tYWlucyk7CisKICAgICAvLyBP
cGVuIHBhbmVsCiAgICAgdm9pZCBzZXRPcGVuUGFuZWxGaWxlcyhKU1ZhbHVlUmVmKTsKIApJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVu
bmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMjc5NzMpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDYgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewog
ICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sZWFuIGFjY2VwdCk7CiAgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5h
YmxlZChib29sZWFuIGVuYWJsZWQpOwotICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJs
ZWQoYm9vbGVhbiBlbmFibGVkKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0
cmluZyBwcmVmZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOwogCkBAIC0yOTgsNiArMjk3LDEwIEBA
IGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhclRocm91Z2hX
ZWJzaXRlRGF0YVJlbW92YWwob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIHN0YXRpc3RpY3NS
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKKyAgICAvLyBTdG9yYWdlIEFjY2VzcyBBUEkKKyAg
ICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CisgICAg
dm9pZCBnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhvYmplY3QgY2FsbGJhY2spOworCiAgICAg
Ly8gT3BlbiBwYW5lbAogICAgIHZvaWQgc2V0T3BlblBhbmVsRmlsZXMob2JqZWN0IGZpbGVzQXJy
YXkpOwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyMjc5NzMpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1
Niw2ICs0NTYsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc1Jlc2V0VG9Dbwog
ewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV07CiB9CisKK3ZvaWQgVGVz
dENvbnRyb2xsZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKCkKK3sKKyAgICBbZ2xvYmFs
V2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXM6XihOU0FycmF5PE5TU3RyaW5nICo+ICpuc0RvbWFpbnMpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gZG9tYWluczsKKyAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG5zRG9tYWlucy5jb3VudCk7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKmRvbWFpbiA6IG5z
RG9tYWlucykKKyAgICAgICAgICAgIGRvbWFpbnMudW5jaGVja2VkQXBwZW5kKGRvbWFpbik7Cisg
ICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPmRpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhkb21haW5zKTsKKyAgICB9XTsKK30KKwogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECiAK
IH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MDQwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTgtMDIt
MDUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcmFn
ZSBBY2Nlc3MgQVBJOiBBZGQgdGVzdFJ1bm5lci5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcygp
IHRvIG1ha2UgdGVzdGluZyBlYXNpZXIgYW5kIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTYwMQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzY0NzU4Mzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNl
bi4KKworICAgICAgICBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQt
YWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbAorICAgICAgICB3
YXMgZm91bmQgdG8gYmUgZmxha3kuIFdpdGggdGhlIHRlc3RSdW5uZXIuaGFzU3RvcmFnZUFjY2Vz
c0VudHJ5KCkgZ2V0dGVyCisgICAgICAgIGl0J3MgcG9zc2libGUgdG8gY2hlY2sgYWNjZXNzIGV2
ZW4gaWYgYSBmcmFtZSBkb2Vzbid0IHJlc3BvbmQgdGltZWx5IHRvCisgICAgICAgIHBvc3RNZXNz
YWdlIGFmdGVyIGRldGFjaCBhbmQgYXR0YWNoLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9y
YWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1zaG91bGQtbm90
LWhhdmUtYWNjZXNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3N0b3JhZ2VB
Y2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2
ZS1hY2Nlc3MuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlv
bnM6CisgICAgICAgICAgICBodHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3Jh
bnQtYWNjZXNzLXRoZW4tbmF2aWdhdGUtc2hvdWxkLW5vdC1oYXZlLWFjY2Vzcy5odG1sCisgICAg
ICAgICAgICBubyBsb25nZXIgbWFya2VkIGFzIGZsYWt5LiBOb3RlIHRoYXQgdGhlIHdyb25nIHRl
c3Qgd2FzIG1hcmtlZCBmbGFreS4gSXQgc2hvdWxkIGhhdmUgYmVlbgorICAgICAgICAgICAgaHR0
cC90ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFj
aC1zaG91bGQtbm90LWhhdmUtYWNjZXNzLmh0bWwuCisKIDIwMTgtMDItMDIgIFJ5YW4gSGFkZGFk
ICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmViYXNlbGluZSBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLzJkY29udGV4dC9pbWFnZWJpdG1hcC9jcmVhdGVJbWFnZUJp
dG1hcC1pbnZhbGlkLWFyZ3MuaHRtbCBmb3IgaU9TLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zdG9yYWdlQWNjZXNzL3JlcXVlc3QtYW5kLWdyYW50LWFjY2Vzcy10aGVuLWRldGFjaC1z
aG91bGQtbm90LWhhdmUtYWNjZXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRo
ZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAy
Mjc5NzMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1h
bmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsOCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRl
ZC4gZG9jdW1lbnQuY29va2llID09IGZpcnN0UGFydHlDb29raWU9dmFsdWUsIGNvb2tpZXMgc2Vl
biBzZXJ2ZXItc2lkZSA9PSB7ImZpcnN0UGFydHlDb29raWUiOiJ2YWx1ZSJ9Ci1QQVNTIFBBU1Mu
IGRvY3VtZW50LmNvb2tpZSA9PSAsIGNvb2tpZXMgc2VlbiBzZXJ2ZXItc2lkZSA9PSAiTm8gY29v
a2llcyIKK1BBU1MgVGhlcmUgaXMgYSBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3IgbG9jYWxob3N0
LgorUEFTUyBUaGVyZSBpcyBubyBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3IgbG9jYWxob3N0IGFm
dGVyIGlmcmFtZSBkZXRhY2guCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRF
U1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9y
ZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFjY2Vz
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZUFjY2Vz
cy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1kZXRhY2gtc2hvdWxkLW5vdC1oYXZlLWFj
Y2Vzcy5odG1sCShyZXZpc2lvbiAyMjc5NzMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0
b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNoLXNob3VsZC1u
b3QtaGF2ZS1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjggKzIzLDQ3IEBACiAg
ICAgICAgIH0KIAogICAgICAgICBjb25zdCBpZnJhbWVJRCA9ICJUaGVJZnJhbWVUaGF0UmVxdWVz
dHNTdG9yYWdlQWNjZXNzIjsKLSAgICAgICAgZnVuY3Rpb24gYXNrSWZyYW1lSWZJdEhhc1N0b3Jh
Z2VBY2Nlc3MoKSB7Ci0gICAgICAgICAgICB2YXIgaWZyYW1lQ29udGVudFdpbmRvdyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlmcmFtZUlEKS5jb250ZW50V2luZG93OwotICAgICAgICAgICAg
aWZyYW1lQ29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgicmVwb3J0QmFja0Nvb2tpZXMiLCAiaHR0
cDovL2xvY2FsaG9zdDo4MDAwIik7CisgICAgICAgIGZ1bmN0aW9uIGFza0lmSWZyYW1lU3RpbGxI
YXNTdG9yYWdlQWNjZXNzKCkgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5nZXRBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyhmdW5jdGlvbiAoYXJyYXlPZkRvbWFpbnMpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFycmF5T2ZEb21haW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
cnJheU9mRG9tYWluc1tpXSA9PT0gImxvY2FsaG9zdCIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHBhc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiVGhlcmUgaXMgbm8gc3Rv
cmFnZSBhY2Nlc3MgZW50cnkgZm9yIGxvY2FsaG9zdCBhZnRlciBpZnJhbWUgZGV0YWNoLiIpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGhl
cmUgaXMgc3RpbGwgYSBzdG9yYWdlIGFjY2VzcyBlbnRyeSBmb3IgbG9jYWxob3N0IGFmdGVyIGlm
cmFtZSBkZXRhY2guIik7CisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBkZXRhY2hJZnJhbWVBbmRBc2tX
aGV0aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKSB7Ci0gICAgICAgICAgICB2YXIgdGhlSWZy
YW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWZyYW1lSUQpOwotICAgICAgICAgICAgdGhl
SWZyYW1lLm9ubG9hZCA9IGFza0lmcmFtZUlmSXRIYXNTdG9yYWdlQWNjZXNzOwotICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZCh0
aGVJZnJhbWUpOworICAgICAgICBmdW5jdGlvbiBkZXRhY2hJZnJhbWVBbmRDaGVja1doZXRoZXJJ
dFN0aWxsSGFzU3RvcmFnZUFjY2VzcygpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMoZnVuY3Rpb24gKGFycmF5T2ZEb21haW5zKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYXJyYXlPZkRvbWFpbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFycmF5T2ZEb21haW5zW2ldID09PSAibG9jYWxob3N0IikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChwYXNzZWQpCisgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRoZXJlIGlz
IGEgc3RvcmFnZSBhY2Nlc3MgZW50cnkgZm9yIGxvY2FsaG9zdC4iKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRoZXJlIGlzIG5vIHN0b3Jh
Z2UgYWNjZXNzIGVudHJ5IGZvciBsb2NhbGhvc3QuIik7CisgICAgICAgICAgICAgICAgdmFyIHRo
ZUlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlmcmFtZUlEKTsKKyAgICAgICAgICAg
ICAgICB0aGVJZnJhbWUub25sb2FkID0gYXNrSWZJZnJhbWVTdGlsbEhhc1N0b3JhZ2VBY2Nlc3M7
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVsw
XS5hcHBlbmRDaGlsZCh0aGVJZnJhbWUpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBjb25zdCBleHBlY3RlZFBhc3NNZXNzYWdlcyA9IDI7Ci0gICAgICAgIHZhciBwYXNz
TWVzc2FnZXNSZWNlaXZlZCA9IDA7CiAgICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2
ZW50KSB7CiAgICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luID09PSAiaHR0cDovL2xvY2FsaG9z
dDo4MDAwIikgewogICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoIlBBU1Mi
KSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZChldmVudC5kYXRhLnJl
cGxhY2UoIlBBU1MgIiwgIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcGFzc01lc3NhZ2VzUmVj
ZWl2ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NNZXNzYWdlc1JlY2VpdmVkID49
IGV4cGVjdGVkUGFzc01lc3NhZ2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGVz
dCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXRhY2hJZnJhbWVBbmRBc2tXaGV0aGVySXRTdGlsbEhhc1N0b3JhZ2VBY2Nlc3MoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGV0YWNoSWZyYW1lQW5kQ2hlY2tXaGV0aGVySXRTdGlsbEhhc1N0b3Jh
Z2VBY2Nlc3MoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICB0ZXN0RmFpbGVkKGV2ZW50LmRhdGEpOwogICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0
KCk7CkBAIC02MCwxNCArNzksNyBAQAogICAgICAgICAgICAgdmFyIGNlbnRlclggPSBlbGVtZW50
Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKICAgICAgICAgICAgIHZhciBj
ZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CiAg
ICAgICAgICAgICBVSUhlbHBlci5hY3RpdmF0ZUF0KGNlbnRlclgsIGNlbnRlclkpLnRoZW4oCi0g
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmV2ZW50U2VuZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5
RG93bigiZXNjYXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiTm8gZXZlbnRTZW5kZXIuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgfSwKICAgICAgICAgICAg
ICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlByb21p
c2UgcmVqZWN0ZWQuIik7CiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKQEAgLTc3
LDggKzg5LDggQEAKIAogICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgICAgICAgICAg
aWYgKGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggIT09ICIjZWxlbWVudEFjdGl2YXRlZCIpIHsKLSAg
ICAgICAgICAgICAgICBhY3RpdmF0ZUVsZW1lbnQoaWZyYW1lSUQpOwogICAgICAgICAgICAgICAg
IGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAiZWxlbWVudEFjdGl2YXRlZCI7CisgICAgICAgICAg
ICAgICAgYWN0aXZhdGVFbGVtZW50KGlmcmFtZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCkBAIC05OSw2ICsxMTEsOCBAQAogICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+Ci08
aWZyYW1lIHNhbmRib3g9ImFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5LXVzZXItYWN0aXZhdGlvbiBh
bGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LW1vZGFscyIgb25sb2FkPSJydW5U
ZXN0KCkiIGlkPSJUaGVJZnJhbWVUaGF0UmVxdWVzdHNTdG9yYWdlQWNjZXNzIiBzcmM9Imh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMC9zdG9yYWdlQWNjZXNzL3Jlc291cmNlcy9yZXF1ZXN0LXN0b3JhZ2Ut
YWNjZXNzLWlmcmFtZS5odG1sI3VzZXJTaG91bGRHcmFudEFjY2Vzcyx1c2VyU2hvdWxkQmVDb25z
dWx0ZWQscG9saWN5U2hvdWxkR3JhbnRBY2Nlc3MiPjwvaWZyYW1lPgorPGRpdj4KKyAgICA8aWZy
YW1lIHNhbmRib3g9ImFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxv
dy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LW1vZGFscyIgb25sb2FkPSJydW5UZXN0
KCkiIGlkPSJUaGVJZnJhbWVUaGF0UmVxdWVzdHNTdG9yYWdlQWNjZXNzIiBzcmM9Imh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMC9zdG9yYWdlQWNjZXNzL3Jlc291cmNlcy9yZXF1ZXN0LXN0b3JhZ2UtYWNj
ZXNzLWlmcmFtZS5odG1sI3VzZXJTaG91bGRHcmFudEFjY2Vzcyx1c2VyU2hvdWxkQmVDb25zdWx0
ZWQscG9saWN5U2hvdWxkR3JhbnRBY2Nlc3MiPjwvaWZyYW1lPgorPC9kaXY+CiA8L2JvZHk+CiA8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjI3OTczKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNv
cHkpCkBAIC03NjAsOCArNzYwLDcgQEAgaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L3VzZXItaQogWyBIaWdoU2llcnJhKyBdIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9oYXMtc3Rv
cmFnZS1hY2Nlc3MtZnJvbS1wcmV2YWxlbnQtZG9tYWluLXdpdGgtbm9uLXJlY2VudC11c2VyLWlu
dGVyYWN0aW9uLmh0bWwgWyBQYXNzIF0KIFsgSGlnaFNpZXJyYSsgXSBodHRwL3Rlc3RzL3N0b3Jh
Z2VBY2Nlc3MvaGFzLXN0b3JhZ2UtYWNjZXNzLWZyb20tcHJldmFsZW50LWRvbWFpbi13aXRoLXJl
Y2VudC11c2VyLWludGVyYWN0aW9uLmh0bWwgWyBQYXNzIF0KIFsgSGlnaFNpZXJyYSsgXSBodHRw
L3Rlc3RzL3N0b3JhZ2VBY2Nlc3MvcmVxdWVzdC1hbmQtZ3JhbnQtYWNjZXNzLXRoZW4tZGV0YWNo
LXNob3VsZC1ub3QtaGF2ZS1hY2Nlc3MuaHRtbCBbIFBhc3MgXQotCi13ZWJraXQub3JnL2IvMTgx
NjAxIFsgSGlnaFNpZXJyYSsgUmVsZWFzZSBdIGh0dHAvdGVzdHMvc3RvcmFnZUFjY2Vzcy9yZXF1
ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1uYXZpZ2F0ZS1zaG91bGQtbm90LWhhdmUtYWNjZXNz
Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQorWyBIaWdoU2llcnJhKyBdIGh0dHAvdGVzdHMvc3RvcmFn
ZUFjY2Vzcy9yZXF1ZXN0LWFuZC1ncmFudC1hY2Nlc3MtdGhlbi1uYXZpZ2F0ZS1zaG91bGQtbm90
LWhhdmUtYWNjZXNzLmh0bWwgWyBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3Mzg2MSBbIFJlbGVh
c2UgXSBodHRwL3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1zYW1lLW9yaWdp
bi1mcmFtZS5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xNzM4NjEgWyBSZWxl
YXNlIF0gaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtY3Jvc3Mtb3Jp
Z2luLWZyYW1lLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>