<?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>188994</bug_id>
          
          <creation_ts>2018-08-27 11:20:18 -0700</creation_ts>
          <short_desc>Teach WebKitTestRunner and DumpRenderTree about detecting world leaks</short_desc>
          <delta_ts>2018-08-28 11:21:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <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>
          
          <blocked>186214</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jbedard</cc>
    
    <cc>kangil.han</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1453988</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-27 11:20:18 -0700</bug_when>
    <thetext>Teach WebKitTestRunner and DumpRenderTree about detecting world leaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453999</commentid>
    <comment_count>1</comment_count>
      <attachid>348176</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-27 11:29:11 -0700</bug_when>
    <thetext>Created attachment 348176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454001</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 11:31:56 -0700</bug_when>
    <thetext>Attachment 348176 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/TestController.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.h:266:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.cpp:1378:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454090</commentid>
    <comment_count>3</comment_count>
      <attachid>348201</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-27 14:33:53 -0700</bug_when>
    <thetext>Created attachment 348201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454091</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 14:36:58 -0700</bug_when>
    <thetext>Attachment 348201 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/TestController.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.h:266:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/WebKitTestRunner/TestController.cpp:1379:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454198</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-27 16:31:53 -0700</bug_when>
    <thetext>https://trac.webkit.org/r235408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454202</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-27 16:33:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/43775591&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454376</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-08-28 08:23:57 -0700</bug_when>
    <thetext>I hate to bring this up after this patch has landed, but, any reason we didn&apos;t simply add a new option on the input line? (Grep for &apos;--pixel-test&apos; in TestController.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454379</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-28 08:27:39 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #7)
&gt; I hate to bring this up after this patch has landed, but, any reason we
&gt; didn&apos;t simply add a new option on the input line? (Grep for &apos;--pixel-test&apos;
&gt; in TestController.cpp)

There is:
optionList.append(Option(&quot;--check-for-world-leaks&quot;, &quot;Check for leaks of world objects (currently, documents)&quot;, handleOptionCheckForWorldLeaks));

or did you mean something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454392</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-08-28 08:57:21 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; (In reply to Jonathan Bedard from comment #7)
&gt; &gt; I hate to bring this up after this patch has landed, but, any reason we
&gt; &gt; didn&apos;t simply add a new option on the input line? (Grep for &apos;--pixel-test&apos;
&gt; &gt; in TestController.cpp)
&gt; 
&gt; There is:
&gt; optionList.append(Option(&quot;--check-for-world-leaks&quot;, &quot;Check for leaks of
&gt; world objects (currently, documents)&quot;, handleOptionCheckForWorldLeaks));
&gt; 
&gt; or did you mean something else?

I&apos;m talking about the ability of WebKitTestRunner to accept options on the stdin line that contains the layout test to be run.

line 1321 in TestController.cpp contains a function named &apos;parseInputLine&apos; which takes the line read from WebKitTestRunner&apos;s stdin and extracts a few options from it. Is there a reason that world leaks can&apos;t use this? It seems that this offers basically the same functionality as handleControlCommand().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454446</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-28 10:56:08 -0700</bug_when>
    <thetext>parseInputLine() expects the first part to be a test URL, and would have to be changed to not run a test, but get the leaks results. I think my way is a bit clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454466</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-08-28 11:21:33 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; parseInputLine() expects the first part to be a test URL, and would have to
&gt; be changed to not run a test, but get the leaks results. I think my way is a
&gt; bit clearer.

Or we could set it to run after the test finishes, but I agree now that I understand this better, your way is clearer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348176</attachid>
            <date>2018-08-27 11:29:11 -0700</date>
            <delta_ts>2018-08-27 14:33:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188994-20180827112908.patch</filename>
            <type>text/plain</type>
            <size>41150</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzAyYzk0MmE4Y2I3ZTQz
ZDVkZmM0NmQ1Y2JiMTg5NWU3OWI0YjE3Ni4uMDk3YjYwOTg2N2IzNDIxZGFjOGM0YmQ1OGZlYTJh
ZjgwNjlkZjBhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA4LTI3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNoIFdlYktp
dFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlIGFib3V0IGRldGVjdGluZyB3b3JsZCBsZWFr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0
IERvY3VtZW50Ojpwb3N0VGFzaygpIGZvciB1c2UgYnkgV1RSJ3MgaW5qZWN0ZWQgYnVuZGxlLgor
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKIDIwMTgtMDgtMjQgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xpY2sgZXZlbnQgZnJvbSBjbGljaygpIGlz
IG5vdCBjb21wb3NlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MDk4MDhhYmFlNDYzMTQ2ZTNkMjUyODJiNmJmY2Rj
MzJlOTk3ZTVkLi44ZjgyZDBmZDVjMjNlMmU0ODRiYmFlZWExN2NhZWFmOGJkOWFkMzIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE4LTA4LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNoIFdlYktpdFRlc3RSdW5uZXIgYW5kIER1
bXBSZW5kZXJUcmVlIGFib3V0IGRldGVjdGluZyB3b3JsZCBsZWFrcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBub3Rp
b24gb2YgYSAiY29udHJvbCBjb21tYW5kIiBpbiB0aGUgcHJvdG9jb2wgYmV0d2VlbiB3ZWJraXRw
eSBhbmQgCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIvRHVtcFJlbmRlclRyZWUuIEEgY29tbWFu
ZCBpcyBzaW1wbHkgYW4gaW5wdXQgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSAjCisgICAgICAgIHRo
YXQgaXMgY2hlY2tlZCBmb3IgYmVmb3JlIHRyeWluZyB0byBwYXJzZSB0aGUgaW5wdXQgYXMgdGVz
dCBVUkwuIEZvciBub3csIGp1c3Qgb25lCisgICAgICAgIGNvbW1tYW5kIGlzIHN1cHBvcnRlZCwg
d2hpY2ggaXMgIiNDSEVDSyBGT1IgV09STEQgTEVBS1MiLgorICAgICAgICAKKyAgICAgICAgSW4g
cmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQsIHRoZSB0b29sIGR1bXBzIGFuIG91dHB1dCBibG9jayBp
biB0aGUgdXN1YWwgcHNldWRvLU1JTUUtc3R5bGUsCisgICAgICAgIHdpdGggYSB0cmFpbGluZyAi
I0VPRiIuIEZ1dHVyZSBwYXRjaGVzIHdpbGwgYWRkIHN1cHBvcnQgdG8gd2Via2l0cHkgdG8gcGFy
c2UgdGhpcyBvdXRwdXQuCisgICAgICAgIAorICAgICAgICBEdW1wUmVuZGVyVHJlZSBzdHVicyBv
dXQgdGhlIGNvbW1hbmQsIHJldHVybmluZyBhbiBlbXB0eSBibG9jay4KKyAgICAgICAgCisgICAg
ICAgIFdlYktpdFRlc3RSdW5uZXIgcmVzcG9uZHMgdG8gdGhlIGNvbW1hbmQgYnkgZHVtcGluZyB0
aGUgbGlzdCBvZiBsaXZlIGRvY3VtZW50cywgaWYgaXQgd2FzCisgICAgICAgIHJ1biB3aXRoIHRo
ZSAtLWNoZWNrLWZvci13b3JsZC1sZWFrcyBvcHRpb24uCisgICAgICAgIAorICAgICAgICBXaGVu
IHJ1biB3aXRoIC0tY2hlY2stZm9yLXdvcmxkLWxlYWtzLCBXZWJLaXRUZXN0UnVubmVyIGdldHMg
dGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMgdmlhCisgICAgICAgIFdLQnVuZGxlR2V0TGl2ZURv
Y3VtZW50VVJMcygpIGFmdGVyIGV2ZXJ5IHRlc3QgKHRoaXMgYWxsb3dzIGl0IHRvIGRldGVjdCB0
aGUgZmlyc3QgdGVzdAorICAgICAgICB0aGF0IGxlYWtlZCBhIGRvY3VtZW50KSwgYW5kIGtlZXBz
IHRoZW0gaW4gYSBtYXAgb2YgZG9jdW1lbnQgaWRlbnRpZmllciB0byB0ZXN0IGFuZCBsaXZlIGRv
Y3VtZW50IFVSTC4KKyAgICAgICAgVGhlbiB3aGVuIGl0IHJlY2VpdmVzIHRoZSAiI0NIRUNLIEZP
UiBXT1JMRCBMRUFLUyIgY29tbWFuZCwgaXQgY2FsbHMgaW50byB0aGUgYnVuZGxlIHRvCisgICAg
ICAgIGNsZWFyIHRoZSBwYWdlIGFuZCBtZW1vcnkgY2FjaGVzLCBydW5zIGEgR0MsIHRoZW4gcG9z
dHMgYSB0YXNrIChpbiB0aGUgRG9jdW1lbnQ6OnBvc3RUYWtzKCkgc2Vuc2UpCisgICAgICAgIGFm
dGVyIHdoaWNoIGl0IHJlcXVlc3RzIHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRzIGZvciBhIGZp
bmFsIHRpbWUsIGV4Y2x1ZGluZyBhbnkgdGhhdCBhcmUgbG9hZGVkCisgICAgICAgIGluIGxpdmUg
RnJhbWVzICh0aHVzIG9taXR0aW5nIHRoZSBhYm91dDpibGFuayB0aGF0IHdpbGwgYmUgbG9hZGVk
IGF0IHRoaXMgcG9pbnQpLiBEb2N1bWVudHMgaW4gdGhpcworICAgICAgICBsaXN0IGFyZSB0aGVy
ZWZvcmUgbGVha2VkIChvciBhYmFuZG9uZWQpLgorICAgICAgICAKKyAgICAgICAgRnV0dXJlIHBh
dGNoZXMgd2lsbCBob29rIHVwIHdlYmtpdHB5IHJlcG9ydGluZyBmb3IgbGVha2VkIGRvY3VtZW50
cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGUu
Y3BwOgorICAgICAgICAoV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKToKKyAgICAgICAgKFdL
QnVuZGxlQ2xlYXJQYWdlQ2FjaGUpOgorICAgICAgICAoV0tCdW5kbGVDbGVhck1lbW9yeUNhY2hl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VQb3N0VGFzayk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bGl2ZURvY3VtZW50VVJMcyk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorCiAyMDE4LTA4LTIzICBK
ZWZmIE1pbGxlciAgPGplZmZtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgLVtXS05hdmln
YXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkV2l0aEN1cnJl
bnRQb2xpY3k6cGx1Z2luSW5mbzp1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uOl0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMGExZDkwMzQxN2Q0Y2E5ZGMwZTMwYmJmZmFjNDFkMTg4ZjMxYmRiYy4u
YTcxZGEzZjBlZTFhOTdmYjY1MDAwZmMxYTU1ODc5MDRmNzkyYTY4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRE5TUHJlZmV0
Y2hFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ROU1ByZWZldGNoRW5hYmxlZDsgfQogICAg
IHZvaWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKLSAg
ICB2b2lkIHBvc3RUYXNrKFRhc2smJikgZmluYWw7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNv
bnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
b3N0VGFzayhUYXNrJiYpIGZpbmFsOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3Mg
dGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
KiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlckNhbGxiYWNrcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggZDFjN2IwZmU5
MmUyYzZlMDU3NmI4OWE4YmE4YTFjODAzNWRhY2Y4ZS4uMWEzMmM2MDVmNWYyYjcxM2I2NDMwMzA5
ZTFkZWU4MzMzMTgzMTFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGUuY3BwCkBAIC0zNCwxMSArMzQsMTgg
QEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIK
ICNpbmNsdWRlICJXS0J1bmRsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5o
IgorI2luY2x1ZGUgIldLTXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXS051bWJlci5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwUHJveHkuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0RhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUaHJlYWRQ
cm94eS5oPgogCkBAIC0yMTMsNiArMjIwLDMwIEBAIHZvaWQgV0tCdW5kbGVTZXRBc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlCiAg
ICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAorV0tBcnJheVJlZiBXS0J1bmRs
ZUdldExpdmVEb2N1bWVudFVSTHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFn
ZXMpCit7CisgICAgYXV0byBsaXZlRG9jdW1lbnRzID0gdG9JbXBsKGJ1bmRsZVJlZiktPmxpdmVE
b2N1bWVudFVSTHModG9JbXBsKHBhZ2VHcm91cFJlZiksIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VH
cm91cFBhZ2VzKTsKKworICAgIGF1dG8gbGl2ZVVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGxpdmVEb2N1bWVudHMpIHsK
KyAgICAgICAgYXV0byB1cmxJbmZvID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworCisgICAgICAgIGF1dG8gZG9jdW1lbnRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImlkIikpOworICAgICAgICBhdXRvIGRvY3VtZW50VVJMS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOworCisgICAgICAg
IGF1dG8gZG9jdW1lbnRJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpdC5rZXkpKTsK
KyAgICAgICAgYXV0byBkb2N1bWVudFVSTFZhbHVlID0gYWRvcHRXSyh0b0NvcGllZEFQSShpdC52
YWx1ZSkpOworCisgICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odXJsSW5mby5nZXQoKSwgZG9j
dW1lbnRJREtleS5nZXQoKSwgZG9jdW1lbnRJRFZhbHVlLmdldCgpKTsKKyAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbSh1cmxJbmZvLmdldCgpLCBkb2N1bWVudFVSTEtleS5nZXQoKSwgZG9jdW1l
bnRVUkxWYWx1ZS5nZXQoKSk7CisKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obGl2ZVVSTHMu
Z2V0KCksIHVybEluZm8uZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbGl2ZVVSTHMu
bGVha1JlZigpOworfQorCiB2b2lkIFdLQnVuZGxlUmVwb3J0RXhjZXB0aW9uKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGV4Y2VwdGlvbikKIHsKICAgICBJbmplY3RlZEJ1bmRsZTo6
cmVwb3J0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbik7CkBAIC0yMjksNiArMjYwLDE2IEBA
IHZvaWQgV0tCdW5kbGVTZXREYXRhYmFzZVF1b3RhKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgdWlu
dDY0X3QgcXVvdGEpCiAgICAgRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5zZXRRdW90YSgq
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKCJmaWxlX18wIiksIHF1
b3RhKTsKIH0KIAordm9pZCBXS0J1bmRsZUNsZWFyUGFnZUNhY2hlKFdLQnVuZGxlUmVmIGJ1bmRs
ZSkKK3sKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5p
bmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKK30KKwordm9pZCBXS0J1bmRsZUNsZWFyTWVtb3J5
Q2FjaGUoV0tCdW5kbGVSZWYgYnVuZGxlKQoreworICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24o
KS5ldmljdFJlc291cmNlcygpOworfQorCiBXS0RhdGFSZWYgV0tCdW5kbGVDcmVhdGVXS0RhdGFG
cm9tVUludDhBcnJheShXS0J1bmRsZVJlZiBidW5kbGUsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGRhdGEpCiB7CiAgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwoYnVuZGxlKS0+Y3Jl
YXRlV2ViRGF0YUZyb21VaW50OEFycmF5KGNvbnRleHQsIGRhdGEpLmxlYWtSZWYoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2UuY3BwCmluZGV4IGI4NGQ1YWIzYTFhMjBiNTdmYTJmYjBhZDEwZDYw
NjRkYTg4NDNiMmMuLjI0ZDRmMGQ0NDlkNDA3MTk4ODY2MWRkMGM2NmJlMDBmMTA3MzgxOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KQEAgLTYxOSw2ICs2MjAsMjUg
QEAgdm9pZCBXS0J1bmRsZVBhZ2VSZWdpc3RlclNjcm9sbE9wZXJhdGlvbkNvbXBsZXRpb25DYWxs
YmFjayhXS0J1bmRsZVBhZ2VSZWYgcGFnZVIKICAgICB9KTsKIH0KIAordm9pZCBXS0J1bmRsZVBh
Z2VQb3N0VGFzayhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlVGVzdE5vdGlm
aWNhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQoreworICAgIGlmICghY2Fs
bGJhY2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIHdlYlBh
Z2UgPSB0b0ltcGwocGFnZVJlZik7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHdlYlBhZ2Ug
PyB3ZWJQYWdlLT5jb3JlUGFnZSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCA9IHBhZ2UtPm1haW5G
cmFtZSgpLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZG9jdW1lbnQtPnBvc3RUYXNrKFs9XSAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpIHsKKyAgICAgICAgY2FsbGJhY2soY29udGV4dCk7CisgICAgfSk7Cit9CisKIHZvaWQg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5n
UmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHlSZWYpCiB7CiAgICAgdG9J
bXBsKHBhZ2VSZWYpLT5wb3N0TWVzc2FnZSh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRv
SW1wbChtZXNzYWdlQm9keVJlZikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCmluZGV4IDMwNTE4
NjZjOTJmNjIxMmQ1MmM5MzBiN2RkMGI3NDljYTRiMmFiMTEuLjI3NjU4OTEyNWVlOGUyYmY1ZTdm
ZTI1OWZkMmNjNzc2OTNlM2IxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgKQEAgLTExNyw2
ICsxMTcsOSBAQCBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlQ29weUdyb3VwSWRl
bnRpZmllcihXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiB0eXBlZGVmIHZvaWQgKCpXS0J1bmRsZVBh
Z2VUZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2spKHZvaWQqIGNvbnRleHQpOwogV0tfRVhQT1JUIHZv
aWQgV0tCdW5kbGVQYWdlUmVnaXN0ZXJTY3JvbGxPcGVyYXRpb25Db21wbGV0aW9uQ2FsbGJhY2so
V0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZVBhZ2VUZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2ssIHZv
aWQqIGNvbnRleHQpOwogCisvLyBQb3N0cyBhIHRhc2sgaW4gdGhlIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgb2YgdGhlIG1haW4gZnJhbWUuIFVzZWQgdG8gZG8gd29yayBhZnRlciBvdGhlciB0YXNr
cyBoYXZlIGNvbXBsZXRlZC4KK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVBvc3RUYXNrKFdL
QnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVQYWdlVGVzdE5vdGlmaWNhdGlvbkNhbGxiYWNrLCB2b2lk
KiBjb250ZXh0KTsKKwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVz
c2FnZUJvZHkpOwogCiAvLyBTd2l0Y2hlcyBhIGNvbm5lY3Rpb24gaW50byBhIGZ1bGx5IHN5bmNo
cm9ub3VzIG1vZGUsIHNvIGFsbCBtZXNzYWdlcyBiZWNvbWUgc3luY2hyb25vdXMgdW50aWwgd2Ug
Z2V0IGEgcmVzcG9uc2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmgKaW5kZXggZjRiMDk0
M2FjNmJlYTM1ZDFkMjE1ZDk4NzA0MjI1YzgzZjRiNGZiYi4uMzk0OWY3N2I2YzkxZmNhNGEwMjdh
NDRiN2I0MzI3N2EyY2VmMzcxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaApAQCAt
NjgsNiArNjgsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb25zKFdLQnVuZGxlUmVmIGJ1bmRsZSwgVwogV0tfRVhQT1JUIHVpbnQ2NF90
IFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoV0tCdW5kbGVSZWYgYnVuZGxlLCBKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub3RpZmljYXRpb24pOwogV0tfRVhQT1JUIFdLRGF0
YVJlZiBXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KFdLQnVuZGxlUmVmIGJ1bmRs
ZSwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSk7CiBXS19FWFBPUlQgdm9p
ZCBXS0J1bmRsZVNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKFdLQnVuZGxlUmVm
IGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJs
ZWQpOworLy8gUmV0dXJucyBhcnJheSBvZiBkaWN0aW9uYXJpZXMuIERpY3Rpb25hcnkga2V5cyBh
cmUgZG9jdW1lbnQgaWRlbnRpZmllcnMsIHZhbHVlcyBhcmUgZG9jdW1lbnQgVVJMcy4KK1dLX0VY
UE9SVCBXS0FycmF5UmVmIFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhXS0J1bmRsZVJlZiBi
dW5kbGUsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgYm9vbCBleGNsdWRlRG9jdW1l
bnRzSW5QYWdlR3JvdXBQYWdlcyk7CiAKIC8vIFVzZXJDb250ZW50IEFQSQogV0tfRVhQT1JUIHZv
aWQgV0tCdW5kbGVBZGRVc2VyU2NyaXB0KFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkLCBX
S1N0cmluZ1JlZiBzb3VyY2UsIFdLVVJMUmVmIHVybCwgV0tBcnJheVJlZiB3aGl0ZWxpc3QsIFdL
QXJyYXlSZWYgYmxhY2tsaXN0LCBfV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25U
aW1lLCBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpOwpAQCAtOTYs
NiArOTgsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NO
b3RpZnlPYnNlcnZlcihXS0J1bmRsZVJlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlRXh0
ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tBcnJheVJl
ZiBjbGFzc2VzKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVDbGVhclBhZ2VDYWNoZShXS0J1
bmRsZVJlZiBidW5kbGUpOworV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVDbGVhck1lbW9yeUNhY2hl
KFdLQnVuZGxlUmVmIGJ1bmRsZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAppbmRleCBmNDUwYzFlYTI2M2U4YmVhNmFmYWU0NjZjYWQyN2I5Y2I4
MTg1YWE2Li5kNDMxMTRjMjA2NDZiNDc0M2JhZDdjYWFiY2VkOGZmMTg2YzMxNDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxp
Y2F0aW9uQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBAIC02MDQsNiAr
NjA1LDI2IEBAIFJlZjxBUEk6OkRhdGE+IEluamVjdGVkQnVuZGxlOjpjcmVhdGVXZWJEYXRhRnJv
bVVpbnQ4QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAgcmV0dXJuIEFQSTo6RGF0YTo6
Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihhcnJheURhdGEtPmJhc2VBZGRyZXNz
KCkpLCBhcnJheURhdGEtPmJ5dGVMZW5ndGgoKSk7CiB9CiAKK0luamVjdGVkQnVuZGxlOjpEb2N1
bWVudElEVG9VUkxNYXAgSW5qZWN0ZWRCdW5kbGU6OmxpdmVEb2N1bWVudFVSTHMoV2ViUGFnZUdy
b3VwUHJveHkqIHBhZ2VHcm91cCwgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdl
cykKK3sKKyAgICBEb2N1bWVudElEVG9VUkxNYXAgcmVzdWx0OworCisgICAgZm9yIChjb25zdCBh
dXRvKiBkb2N1bWVudCA6IERvY3VtZW50OjphbGxEb2N1bWVudHMoKSkKKyAgICAgICAgcmVzdWx0
LmFkZChkb2N1bWVudC0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIGRvY3VtZW50LT51cmwoKS5z
dHJpbmcoKSk7CisKKyAgICBpZiAoZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFnZXMpIHsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvKiBwYWdlIDogUGFnZUdyb3VwOjpwYWdlR3JvdXAocGFn
ZUdyb3VwLT5pZGVudGlmaWVyKCkpLT5wYWdlcygpKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8qIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZG9j
dW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
cmVzdWx0LnJlbW92ZShmcmFtZS0+ZG9jdW1lbnQoKS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KFdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKIHsKICAgICBwYWdlLT5jb3JlUGFnZSgpLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCmlu
ZGV4IDE2YzdjMmYyYmQyY2E4NjcyNjBlZGUwNjM0ZWM4MTI1OTVkYWExN2IuLjI1N2ViYjc4MmIw
MjI0MGJiYTE0MjI1MzQ4ZDlkNjllYjQ0ZWFiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC0xMjIs
NiArMTIyLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVy
bWlzc2lvbnMoV2ViUGFnZSopOwogICAgIHVpbnQ2NF90IHdlYk5vdGlmaWNhdGlvbklEKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAgICAgUmVmPEFQSTo6RGF0YT4gY3JlYXRlV2ViRGF0YUZy
b21VaW50OEFycmF5KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisgICAgCisgICAgdHlwZWRl
ZiBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IERvY3VtZW50SURUb1VSTE1hcDsKKyAgICBEb2N1
bWVudElEVG9VUkxNYXAgbGl2ZURvY3VtZW50VVJMcyhXZWJQYWdlR3JvdXBQcm94eSosIGJvb2wg
ZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFnZXMpOwogCiAgICAgLy8gVXNlckNvbnRlbnQg
QVBJCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiwgSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCosIFN0cmluZyYmIHNvdXJjZSwgU3RyaW5nJiYgdXJsLCBBUEk6OkFy
cmF5KiB3aGl0ZWxpc3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlw
dEluamVjdGlvblRpbWUsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFkNDgzMGU4
YWE2NGZjMmFmZGEzYWZiMGE5NDMzOTU5OTFmNjUyYTQuLjU1MDM1YWI2MDJmOGExN2FiNjc1NDlh
ZTNmOTNiZTM0ZTdlZDQwM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxOC0wOC0yNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBUZWFjaCBXZWJLaXRUZXN0UnVubmVy
IGFuZCBEdW1wUmVuZGVyVHJlZSBhYm91dCBkZXRlY3Rpbmcgd29ybGQgbGVha3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk5NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRzIHRoZSBub3Rpb24gb2YgYSAiY29udHJvbCBjb21tYW5kIiBpbiB0aGUgcHJvdG9jb2wg
YmV0d2VlbiB3ZWJraXRweSBhbmQgCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIvRHVtcFJlbmRl
clRyZWUuIEEgY29tbWFuZCBpcyBzaW1wbHkgYW4gaW5wdXQgc3RyaW5nIHN0YXJ0aW5nIHdpdGgg
YSAjCisgICAgICAgIHRoYXQgaXMgY2hlY2tlZCBmb3IgYmVmb3JlIHRyeWluZyB0byBwYXJzZSB0
aGUgaW5wdXQgYXMgdGVzdCBVUkwuIEZvciBub3csIGp1c3Qgb25lCisgICAgICAgIGNvbW1tYW5k
IGlzIHN1cHBvcnRlZCwgd2hpY2ggaXMgIiNDSEVDSyBGT1IgV09STEQgTEVBS1MiLgorICAgICAg
ICAKKyAgICAgICAgSW4gcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQsIHRoZSB0b29sIGR1bXBzIGFu
IG91dHB1dCBibG9jayBpbiB0aGUgdXN1YWwgcHNldWRvLU1JTUUtc3R5bGUsCisgICAgICAgIHdp
dGggYSB0cmFpbGluZyAiI0VPRiIuIEZ1dHVyZSBwYXRjaGVzIHdpbGwgYWRkIHN1cHBvcnQgdG8g
d2Via2l0cHkgdG8gcGFyc2UgdGhpcyBvdXRwdXQuCisgICAgICAgIAorICAgICAgICBEdW1wUmVu
ZGVyVHJlZSBzdHVicyBvdXQgdGhlIGNvbW1hbmQsIHJldHVybmluZyBhbiBlbXB0eSBibG9jay4K
KyAgICAgICAgCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgcmVzcG9uZHMgdG8gdGhlIGNvbW1h
bmQgYnkgZHVtcGluZyB0aGUgbGlzdCBvZiBsaXZlIGRvY3VtZW50cywgaWYgaXQgd2FzCisgICAg
ICAgIHJ1biB3aXRoIHRoZSAtLWNoZWNrLWZvci13b3JsZC1sZWFrcyBvcHRpb24uCisgICAgICAg
IAorICAgICAgICBXaGVuIHJ1biB3aXRoIC0tY2hlY2stZm9yLXdvcmxkLWxlYWtzLCBXZWJLaXRU
ZXN0UnVubmVyIGdldHMgdGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMgdmlhCisgICAgICAgIFdL
QnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcygpIGFmdGVyIGV2ZXJ5IHRlc3QgKHRoaXMgYWxsb3dz
IGl0IHRvIGRldGVjdCB0aGUgZmlyc3QgdGVzdAorICAgICAgICB0aGF0IGxlYWtlZCBhIGRvY3Vt
ZW50KSwgYW5kIGtlZXBzIHRoZW0gaW4gYSBtYXAgb2YgZG9jdW1lbnQgaWRlbnRpZmllciB0byB0
ZXN0IGFuZCBsaXZlIGRvY3VtZW50IFVSTC4KKyAgICAgICAgVGhlbiB3aGVuIGl0IHJlY2VpdmVz
IHRoZSAiI0NIRUNLIEZPUiBXT1JMRCBMRUFLUyIgY29tbWFuZCwgaXQgY2FsbHMgaW50byB0aGUg
YnVuZGxlIHRvCisgICAgICAgIGNsZWFyIHRoZSBwYWdlIGFuZCBtZW1vcnkgY2FjaGVzLCBydW5z
IGEgR0MsIHRoZW4gcG9zdHMgYSB0YXNrIChpbiB0aGUgRG9jdW1lbnQ6OnBvc3RUYWtzKCkgc2Vu
c2UpCisgICAgICAgIGFmdGVyIHdoaWNoIGl0IHJlcXVlc3RzIHRoZSBsaXN0IG9mIGxpdmUgZG9j
dW1lbnRzIGZvciBhIGZpbmFsIHRpbWUsIGV4Y2x1ZGluZyBhbnkgdGhhdCBhcmUgbG9hZGVkCisg
ICAgICAgIGluIGxpdmUgRnJhbWVzICh0aHVzIG9taXR0aW5nIHRoZSBhYm91dDpibGFuayB0aGF0
IHdpbGwgYmUgbG9hZGVkIGF0IHRoaXMgcG9pbnQpLiBEb2N1bWVudHMgaW4gdGhpcworICAgICAg
ICBsaXN0IGFyZSB0aGVyZWZvcmUgbGVha2VkIChvciBhYmFuZG9uZWQpLgorICAgICAgICAKKyAg
ICAgICAgRnV0dXJlIHBhdGNoZXMgd2lsbCBob29rIHVwIHdlYmtpdHB5IHJlcG9ydGluZyBmb3Ig
bGVha2VkIGRvY3VtZW50cy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbToKKyAgICAgICAgKGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0
aW9ucyk6CisgICAgICAgIChoYW5kbGVDb250cm9sQ29tbWFuZCk6CisgICAgICAgIChydW5UZXN0
aW5nU2VydmVyTG9vcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcDoKKyAgICAgICAgKGhhbmRsZUNvbnRyb2xDb21tYW5kKToKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwOgorICAgICAgICAoV1RSOjpwb3N0R0NUYXNrKToKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjpoYW5kbGVPcHRpb25DaGVja0Zvcldv
cmxkTGVha3MpOgorICAgICAgICAoV1RSOjpPcHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBc3luY1Rhc2s6
OnJ1bik6CisgICAgICAgIChXVFI6OkFzeW5jVGFzazo6Y3VycmVudFRhc2spOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjplbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV29ybGRMZWFrcyk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjp3aWxsRGVzdHJveVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpw
YXJzZUlucHV0TGluZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp3YWl0Rm9yQ29t
cGxldGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDb250cm9sQ29t
bWFuZCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW5UZXN0aW5nU2VydmVyTG9v
cCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW4pOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUxpdmVEb2N1bWVudHNMaXN0KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChX
VFI6OkFzeW5jVGFzazo6QXN5bmNUYXNrKToKKyAgICAgICAgKFdUUjo6QXN5bmNUYXNrOjp0YXNr
Q29tcGxldGUpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6QWJhbmRvbmVkRG9jdW1l
bnRJbmZvOjpBYmFuZG9uZWREb2N1bWVudEluZm8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52
b2tlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmg6CisgICAgICAg
IChXVFI6OlRlc3RPcHRpb25zOjpoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zIGNvbnN0KToK
KwogMjAxOC0wOC0yNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBDb252ZXJ0IHRpbWVvdXQgdmFsdWVzIGluIFdlYktpdFRlc3RSdW5uZXIgdG8gV1RG
OjpTZWNvbmRzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5k
ZXggNDMwNjljY2RmMjNkMWJkNDM3YmMzZjBiZTI2MGUxNDk3NDMzYTU1MC4uMmFkMDNhMDE4NDU3
ZTU0MGVlZDg2NmI3MmY3NDY1NmY0YjlmNjk0OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMjIzLDYgKzIyMyw3IEBAIHN0YXRpYyBpbnQgZ2NCZXR3
ZWVuVGVzdHM7CiBzdGF0aWMgaW50IGFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRI
b3N0czsKIHN0YXRpYyBpbnQgc2hvd1dlYlZpZXc7CiBzdGF0aWMgaW50IHByaW50VGVzdENvdW50
Oworc3RhdGljIGludCBjaGVja0ZvcldvcmxkTGVha3M7CiBzdGF0aWMgQk9PTCBwcmludFNlcGFy
YXRvcnM7CiBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwZXJzaXN0ZW50VXNlclN0eWxl
U2hlZXRMb2NhdGlvbjsKIHN0YXRpYyBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3Rz
OwpAQCAtMTEyMCw2ICsxMTIxLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9t
Q29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10KICAgICAgICAg
eyJhbGxvdy1hbnktY2VydGlmaWNhdGUtZm9yLWFsbG93ZWQtaG9zdHMiLCBub19hcmd1bWVudCwg
JmFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cywgWUVTfSwKICAgICAgICAg
eyJzaG93LXdlYnZpZXciLCBub19hcmd1bWVudCwgJnNob3dXZWJWaWV3LCBZRVN9LAogICAgICAg
ICB7InByaW50LXRlc3QtY291bnQiLCBub19hcmd1bWVudCwgJnByaW50VGVzdENvdW50LCBZRVN9
LAorICAgICAgICB7ImNoZWNrLWZvci13b3JsZC1sZWFrcyIsIG5vX2FyZ3VtZW50LCAmY2hlY2tG
b3JXb3JsZExlYWtzLCBOT30sCiAgICAgICAgIHtudWxscHRyLCAwLCBudWxscHRyLCAwfQogICAg
IH07CiAKQEAgLTExNTIsNiArMTE1NCwyMyBAQCBzdGF0aWMgYm9vbCB1c2VMb25nUnVubmluZ1Nl
cnZlck1vZGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKICAgICByZXR1cm4gKGFyZ2Mg
PT0gb3B0aW5kKzEgJiYgc3RyY21wKGFyZ3Zbb3B0aW5kXSwgIi0iKSA9PSAwKTsKIH0KIAorc3Rh
dGljIGJvb2wgaGFuZGxlQ29udHJvbENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkKK3sKKyAg
ICBpZiAoIXN0cmNtcCgiI0NIRUNLIEZPUiBXT1JMRCBMRUFLUyIsIGNvbW1hbmQpKSB7CisgICAg
ICAgIC8vIER1bXBSZW5kZXJUcmVlIGRvZXMgbm90IHN1cHBvcnQgY2hlY2tpbmcgZm9yIHdvcmxk
IGxlYWtzLgorICAgICAgICBXVEY6OlN0cmluZyByZXN1bHQoIlxuIik7CisgICAgICAgIHByaW50
ZigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4iKTsKKyAgICAgICAgcHJpbnRmKCJDb250ZW50
LUxlbmd0aDogJXVcbiIsIHJlc3VsdC5sZW5ndGgoKSk7CisgICAgICAgIGZ3cml0ZShyZXN1bHQu
dXRmOCgpLmRhdGEoKSwgMSwgcmVzdWx0Lmxlbmd0aCgpLCBzdGRvdXQpOworICAgICAgICBwcmlu
dGYoIiNFT0ZcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiNFT0ZcbiIpOworICAgICAg
ICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIHJ1blRl
c3RpbmdTZXJ2ZXJMb29wKCkKIHsKICAgICAvLyBXaGVuIER1bXBSZW5kZXJUcmVlIHJ1biBpbiBz
ZXJ2ZXIgbW9kZSwgd2UganVzdCB3YWl0IGFyb3VuZCBmb3IgZmlsZSBuYW1lcwpAQCAtMTE2Niw2
ICsxMTg1LDkgQEAgc3RhdGljIHZvaWQgcnVuVGVzdGluZ1NlcnZlckxvb3AoKQogICAgICAgICBp
ZiAoc3RybGVuKGZpbGVuYW1lQnVmZmVyKSA9PSAwKQogICAgICAgICAgICAgY29udGludWU7CiAK
KyAgICAgICAgaWYgKGhhbmRsZUNvbnRyb2xDb21tYW5kKGZpbGVuYW1lQnVmZmVyKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIHJ1blRlc3QoZmlsZW5hbWVCdWZmZXIpOwogCiAg
ICAgICAgIGlmIChwcmludFRlc3RDb3VudCkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9E
dW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNTRkMDZlYTgzMjIwY2Q2ODAzZTM2ZjQ4YTI2ZWYyMWIw
MDA0OWZkOS4uNzA0NjVjZjAzMWJkNDYzNWUzMzE2OTViYjM4ODUwYTBkZjU1MGIyMiAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0xMTEyLDYgKzEx
MTIsMjIgQEAgc3RhdGljIHZvaWQgcmVtb3ZlRm9udEZhbGxiYWNrSWZQcmVzZW50KGNvbnN0IFN0
cmluZyYgZm9udEZhbGxiYWNrUGF0aCkKICAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKG51bGxwdHIpOwogfQogCitzdGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFu
ZChjb25zdCBjaGFyKiBjb21tYW5kKQoreworICAgIGlmICghc3RyY21wKCIjQ0hFQ0sgRk9SIEFC
QU5ET05FRCBET0NVTUVOVFMiLCBjb21tYW5kKSkgeworICAgICAgICAvLyBEdW1wUmVuZGVyVHJl
ZSBkb2VzIG5vdCBzdXBwb3J0IGNoZWNraW5nIGZvciBhYmFuZG9uZGVkIGRvY3VtZW50cy4KKyAg
ICAgICAgU3RyaW5nIHJlc3VsdCgiXG4iKTsKKyAgICAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6
IHRleHQvcGxhaW5cbiIpOworICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAldVxuIiwg
cmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgZndyaXRlKHJlc3VsdC51dGY4KCkuZGF0YSgpLCAx
LCByZXN1bHQubGVuZ3RoKCksIHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiI0VPRlxuIik7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiI0VPRlxuIik7CisgICAgICAgIGZmbHVzaChzdGRvdXQp
OworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KIAogc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcm
IGlucHV0TGluZSkKIHsKQEAgLTE2MTYsNiArMTYzMiw5IEBAIGludCBtYWluKGludCBhcmdjLCBj
b25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBpZiAoc3RybGVuKGZpbGVuYW1lQnVmZmVy
KSA9PSAwKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBpZiAoaGFu
ZGxlQ29udHJvbENvbW1hbmQoZmlsZW5hbWVCdWZmZXIpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCiAgICAgICAgICAgICBydW5UZXN0KGZpbGVuYW1lQnVmZmVyKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCmluZGV4IDUxNjhlYTdkMjIxODk2NjI0ZTdkMjBm
NzI5YjI4N2QxZjliODkxN2YuLjYxMTNiNzZlMWI2NTBlZjAwOTc3M2IwYjAwNTc5N2IyZTIzYWQ3
ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCkBAIC0xODAsNiArMTgwLDIxIEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVS
ZWYgbWVzc2FnCiAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdl
TmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHBv
c3RHQ1Rhc2sodm9pZCogY29udGV4dCkKK3sKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucmVwb3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKKyAgICBXS1JlbGVh
c2UocGFnZSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UpCit7CisgICAgY29uc3QgYm9vbCBleGNsdWRlRG9jdW1lbnRz
SW5QYWdlR3JvdXAgPSB0cnVlOworICAgIGF1dG8gZG9jdW1lbnRVUkxzID0gYWRvcHRXSyhXS0J1
bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9j
dW1lbnRzSW5QYWdlR3JvdXApKTsKKyAgICBhdXRvIGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURvY3VtZW50cyIpKTsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRV
UkxzLmdldCgpKTsKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VU
b1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5
cGVSZWYgbWVzc2FnZUJvZHkpCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJCZWdpblRlc3QiKSkgewpAQCAtMjQ0LDcgKzI1OSwyNCBAQCB2b2lk
IEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3Rp
ZmljYXRpb25QZXJtaXNzaW9ucygpOwogCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpwYWdlKCkt
PnJlc2V0QWZ0ZXJUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldExpdmVEb2N1bWVudHMi
KSkgeworICAgICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IGZh
bHNlOworICAgICAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZl
RG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwKSk7CisgICAgICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOworICAgICAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRVUkxz
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2hlY2tGb3JXb3JsZExlYWtzIikpIHsKKyAg
ICAgICAgV0tCdW5kbGVDbGVhclBhZ2VDYWNoZShtX2J1bmRsZSk7CisgICAgICAgIFdLQnVuZGxl
Q2xlYXJNZW1vcnlDYWNoZShtX2J1bmRsZSk7CisgICAgICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxl
Y3RKYXZhU2NyaXB0T2JqZWN0cyhtX2J1bmRsZSk7CiAKKyAgICAgICAgV0tSZXRhaW4ocGFnZSk7
IC8vIEJhbGFuY2VkIGJ5IHRoZSByZWxlYXNlIGluIHBvc3RHQ1Rhc2suCisgICAgICAgIFdLQnVu
ZGxlUGFnZVBvc3RUYXNrKHBhZ2UsIHBvc3RHQ1Rhc2ssICh2b2lkKilwYWdlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCmluZGV4IDBhZDc1ZTcwZGQzN2JhYjFiYzgyMmI1
NWJlOTU1Y2RmZDVkNDI3MzQuLmUzODdlM2QyY2MyZjNjNzUwNWY0MGM2Yjk2OGI5MWE1MGZjZjc0
ZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmgKQEAgLTE0MCw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0
ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoKTsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRp
bmcoKTsKIAorICAgIHZvaWQgcmVwb3J0TGl2ZURvY3VtZW50cyhXS0J1bmRsZVBhZ2VSZWYpOwor
CiAgICAgdm9pZCByZXNldFVzZXJTY3JpcHRJbmplY3RlZENvdW50KCkgeyBtX3VzZXJTY3JpcHRJ
bmplY3RlZENvdW50ID0gMDsgfQogICAgIHZvaWQgaW5jcmVhc2VVc2VyU2NyaXB0SW5qZWN0ZWRD
b3VudCgpIHsgKyttX3VzZXJTY3JpcHRJbmplY3RlZENvdW50OyB9CiAgICAgc2l6ZV90IHVzZXJT
Y3JpcHRJbmplY3RlZENvdW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2NyaXB0SW5qZWN0ZWRD
b3VudDsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHAKaW5kZXggYTg5ZTBkYjRlMjQ5NWFh
ZTUwZTMzYTQ0ZDM5ZDcwNDAyMzQ1OTE3Yi4uYTUxNDQwYjkxODc3NmI1OGFkNjhkOGRkNWY1ODk1
NmNjMjc2NTMxMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCkBAIC05Myw2ICs5Mywx
MiBAQCBzdGF0aWMgYm9vbCBoYW5kbGVPcHRpb25TaG93VG91Y2hlcyhPcHRpb25zJiBvcHRpb25z
LCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp
YyBib29sIGhhbmRsZU9wdGlvbkNoZWNrRm9yV29ybGRMZWFrcyhPcHRpb25zJiBvcHRpb25zLCBj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopCit7CisgICAgb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVh
a3MgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBoYW5kbGVPcHRp
b25BbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMoT3B0aW9ucyYgb3B0aW9u
cywgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQogewogICAgIG9wdGlvbnMuYWxsb3dBbnlIVFRQ
U0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gdHJ1ZTsKQEAgLTEyOSw2ICsxMzUsNyBAQCBP
cHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIoT3B0aW9ucyYgbykKICAgICBvcHRpb25MaXN0
LmFwcGVuZChPcHRpb24oIi0tYWxsb3ctYW55LWNlcnRpZmljYXRlLWZvci1hbGxvd2VkLWhvc3Rz
IiwgIkFsbG93cyBhbnkgSFRUUFMgY2VydGlmaWNhdGUgZm9yIGFuIGFsbG93ZWQgaG9zdC4iLCBo
YW5kbGVPcHRpb25BbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMpKTsKICAg
ICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oIi0tc2hvdy13ZWJ2aWV3IiwgIlNob3cgdGhlIFdl
YlZpZXcgZHVyaW5nIHRlc3QgcnVucyAoZm9yIGRlYnVnZ2luZykiLCBoYW5kbGVPcHRpb25TaG93
V2ViVmlldykpOwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1zaG93LXRvdWNoZXMi
LCAiU2hvdyB0aGUgdG91Y2hlcyBkdXJpbmcgdGVzdCBydW5zIChmb3IgZGVidWdnaW5nKSIsIGhh
bmRsZU9wdGlvblNob3dUb3VjaGVzKSk7CisgICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCIt
LWNoZWNrLWZvci13b3JsZC1sZWFrcyIsICJDaGVjayBmb3IgbGVha3Mgb2Ygd29ybGQgb2JqZWN0
cyAoY3VycmVudGx5LCBkb2N1bWVudHMpIiwgaGFuZGxlT3B0aW9uQ2hlY2tGb3JXb3JsZExlYWtz
KSk7CiAKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oMCwgMCwgaGFuZGxlT3B0aW9uVW5t
YXRjaGVkKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCmluZGV4IGYzMGM0OTVkOTkzMDc2
NmUzMDgzZmQ4NGNjZjA1Njc2ODE1MTA3OTIuLmE4OTkyNmRiYzA1N2ZhNjMwZTU0YTQ4ODdlZTli
MTdmY2QyMmRkNTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCkBAIC00OCw2ICs0OCw3IEBA
IHN0cnVjdCBPcHRpb25zIHsKICAgICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSB7IGZh
bHNlIH07CiAgICAgYm9vbCBzaG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07CiAgICAgYm9vbCBz
aG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07CisgICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3Mg
eyBmYWxzZSB9OwogICAgIGJvb2wgYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhv
c3RzIHsgZmFsc2UgfTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7CiAgICAg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGFsbG93ZWRIb3N0czsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZmVkY2EzOTI2NzY2MmQyNDkzYjc3NTNhNmQ1Mzlm
MTFjYWM4MTc3MS4uNjhhNGQxMmY1MDY5MmQwMDUwZTczNWI1NDY3ZmMwOWIwYzBkM2IzMSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTExNSw2ICsxMTUs
MjIgQEAgc3RhdGljIFdLU3RyaW5nUmVmIGNvcHlTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoV0tQYWdlUmVmLCBjb25zdCB2b2lkKikKICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1JSEZNSEV3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFu
WDBUSUxKck9NVXVlJTJCUHR3QlJFNlhmViUwQVd0S1Fic3NoeGs1WmhjVXdjd3l2Y25JcTliODJR
aEpkb0FDZEQzNHJxZkNBSU5ENDZmWEtRVW5iMG12S3pRSUQlMEFBUUFCRmhGTmIzcHBiR3hoU1hO
TmVVWnlhV1Z1WkRBTkJna3Foa2lHOXcwQkFRUUZBQU5CQUFLdjJFZXgybiUyRlMlMEFyJTJGN2lK
TnJvV2xTelNNdFRpUVRFQiUyQkFEV0hHajl1MXhyVXJPaWxxJTJGbzJjdVF4SWZaY05aa1lBa1dQ
NER1YnFXJTBBaTAlMkYlMkZyZ0J2bWNvJTNEIik7CiB9CiAKK0FzeW5jVGFzayogQXN5bmNUYXNr
OjptX2N1cnJlbnRUYXNrOworCitib29sIEFzeW5jVGFzazo6cnVuKCkKK3sKKyAgICBtX2N1cnJl
bnRUYXNrID0gdGhpczsKKyAgICBtX3Rhc2soKTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkucnVuVW50aWwobV90YXNrRG9uZSwgbV90aW1lb3V0KTsKKyAgICBtX2N1cnJlbnRUYXNr
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4gbV90YXNrRG9uZTsKK30KKworQXN5bmNUYXNrKiBBc3lu
Y1Rhc2s6OmN1cnJlbnRUYXNrKCkKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50VGFzazsKK30KKwog
c3RhdGljIFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyOwogCiBUZXN0Q29udHJvbGxlciYgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpCkBAIC0zODQsNiArNDAwLDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgIG1f
YWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxvd2VkSG9zdHM7CiAgICAgbV9zaG91bGRTaG93V2Vi
VmlldyA9IG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXc7CiAgICAgbV9zaG91bGRTaG93VG91Y2hl
cyA9IG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXM7CisgICAgbV9jaGVja0ZvcldvcmxkTGVha3Mg
PSBvcHRpb25zLmNoZWNrRm9yV29ybGRMZWFrczsKICAgICBtX2FsbG93QW55SFRUUFNDZXJ0aWZp
Y2F0ZUZvckFsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9y
QWxsb3dlZEhvc3RzOwogCiAgICAgaWYgKG9wdGlvbnMucHJpbnRTdXBwb3J0ZWRGZWF0dXJlcykg
ewpAQCAtNjYwLDYgKzY3Nyw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZpZXdTdXBw
b3J0c09wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgICAgIGlm
IChtX21haW5XZWJWaWV3LT52aWV3U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCisgICAgICAgIHdpbGxEZXN0cm95V2ViVmlldygpOworCiAgICAgICAgIFdL
UGFnZVNldFBhZ2VVSUNsaWVudChtX21haW5XZWJWaWV3LT5wYWdlKCksIG51bGxwdHIpOwogICAg
ICAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChtX21haW5XZWJWaWV3LT5wYWdlKCks
IG51bGxwdHIpOwogICAgICAgICBXS1BhZ2VDbG9zZShtX21haW5XZWJWaWV3LT5wYWdlKCkpOwpA
QCAtNjY5LDcgKzY4OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZpZXdTdXBwb3J0
c09wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAKICAgICBjcmVhdGVX
ZWJWaWV3V2l0aE9wdGlvbnMob3B0aW9ucyk7CiAKLSAgICBpZiAoIXJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMob3B0aW9ucykpCisgICAgaWYgKCFyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFs
dWVzKG9wdGlvbnMsIFJlc2V0U3RhZ2U6OkJlZm9yZVRlc3QpKQogICAgICAgICBUZXN0SW52b2Nh
dGlvbjo6ZHVtcFdlYlByb2Nlc3NVbnJlc3BvbnNpdmVuZXNzKCI8dW5rbm93bj4gLSBUZXN0Q29u
dHJvbGxlcjo6cnVuIC0gRmFpbGVkIHRvIHJlc2V0IHN0YXRlIHRvIGNvbnNpc3RlbnQgdmFsdWVz
XG4iKTsKIH0KIApAQCAtNzgzLDcgKzgwMiw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAg
ICAgcGxhdGZvcm1SZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiB9CiAKLWJv
b2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpCitib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZXNldFN0YWdlIHJlc2V0
U3RhZ2UpCiB7CiAgICAgU2V0Rm9yU2NvcGU8U3RhdGU+IGNoYW5nZVN0YXRlKG1fc3RhdGUsIFJl
c2V0dGluZyk7CiAgICAgbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHRydWU7CkBAIC05MTEs
OSArOTMwLDcwIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgbV9kb25lUmVzZXR0aW5nID0g
ZmFsc2U7CiAgICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCksIGJsYW5rVVJM
KCkpOwogICAgIHJ1blVudGlsKG1fZG9uZVJlc2V0dGluZywgbV9jdXJyZW50SW52b2NhdGlvbi0+
c2hvcnRUaW1lb3V0KCkpOworICAgIGlmICghbV9kb25lUmVzZXR0aW5nKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc2V0U3RhZ2UgPT0gUmVzZXRTdGFnZTo6QWZ0ZXJU
ZXN0ICYmIG1fY2hlY2tGb3JXb3JsZExlYWtzKQorICAgICAgICB1cGRhdGVMaXZlRG9jdW1lbnRz
QWZ0ZXJUZXN0KCk7CisKICAgICByZXR1cm4gbV9kb25lUmVzZXR0aW5nOwogfQogCit2b2lkIFRl
c3RDb250cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKK3sKKyAgICBBc3lu
Y1Rhc2soW10oKSB7CisgICAgICAgIC8vIEFmdGVyIGVhY2ggdGVzdCwgd2UgdXBkYXRlIHRoZSBs
aXN0IG9mIGxpdmUgZG9jdW1lbnRzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGVuIGFuIGFiYW5k
b25lZCBkb2N1bWVudCBmaXJzdCBzaG93ZWQgdXAuCisgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkdldExpdmVEb2N1bWVudHMiKSk7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgfSwgNV9zKS5ydW4oKTsKK30K
Kwordm9pZCBUZXN0Q29udHJvbGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKK3sKKyAgICBBc3lu
Y1Rhc2soW10oKSB7CisgICAgICAgIC8vIFRoaXMgcnVucyBhdCB0aGUgZW5kIG9mIGEgc2VyaWVz
IG9mIHRlc3RzLiBJdCBjbGVhcnMgY2FjaGVzLCBydW5zIGEgR0MgYW5kIHRoZW4gZmV0Y2hlcyB0
aGUgbGlzdCBvZiBkb2N1bWVudHMuCisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNoZWNr
Rm9yV29ybGRMZWFrcyIpKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICB9LCAyMF9zKS5ydW4oKTsKK30KKwordm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZmluZEFuZER1bXBXb3JsZExlYWtzKCkKK3sKKyAgICBjaGVja0Zv
cldvcmxkTGVha3MoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAKKyAgICBp
ZiAobV9hYmFuZG9uZWREb2N1bWVudEluZm8uc2l6ZSgpKSB7CisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaXQgOiBtX2FiYW5kb25lZERvY3VtZW50SW5mbykgeworICAgICAgICAgICAgYXV0byBk
b2N1bWVudFVSTCA9IGl0LnZhbHVlLmFiYW5kb25lZERvY3VtZW50VVJMOworICAgICAgICAgICAg
aWYgKGRvY3VtZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudFVSTCA9
ICIobm8gdXJsKSI7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiVEVTVDogIik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChpdC52YWx1ZS50ZXN0VVJMKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIkFCQU5ET05F
RCBET0NVTUVOVDogIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkb2N1bWVudFVSTCk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgibm8gYWJhbmRvbmVkIGRvY3VtZW50cyIpOworCisg
ICAgU3RyaW5nIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBwcmludGYoIkNvbnRl
bnQtVHlwZTogdGV4dC9wbGFpblxuIik7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJXVc
biIsIHJlc3VsdC5sZW5ndGgoKSk7CisgICAgZndyaXRlKHJlc3VsdC51dGY4KCkuZGF0YSgpLCAx
LCByZXN1bHQubGVuZ3RoKCksIHN0ZG91dCk7CisgICAgcHJpbnRmKCIjRU9GXG4iKTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIiNFT0ZcbiIpOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGZmbHVz
aChzdGRlcnIpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjp3aWxsRGVzdHJveVdlYlZpZXco
KQoreworICAgIC8vIEJlZm9yZSB3ZSBraWxsIHRoZSB3ZWIgdmlldywgbG9vayBmb3IgYWJhbmRv
bmVkIGRvY3VtZW50cyBiZWZvcmUgdGhhdCB3ZWIgcHJvY2VzcyBnb2VzIGF3YXkuCisgICAgY2hl
Y2tGb3JXb3JsZExlYWtzKCk7Cit9CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVdl
YkNvbnRlbnRQcm9jZXNzKCkKIHsKICAgICBXS1BhZ2VUZXJtaW5hdGUobV9tYWluV2ViVmlldy0+
cGFnZSgpKTsKQEAgLTEyMzgsNyArMTMxOCw3IEBAIE5PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKICAgICBleGl0KDEpOwogfQogCi1UZXN0Q29t
bWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQorc3RhdGlj
IFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUp
CiB7CiAgICAgVGVzdENvbW1hbmQgcmVzdWx0OwogICAgIENvbW1hbmRUb2tlbml6ZXIgdG9rZW5p
emVyKGlucHV0TGluZSk7CkBAIC0xMjk2LDYgKzEzNzYsMjMgQEAgYm9vbCBUZXN0Q29udHJvbGxl
cjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgVGVzdENvbnRyb2xsZXI6OndhaXRGb3JDb21wbGV0aW9uKGNvbnN0IFdURjo6RnVuY3Rp
b248dm9pZCAoKT4mIGZ1bmN0aW9uLCBXVEY6OlNlY29uZHMgdGltZW91dCkKK3sKKyAgICBtX2Rv
bmVSZXNldHRpbmcgPSBmYWxzZTsKKyAgICBmdW5jdGlvbigpOworICAgIHJ1blVudGlsKG1fZG9u
ZVJlc2V0dGluZywgdGltZW91dCk7CisgICAgcmV0dXJuICFtX2RvbmVSZXNldHRpbmc7Cit9CisK
K2Jvb2wgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUNvbnRyb2xDb21tYW5kKGNvbnN0IGNoYXIqIGNv
bW1hbmQpCit7CisgICAgaWYgKCFzdHJjbXAoIiNDSEVDSyBGT1IgV09STEQgTEVBS1MiLCBjb21t
YW5kKSkgeworICAgICAgICBmaW5kQW5kRHVtcFdvcmxkTGVha3MoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxl
cjo6cnVuVGVzdGluZ1NlcnZlckxvb3AoKQogewogICAgIGNoYXIgZmlsZW5hbWVCdWZmZXJbMjA0
OF07CkBAIC0xMzA3LDYgKzE0MDQsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpydW5UZXN0aW5n
U2VydmVyTG9vcCgpCiAgICAgICAgIGlmIChzdHJsZW4oZmlsZW5hbWVCdWZmZXIpID09IDApCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBpZiAoaGFuZGxlQ29udHJvbENvbW1hbmQo
ZmlsZW5hbWVCdWZmZXIpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgaWYgKCFy
dW5UZXN0KGZpbGVuYW1lQnVmZmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEz
MjEsNiArMTQyMSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJ1bigpCiAgICAgICAgICAgICBp
ZiAoIXJ1blRlc3QobV9wYXRoc1tpXS5jX3N0cigpKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorICAgICAgICBmaW5kQW5kRHVtcFdvcmxkTGVha3MoKTsKICAgICB9CiB9CiAK
QEAgLTEzODUsOCArMTQ4Niw1MSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5
RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmCiAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5rZXlEb3duKGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7CiB9CiAKK3Zv
aWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVm
IGxpdmVEb2N1bWVudExpc3QpCit7CisgICAgYXV0byBudW1Eb2N1bWVudHMgPSBXS0FycmF5R2V0
U2l6ZShsaXZlRG9jdW1lbnRMaXN0KTsKKworICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4g
ZG9jdW1lbnRJbmZvOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRG9jdW1lbnRzOyAr
K2kpIHsKKyAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2
ZURvY3VtZW50TGlzdCwgaSk7CisgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0p
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbGl2ZURvY3VtZW50SXRlbSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oaXRlbSk7
CisKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpZEtleShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWQiKSk7CisgICAgICAgICAgICBXS1VJbnQ2
NFJlZiBkb2N1bWVudElEID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwgaWRLZXkuZ2V0KCkpKTsKKworICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOworICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1l
bnRVUkwgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShsaXZlRG9jdW1lbnRJdGVtLCB1cmxLZXkuZ2V0KCkpKTsKKworICAgICAgICAgICAgZG9jdW1l
bnRJbmZvLmFkZChXS1VJbnQ2NEdldFZhbHVlKGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1
bWVudFVSTCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkb2N1bWVudEluZm8uc2l6
ZSgpKSB7CisgICAgICAgIG1fYWJhbmRvbmVkRG9jdW1lbnRJbmZvLmNsZWFyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgYW55IGRvY3VtZW50cyB3aGljaCBhcmUg
bm8gbG9uZ2VyIGxpdmUuCisgICAgbV9hYmFuZG9uZWREb2N1bWVudEluZm8ucmVtb3ZlSWYoWyZd
KGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiAhZG9jdW1lbnRJbmZvLmNvbnRh
aW5zKGtleUFuZFZhbHVlLmtleSk7CisgICAgfSk7CisgICAgCisgICAgLy8gQWRkIG5ld2x5IGFi
YW5kb25lZCBkb2N1bWVudHMuCisgICAgU3RyaW5nIGN1cnJlbnRUZXN0VVJMID0gbV9jdXJyZW50
SW52b2NhdGlvbiA/IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fY3VycmVu
dEludm9jYXRpb24tPnVybCgpKSkpIDogIm5vIHRlc3QiOworICAgIGZvciAoY29uc3QgYXV0byYg
aXQgOiBkb2N1bWVudEluZm8pCisgICAgICAgIG1fYWJhbmRvbmVkRG9jdW1lbnRJbmZvLmFkZChp
dC5rZXksIEFiYW5kb25lZERvY3VtZW50SW5mbyhjdXJyZW50VGVzdFVSTCwgaXQudmFsdWUpKTsK
K30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkxpdmVE
b2N1bWVudHMiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQXJyYXlHZXRUeXBlSUQoKSk7CisgICAgICAgIGRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlz
dChzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBBc3luY1Rh
c2s6OmN1cnJlbnRUYXNrKCktPnRhc2tDb21wbGV0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJF
dmVudFNlbmRlciIpKSB7CiAgICAgICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmlu
ZGV4IDE2MjI1YjUwZmE5Y2M1Y2Q2MzYwNjAyYWU3NWViNjZhMWI3NjViMTYuLmNmNzVkNjY3NmJm
YjQ2MTM1YzY0MDYxODMwNjQxOWRlMTdjODk1Y2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKQEAgLTQ4LDYgKzQ4LDMzIEBAIGNsYXNzIEV2ZW50U2VuZGVyUHJveHk7
CiBzdHJ1Y3QgVGVzdENvbW1hbmQ7CiBzdHJ1Y3QgVGVzdE9wdGlvbnM7CiAKK2NsYXNzIEFzeW5j
VGFzayB7CitwdWJsaWM6CisgICAgQXN5bmNUYXNrKFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiB0
YXNrLCBXVEY6OlNlY29uZHMgdGltZW91dCkKKyAgICAgICAgOiBtX3Rhc2soV1RGTW92ZSh0YXNr
KSkKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
Y3VycmVudFRhc2soKSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBvbiB0aW1lb3V0
LgorICAgIGJvb2wgcnVuKCk7CisKKyAgICB2b2lkIHRhc2tDb21wbGV0ZSgpCisgICAgeworICAg
ICAgICBtX3Rhc2tEb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXN5bmNUYXNrKiBj
dXJyZW50VGFzaygpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBBc3luY1Rhc2sqIG1fY3VycmVu
dFRhc2s7CisKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+IG1fdGFzazsKKyAgICBXVEY6OlNl
Y29uZHMgbV90aW1lb3V0OworICAgIGJvb2wgbV90YXNrRG9uZSB7IGZhbHNlIH07Cit9OworCiAv
LyBGSVhNRTogUmVuYW1lIHRoaXMgVGVzdFJ1bm5lcj8KIGNsYXNzIFRlc3RDb250cm9sbGVyIHsK
IHB1YmxpYzoKQEAgLTEyMSw5ICsxNDgsMTIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW1h
Z2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdDsKIAotICAgIGJvb2wgcmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYpOworICAgIGVudW0gY2xhc3Mg
UmVzZXRTdGFnZSB7IEJlZm9yZVRlc3QsIEFmdGVyVGVzdCB9OworICAgIGJvb2wgcmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYsIFJlc2V0U3RhZ2UpOwogICAg
IHZvaWQgcmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9u
cyYpOwogCisgICAgdm9pZCB3aWxsRGVzdHJveVdlYlZpZXcoKTsKKwogICAgIHZvaWQgdGVybWlu
YXRlV2ViQ29udGVudFByb2Nlc3MoKTsKICAgICB2b2lkIHJlYXR0YWNoUGFnZVRvV2ViUHJvY2Vz
cygpOwogCkBAIC0yMzEsNiArMjYxLDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJ1blRlc3Rp
bmdTZXJ2ZXJMb29wKCk7CiAgICAgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHBhdGhPclVSTCk7
CisgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aW1lZCBvdXQuCisgICAgYm9vbCB3YWl0
Rm9yQ29tcGxldGlvbihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiwgV1RGOjpTZWNvbmRz
IHRpbWVvdXQpOworCisgICAgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBjaGFyKiBj
b21tYW5kKTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAgICAgdm9pZCBwbGF0
Zm9ybURlc3Ryb3koKTsKQEAgLTI2MSw2ICsyOTYsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZVdlYlZpZXdTaXplRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQg
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJik7CiAKKyAgICB2b2lkIHVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QoKTsKKyAg
ICB2b2lkIGNoZWNrRm9yV29ybGRMZWFrcygpOworCisgICAgdm9pZCBkaWRSZWNlaXZlTGl2ZURv
Y3VtZW50c0xpc3QoV0tBcnJheVJlZik7CisgICAgdm9pZCBmaW5kQW5kRHVtcFdvcmxkTGVha3Mo
KTsKKwogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dElmUG9zc2libGUoKTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0SWZQb3NzaWJsZSgpOwogCkBAIC00MzEsNiArNDcyLDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwogICAgIAogICAgIGJvb2wgbV9z
aG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NoZWNrRm9yV29ybGRMZWFr
cyB7IGZhbHNlIH07CiAKICAgICBib29sIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxs
b3dlZEhvc3RzIHsgZmFsc2UgfTsKICAgICAKQEAgLTQ0NCw2ICs0ODYsMTggQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRTZW5kZXJQcm94eT4gbV9ldmVudFNlbmRlclByb3h5
OwogCiAgICAgV29ya1F1ZXVlTWFuYWdlciBtX3dvcmtRdWV1ZU1hbmFnZXI7CisKKyAgICBzdHJ1
Y3QgQWJhbmRvbmVkRG9jdW1lbnRJbmZvIHsKKyAgICAgICAgU3RyaW5nIHRlc3RVUkw7CisgICAg
ICAgIFN0cmluZyBhYmFuZG9uZWREb2N1bWVudFVSTDsKKworICAgICAgICBBYmFuZG9uZWREb2N1
bWVudEluZm8oKSA9IGRlZmF1bHQ7CisgICAgICAgIEFiYW5kb25lZERvY3VtZW50SW5mbyhTdHJp
bmcgaW5UZXN0VVJMLCBTdHJpbmcgaW5BYmFuZG9uZWREb2N1bWVudFVSTCkKKyAgICAgICAgICAg
IDogdGVzdFVSTChpblRlc3RVUkwpCisgICAgICAgICAgICAsIGFiYW5kb25lZERvY3VtZW50VVJM
KGluQWJhbmRvbmVkRG9jdW1lbnRVUkwpCisgICAgICAgIHsgfQorICAgIH07CisgICAgSGFzaE1h
cDx1aW50NjRfdCwgQWJhbmRvbmVkRG9jdW1lbnRJbmZvPiBtX2FiYW5kb25lZERvY3VtZW50SW5m
bzsKIH07CiAKIHN0cnVjdCBUZXN0Q29tbWFuZCB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCmluZGV4IGJjMWVhZjYzZTQwMDc5YWEzMzRjMWZhNTU3NDkwN2E2NTcz
YmI3ZWQuLjEzYjIxYmVkZDUxNzQwNzFiZGE3YjYxYjM5MGVmZDc4ODUzM2M0MDkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0xODcsNyArMTg3LDcgQEAg
ZW5kOgogICAgICAgICBXS0luc3BlY3RvckNsb3NlKFdLUGFnZUdldEluc3BlY3RvcihUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpKSk7CiAjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAotICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVz
ZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhtX29wdGlvbnMpKQorICAgIGlmIChUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkucmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhtX29wdGlvbnMs
IFRlc3RDb250cm9sbGVyOjpSZXNldFN0YWdlOjpBZnRlclRlc3QpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBUaGUgcHJvY2VzcyBpcyB1bnJlc3BvbnNpdmUsIHNvIGxldCdzIHN0YXJ0IGEg
bmV3IG9uZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAppbmRleCAyOTBiM2JiZDc0
MTdlZDgyZTlkNzNiMzc4OGE2MzYxNDg4YzhhMDE2Li5kZDY2ZWM4YTc1NTc0NmVjOWNiMmJhODlj
NmI4OTdkNzBjYzc3ZjY5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCkBAIC02
MCw2ICs2MCw3IEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVDb2xvckZp
bHRlciB7IGZhbHNlIH07CiAgICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlIHsgZmFsc2UgfTsKICAgICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07CisgICAgYm9vbCBj
aGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IgeyAxIH07CiAgICAgVmVjdG9yPFN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CkBAIC05Nyw3
ICs5OCw4IEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgICAgICAgICB8fCBlbmFibGVDb2xv
ckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyCiAgICAgICAgICAgICB8fCBwdW5j
aE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZQogICAgICAgICAgICAgfHwganNjT3B0aW9ucyAhPSBvcHRpb25z
LmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmds
eSkKKyAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQorICAgICAg
ICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348201</attachid>
            <date>2018-08-27 14:33:53 -0700</date>
            <delta_ts>2018-08-27 14:57:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188994-20180827143352.patch</filename>
            <type>text/plain</type>
            <size>41072</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1Mzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFhZjU2OGUyOTVjNzZm
NWQzNGI4NDRkYjhjZDM2NzcwNzRkZmU1Ni4uMTcxYTYyZTMwNDY3NDhjZTA1N2RmZDI5ZTgwYTBm
OTRmYTQ0YzEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA4LTI3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNoIFdlYktp
dFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlIGFib3V0IGRldGVjdGluZyB3b3JsZCBsZWFr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0
IERvY3VtZW50Ojpwb3N0VGFzaygpIGZvciB1c2UgYnkgV1RSJ3MgaW5qZWN0ZWQgYnVuZGxlLgor
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKIDIwMTgtMDgtMjcgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wcm92ZSB0aGUgc2hvd0FsbERv
Y3VtZW50cyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY1NjA4MDk1MTZmODM2NGE1NmI0YjY3YWE5MWMw
ZjQ2Mzc2MjI4YTAuLjcxYTY4NWM0OWMxODQxN2MwMGVkMWRhMDdlYjczMDQ4NGMzMTEzMjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTgtMDgtMjcgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgVGVhY2ggV2ViS2l0VGVzdFJ1bm5lciBhbmQg
RHVtcFJlbmRlclRyZWUgYWJvdXQgZGV0ZWN0aW5nIHdvcmxkIGxlYWtzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5OTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIG5v
dGlvbiBvZiBhICJjb250cm9sIGNvbW1hbmQiIGluIHRoZSBwcm90b2NvbCBiZXR3ZWVuIHdlYmtp
dHB5IGFuZCAKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lci9EdW1wUmVuZGVyVHJlZS4gQSBjb21t
YW5kIGlzIHNpbXBseSBhbiBpbnB1dCBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhICMKKyAgICAgICAg
dGhhdCBpcyBjaGVja2VkIGZvciBiZWZvcmUgdHJ5aW5nIHRvIHBhcnNlIHRoZSBpbnB1dCBhcyB0
ZXN0IFVSTC4gRm9yIG5vdywganVzdCBvbmUKKyAgICAgICAgY29tbW1hbmQgaXMgc3VwcG9ydGVk
LCB3aGljaCBpcyAiI0NIRUNLIEZPUiBXT1JMRCBMRUFLUyIuCisgICAgICAgIAorICAgICAgICBJ
biByZXNwb25zZSB0byB0aGUgY29tbWFuZCwgdGhlIHRvb2wgZHVtcHMgYW4gb3V0cHV0IGJsb2Nr
IGluIHRoZSB1c3VhbCBwc2V1ZG8tTUlNRS1zdHlsZSwKKyAgICAgICAgd2l0aCBhIHRyYWlsaW5n
ICIjRU9GIi4gRnV0dXJlIHBhdGNoZXMgd2lsbCBhZGQgc3VwcG9ydCB0byB3ZWJraXRweSB0byBw
YXJzZSB0aGlzIG91dHB1dC4KKyAgICAgICAgCisgICAgICAgIER1bXBSZW5kZXJUcmVlIHN0dWJz
IG91dCB0aGUgY29tbWFuZCwgcmV0dXJuaW5nIGFuIGVtcHR5IGJsb2NrLgorICAgICAgICAKKyAg
ICAgICAgV2ViS2l0VGVzdFJ1bm5lciByZXNwb25kcyB0byB0aGUgY29tbWFuZCBieSBkdW1waW5n
IHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRzLCBpZiBpdCB3YXMKKyAgICAgICAgcnVuIHdpdGgg
dGhlIC0tY2hlY2stZm9yLXdvcmxkLWxlYWtzIG9wdGlvbi4KKyAgICAgICAgCisgICAgICAgIFdo
ZW4gcnVuIHdpdGggLS1jaGVjay1mb3Itd29ybGQtbGVha3MsIFdlYktpdFRlc3RSdW5uZXIgZ2V0
cyB0aGUgbGlzdCBvZiBsaXZlIGRvY3VtZW50cyB2aWEKKyAgICAgICAgV0tCdW5kbGVHZXRMaXZl
RG9jdW1lbnRVUkxzKCkgYWZ0ZXIgZXZlcnkgdGVzdCAodGhpcyBhbGxvd3MgaXQgdG8gZGV0ZWN0
IHRoZSBmaXJzdCB0ZXN0CisgICAgICAgIHRoYXQgbGVha2VkIGEgZG9jdW1lbnQpLCBhbmQga2Vl
cHMgdGhlbSBpbiBhIG1hcCBvZiBkb2N1bWVudCBpZGVudGlmaWVyIHRvIHRlc3QgYW5kIGxpdmUg
ZG9jdW1lbnQgVVJMLgorICAgICAgICBUaGVuIHdoZW4gaXQgcmVjZWl2ZXMgdGhlICIjQ0hFQ0sg
Rk9SIFdPUkxEIExFQUtTIiBjb21tYW5kLCBpdCBjYWxscyBpbnRvIHRoZSBidW5kbGUgdG8KKyAg
ICAgICAgY2xlYXIgdGhlIHBhZ2UgYW5kIG1lbW9yeSBjYWNoZXMsIHJ1bnMgYSBHQywgdGhlbiBw
b3N0cyBhIHRhc2sgKGluIHRoZSBEb2N1bWVudDo6cG9zdFRha3MoKSBzZW5zZSkKKyAgICAgICAg
YWZ0ZXIgd2hpY2ggaXQgcmVxdWVzdHMgdGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMgZm9yIGEg
ZmluYWwgdGltZSwgZXhjbHVkaW5nIGFueSB0aGF0IGFyZSBsb2FkZWQKKyAgICAgICAgaW4gbGl2
ZSBGcmFtZXMgKHRodXMgb21pdHRpbmcgdGhlIGFib3V0OmJsYW5rIHRoYXQgd2lsbCBiZSBsb2Fk
ZWQgYXQgdGhpcyBwb2ludCkuIERvY3VtZW50cyBpbiB0aGlzCisgICAgICAgIGxpc3QgYXJlIHRo
ZXJlZm9yZSBsZWFrZWQgKG9yIGFiYW5kb25lZCkuCisgICAgICAgIAorICAgICAgICBGdXR1cmUg
cGF0Y2hlcyB3aWxsIGhvb2sgdXAgd2Via2l0cHkgcmVwb3J0aW5nIGZvciBsZWFrZWQgZG9jdW1l
bnRzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZS5jcHA6CisgICAgICAgIChXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMpOgorICAgICAgICAo
V0tCdW5kbGVDbGVhclBhZ2VDYWNoZSk6CisgICAgICAgIChXS0J1bmRsZUNsZWFyTWVtb3J5Q2Fj
aGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZVBvc3RUYXNrKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpsaXZlRG9jdW1lbnRVUkxzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisKIDIwMTgtMDgtMjcg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZW1vdmUgbW9zdCBvZiBMb2FkZXJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMGExZDkw
MzQxN2Q0Y2E5ZGMwZTMwYmJmZmFjNDFkMTg4ZjMxYmRiYy4uYTcxZGEzZjBlZTFhOTdmYjY1MDAw
ZmMxYTU1ODc5MDRmNzkyYTY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwMzAsNyArMTAz
MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRE5TUHJlZmV0Y2hFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ROU1ByZWZldGNoRW5hYmxlZDsgfQogICAgIHZvaWQgcGFyc2VETlNQcmVmZXRj
aENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIHBvc3RUYXNrKFRhc2sm
JikgZmluYWw7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNo
cm9ub3VzbHkuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3N0VGFzayhUYXNrJiYpIGZpbmFs
OyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5
LgogCiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsg
fQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggZDFjN2IwZmU5MmUyYzZlMDU3NmI4OWE4YmE4YTFj
ODAzNWRhY2Y4ZS4uMWEzMmM2MDVmNWYyYjcxM2I2NDMwMzA5ZTFkZWU4MzMzMTgzMTFlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGUuY3BwCkBAIC0zNCwxMSArMzQsMTggQEAKICNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLTXV0YWJs
ZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXS051bWJlci5oIgorI2luY2x1ZGUgIldLUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlVHJhY2tlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2VDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5oPgogCkBAIC0yMTMsNiAr
MjIwLDMwIEBAIHZvaWQgV0tCdW5kbGVTZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlCiAgICAgdG9JbXBsKGJ1bmRsZVJlZikt
PnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBlbmFibGVkKTsKIH0KIAorV0tBcnJheVJlZiBXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMo
V0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYs
IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFnZXMpCit7CisgICAgYXV0byBsaXZl
RG9jdW1lbnRzID0gdG9JbXBsKGJ1bmRsZVJlZiktPmxpdmVEb2N1bWVudFVSTHModG9JbXBsKHBh
Z2VHcm91cFJlZiksIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cFBhZ2VzKTsKKworICAgIGF1
dG8gbGl2ZVVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBpdCA6IGxpdmVEb2N1bWVudHMpIHsKKyAgICAgICAgYXV0byB1cmxJbmZv
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworCisgICAgICAgIGF1dG8g
ZG9jdW1lbnRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlk
IikpOworICAgICAgICBhdXRvIGRvY3VtZW50VVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOworCisgICAgICAgIGF1dG8gZG9jdW1lbnRJRFZhbHVl
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpdC5rZXkpKTsKKyAgICAgICAgYXV0byBkb2N1bWVu
dFVSTFZhbHVlID0gYWRvcHRXSyh0b0NvcGllZEFQSShpdC52YWx1ZSkpOworCisgICAgICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0odXJsSW5mby5nZXQoKSwgZG9jdW1lbnRJREtleS5nZXQoKSwgZG9j
dW1lbnRJRFZhbHVlLmdldCgpKTsKKyAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh1cmxJbmZv
LmdldCgpLCBkb2N1bWVudFVSTEtleS5nZXQoKSwgZG9jdW1lbnRVUkxWYWx1ZS5nZXQoKSk7CisK
KyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obGl2ZVVSTHMuZ2V0KCksIHVybEluZm8uZ2V0KCkp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbGl2ZVVSTHMubGVha1JlZigpOworfQorCiB2b2lk
IFdLQnVuZGxlUmVwb3J0RXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbikKIHsKICAgICBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKGNvbnRl
eHQsIGV4Y2VwdGlvbik7CkBAIC0yMjksNiArMjYwLDE2IEBAIHZvaWQgV0tCdW5kbGVTZXREYXRh
YmFzZVF1b3RhKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgdWludDY0X3QgcXVvdGEpCiAgICAgRGF0
YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5zZXRRdW90YSgqU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKCJmaWxlX18wIiksIHF1b3RhKTsKIH0KIAordm9pZCBXS0J1
bmRsZUNsZWFyUGFnZUNhY2hlKFdLQnVuZGxlUmVmIGJ1bmRsZSkKK3sKKyAgICBQYWdlQ2FjaGU6
OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNz
dXJlKTsKK30KKwordm9pZCBXS0J1bmRsZUNsZWFyTWVtb3J5Q2FjaGUoV0tCdW5kbGVSZWYgYnVu
ZGxlKQoreworICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5ldmljdFJlc291cmNlcygpOwor
fQorCiBXS0RhdGFSZWYgV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShXS0J1bmRs
ZVJlZiBidW5kbGUsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGRhdGEpCiB7CiAg
ICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwoYnVuZGxlKS0+Y3JlYXRlV2ViRGF0YUZyb21VaW50OEFy
cmF5KGNvbnRleHQsIGRhdGEpLmxlYWtSZWYoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3Bw
CmluZGV4IGI4NGQ1YWIzYTFhMjBiNTdmYTJmYjBhZDEwZDYwNjRkYTg4NDNiMmMuLjI0ZDRmMGQ0
NDlkNDA3MTk4ODY2MWRkMGM2NmJlMDBmMTA3MzgxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0
YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaGVlbEV2
ZW50VGVzdFRyaWdnZXIuaD4KQEAgLTYxOSw2ICs2MjAsMjUgQEAgdm9pZCBXS0J1bmRsZVBhZ2VS
ZWdpc3RlclNjcm9sbE9wZXJhdGlvbkNvbXBsZXRpb25DYWxsYmFjayhXS0J1bmRsZVBhZ2VSZWYg
cGFnZVIKICAgICB9KTsKIH0KIAordm9pZCBXS0J1bmRsZVBhZ2VQb3N0VGFzayhXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlVGVzdE5vdGlmaWNhdGlvbkNhbGxiYWNrIGNhbGxi
YWNrLCB2b2lkKiBjb250ZXh0KQoreworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIHdlYlBhZ2UgPSB0b0ltcGwocGFnZVJlZik7
CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5jb3JlUGFnZSgp
IDogbnVsbHB0cjsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBkb2N1bWVudCA9IHBhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnQtPnBvc3RU
YXNrKFs9XSAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgY2Fs
bGJhY2soY29udGV4dCk7CisgICAgfSk7Cit9CisKIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBX
S1R5cGVSZWYgbWVzc2FnZUJvZHlSZWYpCiB7CiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5wb3N0TWVz
c2FnZSh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRvSW1wbChtZXNzYWdlQm9keVJlZikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCmluZGV4IDMwNTE4NjZjOTJmNjIxMmQ1MmM5MzBiN2Rk
MGI3NDljYTRiMmFiMTEuLjI3NjU4OTEyNWVlOGUyYmY1ZTdmZTI1OWZkMmNjNzc2OTNlM2IxMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgKQEAgLTExNyw2ICsxMTcsOSBAQCBXS19FWFBPUlQg
V0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlQ29weUdyb3VwSWRlbnRpZmllcihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSk7CiB0eXBlZGVmIHZvaWQgKCpXS0J1bmRsZVBhZ2VUZXN0Tm90aWZpY2F0aW9uQ2Fs
bGJhY2spKHZvaWQqIGNvbnRleHQpOwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlUmVnaXN0
ZXJTY3JvbGxPcGVyYXRpb25Db21wbGV0aW9uQ2FsbGJhY2soV0tCdW5kbGVQYWdlUmVmLCBXS0J1
bmRsZVBhZ2VUZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpOwogCisvLyBQ
b3N0cyBhIHRhc2sgaW4gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgb2YgdGhlIG1haW4gZnJh
bWUuIFVzZWQgdG8gZG8gd29yayBhZnRlciBvdGhlciB0YXNrcyBoYXZlIGNvbXBsZXRlZC4KK1dL
X0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVBvc3RUYXNrKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5k
bGVQYWdlVGVzdE5vdGlmaWNhdGlvbkNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KTsKKwogV0tfRVhQ
T1JUIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpOwogCiAvLyBTd2l0
Y2hlcyBhIGNvbm5lY3Rpb24gaW50byBhIGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUsIHNvIGFsbCBt
ZXNzYWdlcyBiZWNvbWUgc3luY2hyb25vdXMgdW50aWwgd2UgZ2V0IGEgcmVzcG9uc2UuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQcml2YXRlLmgKaW5kZXggZjRiMDk0M2FjNmJlYTM1ZDFkMjE1ZDk4NzA0
MjI1YzgzZjRiNGZiYi4uMzk0OWY3N2I2YzkxZmNhNGEwMjdhNDRiN2I0MzI3N2EyY2VmMzcxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaApAQCAtNjgsNiArNjgsOCBAQCBXS19FWFBP
UlQgdm9pZCBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKFdLQnVu
ZGxlUmVmIGJ1bmRsZSwgVwogV0tfRVhQT1JUIHVpbnQ2NF90IFdLQnVuZGxlR2V0V2ViTm90aWZp
Y2F0aW9uSUQoV0tCdW5kbGVSZWYgYnVuZGxlLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub3RpZmljYXRpb24pOwogV0tfRVhQT1JUIFdLRGF0YVJlZiBXS0J1bmRsZUNyZWF0ZVdL
RGF0YUZyb21VSW50OEFycmF5KFdLQnVuZGxlUmVmIGJ1bmRsZSwgSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgZGF0YSk7CiBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpOworLy8gUmV0dXJucyBhcnJh
eSBvZiBkaWN0aW9uYXJpZXMuIERpY3Rpb25hcnkga2V5cyBhcmUgZG9jdW1lbnQgaWRlbnRpZmll
cnMsIHZhbHVlcyBhcmUgZG9jdW1lbnQgVVJMcy4KK1dLX0VYUE9SVCBXS0FycmF5UmVmIFdLQnVu
ZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cCwgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdlcyk7
CiAKIC8vIFVzZXJDb250ZW50IEFQSQogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVBZGRVc2VyU2Ny
aXB0KFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLCBX
S0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkLCBXS1N0cmluZ1JlZiBzb3VyY2UsIFdL
VVJMUmVmIHVybCwgV0tBcnJheVJlZiB3aGl0ZWxpc3QsIFdLQXJyYXlSZWYgYmxhY2tsaXN0LCBf
V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lLCBXS1VzZXJDb250ZW50SW5q
ZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpOwpAQCAtOTYsNiArOTgsOSBAQCBXS19FWFBPUlQg
dm9pZCBXS0J1bmRsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NOb3RpZnlPYnNlcnZlcihXS0J1bmRs
ZVJlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlRXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tBcnJheVJlZiBjbGFzc2VzKTsKIAorV0tfRVhQ
T1JUIHZvaWQgV0tCdW5kbGVDbGVhclBhZ2VDYWNoZShXS0J1bmRsZVJlZiBidW5kbGUpOworV0tf
RVhQT1JUIHZvaWQgV0tCdW5kbGVDbGVhck1lbW9yeUNhY2hlKFdLQnVuZGxlUmVmIGJ1bmRsZSk7
CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRl
eCBmNDUwYzFlYTI2M2U4YmVhNmFmYWU0NjZjYWQyN2I5Y2I4MTg1YWE2Li5kNDMxMTRjMjA2NDZi
NDc0M2JhZDdjYWFiY2VkOGZmMTg2YzMxNDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db21tb25WTS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBAIC02MDQsNiArNjA1LDI2IEBAIFJlZjxBUEk6OkRh
dGE+IEluamVjdGVkQnVuZGxlOjpjcmVhdGVXZWJEYXRhRnJvbVVpbnQ4QXJyYXkoSlNDb250ZXh0
UmVmIGNvbnRleHQsCiAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihhcnJheURhdGEtPmJhc2VBZGRyZXNzKCkpLCBhcnJheURhdGEtPmJ5dGVM
ZW5ndGgoKSk7CiB9CiAKK0luamVjdGVkQnVuZGxlOjpEb2N1bWVudElEVG9VUkxNYXAgSW5qZWN0
ZWRCdW5kbGU6OmxpdmVEb2N1bWVudFVSTHMoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwg
Ym9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdlcykKK3sKKyAgICBEb2N1bWVudElE
VG9VUkxNYXAgcmVzdWx0OworCisgICAgZm9yIChjb25zdCBhdXRvKiBkb2N1bWVudCA6IERvY3Vt
ZW50OjphbGxEb2N1bWVudHMoKSkKKyAgICAgICAgcmVzdWx0LmFkZChkb2N1bWVudC0+aWRlbnRp
ZmllcigpLnRvVUludDY0KCksIGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CisKKyAgICBpZiAo
ZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFnZXMpIHsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvKiBwYWdlIDogUGFnZUdyb3VwOjpwYWdlR3JvdXAocGFnZUdyb3VwLT5pZGVudGlmaWVyKCkp
LT5wYWdlcygpKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGZyYW1lID0gJnBhZ2Ut
Pm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0LnJlbW92ZShmcmFtZS0+
ZG9jdW1lbnQoKS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYlBhZ2UqIHBhZ2UsIGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBwYWdlLT5jb3JlUGFnZSgpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCmluZGV4IDE2YzdjMmYyYmQyY2E4Njcy
NjBlZGUwNjM0ZWM4MTI1OTVkYWExN2IuLjI1N2ViYjc4MmIwMjI0MGJiYTE0MjI1MzQ4ZDlkNjll
YjQ0ZWFiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC0xMjIsNiArMTIyLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoV2ViUGFnZSopOwog
ICAgIHVpbnQ2NF90IHdlYk5vdGlmaWNhdGlvbklEKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CiAgICAgUmVmPEFQSTo6RGF0YT4gY3JlYXRlV2ViRGF0YUZyb21VaW50OEFycmF5KEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CisgICAgCisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBT
dHJpbmc+IERvY3VtZW50SURUb1VSTE1hcDsKKyAgICBEb2N1bWVudElEVG9VUkxNYXAgbGl2ZURv
Y3VtZW50VVJMcyhXZWJQYWdlR3JvdXBQcm94eSosIGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwUGFnZXMpOwogCiAgICAgLy8gVXNlckNvbnRlbnQgQVBJCiAgICAgdm9pZCBhZGRVc2Vy
U2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCosIFN0
cmluZyYmIHNvdXJjZSwgU3RyaW5nJiYgdXJsLCBBUEk6OkFycmF5KiB3aGl0ZWxpc3QsIEFQSTo6
QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlvblRpbWUsIFdlYkNv
cmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk4ZjcyMDFhOWRlYjEyNjRkNWEyYTZmMjE4MDJl
NjNhNGY3NmUwN2IuLmEzZTkzNGZkYzcxODMwYTllN2E0MDQ0NjFkOGNkNjgyOWVjMDhmMDkgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NiBAQAorMjAxOC0wOC0yNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KKworICAgICAgICBUZWFjaCBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZSBh
Ym91dCBkZXRlY3Rpbmcgd29ybGQgbGVha3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4ODk5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBub3Rpb24gb2Yg
YSAiY29udHJvbCBjb21tYW5kIiBpbiB0aGUgcHJvdG9jb2wgYmV0d2VlbiB3ZWJraXRweSBhbmQg
CisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIvRHVtcFJlbmRlclRyZWUuIEEgY29tbWFuZCBpcyBz
aW1wbHkgYW4gaW5wdXQgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSAjCisgICAgICAgIHRoYXQgaXMg
Y2hlY2tlZCBmb3IgYmVmb3JlIHRyeWluZyB0byBwYXJzZSB0aGUgaW5wdXQgYXMgdGVzdCBVUkwu
IEZvciBub3csIGp1c3Qgb25lCisgICAgICAgIGNvbW1tYW5kIGlzIHN1cHBvcnRlZCwgd2hpY2gg
aXMgIiNDSEVDSyBGT1IgV09STEQgTEVBS1MiLgorICAgICAgICAKKyAgICAgICAgSW4gcmVzcG9u
c2UgdG8gdGhlIGNvbW1hbmQsIHRoZSB0b29sIGR1bXBzIGFuIG91dHB1dCBibG9jayBpbiB0aGUg
dXN1YWwgcHNldWRvLU1JTUUtc3R5bGUsCisgICAgICAgIHdpdGggYSB0cmFpbGluZyAiI0VPRiIu
IEZ1dHVyZSBwYXRjaGVzIHdpbGwgYWRkIHN1cHBvcnQgdG8gd2Via2l0cHkgdG8gcGFyc2UgdGhp
cyBvdXRwdXQuCisgICAgICAgIAorICAgICAgICBEdW1wUmVuZGVyVHJlZSBzdHVicyBvdXQgdGhl
IGNvbW1hbmQsIHJldHVybmluZyBhbiBlbXB0eSBibG9jay4KKyAgICAgICAgCisgICAgICAgIFdl
YktpdFRlc3RSdW5uZXIgcmVzcG9uZHMgdG8gdGhlIGNvbW1hbmQgYnkgZHVtcGluZyB0aGUgbGlz
dCBvZiBsaXZlIGRvY3VtZW50cywgaWYgaXQgd2FzCisgICAgICAgIHJ1biB3aXRoIHRoZSAtLWNo
ZWNrLWZvci13b3JsZC1sZWFrcyBvcHRpb24uCisgICAgICAgIAorICAgICAgICBXaGVuIHJ1biB3
aXRoIC0tY2hlY2stZm9yLXdvcmxkLWxlYWtzLCBXZWJLaXRUZXN0UnVubmVyIGdldHMgdGhlIGxp
c3Qgb2YgbGl2ZSBkb2N1bWVudHMgdmlhCisgICAgICAgIFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50
VVJMcygpIGFmdGVyIGV2ZXJ5IHRlc3QgKHRoaXMgYWxsb3dzIGl0IHRvIGRldGVjdCB0aGUgZmly
c3QgdGVzdAorICAgICAgICB0aGF0IGxlYWtlZCBhIGRvY3VtZW50KSwgYW5kIGtlZXBzIHRoZW0g
aW4gYSBtYXAgb2YgZG9jdW1lbnQgaWRlbnRpZmllciB0byB0ZXN0IGFuZCBsaXZlIGRvY3VtZW50
IFVSTC4KKyAgICAgICAgVGhlbiB3aGVuIGl0IHJlY2VpdmVzIHRoZSAiI0NIRUNLIEZPUiBXT1JM
RCBMRUFLUyIgY29tbWFuZCwgaXQgY2FsbHMgaW50byB0aGUgYnVuZGxlIHRvCisgICAgICAgIGNs
ZWFyIHRoZSBwYWdlIGFuZCBtZW1vcnkgY2FjaGVzLCBydW5zIGEgR0MsIHRoZW4gcG9zdHMgYSB0
YXNrIChpbiB0aGUgRG9jdW1lbnQ6OnBvc3RUYWtzKCkgc2Vuc2UpCisgICAgICAgIGFmdGVyIHdo
aWNoIGl0IHJlcXVlc3RzIHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRzIGZvciBhIGZpbmFsIHRp
bWUsIGV4Y2x1ZGluZyBhbnkgdGhhdCBhcmUgbG9hZGVkCisgICAgICAgIGluIGxpdmUgRnJhbWVz
ICh0aHVzIG9taXR0aW5nIHRoZSBhYm91dDpibGFuayB0aGF0IHdpbGwgYmUgbG9hZGVkIGF0IHRo
aXMgcG9pbnQpLiBEb2N1bWVudHMgaW4gdGhpcworICAgICAgICBsaXN0IGFyZSB0aGVyZWZvcmUg
bGVha2VkIChvciBhYmFuZG9uZWQpLgorICAgICAgICAKKyAgICAgICAgRnV0dXJlIHBhdGNoZXMg
d2lsbCBob29rIHVwIHdlYmtpdHB5IHJlcG9ydGluZyBmb3IgbGVha2VkIGRvY3VtZW50cy4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAg
KGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChoYW5k
bGVDb250cm9sQ29tbWFuZCk6CisgICAgICAgIChydW5UZXN0aW5nU2VydmVyTG9vcCk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGhh
bmRsZUNvbnRyb2xDb21tYW5kKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RS
Ojpwb3N0R0NUYXNrKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVE
b2N1bWVudHMpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwOgor
ICAgICAgICAoV1RSOjpoYW5kbGVPcHRpb25DaGVja0ZvcldvcmxkTGVha3MpOgorICAgICAgICAo
V1RSOjpPcHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBc3luY1Rhc2s6OnJ1bik6CisgICAgICAgIChXVFI6
OkFzeW5jVGFzazo6Y3VycmVudFRhc2spOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmZpbmRBbmREdW1wV29ybGRMZWFrcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp3
aWxsRGVzdHJveVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpwYXJzZUlucHV0TGluZSk6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDb250cm9sQ29tbWFuZCk6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpydW5UZXN0aW5nU2VydmVyTG9vcCk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpydW4pOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVj
ZWl2ZUxpdmVEb2N1bWVudHNMaXN0KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChXVFI6OkFzeW5jVGFzazo6QXN5bmNU
YXNrKToKKyAgICAgICAgKFdUUjo6QXN5bmNUYXNrOjp0YXNrQ29tcGxldGUpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6QWJhbmRvbmVkRG9jdW1lbnRJbmZvOjpBYmFuZG9uZWREb2N1
bWVudEluZm8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmg6CisgICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpo
YXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zIGNvbnN0KToKKwogMjAxOC0wOC0yNyAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IHRpbWVv
dXQgdmFsdWVzIGluIFdlYktpdFRlc3RSdW5uZXIgdG8gV1RGOjpTZWNvbmRzCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggNDMwNjljY2RmMjNkMWJkNDM3
YmMzZjBiZTI2MGUxNDk3NDMzYTU1MC4uMmFkMDNhMDE4NDU3ZTU0MGVlZDg2NmI3MmY3NDY1NmY0
YjlmNjk0OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpA
QCAtMjIzLDYgKzIyMyw3IEBAIHN0YXRpYyBpbnQgZ2NCZXR3ZWVuVGVzdHM7CiBzdGF0aWMgaW50
IGFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0czsKIHN0YXRpYyBpbnQgc2hv
d1dlYlZpZXc7CiBzdGF0aWMgaW50IHByaW50VGVzdENvdW50Oworc3RhdGljIGludCBjaGVja0Zv
cldvcmxkTGVha3M7CiBzdGF0aWMgQk9PTCBwcmludFNlcGFyYXRvcnM7CiBzdGF0aWMgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBwZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKIHN0YXRp
YyBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwpAQCAtMTEyMCw2ICsxMTIxLDcg
QEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGlu
dCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10KICAgICAgICAgeyJhbGxvdy1hbnktY2VydGlmaWNh
dGUtZm9yLWFsbG93ZWQtaG9zdHMiLCBub19hcmd1bWVudCwgJmFsbG93QW55SFRUUFNDZXJ0aWZp
Y2F0ZUZvckFsbG93ZWRIb3N0cywgWUVTfSwKICAgICAgICAgeyJzaG93LXdlYnZpZXciLCBub19h
cmd1bWVudCwgJnNob3dXZWJWaWV3LCBZRVN9LAogICAgICAgICB7InByaW50LXRlc3QtY291bnQi
LCBub19hcmd1bWVudCwgJnByaW50VGVzdENvdW50LCBZRVN9LAorICAgICAgICB7ImNoZWNrLWZv
ci13b3JsZC1sZWFrcyIsIG5vX2FyZ3VtZW50LCAmY2hlY2tGb3JXb3JsZExlYWtzLCBOT30sCiAg
ICAgICAgIHtudWxscHRyLCAwLCBudWxscHRyLCAwfQogICAgIH07CiAKQEAgLTExNTIsNiArMTE1
NCwyMyBAQCBzdGF0aWMgYm9vbCB1c2VMb25nUnVubmluZ1NlcnZlck1vZGUoaW50IGFyZ2MsIGNv
bnN0IGNoYXIgKmFyZ3ZbXSkKICAgICByZXR1cm4gKGFyZ2MgPT0gb3B0aW5kKzEgJiYgc3RyY21w
KGFyZ3Zbb3B0aW5kXSwgIi0iKSA9PSAwKTsKIH0KIAorc3RhdGljIGJvb2wgaGFuZGxlQ29udHJv
bENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkKK3sKKyAgICBpZiAoIXN0cmNtcCgiI0NIRUNL
IEZPUiBXT1JMRCBMRUFLUyIsIGNvbW1hbmQpKSB7CisgICAgICAgIC8vIER1bXBSZW5kZXJUcmVl
IGRvZXMgbm90IHN1cHBvcnQgY2hlY2tpbmcgZm9yIHdvcmxkIGxlYWtzLgorICAgICAgICBXVEY6
OlN0cmluZyByZXN1bHQoIlxuIik7CisgICAgICAgIHByaW50ZigiQ29udGVudC1UeXBlOiB0ZXh0
L3BsYWluXG4iKTsKKyAgICAgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJXVcbiIsIHJlc3Vs
dC5sZW5ndGgoKSk7CisgICAgICAgIGZ3cml0ZShyZXN1bHQudXRmOCgpLmRhdGEoKSwgMSwgcmVz
dWx0Lmxlbmd0aCgpLCBzdGRvdXQpOworICAgICAgICBwcmludGYoIiNFT0ZcbiIpOworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiNFT0ZcbiIpOworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAg
ICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCkKIHsK
ICAgICAvLyBXaGVuIER1bXBSZW5kZXJUcmVlIHJ1biBpbiBzZXJ2ZXIgbW9kZSwgd2UganVzdCB3
YWl0IGFyb3VuZCBmb3IgZmlsZSBuYW1lcwpAQCAtMTE2Niw2ICsxMTg1LDkgQEAgc3RhdGljIHZv
aWQgcnVuVGVzdGluZ1NlcnZlckxvb3AoKQogICAgICAgICBpZiAoc3RybGVuKGZpbGVuYW1lQnVm
ZmVyKSA9PSAwKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgaWYgKGhhbmRsZUNv
bnRyb2xDb21tYW5kKGZpbGVuYW1lQnVmZmVyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAg
ICAgICAgIHJ1blRlc3QoZmlsZW5hbWVCdWZmZXIpOwogCiAgICAgICAgIGlmIChwcmludFRlc3RD
b3VudCkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5k
ZXggNTRkMDZlYTgzMjIwY2Q2ODAzZTM2ZjQ4YTI2ZWYyMWIwMDA0OWZkOS4uNzA0NjVjZjAzMWJk
NDYzNWUzMzE2OTViYjM4ODUwYTBkZjU1MGIyMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0xMTEyLDYgKzExMTIsMjIgQEAgc3RhdGljIHZvaWQg
cmVtb3ZlRm9udEZhbGxiYWNrSWZQcmVzZW50KGNvbnN0IFN0cmluZyYgZm9udEZhbGxiYWNrUGF0
aCkKICAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKG51bGxwdHIpOwog
fQogCitzdGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5k
KQoreworICAgIGlmICghc3RyY21wKCIjQ0hFQ0sgRk9SIEFCQU5ET05FRCBET0NVTUVOVFMiLCBj
b21tYW5kKSkgeworICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBkb2VzIG5vdCBzdXBwb3J0IGNo
ZWNraW5nIGZvciBhYmFuZG9uZGVkIGRvY3VtZW50cy4KKyAgICAgICAgU3RyaW5nIHJlc3VsdCgi
XG4iKTsKKyAgICAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiIpOworICAg
ICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAldVxuIiwgcmVzdWx0Lmxlbmd0aCgpKTsKKyAg
ICAgICAgZndyaXRlKHJlc3VsdC51dGY4KCkuZGF0YSgpLCAxLCByZXN1bHQubGVuZ3RoKCksIHN0
ZG91dCk7CisgICAgICAgIHByaW50ZigiI0VPRlxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiI0VPRlxuIik7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICBmZmx1c2goc3Rk
ZXJyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
IAogc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKQEAgLTE2
MTYsNiArMTYzMiw5IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAg
ICAgICAgICAgICBpZiAoc3RybGVuKGZpbGVuYW1lQnVmZmVyKSA9PSAwKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBpZiAoaGFuZGxlQ29udHJvbENvbW1hbmQoZmls
ZW5hbWVCdWZmZXIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBy
dW5UZXN0KGZpbGVuYW1lQnVmZmVyKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCmluZGV4IDUxNjhlYTdkMjIxODk2NjI0ZTdkMjBmNzI5YjI4N2QxZjliODkxN2YuLjYx
MTNiNzZlMWI2NTBlZjAwOTc3M2IwYjAwNTc5N2IyZTIzYWQ3ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CkBAIC0xODAsNiArMTgwLDIxIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnCiAgICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNz
YWdlQm9keS5nZXQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHBvc3RHQ1Rhc2sodm9pZCogY29udGV4
dCkKK3sKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tCdW5k
bGVQYWdlUmVmPihjb250ZXh0KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVw
b3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKKyAgICBXS1JlbGVhc2UocGFnZSk7Cit9CisKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2Up
Cit7CisgICAgY29uc3QgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSB0cnVlOwor
ICAgIGF1dG8gZG9jdW1lbnRVUkxzID0gYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVS
THMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsK
KyAgICBhdXRvIGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTGl2ZURvY3VtZW50cyIpKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlLCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRVUkxzLmdldCgpKTsKK30KKwogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCiB7
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWdp
blRlc3QiKSkgewpAQCAtMjQ0LDcgKzI1OSwyNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQog
ICAgICAgICBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygp
OwogCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpwYWdlKCktPnJlc2V0QWZ0ZXJUZXN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkdldExpdmVEb2N1bWVudHMiKSkgeworICAgICAgICBjb25zdCBi
b29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IGZhbHNlOworICAgICAgICBhdXRvIGRv
Y3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxl
LCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSk7CisgICAgICAgIGF1
dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJMaXZlRG9jdW1lbnRzIikpOworICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdl
LCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRVUkxzLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiQ2hlY2tGb3JXb3JsZExlYWtzIikpIHsKKyAgICAgICAgV0tCdW5kbGVDbGVhclBh
Z2VDYWNoZShtX2J1bmRsZSk7CisgICAgICAgIFdLQnVuZGxlQ2xlYXJNZW1vcnlDYWNoZShtX2J1
bmRsZSk7CisgICAgICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyht
X2J1bmRsZSk7CiAKKyAgICAgICAgV0tSZXRhaW4ocGFnZSk7IC8vIEJhbGFuY2VkIGJ5IHRoZSBy
ZWxlYXNlIGluIHBvc3RHQ1Rhc2suCisgICAgICAgIFdLQnVuZGxlUGFnZVBvc3RUYXNrKHBhZ2Us
IHBvc3RHQ1Rhc2ssICh2b2lkKilwYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCmluZGV4IDBhZDc1ZTcwZGQzN2JhYjFiYzgyMmI1NWJlOTU1Y2RmZDVkNDI3MzQuLmUz
ODdlM2QyY2MyZjNjNzUwNWY0MGM2Yjk2OGI5MWE1MGZjZjc0ZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAg
LTE0MCw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcoKTsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoKTsKIAorICAgIHZvaWQgcmVw
b3J0TGl2ZURvY3VtZW50cyhXS0J1bmRsZVBhZ2VSZWYpOworCiAgICAgdm9pZCByZXNldFVzZXJT
Y3JpcHRJbmplY3RlZENvdW50KCkgeyBtX3VzZXJTY3JpcHRJbmplY3RlZENvdW50ID0gMDsgfQog
ICAgIHZvaWQgaW5jcmVhc2VVc2VyU2NyaXB0SW5qZWN0ZWRDb3VudCgpIHsgKyttX3VzZXJTY3Jp
cHRJbmplY3RlZENvdW50OyB9CiAgICAgc2l6ZV90IHVzZXJTY3JpcHRJbmplY3RlZENvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyU2NyaXB0SW5qZWN0ZWRDb3VudDsgfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvT3B0aW9ucy5jcHAKaW5kZXggYTg5ZTBkYjRlMjQ5NWFhZTUwZTMzYTQ0ZDM5ZDcwNDAyMzQ1
OTE3Yi4uYTUxNDQwYjkxODc3NmI1OGFkNjhkOGRkNWY1ODk1NmNjMjc2NTMxMyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL09wdGlvbnMuY3BwCkBAIC05Myw2ICs5MywxMiBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25TaG93VG91Y2hlcyhPcHRpb25zJiBvcHRpb25zLCBjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciopCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGhhbmRsZU9wdGlvbkNo
ZWNrRm9yV29ybGRMZWFrcyhPcHRpb25zJiBvcHRpb25zLCBjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciopCit7CisgICAgb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVha3MgPSB0cnVlOworICAgIHJldHVy
biB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBoYW5kbGVPcHRpb25BbGxvd0FueUhUVFBTQ2VydGlm
aWNhdGVGb3JBbGxvd2VkSG9zdHMoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqKQogewogICAgIG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dl
ZEhvc3RzID0gdHJ1ZTsKQEAgLTEyOSw2ICsxMzUsNyBAQCBPcHRpb25zSGFuZGxlcjo6T3B0aW9u
c0hhbmRsZXIoT3B0aW9ucyYgbykKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oIi0tYWxs
b3ctYW55LWNlcnRpZmljYXRlLWZvci1hbGxvd2VkLWhvc3RzIiwgIkFsbG93cyBhbnkgSFRUUFMg
Y2VydGlmaWNhdGUgZm9yIGFuIGFsbG93ZWQgaG9zdC4iLCBoYW5kbGVPcHRpb25BbGxvd0FueUhU
VFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMpKTsKICAgICBvcHRpb25MaXN0LmFwcGVuZChP
cHRpb24oIi0tc2hvdy13ZWJ2aWV3IiwgIlNob3cgdGhlIFdlYlZpZXcgZHVyaW5nIHRlc3QgcnVu
cyAoZm9yIGRlYnVnZ2luZykiLCBoYW5kbGVPcHRpb25TaG93V2ViVmlldykpOwogICAgIG9wdGlv
bkxpc3QuYXBwZW5kKE9wdGlvbigiLS1zaG93LXRvdWNoZXMiLCAiU2hvdyB0aGUgdG91Y2hlcyBk
dXJpbmcgdGVzdCBydW5zIChmb3IgZGVidWdnaW5nKSIsIGhhbmRsZU9wdGlvblNob3dUb3VjaGVz
KSk7CisgICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLWNoZWNrLWZvci13b3JsZC1sZWFr
cyIsICJDaGVjayBmb3IgbGVha3Mgb2Ygd29ybGQgb2JqZWN0cyAoY3VycmVudGx5LCBkb2N1bWVu
dHMpIiwgaGFuZGxlT3B0aW9uQ2hlY2tGb3JXb3JsZExlYWtzKSk7CiAKICAgICBvcHRpb25MaXN0
LmFwcGVuZChPcHRpb24oMCwgMCwgaGFuZGxlT3B0aW9uVW5tYXRjaGVkKSk7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvT3B0aW9ucy5oCmluZGV4IGYzMGM0OTVkOTkzMDc2NmUzMDgzZmQ4NGNjZjA1Njc2ODE1
MTA3OTIuLmE4OTkyNmRiYzA1N2ZhNjMwZTU0YTQ4ODdlZTliMTdmY2QyMmRkNTcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCkBAIC00OCw2ICs0OCw3IEBAIHN0cnVjdCBPcHRpb25zIHsKICAg
ICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNlIH07CiAgICAgYm9vbCBzaG91
bGRTaG93V2ViVmlldyB7IGZhbHNlIH07CiAgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcyB7IGZh
bHNlIH07CisgICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogICAgIGJvb2wg
YWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzIHsgZmFsc2UgfTsKICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+
IGFsbG93ZWRIb3N0czsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
aW5kZXggZmVkY2EzOTI2NzY2MmQyNDkzYjc3NTNhNmQ1MzlmMTFjYWM4MTc3MS4uNjhhNGQxMmY1
MDY5MmQwMDUwZTczNWI1NDY3ZmMwOWIwYzBkM2IzMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTExNSw2ICsxMTUsMjIgQEAgc3RhdGljIFdLU3RyaW5n
UmVmIGNvcHlTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKikKICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1JSEZN
SEV3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFuWDBUSUxKck9NVXVlJTJCUHR3QlJF
NlhmViUwQVd0S1Fic3NoeGs1WmhjVXdjd3l2Y25JcTliODJRaEpkb0FDZEQzNHJxZkNBSU5ENDZm
WEtRVW5iMG12S3pRSUQlMEFBUUFCRmhGTmIzcHBiR3hoU1hOTmVVWnlhV1Z1WkRBTkJna3Foa2lH
OXcwQkFRUUZBQU5CQUFLdjJFZXgybiUyRlMlMEFyJTJGN2lKTnJvV2xTelNNdFRpUVRFQiUyQkFE
V0hHajl1MXhyVXJPaWxxJTJGbzJjdVF4SWZaY05aa1lBa1dQNER1YnFXJTBBaTAlMkYlMkZyZ0J2
bWNvJTNEIik7CiB9CiAKK0FzeW5jVGFzayogQXN5bmNUYXNrOjptX2N1cnJlbnRUYXNrOworCiti
b29sIEFzeW5jVGFzazo6cnVuKCkKK3sKKyAgICBtX2N1cnJlbnRUYXNrID0gdGhpczsKKyAgICBt
X3Rhc2soKTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuVW50aWwobV90YXNr
RG9uZSwgbV90aW1lb3V0KTsKKyAgICBtX2N1cnJlbnRUYXNrID0gbnVsbHB0cjsKKyAgICByZXR1
cm4gbV90YXNrRG9uZTsKK30KKworQXN5bmNUYXNrKiBBc3luY1Rhc2s6OmN1cnJlbnRUYXNrKCkK
K3sKKyAgICByZXR1cm4gbV9jdXJyZW50VGFzazsKK30KKwogc3RhdGljIFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyOwogCiBUZXN0Q29udHJvbGxlciYgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpCkBAIC0zODQsNiArNDAwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgIG1fYWxsb3dlZEhvc3RzID0gb3B0aW9u
cy5hbGxvd2VkSG9zdHM7CiAgICAgbV9zaG91bGRTaG93V2ViVmlldyA9IG9wdGlvbnMuc2hvdWxk
U2hvd1dlYlZpZXc7CiAgICAgbV9zaG91bGRTaG93VG91Y2hlcyA9IG9wdGlvbnMuc2hvdWxkU2hv
d1RvdWNoZXM7CisgICAgbV9jaGVja0ZvcldvcmxkTGVha3MgPSBvcHRpb25zLmNoZWNrRm9yV29y
bGRMZWFrczsKICAgICBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyA9
IG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzOwogCiAgICAg
aWYgKG9wdGlvbnMucHJpbnRTdXBwb3J0ZWRGZWF0dXJlcykgewpAQCAtNjYwLDYgKzY3Nyw4IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZpZXdTdXBwb3J0c09wdGlvbnNGb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgICAgIGlmIChtX21haW5XZWJWaWV3LT52aWV3
U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAg
IHdpbGxEZXN0cm95V2ViVmlldygpOworCiAgICAgICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudCht
X21haW5XZWJWaWV3LT5wYWdlKCksIG51bGxwdHIpOwogICAgICAgICBXS1BhZ2VTZXRQYWdlTmF2
aWdhdGlvbkNsaWVudChtX21haW5XZWJWaWV3LT5wYWdlKCksIG51bGxwdHIpOwogICAgICAgICBX
S1BhZ2VDbG9zZShtX21haW5XZWJWaWV3LT5wYWdlKCkpOwpAQCAtNjY5LDcgKzY4OCw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZpZXdTdXBwb3J0c09wdGlvbnNGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAKICAgICBjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMob3B0
aW9ucyk7CiAKLSAgICBpZiAoIXJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMob3B0aW9ucykp
CisgICAgaWYgKCFyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKG9wdGlvbnMsIFJlc2V0U3Rh
Z2U6OkJlZm9yZVRlc3QpKQogICAgICAgICBUZXN0SW52b2NhdGlvbjo6ZHVtcFdlYlByb2Nlc3NV
bnJlc3BvbnNpdmVuZXNzKCI8dW5rbm93bj4gLSBUZXN0Q29udHJvbGxlcjo6cnVuIC0gRmFpbGVk
IHRvIHJlc2V0IHN0YXRlIHRvIGNvbnNpc3RlbnQgdmFsdWVzXG4iKTsKIH0KIApAQCAtNzgzLDcg
KzgwMiw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAgcGxhdGZvcm1SZXNldFByZWZl
cmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiB9CiAKLWJvb2wgVGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiti
b29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRl
c3RPcHRpb25zJiBvcHRpb25zLCBSZXNldFN0YWdlIHJlc2V0U3RhZ2UpCiB7CiAgICAgU2V0Rm9y
U2NvcGU8U3RhdGU+IGNoYW5nZVN0YXRlKG1fc3RhdGUsIFJlc2V0dGluZyk7CiAgICAgbV9iZWZv
cmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHRydWU7CkBAIC05MTEsOSArOTMwLDcwIEBAIGJvb2wgVGVz
dENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlv
bnMmIG9wdGlvbnMpCiAgICAgbV9kb25lUmVzZXR0aW5nID0gZmFsc2U7CiAgICAgV0tQYWdlTG9h
ZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCksIGJsYW5rVVJMKCkpOwogICAgIHJ1blVudGlsKG1f
ZG9uZVJlc2V0dGluZywgbV9jdXJyZW50SW52b2NhdGlvbi0+c2hvcnRUaW1lb3V0KCkpOworICAg
IGlmICghbV9kb25lUmVzZXR0aW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKHJlc2V0U3RhZ2UgPT0gUmVzZXRTdGFnZTo6QWZ0ZXJUZXN0ICYmIG1fY2hlY2tGb3JXb3Js
ZExlYWtzKQorICAgICAgICB1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCk7CisKICAgICBy
ZXR1cm4gbV9kb25lUmVzZXR0aW5nOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVM
aXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKK3sKKyAgICBBc3luY1Rhc2soW10oKSB7CisgICAgICAg
IC8vIEFmdGVyIGVhY2ggdGVzdCwgd2UgdXBkYXRlIHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRz
IHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGVuIGFuIGFiYW5kb25lZCBkb2N1bWVudCBmaXJzdCBz
aG93ZWQgdXAuCisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldExpdmVEb2N1bWVudHMi
KSk7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgfSwgNV9zKS5ydW4oKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxl
cjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKK3sKKyAgICBBc3luY1Rhc2soW10oKSB7CisgICAgICAg
IC8vIFRoaXMgcnVucyBhdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHRlc3RzLiBJdCBjbGVhcnMg
Y2FjaGVzLCBydW5zIGEgR0MgYW5kIHRoZW4gZmV0Y2hlcyB0aGUgbGlzdCBvZiBkb2N1bWVudHMu
CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNoZWNrRm9yV29ybGRMZWFrcyIpKTsKKyAg
ICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyKTsKKyAgICB9LCAyMF9zKS5ydW4oKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6Zmlu
ZEFuZER1bXBXb3JsZExlYWtzKCkKK3sKKyAgICBjaGVja0ZvcldvcmxkTGVha3MoKTsKKworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAKKyAgICBpZiAobV9hYmFuZG9uZWREb2N1bWVu
dEluZm8uc2l6ZSgpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX2FiYW5kb25l
ZERvY3VtZW50SW5mbykgeworICAgICAgICAgICAgYXV0byBkb2N1bWVudFVSTCA9IGl0LnZhbHVl
LmFiYW5kb25lZERvY3VtZW50VVJMOworICAgICAgICAgICAgaWYgKGRvY3VtZW50VVJMLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudFVSTCA9ICIobm8gdXJsKSI7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiVEVTVDogIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChpdC52YWx1ZS50ZXN0VVJMKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIkFCQU5ET05FRCBET0NVTUVOVDogIik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChkb2N1bWVudFVSTCk7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgibm8gYWJhbmRvbmVkIGRvY3VtZW50cyIpOworCisgICAgU3RyaW5nIHJlc3VsdCA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxu
Iik7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJXVcbiIsIHJlc3VsdC5sZW5ndGgoKSk7
CisgICAgZndyaXRlKHJlc3VsdC51dGY4KCkuZGF0YSgpLCAxLCByZXN1bHQubGVuZ3RoKCksIHN0
ZG91dCk7CisgICAgcHJpbnRmKCIjRU9GXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiNFT0Zc
biIpOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGZmbHVzaChzdGRlcnIpOworfQorCit2b2lk
IFRlc3RDb250cm9sbGVyOjp3aWxsRGVzdHJveVdlYlZpZXcoKQoreworICAgIC8vIEJlZm9yZSB3
ZSBraWxsIHRoZSB3ZWIgdmlldywgbG9vayBmb3IgYWJhbmRvbmVkIGRvY3VtZW50cyBiZWZvcmUg
dGhhdCB3ZWIgcHJvY2VzcyBnb2VzIGF3YXkuCisgICAgY2hlY2tGb3JXb3JsZExlYWtzKCk7Cit9
CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVdlYkNvbnRlbnRQcm9jZXNzKCkKIHsK
ICAgICBXS1BhZ2VUZXJtaW5hdGUobV9tYWluV2ViVmlldy0+cGFnZSgpKTsKQEAgLTEyMzgsNyAr
MTMxOCw3IEBAIE5PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlu
cHV0TGluZSkKICAgICBleGl0KDEpOwogfQogCi1UZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShj
b25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQorc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5w
dXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgVGVzdENvbW1hbmQg
cmVzdWx0OwogICAgIENvbW1hbmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7CkBAIC0x
Mjk2LDYgKzEzNzYsMjMgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFy
KiBpbnB1dExpbmUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgVGVzdENvbnRyb2xsZXI6
OndhaXRGb3JDb21wbGV0aW9uKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZCAoKT4mIGZ1bmN0aW9u
LCBXVEY6OlNlY29uZHMgdGltZW91dCkKK3sKKyAgICBtX2RvbmVSZXNldHRpbmcgPSBmYWxzZTsK
KyAgICBmdW5jdGlvbigpOworICAgIHJ1blVudGlsKG1fZG9uZVJlc2V0dGluZywgdGltZW91dCk7
CisgICAgcmV0dXJuICFtX2RvbmVSZXNldHRpbmc7Cit9CisKK2Jvb2wgVGVzdENvbnRyb2xsZXI6
OmhhbmRsZUNvbnRyb2xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpCit7CisgICAgaWYgKCFz
dHJjbXAoIiNDSEVDSyBGT1IgV09STEQgTEVBS1MiLCBjb21tYW5kKSkgeworICAgICAgICBmaW5k
QW5kRHVtcFdvcmxkTGVha3MoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdGluZ1NlcnZlckxv
b3AoKQogewogICAgIGNoYXIgZmlsZW5hbWVCdWZmZXJbMjA0OF07CkBAIC0xMzA3LDYgKzE0MDQs
OSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpydW5UZXN0aW5nU2VydmVyTG9vcCgpCiAgICAgICAg
IGlmIChzdHJsZW4oZmlsZW5hbWVCdWZmZXIpID09IDApCiAgICAgICAgICAgICBjb250aW51ZTsK
IAorICAgICAgICBpZiAoaGFuZGxlQ29udHJvbENvbW1hbmQoZmlsZW5hbWVCdWZmZXIpKQorICAg
ICAgICAgICAgY29udGludWU7CisKICAgICAgICAgaWYgKCFydW5UZXN0KGZpbGVuYW1lQnVmZmVy
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMjEsNiArMTQyMSw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnJ1bigpCiAgICAgICAgICAgICBpZiAoIXJ1blRlc3QobV9wYXRoc1tp
XS5jX3N0cigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBm
aW5kQW5kRHVtcFdvcmxkTGVha3MoKTsKICAgICB9CiB9CiAKQEAgLTEzODUsOCArMTQ4Niw1MSBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmCiAgICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3du
KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCit7
CisgICAgYXV0byBudW1Eb2N1bWVudHMgPSBXS0FycmF5R2V0U2l6ZShsaXZlRG9jdW1lbnRMaXN0
KTsKKworICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gZG9jdW1lbnRJbmZvOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRG9jdW1lbnRzOyArK2kpIHsKKyAgICAgICAgV0tUeXBl
UmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSk7Cisg
ICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKSB7CisgICAgICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbGl2ZURvY3VtZW50SXRlbSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oaXRlbSk7CisKKyAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBpZEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiaWQiKSk7CisgICAgICAgICAgICBXS1VJbnQ2NFJlZiBkb2N1bWVudElEID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobGl2ZURvY3Vt
ZW50SXRlbSwgaWRLZXkuZ2V0KCkpKTsKKworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHVybEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJs
IikpOworICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1
cmxLZXkuZ2V0KCkpKTsKKworICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdl
dFZhbHVlKGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFkb2N1bWVudEluZm8uc2l6ZSgpKSB7CisgICAgICAgIG1fYWJh
bmRvbmVkRG9jdW1lbnRJbmZvLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBSZW1vdmUgYW55IGRvY3VtZW50cyB3aGljaCBhcmUgbm8gbG9uZ2VyIGxpdmUuCisgICAg
bV9hYmFuZG9uZWREb2N1bWVudEluZm8ucmVtb3ZlSWYoWyZdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgIHJldHVybiAhZG9jdW1lbnRJbmZvLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7
CisgICAgfSk7CisgICAgCisgICAgLy8gQWRkIG5ld2x5IGFiYW5kb25lZCBkb2N1bWVudHMuCisg
ICAgU3RyaW5nIGN1cnJlbnRUZXN0VVJMID0gbV9jdXJyZW50SW52b2NhdGlvbiA/IHRvV1RGU3Ry
aW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fY3VycmVudEludm9jYXRpb24tPnVybCgpKSkp
IDogIm5vIHRlc3QiOworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBkb2N1bWVudEluZm8pCisg
ICAgICAgIG1fYWJhbmRvbmVkRG9jdW1lbnRJbmZvLmFkZChpdC5rZXksIEFiYW5kb25lZERvY3Vt
ZW50SW5mbyhjdXJyZW50VGVzdFVSTCwgaXQudmFsdWUpKTsKK30KKwogdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkxpdmVEb2N1bWVudHMiKSkgeworICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7
CisgICAgICAgIGRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChzdGF0aWNfY2FzdDxXS0FycmF5
UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBBc3luY1Rhc2s6OmN1cnJlbnRUYXNrKCktPnRh
c2tDb21wbGV0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJFdmVudFNlbmRlciIpKSB7CiAgICAg
ICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IDE2MjI1YjUwZmE5Y2M1Y2Q2
MzYwNjAyYWU3NWViNjZhMWI3NjViMTYuLmNmNzVkNjY3NmJmYjQ2MTM1YzY0MDYxODMwNjQxOWRl
MTdjODk1Y2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTQ4
LDYgKzQ4LDMzIEBAIGNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CiBzdHJ1Y3QgVGVzdENvbW1hbmQ7
CiBzdHJ1Y3QgVGVzdE9wdGlvbnM7CiAKK2NsYXNzIEFzeW5jVGFzayB7CitwdWJsaWM6CisgICAg
QXN5bmNUYXNrKFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiB0YXNrLCBXVEY6OlNlY29uZHMgdGlt
ZW91dCkKKyAgICAgICAgOiBtX3Rhc2soV1RGTW92ZSh0YXNrKSkKKyAgICAgICAgLCBtX3RpbWVv
dXQodGltZW91dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghY3VycmVudFRhc2soKSk7CisgICAg
fQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBvbiB0aW1lb3V0LgorICAgIGJvb2wgcnVuKCk7CisK
KyAgICB2b2lkIHRhc2tDb21wbGV0ZSgpCisgICAgeworICAgICAgICBtX3Rhc2tEb25lID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXN5bmNUYXNrKiBjdXJyZW50VGFzaygpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBBc3luY1Rhc2sqIG1fY3VycmVudFRhc2s7CisKKyAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQgKCk+IG1fdGFzazsKKyAgICBXVEY6OlNlY29uZHMgbV90aW1lb3V0OworICAg
IGJvb2wgbV90YXNrRG9uZSB7IGZhbHNlIH07Cit9OworCiAvLyBGSVhNRTogUmVuYW1lIHRoaXMg
VGVzdFJ1bm5lcj8KIGNsYXNzIFRlc3RDb250cm9sbGVyIHsKIHB1YmxpYzoKQEAgLTEyMSw5ICsx
NDgsMTIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW1hZ2VDb3VudEluR2VuZXJhbFBhc3Rl
Ym9hcmQoKSBjb25zdDsKIAotICAgIGJvb2wgcmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhj
b25zdCBUZXN0T3B0aW9ucyYpOworICAgIGVudW0gY2xhc3MgUmVzZXRTdGFnZSB7IEJlZm9yZVRl
c3QsIEFmdGVyVGVzdCB9OworICAgIGJvb2wgcmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhj
b25zdCBUZXN0T3B0aW9ucyYsIFJlc2V0U3RhZ2UpOwogICAgIHZvaWQgcmVzZXRQcmVmZXJlbmNl
c1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYpOwogCisgICAgdm9pZCB3aWxs
RGVzdHJveVdlYlZpZXcoKTsKKwogICAgIHZvaWQgdGVybWluYXRlV2ViQ29udGVudFByb2Nlc3Mo
KTsKICAgICB2b2lkIHJlYXR0YWNoUGFnZVRvV2ViUHJvY2VzcygpOwogCkBAIC0yMzEsNiArMjYx
LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAg
Ym9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHBhdGhPclVSTCk7CisgICAgCisgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB0aW1lZCBvdXQuCisgICAgYm9vbCB3YWl0Rm9yQ29tcGxldGlvbihjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpOworCisgICAgYm9v
bCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKTsKIAogICAgIHZvaWQg
cGxhdGZvcm1Jbml0aWFsaXplKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKQEAgLTI2
MSw2ICsyOTYsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXdTaXplRm9yVGVz
dChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlV2luZG93U2NhbGVGb3JU
ZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CiAKKyAgICB2b2lk
IHVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QoKTsKKyAgICB2b2lkIGNoZWNrRm9yV29ybGRM
ZWFrcygpOworCisgICAgdm9pZCBkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJl
Zik7CisgICAgdm9pZCBmaW5kQW5kRHVtcFdvcmxkTGVha3MoKTsKKwogICAgIHZvaWQgZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKICAgICB2
b2lkIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgp
OwogCkBAIC00MzEsNiArNDcyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU2hvd1dl
YlZpZXcgeyBmYWxzZSB9OwogICAgIAogICAgIGJvb2wgbV9zaG91bGRTaG93VG91Y2hlcyB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2NoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07CiAKICAgICBi
b29sIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzIHsgZmFsc2UgfTsK
ICAgICAKQEAgLTQ0NCw2ICs0ODYsMTggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXZlbnRTZW5kZXJQcm94eT4gbV9ldmVudFNlbmRlclByb3h5OwogCiAgICAgV29ya1F1ZXVlTWFu
YWdlciBtX3dvcmtRdWV1ZU1hbmFnZXI7CisKKyAgICBzdHJ1Y3QgQWJhbmRvbmVkRG9jdW1lbnRJ
bmZvIHsKKyAgICAgICAgU3RyaW5nIHRlc3RVUkw7CisgICAgICAgIFN0cmluZyBhYmFuZG9uZWRE
b2N1bWVudFVSTDsKKworICAgICAgICBBYmFuZG9uZWREb2N1bWVudEluZm8oKSA9IGRlZmF1bHQ7
CisgICAgICAgIEFiYW5kb25lZERvY3VtZW50SW5mbyhTdHJpbmcgaW5UZXN0VVJMLCBTdHJpbmcg
aW5BYmFuZG9uZWREb2N1bWVudFVSTCkKKyAgICAgICAgICAgIDogdGVzdFVSTChpblRlc3RVUkwp
CisgICAgICAgICAgICAsIGFiYW5kb25lZERvY3VtZW50VVJMKGluQWJhbmRvbmVkRG9jdW1lbnRV
UkwpCisgICAgICAgIHsgfQorICAgIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgQWJhbmRvbmVk
RG9jdW1lbnRJbmZvPiBtX2FiYW5kb25lZERvY3VtZW50SW5mbzsKIH07CiAKIHN0cnVjdCBUZXN0
Q29tbWFuZCB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4
IGJjMWVhZjYzZTQwMDc5YWEzMzRjMWZhNTU3NDkwN2E2NTczYmI3ZWQuLjEzYjIxYmVkZDUxNzQw
NzFiZGE3YjYxYjM5MGVmZDc4ODUzM2M0MDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgZW5kOgogICAgICAgICBXS0luc3Bl
Y3RvckNsb3NlKFdLUGFnZUdldEluc3BlY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpKSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotICAg
IGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcyhtX29wdGlvbnMpKQorICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVz
ZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhtX29wdGlvbnMsIFRlc3RDb250cm9sbGVyOjpSZXNl
dFN0YWdlOjpBZnRlclRlc3QpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcHJvY2Vz
cyBpcyB1bnJlc3BvbnNpdmUsIHNvIGxldCdzIHN0YXJ0IGEgbmV3IG9uZS4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdE9wdGlvbnMuaAppbmRleCAyOTBiM2JiZDc0MTdlZDgyZTlkNzNiMzc4OGE2MzYx
NDg4YzhhMDE2Li5kZDY2ZWM4YTc1NTc0NmVjOWNiMmJhODljNmI4OTdkNzBjYzc3ZjY5IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCkBAIC02MCw2ICs2MCw3IEBAIHN0cnVjdCBU
ZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVDb2xvckZpbHRlciB7IGZhbHNlIH07CiAgICAg
Ym9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIHsgZmFsc2UgfTsKICAgICBi
b29sIHJ1blNpbmdseSB7IGZhbHNlIH07CisgICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3MgeyBm
YWxzZSB9OwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgeyAxIH07CiAgICAgVmVjdG9y
PFN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CkBAIC05Nyw3ICs5OCw4IEBAIHN0cnVjdCBUZXN0
T3B0aW9ucyB7CiAgICAgICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVu
YWJsZUNvbG9yRmlsdGVyCiAgICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJ
bkRhcmtNb2RlICE9IG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQog
ICAgICAgICAgICAgfHwganNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAg
ICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseSkKKyAgICAgICAgICAgIHx8IHJ1
blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQorICAgICAgICAgICAgfHwgY2hlY2tGb3JXb3Js
ZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>
<flag name="review"
          id="365875"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>