<?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>73503</bug_id>
          
          <creation_ts>2011-11-30 17:06:10 -0800</creation_ts>
          <short_desc>[Chromium][V8] Implement ArrayBuffer transfer in chromium</short_desc>
          <delta_ts>2011-12-01 09:58:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66578</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>abarth</cc>
    
    <cc>japhet</cc>
    
    <cc>kbr</cc>
    
    <cc>levin</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>512261</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-30 17:06:10 -0800</bug_when>
    <thetext>Implement ArrayBuffer transfer for SerializedScriptValue in chromium port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512270</commentid>
    <comment_count>1</comment_count>
      <attachid>117303</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-30 17:15:51 -0800</bug_when>
    <thetext>Created attachment 117303
Implementation + tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512280</commentid>
    <comment_count>2</comment_count>
      <attachid>117303</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 17:27:23 -0800</bug_when>
    <thetext>Comment on attachment 117303
Implementation + tests

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

Just some high level cursory comments as I start to find my way in the code.

&gt; Source/JavaScriptCore/wtf/ArrayBuffer.h:-67
&gt; -        m_sizeInBytes = 0; 

In general resist the temptation to &quot;clean up&quot; trailing whitespace.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1149
&gt;      else {

Don&apos;t have an else if the condition ends with a return.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1174
&gt; +        else if (V8ArrayBuffer::HasInstance(value)) {

No { here due to single line statement.

And don&apos;t have an else if the condition ends with a return.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2145
&gt; +    OwnPtr&lt;ArrayBufferContentsArray&gt; contents = adoptPtr(new ArrayBufferContentsArray(arrayBuffers.size()));

We really should have a static create method on Vector.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2153
&gt; +            return PassOwnPtr&lt;ArrayBufferContentsArray&gt;();

Doesn&apos;t return 0 work?  Or perhaps nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512295</commentid>
    <comment_count>3</comment_count>
      <attachid>117303</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 18:01:19 -0800</bug_when>
    <thetext>Comment on attachment 117303
Implementation + tests

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

Only one more comment. 

Maybe we should do one more round.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2154
&gt; +        }

Weird issue here with half being neutered if an array buffer list more than once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512297</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 18:02:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 117303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117303&amp;action=review
&gt; 
&gt; Only one more comment. 
&gt; 
&gt; Maybe we should do one more round.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2154
&gt; &gt; +        }
&gt; 
&gt; Weird issue here with half being neutered if an array buffer list more than once.

I should have said this, but my review is basically complete. (The test is involved and I likely need to spend more time and brain power there but I&apos;m done with the code.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512323</commentid>
    <comment_count>5</comment_count>
      <attachid>117303</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-30 18:43:29 -0800</bug_when>
    <thetext>Comment on attachment 117303
Implementation + tests

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

&gt;&gt; Source/JavaScriptCore/wtf/ArrayBuffer.h:-67
&gt;&gt; -        m_sizeInBytes = 0; 
&gt; 
&gt; In general resist the temptation to &quot;clean up&quot; trailing whitespace.

Is it ok to keep this in the patch since I already did it?

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1149
&gt;&gt;      else {
&gt; 
&gt; Don&apos;t have an else if the condition ends with a return.

There are other conditions in these series of if .. else .. that do not end with a return (see e.g. &apos;if(value-&gt;IsString())&apos; branch above). I bet this can be beautified, but not in this patch..

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1174
&gt;&gt; +        else if (V8ArrayBuffer::HasInstance(value)) {
&gt; 
&gt; No { here due to single line statement.
&gt; 
&gt; And don&apos;t have an else if the condition ends with a return.

First part - Done.
Re return: see prev. comment.

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2145
&gt;&gt; +    OwnPtr&lt;ArrayBufferContentsArray&gt; contents = adoptPtr(new ArrayBufferContentsArray(arrayBuffers.size()));
&gt; 
&gt; We really should have a static create method on Vector.

Not in this patch - what do you think? Although with all the typedefs it will be really hard to find all occurrences of this...

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2153
&gt;&gt; +            return PassOwnPtr&lt;ArrayBufferContentsArray&gt;();
&gt; 
&gt; Doesn&apos;t return 0 work?  Or perhaps nullptr?

nullptr works  - thanks!

&gt;&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2154
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; Weird issue here with half being neutered if an array buffer list more than once.
&gt; 
&gt; I should have said this, but my review is basically complete. (The test is involved and I likely need to spend more time and brain power there but I&apos;m done with the code.)

Great catch - thank you very much!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512324</commentid>
    <comment_count>6</comment_count>
      <attachid>117307</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-30 18:45:50 -0800</bug_when>
    <thetext>Created attachment 117307
CR feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512351</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 19:15:48 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 117303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117303&amp;action=review

&gt; &gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1149
&gt; &gt;&gt;      else {
&gt; &gt; 
&gt; &gt; Don&apos;t have an else if the condition ends with a return.
&gt; 
&gt; There are other conditions in these series of if .. else .. that do not end with a return (see e.g. &apos;if(value-&gt;IsString())&apos; branch above). I bet this can be beautified, but not in this patch..

Ok, I get it. I was suggesting introducing a bug... whoops.


&gt; &gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2145
&gt; &gt;&gt; +    OwnPtr&lt;ArrayBufferContentsArray&gt; contents = adoptPtr(new ArrayBufferContentsArray(arrayBuffers.size()));
&gt; &gt; 
&gt; &gt; We really should have a static create method on Vector.
&gt; 
&gt; Not in this patch - what do you think? 

Agreed. I should have been more clear.

Looking over the tests...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512352</commentid>
    <comment_count>8</comment_count>
      <attachid>117312</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-30 19:19:41 -0800</bug_when>
    <thetext>Created attachment 117312
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512476</commentid>
    <comment_count>9</comment_count>
      <attachid>117307</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 22:19:50 -0800</bug_when>
    <thetext>Comment on attachment 117307
CR feedback

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

I think we are missing an update to &quot;fast/dom/Window/window-postmessage-args-expected.txt&quot;

&gt; LayoutTests/fast/dom/Window/window-postmessage-args.html:66
&gt; +if (!(arrayBuffer.byteLength ===0)) {

Consider adding a space after ===</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512480</commentid>
    <comment_count>10</comment_count>
      <attachid>117312</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-30 22:21:20 -0800</bug_when>
    <thetext>Comment on attachment 117312
Rebased

Please consider the 2 comments from above (especially the updated of expected) and feel free to submit -- I thought I submit it a while ago but my change colilded with yours :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512864</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-01 09:58:16 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/101682</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117303</attachid>
            <date>2011-11-30 17:15:51 -0800</date>
            <delta_ts>2011-11-30 18:45:50 -0800</delta_ts>
            <desc>Implementation + tests</desc>
            <filename>73503.patch</filename>
            <type>text/plain</type>
            <size>42497</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NTI3ODE4Li5lNTgyZjM2IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMTEt
MzAgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MDMKKyAgICAgICAgW0Nocm9taXVt
XVtWOF0gSW1wbGVtZW50IEFycmF5QnVmZmVyIHRyYW5zZmVyIGluIGNocm9taXVtLgorICAgICAg
ICBQb3J0aW9ucyBvZiB0aGlzIHBhdGNoIGNvbWUgZnJvbSBMdWtlIFphcmtvLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRy
b2wuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3Rz
L2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanM6IEFkZGVkLgorICAgICAgICAoaXNU
eXBlZEFycmF5KToKKyAgICAgICAgKGlzRGF0YVZpZXcpOgorICAgICAgICAoaXNBcnJheUJ1ZmZl
cik6CisgICAgICAgIChhc3NlcnRCdWZmZXJDbG9zZWQpOgorICAgICAgICAoY3JlYXRlQnVmZmVy
KToKKyAgICAgICAgKGNoZWNrQnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZVZpZXcpOgorICAgICAg
ICAoY3JlYXRlRXZlcnlWaWV3KToKKyAgICAgICAgKGNoZWNrVmlldyk6CisgICAgICAgIChjaGVj
a0VtcHR5QXJyYXkpOgorICAgICAgICAod3JhcFNlbmQpOgorICAgICAgICAod3JhcEZhaWxTZW5k
KToKKyAgICAgICAgKHRlc3RMaXN0Lm5hbWUuc2VuZCk6CisgICAgICAgICh0ZXN0TGlzdC50ZXN0
KToKKyAgICAgICAgKC5uYW1lLnNlbmQpOgorICAgICAgICAoLnRlc3QpOgorICAgICAgICAodGVz
dExpc3QudGVzdExpc3QuY29uY2F0Lik6CisgICAgICAgICh2aWV3QW5kQnVmZmVyLnJldHVybi5u
YW1lLmJ1ZmZlclR5cGUuMC5zZW5kKToKKyAgICAgICAgKHZpZXdBbmRCdWZmZXIucmV0dXJuLnRl
c3QpOgorICAgICAgICAoKToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzLnJldHVybi5u
YW1lLmJ1ZmZlclR5cGUuMC5zZW5kKToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzLnJl
dHVybi50ZXN0KToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzKToKKyAgICAgICAgKHRl
c3RMaXN0KToKKyAgICAgICAgKGRvbmVUZXN0KToKKyAgICAgICAgKHdpbmRvd0hhbmRsZU1lc3Nh
Z2UpOgorICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJncy5o
dG1sOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ct
cG9zdG1lc3NhZ2UtYXJncy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6IFNraXBwZWQgYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5qcyBvbiBKU0Mg
cGxhdGZyb21zLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBTa2lwcGVkIGFycmF5
YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMgb24gSlNDIHBsYXRmcm9tcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOiBTa2lwcGVkIGFycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNv
bnRyb2wuanMgb24gSlNDIHBsYXRmcm9tcy4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBl
ZDogU2tpcHBlZCBhcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzIG9uIEpTQyBwbGF0
ZnJvbXMuCisKIDIwMTEtMTEtMjggIEplZmYgVGltYW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFN1cHByZXNzaW5nIGEgZmFpbGluZyB3ZWJnbCBjb25mb3JtYW5jZSB0ZXN0IG9u
IE1hYy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVm
ZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyNGUxMwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVy
LW9mLWNvbnRyb2wtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDggQEAKK1Rlc3QgdHJhbnNmZXIg
b2YgY29udHJvbCBzZW1hbnRpY3MgZm9yIEFycmF5QnVmZmVycy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitQQVNTIHNhbml0eSBjaGVjaworUEFTUyByYXcgQXJyYXlCdWZmZXIKK1BB
U1Mgc2VuZGluZyBidWZmZXJzIGlzIHNhbmUgZXZlbiBpZiBjbG9uaW5nIGRvZXNuJ3Qgc3BlY2lh
bC1jYXNlCitQQVNTIHNlbmQgZXZlcnkgdmlldworUEFTUyByYXcgSW50MzIKK1BBU1MgcmF3IFVp
bnQzMgorUEFTUyByYXcgSW50OAorUEFTUyByYXcgVWludDgKK1BBU1MgcmF3IEludDE2CitQQVNT
IHJhdyBVaW50MTYKK1BBU1MgcmF3IEZsb2F0MzIKK1BBU1MgcmF3IEZsb2F0NjQKK1BBU1MgcmF3
IERhdGFWaWV3CitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBJbnQzMgorUEFTUyBzZW5kIHZp
ZXcsIGJ1ZmZlciBmb3IgVWludDMyCitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBJbnQ4CitQ
QVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBVaW50OAorUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBm
b3IgSW50MTYKK1BBU1Mgc2VuZCB2aWV3LCBidWZmZXIgZm9yIFVpbnQxNgorUEFTUyBzZW5kIHZp
ZXcsIGJ1ZmZlciBmb3IgRmxvYXQzMgorUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBmb3IgRmxvYXQ2
NAorUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBmb3IgRGF0YVZpZXcKK1BBU1Mgc2VuZCBidWZmZXIs
IHZpZXcgZm9yIEludDMyCitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZvciBVaW50MzIKK1BBU1Mg
c2VuZCBidWZmZXIsIHZpZXcgZm9yIEludDgKK1BBU1Mgc2VuZCBidWZmZXIsIHZpZXcgZm9yIFVp
bnQ4CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZvciBJbnQxNgorUEFTUyBzZW5kIGJ1ZmZlciwg
dmlldyBmb3IgVWludDE2CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZvciBGbG9hdDMyCitQQVNT
IHNlbmQgYnVmZmVyLCB2aWV3IGZvciBGbG9hdDY0CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZv
ciBEYXRhVmlldworUEFTUyBzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBJbnQzMgorUEFTUyBz
cXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBVaW50MzIKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2
aWV3cyBmb3IgSW50OAorUEFTUyBzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBVaW50OAorUEFT
UyBzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBJbnQxNgorUEFTUyBzcXVhc2ggdW5yZWxhdGVk
IHZpZXdzIGZvciBVaW50MTYKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgRmxvYXQz
MgorUEFTUyBzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBGbG9hdDY0CitQQVNTIHNxdWFzaCB1
bnJlbGF0ZWQgdmlld3MgZm9yIERhdGFWaWV3CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWY1NjEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheWJ1ZmZlci10cmFuc2Zl
ci1vZi1jb250cm9sLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJ3ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXIt
b2YtY29udHJvbC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0
cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBlYjIzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29u
dHJvbC5qcwpAQCAtMCwwICsxLDQyNCBAQAord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CitkZXNjcmlwdGlvbignVGVzdCB0cmFuc2ZlciBvZiBjb250cm9sIHNlbWFudGljcyBmb3IgQXJy
YXlCdWZmZXJzLicpOword2luZG93LnRlc3RzQ29tcGxldGUgPSAwOworCit2YXIgYXJyYXlTaXpl
ID0gNDA7Cit2YXIgYXJyYXlPZmZzZXQgPSA4OwordmFyIGFycmF5RWZmZWN0aXZlU2l6ZSA9IGFy
cmF5U2l6ZSAtIGFycmF5T2Zmc2V0OworCit2YXIgYmFzaWNCdWZmZXJUeXBlcyA9CitbCisgICAg
WyJJbnQzMiIsIEludDMyQXJyYXksIDRdLAorICAgIFsiVWludDMyIiwgVWludDMyQXJyYXksIDRd
LAorICAgIFsiSW50OCIsIEludDhBcnJheSwgMV0sCisgICAgWyJVaW50OCIsIFVpbnQ4QXJyYXks
IDFdLAorICAgIFsiSW50MTYiLCBJbnQxNkFycmF5LCAyXSwKKyAgICBbIlVpbnQxNiIsIFVpbnQx
NkFycmF5LCAyXSwKKyAgICBbIkZsb2F0MzIiLCBGbG9hdDMyQXJyYXksIDRdLAorICAgIFsiRmxv
YXQ2NCIsIEZsb2F0NjRBcnJheSwgOF0KK107CisKK3ZhciBhbGxCdWZmZXJUeXBlcyA9CitbCisg
ICAgWyJJbnQzMiIsIEludDMyQXJyYXksIDRdLAorICAgIFsiVWludDMyIiwgVWludDMyQXJyYXks
IDRdLAorICAgIFsiSW50OCIsIEludDhBcnJheSwgMV0sCisgICAgWyJVaW50OCIsIFVpbnQ4QXJy
YXksIDFdLAorICAgIFsiSW50MTYiLCBJbnQxNkFycmF5LCAyXSwKKyAgICBbIlVpbnQxNiIsIFVp
bnQxNkFycmF5LCAyXSwKKyAgICBbIkZsb2F0MzIiLCBGbG9hdDMyQXJyYXksIDRdLAorICAgIFsi
RmxvYXQ2NCIsIEZsb2F0NjRBcnJheSwgOF0sCisgICAgWyJEYXRhVmlldyIsIERhdGFWaWV3LCAx
XQorXTsKKworZnVuY3Rpb24gaXNUeXBlZEFycmF5KHZpZXcpCit7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBiYXNpY0J1ZmZlclR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBidWZm
ZXJUeXBlID0gYmFzaWNCdWZmZXJUeXBlc1tpXTsKKyAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2Vv
ZiBidWZmZXJUeXBlWzFdKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGlzRGF0YVZpZXcodmlldykK
K3sKKyAgICByZXR1cm4gKHZpZXcgaW5zdGFuY2VvZiBEYXRhVmlldyk7Cit9CisKK2Z1bmN0aW9u
IGlzQXJyYXlCdWZmZXIoYnVmZmVyKQoreworICAgIHJldHVybiAoYnVmZmVyIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXIpOworfQorCitmdW5jdGlvbiBhc3NlcnRCdWZmZXJDbG9zZWQodGVzdE5hbWUs
IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyID09PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBpZiAoIWlzQXJyYXlCdWZmZXIoYnVmZmVyKSkgeworICAgICAgICB0
ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogbm90IGFuIGFycmF5IGJ1ZmZlciAoIiArIGJ1ZmZlciAr
ICIpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJ1ZmZlci5ieXRl
TGVuZ3RoICE9PSAwIHx8ICEoYnVmZmVyLmJ5dGVMZW5ndGggPT09IDApKSB7CisgICAgICAgIHRl
c3RGYWlsZWQodGVzdE5hbWUgKyAiOiBBcnJheUJ1ZmZlciBieXRlTGVuZ3RoICE9PSAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0
aW9uIGFzc2VydFZpZXdDbG9zZWQodGVzdE5hbWUsIHZpZXcpCit7CisgICAgaWYgKGlzVHlwZWRB
cnJheSh2aWV3KSB8fCBpc0RhdGFWaWV3KHZpZXcpKSB7CisgICAgICAgIGlmICh2aWV3LmJ1ZmZl
ciAhPT0gbnVsbCAmJiAhYXNzZXJ0QnVmZmVyQ2xvc2VkKHRlc3ROYW1lLCB2aWV3LmJ1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2aWV3LmJ5dGVPZmZzZXQg
IT09IDAgfHwgISh2aWV3LmJ5dGVPZmZzZXQgPT09IDApKSB7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKHRlc3ROYW1lICsgIjogdmlldyBieXRlT2Zmc2V0ICE9PSAwIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZXcuYnl0ZUxlbmd0aCAhPT0g
MCB8fCAhKHZpZXcuYnl0ZUxlbmd0aCA9PT0gMCkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQo
dGVzdE5hbWUgKyAiOiB2aWV3IGJ5dGVMZW5ndGggIT09IDAiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGF0YVZpZXcodmlldykpIHsKKyAg
ICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCAhPT0gMCB8fCAhKHZpZXcubGVuZ3RoID09PSAwKSkg
eworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBUeXBlZEFycmF5IGxl
bmd0aCAhPT0gMCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFyIHYgPSB2aWV3WzBdOwor
ICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGluZGV4IGdldCBvbiBhIGNsb3NlZCB2aWV3IGRp
ZCBub3QgcmV0dXJuIHVuZGVmaW5lZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2goeG4pIHsKKyAgICAg
ICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogaW5kZXggZ2V0IG9uIGEgY2xvc2Vk
IHZpZXcgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgeG4pOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgdmlld1swXSA9IDQyOworICAgICAgICAgICAgICAgIHZhciB2ID0gdmlld1swXTsKKyAgICAg
ICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRl
c3RGYWlsZWQodGVzdE5hbWUgKyAiOiBpbmRleCBzZXQgdGhlbiBnZXQgb24gYSBjbG9zZWQgdmll
dyBkaWQgbm90IHJldHVybiB1bmRlZmluZWQuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKHhuKSB7Cisg
ICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGluZGV4IHNldCB0aGVuIGdl
dCBvbiBhIGNsb3NlZCB2aWV3IHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIHhuKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgIHZpZXcuZ2V0KDApOworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
dGVzdE5hbWUgKyAiOiBnZXQgb24gYSBjbG9zZWQgdmlldyBzdWNjZWVkZWQiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGNhdGNoICh4bikgeyB9CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZpZXcuc2V0KDAsIDEpOworICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBzZXQgb24gYSBjbG9zZWQgdmlldyBzdWNj
ZWVkZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGNh
dGNoICh4bikgeyB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIHZpZXcuZ2V0SW50OCgwKTsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRl
c3ROYW1lICsgIjogZ2V0IG9uIGEgY2xvc2VkIHZpZXcgc3VjY2VlZGVkIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBjYXRjaCAoeG4pIHsgfQorICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2aWV3LnNldEludDgoMCwgMSk7CisgICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHNldCBvbiBhIGNsb3NlZCB2aWV3IHN1
Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0g
Y2F0Y2ggKHhuKSB7IH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWls
ZWQodGVzdE5hbWUgKyAiIG5vdCBhIHZpZXcgKCIgKyB2aWV3ICsgIikiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gY3JlYXRl
QnVmZmVyKGxlbmd0aCkKK3sKKyAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0
aCk7CisgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmlld1tpXSA9IGkgKyAxOworICAg
IH0KKyAgICByZXR1cm4gYnVmZmVyOworfQorCitmdW5jdGlvbiBjaGVja0J1ZmZlcih0ZXN0TmFt
ZSwgYnVmZmVyLCBsZW5ndGgpCit7CisgICAgaWYgKCFpc0FycmF5QnVmZmVyKGJ1ZmZlcikpIHsK
KyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGJ1ZmZlciBpcyBub3QgYW4gQXJyYXlC
dWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoYnVmZmVyLmJ5
dGVMZW5ndGggIT09IGxlbmd0aCkgeworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjog
YnVmZmVyIGlzIHRoZSB3cm9uZyBsZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAodmlld1tpXSAhPT0gaSArIDEp
IHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBidWZmZXIgY29udGFpbnMg
dGhlIHdyb25nIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gY3JlYXRlVmlldyh2aWV3VHlw
ZSwgYnl0ZXNQZXJFbGVtZW50KQoreworICAgIGlmICh2aWV3VHlwZSA9PT0gRGF0YVZpZXcpIHsK
KyAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShhcnJheVNpemUpOworICAgICAgICBm
b3IgKHZhciBpID0gYXJyYXlPZmZzZXQ7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAg
ICAgdmlld1tpXSA9IGkgLSBhcnJheU9mZnNldCArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG5ldyBEYXRhVmlldyh2aWV3LmJ1ZmZlciwgYXJyYXlPZmZzZXQsIGFycmF5RWZmZWN0aXZl
U2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHZpZXcgPSBuZXcgdmlld1R5cGUobmV3
IEFycmF5QnVmZmVyKGFycmF5U2l6ZSksIGFycmF5T2Zmc2V0LCBhcnJheUVmZmVjdGl2ZVNpemUg
LyBieXRlc1BlckVsZW1lbnQpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5RWZm
ZWN0aXZlU2l6ZSAvIGJ5dGVzUGVyRWxlbWVudDsgKytpKSB7CisgICAgICAgICAgICB2aWV3W2ld
ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgfQorfQorCitm
dW5jdGlvbiBjcmVhdGVFdmVyeVZpZXcoYnVmZmVyKQoreworICAgIHJldHVybiBhbGxCdWZmZXJU
eXBlcy5tYXAoZnVuY3Rpb24gKGJ1ZmZlclR5cGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBidWZm
ZXJUeXBlWzFdKGJ1ZmZlciwgYXJyYXlPZmZzZXQsIGFycmF5RWZmZWN0aXZlU2l6ZSAvIGJ1ZmZl
clR5cGVbMl0pOworICAgIH0pOworfQorCitmdW5jdGlvbiBjaGVja1ZpZXcodGVzdE5hbWUsIHR5
cGVkQXJyYXlUeXBlLCB2aWV3KQoreworICAgIGlmICghKHZpZXcgaW5zdGFuY2VvZiB0eXBlZEFy
cmF5VHlwZSkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6ICIgKyB2aWV3ICsg
IiBub3QgYW4gaW5zdGFuY2Ugb2YgIiArIHR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAodmlldy5idWZmZXIuYnl0ZUxlbmd0aCAhPT0gYXJyYXlT
aXplIHx8CisgICAgICAgICghKHZpZXcgaW5zdGFuY2VvZiBEYXRhVmlldykgJiYgdmlldy5sZW5n
dGggIT09IGFycmF5RWZmZWN0aXZlU2l6ZSAvIHZpZXcuQllURVNfUEVSX0VMRU1FTlQpKSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB0aGUgd3JvbmcgbGVuZ3Ro
ICgiICsgdmlldy5sZW5ndGggKyAiKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICh2aWV3LmJ5dGVPZmZzZXQgIT09IGFycmF5T2Zmc2V0KSB7CisgICAgICAgIHRlc3RG
YWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB3cm9uZyBieXRlIG9mZnNldCIpOworICAgIH0K
KyAgICB2YXIgbWF4ID0gYXJyYXlFZmZlY3RpdmVTaXplOworICAgIGlmICghKHZpZXcgaW5zdGFu
Y2VvZiBEYXRhVmlldykpIHsKKyAgICAgICAgbWF4ID0gbWF4IC8gdmlldy5CWVRFU19QRVJfRUxF
TUVOVDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXg7ICsraSkgeworICAgICAg
ICBpZiAodmlldyBpbnN0YW5jZW9mIERhdGFWaWV3KSB7CisgICAgICAgICAgICBpZiAodmlldy5n
ZXRJbnQ4KGkpICE9PSBpICsgMSkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5h
bWUgKyAiOiB2aWV3IGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKHZpZXdbaV0gIT09IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0
ZXN0TmFtZSArICI6IHZpZXcgY29udGFpbnMgdGhlIHdyb25nIGRhdGEiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRW1wdHlBcnJheSh0ZXN0TmFtZSwgYXJy
YXkpCit7CisgICAgaWYgKGFycmF5ID09PSBudWxsIHx8IGFycmF5ID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHBvcnQgbGlzdCBpcyBudWxsIG9yIHVu
ZGVmaW5lZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChhcnJheS5s
ZW5ndGggIT09IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHBvcnQgbGlz
dCBpcyBub3QgemVyby1sZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gd3JhcFNlbmQodGVzdE5hbWUsIG1lc3NhZ2Us
IHhmZXIpCit7CisgICAgdHJ5IHsKKyAgICAgICAgd2luZG93LndlYmtpdFBvc3RNZXNzYWdlKG1l
c3NhZ2UsIHhmZXIsICcqJyk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0RmFpbGVk
KHRlc3ROYW1lICsgIjogY291bGQgbm90IHdlYmtpdFBvc3RNZXNzYWdlOiAiICsgZSk7CisgICAg
ICAgIGRvbmVUZXN0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHdyYXBGYWlsU2VuZCh0ZXN0TmFtZSwgbWVzc2FnZSwgeGZl
cikKK3sKKyAgICB0cnkgeworICAgICAgICB3aW5kb3cud2Via2l0UG9zdE1lc3NhZ2UobWVzc2Fn
ZSwgeGZlciwgJyonKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogZXhwZWN0ZWQgd2Via2l0UG9zdE1l
c3NhZ2UgdG8gZmFpbCBidXQgaXQgZGlkbid0LiIpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dmFyIHRlc3RMaXN0ID0gW3sKKyAgICBuYW1lOiAic2FuaXR5IGNoZWNrIiwKKyAgICBzZW5kOiBm
dW5jdGlvbiAobmFtZSkgeyB3cmFwU2VuZChuYW1lLCBbXSwgW10pOyB9LAorICAgIHRlc3Q6IGZ1
bmN0aW9uIChuYW1lLCBlKSB7IHJldHVybiB0cnVlOyB9Cit9LCB7CisgICAgbmFtZTogInJhdyBB
cnJheUJ1ZmZlciIsCisgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIGJ1
ZmZlciA9IGNyZWF0ZUJ1ZmZlcigzKTsKKyAgICAgICAgd3JhcFNlbmQobmFtZSwgYnVmZmVyLCBb
YnVmZmVyXSk7CisgICAgICAgIGFzc2VydEJ1ZmZlckNsb3NlZChuYW1lLCBidWZmZXIpOworICAg
ICAgICB3cmFwRmFpbFNlbmQobmFtZSwgYnVmZmVyLCBbYnVmZmVyXSk7CisgICAgICAgIHdyYXBG
YWlsU2VuZChuYW1lLCBidWZmZXIsIFtdKTsKKyAgICB9LAorICAgIHRlc3Q6IGZ1bmN0aW9uIChu
YW1lLCBlKSB7IHJldHVybiBjaGVja0J1ZmZlcihuYW1lLCBlLmRhdGEsIDMpICYmIGNoZWNrRW1w
dHlBcnJheShuYW1lLCBlLnBvcnRzKTsgfQorfSwgeworICAgIG5hbWU6ICJzZW5kaW5nIGJ1ZmZl
cnMgaXMgc2FuZSBldmVuIGlmIGNsb25pbmcgZG9lc24ndCBzcGVjaWFsLWNhc2UiLAorICAgIHNl
bmQ6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFyIHZpZXcgPSBjcmVhdGVWaWV3KEludDMy
QXJyYXksIDQpOworICAgICAgICB2YXIgYnVmZmVyID0gdmlldy5idWZmZXI7CisgICAgICAgIHdy
YXBTZW5kKG5hbWUsIFt2aWV3LCBidWZmZXJdLCBbYnVmZmVyXSk7CisgICAgICAgIGFzc2VydEJ1
ZmZlckNsb3NlZChuYW1lLCBidWZmZXIpOworICAgICAgICBhc3NlcnRWaWV3Q2xvc2VkKG5hbWUs
IHZpZXcpOworICAgIH0sCisgICAgdGVzdDogZnVuY3Rpb24gKG5hbWUsIGUpIHsKKyAgICAgICAg
aWYgKGUuZGF0YVswXS5idWZmZXIgIT09IGUuZGF0YVsxXSkgeworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiVmlldyBhbmQgYnVmZmVyIHdlcmUgbm90IGxpbmtlZC4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9LCB7
CisgICAgbmFtZTogInNlbmQgZXZlcnkgdmlldyIsCisgICAgc2VuZDogZnVuY3Rpb24obmFtZSkg
eworICAgICAgICB2YXIgYnVmZmVyID0gY3JlYXRlQnVmZmVyKGFycmF5U2l6ZSk7CisgICAgICAg
IHZhciB2aWV3cyA9IGNyZWF0ZUV2ZXJ5VmlldyhidWZmZXIpOworICAgICAgICB3cmFwU2VuZChu
YW1lLCB2aWV3cywgW2J1ZmZlcl0pOworICAgICAgICBhc3NlcnRCdWZmZXJDbG9zZWQobmFtZSwg
YnVmZmVyKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZpZXdzLCBbYnVmZmVyXSk7Cisg
ICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCB2aWV3cywgW10pOworICAgIH0sCisgICAgdGVzdDog
ZnVuY3Rpb24gKG5hbWUsIGUpIHsKKyAgICAgICAgaWYgKGUuZGF0YS5sZW5ndGggIT09IGFsbEJ1
ZmZlclR5cGVzLmxlbmd0aCkgeworICAgICAgICAgICAgdGVzdEZhaWxlZChuYW1lICsgIjogbm90
IGV2ZXJ5IHZpZXcgd2FzIHNlbnQuIik7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgdiA9
IDA7IHYgPCBlLmRhdGEubGVuZ3RoOyArK3YpIHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0gZS5k
YXRhW3ZdOworICAgICAgICAgICAgaWYgKHZpZXcuYnVmZmVyICE9PSBlLmRhdGFbMF0uYnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZChuYW1lICsgIjogbm90IGV2ZXJ5IHZpZXcg
cG9pbnRlZCB0byB0aGUgY29ycmVjdCBidWZmZXIuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK31dOworCit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNvbmNhdChhbGxCdWZmZXJUeXBlcy5t
YXAoZnVuY3Rpb24oYnVmZmVyVHlwZSkgeyByZXR1cm4geworICAgIG5hbWU6ICJyYXcgIiArIGJ1
ZmZlclR5cGVbMF0sCisgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIHZp
ZXcgPSBjcmVhdGVWaWV3KGJ1ZmZlclR5cGVbMV0sIGJ1ZmZlclR5cGVbMl0pOworICAgICAgICB3
cmFwU2VuZChuYW1lLCB2aWV3LCBbdmlldy5idWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0Vmlld0Ns
b3NlZChuYW1lLCB2aWV3KTsKKyAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIHZpZXcu
YnVmZmVyKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZpZXcsIFt2aWV3LmJ1ZmZlcl0p
OworICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgdmlldywgW10pOworICAgIH0sCisgICAgdGVz
dDogZnVuY3Rpb24gKG5hbWUsIGUpIHsKKyAgICAgICAgcmV0dXJuIGNoZWNrVmlldyhuYW1lLCBi
dWZmZXJUeXBlWzFdLCBlLmRhdGEpICYmIGNoZWNrRW1wdHlBcnJheShuYW1lLCBlLnBvcnRzKTsK
KyAgICB9Cit9fSkpOworCitmdW5jdGlvbiB2aWV3QW5kQnVmZmVyKHZpZXdGaXJzdCwgYnVmZmVy
VHlwZSkgeworICAgIHJldHVybiB7CisgICAgICAgIG5hbWU6ICh2aWV3Rmlyc3QgPyAic2VuZCB2
aWV3LCBidWZmZXIgZm9yICIgOiAic2VuZCBidWZmZXIsIHZpZXcgZm9yICIpICsgYnVmZmVyVHlw
ZVswXSwKKyAgICAgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2
aWV3ID0gY3JlYXRlVmlldyhidWZmZXJUeXBlWzFdLCBidWZmZXJUeXBlWzJdKTsKKyAgICAgICAg
ICAgIHZhciBidWZmZXIgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgICAgIHdyYXBTZW5kKG5hbWUs
IHZpZXdGaXJzdCA/IFt2aWV3LCBidWZmZXJdIDogW2J1ZmZlciwgdmlld10sIFtidWZmZXJdKTsK
KyAgICAgICAgICAgIGFzc2VydFZpZXdDbG9zZWQobmFtZSwgdmlldyk7CisgICAgICAgICAgICBh
c3NlcnRCdWZmZXJDbG9zZWQobmFtZSwgYnVmZmVyKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2Vu
ZChuYW1lLCB2aWV3LCBbYnVmZmVyXSk7CisgICAgICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwg
dmlldywgW10pOworICAgICAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW2J1ZmZl
cl0pOworICAgICAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW10pOworICAgICAg
ICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFt2aWV3LCBidWZmZXJdLCBbYnVmZmVyXSk7CisgICAg
ICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgW2J1ZmZlciwgdmlld10sIFtidWZmZXJdKTsKKyAg
ICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbdmlldywgYnVmZmVyXSwgW10pOworICAgICAg
ICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFtidWZmZXIsIHZpZXddLCBbXSk7CisgICAgICAgIH0s
CisgICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7CisgICAgICAgICAgICB2YXIgdmll
dyA9IGUuZGF0YVt2aWV3Rmlyc3QgPyAwIDogMV07CisgICAgICAgICAgICB2YXIgYnVmZmVyID0g
ZS5kYXRhW3ZpZXdGaXJzdCA/IDEgOiAwXTsKKyAgICAgICAgICAgIGlmIChidWZmZXIgIT09IHZp
ZXcuYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZChuYW1lICsgIiBidWZmZXIg
bm90IHNoYXJlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBjaGVja1ZpZXcobmFtZSwgYnVmZmVyVHlwZVsxXSwgdmll
dykgJiYgY2hlY2tFbXB0eUFycmF5KG5hbWUsIGUucG9ydHMpOworICAgICAgICB9CisgICAgfQor
fTsKKworZnVuY3Rpb24gc3F1YXNoVW5yZWxhdGVkVmlld3MoYnVmZmVyVHlwZSkgeworICAgIHJl
dHVybiB7CisgICAgICAgIG5hbWU6ICJzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciAiICsgYnVm
ZmVyVHlwZVswXSwKKyAgICAgICAgc2VuZDogZnVuY3Rpb24obmFtZSkgeworICAgICAgICAgICAg
dmFyIHZpZXcgPSBjcmVhdGVWaWV3KGJ1ZmZlclR5cGVbMV0sIGJ1ZmZlclR5cGVbMl0pOworICAg
ICAgICAgICAgdmFyIHZpZXdzID0gY3JlYXRlRXZlcnlWaWV3KHZpZXcuYnVmZmVyKTsKKyAgICAg
ICAgICAgIHZhciBidWZmZXIgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgICAgIHdyYXBTZW5kKG5h
bWUsIHZpZXcsIFt2aWV3LmJ1ZmZlcl0pOworICAgICAgICAgICAgYXNzZXJ0Vmlld0Nsb3NlZChu
YW1lLCB2aWV3KTsKKyAgICAgICAgICAgIGFzc2VydEJ1ZmZlckNsb3NlZChuYW1lLCB2aWV3LmJ1
ZmZlcik7CisgICAgICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IHZpZXdzLmxlbmd0aDsgKyt2
KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0Vmlld0Nsb3NlZChuYW1lICsgIih2aWV3ICIgKyB2
ICsgIikiLCB2aWV3c1t2XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cmFwRmFpbFNl
bmQobmFtZSwgdmlld3MsIFtidWZmZXJdKTsKKyAgICAgICAgfSwKKyAgICAgICAgdGVzdDogZnVu
Y3Rpb24gKG5hbWUsIGUpIHsgcmV0dXJuIGNoZWNrVmlldyhuYW1lLCBidWZmZXJUeXBlWzFdLCBl
LmRhdGEpICYmIGNoZWNrRW1wdHlBcnJheShuYW1lLCBlLnBvcnRzKTsgfQorICAgIH0KK30KKwor
dGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYWxsQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKGJ1
ZmZlclR5cGUpIHsgcmV0dXJuIHZpZXdBbmRCdWZmZXIodHJ1ZSwgYnVmZmVyVHlwZSk7IH0pKTsK
K3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGFsbEJ1ZmZlclR5cGVzLm1hcChmdW5jdGlvbihi
dWZmZXJUeXBlKSB7IHJldHVybiB2aWV3QW5kQnVmZmVyKGZhbHNlLCBidWZmZXJUeXBlKTsgfSkp
OwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYWxsQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9u
KGJ1ZmZlclR5cGUpIHsgcmV0dXJuIHNxdWFzaFVucmVsYXRlZFZpZXdzKGJ1ZmZlclR5cGUpOyB9
KSk7CisKK2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGlmICgrK3dpbmRvdy50ZXN0c0NvbXBs
ZXRlID09IHRlc3RMaXN0Lmxlbmd0aCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ID0gdGVzdExpc3Rbd2luZG93LnRlc3RzQ29tcGxl
dGVdOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdC5zZW5kKHQubmFtZSk7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TGlzdFt0XS5uYW1lICsg
Ijogb24gc2VuZDogIiArIGUpOworICAgICAgICAgICAgZG9uZVRlc3QoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworZnVuY3Rpb24gd2luZG93SGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIHZh
ciBjdXJyZW50VGVzdCA9IHRlc3RMaXN0W3dpbmRvdy50ZXN0c0NvbXBsZXRlXTsKKyAgICBpZiAo
Y3VycmVudFRlc3QuYWxyZWFkeUhpdCkgeworICAgICAgICB0ZXN0RmFpbGVkKGN1cnJlbnRUZXN0
Lm5hbWUgKyAiOiB3aW5kb3dIYW5kbGVNZXNzYWdlIGhpdCBtb3JlIHRoYW4gb25jZS4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjdXJyZW50VGVzdC5hbHJlYWR5SGl0ID0g
dHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBpZiAoY3VycmVudFRlc3QudGVzdChjdXJyZW50VGVz
dC5uYW1lLCBldmVudCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoY3VycmVudFRlc3QubmFt
ZSk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGVzdEZhaWxlZChjdXJy
ZW50VGVzdC5uYW1lICsgIjogb24gcmVjaWV2ZTogIiArIGUgKyAiLiBldmVudC5kYXRhID0gIiAr
IGV2ZW50LmRhdGEpOworICAgIH0KKyAgICBkb25lVGVzdCgpOworfQorCit3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIHdpbmRvd0hhbmRsZU1lc3NhZ2UpOword2luZG93LnRlc3Rz
Q29tcGxldGUgPSAtMTsKK2RvbmVUZXN0KCk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1l
c3NhZ2UtYXJncy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1hcmdzLmh0bWwKaW5kZXggNjQ2YjM2NC4uZThlMTdmNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcmdzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcmdzLmh0
bWwKQEAgLTYwLDYgKzYwLDI0IEBAIHRyeVBvc3RNZXNzYWdlRnVuY3Rpb24od2luZG93LndlYmtp
dFBvc3RNZXNzYWdlLCBjaGFubmVsNC5wb3J0MSwgW2NoYW5uZWw0LnBvcnQxCiB2YXIgY2hhbm5l
bDUgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiB0cnlQb3N0TWVzc2FnZUZ1bmN0aW9uKHdpbmRvdy53
ZWJraXRQb3N0TWVzc2FnZSwgW2NoYW5uZWw1LnBvcnQxLCBjaGFubmVsNS5wb3J0Ml0sIFtjaGFu
bmVsNS5wb3J0MSwgY2hhbm5lbDUucG9ydDJdLCAnKicpOwogCit2YXIgYXJyYXlCdWZmZXIgPSBu
ZXcgQXJyYXlCdWZmZXIoMzApOwordmFyIGludDhWaWV3ID0gbmV3IEludDhBcnJheShhcnJheUJ1
ZmZlciwgMiwgMTApOwordHJ5UG9zdE1lc3NhZ2VGdW5jdGlvbih3aW5kb3cud2Via2l0UG9zdE1l
c3NhZ2UsIGFycmF5QnVmZmVyLCBbYXJyYXlCdWZmZXJdLCAnKicpOworaWYgKCEoYXJyYXlCdWZm
ZXIuYnl0ZUxlbmd0aCA9PT0wKSkgeworICAgIGNvbnNvbGUuaW5uZXJIVE1MICs9ICJGQUlMOiBh
cnJheUJ1ZmZlciBub3QgbmV1dGVyZWQ7IGJ5dGVMZW5ndGggPSAiICsgYXJyYXlCdWZmZXIuYnl0
ZUxlbmd0aCArICI8YnI+IjsKK30KK2Vsc2UgeworICAgIGNvbnNvbGUuaW5uZXJIVE1MICs9ICJQ
QVNTOiBhcnJheUJ1ZmZlciBuZXV0ZXJlZDxicj4iOworfQorCitpZiAoIShpbnQ4Vmlldy5sZW5n
dGggPT0gMCkpIHsKKyAgICBjb25zb2xlLmlubmVySFRNTCArPSAiRkFJTDogdmlldyB3YXMgbm90
IG5ldXRlcmVkOyBsZW5ndGggPSAiICsgaW50OFZpZXcubGVuZ3RoICsgIjxicj4iOworfQorZWxz
ZSB7CisgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIlBBU1M6IHZpZXcgbmV1dGVyZWQ8YnI+Igor
fQorCisKIHRyeVBvc3RNZXNzYWdlRnVuY3Rpb24od2luZG93LnBvc3RNZXNzYWdlLCAnZG9uZScs
ICcqJyk7CiA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJncy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9XaW5kb3cv
d2luZG93LXBvc3RtZXNzYWdlLWFyZ3MtZXhwZWN0ZWQudHh0CmluZGV4IDBlODFmOGYuLjIzYWE4
NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dp
bmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJncy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1h
cmdzLWV4cGVjdGVkLnR4dApAQCAtMTksNiArMTksOSBAQCBQQVNTOiBQb3N0aW5nIG1lc3NhZ2Ug
KCcyMTQ3NDgzNjQ4JywgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KIFBBU1M6IFBv
c3RpbmcgbWVzc2FnZSAoJ1tvYmplY3QgTWVzc2FnZVBvcnRdJywgW29iamVjdCBNZXNzYWdlUG9y
dF0sW29iamVjdCBNZXNzYWdlUG9ydF0pOiB0aHJldyBleGNlcHRpb24gRXJyb3I6IERBVEFfQ0xP
TkVfRVJSOiBET00gRXhjZXB0aW9uIDI1CiBQQVNTOiBQb3N0aW5nIG1lc3NhZ2UgKCdbb2JqZWN0
IE1lc3NhZ2VQb3J0XScsIFtvYmplY3QgTWVzc2FnZVBvcnRdLFtvYmplY3QgTWVzc2FnZVBvcnRd
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgogUEFTUzogUG9zdGluZyBtZXNzYWdlICgnW29i
amVjdCBNZXNzYWdlUG9ydF0sW29iamVjdCBNZXNzYWdlUG9ydF0nLCBbb2JqZWN0IE1lc3NhZ2VQ
b3J0XSxbb2JqZWN0IE1lc3NhZ2VQb3J0XSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BB
U1M6IFBvc3RpbmcgbWVzc2FnZSAoJ1tvYmplY3QgQXJyYXlCdWZmZXJdJywgW29iamVjdCBBcnJh
eUJ1ZmZlcl0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTOiBhcnJheUJ1ZmZlciBu
ZXV0ZXJlZAorUEFTUzogdmlldyBuZXV0ZXJlZAogUEFTUzogUG9zdGluZyBtZXNzYWdlICgnZG9u
ZScsICopIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCiBSZWNlaXZlZCBtZXNzYWdlICc0JyB3
aXRoIDAgcG9ydHMuCiBSZWNlaXZlZCBtZXNzYWdlICc0JyB3aXRoIDAgcG9ydHMuCkBAIC0zMiw1
ICszNSw2IEBAIFJlY2VpdmVkIG1lc3NhZ2UgJzIxNDc0ODM2NDgnIHdpdGggMCBwb3J0cy4KIFJl
Y2VpdmVkIG1lc3NhZ2UgJzIxNDc0ODM2NDgnIHdpdGggMCBwb3J0cy4KIFJlY2VpdmVkIG1lc3Nh
Z2UgJ1tvYmplY3QgTWVzc2FnZVBvcnRdJyB3aXRoIDIgcG9ydHMuCiBSZWNlaXZlZCBtZXNzYWdl
ICdbb2JqZWN0IE1lc3NhZ2VQb3J0XSxbb2JqZWN0IE1lc3NhZ2VQb3J0XScgd2l0aCAyIHBvcnRz
LgorUmVjZWl2ZWQgbWVzc2FnZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nIHdpdGggMCBwb3J0cy4K
IFJlY2VpdmVkIG1lc3NhZ2UgJ2RvbmUnIHdpdGggMCBwb3J0cy4KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAppbmRleCAyNzlmMWM1Li4zMzJiZDc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZApAQCAtMTYxOCwzICsxNjE4LDYgQEAgZmFzdC9mb3Jtcy9jaGVja2JveC1hcHBlYXJhbmNlLWNo
YW5nZS1ieS1jaGVja2VkLmh0bWwKICMgW1F0XVtHVEtdIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1hc3luYy5odG1sIGZhaWxzCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MzAwMwogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFzeW5jLmh0bWwKKwor
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0OTMKK2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuaHRtbApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvU2tpcHBlZAppbmRleCA1OWNkYThhLi5mMGM2ZGFjIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZApAQCAtNDk4LDMgKzQ5OCw2IEBAIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1l
c3NhZ2UtYXJyYXlzLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzMxNDgKIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLXRleHR1cmUtYmluZGluZy1wcmVz
ZXJ2ZWQuaHRtbAorCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzQ5MworZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5o
dG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCAyNmFlNDc4Li4xYmQwZDJmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQKQEAgLTI0NzUsMyArMjQ3NSw2IEBAIGZhc3QvY2FudmFzL2NhbnZh
cy1saW5lV2lkdGguaHRtbAogIyBbUXRdIGluc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMt
ZXZlbnRzLmh0bWwgY3Jhc2hpbmcgYWZ0ZXIgcjEwMDkyNgogIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MzIKIGluc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lv
bnMtZXZlbnRzLmh0bWwKKworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM0OTMKK2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRy
b2wuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA1MDc2MjExLi40OGVlMGQ4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTQ2Myw0ICsxNDYzLDUgQEAgcG9pbnRlci1s
b2NrLwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0MzUKIGZh
c3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0bWwKIAotCisjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5MworZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwppbmRleCBlNjAwYmE3Li40NDY1YzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxMS0xMS0zMCAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUu
Y29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzUwMworICAgICAgICBbQ2hyb21pdW1dW1Y4XSBJbXBsZW1lbnQgQXJyYXlCdWZmZXIgdHJhbnNm
ZXIgaW4gY2hyb21pdW0uCisgICAgICAgIFBvcnRpb25zIG9mIHRoaXMgcGF0Y2ggY29tZSBmcm9t
IEx1a2UgWmFya28uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoV1RGOjpBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIpOiBDaGFuZ2VkIHByb3RvdHlwZSBmcm9tIHBvaW50ZXJzIHRvIFJlZlB0ci4KKyAg
ICAgICAgKiB3dGYvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdURjo6QXJyYXlCdWZmZXJDb250
ZW50czo6dHJhbnNmZXIpOiBDaGFuZ2VkIHByb3RvdHlwZSBmcm9tIHBvaW50ZXJzIHRvIFJlZlB0
ci4KKyAgICAgICAgKFdURjo6QXJyYXlCdWZmZXI6OmlzTmV1dGVyZWQpOgorICAgICAgICAqIHd0
Zi9UeXBlZEFycmF5QmFzZS5oOgorICAgICAgICAoV1RGOjpUeXBlZEFycmF5QmFzZTo6bmV1dGVy
KToKKwogMjAxMS0xMS0yOCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAg
Q3JlYXRlIHNrZWxldG9uIGZyYW1ld29yayBmb3Igbm90aWZpY2F0aW9ucyBzdXBwb3J0IGluIFdL
MgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmNwcAppbmRleCAxZWJlNzRm
Li40NWNmYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmNwcApA
QCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotYm9vbCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8QXJyYXlCdWZmZXJW
aWV3Kj4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBu
ZXV0ZXJlZFZpZXdzKQogewogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4ga2VlcEFsaXZlKHRoaXMp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmgKaW5kZXggNDE5NmFhOC4u
ZWU5NWY1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuaApAQCAtNTgs
MTMgKzU4LDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogCiAg
ICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKSAKKyAgICB2b2lkIHRyYW5zZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFvdGhl
ci5tX2RhdGEpOwogICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CiAgICAgICAgIG90aGVy
Lm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgICAgICBtX2RhdGEgPSAwOyAKLSAg
ICAgICAgbV9zaXplSW5CeXRlcyA9IDA7IAorICAgICAgICBtX2RhdGEgPSAwOworICAgICAgICBt
X3NpemVJbkJ5dGVzID0gMDsKICAgICB9CiAKICAgICB2b2lkKiBtX2RhdGE7CkBAIC04OCw3ICs4
OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAg
dm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwogCi0gICAgYm9vbCB0cmFuc2ZlcihB
cnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPEFycmF5QnVmZmVyVmlldyo+JiBuZXV0ZXJlZFZp
ZXdzKTsKKyAgICBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7CisgICAgYm9vbCBpc05ldXRl
cmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CiAKICAgICB+QXJyYXlCdWZmZXIo
KSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlZEFycmF5
QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlZEFycmF5QmFzZS5oCmluZGV4
IGFlMzBjMTcuLmRiYTk1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
VHlwZWRBcnJheUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVkQXJy
YXlCYXNlLmgKQEAgLTExMiw2ICsxMTIsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
Y3JlYXRlPFN1YmNsYXNzPihidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIH0KIAorICAg
IHZpcnR1YWwgdm9pZCBuZXV0ZXIoKQorICAgIHsKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3Ojpu
ZXV0ZXIoKTsKKyAgICAgICAgbV9sZW5ndGggPSAwOworICAgIH0KKwogICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRvIGhhdmUgdG8gYWNjZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlvbiBpbiBz
dWJjbGFzc2VzLAogICAgIC8vIHdoaWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0aGVyIHRo
YW4gcHJpdmF0ZS4KICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGU3Zjkw
Li5mYTg1ZWJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTEtMzAgIERtaXRy
eSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MDMKKyAgICAgICAgW0Nocm9taXVtXVtWOF0gSW1w
bGVtZW50IEFycmF5QnVmZmVyIHRyYW5zZmVyIGluIGNocm9taXVtLgorICAgICAgICBQb3J0aW9u
cyBvZiB0aGlzIHBhdGNoIGNvbWUgZnJvbSBMdWtlIFphcmtvLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mv
djgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0
TWFwOjpXcml0ZXI6OndyaXRlVHJhbnNmZXJyZWRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6U2VyaWFsaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6d3JpdGVBbmRHcmV5QXJyYXlCdWZmZXJWaWV3
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjp3cml0ZUFycmF5
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjp3cml0
ZVRyYW5zZmVycmVkQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlNlcmlhbGl6ZXI6OmRvU2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFw
OjpSZWFkZXI6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6
cmVhZEFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVz
ZXJpYWxpemVyOjpEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OkRlc2VyaWFsaXplcjo6dHJ5R2V0VHJhbnNmZXJyZWRBcnJheUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpuZXV0ZXJCaW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisKIDIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAg
PHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBrbm93aW5nIHdo
ZW4gYSBUcmVlRWxlbWVudCBpcyBhZGRlZCBvciBjaGFuZ2VkIGFueXdoZXJlIGluIGEgVHJlZU91
dGxpbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCBkM2E0YjFkLi5jZGI0YjNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE5Nyw2
ICsxOTcsNyBAQCBlbnVtIFNlcmlhbGl6YXRpb25UYWcgewogICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxscyBp
dCB3aXRoIHRoZSBsYXN0IGxlbmd0aCBlbGVtZW50cyBhbmQgbnVtUHJvcGVydGllcyBuYW1lLHZh
bHVlIHBhaXJzIHB1c2hlZCBvbnRvIGRlc2VyaWFsaXphdGlvbiBzdGFjawogICAgIFJlZ0V4cFRh
ZyA9ICdSJywgLy8gcGF0dGVybjpSYXdTdHJpbmcsIGZsYWdzOnVpbnQzMl90IC0+IFJlZ0V4cCAo
cmVmKQogICAgIEFycmF5QnVmZmVyVGFnID0gJ0InLCAvLyBieXRlTGVuZ3RoOnVpbnQzMl90LCBk
YXRhOmJ5dGVbYnl0ZUxlbmd0aF0gLT4gQXJyYXlCdWZmZXIgKHJlZikKKyAgICBBcnJheUJ1ZmZl
clRyYW5zZmVyVGFnID0gJ3QnLCAvLyBpbmRleDp1aW50MzJfdCAtPiBBcnJheUJ1ZmZlci4gRm9y
IEFycmF5QnVmZmVyIHRyYW5zZmVyCiAgICAgQXJyYXlCdWZmZXJWaWV3VGFnID0gJ1YnLCAvLyBz
dWJ0YWc6Ynl0ZSwgYnl0ZU9mZnNldDp1aW50MzJfdCwgYnl0ZUxlbmd0aDp1aW50MzJfdCAtPiBB
cnJheUJ1ZmZlclZpZXcgKHJlZikuIENvbnN1bWVzIGFuIEFycmF5QnVmZmVyIGZyb20gdGhlIHRv
cCBvZiB0aGUgZGVzZXJpYWxpemF0aW9uIHN0YWNrLgogICAgIE9iamVjdFJlZmVyZW5jZVRhZyA9
ICdeJywgLy8gcmVmOnVpbnQzMl90IC0+IHJlZmVyZW5jZSB0YWJsZVtyZWZdCiAgICAgR2VuZXJh
dGVGcmVzaE9iamVjdFRhZyA9ICdvJywgLy8gLT4gZW1wdHkgb2JqZWN0IGFsbG9jYXRlZCBhbiBv
YmplY3QgSUQgYW5kIHB1c2hlZCBvbnRvIHRoZSBvcGVuIHN0YWNrIChyZWYpCkBAIC00MzgsNiAr
NDM5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgZG9Xcml0ZVVpbnQzMihpbmRleCk7CiAgICAgfQog
CisgICAgdm9pZCB3cml0ZVRyYW5zZmVycmVkQXJyYXlCdWZmZXIodWludDMyX3QgaW5kZXgpCisg
ICAgeworICAgICAgICBhcHBlbmQoQXJyYXlCdWZmZXJUcmFuc2ZlclRhZyk7CisgICAgICAgIGRv
V3JpdGVVaW50MzIoaW5kZXgpOworICAgIH0KKwogICAgIHZvaWQgd3JpdGVPYmplY3RSZWZlcmVu
Y2UodWludDMyX3QgcmVmZXJlbmNlKQogICAgIHsKICAgICAgICAgYXBwZW5kKE9iamVjdFJlZmVy
ZW5jZVRhZyk7CkBAIC01OTMsNyArNjAwLDcgQEAgcHVibGljOgogICAgICAgICBKU0ZhaWx1cmUK
ICAgICB9OwogCi0gICAgU2VyaWFsaXplcihXcml0ZXImIHdyaXRlciwgTWVzc2FnZVBvcnRBcnJh
eSogbWVzc2FnZVBvcnRzLCB2ODo6VHJ5Q2F0Y2gmIHRyeUNhdGNoKQorICAgIFNlcmlhbGl6ZXIo
V3JpdGVyJiB3cml0ZXIsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZm
ZXJBcnJheSogYXJyYXlCdWZmZXJzLCB2ODo6VHJ5Q2F0Y2gmIHRyeUNhdGNoKQogICAgICAgICA6
IG1fd3JpdGVyKHdyaXRlcikKICAgICAgICAgLCBtX3RyeUNhdGNoKHRyeUNhdGNoKQogICAgICAg
ICAsIG1fZGVwdGgoMCkKQEAgLTYwNiw2ICs2MTMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlUG9ydHMtPnNpemUoKTsgaSsrKQogICAgICAg
ICAgICAgICAgIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuc2V0KFY4TWVzc2FnZVBvcnQ6Ondy
YXAobWVzc2FnZVBvcnRzLT5hdChpKS5nZXQoKSksIGkpOwogICAgICAgICB9CisgICAgICAgIGlm
IChhcnJheUJ1ZmZlcnMpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJy
YXlCdWZmZXJzLT5zaXplKCk7IGkrKykgCisgICAgICAgICAgICAgICAgbV90cmFuc2ZlcnJlZEFy
cmF5QnVmZmVycy5zZXQoVjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJheUJ1ZmZlcnMtPmF0KGkpLmdl
dCgpKSwgaSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTdGF0dXMgc2VyaWFsaXplKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKQEAgLTk5NSw2ICsxMDA2LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcgPSBWOEFycmF5QnVmZmVyVmll
dzo6dG9OYXRpdmUob2JqZWN0KTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXctPmJ1ZmZlcigp
KQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9uZUVycm9yLCBuZXh0KTsK
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuZGVybHlpbmdCdWZmZXIgPSB0b1Y4KGFy
cmF5QnVmZmVyVmlldy0+YnVmZmVyKCkpOwogICAgICAgICBpZiAodW5kZXJseWluZ0J1ZmZlci5J
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3Is
IG5leHQpOwpAQCAtMTAxNCwxMiArMTAyNywyNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlQXJyYXlCdWZmZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQorICAgIFN0YXRlQmFzZSogd3JpdGVBcnJheUJ1ZmZlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUsIFN0YXRlQmFzZSogbmV4dCkKICAgICB7CiAgICAgICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlciA9IFY4QXJyYXlCdWZmZXI6OnRvTmF0aXZlKHZhbHVlLkFzPHY4OjpP
YmplY3Q+KCkpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChhcnJheUJ1ZmZlci0+aXNOZXV0
ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9uZUVycm9yLCBu
ZXh0KTsKKyAgICAgICAgQVNTRVJUKCFtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmNvbnRhaW5z
KHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpKTsKICAgICAgICAgbV93cml0ZXIud3JpdGVBcnJheUJ1
ZmZlcigqYXJyYXlCdWZmZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTdGF0
ZUJhc2UqIHdyaXRlVHJhbnNmZXJyZWRBcnJheUJ1ZmZlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUsIHVpbnQzMl90IGluZGV4LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgeworICAgICAgICBB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp0b05hdGl2ZSh2YWx1ZS5B
czx2ODo6T2JqZWN0PigpKTsKKyAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBpZiAoYXJyYXlCdWZmZXItPmlzTmV1dGVyZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7CisgICAgICAg
IG1fd3JpdGVyLndyaXRlVHJhbnNmZXJyZWRBcnJheUJ1ZmZlcihpbmRleCk7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIHNob3VsZFNlcmlhbGl6ZURlbnNlbHko
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBwcm9wZXJ0eUNvdW50KSAKQEAgLTEwNzEsNiArMTA5
OSw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWOE9iamVjdE1hcDx2ODo6T2JqZWN0LCB1aW50
MzJfdD4gT2JqZWN0UG9vbDsKICAgICBPYmplY3RQb29sIG1fb2JqZWN0UG9vbDsKICAgICBPYmpl
Y3RQb29sIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHM7CisgICAgT2JqZWN0UG9vbCBtX3RyYW5z
ZmVycmVkQXJyYXlCdWZmZXJzOwogICAgIHVpbnQzMl90IG1fbmV4dE9iamVjdFJlZmVyZW5jZTsK
IH07CiAKQEAgLTEwODIsNiArMTExMSw3IEBAIFNlcmlhbGl6ZXI6OlN0YXRlQmFzZSogU2VyaWFs
aXplcjo6ZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0CiAgICAg
fQogICAgIG1fd3JpdGVyLndyaXRlUmVmZXJlbmNlQ291bnQobV9uZXh0T2JqZWN0UmVmZXJlbmNl
KTsKICAgICB1aW50MzJfdCBvYmplY3RSZWZlcmVuY2U7CisgICAgdWludDMyX3QgYXJyYXlCdWZm
ZXJJbmRleDsKICAgICBpZiAoKHZhbHVlLT5Jc09iamVjdCgpIHx8IHZhbHVlLT5Jc0RhdGUoKSB8
fCB2YWx1ZS0+SXNSZWdFeHAoKSkKICAgICAgICAgJiYgbV9vYmplY3RQb29sLnRyeUdldCh2YWx1
ZS5Bczx2ODo6T2JqZWN0PigpLCAmb2JqZWN0UmVmZXJlbmNlKSkgewogICAgICAgICAvLyBOb3Rl
IHRoYXQgSXNPYmplY3QoKSBhbHNvIGRldGVjdHMgd3JhcHBlcnMgKGVnLCBpdCB3aWxsIGNhdGNo
IHRoZSB0aGluZ3MKQEAgLTExMTQsNyArMTE0NCw4IEBAIFNlcmlhbGl6ZXI6OlN0YXRlQmFzZSog
U2VyaWFsaXplcjo6ZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0
CiAgICAgICAgICAgICAgICAgbV93cml0ZXIud3JpdGVUcmFuc2ZlcnJlZE1lc3NhZ2VQb3J0KG1l
c3NhZ2VQb3J0SW5kZXgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVy
biBoYW5kbGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7Ci0gICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKHZhbHVlKSAmJiBtX3RyYW5zZmVycmVk
QXJyYXlCdWZmZXJzLnRyeUdldCh2YWx1ZS5Bczx2ODo6T2JqZWN0PigpLCAmYXJyYXlCdWZmZXJJ
bmRleCkpCisgICAgICAgIHJldHVybiB3cml0ZVRyYW5zZmVycmVkQXJyYXlCdWZmZXIodmFsdWUs
IGFycmF5QnVmZmVySW5kZXgsIG5leHQpOwogICAgIGVsc2UgewogICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGpzT2JqZWN0ID0gdmFsdWUuQXM8djg6Ok9iamVjdD4oKTsKICAgICAgICAg
aWYgKGpzT2JqZWN0LklzRW1wdHkoKSkKQEAgLTExNDAsOSArMTE3MSw5IEBAIFNlcmlhbGl6ZXI6
OlN0YXRlQmFzZSogU2VyaWFsaXplcjo6ZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlLCBTdGF0CiAgICAgICAgICAgICB3cml0ZUltYWdlRGF0YSh2YWx1ZSk7CiAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLT5Jc1JlZ0V4cCgpKQogICAgICAgICAgICAgd3JpdGVSZWdFeHAodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChWOEFycmF5QnVmZmVyOjpIYXNJbnN0YW5jZSh2YWx1ZSkp
Ci0gICAgICAgICAgICB3cml0ZUFycmF5QnVmZmVyKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
dmFsdWUtPklzT2JqZWN0KCkpIHsKKyAgICAgICAgZWxzZSBpZiAoVjhBcnJheUJ1ZmZlcjo6SGFz
SW5zdGFuY2UodmFsdWUpKSB7CisgICAgICAgICAgICByZXR1cm4gd3JpdGVBcnJheUJ1ZmZlcih2
YWx1ZSwgbmV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPklzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIGlmIChpc0hvc3RPYmplY3QoanNPYmplY3QpIHx8IGpzT2JqZWN0LT5Jc0NhbGxh
YmxlKCkgfHwgdmFsdWUtPklzTmF0aXZlRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
aGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5leHQpOwogICAgICAgICAgICAgcmV0dXJuIHN0
YXJ0T2JqZWN0U3RhdGUoanNPYmplY3QsIG5leHQpOwpAQCAtMTE2Miw2ICsxMTkzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBwdXNoT2JqZWN0UmVmZXJlbmNlKGNvbnN0IHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0T2JqZWN0RnJvbU9i
amVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiop
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0VHJhbnNmZXJyZWRNZXNzYWdlUG9ydCh1aW50
MzJfdCBpbmRleCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCB0cnlHZXRUcmFuc2ZlcnJlZEFycmF5QnVmZmVyKHVpbnQzMl90IGluZGV4LCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4qKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5ld1NwYXJzZUFycmF5KHVpbnQz
Ml90IGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBuZXdEZW5zZUFycmF5KHVpbnQzMl90
IGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBuZXdPYmplY3QoKSA9IDA7CkBAIC0xMzY4
LDYgKzE0MDAsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlCdWZmZXJUcmFu
c2ZlclRhZzogeworICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGluZGV4OworICAgICAgICAg
ICAgaWYgKCFkb1JlYWRVaW50MzIoJmluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWNyZWF0b3IudHJ5R2V0VHJhbnNmZXJyZWRBcnJheUJ1ZmZl
cihpbmRleCwgdmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7
CiAgICAgICAgICAgICBpZiAobV92ZXJzaW9uIDw9IDApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTU2OSw2ICsxNjExLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKCFjcmVhdG9yLmNvbnN1bWVUb3BPZlN0YWNrKCZhcnJheUJ1
ZmZlclY4VmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYXJy
YXlCdWZmZXJWOFZhbHVlLklzRW1wdHkoKSkgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6dG9OYXRpdmUoYXJyYXlCdWZmZXJW
OFZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc0MSwxMSArMTc4NSwxNyBAQCBwcml2YXRlOgog
ICAgIHVpbnQzMl90IG1fdmVyc2lvbjsKIH07CiAKKwordHlwZWRlZiBWZWN0b3I8V1RGOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzLCAxPiBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk7CisKIGNsYXNzIERl
c2VyaWFsaXplciA6IHB1YmxpYyBDb21wb3NpdGVDcmVhdG9yIHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBEZXNlcmlhbGl6ZXIoUmVhZGVyJiByZWFkZXIsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3Nh
Z2VQb3J0cykKKyAgICBleHBsaWNpdCBEZXNlcmlhbGl6ZXIoUmVhZGVyJiByZWFkZXIsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cykKICAgICAgICAgOiBt
X3JlYWRlcihyZWFkZXIpCiAgICAgICAgICwgbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cyhtZXNz
YWdlUG9ydHMpCisgICAgICAgICwgbV9hcnJheUJ1ZmZlckNvbnRlbnRzKGFycmF5QnVmZmVyQ29u
dGVudHMpCisgICAgICAgICwgbV9hcnJheUJ1ZmZlcnMoYXJyYXlCdWZmZXJDb250ZW50cyA/IGFy
cmF5QnVmZmVyQ29udGVudHMtPnNpemUoKSA6IDApCiAgICAgICAgICwgbV92ZXJzaW9uKDApCiAg
ICAgewogICAgIH0KQEAgLTE4OTAsNiArMTk0MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRUcmFuc2ZlcnJlZEFycmF5
QnVmZmVyKHVpbnQzMl90IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIG9iamVjdCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9hcnJheUJ1ZmZlckNvbnRlbnRzKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoaW5kZXggPj0gbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHJlc3VsdCA9IG1fYXJyYXlCdWZmZXJzLmF0KGluZGV4KTsKKyAgICAgICAgaWYgKHJlc3VsdC5J
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFY4QXJyYXlCdWZmZXI6OndyYXAoQXJy
YXlCdWZmZXI6OmNyZWF0ZShtX2FycmF5QnVmZmVyQ29udGVudHMtPmF0KGluZGV4KSkuZ2V0KCkp
OworICAgICAgICAgICAgbV9hcnJheUJ1ZmZlcnNbaW5kZXhdID0gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgICpvYmplY3QgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRPYmplY3RGcm9tT2JqZWN0UmVmZXJlbmNlKHVpbnQz
Ml90IHJlZmVyZW5jZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiBvYmplY3QpCiAgICAgewogICAg
ICAgICBpZiAocmVmZXJlbmNlID49IG1fb2JqZWN0UG9vbC5zaXplKCkpCkBAIC0xOTY5LDYgKzIw
MzQsOCBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBtX29i
amVjdFBvb2w7CiAgICAgVmVjdG9yPHVpbnQzMl90PiBtX29wZW5Db21wb3NpdGVSZWZlcmVuY2VT
dGFjazsKICAgICBNZXNzYWdlUG9ydEFycmF5KiBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzOwor
ICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9hcnJheUJ1ZmZlckNvbnRlbnRzOworICAg
IFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpPYmplY3Q+ID4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgdWlu
dDMyX3QgbV92ZXJzaW9uOwogfTsKIApAQCAtMTk4OSwxNiArMjA1NiwxNiBAQCB2b2lkIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iagogfQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5
KiBhcnJheUJ1ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgZGlkVGhyb3cpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIG1lc3NhZ2VQb3J0cywgZGlk
VGhyb3cpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2
YWx1ZSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGRpZFRocm93KSk7CiB9CiAKIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7CiAgICAgYm9vbCBkaWRUaHJvdzsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgMCwgZGlk
VGhyb3cpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2
YWx1ZSwgMCwgMCwgZGlkVGhyb3cpKTsKIH0KIAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3RyaW5n
JiBkYXRhKQpAQCAtMjA2MywxNCArMjEzMCw0NiBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgTWVzc2FnZVBv
cnRBcnJheSogbWVzc2FnZVBvcnRzLCBib29sJiBkaWRUaHJvdykKK3N0YXRpYyB2b2lkIG5ldXRl
ckJpbmRpbmcodm9pZCogZG9tT2JqZWN0KSAKK3sKKyAgICBET01EYXRhTGlzdCYgYWxsU3RvcmVz
ID0gRE9NRGF0YVN0b3JlOjphbGxTdG9yZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFsbFN0b3Jlcy5zaXplKCk7IGkrKykgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iaiA9IGFsbFN0b3Jlc1tpXS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGRvbU9iamVjdCk7CisgICAg
ICAgIGlmICghb2JqLklzRW1wdHkoKSkKKyAgICAgICAgICAgIG9iai0+U2V0SW5kZXhlZFByb3Bl
cnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKDAsIHY4OjprRXh0ZXJuYWxCeXRlQXJyYXksIDApOwor
ICAgIH0KK30KKworUGFzc093blB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU6OkFycmF5QnVmZmVy
Q29udGVudHNBcnJheT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0cmFuc2ZlckFycmF5QnVmZmVy
cyhBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KSAKK3sKKyAg
ICBPd25QdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBjb250ZW50cyA9IGFkb3B0UHRyKG5l
dyBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkoYXJyYXlCdWZmZXJzLnNpemUoKSkpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheUJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4gbmV1dGVyZWRWaWV3czsKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBhcnJheUJ1ZmZlcnNbaV0tPnRyYW5zZmVyKGNvbnRlbnRzLT5hdChp
KSwgbmV1dGVyZWRWaWV3cyk7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgICAgIGRpZFRocm93ID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG5ldXRlckJpbmRpbmcoYXJyYXlCdWZmZXJzW2ld
LmdldCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBuZXV0ZXJlZFZpZXdzLnNp
emUoKTsgaisrKQorICAgICAgICAgICAgbmV1dGVyQmluZGluZyhuZXV0ZXJlZFZpZXdzW2pdLmdl
dCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRlbnRzLnJlbGVhc2UoKTsKK30KKworU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJyYXlC
dWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCYgZGlkVGhyb3cpCiB7CiAgICAgZGlkVGhyb3cgPSBmYWxzZTsKICAgICBXcml0ZXIgd3JpdGVy
OwogICAgIFNlcmlhbGl6ZXI6OlN0YXR1cyBzdGF0dXM7CiAgICAgewogICAgICAgICB2ODo6VHJ5
Q2F0Y2ggdHJ5Q2F0Y2g7Ci0gICAgICAgIFNlcmlhbGl6ZXIgc2VyaWFsaXplcih3cml0ZXIsIG1l
c3NhZ2VQb3J0cywgdHJ5Q2F0Y2gpOworICAgICAgICBTZXJpYWxpemVyIHNlcmlhbGl6ZXIod3Jp
dGVyLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgdHJ5Q2F0Y2gpOwogICAgICAgICBzdGF0
dXMgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U2VyaWFsaXplcjo6SlNFeGNlcHRpb24pIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBh
IEpTIGV4Y2VwdGlvbiB0aHJvd24sIHJlLXRocm93IGl0LgpAQCAtMjA5NSw2ICsyMTk0LDggQEAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlLCBNZXNzYWcKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFs
aXplcjo6U3VjY2VzczoKICAgICAgICAgbV9kYXRhID0gU3RyaW5nKFN0cmluZ0ltcGw6OmFkb3B0
KHdyaXRlci5kYXRhKCkpKS5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgaWYgKGFycmF5QnVmZmVy
cykKKyAgICAgICAgICAgIG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5ID0gdHJhbnNmZXJBcnJh
eUJ1ZmZlcnMoKmFycmF5QnVmZmVycywgZGlkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBTZXJpYWxpemVyOjpKU0V4Y2VwdGlvbjoKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVy
IGdldCBoZXJlIGJlY2F1c2UgdGhpcyBjYXNlIHdhcyBoYW5kbGVkIGFib3ZlLgpAQCAtMjExNCw3
ICsyMjE1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZGVzZXJpYWxpemUoTWVzc2FnZVBvcnRBcnJheSogbWVzc2EKICAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKCk7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEJ1ZmZlclZhbHVlVHlwZSkgPT0gMiwg
QnVmZmVyVmFsdWVUeXBlSXNUd29CeXRlcyk7CiAgICAgUmVhZGVyIHJlYWRlcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEuaW1wbCgpLT5jaGFyYWN0ZXJzKCkpLCAyICog
bV9kYXRhLmxlbmd0aCgpKTsKLSAgICBEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwg
bWVzc2FnZVBvcnRzKTsKKyAgICBEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwgbWVz
c2FnZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSk7CiAgICAgcmV0dXJu
IGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDFiNTZlZDIuLjI1ZGE4
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oCkBAIC0zMSwxNCArMzEsMTEgQEAKICNpZm5kZWYgU2VyaWFsaXplZFNjcmlwdFZh
bHVlX2gKICNkZWZpbmUgU2VyaWFsaXplZFNjcmlwdFZhbHVlX2gKIAorI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBBcnJheUJ1
ZmZlcjsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZXNzYWdlUG9ydDsKQEAg
LTgzLDEyICs4MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdWYWx1ZSwKICAgICAgICAg
V2lyZURhdGEKICAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPFdURjo6QXJyYXlCdWZmZXJDb250
ZW50cywgMT4gQXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogCiAgICAgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKCk7Ci0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiwgTWVzc2FnZVBvcnRBcnJheSosIGJvb2wmIGRpZFRocm93KTsKKyAgICBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBNZXNzYWdlUG9ydEFycmF5KiwgQXJyYXlC
dWZmZXJBcnJheSosIGJvb2wmIGRpZFRocm93KTsKICAgICBleHBsaWNpdCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoY29uc3QgU3RyaW5nJiB3aXJlRGF0YSk7CiAKKyAgICBzdGF0aWMgUGFzc093blB0
cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHRyYW5zZmVyQXJyYXlCdWZmZXJzKEFycmF5QnVm
ZmVyQXJyYXkmLCBib29sJiBkaWRUaHJvdyk7CisKICAgICBTdHJpbmcgbV9kYXRhOworICAgIE93
blB0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="116698"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="116699"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117307</attachid>
            <date>2011-11-30 18:45:50 -0800</date>
            <delta_ts>2011-11-30 22:19:50 -0800</delta_ts>
            <desc>CR feedback</desc>
            <filename>73503.patch</filename>
            <type>text/plain</type>
            <size>44639</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NTI3ODE4Li5lNTgyZjM2IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMTEt
MzAgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MDMKKyAgICAgICAgW0Nocm9taXVt
XVtWOF0gSW1wbGVtZW50IEFycmF5QnVmZmVyIHRyYW5zZmVyIGluIGNocm9taXVtLgorICAgICAg
ICBQb3J0aW9ucyBvZiB0aGlzIHBhdGNoIGNvbWUgZnJvbSBMdWtlIFphcmtvLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRy
b2wuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3Rz
L2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanM6IEFkZGVkLgorICAgICAgICAoaXNU
eXBlZEFycmF5KToKKyAgICAgICAgKGlzRGF0YVZpZXcpOgorICAgICAgICAoaXNBcnJheUJ1ZmZl
cik6CisgICAgICAgIChhc3NlcnRCdWZmZXJDbG9zZWQpOgorICAgICAgICAoY3JlYXRlQnVmZmVy
KToKKyAgICAgICAgKGNoZWNrQnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZVZpZXcpOgorICAgICAg
ICAoY3JlYXRlRXZlcnlWaWV3KToKKyAgICAgICAgKGNoZWNrVmlldyk6CisgICAgICAgIChjaGVj
a0VtcHR5QXJyYXkpOgorICAgICAgICAod3JhcFNlbmQpOgorICAgICAgICAod3JhcEZhaWxTZW5k
KToKKyAgICAgICAgKHRlc3RMaXN0Lm5hbWUuc2VuZCk6CisgICAgICAgICh0ZXN0TGlzdC50ZXN0
KToKKyAgICAgICAgKC5uYW1lLnNlbmQpOgorICAgICAgICAoLnRlc3QpOgorICAgICAgICAodGVz
dExpc3QudGVzdExpc3QuY29uY2F0Lik6CisgICAgICAgICh2aWV3QW5kQnVmZmVyLnJldHVybi5u
YW1lLmJ1ZmZlclR5cGUuMC5zZW5kKToKKyAgICAgICAgKHZpZXdBbmRCdWZmZXIucmV0dXJuLnRl
c3QpOgorICAgICAgICAoKToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzLnJldHVybi5u
YW1lLmJ1ZmZlclR5cGUuMC5zZW5kKToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzLnJl
dHVybi50ZXN0KToKKyAgICAgICAgKHNxdWFzaFVucmVsYXRlZFZpZXdzKToKKyAgICAgICAgKHRl
c3RMaXN0KToKKyAgICAgICAgKGRvbmVUZXN0KToKKyAgICAgICAgKHdpbmRvd0hhbmRsZU1lc3Nh
Z2UpOgorICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJncy5o
dG1sOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ct
cG9zdG1lc3NhZ2UtYXJncy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6IFNraXBwZWQgYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5qcyBvbiBKU0Mg
cGxhdGZyb21zLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBTa2lwcGVkIGFycmF5
YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMgb24gSlNDIHBsYXRmcm9tcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOiBTa2lwcGVkIGFycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNv
bnRyb2wuanMgb24gSlNDIHBsYXRmcm9tcy4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBl
ZDogU2tpcHBlZCBhcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzIG9uIEpTQyBwbGF0
ZnJvbXMuCisKIDIwMTEtMTEtMjggIEplZmYgVGltYW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFN1cHByZXNzaW5nIGEgZmFpbGluZyB3ZWJnbCBjb25mb3JtYW5jZSB0ZXN0IG9u
IE1hYy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVm
ZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmYjFjZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVy
LW9mLWNvbnRyb2wtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK1Rlc3QgdHJhbnNmZXIg
b2YgY29udHJvbCBzZW1hbnRpY3MgZm9yIEFycmF5QnVmZmVycy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitQQVNTIHNhbml0eSBjaGVjaworUEFTUyByYXcgQXJyYXlCdWZmZXIKK1BB
U1Mgc2VuZGluZyBidWZmZXJzIGlzIHNhbmUgZXZlbiBpZiBjbG9uaW5nIGRvZXNuJ3Qgc3BlY2lh
bC1jYXNlCitQQVNTIHNlbmQgZXZlcnkgdmlldworUEFTUyB0cmFuc2ZlciBsaXN0IG11bHRpcGxl
CitQQVNTIHRyYW5zZmVyIG5ldXRlcnMgdW5tZW50aW9uZWQKK1BBU1MgcmF3IEludDMyCitQQVNT
IHJhdyBVaW50MzIKK1BBU1MgcmF3IEludDgKK1BBU1MgcmF3IFVpbnQ4CitQQVNTIHJhdyBJbnQx
NgorUEFTUyByYXcgVWludDE2CitQQVNTIHJhdyBGbG9hdDMyCitQQVNTIHJhdyBGbG9hdDY0CitQ
QVNTIHJhdyBEYXRhVmlldworUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBmb3IgSW50MzIKK1BBU1Mg
c2VuZCB2aWV3LCBidWZmZXIgZm9yIFVpbnQzMgorUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBmb3Ig
SW50OAorUEFTUyBzZW5kIHZpZXcsIGJ1ZmZlciBmb3IgVWludDgKK1BBU1Mgc2VuZCB2aWV3LCBi
dWZmZXIgZm9yIEludDE2CitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBVaW50MTYKK1BBU1Mg
c2VuZCB2aWV3LCBidWZmZXIgZm9yIEZsb2F0MzIKK1BBU1Mgc2VuZCB2aWV3LCBidWZmZXIgZm9y
IEZsb2F0NjQKK1BBU1Mgc2VuZCB2aWV3LCBidWZmZXIgZm9yIERhdGFWaWV3CitQQVNTIHNlbmQg
YnVmZmVyLCB2aWV3IGZvciBJbnQzMgorUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgVWludDMy
CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZvciBJbnQ4CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3
IGZvciBVaW50OAorUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgSW50MTYKK1BBU1Mgc2VuZCBi
dWZmZXIsIHZpZXcgZm9yIFVpbnQxNgorUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgRmxvYXQz
MgorUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgRmxvYXQ2NAorUEFTUyBzZW5kIGJ1ZmZlciwg
dmlldyBmb3IgRGF0YVZpZXcKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgSW50MzIK
K1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgVWludDMyCitQQVNTIHNxdWFzaCB1bnJl
bGF0ZWQgdmlld3MgZm9yIEludDgKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgVWlu
dDgKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgSW50MTYKK1BBU1Mgc3F1YXNoIHVu
cmVsYXRlZCB2aWV3cyBmb3IgVWludDE2CitQQVNTIHNxdWFzaCB1bnJlbGF0ZWQgdmlld3MgZm9y
IEZsb2F0MzIKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgRmxvYXQ2NAorUEFTUyBz
cXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBEYXRhVmlldworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRy
b2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjVmNTYxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXlidWZmZXIt
dHJhbnNmZXItb2YtY29udHJvbC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0id2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1j
b250cm9sLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRy
YW5zZmVyLW9mLWNvbnRyb2wuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3Jp
cHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY3MTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVy
LW9mLWNvbnRyb2wuanMKQEAgLTAsMCArMSw0NTMgQEAKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKworZGVzY3JpcHRpb24oJ1Rlc3QgdHJhbnNmZXIgb2YgY29udHJvbCBzZW1hbnRpY3Mg
Zm9yIEFycmF5QnVmZmVycy4nKTsKK3dpbmRvdy50ZXN0c0NvbXBsZXRlID0gMDsKKwordmFyIGFy
cmF5U2l6ZSA9IDQwOwordmFyIGFycmF5T2Zmc2V0ID0gODsKK3ZhciBhcnJheUVmZmVjdGl2ZVNp
emUgPSBhcnJheVNpemUgLSBhcnJheU9mZnNldDsKKwordmFyIGJhc2ljQnVmZmVyVHlwZXMgPQor
WworICAgIFsiSW50MzIiLCBJbnQzMkFycmF5LCA0XSwKKyAgICBbIlVpbnQzMiIsIFVpbnQzMkFy
cmF5LCA0XSwKKyAgICBbIkludDgiLCBJbnQ4QXJyYXksIDFdLAorICAgIFsiVWludDgiLCBVaW50
OEFycmF5LCAxXSwKKyAgICBbIkludDE2IiwgSW50MTZBcnJheSwgMl0sCisgICAgWyJVaW50MTYi
LCBVaW50MTZBcnJheSwgMl0sCisgICAgWyJGbG9hdDMyIiwgRmxvYXQzMkFycmF5LCA0XSwKKyAg
ICBbIkZsb2F0NjQiLCBGbG9hdDY0QXJyYXksIDhdCitdOworCit2YXIgYWxsQnVmZmVyVHlwZXMg
PQorWworICAgIFsiSW50MzIiLCBJbnQzMkFycmF5LCA0XSwKKyAgICBbIlVpbnQzMiIsIFVpbnQz
MkFycmF5LCA0XSwKKyAgICBbIkludDgiLCBJbnQ4QXJyYXksIDFdLAorICAgIFsiVWludDgiLCBV
aW50OEFycmF5LCAxXSwKKyAgICBbIkludDE2IiwgSW50MTZBcnJheSwgMl0sCisgICAgWyJVaW50
MTYiLCBVaW50MTZBcnJheSwgMl0sCisgICAgWyJGbG9hdDMyIiwgRmxvYXQzMkFycmF5LCA0XSwK
KyAgICBbIkZsb2F0NjQiLCBGbG9hdDY0QXJyYXksIDhdLAorICAgIFsiRGF0YVZpZXciLCBEYXRh
VmlldywgMV0KK107CisKK2Z1bmN0aW9uIGlzVHlwZWRBcnJheSh2aWV3KQoreworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYmFzaWNCdWZmZXJUeXBlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2
YXIgYnVmZmVyVHlwZSA9IGJhc2ljQnVmZmVyVHlwZXNbaV07CisgICAgICAgIGlmICh2aWV3IGlu
c3RhbmNlb2YgYnVmZmVyVHlwZVsxXSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBpc0RhdGFWaWV3
KHZpZXcpCit7CisgICAgcmV0dXJuICh2aWV3IGluc3RhbmNlb2YgRGF0YVZpZXcpOworfQorCitm
dW5jdGlvbiBpc0FycmF5QnVmZmVyKGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gKGJ1ZmZlciBpbnN0
YW5jZW9mIEFycmF5QnVmZmVyKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0QnVmZmVyQ2xvc2VkKHRl
c3ROYW1lLCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZlciA9PT0gbnVsbCkgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFpc0FycmF5QnVmZmVyKGJ1ZmZlcikpIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IG5vdCBhbiBhcnJheSBidWZmZXIgKCIgKyBi
dWZmZXIgKyAiKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChidWZm
ZXIuYnl0ZUxlbmd0aCAhPT0gMCB8fCAhKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSAwKSkgeworICAg
ICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogQXJyYXlCdWZmZXIgYnl0ZUxlbmd0aCAhPT0g
MCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitmdW5jdGlvbiBhc3NlcnRWaWV3Q2xvc2VkKHRlc3ROYW1lLCB2aWV3KQoreworICAgIGlmIChp
c1R5cGVkQXJyYXkodmlldykgfHwgaXNEYXRhVmlldyh2aWV3KSkgeworICAgICAgICBpZiAodmll
dy5idWZmZXIgIT09IG51bGwgJiYgIWFzc2VydEJ1ZmZlckNsb3NlZCh0ZXN0TmFtZSwgdmlldy5i
dWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodmlldy5ieXRl
T2Zmc2V0ICE9PSAwIHx8ICEodmlldy5ieXRlT2Zmc2V0ID09PSAwKSkgeworICAgICAgICAgICAg
dGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgYnl0ZU9mZnNldCAhPT0gMCIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh2aWV3LmJ5dGVMZW5n
dGggIT09IDAgfHwgISh2aWV3LmJ5dGVMZW5ndGggPT09IDApKSB7CisgICAgICAgICAgICB0ZXN0
RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBieXRlTGVuZ3RoICE9PSAwIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0RhdGFWaWV3KHZpZXcp
KSB7CisgICAgICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IDAgfHwgISh2aWV3Lmxlbmd0aCA9
PT0gMCkpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogVHlwZWRB
cnJheSBsZW5ndGggIT09IDAiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciB2ID0gdmll
d1swXTsKKyAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBpbmRleCBnZXQgb24gYSBjbG9zZWQg
dmlldyBkaWQgbm90IHJldHVybiB1bmRlZmluZWQuIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKHhuKSB7
CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGluZGV4IGdldCBvbiBh
IGNsb3NlZCB2aWV3IHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIHhuKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIHZpZXdbMF0gPSA0MjsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHZpZXdbMF07
CisgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogaW5kZXggc2V0IHRoZW4gZ2V0IG9uIGEgY2xv
c2VkIHZpZXcgZGlkIG5vdCByZXR1cm4gdW5kZWZpbmVkLiIpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCh4
bikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBpbmRleCBzZXQg
dGhlbiBnZXQgb24gYSBjbG9zZWQgdmlldyB0aHJldyBhbiBleGNlcHRpb246ICIgKyB4bik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICB2aWV3LmdldCgwKTsKKyAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKHRlc3ROYW1lICsgIjogZ2V0IG9uIGEgY2xvc2VkIHZpZXcgc3VjY2VlZGVkIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBjYXRjaCAoeG4pIHsg
fQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2aWV3LnNldCgwLCAxKTsKKyAg
ICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogc2V0IG9uIGEgY2xvc2VkIHZp
ZXcgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfSBjYXRjaCAoeG4pIHsgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICB2aWV3LmdldEludDgoMCk7CisgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCh0ZXN0TmFtZSArICI6IGdldCBvbiBhIGNsb3NlZCB2aWV3IHN1Y2NlZWRlZCIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKHhuKSB7IH0K
KyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmlldy5zZXRJbnQ4KDAsIDEpOwor
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBzZXQgb24gYSBjbG9zZWQg
dmlldyBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9IGNhdGNoICh4bikgeyB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0RmFpbGVkKHRlc3ROYW1lICsgIiBub3QgYSB2aWV3ICgiICsgdmlldyArICIpIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpCit7CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZl
cihsZW5ndGgpOworICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIHZpZXdbaV0gPSBpICsg
MTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworZnVuY3Rpb24gY2hlY2tCdWZmZXIo
dGVzdE5hbWUsIGJ1ZmZlciwgbGVuZ3RoKQoreworICAgIGlmICghaXNBcnJheUJ1ZmZlcihidWZm
ZXIpKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBidWZmZXIgaXMgbm90IGFu
IEFycmF5QnVmZmVyIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJ1
ZmZlci5ieXRlTGVuZ3RoICE9PSBsZW5ndGgpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFt
ZSArICI6IGJ1ZmZlciBpcyB0aGUgd3JvbmcgbGVuZ3RoIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHZpZXdbaV0gIT09
IGkgKyAxKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogYnVmZmVyIGNv
bnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVZpZXco
dmlld1R5cGUsIGJ5dGVzUGVyRWxlbWVudCkKK3sKKyAgICBpZiAodmlld1R5cGUgPT09IERhdGFW
aWV3KSB7CisgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlTaXplKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IGFycmF5T2Zmc2V0OyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAg
ICAgICAgICAgIHZpZXdbaV0gPSBpIC0gYXJyYXlPZmZzZXQgKyAxOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuZXcgRGF0YVZpZXcodmlldy5idWZmZXIsIGFycmF5T2Zmc2V0LCBhcnJheUVm
ZmVjdGl2ZVNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB2aWV3ID0gbmV3IHZpZXdU
eXBlKG5ldyBBcnJheUJ1ZmZlcihhcnJheVNpemUpLCBhcnJheU9mZnNldCwgYXJyYXlFZmZlY3Rp
dmVTaXplIC8gYnl0ZXNQZXJFbGVtZW50KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cnJheUVmZmVjdGl2ZVNpemUgLyBieXRlc1BlckVsZW1lbnQ7ICsraSkgeworICAgICAgICAgICAg
dmlld1tpXSA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2aWV3OworICAgIH0K
K30KKworZnVuY3Rpb24gY3JlYXRlRXZlcnlWaWV3KGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYWxs
QnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uIChidWZmZXJUeXBlKSB7CisgICAgICAgIHJldHVybiBu
ZXcgYnVmZmVyVHlwZVsxXShidWZmZXIsIGFycmF5T2Zmc2V0LCBhcnJheUVmZmVjdGl2ZVNpemUg
LyBidWZmZXJUeXBlWzJdKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY2hlY2tWaWV3KHRlc3RO
YW1lLCB0eXBlZEFycmF5VHlwZSwgdmlldykKK3sKKyAgICBpZiAoISh2aWV3IGluc3RhbmNlb2Yg
dHlwZWRBcnJheVR5cGUpKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiAiICsg
dmlldyArICIgbm90IGFuIGluc3RhbmNlIG9mICIgKyB0eXBlZEFycmF5VHlwZSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZpZXcuYnVmZmVyLmJ5dGVMZW5ndGggIT09
IGFycmF5U2l6ZSB8fAorICAgICAgICAoISh2aWV3IGluc3RhbmNlb2YgRGF0YVZpZXcpICYmIHZp
ZXcubGVuZ3RoICE9PSBhcnJheUVmZmVjdGl2ZVNpemUgLyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5U
KSkgeworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBoYXMgdGhlIHdyb25n
IGxlbmd0aCAoIiArIHZpZXcubGVuZ3RoICsgIikiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAodmlldy5ieXRlT2Zmc2V0ICE9PSBhcnJheU9mZnNldCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBoYXMgd3JvbmcgYnl0ZSBvZmZzZXQiKTsK
KyAgICB9CisgICAgdmFyIG1heCA9IGFycmF5RWZmZWN0aXZlU2l6ZTsKKyAgICBpZiAoISh2aWV3
IGluc3RhbmNlb2YgRGF0YVZpZXcpKSB7CisgICAgICAgIG1heCA9IG1heCAvIHZpZXcuQllURVNf
UEVSX0VMRU1FTlQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4OyArK2kpIHsK
KyAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBEYXRhVmlldykgeworICAgICAgICAgICAgaWYg
KHZpZXcuZ2V0SW50OChpKSAhPT0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVk
KHRlc3ROYW1lICsgIjogdmlldyBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICh2aWV3W2ldICE9PSBpICsgMSkgeworICAgICAgICAgICAgICAgIHRlc3RG
YWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBjaGVja0VtcHR5QXJyYXkodGVzdE5h
bWUsIGFycmF5KQoreworICAgIGlmIChhcnJheSA9PT0gbnVsbCB8fCBhcnJheSA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBwb3J0IGxpc3QgaXMgbnVs
bCBvciB1bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
YXJyYXkubGVuZ3RoICE9PSAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBw
b3J0IGxpc3QgaXMgbm90IHplcm8tbGVuZ3RoIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHdyYXBTZW5kKHRlc3ROYW1lLCBt
ZXNzYWdlLCB4ZmVyKQoreworICAgIHRyeSB7CisgICAgICAgIHdpbmRvdy53ZWJraXRQb3N0TWVz
c2FnZShtZXNzYWdlLCB4ZmVyLCAnKicpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCh0ZXN0TmFtZSArICI6IGNvdWxkIG5vdCB3ZWJraXRQb3N0TWVzc2FnZTogIiArIGUp
OworICAgICAgICBkb25lVGVzdCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB3cmFwRmFpbFNlbmQodGVzdE5hbWUsIG1lc3Nh
Z2UsIHhmZXIpCit7CisgICAgdHJ5IHsKKyAgICAgICAgd2luZG93LndlYmtpdFBvc3RNZXNzYWdl
KG1lc3NhZ2UsIHhmZXIsICcqJyk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGV4cGVjdGVkIHdlYmtp
dFBvc3RNZXNzYWdlIHRvIGZhaWwgYnV0IGl0IGRpZG4ndC4iKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZhciB0ZXN0TGlzdCA9IFt7CisgICAgbmFtZTogInNhbml0eSBjaGVjayIsCisgICAg
c2VuZDogZnVuY3Rpb24gKG5hbWUpIHsgd3JhcFNlbmQobmFtZSwgW10sIFtdKTsgfSwKKyAgICB0
ZXN0OiBmdW5jdGlvbiAobmFtZSwgZSkgeyByZXR1cm4gdHJ1ZTsgfQorfSwgeworICAgIG5hbWU6
ICJyYXcgQXJyYXlCdWZmZXIiLAorICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
IHZhciBidWZmZXIgPSBjcmVhdGVCdWZmZXIoMyk7CisgICAgICAgIHdyYXBTZW5kKG5hbWUsIGJ1
ZmZlciwgW2J1ZmZlcl0pOworICAgICAgICBhc3NlcnRCdWZmZXJDbG9zZWQobmFtZSwgYnVmZmVy
KTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW2J1ZmZlcl0pOworICAgICAg
ICB3cmFwRmFpbFNlbmQobmFtZSwgYnVmZmVyLCBbXSk7CisgICAgfSwKKyAgICB0ZXN0OiBmdW5j
dGlvbiAobmFtZSwgZSkgeyByZXR1cm4gY2hlY2tCdWZmZXIobmFtZSwgZS5kYXRhLCAzKSAmJiBj
aGVja0VtcHR5QXJyYXkobmFtZSwgZS5wb3J0cyk7IH0KK30sIHsKKyAgICBuYW1lOiAic2VuZGlu
ZyBidWZmZXJzIGlzIHNhbmUgZXZlbiBpZiBjbG9uaW5nIGRvZXNuJ3Qgc3BlY2lhbC1jYXNlIiwK
KyAgICBzZW5kOiBmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHZhciB2aWV3ID0gY3JlYXRlVmll
dyhJbnQzMkFycmF5LCA0KTsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IHZpZXcuYnVmZmVyOworICAg
ICAgICB3cmFwU2VuZChuYW1lLCBbdmlldywgYnVmZmVyXSwgW2J1ZmZlcl0pOworICAgICAgICBh
c3NlcnRCdWZmZXJDbG9zZWQobmFtZSwgYnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0Vmlld0Nsb3Nl
ZChuYW1lLCB2aWV3KTsKKyAgICB9LAorICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7Cisg
ICAgICAgIGlmIChlLmRhdGFbMF0uYnVmZmVyICE9PSBlLmRhdGFbMV0pIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIlZpZXcgYW5kIGJ1ZmZlciB3ZXJlIG5vdCBsaW5rZWQuIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorfSwgeworICAgIG5hbWU6ICJzZW5kIGV2ZXJ5IHZpZXciLAorICAgIHNlbmQ6IGZ1bmN0aW9u
KG5hbWUpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihhcnJheVNpemUpOwor
ICAgICAgICB2YXIgdmlld3MgPSBjcmVhdGVFdmVyeVZpZXcoYnVmZmVyKTsKKyAgICAgICAgd3Jh
cFNlbmQobmFtZSwgdmlld3MsIFtidWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2Vk
KG5hbWUsIGJ1ZmZlcik7CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCB2aWV3cywgW2J1ZmZl
cl0pOworICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgdmlld3MsIFtdKTsKKyAgICB9LAorICAg
IHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7CisgICAgICAgIGlmIChlLmRhdGEubGVuZ3RoICE9
PSBhbGxCdWZmZXJUeXBlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQobmFtZSAr
ICI6IG5vdCBldmVyeSB2aWV3IHdhcyBzZW50LiIpOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIHYgPSAwOyB2IDwgZS5kYXRhLmxlbmd0aDsgKyt2KSB7CisgICAgICAgICAgICB2YXIgdmll
dyA9IGUuZGF0YVt2XTsKKyAgICAgICAgICAgIGlmICh2aWV3LmJ1ZmZlciAhPT0gZS5kYXRhWzBd
LmJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQobmFtZSArICI6IG5vdCBldmVy
eSB2aWV3IHBvaW50ZWQgdG8gdGhlIGNvcnJlY3QgYnVmZmVyLiIpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9LCB7CisgICAgbmFtZTogInRyYW5zZmVyIGxpc3QgbXVsdGlwbGUiLAor
ICAgIHNlbmQ6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGNyZWF0ZUJ1
ZmZlcihhcnJheVNpemUpOworICAgICAgICB3cmFwU2VuZChuYW1lLCB7IGJ1ZmZlciA6IGJ1ZmZl
ciB9LCBbYnVmZmVyLGJ1ZmZlcl0pOworICAgICAgICBhc3NlcnRCdWZmZXJDbG9zZWQobmFtZSwg
YnVmZmVyKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFtidWZmZXJdLCBbYnVmZmVyXSk7
CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbXSwgW2J1ZmZlcl0pOworICAgICAgICB2YXIg
YnVmZmVyMiA9IGNyZWF0ZUJ1ZmZlcihhcnJheVNpemUpOworICAgICAgICB3cmFwRmFpbFNlbmQo
bmFtZSwgW10sIFtidWZmZXIyLCBidWZmZXJdKTsKKyAgICAgICAgY2hlY2tCdWZmZXIobmFtZSwg
YnVmZmVyMiwgYXJyYXlTaXplKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFtdLCBbYnVm
ZmVyLCBidWZmZXIyXSk7CisgICAgICAgIGNoZWNrQnVmZmVyKG5hbWUsIGJ1ZmZlcjIsIGFycmF5
U2l6ZSk7CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbYnVmZmVyMl0sIFtidWZmZXIyLCBi
dWZmZXJdKTsKKyAgICAgICAgY2hlY2tCdWZmZXIobmFtZSwgYnVmZmVyMiwgYXJyYXlTaXplKTsK
KyAgICB9LAorICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7CisgICAgICAgIHJldHVybiBj
aGVja0J1ZmZlcihuYW1lLCBlLmRhdGEuYnVmZmVyLCBhcnJheVNpemUpOworICAgIH0KK30sIHsK
KyAgICBuYW1lOiAidHJhbnNmZXIgbmV1dGVycyB1bm1lbnRpb25lZCIsCisgICAgc2VuZDogZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihhcnJheVNp
emUpOworICAgICAgICB3cmFwU2VuZChuYW1lLCBbXSwgW2J1ZmZlcl0pOworICAgICAgICBhc3Nl
cnRCdWZmZXJDbG9zZWQobmFtZSwgYnVmZmVyKTsKKyAgICB9LAorICAgIHRlc3QgOiBmdW5jdGlv
biAobmFtZSwgZSkgeworICAgICAgICByZXR1cm4gZS5kYXRhLmxlbmd0aCA9PSAwOworICAgIH0K
K31dOworCit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNvbmNhdChhbGxCdWZmZXJUeXBlcy5tYXAoZnVu
Y3Rpb24oYnVmZmVyVHlwZSkgeyByZXR1cm4geworICAgIG5hbWU6ICJyYXcgIiArIGJ1ZmZlclR5
cGVbMF0sCisgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIHZpZXcgPSBj
cmVhdGVWaWV3KGJ1ZmZlclR5cGVbMV0sIGJ1ZmZlclR5cGVbMl0pOworICAgICAgICB3cmFwU2Vu
ZChuYW1lLCB2aWV3LCBbdmlldy5idWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0Vmlld0Nsb3NlZChu
YW1lLCB2aWV3KTsKKyAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIHZpZXcuYnVmZmVy
KTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZpZXcsIFt2aWV3LmJ1ZmZlcl0pOworICAg
ICAgICB3cmFwRmFpbFNlbmQobmFtZSwgdmlldywgW10pOworICAgIH0sCisgICAgdGVzdDogZnVu
Y3Rpb24gKG5hbWUsIGUpIHsKKyAgICAgICAgcmV0dXJuIGNoZWNrVmlldyhuYW1lLCBidWZmZXJU
eXBlWzFdLCBlLmRhdGEpICYmIGNoZWNrRW1wdHlBcnJheShuYW1lLCBlLnBvcnRzKTsKKyAgICB9
Cit9fSkpOworCitmdW5jdGlvbiB2aWV3QW5kQnVmZmVyKHZpZXdGaXJzdCwgYnVmZmVyVHlwZSkg
eworICAgIHJldHVybiB7CisgICAgICAgIG5hbWU6ICh2aWV3Rmlyc3QgPyAic2VuZCB2aWV3LCBi
dWZmZXIgZm9yICIgOiAic2VuZCBidWZmZXIsIHZpZXcgZm9yICIpICsgYnVmZmVyVHlwZVswXSwK
KyAgICAgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0g
Y3JlYXRlVmlldyhidWZmZXJUeXBlWzFdLCBidWZmZXJUeXBlWzJdKTsKKyAgICAgICAgICAgIHZh
ciBidWZmZXIgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgICAgIHdyYXBTZW5kKG5hbWUsIHZpZXdG
aXJzdCA/IFt2aWV3LCBidWZmZXJdIDogW2J1ZmZlciwgdmlld10sIFtidWZmZXJdKTsKKyAgICAg
ICAgICAgIGFzc2VydFZpZXdDbG9zZWQobmFtZSwgdmlldyk7CisgICAgICAgICAgICBhc3NlcnRC
dWZmZXJDbG9zZWQobmFtZSwgYnVmZmVyKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1l
LCB2aWV3LCBbYnVmZmVyXSk7CisgICAgICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgdmlldywg
W10pOworICAgICAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW2J1ZmZlcl0pOwor
ICAgICAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW10pOworICAgICAgICAgICAg
d3JhcEZhaWxTZW5kKG5hbWUsIFt2aWV3LCBidWZmZXJdLCBbYnVmZmVyXSk7CisgICAgICAgICAg
ICB3cmFwRmFpbFNlbmQobmFtZSwgW2J1ZmZlciwgdmlld10sIFtidWZmZXJdKTsKKyAgICAgICAg
ICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbdmlldywgYnVmZmVyXSwgW10pOworICAgICAgICAgICAg
d3JhcEZhaWxTZW5kKG5hbWUsIFtidWZmZXIsIHZpZXddLCBbXSk7CisgICAgICAgIH0sCisgICAg
ICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7CisgICAgICAgICAgICB2YXIgdmlldyA9IGUu
ZGF0YVt2aWV3Rmlyc3QgPyAwIDogMV07CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gZS5kYXRh
W3ZpZXdGaXJzdCA/IDEgOiAwXTsKKyAgICAgICAgICAgIGlmIChidWZmZXIgIT09IHZpZXcuYnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZChuYW1lICsgIiBidWZmZXIgbm90IHNo
YXJlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBjaGVja1ZpZXcobmFtZSwgYnVmZmVyVHlwZVsxXSwgdmlldykgJiYg
Y2hlY2tFbXB0eUFycmF5KG5hbWUsIGUucG9ydHMpOworICAgICAgICB9CisgICAgfQorfTsKKwor
ZnVuY3Rpb24gc3F1YXNoVW5yZWxhdGVkVmlld3MoYnVmZmVyVHlwZSkgeworICAgIHJldHVybiB7
CisgICAgICAgIG5hbWU6ICJzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciAiICsgYnVmZmVyVHlw
ZVswXSwKKyAgICAgICAgc2VuZDogZnVuY3Rpb24obmFtZSkgeworICAgICAgICAgICAgdmFyIHZp
ZXcgPSBjcmVhdGVWaWV3KGJ1ZmZlclR5cGVbMV0sIGJ1ZmZlclR5cGVbMl0pOworICAgICAgICAg
ICAgdmFyIHZpZXdzID0gY3JlYXRlRXZlcnlWaWV3KHZpZXcuYnVmZmVyKTsKKyAgICAgICAgICAg
IHZhciBidWZmZXIgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgICAgIHdyYXBTZW5kKG5hbWUsIHZp
ZXcsIFt2aWV3LmJ1ZmZlcl0pOworICAgICAgICAgICAgYXNzZXJ0Vmlld0Nsb3NlZChuYW1lLCB2
aWV3KTsKKyAgICAgICAgICAgIGFzc2VydEJ1ZmZlckNsb3NlZChuYW1lLCB2aWV3LmJ1ZmZlcik7
CisgICAgICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IHZpZXdzLmxlbmd0aDsgKyt2KSB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0Vmlld0Nsb3NlZChuYW1lICsgIih2aWV3ICIgKyB2ICsgIiki
LCB2aWV3c1t2XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cmFwRmFpbFNlbmQobmFt
ZSwgdmlld3MsIFtidWZmZXJdKTsKKyAgICAgICAgfSwKKyAgICAgICAgdGVzdDogZnVuY3Rpb24g
KG5hbWUsIGUpIHsgcmV0dXJuIGNoZWNrVmlldyhuYW1lLCBidWZmZXJUeXBlWzFdLCBlLmRhdGEp
ICYmIGNoZWNrRW1wdHlBcnJheShuYW1lLCBlLnBvcnRzKTsgfQorICAgIH0KK30KKwordGVzdExp
c3QgPSB0ZXN0TGlzdC5jb25jYXQoYWxsQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKGJ1ZmZlclR5
cGUpIHsgcmV0dXJuIHZpZXdBbmRCdWZmZXIodHJ1ZSwgYnVmZmVyVHlwZSk7IH0pKTsKK3Rlc3RM
aXN0ID0gdGVzdExpc3QuY29uY2F0KGFsbEJ1ZmZlclR5cGVzLm1hcChmdW5jdGlvbihidWZmZXJU
eXBlKSB7IHJldHVybiB2aWV3QW5kQnVmZmVyKGZhbHNlLCBidWZmZXJUeXBlKTsgfSkpOwordGVz
dExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYWxsQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKGJ1ZmZl
clR5cGUpIHsgcmV0dXJuIHNxdWFzaFVucmVsYXRlZFZpZXdzKGJ1ZmZlclR5cGUpOyB9KSk7CisK
K2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGlmICgrK3dpbmRvdy50ZXN0c0NvbXBsZXRlID09
IHRlc3RMaXN0Lmxlbmd0aCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIHZhciB0ID0gdGVzdExpc3Rbd2luZG93LnRlc3RzQ29tcGxldGVdOwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgdC5zZW5kKHQubmFtZSk7CisgICAgICAgIH0gY2F0
Y2goZSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCh0Lm5hbWUgKyAiOiBvbiBzZW5kOiAiICsg
ZSk7CisgICAgICAgICAgICBkb25lVGVzdCgpOworICAgICAgICB9CisgICAgfQorfQorCitmdW5j
dGlvbiB3aW5kb3dIYW5kbGVNZXNzYWdlKGV2ZW50KSB7CisgICAgdmFyIGN1cnJlbnRUZXN0ID0g
dGVzdExpc3Rbd2luZG93LnRlc3RzQ29tcGxldGVdOworICAgIGlmIChjdXJyZW50VGVzdC5hbHJl
YWR5SGl0KSB7CisgICAgICAgIHRlc3RGYWlsZWQoY3VycmVudFRlc3QubmFtZSArICI6IHdpbmRv
d0hhbmRsZU1lc3NhZ2UgaGl0IG1vcmUgdGhhbiBvbmNlLiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGN1cnJlbnRUZXN0LmFscmVhZHlIaXQgPSB0cnVlOworICAgIHRyeSB7
CisgICAgICAgIGlmIChjdXJyZW50VGVzdC50ZXN0KGN1cnJlbnRUZXN0Lm5hbWUsIGV2ZW50KSkg
eworICAgICAgICAgICAgdGVzdFBhc3NlZChjdXJyZW50VGVzdC5uYW1lKTsKKyAgICAgICAgfQor
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICB0ZXN0RmFpbGVkKGN1cnJlbnRUZXN0Lm5hbWUgKyAi
OiBvbiByZWNpZXZlOiAiICsgZSArICIuIGV2ZW50LmRhdGEgPSAiICsgZXZlbnQuZGF0YSk7Cisg
ICAgfQorICAgIGRvbmVUZXN0KCk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNz
YWdlJywgd2luZG93SGFuZGxlTWVzc2FnZSk7Cit3aW5kb3cudGVzdHNDb21wbGV0ZSA9IC0xOwor
ZG9uZVRlc3QoKTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcmdzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MuaHRt
bAppbmRleCA2NDZiMzY0Li5lOGUxN2Y0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MuaHRtbApAQCAtNjAsNiArNjAs
MjQgQEAgdHJ5UG9zdE1lc3NhZ2VGdW5jdGlvbih3aW5kb3cud2Via2l0UG9zdE1lc3NhZ2UsIGNo
YW5uZWw0LnBvcnQxLCBbY2hhbm5lbDQucG9ydDEKIHZhciBjaGFubmVsNSA9IG5ldyBNZXNzYWdl
Q2hhbm5lbDsKIHRyeVBvc3RNZXNzYWdlRnVuY3Rpb24od2luZG93LndlYmtpdFBvc3RNZXNzYWdl
LCBbY2hhbm5lbDUucG9ydDEsIGNoYW5uZWw1LnBvcnQyXSwgW2NoYW5uZWw1LnBvcnQxLCBjaGFu
bmVsNS5wb3J0Ml0sICcqJyk7CiAKK3ZhciBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigz
MCk7Cit2YXIgaW50OFZpZXcgPSBuZXcgSW50OEFycmF5KGFycmF5QnVmZmVyLCAyLCAxMCk7Cit0
cnlQb3N0TWVzc2FnZUZ1bmN0aW9uKHdpbmRvdy53ZWJraXRQb3N0TWVzc2FnZSwgYXJyYXlCdWZm
ZXIsIFthcnJheUJ1ZmZlcl0sICcqJyk7CitpZiAoIShhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoID09
PTApKSB7CisgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIkZBSUw6IGFycmF5QnVmZmVyIG5vdCBu
ZXV0ZXJlZDsgYnl0ZUxlbmd0aCA9ICIgKyBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoICsgIjxicj4i
OworfQorZWxzZSB7CisgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIlBBU1M6IGFycmF5QnVmZmVy
IG5ldXRlcmVkPGJyPiI7Cit9CisKK2lmICghKGludDhWaWV3Lmxlbmd0aCA9PSAwKSkgeworICAg
IGNvbnNvbGUuaW5uZXJIVE1MICs9ICJGQUlMOiB2aWV3IHdhcyBub3QgbmV1dGVyZWQ7IGxlbmd0
aCA9ICIgKyBpbnQ4Vmlldy5sZW5ndGggKyAiPGJyPiI7Cit9CitlbHNlIHsKKyAgICBjb25zb2xl
LmlubmVySFRNTCArPSAiUEFTUzogdmlldyBuZXV0ZXJlZDxicj4iCit9CisKKwogdHJ5UG9zdE1l
c3NhZ2VGdW5jdGlvbih3aW5kb3cucG9zdE1lc3NhZ2UsICdkb25lJywgJyonKTsKIDwvc2NyaXB0
PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcmdzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3Nh
Z2UtYXJncy1leHBlY3RlZC50eHQKaW5kZXggMGU4MWY4Zi4uMjNhYTg1MiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1hcmdzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MtZXhwZWN0ZWQudHh0
CkBAIC0xOSw2ICsxOSw5IEBAIFBBU1M6IFBvc3RpbmcgbWVzc2FnZSAoJzIxNDc0ODM2NDgnLCBu
dWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgogUEFTUzogUG9zdGluZyBtZXNzYWdlICgn
W29iamVjdCBNZXNzYWdlUG9ydF0nLCBbb2JqZWN0IE1lc3NhZ2VQb3J0XSxbb2JqZWN0IE1lc3Nh
Z2VQb3J0XSk6IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogREFUQV9DTE9ORV9FUlI6IERPTSBFeGNl
cHRpb24gMjUKIFBBU1M6IFBvc3RpbmcgbWVzc2FnZSAoJ1tvYmplY3QgTWVzc2FnZVBvcnRdJywg
W29iamVjdCBNZXNzYWdlUG9ydF0sW29iamVjdCBNZXNzYWdlUG9ydF0pIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCiBQQVNTOiBQb3N0aW5nIG1lc3NhZ2UgKCdbb2JqZWN0IE1lc3NhZ2VQb3J0
XSxbb2JqZWN0IE1lc3NhZ2VQb3J0XScsIFtvYmplY3QgTWVzc2FnZVBvcnRdLFtvYmplY3QgTWVz
c2FnZVBvcnRdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUzogUG9zdGluZyBtZXNz
YWdlICgnW29iamVjdCBBcnJheUJ1ZmZlcl0nLCBbb2JqZWN0IEFycmF5QnVmZmVyXSkgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1M6IGFycmF5QnVmZmVyIG5ldXRlcmVkCitQQVNTOiB2
aWV3IG5ldXRlcmVkCiBQQVNTOiBQb3N0aW5nIG1lc3NhZ2UgKCdkb25lJywgKikgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24KIFJlY2VpdmVkIG1lc3NhZ2UgJzQnIHdpdGggMCBwb3J0cy4KIFJl
Y2VpdmVkIG1lc3NhZ2UgJzQnIHdpdGggMCBwb3J0cy4KQEAgLTMyLDUgKzM1LDYgQEAgUmVjZWl2
ZWQgbWVzc2FnZSAnMjE0NzQ4MzY0OCcgd2l0aCAwIHBvcnRzLgogUmVjZWl2ZWQgbWVzc2FnZSAn
MjE0NzQ4MzY0OCcgd2l0aCAwIHBvcnRzLgogUmVjZWl2ZWQgbWVzc2FnZSAnW29iamVjdCBNZXNz
YWdlUG9ydF0nIHdpdGggMiBwb3J0cy4KIFJlY2VpdmVkIG1lc3NhZ2UgJ1tvYmplY3QgTWVzc2Fn
ZVBvcnRdLFtvYmplY3QgTWVzc2FnZVBvcnRdJyB3aXRoIDIgcG9ydHMuCitSZWNlaXZlZCBtZXNz
YWdlICdbb2JqZWN0IEFycmF5QnVmZmVyXScgd2l0aCAwIHBvcnRzLgogUmVjZWl2ZWQgbWVzc2Fn
ZSAnZG9uZScgd2l0aCAwIHBvcnRzLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDI3
OWYxYzUuLjMzMmJkNzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0xNjE4LDMgKzE2
MTgsNiBAQCBmYXN0L2Zvcm1zL2NoZWNrYm94LWFwcGVhcmFuY2UtY2hhbmdlLWJ5LWNoZWNrZWQu
aHRtbAogIyBbUXRdW0dUS10gZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFzeW5jLmh0bWwg
ZmFpbHMKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDAzCiBl
ZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMuaHRtbAorCisjIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5MworZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXli
dWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmlu
ZGV4IDU5Y2RhOGEuLmYwYzZkYWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC00OTgs
MyArNDk4LDYgQEAgZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRt
bAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE0OAogZmFz
dC9jYW52YXMvd2ViZ2wvd2ViZ2wtdGV4dHVyZS1iaW5kaW5nLXByZXNlcnZlZC5odG1sCisKKyMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNDkzCitmYXN0L2NhbnZh
cy93ZWJnbC9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmh0bWwKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCmluZGV4IDI2YWU0NzguLjFiZDBkMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBl
ZApAQCAtMjQ3NSwzICsyNDc1LDYgQEAgZmFzdC9jYW52YXMvY2FudmFzLWxpbmVXaWR0aC5odG1s
CiAjIFtRdF0gaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbCBjcmFz
aGluZyBhZnRlciByMTAwOTI2CiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MjkzMgogaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAor
CisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5MworZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkCmluZGV4IDUwNzYyMTEuLjQ4ZWUwZDggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9Ta2lwcGVkCkBAIC0xNDYzLDQgKzE0NjMsNSBAQCBwb2ludGVyLWxvY2svCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQzNQogZmFzdC9kb20vV2luZG93L3dp
bmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbAogCi0KKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczNDkzCitmYXN0L2NhbnZhcy93ZWJnbC9hcnJheWJ1ZmZlci10
cmFuc2Zlci1vZi1jb250cm9sLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU2MDBi
YTcuLjQ0NjVjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisy
MDExLTExLTMwICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5jb20+CisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNTAzCisgICAgICAgIFtD
aHJvbWl1bV1bVjhdIEltcGxlbWVudCBBcnJheUJ1ZmZlciB0cmFuc2ZlciBpbiBjaHJvbWl1bS4K
KyAgICAgICAgUG9ydGlvbnMgb2YgdGhpcyBwYXRjaCBjb21lIGZyb20gTHVrZSBaYXJrby4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9BcnJh
eUJ1ZmZlci5jcHA6CisgICAgICAgIChXVEY6OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6IENoYW5n
ZWQgcHJvdG90eXBlIGZyb20gcG9pbnRlcnMgdG8gUmVmUHRyLgorICAgICAgICAqIHd0Zi9BcnJh
eUJ1ZmZlci5oOgorICAgICAgICAoV1RGOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cmFuc2Zlcik6
IENoYW5nZWQgcHJvdG90eXBlIGZyb20gcG9pbnRlcnMgdG8gUmVmUHRyLgorICAgICAgICAoV1RG
OjpBcnJheUJ1ZmZlcjo6aXNOZXV0ZXJlZCk6CisgICAgICAgICogd3RmL1R5cGVkQXJyYXlCYXNl
Lmg6CisgICAgICAgIChXVEY6OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorCiAyMDExLTExLTI4
ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgc2tlbGV0b24g
ZnJhbWV3b3JrIGZvciBub3RpZmljYXRpb25zIHN1cHBvcnQgaW4gV0syCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuY3BwCmluZGV4IDFlYmU3NGYuLjQ1Y2ZhMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuY3BwCkBAIC0zMyw3ICszMyw3IEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCi1ib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxBcnJheUJ1ZmZlclZpZXcqPiYgbmV1dGVyZWRW
aWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJl
c3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCiB7
CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuaAppbmRleCA0MTk2YWE4Li5lZTk1ZjViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5oCkBAIC01OCwxMyArNTgsMTMgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAKICAgICBzdGF0aWMgaW5saW5l
IHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOwotICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlC
dWZmZXJDb250ZW50cyYgb3RoZXIpIAorICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250
ZW50cyYgb3RoZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CiAgICAg
ICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0YTsKICAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9
IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1fZGF0YSA9IDA7IAotICAgICAgICBtX3NpemVJbkJ5
dGVzID0gMDsgCisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAw
OwogICAgIH0KIAogICAgIHZvaWQqIG1fZGF0YTsKQEAgLTg4LDcgKzg4LDggQEAgcHVibGljOgog
ICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKICAgICB2b2lkIHJlbW92ZVZpZXco
QXJyYXlCdWZmZXJWaWV3Kik7CiAKLSAgICBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8QXJyYXlCdWZmZXJWaWV3Kj4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wg
dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAh
bV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVkQXJyYXlCYXNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1R5cGVkQXJyYXlCYXNlLmgKaW5kZXggYWUzMGMxNy4uZGJhOTVk
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlZEFycmF5QmFzZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZWRBcnJheUJhc2UuaApAQCAtMTEy
LDYgKzExMiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBjcmVhdGU8U3ViY2xhc3M+
KGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5l
dXRlcigpCisgICAgeworICAgICAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOworICAgICAg
ICBtX2xlbmd0aCA9IDA7CisgICAgfQorCiAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gaGF2ZSB0
byBhY2Nlc3MgdGhpcyB2aWEgYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHN1YmNsYXNzZXMsCiAgICAg
Ly8gd2hpY2ggaXMgd2h5IGl0IGlzIHByb3RlY3RlZCByYXRoZXIgdGhhbiBwcml2YXRlLgogICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4ZTdmOTAuLmZhODVlYmEgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0xMS0zMCAgRG1pdHJ5IExvbW92ICA8ZHNsb21v
dkBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MzUwMworICAgICAgICBbQ2hyb21pdW1dW1Y4XSBJbXBsZW1lbnQgQXJyYXlCdWZm
ZXIgdHJhbnNmZXIgaW4gY2hyb21pdW0uCisgICAgICAgIFBvcnRpb25zIG9mIHRoaXMgcGF0Y2gg
Y29tZSBmcm9tIEx1a2UgWmFya28uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNm
ZXItb2YtY29udHJvbC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3Jp
dGVUcmFuc2ZlcnJlZEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFw
OjpTZXJpYWxpemVyOjpTZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFw
OjpTZXJpYWxpemVyOjp3cml0ZUFuZEdyZXlBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OndyaXRlQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OndyaXRlVHJhbnNmZXJyZWRBcnJh
eUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6ZG9T
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6UmVhZGVyOjpyZWFkQXJyYXlCdWZmZXJW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpEZXNlcmlhbGl6ZXI6OkRlc2Vy
aWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVzZXJpYWxpemVyOjp0
cnlHZXRUcmFuc2ZlcnJlZEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om5ldXRlckJpbmRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0cmFuc2ZlckFycmF5
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaDoKKwogMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGtub3dpbmcgd2hlbiBhIFRyZWVFbGVtZW50
IGlzIGFkZGVkIG9yIGNoYW5nZWQgYW55d2hlcmUgaW4gYSBUcmVlT3V0bGluZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmlu
ZGV4IGQzYTRiMWQuLjcwMzFhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTk3LDYgKzE5Nyw3IEBAIGVudW0g
U2VyaWFsaXphdGlvblRhZyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxzIGl0IHdpdGggdGhlIGxhc3Qg
bGVuZ3RoIGVsZW1lbnRzIGFuZCBudW1Qcm9wZXJ0aWVzIG5hbWUsdmFsdWUgcGFpcnMgcHVzaGVk
IG9udG8gZGVzZXJpYWxpemF0aW9uIHN0YWNrCiAgICAgUmVnRXhwVGFnID0gJ1InLCAvLyBwYXR0
ZXJuOlJhd1N0cmluZywgZmxhZ3M6dWludDMyX3QgLT4gUmVnRXhwIChyZWYpCiAgICAgQXJyYXlC
dWZmZXJUYWcgPSAnQicsIC8vIGJ5dGVMZW5ndGg6dWludDMyX3QsIGRhdGE6Ynl0ZVtieXRlTGVu
Z3RoXSAtPiBBcnJheUJ1ZmZlciAocmVmKQorICAgIEFycmF5QnVmZmVyVHJhbnNmZXJUYWcgPSAn
dCcsIC8vIGluZGV4OnVpbnQzMl90IC0+IEFycmF5QnVmZmVyLiBGb3IgQXJyYXlCdWZmZXIgdHJh
bnNmZXIKICAgICBBcnJheUJ1ZmZlclZpZXdUYWcgPSAnVicsIC8vIHN1YnRhZzpieXRlLCBieXRl
T2Zmc2V0OnVpbnQzMl90LCBieXRlTGVuZ3RoOnVpbnQzMl90IC0+IEFycmF5QnVmZmVyVmlldyAo
cmVmKS4gQ29uc3VtZXMgYW4gQXJyYXlCdWZmZXIgZnJvbSB0aGUgdG9wIG9mIHRoZSBkZXNlcmlh
bGl6YXRpb24gc3RhY2suCiAgICAgT2JqZWN0UmVmZXJlbmNlVGFnID0gJ14nLCAvLyByZWY6dWlu
dDMyX3QgLT4gcmVmZXJlbmNlIHRhYmxlW3JlZl0KICAgICBHZW5lcmF0ZUZyZXNoT2JqZWN0VGFn
ID0gJ28nLCAvLyAtPiBlbXB0eSBvYmplY3QgYWxsb2NhdGVkIGFuIG9iamVjdCBJRCBhbmQgcHVz
aGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikKQEAgLTQzOCw2ICs0MzksMTIgQEAgcHVibGlj
OgogICAgICAgICBkb1dyaXRlVWludDMyKGluZGV4KTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRl
VHJhbnNmZXJyZWRBcnJheUJ1ZmZlcih1aW50MzJfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChBcnJheUJ1ZmZlclRyYW5zZmVyVGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihpbmRl
eCk7CisgICAgfQorCiAgICAgdm9pZCB3cml0ZU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZl
cmVuY2UpCiAgICAgewogICAgICAgICBhcHBlbmQoT2JqZWN0UmVmZXJlbmNlVGFnKTsKQEAgLTU4
OSwxMSArNTk2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgU3VjY2VzcywKICAgICAgICAgSW5wdXRF
cnJvciwKICAgICAgICAgRGF0YUNsb25lRXJyb3IsCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9y
LAogICAgICAgICBKU0V4Y2VwdGlvbiwKICAgICAgICAgSlNGYWlsdXJlCiAgICAgfTsKIAotICAg
IFNlcmlhbGl6ZXIoV3JpdGVyJiB3cml0ZXIsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0
cywgdjg6OlRyeUNhdGNoJiB0cnlDYXRjaCkKKyAgICBTZXJpYWxpemVyKFdyaXRlciYgd3JpdGVy
LCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJyYXkqIGFycmF5
QnVmZmVycywgdjg6OlRyeUNhdGNoJiB0cnlDYXRjaCkKICAgICAgICAgOiBtX3dyaXRlcih3cml0
ZXIpCiAgICAgICAgICwgbV90cnlDYXRjaCh0cnlDYXRjaCkKICAgICAgICAgLCBtX2RlcHRoKDAp
CkBAIC02MDYsNiArNjE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWVzc2FnZVBvcnRzLT5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBtX3Ry
YW5zZmVycmVkTWVzc2FnZVBvcnRzLnNldChWOE1lc3NhZ2VQb3J0Ojp3cmFwKG1lc3NhZ2VQb3J0
cy0+YXQoaSkuZ2V0KCkpLCBpKTsKICAgICAgICAgfQorICAgICAgICBpZiAoYXJyYXlCdWZmZXJz
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5QnVmZmVycy0+c2l6
ZSgpOyBpKyspICB7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OEFy
cmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJheUJ1ZmZlcnMtPmF0KGkpLmdldCgp
KTsKKyAgICAgICAgICAgICAgICAvLyBDb2FsZXNjZSBtdWx0aXBsZSBvY2N1cmVuY2VzIG9mIHRo
ZSBzYW1lIGJ1ZmZlciB0byB0aGUgZmlyc3QgaW5kZXguCisgICAgICAgICAgICAgICAgaWYgKCFt
X3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmNvbnRhaW5zKHY4QXJyYXlCdWZmZXIpKQorICAgICAg
ICAgICAgICAgICAgICBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLnNldCh2OEFycmF5QnVmZmVy
LCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIFN0YXR1cyBzZXJp
YWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtOTk1LDYgKzEwMTEsOCBAQCBw
cml2YXRlOgogICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldyA9IFY4QXJy
YXlCdWZmZXJWaWV3Ojp0b05hdGl2ZShvYmplY3QpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVy
VmlldykKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWFycmF5QnVmZmVyVmll
dy0+YnVmZmVyKCkpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJy
b3IsIG5leHQpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5kZXJseWluZ0J1ZmZl
ciA9IHRvVjgoYXJyYXlCdWZmZXJWaWV3LT5idWZmZXIoKSk7CiAgICAgICAgIGlmICh1bmRlcmx5
aW5nQnVmZmVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihEYXRh
Q2xvbmVFcnJvciwgbmV4dCk7CkBAIC0xMDE0LDEyICsxMDMyLDI3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVBcnJheUJ1ZmZlcih2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgU3RhdGVCYXNlKiB3cml0ZUFycmF5QnVmZmVyKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgU3RhdGVCYXNlKiBuZXh0KQogICAgIHsKICAgICAg
ICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6dG9OYXRpdmUodmFs
dWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlmICghYXJyYXlCdWZmZXIpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGFycmF5QnVm
ZmVyLT5pc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoSW52YWxp
ZFN0YXRlRXJyb3IsIG5leHQpOworICAgICAgICBBU1NFUlQoIW1fdHJhbnNmZXJyZWRBcnJheUJ1
ZmZlcnMuY29udGFpbnModmFsdWUuQXM8djg6Ok9iamVjdD4oKSkpOwogICAgICAgICBtX3dyaXRl
ci53cml0ZUFycmF5QnVmZmVyKCphcnJheUJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFN0YXRlQmFzZSogd3JpdGVUcmFuc2ZlcnJlZEFycmF5QnVmZmVyKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSwgdWludDMyX3QgaW5kZXgsIFN0YXRlQmFzZSogbmV4dCkKKyAg
ICB7CisgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IFY4QXJyYXlCdWZmZXI6OnRv
TmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOworICAgICAgICBpZiAoIWFycmF5QnVmZmVy
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChhcnJheUJ1ZmZlci0+aXNOZXV0
ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9uZUVycm9yLCBu
ZXh0KTsKKyAgICAgICAgbV93cml0ZXIud3JpdGVUcmFuc2ZlcnJlZEFycmF5QnVmZmVyKGluZGV4
KTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU2Vy
aWFsaXplRGVuc2VseSh1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IHByb3BlcnR5Q291bnQpIApA
QCAtMTA3MSw2ICsxMTA0LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFY4T2JqZWN0TWFwPHY4
OjpPYmplY3QsIHVpbnQzMl90PiBPYmplY3RQb29sOwogICAgIE9iamVjdFBvb2wgbV9vYmplY3RQ
b29sOwogICAgIE9iamVjdFBvb2wgbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0czsKKyAgICBPYmpl
Y3RQb29sIG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnM7CiAgICAgdWludDMyX3QgbV9uZXh0T2Jq
ZWN0UmVmZXJlbmNlOwogfTsKIApAQCAtMTA4Miw2ICsxMTE2LDcgQEAgU2VyaWFsaXplcjo6U3Rh
dGVCYXNlKiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUsIFN0YXQKICAgICB9CiAgICAgbV93cml0ZXIud3JpdGVSZWZlcmVuY2VDb3VudChtX25leHRP
YmplY3RSZWZlcmVuY2UpOwogICAgIHVpbnQzMl90IG9iamVjdFJlZmVyZW5jZTsKKyAgICB1aW50
MzJfdCBhcnJheUJ1ZmZlckluZGV4OwogICAgIGlmICgodmFsdWUtPklzT2JqZWN0KCkgfHwgdmFs
dWUtPklzRGF0ZSgpIHx8IHZhbHVlLT5Jc1JlZ0V4cCgpKQogICAgICAgICAmJiBtX29iamVjdFBv
b2wudHJ5R2V0KHZhbHVlLkFzPHY4OjpPYmplY3Q+KCksICZvYmplY3RSZWZlcmVuY2UpKSB7CiAg
ICAgICAgIC8vIE5vdGUgdGhhdCBJc09iamVjdCgpIGFsc28gZGV0ZWN0cyB3cmFwcGVycyAoZWcs
IGl0IHdpbGwgY2F0Y2ggdGhlIHRoaW5ncwpAQCAtMTExNCw3ICsxMTQ5LDggQEAgU2VyaWFsaXpl
cjo6U3RhdGVCYXNlKiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUsIFN0YXQKICAgICAgICAgICAgICAgICBtX3dyaXRlci53cml0ZVRyYW5zZmVycmVk
TWVzc2FnZVBvcnQobWVzc2FnZVBvcnRJbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9uZUVycm9yLCBuZXh0KTsKLSAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoVjhBcnJheUJ1ZmZlcjo6SGFzSW5zdGFuY2UodmFsdWUpICYm
IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMudHJ5R2V0KHZhbHVlLkFzPHY4OjpPYmplY3Q+KCks
ICZhcnJheUJ1ZmZlckluZGV4KSkKKyAgICAgICAgcmV0dXJuIHdyaXRlVHJhbnNmZXJyZWRBcnJh
eUJ1ZmZlcih2YWx1ZSwgYXJyYXlCdWZmZXJJbmRleCwgbmV4dCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4ganNPYmplY3QgPSB2YWx1ZS5Bczx2ODo6T2JqZWN0
PigpOwogICAgICAgICBpZiAoanNPYmplY3QuSXNFbXB0eSgpKQpAQCAtMTE0MSw3ICsxMTc3LDcg
QEAgU2VyaWFsaXplcjo6U3RhdGVCYXNlKiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6ZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0YXQKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPklzUmVn
RXhwKCkpCiAgICAgICAgICAgICB3cml0ZVJlZ0V4cCh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYg
KFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKHZhbHVlKSkKLSAgICAgICAgICAgIHdyaXRlQXJy
YXlCdWZmZXIodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHdyaXRlQXJyYXlCdWZmZXIodmFs
dWUsIG5leHQpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNPYmplY3QoKSkgewogICAgICAg
ICAgICAgaWYgKGlzSG9zdE9iamVjdChqc09iamVjdCkgfHwganNPYmplY3QtPklzQ2FsbGFibGUo
KSB8fCB2YWx1ZS0+SXNOYXRpdmVFcnJvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBoYW5k
bGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7CkBAIC0xMTYyLDYgKzExOTgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hPYmplY3RSZWZlcmVuY2UoY29uc3Qgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRPYmplY3RGcm9tT2Jq
ZWN0UmVmZXJlbmNlKHVpbnQzMl90IHJlZmVyZW5jZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+Kikg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRUcmFuc2ZlcnJlZE1lc3NhZ2VQb3J0KHVpbnQz
Ml90IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHRyeUdldFRyYW5zZmVycmVkQXJyYXlCdWZmZXIodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiopID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbmV3U3BhcnNlQXJyYXkodWludDMy
X3QgbGVuZ3RoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5ld0RlbnNlQXJyYXkodWludDMyX3Qg
bGVuZ3RoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5ld09iamVjdCgpID0gMDsKQEAgLTEzNjgs
NiArMTQwNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheUJ1ZmZlclRyYW5z
ZmVyVGFnOiB7CisgICAgICAgICAgICBpZiAobV92ZXJzaW9uIDw9IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgICAg
ICBpZiAoIWRvUmVhZFVpbnQzMigmaW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghY3JlYXRvci50cnlHZXRUcmFuc2ZlcnJlZEFycmF5QnVmZmVy
KGluZGV4LCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmplY3RSZWZlcmVuY2VUYWc6IHsK
ICAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNTY5LDYgKzE2MTYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIWNyZWF0b3IuY29uc3VtZVRvcE9mU3RhY2soJmFycmF5QnVm
ZmVyVjhWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhcnJh
eUJ1ZmZlclY4VmFsdWUuSXNFbXB0eSgpKSAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgYXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp0b05hdGl2ZShhcnJheUJ1ZmZlclY4
VmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlmICghYXJyYXlCdWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzQxLDExICsxNzkwLDE3IEBAIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV92ZXJzaW9uOwogfTsKIAorCit0eXBlZGVmIFZlY3RvcjxXVEY6OkFycmF5
QnVmZmVyQ29udGVudHMsIDE+IEFycmF5QnVmZmVyQ29udGVudHNBcnJheTsKKwogY2xhc3MgRGVz
ZXJpYWxpemVyIDogcHVibGljIENvbXBvc2l0ZUNyZWF0b3IgewogcHVibGljOgotICAgIGV4cGxp
Y2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlciwgTWVzc2FnZVBvcnRBcnJheSogbWVzc2Fn
ZVBvcnRzKQorICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlciwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzKQogICAgICAgICA6IG1f
cmVhZGVyKHJlYWRlcikKICAgICAgICAgLCBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzKG1lc3Nh
Z2VQb3J0cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVudHMoYXJyYXlCdWZmZXJDb250
ZW50cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJheUJ1ZmZlckNvbnRlbnRzID8gYXJy
YXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKICAgICAgICAgLCBtX3ZlcnNpb24oMCkKICAg
ICB7CiAgICAgfQpAQCAtMTg5MCw2ICsxOTQ1LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIHRyeUdldFRyYW5zZmVycmVkQXJyYXlC
dWZmZXIodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogb2JqZWN0KQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2FycmF5QnVmZmVyQ29udGVudHMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChpbmRleCA+PSBtX2FycmF5QnVmZmVycy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
cmVzdWx0ID0gbV9hcnJheUJ1ZmZlcnMuYXQoaW5kZXgpOworICAgICAgICBpZiAocmVzdWx0Lklz
RW1wdHkoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gVjhBcnJheUJ1ZmZlcjo6d3JhcChBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKG1fYXJyYXlCdWZmZXJDb250ZW50cy0+YXQoaW5kZXgpKS5nZXQoKSk7
CisgICAgICAgICAgICBtX2FycmF5QnVmZmVyc1tpbmRleF0gPSByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgKm9iamVjdCA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiAgICAgdmlydHVhbCBib29sIHRyeUdldE9iamVjdEZyb21PYmplY3RSZWZlcmVuY2UodWludDMy
X3QgcmVmZXJlbmNlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIG9iamVjdCkKICAgICB7CiAgICAg
ICAgIGlmIChyZWZlcmVuY2UgPj0gbV9vYmplY3RQb29sLnNpemUoKSkKQEAgLTE5NjksNiArMjAz
OSw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IG1fb2Jq
ZWN0UG9vbDsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3BlbkNvbXBvc2l0ZVJlZmVyZW5jZVN0
YWNrOwogICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHM7Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX2FycmF5QnVmZmVyQ29udGVudHM7CisgICAg
VmVjdG9yPHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gPiBtX2FycmF5QnVmZmVyczsKICAgICB1aW50
MzJfdCBtX3ZlcnNpb247CiB9OwogCkBAIC0xOTg5LDE2ICsyMDYxLDE2IEBAIHZvaWQgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZUFuZFNldFByb3BlcnR5KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqCiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJyYXkq
IGFycmF5QnVmZmVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sJiBkaWRUaHJvdykKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgbWVzc2FnZVBvcnRzLCBkaWRU
aHJvdykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZh
bHVlLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgZGlkVGhyb3cpKTsKIH0KIAogUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAgICBib29sIGRpZFRocm93OwotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlLCAwLCBkaWRU
aHJvdykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZh
bHVlLCAwLCAwLCBkaWRUaHJvdykpOwogfQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcm
IGRhdGEpCkBAIC0yMDYzLDE0ICsyMTM1LDYwIEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKCkKIHsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBNZXNzYWdlUG9y
dEFycmF5KiBtZXNzYWdlUG9ydHMsIGJvb2wmIGRpZFRocm93KQorc3RhdGljIHZvaWQgbmV1dGVy
QmluZGluZyh2b2lkKiBkb21PYmplY3QpIAoreworICAgIERPTURhdGFMaXN0JiBhbGxTdG9yZXMg
PSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YWxsU3RvcmVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqID0gYWxsU3RvcmVzW2ldLT5kb21PYmplY3RNYXAoKS5nZXQoZG9tT2JqZWN0KTsKKyAgICAg
ICAgaWYgKCFvYmouSXNFbXB0eSgpKQorICAgICAgICAgICAgb2JqLT5TZXRJbmRleGVkUHJvcGVy
dGllc1RvRXh0ZXJuYWxBcnJheURhdGEoMCwgdjg6OmtFeHRlcm5hbEJ5dGVBcnJheSwgMCk7Cisg
ICAgfQorfQorCitQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCdWZmZXJD
b250ZW50c0FycmF5PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVyQXJyYXlCdWZmZXJz
KEFycmF5QnVmZmVyQXJyYXkmIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpIAoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXJzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIGlmIChhcnJheUJ1ZmZlcnNbaV0tPmlzTmV1dGVyZWQoKSkgeworICAgICAgICAgICAgdGhy
b3dFcnJvcihJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICBkaWRUaHJvdyA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIE93
blB0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGNvbnRlbnRzID0gYWRvcHRQdHIobmV3IEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheShhcnJheUJ1ZmZlcnMuc2l6ZSgpKSk7CisKKyAgICBIYXNo
U2V0PEFycmF5QnVmZmVyKj4gdmlzaXRlZDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
cmF5QnVmZmVycy5zaXplKCk7IGkrKykgeworICAgICAgICBWZWN0b3I8UmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gPiBuZXV0ZXJlZFZpZXdzOworCisgICAgICAgIGlmICh2aXNpdGVkLmNvbnRhaW5z
KGFycmF5QnVmZmVyc1tpXS5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
dmlzaXRlZC5hZGQoYXJyYXlCdWZmZXJzW2ldLmdldCgpKTsKKworICAgICAgICBib29sIHJlc3Vs
dCA9IGFycmF5QnVmZmVyc1tpXS0+dHJhbnNmZXIoY29udGVudHMtPmF0KGkpLCBuZXV0ZXJlZFZp
ZXdzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoSU5W
QUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgZGlkVGhyb3cgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBuZXV0ZXJCaW5kaW5nKGFy
cmF5QnVmZmVyc1tpXS5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbmV1
dGVyZWRWaWV3cy5zaXplKCk7IGorKykKKyAgICAgICAgICAgIG5ldXRlckJpbmRpbmcobmV1dGVy
ZWRWaWV3c1tqXS5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiBjb250ZW50cy5yZWxlYXNlKCk7
Cit9CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVy
QXJyYXkqIGFycmF5QnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wmIGRpZFRocm93KQogewogICAgIGRpZFRocm93ID0gZmFsc2U7CiAgICAg
V3JpdGVyIHdyaXRlcjsKICAgICBTZXJpYWxpemVyOjpTdGF0dXMgc3RhdHVzOwogICAgIHsKICAg
ICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotICAgICAgICBTZXJpYWxpemVyIHNlcmlhbGl6
ZXIod3JpdGVyLCBtZXNzYWdlUG9ydHMsIHRyeUNhdGNoKTsKKyAgICAgICAgU2VyaWFsaXplciBz
ZXJpYWxpemVyKHdyaXRlciwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIHRyeUNhdGNoKTsK
ICAgICAgICAgc3RhdHVzID0gc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpOwogICAgICAgICBp
ZiAoc3RhdHVzID09IFNlcmlhbGl6ZXI6OkpTRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSB3YXMgYSBKUyBleGNlcHRpb24gdGhyb3duLCByZS10aHJvdyBpdC4KQEAgLTIwODcs
NiArMjIwNSwxMCBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIE1lc3NhZwogICAgICAgICBkaWRUaHJvdyA9
IHRydWU7CiAgICAgICAgIHRocm93RXJyb3IoREFUQV9DTE9ORV9FUlIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTZXJpYWxpemVyOjpJbnZhbGlkU3RhdGVFcnJvcjoKKyAgICAgICAgZGlk
VGhyb3cgPSB0cnVlOworICAgICAgICB0aHJvd0Vycm9yKElOVkFMSURfU1RBVEVfRVJSKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFsaXplcjo6SlNGYWlsdXJlOgogICAgICAgICAv
LyBJZiB0aGVyZSB3YXMgYSBKUyBmYWlsdXJlIChidXQgbm8gZXhjZXB0aW9uKSwgdGhlcmUncyBu
b3QKICAgICAgICAgLy8gbXVjaCB3ZSBjYW4gZG8gZXhjZXB0IGZvciB1bndpbmRpbmcgdGhlIEMr
KyBzdGFjayBieQpAQCAtMjA5NSw2ICsyMjE3LDggQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBNZXNzYWcK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFsaXplcjo6U3VjY2VzczoKICAgICAgICAg
bV9kYXRhID0gU3RyaW5nKFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRhKCkpKS5pc29sYXRl
ZENvcHkoKTsKKyAgICAgICAgaWYgKGFycmF5QnVmZmVycykKKyAgICAgICAgICAgIG1fYXJyYXlC
dWZmZXJDb250ZW50c0FycmF5ID0gdHJhbnNmZXJBcnJheUJ1ZmZlcnMoKmFycmF5QnVmZmVycywg
ZGlkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTZXJpYWxpemVyOjpKU0V4Y2Vw
dGlvbjoKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGJlY2F1c2UgdGhpcyBj
YXNlIHdhcyBoYW5kbGVkIGFib3ZlLgpAQCAtMjExNCw3ICsyMjM4LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoTWVzc2FnZVBvcnRB
cnJheSogbWVzc2EKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEJ1ZmZlclZhbHVlVHlwZSkgPT0gMiwgQnVmZmVyVmFsdWVUeXBlSXNUd29CeXRl
cyk7CiAgICAgUmVhZGVyIHJlYWRlcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPiht
X2RhdGEuaW1wbCgpLT5jaGFyYWN0ZXJzKCkpLCAyICogbV9kYXRhLmxlbmd0aCgpKTsKLSAgICBE
ZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwgbWVzc2FnZVBvcnRzKTsKKyAgICBEZXNl
cmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwgbWVzc2FnZVBvcnRzLCBtX2FycmF5QnVmZmVy
Q29udGVudHNBcnJheS5nZXQoKSk7CiAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5kZXNlcmlhbGl6
ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oCmluZGV4IDFiNTZlZDIuLjI1ZGE4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0zMSwxNCArMzEs
MTEgQEAKICNpZm5kZWYgU2VyaWFsaXplZFNjcmlwdFZhbHVlX2gKICNkZWZpbmUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlX2gKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
IAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBBcnJheUJ1ZmZlcjsKLX0KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBNZXNzYWdlUG9ydDsKQEAgLTgzLDEyICs4MCwxNiBAQCBwcml2YXRl
OgogICAgICAgICBTdHJpbmdWYWx1ZSwKICAgICAgICAgV2lyZURhdGEKICAgICB9OworICAgIHR5
cGVkZWYgVmVjdG9yPFdURjo6QXJyYXlCdWZmZXJDb250ZW50cywgMT4gQXJyYXlCdWZmZXJDb250
ZW50c0FycmF5OwogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7Ci0gICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgTWVzc2FnZVBvcnRBcnJheSosIGJv
b2wmIGRpZFRocm93KTsKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6
VmFsdWU+LCBNZXNzYWdlUG9ydEFycmF5KiwgQXJyYXlCdWZmZXJBcnJheSosIGJvb2wmIGRpZFRo
cm93KTsKICAgICBleHBsaWNpdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUoY29uc3QgU3RyaW5nJiB3
aXJlRGF0YSk7CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXk+IHRyYW5zZmVyQXJyYXlCdWZmZXJzKEFycmF5QnVmZmVyQXJyYXkmLCBib29sJiBkaWRUaHJv
dyk7CisKICAgICBTdHJpbmcgbV9kYXRhOworICAgIE93blB0cjxBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXk+IG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117312</attachid>
            <date>2011-11-30 19:19:41 -0800</date>
            <delta_ts>2011-11-30 22:21:20 -0800</delta_ts>
            <desc>Rebased</desc>
            <filename>73503.patch</filename>
            <type>text/plain</type>
            <size>44660</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDYzMzI1ZDMuLmNkMzc2NDUK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ3IEBACisyMDExLTExLTMwICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdvb2ds
ZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczNTAzCisgICAgICAgIFtDaHJvbWl1bV1bVjhdIEltcGxlbWVudCBBcnJheUJ1ZmZlciB0cmFu
c2ZlciBpbiBjaHJvbWl1bS4KKyAgICAgICAgUG9ydGlvbnMgb2YgdGhpcyBwYXRjaCBjb21lIGZy
b20gTHVrZSBaYXJrby4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRy
b2wtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJh
eWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9s
LmpzOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZWRBcnJheSk6CisgICAgICAgIChpc0RhdGFWaWV3
KToKKyAgICAgICAgKGlzQXJyYXlCdWZmZXIpOgorICAgICAgICAoYXNzZXJ0QnVmZmVyQ2xvc2Vk
KToKKyAgICAgICAgKGNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChjaGVja0J1ZmZlcik6CisgICAg
ICAgIChjcmVhdGVWaWV3KToKKyAgICAgICAgKGNyZWF0ZUV2ZXJ5Vmlldyk6CisgICAgICAgIChj
aGVja1ZpZXcpOgorICAgICAgICAoY2hlY2tFbXB0eUFycmF5KToKKyAgICAgICAgKHdyYXBTZW5k
KToKKyAgICAgICAgKHdyYXBGYWlsU2VuZCk6CisgICAgICAgICh0ZXN0TGlzdC5uYW1lLnNlbmQp
OgorICAgICAgICAodGVzdExpc3QudGVzdCk6CisgICAgICAgICgubmFtZS5zZW5kKToKKyAgICAg
ICAgKC50ZXN0KToKKyAgICAgICAgKHRlc3RMaXN0LnRlc3RMaXN0LmNvbmNhdC4pOgorICAgICAg
ICAodmlld0FuZEJ1ZmZlci5yZXR1cm4ubmFtZS5idWZmZXJUeXBlLjAuc2VuZCk6CisgICAgICAg
ICh2aWV3QW5kQnVmZmVyLnJldHVybi50ZXN0KToKKyAgICAgICAgKCk6CisgICAgICAgIChzcXVh
c2hVbnJlbGF0ZWRWaWV3cy5yZXR1cm4ubmFtZS5idWZmZXJUeXBlLjAuc2VuZCk6CisgICAgICAg
IChzcXVhc2hVbnJlbGF0ZWRWaWV3cy5yZXR1cm4udGVzdCk6CisgICAgICAgIChzcXVhc2hVbnJl
bGF0ZWRWaWV3cyk6CisgICAgICAgICh0ZXN0TGlzdCk6CisgICAgICAgIChkb25lVGVzdCk6Cisg
ICAgICAgICh3aW5kb3dIYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cv
d2luZG93LXBvc3RtZXNzYWdlLWFyZ3MuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBTa2lwcGVkIGFycmF5YnVmZmVyLXRyYW5z
ZmVyLW9mLWNvbnRyb2wuanMgb24gSlNDIHBsYXRmcm9tcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2tpcHBlZDogU2tpcHBlZCBhcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzIG9u
IEpTQyBwbGF0ZnJvbXMuCisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDogU2tpcHBlZCBh
cnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzIG9uIEpTQyBwbGF0ZnJvbXMuCisgICAg
ICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6IFNraXBwZWQgYXJyYXlidWZmZXItdHJhbnNmZXIt
b2YtY29udHJvbC5qcyBvbiBKU0MgcGxhdGZyb21zLgorCiAyMDExLTExLTMwICBIYXlhdG8gSXRv
ICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgdGVz
dCBleHBlY3RhdGlvbnMgZm9yIHIxMDE1NzUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9m
LWNvbnRyb2wtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE1ZmIxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUwIEBACitUZXN0IHRyYW5zZmVyIG9mIGNvbnRyb2wgc2VtYW50aWNzIGZvciBBcnJheUJ1ZmZl
cnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBzYW5pdHkgY2hlY2sKK1BB
U1MgcmF3IEFycmF5QnVmZmVyCitQQVNTIHNlbmRpbmcgYnVmZmVycyBpcyBzYW5lIGV2ZW4gaWYg
Y2xvbmluZyBkb2Vzbid0IHNwZWNpYWwtY2FzZQorUEFTUyBzZW5kIGV2ZXJ5IHZpZXcKK1BBU1Mg
dHJhbnNmZXIgbGlzdCBtdWx0aXBsZQorUEFTUyB0cmFuc2ZlciBuZXV0ZXJzIHVubWVudGlvbmVk
CitQQVNTIHJhdyBJbnQzMgorUEFTUyByYXcgVWludDMyCitQQVNTIHJhdyBJbnQ4CitQQVNTIHJh
dyBVaW50OAorUEFTUyByYXcgSW50MTYKK1BBU1MgcmF3IFVpbnQxNgorUEFTUyByYXcgRmxvYXQz
MgorUEFTUyByYXcgRmxvYXQ2NAorUEFTUyByYXcgRGF0YVZpZXcKK1BBU1Mgc2VuZCB2aWV3LCBi
dWZmZXIgZm9yIEludDMyCitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBVaW50MzIKK1BBU1Mg
c2VuZCB2aWV3LCBidWZmZXIgZm9yIEludDgKK1BBU1Mgc2VuZCB2aWV3LCBidWZmZXIgZm9yIFVp
bnQ4CitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBJbnQxNgorUEFTUyBzZW5kIHZpZXcsIGJ1
ZmZlciBmb3IgVWludDE2CitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZvciBGbG9hdDMyCitQQVNT
IHNlbmQgdmlldywgYnVmZmVyIGZvciBGbG9hdDY0CitQQVNTIHNlbmQgdmlldywgYnVmZmVyIGZv
ciBEYXRhVmlldworUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgSW50MzIKK1BBU1Mgc2VuZCBi
dWZmZXIsIHZpZXcgZm9yIFVpbnQzMgorUEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgSW50OAor
UEFTUyBzZW5kIGJ1ZmZlciwgdmlldyBmb3IgVWludDgKK1BBU1Mgc2VuZCBidWZmZXIsIHZpZXcg
Zm9yIEludDE2CitQQVNTIHNlbmQgYnVmZmVyLCB2aWV3IGZvciBVaW50MTYKK1BBU1Mgc2VuZCBi
dWZmZXIsIHZpZXcgZm9yIEZsb2F0MzIKK1BBU1Mgc2VuZCBidWZmZXIsIHZpZXcgZm9yIEZsb2F0
NjQKK1BBU1Mgc2VuZCBidWZmZXIsIHZpZXcgZm9yIERhdGFWaWV3CitQQVNTIHNxdWFzaCB1bnJl
bGF0ZWQgdmlld3MgZm9yIEludDMyCitQQVNTIHNxdWFzaCB1bnJlbGF0ZWQgdmlld3MgZm9yIFVp
bnQzMgorUEFTUyBzcXVhc2ggdW5yZWxhdGVkIHZpZXdzIGZvciBJbnQ4CitQQVNTIHNxdWFzaCB1
bnJlbGF0ZWQgdmlld3MgZm9yIFVpbnQ4CitQQVNTIHNxdWFzaCB1bnJlbGF0ZWQgdmlld3MgZm9y
IEludDE2CitQQVNTIHNxdWFzaCB1bnJlbGF0ZWQgdmlld3MgZm9yIFVpbnQxNgorUEFTUyBzcXVh
c2ggdW5yZWxhdGVkIHZpZXdzIGZvciBGbG9hdDMyCitQQVNTIHNxdWFzaCB1bnJlbGF0ZWQgdmll
d3MgZm9yIEZsb2F0NjQKK1BBU1Mgc3F1YXNoIHVucmVsYXRlZCB2aWV3cyBmb3IgRGF0YVZpZXcK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheWJ1ZmZlci10cmFuc2Zl
ci1vZi1jb250cm9sLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheWJ1
ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDY1ZjU2MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuaHRtbApAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IndlYmdsLXRlc3QuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXJy
YXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Njcmlw
dC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNv
bnRyb2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2NzEyZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0
cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzCkBAIC0wLDAgKzEsNDUzIEBACit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Rlc2NyaXB0aW9uKCdUZXN0IHRyYW5zZmVy
IG9mIGNvbnRyb2wgc2VtYW50aWNzIGZvciBBcnJheUJ1ZmZlcnMuJyk7Cit3aW5kb3cudGVzdHND
b21wbGV0ZSA9IDA7CisKK3ZhciBhcnJheVNpemUgPSA0MDsKK3ZhciBhcnJheU9mZnNldCA9IDg7
Cit2YXIgYXJyYXlFZmZlY3RpdmVTaXplID0gYXJyYXlTaXplIC0gYXJyYXlPZmZzZXQ7CisKK3Zh
ciBiYXNpY0J1ZmZlclR5cGVzID0KK1sKKyAgICBbIkludDMyIiwgSW50MzJBcnJheSwgNF0sCisg
ICAgWyJVaW50MzIiLCBVaW50MzJBcnJheSwgNF0sCisgICAgWyJJbnQ4IiwgSW50OEFycmF5LCAx
XSwKKyAgICBbIlVpbnQ4IiwgVWludDhBcnJheSwgMV0sCisgICAgWyJJbnQxNiIsIEludDE2QXJy
YXksIDJdLAorICAgIFsiVWludDE2IiwgVWludDE2QXJyYXksIDJdLAorICAgIFsiRmxvYXQzMiIs
IEZsb2F0MzJBcnJheSwgNF0sCisgICAgWyJGbG9hdDY0IiwgRmxvYXQ2NEFycmF5LCA4XQorXTsK
KwordmFyIGFsbEJ1ZmZlclR5cGVzID0KK1sKKyAgICBbIkludDMyIiwgSW50MzJBcnJheSwgNF0s
CisgICAgWyJVaW50MzIiLCBVaW50MzJBcnJheSwgNF0sCisgICAgWyJJbnQ4IiwgSW50OEFycmF5
LCAxXSwKKyAgICBbIlVpbnQ4IiwgVWludDhBcnJheSwgMV0sCisgICAgWyJJbnQxNiIsIEludDE2
QXJyYXksIDJdLAorICAgIFsiVWludDE2IiwgVWludDE2QXJyYXksIDJdLAorICAgIFsiRmxvYXQz
MiIsIEZsb2F0MzJBcnJheSwgNF0sCisgICAgWyJGbG9hdDY0IiwgRmxvYXQ2NEFycmF5LCA4XSwK
KyAgICBbIkRhdGFWaWV3IiwgRGF0YVZpZXcsIDFdCitdOworCitmdW5jdGlvbiBpc1R5cGVkQXJy
YXkodmlldykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2ljQnVmZmVyVHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGJ1ZmZlclR5cGUgPSBiYXNpY0J1ZmZlclR5cGVzW2ld
OworICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIGJ1ZmZlclR5cGVbMV0pIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworZnVuY3Rpb24gaXNEYXRhVmlldyh2aWV3KQoreworICAgIHJldHVybiAodmlldyBpbnN0YW5j
ZW9mIERhdGFWaWV3KTsKK30KKworZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcihidWZmZXIpCit7Cisg
ICAgcmV0dXJuIChidWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7Cit9CisKK2Z1bmN0aW9u
IGFzc2VydEJ1ZmZlckNsb3NlZCh0ZXN0TmFtZSwgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIg
PT09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghaXNBcnJh
eUJ1ZmZlcihidWZmZXIpKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBub3Qg
YW4gYXJyYXkgYnVmZmVyICgiICsgYnVmZmVyICsgIikiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGggIT09IDAgfHwgIShidWZmZXIuYnl0
ZUxlbmd0aCA9PT0gMCkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IEFycmF5
QnVmZmVyIGJ5dGVMZW5ndGggIT09IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gYXNzZXJ0Vmlld0Nsb3NlZCh0ZXN0TmFt
ZSwgdmlldykKK3sKKyAgICBpZiAoaXNUeXBlZEFycmF5KHZpZXcpIHx8IGlzRGF0YVZpZXcodmll
dykpIHsKKyAgICAgICAgaWYgKHZpZXcuYnVmZmVyICE9PSBudWxsICYmICFhc3NlcnRCdWZmZXJD
bG9zZWQodGVzdE5hbWUsIHZpZXcuYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKHZpZXcuYnl0ZU9mZnNldCAhPT0gMCB8fCAhKHZpZXcuYnl0ZU9mZnNldCA9
PT0gMCkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGJ5dGVP
ZmZzZXQgIT09IDAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodmlldy5ieXRlTGVuZ3RoICE9PSAwIHx8ICEodmlldy5ieXRlTGVuZ3RoID09PSAw
KSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgYnl0ZUxlbmd0
aCAhPT0gMCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICghaXNEYXRhVmlldyh2aWV3KSkgeworICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoICE9
PSAwIHx8ICEodmlldy5sZW5ndGggPT09IDApKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxl
ZCh0ZXN0TmFtZSArICI6IFR5cGVkQXJyYXkgbGVuZ3RoICE9PSAwIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICB2YXIgdiA9IHZpZXdbMF07CisgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjog
aW5kZXggZ2V0IG9uIGEgY2xvc2VkIHZpZXcgZGlkIG5vdCByZXR1cm4gdW5kZWZpbmVkLiIpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBjYXRjaCh4bikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5h
bWUgKyAiOiBpbmRleCBnZXQgb24gYSBjbG9zZWQgdmlldyB0aHJldyBhbiBleGNlcHRpb246ICIg
KyB4bik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2aWV3WzBdID0gNDI7CisgICAgICAgICAg
ICAgICAgdmFyIHYgPSB2aWV3WzBdOworICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGluZGV4
IHNldCB0aGVuIGdldCBvbiBhIGNsb3NlZCB2aWV3IGRpZCBub3QgcmV0dXJuIHVuZGVmaW5lZC4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gY2F0Y2goeG4pIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRl
c3ROYW1lICsgIjogaW5kZXggc2V0IHRoZW4gZ2V0IG9uIGEgY2xvc2VkIHZpZXcgdGhyZXcgYW4g
ZXhjZXB0aW9uOiAiICsgeG4pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmlldy5nZXQoMCk7
CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGdldCBvbiBhIGNsb3Nl
ZCB2aWV3IHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0gY2F0Y2ggKHhuKSB7IH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgdmlldy5zZXQoMCwgMSk7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSAr
ICI6IHNldCBvbiBhIGNsb3NlZCB2aWV3IHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKHhuKSB7IH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmlldy5nZXRJbnQ4KDApOwor
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBnZXQgb24gYSBjbG9zZWQg
dmlldyBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9IGNhdGNoICh4bikgeyB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IHZpZXcuc2V0SW50OCgwLCAxKTsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1l
ICsgIjogc2V0IG9uIGEgY2xvc2VkIHZpZXcgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBjYXRjaCAoeG4pIHsgfQorICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICIgbm90IGEgdmlldyAo
IiArIHZpZXcgKyAiKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitmdW5jdGlvbiBjcmVhdGVCdWZmZXIobGVuZ3RoKQoreworICAgIHZhciBi
dWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTsKKyAgICB2YXIgdmlldyA9IG5ldyBVaW50
OEFycmF5KGJ1ZmZlcik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICB2aWV3W2ldID0gaSArIDE7CisgICAgfQorICAgIHJldHVybiBidWZmZXI7Cit9CisK
K2Z1bmN0aW9uIGNoZWNrQnVmZmVyKHRlc3ROYW1lLCBidWZmZXIsIGxlbmd0aCkKK3sKKyAgICBp
ZiAoIWlzQXJyYXlCdWZmZXIoYnVmZmVyKSkgeworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1l
ICsgIjogYnVmZmVyIGlzIG5vdCBhbiBBcnJheUJ1ZmZlciIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmIChidWZmZXIuYnl0ZUxlbmd0aCAhPT0gbGVuZ3RoKSB7CisgICAg
ICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBidWZmZXIgaXMgdGhlIHdyb25nIGxlbmd0aCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4
QXJyYXkoYnVmZmVyKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGlmICh2aWV3W2ldICE9PSBpICsgMSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCh0
ZXN0TmFtZSArICI6IGJ1ZmZlciBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitmdW5jdGlvbiBjcmVhdGVWaWV3KHZpZXdUeXBlLCBieXRlc1BlckVsZW1lbnQpCit7CisgICAg
aWYgKHZpZXdUeXBlID09PSBEYXRhVmlldykgeworICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50
OEFycmF5KGFycmF5U2l6ZSk7CisgICAgICAgIGZvciAodmFyIGkgPSBhcnJheU9mZnNldDsgaSA8
IGFycmF5U2l6ZTsgKytpKSB7CisgICAgICAgICAgICB2aWV3W2ldID0gaSAtIGFycmF5T2Zmc2V0
ICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IERhdGFWaWV3KHZpZXcuYnVmZmVy
LCBhcnJheU9mZnNldCwgYXJyYXlFZmZlY3RpdmVTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB2YXIgdmlldyA9IG5ldyB2aWV3VHlwZShuZXcgQXJyYXlCdWZmZXIoYXJyYXlTaXplKSwgYXJy
YXlPZmZzZXQsIGFycmF5RWZmZWN0aXZlU2l6ZSAvIGJ5dGVzUGVyRWxlbWVudCk7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlFZmZlY3RpdmVTaXplIC8gYnl0ZXNQZXJFbGVtZW50
OyArK2kpIHsKKyAgICAgICAgICAgIHZpZXdbaV0gPSBpICsgMTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmlldzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUV2ZXJ5VmlldyhidWZm
ZXIpCit7CisgICAgcmV0dXJuIGFsbEJ1ZmZlclR5cGVzLm1hcChmdW5jdGlvbiAoYnVmZmVyVHlw
ZSkgeworICAgICAgICByZXR1cm4gbmV3IGJ1ZmZlclR5cGVbMV0oYnVmZmVyLCBhcnJheU9mZnNl
dCwgYXJyYXlFZmZlY3RpdmVTaXplIC8gYnVmZmVyVHlwZVsyXSk7CisgICAgfSk7Cit9CisKK2Z1
bmN0aW9uIGNoZWNrVmlldyh0ZXN0TmFtZSwgdHlwZWRBcnJheVR5cGUsIHZpZXcpCit7CisgICAg
aWYgKCEodmlldyBpbnN0YW5jZW9mIHR5cGVkQXJyYXlUeXBlKSkgeworICAgICAgICB0ZXN0RmFp
bGVkKHRlc3ROYW1lICsgIjogIiArIHZpZXcgKyAiIG5vdCBhbiBpbnN0YW5jZSBvZiAiICsgdHlw
ZWRBcnJheVR5cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2aWV3
LmJ1ZmZlci5ieXRlTGVuZ3RoICE9PSBhcnJheVNpemUgfHwKKyAgICAgICAgKCEodmlldyBpbnN0
YW5jZW9mIERhdGFWaWV3KSAmJiB2aWV3Lmxlbmd0aCAhPT0gYXJyYXlFZmZlY3RpdmVTaXplIC8g
dmlldy5CWVRFU19QRVJfRUxFTUVOVCkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSAr
ICI6IHZpZXcgaGFzIHRoZSB3cm9uZyBsZW5ndGggKCIgKyB2aWV3Lmxlbmd0aCArICIpIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZpZXcuYnl0ZU9mZnNldCAhPT0g
YXJyYXlPZmZzZXQpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgaGFz
IHdyb25nIGJ5dGUgb2Zmc2V0Iik7CisgICAgfQorICAgIHZhciBtYXggPSBhcnJheUVmZmVjdGl2
ZVNpemU7CisgICAgaWYgKCEodmlldyBpbnN0YW5jZW9mIERhdGFWaWV3KSkgeworICAgICAgICBt
YXggPSBtYXggLyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5UOworICAgIH0KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1heDsgKytpKSB7CisgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgRGF0YVZp
ZXcpIHsKKyAgICAgICAgICAgIGlmICh2aWV3LmdldEludDgoaSkgIT09IGkgKyAxKSB7CisgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgY29udGFpbnMgdGhlIHdy
b25nIGRhdGEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmlld1tpXSAhPT0gaSArIDEpIHsK
KyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBjb250YWlucyB0
aGUgd3JvbmcgZGF0YSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24g
Y2hlY2tFbXB0eUFycmF5KHRlc3ROYW1lLCBhcnJheSkKK3sKKyAgICBpZiAoYXJyYXkgPT09IG51
bGwgfHwgYXJyYXkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1l
ICsgIjogcG9ydCBsaXN0IGlzIG51bGwgb3IgdW5kZWZpbmVkIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPT0gMCkgeworICAgICAgICB0ZXN0
RmFpbGVkKHRlc3ROYW1lICsgIjogcG9ydCBsaXN0IGlzIG5vdCB6ZXJvLWxlbmd0aCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlv
biB3cmFwU2VuZCh0ZXN0TmFtZSwgbWVzc2FnZSwgeGZlcikKK3sKKyAgICB0cnkgeworICAgICAg
ICB3aW5kb3cud2Via2l0UG9zdE1lc3NhZ2UobWVzc2FnZSwgeGZlciwgJyonKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBjb3VsZCBub3Qgd2Vi
a2l0UG9zdE1lc3NhZ2U6ICIgKyBlKTsKKyAgICAgICAgZG9uZVRlc3QoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gd3JhcEZh
aWxTZW5kKHRlc3ROYW1lLCBtZXNzYWdlLCB4ZmVyKQoreworICAgIHRyeSB7CisgICAgICAgIHdp
bmRvdy53ZWJraXRQb3N0TWVzc2FnZShtZXNzYWdlLCB4ZmVyLCAnKicpOworICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHRlc3RGYWlsZWQodGVzdE5h
bWUgKyAiOiBleHBlY3RlZCB3ZWJraXRQb3N0TWVzc2FnZSB0byBmYWlsIGJ1dCBpdCBkaWRuJ3Qu
Iik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2YXIgdGVzdExpc3QgPSBbeworICAgIG5hbWU6
ICJzYW5pdHkgY2hlY2siLAorICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lKSB7IHdyYXBTZW5kKG5h
bWUsIFtdLCBbXSk7IH0sCisgICAgdGVzdDogZnVuY3Rpb24gKG5hbWUsIGUpIHsgcmV0dXJuIHRy
dWU7IH0KK30sIHsKKyAgICBuYW1lOiAicmF3IEFycmF5QnVmZmVyIiwKKyAgICBzZW5kOiBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICB2YXIgYnVmZmVyID0gY3JlYXRlQnVmZmVyKDMpOworICAg
ICAgICB3cmFwU2VuZChuYW1lLCBidWZmZXIsIFtidWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0QnVm
ZmVyQ2xvc2VkKG5hbWUsIGJ1ZmZlcik7CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBidWZm
ZXIsIFtidWZmZXJdKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIGJ1ZmZlciwgW10pOwor
ICAgIH0sCisgICAgdGVzdDogZnVuY3Rpb24gKG5hbWUsIGUpIHsgcmV0dXJuIGNoZWNrQnVmZmVy
KG5hbWUsIGUuZGF0YSwgMykgJiYgY2hlY2tFbXB0eUFycmF5KG5hbWUsIGUucG9ydHMpOyB9Cit9
LCB7CisgICAgbmFtZTogInNlbmRpbmcgYnVmZmVycyBpcyBzYW5lIGV2ZW4gaWYgY2xvbmluZyBk
b2Vzbid0IHNwZWNpYWwtY2FzZSIsCisgICAgc2VuZDogZnVuY3Rpb24obmFtZSkgeworICAgICAg
ICB2YXIgdmlldyA9IGNyZWF0ZVZpZXcoSW50MzJBcnJheSwgNCk7CisgICAgICAgIHZhciBidWZm
ZXIgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgd3JhcFNlbmQobmFtZSwgW3ZpZXcsIGJ1ZmZlcl0s
IFtidWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIGJ1ZmZlcik7Cisg
ICAgICAgIGFzc2VydFZpZXdDbG9zZWQobmFtZSwgdmlldyk7CisgICAgfSwKKyAgICB0ZXN0OiBm
dW5jdGlvbiAobmFtZSwgZSkgeworICAgICAgICBpZiAoZS5kYXRhWzBdLmJ1ZmZlciAhPT0gZS5k
YXRhWzFdKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJWaWV3IGFuZCBidWZmZXIgd2VyZSBu
b3QgbGlua2VkLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KK30sIHsKKyAgICBuYW1lOiAic2VuZCBldmVyeSB2aWV3
IiwKKyAgICBzZW5kOiBmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHZhciBidWZmZXIgPSBjcmVh
dGVCdWZmZXIoYXJyYXlTaXplKTsKKyAgICAgICAgdmFyIHZpZXdzID0gY3JlYXRlRXZlcnlWaWV3
KGJ1ZmZlcik7CisgICAgICAgIHdyYXBTZW5kKG5hbWUsIHZpZXdzLCBbYnVmZmVyXSk7CisgICAg
ICAgIGFzc2VydEJ1ZmZlckNsb3NlZChuYW1lLCBidWZmZXIpOworICAgICAgICB3cmFwRmFpbFNl
bmQobmFtZSwgdmlld3MsIFtidWZmZXJdKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZp
ZXdzLCBbXSk7CisgICAgfSwKKyAgICB0ZXN0OiBmdW5jdGlvbiAobmFtZSwgZSkgeworICAgICAg
ICBpZiAoZS5kYXRhLmxlbmd0aCAhPT0gYWxsQnVmZmVyVHlwZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKG5hbWUgKyAiOiBub3QgZXZlcnkgdmlldyB3YXMgc2VudC4iKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGUuZGF0YS5sZW5ndGg7ICsrdikg
eworICAgICAgICAgICAgdmFyIHZpZXcgPSBlLmRhdGFbdl07CisgICAgICAgICAgICBpZiAodmll
dy5idWZmZXIgIT09IGUuZGF0YVswXS5idWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFp
bGVkKG5hbWUgKyAiOiBub3QgZXZlcnkgdmlldyBwb2ludGVkIHRvIHRoZSBjb3JyZWN0IGJ1ZmZl
ci4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfSwgeworICAgIG5hbWU6ICJ0cmFu
c2ZlciBsaXN0IG11bHRpcGxlIiwKKyAgICBzZW5kOiBmdW5jdGlvbihuYW1lKSB7CisgICAgICAg
IHZhciBidWZmZXIgPSBjcmVhdGVCdWZmZXIoYXJyYXlTaXplKTsKKyAgICAgICAgd3JhcFNlbmQo
bmFtZSwgeyBidWZmZXIgOiBidWZmZXIgfSwgW2J1ZmZlcixidWZmZXJdKTsKKyAgICAgICAgYXNz
ZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIGJ1ZmZlcik7CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1l
LCBbYnVmZmVyXSwgW2J1ZmZlcl0pOworICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgW10sIFti
dWZmZXJdKTsKKyAgICAgICAgdmFyIGJ1ZmZlcjIgPSBjcmVhdGVCdWZmZXIoYXJyYXlTaXplKTsK
KyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFtdLCBbYnVmZmVyMiwgYnVmZmVyXSk7CisgICAg
ICAgIGNoZWNrQnVmZmVyKG5hbWUsIGJ1ZmZlcjIsIGFycmF5U2l6ZSk7CisgICAgICAgIHdyYXBG
YWlsU2VuZChuYW1lLCBbXSwgW2J1ZmZlciwgYnVmZmVyMl0pOworICAgICAgICBjaGVja0J1ZmZl
cihuYW1lLCBidWZmZXIyLCBhcnJheVNpemUpOworICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwg
W2J1ZmZlcjJdLCBbYnVmZmVyMiwgYnVmZmVyXSk7CisgICAgICAgIGNoZWNrQnVmZmVyKG5hbWUs
IGJ1ZmZlcjIsIGFycmF5U2l6ZSk7CisgICAgfSwKKyAgICB0ZXN0OiBmdW5jdGlvbiAobmFtZSwg
ZSkgeworICAgICAgICByZXR1cm4gY2hlY2tCdWZmZXIobmFtZSwgZS5kYXRhLmJ1ZmZlciwgYXJy
YXlTaXplKTsKKyAgICB9Cit9LCB7CisgICAgbmFtZTogInRyYW5zZmVyIG5ldXRlcnMgdW5tZW50
aW9uZWQiLAorICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBidWZmZXIg
PSBjcmVhdGVCdWZmZXIoYXJyYXlTaXplKTsKKyAgICAgICAgd3JhcFNlbmQobmFtZSwgW10sIFti
dWZmZXJdKTsKKyAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIGJ1ZmZlcik7CisgICAg
fSwKKyAgICB0ZXN0IDogZnVuY3Rpb24gKG5hbWUsIGUpIHsKKyAgICAgICAgcmV0dXJuIGUuZGF0
YS5sZW5ndGggPT0gMDsKKyAgICB9Cit9XTsKKwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQo
YWxsQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKGJ1ZmZlclR5cGUpIHsgcmV0dXJuIHsKKyAgICBu
YW1lOiAicmF3ICIgKyBidWZmZXJUeXBlWzBdLAorICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIHZhciB2aWV3ID0gY3JlYXRlVmlldyhidWZmZXJUeXBlWzFdLCBidWZmZXJUeXBl
WzJdKTsKKyAgICAgICAgd3JhcFNlbmQobmFtZSwgdmlldywgW3ZpZXcuYnVmZmVyXSk7CisgICAg
ICAgIGFzc2VydFZpZXdDbG9zZWQobmFtZSwgdmlldyk7CisgICAgICAgIGFzc2VydEJ1ZmZlckNs
b3NlZChuYW1lLCB2aWV3LmJ1ZmZlcik7CisgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCB2aWV3
LCBbdmlldy5idWZmZXJdKTsKKyAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZpZXcsIFtdKTsK
KyAgICB9LAorICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7CisgICAgICAgIHJldHVybiBj
aGVja1ZpZXcobmFtZSwgYnVmZmVyVHlwZVsxXSwgZS5kYXRhKSAmJiBjaGVja0VtcHR5QXJyYXko
bmFtZSwgZS5wb3J0cyk7CisgICAgfQorfX0pKTsKKworZnVuY3Rpb24gdmlld0FuZEJ1ZmZlcih2
aWV3Rmlyc3QsIGJ1ZmZlclR5cGUpIHsKKyAgICByZXR1cm4geworICAgICAgICBuYW1lOiAodmll
d0ZpcnN0ID8gInNlbmQgdmlldywgYnVmZmVyIGZvciAiIDogInNlbmQgYnVmZmVyLCB2aWV3IGZv
ciAiKSArIGJ1ZmZlclR5cGVbMF0sCisgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lKSB7Cisg
ICAgICAgICAgICB2YXIgdmlldyA9IGNyZWF0ZVZpZXcoYnVmZmVyVHlwZVsxXSwgYnVmZmVyVHlw
ZVsyXSk7CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gdmlldy5idWZmZXI7CisgICAgICAgICAg
ICB3cmFwU2VuZChuYW1lLCB2aWV3Rmlyc3QgPyBbdmlldywgYnVmZmVyXSA6IFtidWZmZXIsIHZp
ZXddLCBbYnVmZmVyXSk7CisgICAgICAgICAgICBhc3NlcnRWaWV3Q2xvc2VkKG5hbWUsIHZpZXcp
OworICAgICAgICAgICAgYXNzZXJ0QnVmZmVyQ2xvc2VkKG5hbWUsIGJ1ZmZlcik7CisgICAgICAg
ICAgICB3cmFwRmFpbFNlbmQobmFtZSwgdmlldywgW2J1ZmZlcl0pOworICAgICAgICAgICAgd3Jh
cEZhaWxTZW5kKG5hbWUsIHZpZXcsIFtdKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1l
LCBidWZmZXIsIFtidWZmZXJdKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBidWZm
ZXIsIFtdKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbdmlldywgYnVmZmVyXSwg
W2J1ZmZlcl0pOworICAgICAgICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIFtidWZmZXIsIHZpZXdd
LCBbYnVmZmVyXSk7CisgICAgICAgICAgICB3cmFwRmFpbFNlbmQobmFtZSwgW3ZpZXcsIGJ1ZmZl
cl0sIFtdKTsKKyAgICAgICAgICAgIHdyYXBGYWlsU2VuZChuYW1lLCBbYnVmZmVyLCB2aWV3XSwg
W10pOworICAgICAgICB9LAorICAgICAgICB0ZXN0OiBmdW5jdGlvbiAobmFtZSwgZSkgeworICAg
ICAgICAgICAgdmFyIHZpZXcgPSBlLmRhdGFbdmlld0ZpcnN0ID8gMCA6IDFdOworICAgICAgICAg
ICAgdmFyIGJ1ZmZlciA9IGUuZGF0YVt2aWV3Rmlyc3QgPyAxIDogMF07CisgICAgICAgICAgICBp
ZiAoYnVmZmVyICE9PSB2aWV3LmJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
bmFtZSArICIgYnVmZmVyIG5vdCBzaGFyZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY2hlY2tWaWV3KG5hbWUsIGJ1
ZmZlclR5cGVbMV0sIHZpZXcpICYmIGNoZWNrRW1wdHlBcnJheShuYW1lLCBlLnBvcnRzKTsKKyAg
ICAgICAgfQorICAgIH0KK307CisKK2Z1bmN0aW9uIHNxdWFzaFVucmVsYXRlZFZpZXdzKGJ1ZmZl
clR5cGUpIHsKKyAgICByZXR1cm4geworICAgICAgICBuYW1lOiAic3F1YXNoIHVucmVsYXRlZCB2
aWV3cyBmb3IgIiArIGJ1ZmZlclR5cGVbMF0sCisgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKG5hbWUp
IHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0gY3JlYXRlVmlldyhidWZmZXJUeXBlWzFdLCBidWZm
ZXJUeXBlWzJdKTsKKyAgICAgICAgICAgIHZhciB2aWV3cyA9IGNyZWF0ZUV2ZXJ5Vmlldyh2aWV3
LmJ1ZmZlcik7CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gdmlldy5idWZmZXI7CisgICAgICAg
ICAgICB3cmFwU2VuZChuYW1lLCB2aWV3LCBbdmlldy5idWZmZXJdKTsKKyAgICAgICAgICAgIGFz
c2VydFZpZXdDbG9zZWQobmFtZSwgdmlldyk7CisgICAgICAgICAgICBhc3NlcnRCdWZmZXJDbG9z
ZWQobmFtZSwgdmlldy5idWZmZXIpOworICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB2
aWV3cy5sZW5ndGg7ICsrdikgeworICAgICAgICAgICAgICAgIGFzc2VydFZpZXdDbG9zZWQobmFt
ZSArICIodmlldyAiICsgdiArICIpIiwgdmlld3Nbdl0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgd3JhcEZhaWxTZW5kKG5hbWUsIHZpZXdzLCBbYnVmZmVyXSk7CisgICAgICAgIH0sCisg
ICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChuYW1lLCBlKSB7IHJldHVybiBjaGVja1ZpZXcobmFtZSwg
YnVmZmVyVHlwZVsxXSwgZS5kYXRhKSAmJiBjaGVja0VtcHR5QXJyYXkobmFtZSwgZS5wb3J0cyk7
IH0KKyAgICB9Cit9CisKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGFsbEJ1ZmZlclR5cGVz
Lm1hcChmdW5jdGlvbihidWZmZXJUeXBlKSB7IHJldHVybiB2aWV3QW5kQnVmZmVyKHRydWUsIGJ1
ZmZlclR5cGUpOyB9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNvbmNhdChhbGxCdWZmZXJUeXBl
cy5tYXAoZnVuY3Rpb24oYnVmZmVyVHlwZSkgeyByZXR1cm4gdmlld0FuZEJ1ZmZlcihmYWxzZSwg
YnVmZmVyVHlwZSk7IH0pKTsKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGFsbEJ1ZmZlclR5
cGVzLm1hcChmdW5jdGlvbihidWZmZXJUeXBlKSB7IHJldHVybiBzcXVhc2hVbnJlbGF0ZWRWaWV3
cyhidWZmZXJUeXBlKTsgfSkpOworCitmdW5jdGlvbiBkb25lVGVzdCgpIHsKKyAgICBpZiAoKyt3
aW5kb3cudGVzdHNDb21wbGV0ZSA9PSB0ZXN0TGlzdC5sZW5ndGgpIHsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2YXIgdCA9IHRlc3RMaXN0W3dp
bmRvdy50ZXN0c0NvbXBsZXRlXTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQuc2VuZCh0
Lm5hbWUpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQodC5u
YW1lICsgIjogb24gc2VuZDogIiArIGUpOworICAgICAgICAgICAgZG9uZVRlc3QoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gd2luZG93SGFuZGxlTWVzc2FnZShldmVudCkgewor
ICAgIHZhciBjdXJyZW50VGVzdCA9IHRlc3RMaXN0W3dpbmRvdy50ZXN0c0NvbXBsZXRlXTsKKyAg
ICBpZiAoY3VycmVudFRlc3QuYWxyZWFkeUhpdCkgeworICAgICAgICB0ZXN0RmFpbGVkKGN1cnJl
bnRUZXN0Lm5hbWUgKyAiOiB3aW5kb3dIYW5kbGVNZXNzYWdlIGhpdCBtb3JlIHRoYW4gb25jZS4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjdXJyZW50VGVzdC5hbHJlYWR5
SGl0ID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBpZiAoY3VycmVudFRlc3QudGVzdChjdXJy
ZW50VGVzdC5uYW1lLCBldmVudCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoY3VycmVudFRl
c3QubmFtZSk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZChjdXJyZW50VGVzdC5uYW1lICsgIjogb24gcmVjaWV2ZTogIiArIGUgKyAiLiBldmVudC5kYXRh
ID0gIiArIGV2ZW50LmRhdGEpOworICAgIH0KKyAgICBkb25lVGVzdCgpOworfQorCit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHdpbmRvd0hhbmRsZU1lc3NhZ2UpOword2luZG93
LnRlc3RzQ29tcGxldGUgPSAtMTsKK2RvbmVUZXN0KCk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ct
cG9zdG1lc3NhZ2UtYXJncy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wb3N0bWVzc2FnZS1hcmdzLmh0bWwKaW5kZXggNjQ2YjM2NC4uZThlMTdmNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcmdzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1h
cmdzLmh0bWwKQEAgLTYwLDYgKzYwLDI0IEBAIHRyeVBvc3RNZXNzYWdlRnVuY3Rpb24od2luZG93
LndlYmtpdFBvc3RNZXNzYWdlLCBjaGFubmVsNC5wb3J0MSwgW2NoYW5uZWw0LnBvcnQxCiB2YXIg
Y2hhbm5lbDUgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiB0cnlQb3N0TWVzc2FnZUZ1bmN0aW9uKHdp
bmRvdy53ZWJraXRQb3N0TWVzc2FnZSwgW2NoYW5uZWw1LnBvcnQxLCBjaGFubmVsNS5wb3J0Ml0s
IFtjaGFubmVsNS5wb3J0MSwgY2hhbm5lbDUucG9ydDJdLCAnKicpOwogCit2YXIgYXJyYXlCdWZm
ZXIgPSBuZXcgQXJyYXlCdWZmZXIoMzApOwordmFyIGludDhWaWV3ID0gbmV3IEludDhBcnJheShh
cnJheUJ1ZmZlciwgMiwgMTApOwordHJ5UG9zdE1lc3NhZ2VGdW5jdGlvbih3aW5kb3cud2Via2l0
UG9zdE1lc3NhZ2UsIGFycmF5QnVmZmVyLCBbYXJyYXlCdWZmZXJdLCAnKicpOworaWYgKCEoYXJy
YXlCdWZmZXIuYnl0ZUxlbmd0aCA9PT0wKSkgeworICAgIGNvbnNvbGUuaW5uZXJIVE1MICs9ICJG
QUlMOiBhcnJheUJ1ZmZlciBub3QgbmV1dGVyZWQ7IGJ5dGVMZW5ndGggPSAiICsgYXJyYXlCdWZm
ZXIuYnl0ZUxlbmd0aCArICI8YnI+IjsKK30KK2Vsc2UgeworICAgIGNvbnNvbGUuaW5uZXJIVE1M
ICs9ICJQQVNTOiBhcnJheUJ1ZmZlciBuZXV0ZXJlZDxicj4iOworfQorCitpZiAoIShpbnQ4Vmll
dy5sZW5ndGggPT0gMCkpIHsKKyAgICBjb25zb2xlLmlubmVySFRNTCArPSAiRkFJTDogdmlldyB3
YXMgbm90IG5ldXRlcmVkOyBsZW5ndGggPSAiICsgaW50OFZpZXcubGVuZ3RoICsgIjxicj4iOwor
fQorZWxzZSB7CisgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIlBBU1M6IHZpZXcgbmV1dGVyZWQ8
YnI+IgorfQorCisKIHRyeVBvc3RNZXNzYWdlRnVuY3Rpb24od2luZG93LnBvc3RNZXNzYWdlLCAn
ZG9uZScsICcqJyk7CiA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJn
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9X
aW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFyZ3MtZXhwZWN0ZWQudHh0CmluZGV4IDBlODFmOGYu
LjIzYWE4NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJncy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVz
c2FnZS1hcmdzLWV4cGVjdGVkLnR4dApAQCAtMTksNiArMTksOSBAQCBQQVNTOiBQb3N0aW5nIG1l
c3NhZ2UgKCcyMTQ3NDgzNjQ4JywgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KIFBB
U1M6IFBvc3RpbmcgbWVzc2FnZSAoJ1tvYmplY3QgTWVzc2FnZVBvcnRdJywgW29iamVjdCBNZXNz
YWdlUG9ydF0sW29iamVjdCBNZXNzYWdlUG9ydF0pOiB0aHJldyBleGNlcHRpb24gRXJyb3I6IERB
VEFfQ0xPTkVfRVJSOiBET00gRXhjZXB0aW9uIDI1CiBQQVNTOiBQb3N0aW5nIG1lc3NhZ2UgKCdb
b2JqZWN0IE1lc3NhZ2VQb3J0XScsIFtvYmplY3QgTWVzc2FnZVBvcnRdLFtvYmplY3QgTWVzc2Fn
ZVBvcnRdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgogUEFTUzogUG9zdGluZyBtZXNzYWdl
ICgnW29iamVjdCBNZXNzYWdlUG9ydF0sW29iamVjdCBNZXNzYWdlUG9ydF0nLCBbb2JqZWN0IE1l
c3NhZ2VQb3J0XSxbb2JqZWN0IE1lc3NhZ2VQb3J0XSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1M6IFBvc3RpbmcgbWVzc2FnZSAoJ1tvYmplY3QgQXJyYXlCdWZmZXJdJywgW29iamVj
dCBBcnJheUJ1ZmZlcl0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTOiBhcnJheUJ1
ZmZlciBuZXV0ZXJlZAorUEFTUzogdmlldyBuZXV0ZXJlZAogUEFTUzogUG9zdGluZyBtZXNzYWdl
ICgnZG9uZScsICopIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCiBSZWNlaXZlZCBtZXNzYWdl
ICc0JyB3aXRoIDAgcG9ydHMuCiBSZWNlaXZlZCBtZXNzYWdlICc0JyB3aXRoIDAgcG9ydHMuCkBA
IC0zMiw1ICszNSw2IEBAIFJlY2VpdmVkIG1lc3NhZ2UgJzIxNDc0ODM2NDgnIHdpdGggMCBwb3J0
cy4KIFJlY2VpdmVkIG1lc3NhZ2UgJzIxNDc0ODM2NDgnIHdpdGggMCBwb3J0cy4KIFJlY2VpdmVk
IG1lc3NhZ2UgJ1tvYmplY3QgTWVzc2FnZVBvcnRdJyB3aXRoIDIgcG9ydHMuCiBSZWNlaXZlZCBt
ZXNzYWdlICdbb2JqZWN0IE1lc3NhZ2VQb3J0XSxbb2JqZWN0IE1lc3NhZ2VQb3J0XScgd2l0aCAy
IHBvcnRzLgorUmVjZWl2ZWQgbWVzc2FnZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nIHdpdGggMCBw
b3J0cy4KIFJlY2VpdmVkIG1lc3NhZ2UgJ2RvbmUnIHdpdGggMCBwb3J0cy4KIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAppbmRleCA4OTlhMzgwLi4xMDVhMzEyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZApAQCAtMTU2MywzICsxNTYzLDYgQEAgZmFzdC9ldmVudHMva2V5ZG93bi0xLmh0bWwK
IGZhc3QvZm9ybXMvY3Vyc29yLWF0LWVkaXRhYmxlLWNvbnRlbnQtYm91bmRhcnkuaHRtbAogZmFz
dC90ZXh0L2dseXBoLXJlb3JkZXJpbmcuaHRtbAogZmFzdC90ZXh0L2lwYS10b25lLWxldHRlcnMu
aHRtbAorCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5Mwor
ZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IGJkZmQxMWQuLmU4Yjk5NzQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCkBAIC00OTksMyArNDk5LDYgQEAgZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzE0OAogZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtdGV4dHVyZS1iaW5k
aW5nLXByZXNlcnZlZC5odG1sCisKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTczNDkzCitmYXN0L2NhbnZhcy93ZWJnbC9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1j
b250cm9sLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDVhNWUyMWQuLmExMmFlYWQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMjUwMiwzICsyNTAyLDYgQEAgaW5zcGVjdG9y
L2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAogIyBSRUdSRVNTSU9OKHIxMDEyNjgp
OmZhc3QvYmxvY2svY2hpbGQtbm90LXJlbW92ZWQtZnJvbS1wYXJlbnQtbGluZWJveGVzLWNyYXNo
Lmh0bWwgY3Jhc2hlcyBpbiBEZWJ1ZwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzMyNTAKIGZhc3QvYmxvY2svY2hpbGQtbm90LXJlbW92ZWQtZnJvbS1wYXJlbnQt
bGluZWJveGVzLWNyYXNoLmh0bWwKKworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzM0OTMKK2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9m
LWNvbnRyb2wuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBw
ZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA1MDc2MjExLi40OGVl
MGQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTQ2Myw0ICsxNDYzLDUgQEAgcG9p
bnRlci1sb2NrLwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0
MzUKIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0bWwKIAotCisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5MworZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5odG1sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCA3YTBhNzZjLi5iNTZmNjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0xMS0zMCAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBn
b29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MzUwMworICAgICAgICBbQ2hyb21pdW1dW1Y4XSBJbXBsZW1lbnQgQXJyYXlCdWZmZXIg
dHJhbnNmZXIgaW4gY2hyb21pdW0uCisgICAgICAgIFBvcnRpb25zIG9mIHRoaXMgcGF0Y2ggY29t
ZSBmcm9tIEx1a2UgWmFya28uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3dGYvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoV1RGOjpBcnJheUJ1
ZmZlcjo6dHJhbnNmZXIpOiBDaGFuZ2VkIHByb3RvdHlwZSBmcm9tIHBvaW50ZXJzIHRvIFJlZlB0
ci4KKyAgICAgICAgKiB3dGYvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdURjo6QXJyYXlCdWZm
ZXJDb250ZW50czo6dHJhbnNmZXIpOiBDaGFuZ2VkIHByb3RvdHlwZSBmcm9tIHBvaW50ZXJzIHRv
IFJlZlB0ci4KKyAgICAgICAgKFdURjo6QXJyYXlCdWZmZXI6OmlzTmV1dGVyZWQpOgorICAgICAg
ICAqIHd0Zi9UeXBlZEFycmF5QmFzZS5oOgorICAgICAgICAoV1RGOjpUeXBlZEFycmF5QmFzZTo6
bmV1dGVyKToKKwogMjAxMS0xMS0zMCAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+
CiAKICAgICAgICAgU29tZSBkYXRlIHZhbHVlcyBub3QgaGFuZGxlZCBjb25zaXN0ZW50bHkgd2l0
aCBJRS9GaXJlZm94CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5
QnVmZmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuY3BwCmlu
ZGV4IDFlYmU3NGYuLjQ1Y2ZhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQXJyYXlCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlC
dWZmZXIuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1ib29sIEFy
cmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxB
cnJheUJ1ZmZlclZpZXcqPiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5z
ZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCiB7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVw
QWxpdmUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJy
YXlCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQXJyYXlCdWZmZXIuaAppbmRl
eCA0MTk2YWE4Li5lZTk1ZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0FycmF5QnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZl
ci5oCkBAIC01OCwxMyArNTgsMTMgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJyYXlC
dWZmZXI7CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYp
OwotICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpIAorICAgIHZv
aWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW90aGVyLm1fZGF0YSk7CiAgICAgICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0YTsKICAg
ICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1fZGF0
YSA9IDA7IAotICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsgCisgICAgICAgIG1fZGF0YSA9IDA7
CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwogICAgIH0KIAogICAgIHZvaWQqIG1fZGF0YTsK
QEAgLTg4LDcgKzg4LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZp
ZXcqKTsKICAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7CiAKLSAgICBib29s
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8QXJyYXlCdWZmZXJWaWV3Kj4m
IG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYs
IFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBi
b29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5B
cnJheUJ1ZmZlcigpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1R5cGVkQXJyYXlCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVkQXJyYXlC
YXNlLmgKaW5kZXggYWUzMGMxNy4uZGJhOTVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9UeXBlZEFycmF5QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvVHlwZWRBcnJheUJhc2UuaApAQCAtMTEyLDYgKzExMiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHJldHVybiBjcmVhdGU8U3ViY2xhc3M+KGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7CiAg
ICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5ldXRlcigpCisgICAgeworICAgICAgICBBcnJheUJ1
ZmZlclZpZXc6Om5ldXRlcigpOworICAgICAgICBtX2xlbmd0aCA9IDA7CisgICAgfQorCiAgICAg
Ly8gV2UgZG8gbm90IHdhbnQgdG8gaGF2ZSB0byBhY2Nlc3MgdGhpcyB2aWEgYSB2aXJ0dWFsIGZ1
bmN0aW9uIGluIHN1YmNsYXNzZXMsCiAgICAgLy8gd2hpY2ggaXMgd2h5IGl0IGlzIHByb3RlY3Rl
ZCByYXRoZXIgdGhhbiBwcml2YXRlLgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCm9s
ZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMGExZGI2My4uYWRlNjQ3OAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTEtMzAgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29v
Z2xlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM1MDMKKyAgICAgICAgW0Nocm9taXVtXVtWOF0gSW1wbGVtZW50IEFycmF5QnVmZmVyIHRy
YW5zZmVyIGluIGNocm9taXVtLgorICAgICAgICBQb3J0aW9ucyBvZiB0aGlzIHBhdGNoIGNvbWUg
ZnJvbSBMdWtlIFphcmtvLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9m
LWNvbnRyb2wuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpXcml0ZXI6OndyaXRlVHJh
bnNmZXJyZWRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2Vy
aWFsaXplcjo6U2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2Vy
aWFsaXplcjo6d3JpdGVBbmRHcmV5QXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjp3cml0ZUFycmF5QnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjp3cml0ZVRyYW5zZmVycmVkQXJyYXlCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OmRvU2VyaWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpSZWFkZXI6OnJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZEFycmF5QnVmZmVyVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVzZXJpYWxpemVyOjpEZXNlcmlhbGl6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OkRlc2VyaWFsaXplcjo6dHJ5R2V0
VHJhbnNmZXJyZWRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpuZXV0ZXJCaW5kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
Lmg6CisKIDIwMTEtMTEtMzAgIE5hdmVlbiBCb2JiaWxpICA8cWdoYzM2QG1vdG9yb2xhLmNvbT4K
IAogICAgICAgICB3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKCkgbm90IHN1cHBvcnRpbmcgcHNl
dWRvIGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQzYTRiMWQuLjcwMzFhNTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAt
MTk3LDYgKzE5Nyw3IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bGxzIGl0IHdpdGggdGhlIGxhc3QgbGVuZ3RoIGVsZW1lbnRzIGFuZCBudW1Qcm9wZXJ0aWVzIG5h
bWUsdmFsdWUgcGFpcnMgcHVzaGVkIG9udG8gZGVzZXJpYWxpemF0aW9uIHN0YWNrCiAgICAgUmVn
RXhwVGFnID0gJ1InLCAvLyBwYXR0ZXJuOlJhd1N0cmluZywgZmxhZ3M6dWludDMyX3QgLT4gUmVn
RXhwIChyZWYpCiAgICAgQXJyYXlCdWZmZXJUYWcgPSAnQicsIC8vIGJ5dGVMZW5ndGg6dWludDMy
X3QsIGRhdGE6Ynl0ZVtieXRlTGVuZ3RoXSAtPiBBcnJheUJ1ZmZlciAocmVmKQorICAgIEFycmF5
QnVmZmVyVHJhbnNmZXJUYWcgPSAndCcsIC8vIGluZGV4OnVpbnQzMl90IC0+IEFycmF5QnVmZmVy
LiBGb3IgQXJyYXlCdWZmZXIgdHJhbnNmZXIKICAgICBBcnJheUJ1ZmZlclZpZXdUYWcgPSAnVics
IC8vIHN1YnRhZzpieXRlLCBieXRlT2Zmc2V0OnVpbnQzMl90LCBieXRlTGVuZ3RoOnVpbnQzMl90
IC0+IEFycmF5QnVmZmVyVmlldyAocmVmKS4gQ29uc3VtZXMgYW4gQXJyYXlCdWZmZXIgZnJvbSB0
aGUgdG9wIG9mIHRoZSBkZXNlcmlhbGl6YXRpb24gc3RhY2suCiAgICAgT2JqZWN0UmVmZXJlbmNl
VGFnID0gJ14nLCAvLyByZWY6dWludDMyX3QgLT4gcmVmZXJlbmNlIHRhYmxlW3JlZl0KICAgICBH
ZW5lcmF0ZUZyZXNoT2JqZWN0VGFnID0gJ28nLCAvLyAtPiBlbXB0eSBvYmplY3QgYWxsb2NhdGVk
IGFuIG9iamVjdCBJRCBhbmQgcHVzaGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikKQEAgLTQz
OCw2ICs0MzksMTIgQEAgcHVibGljOgogICAgICAgICBkb1dyaXRlVWludDMyKGluZGV4KTsKICAg
ICB9CiAKKyAgICB2b2lkIHdyaXRlVHJhbnNmZXJyZWRBcnJheUJ1ZmZlcih1aW50MzJfdCBpbmRl
eCkKKyAgICB7CisgICAgICAgIGFwcGVuZChBcnJheUJ1ZmZlclRyYW5zZmVyVGFnKTsKKyAgICAg
ICAgZG9Xcml0ZVVpbnQzMihpbmRleCk7CisgICAgfQorCiAgICAgdm9pZCB3cml0ZU9iamVjdFJl
ZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UpCiAgICAgewogICAgICAgICBhcHBlbmQoT2JqZWN0
UmVmZXJlbmNlVGFnKTsKQEAgLTU4OSwxMSArNTk2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgU3Vj
Y2VzcywKICAgICAgICAgSW5wdXRFcnJvciwKICAgICAgICAgRGF0YUNsb25lRXJyb3IsCisgICAg
ICAgIEludmFsaWRTdGF0ZUVycm9yLAogICAgICAgICBKU0V4Y2VwdGlvbiwKICAgICAgICAgSlNG
YWlsdXJlCiAgICAgfTsKIAotICAgIFNlcmlhbGl6ZXIoV3JpdGVyJiB3cml0ZXIsIE1lc3NhZ2VQ
b3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgdjg6OlRyeUNhdGNoJiB0cnlDYXRjaCkKKyAgICBTZXJp
YWxpemVyKFdyaXRlciYgd3JpdGVyLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFy
cmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywgdjg6OlRyeUNhdGNoJiB0cnlDYXRjaCkKICAg
ICAgICAgOiBtX3dyaXRlcih3cml0ZXIpCiAgICAgICAgICwgbV90cnlDYXRjaCh0cnlDYXRjaCkK
ICAgICAgICAgLCBtX2RlcHRoKDApCkBAIC02MDYsNiArNjE0LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVzc2FnZVBvcnRzLT5zaXplKCk7IGkrKykK
ICAgICAgICAgICAgICAgICBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLnNldChWOE1lc3NhZ2VQ
b3J0Ojp3cmFwKG1lc3NhZ2VQb3J0cy0+YXQoaSkuZ2V0KCkpLCBpKTsKICAgICAgICAgfQorICAg
ICAgICBpZiAoYXJyYXlCdWZmZXJzKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFycmF5QnVmZmVycy0+c2l6ZSgpOyBpKyspICB7CisgICAgICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB2OEFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJh
eUJ1ZmZlcnMtPmF0KGkpLmdldCgpKTsKKyAgICAgICAgICAgICAgICAvLyBDb2FsZXNjZSBtdWx0
aXBsZSBvY2N1cmVuY2VzIG9mIHRoZSBzYW1lIGJ1ZmZlciB0byB0aGUgZmlyc3QgaW5kZXguCisg
ICAgICAgICAgICAgICAgaWYgKCFtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmNvbnRhaW5zKHY4
QXJyYXlCdWZmZXIpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYW5zZmVycmVkQXJyYXlCdWZm
ZXJzLnNldCh2OEFycmF5QnVmZmVyLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAogICAgIFN0YXR1cyBzZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpA
QCAtOTk1LDYgKzEwMTEsOCBAQCBwcml2YXRlOgogICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGFy
cmF5QnVmZmVyVmlldyA9IFY4QXJyYXlCdWZmZXJWaWV3Ojp0b05hdGl2ZShvYmplY3QpOwogICAg
ICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBpZiAoIWFycmF5QnVmZmVyVmlldy0+YnVmZmVyKCkpCisgICAgICAgICAgICByZXR1cm4gaGFu
ZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5leHQpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdW5kZXJseWluZ0J1ZmZlciA9IHRvVjgoYXJyYXlCdWZmZXJWaWV3LT5idWZmZXIoKSk7
CiAgICAgICAgIGlmICh1bmRlcmx5aW5nQnVmZmVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
dHVybiBoYW5kbGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7CkBAIC0xMDE0LDEyICsxMDMy
LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHZvaWQgd3Jp
dGVBcnJheUJ1ZmZlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgU3RhdGVCYXNl
KiB3cml0ZUFycmF5QnVmZmVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgU3RhdGVCYXNl
KiBuZXh0KQogICAgIHsKICAgICAgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gVjhBcnJh
eUJ1ZmZlcjo6dG9OYXRpdmUodmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlmICgh
YXJyYXlCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1
cm4gaGFuZGxlRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsIG5leHQpOworICAgICAgICBBU1NFUlQo
IW1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuY29udGFpbnModmFsdWUuQXM8djg6Ok9iamVjdD4o
KSkpOwogICAgICAgICBtX3dyaXRlci53cml0ZUFycmF5QnVmZmVyKCphcnJheUJ1ZmZlcik7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFN0YXRlQmFzZSogd3JpdGVUcmFuc2ZlcnJl
ZEFycmF5QnVmZmVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdWludDMyX3QgaW5kZXgs
IFN0YXRlQmFzZSogbmV4dCkKKyAgICB7CisgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZl
ciA9IFY4QXJyYXlCdWZmZXI6OnRvTmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOworICAg
ICAgICBpZiAoIWFycmF5QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
IChhcnJheUJ1ZmZlci0+aXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVy
cm9yKERhdGFDbG9uZUVycm9yLCBuZXh0KTsKKyAgICAgICAgbV93cml0ZXIud3JpdGVUcmFuc2Zl
cnJlZEFycmF5QnVmZmVyKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkU2VyaWFsaXplRGVuc2VseSh1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IHByb3BlcnR5Q291bnQpIApAQCAtMTA3MSw2ICsxMTA0LDcgQEAgcHJpdmF0ZToKICAgICB0
eXBlZGVmIFY4T2JqZWN0TWFwPHY4OjpPYmplY3QsIHVpbnQzMl90PiBPYmplY3RQb29sOwogICAg
IE9iamVjdFBvb2wgbV9vYmplY3RQb29sOwogICAgIE9iamVjdFBvb2wgbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0czsKKyAgICBPYmplY3RQb29sIG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnM7CiAg
ICAgdWludDMyX3QgbV9uZXh0T2JqZWN0UmVmZXJlbmNlOwogfTsKIApAQCAtMTA4Miw2ICsxMTE2
LDcgQEAgU2VyaWFsaXplcjo6U3RhdGVCYXNlKiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6ZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0YXQKICAgICB9CiAgICAgbV93cml0ZXIud3JpdGVS
ZWZlcmVuY2VDb3VudChtX25leHRPYmplY3RSZWZlcmVuY2UpOwogICAgIHVpbnQzMl90IG9iamVj
dFJlZmVyZW5jZTsKKyAgICB1aW50MzJfdCBhcnJheUJ1ZmZlckluZGV4OwogICAgIGlmICgodmFs
dWUtPklzT2JqZWN0KCkgfHwgdmFsdWUtPklzRGF0ZSgpIHx8IHZhbHVlLT5Jc1JlZ0V4cCgpKQog
ICAgICAgICAmJiBtX29iamVjdFBvb2wudHJ5R2V0KHZhbHVlLkFzPHY4OjpPYmplY3Q+KCksICZv
YmplY3RSZWZlcmVuY2UpKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCBJc09iamVjdCgpIGFsc28g
ZGV0ZWN0cyB3cmFwcGVycyAoZWcsIGl0IHdpbGwgY2F0Y2ggdGhlIHRoaW5ncwpAQCAtMTExNCw3
ICsxMTQ5LDggQEAgU2VyaWFsaXplcjo6U3RhdGVCYXNlKiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0YXQKICAgICAgICAgICAgICAgICBtX3dy
aXRlci53cml0ZVRyYW5zZmVycmVkTWVzc2FnZVBvcnQobWVzc2FnZVBvcnRJbmRleCk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9u
ZUVycm9yLCBuZXh0KTsKLSAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoVjhBcnJheUJ1ZmZlcjo6
SGFzSW5zdGFuY2UodmFsdWUpICYmIG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMudHJ5R2V0KHZh
bHVlLkFzPHY4OjpPYmplY3Q+KCksICZhcnJheUJ1ZmZlckluZGV4KSkKKyAgICAgICAgcmV0dXJu
IHdyaXRlVHJhbnNmZXJyZWRBcnJheUJ1ZmZlcih2YWx1ZSwgYXJyYXlCdWZmZXJJbmRleCwgbmV4
dCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4ganNPYmplY3Qg
PSB2YWx1ZS5Bczx2ODo6T2JqZWN0PigpOwogICAgICAgICBpZiAoanNPYmplY3QuSXNFbXB0eSgp
KQpAQCAtMTE0MSw3ICsxMTc3LDcgQEAgU2VyaWFsaXplcjo6U3RhdGVCYXNlKiBTZXJpYWxpemVy
Ojpkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0YXQKICAgICAgICAg
ZWxzZSBpZiAodmFsdWUtPklzUmVnRXhwKCkpCiAgICAgICAgICAgICB3cml0ZVJlZ0V4cCh2YWx1
ZSk7CiAgICAgICAgIGVsc2UgaWYgKFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKHZhbHVlKSkK
LSAgICAgICAgICAgIHdyaXRlQXJyYXlCdWZmZXIodmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IHdyaXRlQXJyYXlCdWZmZXIodmFsdWUsIG5leHQpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+
SXNPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKGlzSG9zdE9iamVjdChqc09iamVjdCkgfHwg
anNPYmplY3QtPklzQ2FsbGFibGUoKSB8fCB2YWx1ZS0+SXNOYXRpdmVFcnJvcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7CkBAIC0x
MTYyLDYgKzExOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hPYmplY3RSZWZl
cmVuY2UoY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JikgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCB0cnlHZXRPYmplY3RGcm9tT2JqZWN0UmVmZXJlbmNlKHVpbnQzMl90IHJlZmVyZW5jZSwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRUcmFuc2Zl
cnJlZE1lc3NhZ2VQb3J0KHVpbnQzMl90IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9
IDA7CisgICAgdmlydHVhbCBib29sIHRyeUdldFRyYW5zZmVycmVkQXJyYXlCdWZmZXIodWludDMy
X3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
bmV3U3BhcnNlQXJyYXkodWludDMyX3QgbGVuZ3RoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5l
d0RlbnNlQXJyYXkodWludDMyX3QgbGVuZ3RoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5ld09i
amVjdCgpID0gMDsKQEAgLTEzNjgsNiArMTQwNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBBcnJheUJ1ZmZlclRyYW5zZmVyVGFnOiB7CisgICAgICAgICAgICBpZiAobV92ZXJzaW9u
IDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMy
X3QgaW5kZXg7CisgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmaW5kZXgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY3JlYXRvci50cnlHZXRU
cmFuc2ZlcnJlZEFycmF5QnVmZmVyKGluZGV4LCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBP
YmplY3RSZWZlcmVuY2VUYWc6IHsKICAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTY5LDYgKzE2MTYsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNyZWF0b3IuY29uc3Vt
ZVRvcE9mU3RhY2soJmFycmF5QnVmZmVyVjhWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChhcnJheUJ1ZmZlclY4VmFsdWUuSXNFbXB0eSgpKSAKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp0
b05hdGl2ZShhcnJheUJ1ZmZlclY4VmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlm
ICghYXJyYXlCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzQxLDExICsx
NzkwLDE3IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV92ZXJzaW9uOwogfTsKIAorCit0eXBl
ZGVmIFZlY3RvcjxXVEY6OkFycmF5QnVmZmVyQ29udGVudHMsIDE+IEFycmF5QnVmZmVyQ29udGVu
dHNBcnJheTsKKwogY2xhc3MgRGVzZXJpYWxpemVyIDogcHVibGljIENvbXBvc2l0ZUNyZWF0b3Ig
ewogcHVibGljOgotICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlciwgTWVz
c2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzKQorICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihS
ZWFkZXImIHJlYWRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJy
YXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNv
bnRlbnRzKQogICAgICAgICA6IG1fcmVhZGVyKHJlYWRlcikKICAgICAgICAgLCBtX3RyYW5zZmVy
cmVkTWVzc2FnZVBvcnRzKG1lc3NhZ2VQb3J0cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29u
dGVudHMoYXJyYXlCdWZmZXJDb250ZW50cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJh
eUJ1ZmZlckNvbnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKICAgICAg
ICAgLCBtX3ZlcnNpb24oMCkKICAgICB7CiAgICAgfQpAQCAtMTg5MCw2ICsxOTQ1LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIHRy
eUdldFRyYW5zZmVycmVkQXJyYXlCdWZmZXIodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiogb2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FycmF5QnVmZmVyQ29udGVu
dHMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpbmRleCA+PSBtX2Fy
cmF5QnVmZmVycy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gbV9hcnJheUJ1ZmZlcnMuYXQoaW5kZXgpOwor
ICAgICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gVjhB
cnJheUJ1ZmZlcjo6d3JhcChBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fYXJyYXlCdWZmZXJDb250ZW50
cy0+YXQoaW5kZXgpKS5nZXQoKSk7CisgICAgICAgICAgICBtX2FycmF5QnVmZmVyc1tpbmRleF0g
PSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgKm9iamVjdCA9IHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdmlydHVhbCBib29sIHRyeUdldE9iamVjdEZyb21P
YmplY3RSZWZlcmVuY2UodWludDMyX3QgcmVmZXJlbmNlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4q
IG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChyZWZlcmVuY2UgPj0gbV9vYmplY3RQb29sLnNp
emUoKSkKQEAgLTE5NjksNiArMjAzOSw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHY4OjpIYW5k
bGU8djg6OlZhbHVlPiA+IG1fb2JqZWN0UG9vbDsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3Bl
bkNvbXBvc2l0ZVJlZmVyZW5jZVN0YWNrOwogICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1fdHJhbnNm
ZXJyZWRNZXNzYWdlUG9ydHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX2FycmF5
QnVmZmVyQ29udGVudHM7CisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gPiBtX2Fy
cmF5QnVmZmVyczsKICAgICB1aW50MzJfdCBtX3ZlcnNpb247CiB9OwogCkBAIC0xOTg5LDE2ICsy
MDYxLDE2IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZUFuZFNldFBy
b3BlcnR5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqCiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRz
LCBBcnJheUJ1ZmZlckFycmF5KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9y
dHMsIEFycmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBkaWRUaHJv
dykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1
ZSwgbWVzc2FnZVBvcnRzLCBkaWRUaHJvdykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgZGlk
VGhyb3cpKTsKIH0KIAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAg
ICBib29sIGRpZFRocm93OwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKHZhbHVlLCAwLCBkaWRUaHJvdykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlLCAwLCAwLCBkaWRUaHJvdykpOwogfQogCiBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZShjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0yMDYzLDE0ICsyMTM1LDYwIEBAIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKIHsKIH0KIAotU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIGJvb2wmIGRpZFRocm93
KQorc3RhdGljIHZvaWQgbmV1dGVyQmluZGluZyh2b2lkKiBkb21PYmplY3QpIAoreworICAgIERP
TURhdGFMaXN0JiBhbGxTdG9yZXMgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWxsU3RvcmVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqID0gYWxsU3RvcmVzW2ldLT5kb21PYmplY3RNYXAoKS5n
ZXQoZG9tT2JqZWN0KTsKKyAgICAgICAgaWYgKCFvYmouSXNFbXB0eSgpKQorICAgICAgICAgICAg
b2JqLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEoMCwgdjg6OmtFeHRl
cm5hbEJ5dGVBcnJheSwgMCk7CisgICAgfQorfQorCitQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnRyYW5zZmVyQXJyYXlCdWZmZXJzKEFycmF5QnVmZmVyQXJyYXkmIGFycmF5QnVmZmVycywgYm9v
bCYgZGlkVGhyb3cpIAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXJz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChhcnJheUJ1ZmZlcnNbaV0tPmlzTmV1dGVyZWQo
KSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAg
ICAgICBkaWRUaHJvdyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIE93blB0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGNvbnRl
bnRzID0gYWRvcHRQdHIobmV3IEFycmF5QnVmZmVyQ29udGVudHNBcnJheShhcnJheUJ1ZmZlcnMu
c2l6ZSgpKSk7CisKKyAgICBIYXNoU2V0PEFycmF5QnVmZmVyKj4gdmlzaXRlZDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFycmF5QnVmZmVycy5zaXplKCk7IGkrKykgeworICAgICAgICBW
ZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiBuZXV0ZXJlZFZpZXdzOworCisgICAgICAg
IGlmICh2aXNpdGVkLmNvbnRhaW5zKGFycmF5QnVmZmVyc1tpXS5nZXQoKSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdmlzaXRlZC5hZGQoYXJyYXlCdWZmZXJzW2ldLmdldCgpKTsK
KworICAgICAgICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1tpXS0+dHJhbnNmZXIoY29udGVu
dHMtPmF0KGkpLCBuZXV0ZXJlZFZpZXdzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3IoSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgZGlkVGhy
b3cgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAg
ICAgICBuZXV0ZXJCaW5kaW5nKGFycmF5QnVmZmVyc1tpXS5nZXQoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgbmV1dGVyZWRWaWV3cy5zaXplKCk7IGorKykKKyAgICAgICAgICAg
IG5ldXRlckJpbmRpbmcobmV1dGVyZWRWaWV3c1tqXS5nZXQoKSk7CisgICAgfQorICAgIHJldHVy
biBjb250ZW50cy5yZWxlYXNlKCk7Cit9CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNz
YWdlUG9ydHMsIEFycmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGRpZFRocm93KQogewogICAgIGRp
ZFRocm93ID0gZmFsc2U7CiAgICAgV3JpdGVyIHdyaXRlcjsKICAgICBTZXJpYWxpemVyOjpTdGF0
dXMgc3RhdHVzOwogICAgIHsKICAgICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotICAgICAg
ICBTZXJpYWxpemVyIHNlcmlhbGl6ZXIod3JpdGVyLCBtZXNzYWdlUG9ydHMsIHRyeUNhdGNoKTsK
KyAgICAgICAgU2VyaWFsaXplciBzZXJpYWxpemVyKHdyaXRlciwgbWVzc2FnZVBvcnRzLCBhcnJh
eUJ1ZmZlcnMsIHRyeUNhdGNoKTsKICAgICAgICAgc3RhdHVzID0gc2VyaWFsaXplci5zZXJpYWxp
emUodmFsdWUpOwogICAgICAgICBpZiAoc3RhdHVzID09IFNlcmlhbGl6ZXI6OkpTRXhjZXB0aW9u
KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYSBKUyBleGNlcHRpb24gdGhyb3duLCBy
ZS10aHJvdyBpdC4KQEAgLTIwODcsNiArMjIwNSwxMCBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIE1lc3Nh
ZwogICAgICAgICBkaWRUaHJvdyA9IHRydWU7CiAgICAgICAgIHRocm93RXJyb3IoREFUQV9DTE9O
RV9FUlIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTZXJpYWxpemVyOjpJbnZhbGlkU3Rh
dGVFcnJvcjoKKyAgICAgICAgZGlkVGhyb3cgPSB0cnVlOworICAgICAgICB0aHJvd0Vycm9yKElO
VkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFsaXplcjo6
SlNGYWlsdXJlOgogICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYSBKUyBmYWlsdXJlIChidXQgbm8g
ZXhjZXB0aW9uKSwgdGhlcmUncyBub3QKICAgICAgICAgLy8gbXVjaCB3ZSBjYW4gZG8gZXhjZXB0
IGZvciB1bndpbmRpbmcgdGhlIEMrKyBzdGFjayBieQpAQCAtMjA5NSw2ICsyMjE3LDggQEAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlLCBNZXNzYWcKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFsaXpl
cjo6U3VjY2VzczoKICAgICAgICAgbV9kYXRhID0gU3RyaW5nKFN0cmluZ0ltcGw6OmFkb3B0KHdy
aXRlci5kYXRhKCkpKS5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgaWYgKGFycmF5QnVmZmVycykK
KyAgICAgICAgICAgIG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5ID0gdHJhbnNmZXJBcnJheUJ1
ZmZlcnMoKmFycmF5QnVmZmVycywgZGlkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBTZXJpYWxpemVyOjpKU0V4Y2VwdGlvbjoKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGJlY2F1c2UgdGhpcyBjYXNlIHdhcyBoYW5kbGVkIGFib3ZlLgpAQCAtMjExNCw3ICsy
MjM4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUoTWVzc2FnZVBvcnRBcnJheSogbWVzc2EKICAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEJ1ZmZlclZhbHVlVHlwZSkgPT0gMiwgQnVm
ZmVyVmFsdWVUeXBlSXNUd29CeXRlcyk7CiAgICAgUmVhZGVyIHJlYWRlcihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEuaW1wbCgpLT5jaGFyYWN0ZXJzKCkpLCAyICogbV9k
YXRhLmxlbmd0aCgpKTsKLSAgICBEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwgbWVz
c2FnZVBvcnRzKTsKKyAgICBEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKHJlYWRlciwgbWVzc2Fn
ZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSk7CiAgICAgcmV0dXJuIGRl
c2VyaWFsaXplci5kZXNlcmlhbGl6ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDFiNTZlZDIuLjI1ZGE4ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCkBAIC0zMSwxNCArMzEsMTEgQEAKICNpZm5kZWYgU2VyaWFsaXplZFNjcmlwdFZhbHVl
X2gKICNkZWZpbmUgU2VyaWFsaXplZFNjcmlwdFZhbHVlX2gKIAorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBBcnJheUJ1ZmZl
cjsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZXNzYWdlUG9ydDsKQEAgLTgz
LDEyICs4MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdWYWx1ZSwKICAgICAgICAgV2ly
ZURhdGEKICAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPFdURjo6QXJyYXlCdWZmZXJDb250ZW50
cywgMT4gQXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKCk7Ci0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwg
TWVzc2FnZVBvcnRBcnJheSosIGJvb2wmIGRpZFRocm93KTsKKyAgICBTZXJpYWxpemVkU2NyaXB0
VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBNZXNzYWdlUG9ydEFycmF5KiwgQXJyYXlCdWZm
ZXJBcnJheSosIGJvb2wmIGRpZFRocm93KTsKICAgICBleHBsaWNpdCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUoY29uc3QgU3RyaW5nJiB3aXJlRGF0YSk7CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHRyYW5zZmVyQXJyYXlCdWZmZXJzKEFycmF5QnVmZmVy
QXJyYXkmLCBib29sJiBkaWRUaHJvdyk7CisKICAgICBTdHJpbmcgbV9kYXRhOworICAgIE93blB0
cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="116711"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>