<?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>125843</bug_id>
          
          <creation_ts>2013-12-17 00:03:22 -0800</creation_ts>
          <short_desc>Handle the onerror content attribute on body and frameset elements</short_desc>
          <delta_ts>2022-08-26 18:37:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>244178</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>BlinkMergeCandidate</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Brandon">brandonstewart</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>brandonstewart</cc>
    
    <cc>cdumez</cc>
    
    <cc>jeffrey+webkit</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960428</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-12-17 00:03:22 -0800</bug_when>
    <thetext>Consider merging https://chromium.googlesource.com/chromium/blink/+/3f0fc2dbb5fe67415078555b409a1223ad2d26bb

Firefox also passes the test. Presto fails on &quot;Convert to function&quot;
everywhere, and IE11 was not tested.

https://code.google.com/p/chromium/issues/detail?id=310630</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892521</commentid>
    <comment_count>1</comment_count>
      <attachid>461741</attachid>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-19 15:11:38 -0700</bug_when>
    <thetext>Created attachment 461741
Test Case from Chromium Patch

*** Safari 15.6.1 ***

PASS Set HTMLBodyElement.onblur 
FAIL Enumerate HTMLBodyElement.onblur assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onblur 
PASS Forward HTMLBodyElement.onblur to Window 
PASS Set HTMLFrameSetElement.onblur 
FAIL Enumerate HTMLFrameSetElement.onblur assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onblur 
PASS Forward HTMLFrameSetElement.onblur to Window 
PASS Set HTMLBodyElement.onerror 
FAIL Enumerate HTMLBodyElement.onerror assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onerror 
PASS Forward HTMLBodyElement.onerror to Window 
PASS Set HTMLFrameSetElement.onerror 
FAIL Enumerate HTMLFrameSetElement.onerror assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onerror 
PASS Forward HTMLFrameSetElement.onerror to Window 
PASS Set HTMLBodyElement.onfocus 
FAIL Enumerate HTMLBodyElement.onfocus assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onfocus 
PASS Forward HTMLBodyElement.onfocus to Window 
PASS Set HTMLFrameSetElement.onfocus 
FAIL Enumerate HTMLFrameSetElement.onfocus assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onfocus 
PASS Forward HTMLFrameSetElement.onfocus to Window 
PASS Set HTMLBodyElement.onload 
FAIL Enumerate HTMLBodyElement.onload assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onload 
PASS Forward HTMLBodyElement.onload to Window 
PASS Set HTMLFrameSetElement.onload 
FAIL Enumerate HTMLFrameSetElement.onload assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onload 
PASS Forward HTMLFrameSetElement.onload to Window 
PASS Set HTMLBodyElement.onscroll 
FAIL Enumerate HTMLBodyElement.onscroll assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onscroll 
PASS Forward HTMLBodyElement.onscroll to Window 
PASS Set HTMLFrameSetElement.onscroll 
FAIL Enumerate HTMLFrameSetElement.onscroll assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onscroll 
PASS Forward HTMLFrameSetElement.onscroll to Window 

*** Chrome Canary 106 ***

PASS Set HTMLBodyElement.onblur 
PASS Enumerate HTMLBodyElement.onblur 
PASS Reflect HTMLBodyElement.onblur 
PASS Forward HTMLBodyElement.onblur to Window 
PASS Set HTMLFrameSetElement.onblur 
PASS Enumerate HTMLFrameSetElement.onblur 
PASS Reflect HTMLFrameSetElement.onblur 
PASS Forward HTMLFrameSetElement.onblur to Window 
PASS Set HTMLBodyElement.onerror 
PASS Enumerate HTMLBodyElement.onerror 
PASS Reflect HTMLBodyElement.onerror 
PASS Forward HTMLBodyElement.onerror to Window 
PASS Set HTMLFrameSetElement.onerror 
PASS Enumerate HTMLFrameSetElement.onerror 
PASS Reflect HTMLFrameSetElement.onerror 
PASS Forward HTMLFrameSetElement.onerror to Window 
PASS Set HTMLBodyElement.onfocus 
PASS Enumerate HTMLBodyElement.onfocus 
PASS Reflect HTMLBodyElement.onfocus 
PASS Forward HTMLBodyElement.onfocus to Window 
PASS Set HTMLFrameSetElement.onfocus 
PASS Enumerate HTMLFrameSetElement.onfocus 
PASS Reflect HTMLFrameSetElement.onfocus 
PASS Forward HTMLFrameSetElement.onfocus to Window 
PASS Set HTMLBodyElement.onload 
PASS Enumerate HTMLBodyElement.onload 
PASS Reflect HTMLBodyElement.onload 
PASS Forward HTMLBodyElement.onload to Window 
PASS Set HTMLFrameSetElement.onload 
PASS Enumerate HTMLFrameSetElement.onload 
PASS Reflect HTMLFrameSetElement.onload 
PASS Forward HTMLFrameSetElement.onload to Window 
PASS Set HTMLBodyElement.onscroll 
PASS Enumerate HTMLBodyElement.onscroll 
PASS Reflect HTMLBodyElement.onscroll 
PASS Forward HTMLBodyElement.onscroll to Window 
PASS Set HTMLFrameSetElement.onscroll 
PASS Enumerate HTMLFrameSetElement.onscroll 
PASS Reflect HTMLFrameSetElement.onscroll 
PASS Forward HTMLFrameSetElement.onscroll to Window 

*** Firefox Nightly 105 ***


PASS Set HTMLBodyElement.onblur 
PASS Enumerate HTMLBodyElement.onblur 
PASS Reflect HTMLBodyElement.onblur 
PASS Forward HTMLBodyElement.onblur to Window 
PASS Set HTMLFrameSetElement.onblur 
PASS Enumerate HTMLFrameSetElement.onblur 
PASS Reflect HTMLFrameSetElement.onblur 
PASS Forward HTMLFrameSetElement.onblur to Window 
PASS Set HTMLBodyElement.onerror 
PASS Enumerate HTMLBodyElement.onerror 
PASS Reflect HTMLBodyElement.onerror 
PASS Forward HTMLBodyElement.onerror to Window 
PASS Set HTMLFrameSetElement.onerror 
PASS Enumerate HTMLFrameSetElement.onerror 
PASS Reflect HTMLFrameSetElement.onerror 
PASS Forward HTMLFrameSetElement.onerror to Window 
PASS Set HTMLBodyElement.onfocus 
PASS Enumerate HTMLBodyElement.onfocus 
PASS Reflect HTMLBodyElement.onfocus 
PASS Forward HTMLBodyElement.onfocus to Window 
PASS Set HTMLFrameSetElement.onfocus 
PASS Enumerate HTMLFrameSetElement.onfocus 
PASS Reflect HTMLFrameSetElement.onfocus 
PASS Forward HTMLFrameSetElement.onfocus to Window 
PASS Set HTMLBodyElement.onload 
PASS Enumerate HTMLBodyElement.onload 
PASS Reflect HTMLBodyElement.onload 
PASS Forward HTMLBodyElement.onload to Window 
PASS Set HTMLFrameSetElement.onload 
PASS Enumerate HTMLFrameSetElement.onload 
PASS Reflect HTMLFrameSetElement.onload 
PASS Forward HTMLFrameSetElement.onload to Window 
PASS Set HTMLBodyElement.onscroll 
PASS Enumerate HTMLBodyElement.onscroll 
PASS Reflect HTMLBodyElement.onscroll 
PASS Forward HTMLBodyElement.onscroll to Window 
PASS Set HTMLFrameSetElement.onscroll 
PASS Enumerate HTMLFrameSetElement.onscroll 
PASS Reflect HTMLFrameSetElement.onscroll 
PASS Forward HTMLFrameSetElement.onscroll to Window 

*** Safari Technology Preview 151 ***

PASS Set HTMLBodyElement.onblur 
FAIL Enumerate HTMLBodyElement.onblur assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onblur 
PASS Forward HTMLBodyElement.onblur to Window 
PASS Set HTMLFrameSetElement.onblur 
FAIL Enumerate HTMLFrameSetElement.onblur assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onblur 
PASS Forward HTMLFrameSetElement.onblur to Window 
PASS Set HTMLBodyElement.onerror 
FAIL Enumerate HTMLBodyElement.onerror assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onerror 
PASS Forward HTMLBodyElement.onerror to Window 
PASS Set HTMLFrameSetElement.onerror 
FAIL Enumerate HTMLFrameSetElement.onerror assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onerror 
PASS Forward HTMLFrameSetElement.onerror to Window 
PASS Set HTMLBodyElement.onfocus 
FAIL Enumerate HTMLBodyElement.onfocus assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onfocus 
PASS Forward HTMLBodyElement.onfocus to Window 
PASS Set HTMLFrameSetElement.onfocus 
FAIL Enumerate HTMLFrameSetElement.onfocus assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onfocus 
PASS Forward HTMLFrameSetElement.onfocus to Window 
PASS Set HTMLBodyElement.onload 
FAIL Enumerate HTMLBodyElement.onload assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onload 
PASS Forward HTMLBodyElement.onload to Window 
PASS Set HTMLFrameSetElement.onload 
FAIL Enumerate HTMLFrameSetElement.onload assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onload 
PASS Forward HTMLFrameSetElement.onload to Window 
PASS Set HTMLBodyElement.onscroll 
FAIL Enumerate HTMLBodyElement.onscroll assert_true: expected true got undefined
PASS Reflect HTMLBodyElement.onscroll 
PASS Forward HTMLBodyElement.onscroll to Window 
PASS Set HTMLFrameSetElement.onscroll 
FAIL Enumerate HTMLFrameSetElement.onscroll assert_true: expected true got undefined
PASS Reflect HTMLFrameSetElement.onscroll 
PASS Forward HTMLFrameSetElement.onscroll to Window 

___________

Just wanted to share updated test results. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892871</commentid>
    <comment_count>2</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-08-21 19:48:12 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/3433</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892874</commentid>
    <comment_count>3</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-08-21 19:55:48 -0700</bug_when>
    <thetext>Was running into some collisions with another pull request. Just posted my fix over here:

https://bugs.webkit.org/show_bug.cgi?id=244178</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1894153</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2022-08-26 18:37:03 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 244178 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>461741</attachid>
            <date>2022-08-19 15:11:38 -0700</date>
            <delta_ts>2022-08-19 15:11:38 -0700</delta_ts>
            <desc>Test Case from Chromium Patch</desc>
            <filename>Test.html</filename>
            <type>text/html</type>
            <size>53836</size>
            <attacher name="Ahmad Saleem">ahmad.saleem792</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cjx0aXRsZT5IVE1MQm9keUVsZW1lbnQgYW5kIEhUTUxGcmFtZVNldEVs
ZW1lbnQgZXZlbnQgaGFuZGxlciB0ZXN0PC90aXRsZT4KPHNjcmlwdD4KKGZ1bmN0aW9uICgpCnsK
ICAgIHZhciBkZWJ1ZyA9IGZhbHNlOwogICAgLy8gZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vjb25k
cywgdGVzdCBjYW4gb3ZlcnJpZGUgaWYgbmVlZGVkCiAgICB2YXIgc2V0dGluZ3MgPSB7CiAgICAg
IG91dHB1dDp0cnVlLAogICAgICB0aW1lb3V0OjUwMDAsCiAgICAgIHRlc3RfdGltZW91dDoyMDAw
CiAgICB9OwogICAgdmFyIHhodG1sX25zID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
OwogICAgLy8gc2NyaXB0X3ByZWZpeCBpcyB1c2VkIGJ5IE91dHB1dC5wcm90b3R5cGUuc2hvd19y
ZXN1bHRzKCkgdG8gZmlndXJlIG91dAogICAgLy8gd2hlcmUgdG8gZ2V0IHRlc3RoYXJuZXNzLmNz
cyBmcm9tLiAgSXQncyBlbmNsb3NlZCBpbiBhbiBleHRyYSBjbG9zdXJlIHRvCiAgICAvLyBub3Qg
cG9sbHV0ZSB0aGUgbGlicmFyeSdzIG5hbWVzcGFjZSB3aXRoIHZhcmlhYmxlcyBsaWtlICJzcmMi
LgogICAgdmFyIHNjcmlwdF9wcmVmaXggPSBudWxsOwogICAgKGZ1bmN0aW9uICgpCiAgICB7CiAg
ICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0
Iik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKQogICAg
ICAgIHsKICAgICAgICAgICAgaWYgKHNjcmlwdHNbaV0uc3JjKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZSBpZiAoc2NyaXB0c1tpXS5ocmVmKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAvL1NWRyBjYXNlCiAgICAgICAgICAgICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5ocmVm
LmJhc2VWYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNyYyAmJiBzcmMuc2xpY2Uo
c3JjLmxlbmd0aCAtICJ0ZXN0aGFybmVzcy5qcyIubGVuZ3RoKSA9PT0gInRlc3RoYXJuZXNzLmpz
IikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2NyaXB0X3ByZWZpeCA9IHNyYy5zbGlj
ZSgwLCBzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpOwogICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KSgpOwogICAgLyoKICAgICAq
IEFQSSBmdW5jdGlvbnMKICAgICAqLwogICAgdmFyIG5hbWVfY291bnRlciA9IDA7CiAgICBmdW5j
dGlvbiBuZXh0X2RlZmF1bHRfbmFtZSgpCiAgICB7CiAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1l
bnQudGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cwog
ICAgICAgIHZhciBwcmVmaXggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUi
KS5sZW5ndGggPiAwID8KICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdLmZpcnN0Q2hpbGQuZGF0YSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAiVW50aXRsZWQiOwogICAgICAgIHZhciBzdWZmaXggPSBuYW1lX2NvdW50ZXIg
PiAwID8gIiAiICsgbmFtZV9jb3VudGVyIDogIiI7CiAgICAgICAgbmFtZV9jb3VudGVyKys7CiAg
ICAgICAgcmV0dXJuIHByZWZpeCArIHN1ZmZpeDsKICAgIH0KICAgIGZ1bmN0aW9uIHRlc3QoZnVu
YywgbmFtZSwgcHJvcGVydGllcykKICAgIHsKICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/
IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOwogICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzID8gcHJvcGVydGllcyA6IHt9OwogICAgICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRl
c3RfbmFtZSwgcHJvcGVydGllcyk7CiAgICAgICAgdGVzdF9vYmouc3RlcChmdW5jKTsKICAgICAg
ICBpZiAodGVzdF9vYmouc3RhdHVzID09PSB0ZXN0X29iai5OT1RSVU4pIHsKICAgICAgICAgICAg
dGVzdF9vYmouZG9uZSgpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFzeW5jX3Rlc3Qo
bmFtZSwgcHJvcGVydGllcykKICAgIHsKICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5h
bWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOwogICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVz
ID8gcHJvcGVydGllcyA6IHt9OwogICAgICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3Rf
bmFtZSwgcHJvcGVydGllcyk7CiAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOwogICAgfQogICAgZnVu
Y3Rpb24gc2V0dXAoZnVuY19vcl9wcm9wZXJ0aWVzLCBtYXliZV9wcm9wZXJ0aWVzKQogICAgewog
ICAgICAgIHZhciBmdW5jID0gbnVsbDsKICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9OwogICAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICAgIGZ1bmMgPSBmdW5j
X29yX3Byb3BlcnRpZXM7CiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBtYXliZV9wcm9wZXJ0aWVz
OwogICAgICAgIH0gZWxzZSBpZiAoZnVuY19vcl9wcm9wZXJ0aWVzIGluc3RhbmNlb2YgRnVuY3Rp
b24pewogICAgICAgICAgICBmdW5jID0gZnVuY19vcl9wcm9wZXJ0aWVzOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBmdW5jX29yX3Byb3BlcnRpZXM7CiAgICAgICAg
fQogICAgICAgIHRlc3RzLnNldHVwKGZ1bmMsIHByb3BlcnRpZXMpOwogICAgICAgIG91dHB1dC5z
ZXR1cChwcm9wZXJ0aWVzKTsKICAgIH0KICAgIGZ1bmN0aW9uIGRvbmUoKSB7CiAgICAgICAgdGVz
dHMuZW5kX3dhaXQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFy
Z3MpIHsKICAgICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4WzBdOwogICAgICAgICAgICAgICAgICAg
IHRlc3QoZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgeC5zbGljZSgxKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9LCBuYW1lKTsKICAgICAgICAgICAgICAgIH0pOwogICAgfQogICAgZnVu
Y3Rpb24gb25fZXZlbnQob2JqZWN0LCBldmVudCwgY2FsbGJhY2spCiAgICB7CiAgICAgIG9iamVj
dC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgZmFsc2UpOwogICAgfQogICAgZXhw
b3NlKHRlc3QsICd0ZXN0Jyk7CiAgICBleHBvc2UoYXN5bmNfdGVzdCwgJ2FzeW5jX3Rlc3QnKTsK
ICAgIGV4cG9zZShnZW5lcmF0ZV90ZXN0cywgJ2dlbmVyYXRlX3Rlc3RzJyk7CiAgICBleHBvc2Uo
c2V0dXAsICdzZXR1cCcpOwogICAgZXhwb3NlKGRvbmUsICdkb25lJyk7CiAgICBleHBvc2Uob25f
ZXZlbnQsICdvbl9ldmVudCcpOwogICAgLyoKICAgICAqIFJldHVybiBhIHN0cmluZyB0cnVuY2F0
ZWQgdG8gdGhlIGdpdmVuIGxlbmd0aCwgd2l0aCAuLi4gYWRkZWQgYXQgdGhlIGVuZAogICAgICog
aWYgaXQgd2FzIGxvbmdlci4KICAgICAqLwogICAgZnVuY3Rpb24gdHJ1bmNhdGUocywgbGVuKQog
ICAgewogICAgICAgIGlmIChzLmxlbmd0aCA+IGxlbikgewogICAgICAgICAgICByZXR1cm4gcy5z
dWJzdHJpbmcoMCwgbGVuIC0gMykgKyAiLi4uIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHM7
CiAgICB9CiAgICBmdW5jdGlvbiBmb3JtYXRfc3RyaW5nKHN0cikgewogICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMzI7IGkrKykgewogICAgICAgICAgICB2YXIgcmVwbGFjZSA9ICJcXCI7CiAg
ICAgICAgICAgIHN3aXRjaCAoaSkgewogICAgICAgICAgICBjYXNlIDA6IHJlcGxhY2UgKz0gIjAi
OyBicmVhazsKICAgICAgICAgICAgY2FzZSAxOiByZXBsYWNlICs9ICJ4MDEiOyBicmVhazsKICAg
ICAgICAgICAgY2FzZSAyOiByZXBsYWNlICs9ICJ4MDIiOyBicmVhazsKICAgICAgICAgICAgY2Fz
ZSAzOiByZXBsYWNlICs9ICJ4MDMiOyBicmVhazsKICAgICAgICAgICAgY2FzZSA0OiByZXBsYWNl
ICs9ICJ4MDQiOyBicmVhazsKICAgICAgICAgICAgY2FzZSA1OiByZXBsYWNlICs9ICJ4MDUiOyBi
cmVhazsKICAgICAgICAgICAgY2FzZSA2OiByZXBsYWNlICs9ICJ4MDYiOyBicmVhazsKICAgICAg
ICAgICAgY2FzZSA3OiByZXBsYWNlICs9ICJ4MDciOyBicmVhazsKICAgICAgICAgICAgY2FzZSA4
OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgOTogcmVwbGFjZSArPSAi
dCI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDEwOiByZXBsYWNlICs9ICJuIjsgYnJlYWs7CiAg
ICAgICAgICAgIGNhc2UgMTE6IHJlcGxhY2UgKz0gInYiOyBicmVhazsKICAgICAgICAgICAgY2Fz
ZSAxMjogcmVwbGFjZSArPSAiZiI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDEzOiByZXBsYWNl
ICs9ICJyIjsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJy
ZWFrOwogICAgICAgICAgICBjYXNlIDE1OiByZXBsYWNlICs9ICJ4MGYiOyBicmVhazsKICAgICAg
ICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAieDEwIjsgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug
MTc6IHJlcGxhY2UgKz0gIngxMSI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDE4OiByZXBsYWNl
ICs9ICJ4MTIiOyBicmVhazsKICAgICAgICAgICAgY2FzZSAxOTogcmVwbGFjZSArPSAieDEzIjsg
YnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjA6IHJlcGxhY2UgKz0gIngxNCI7IGJyZWFrOwogICAg
ICAgICAgICBjYXNlIDIxOiByZXBsYWNlICs9ICJ4MTUiOyBicmVhazsKICAgICAgICAgICAgY2Fz
ZSAyMjogcmVwbGFjZSArPSAieDE2IjsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjM6IHJlcGxh
Y2UgKz0gIngxNyI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDI0OiByZXBsYWNlICs9ICJ4MTgi
OyBicmVhazsKICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSArPSAieDE5IjsgYnJlYWs7CiAg
ICAgICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOwogICAgICAgICAgICBj
YXNlIDI3OiByZXBsYWNlICs9ICJ4MWIiOyBicmVhazsKICAgICAgICAgICAgY2FzZSAyODogcmVw
bGFjZSArPSAieDFjIjsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjk6IHJlcGxhY2UgKz0gIngx
ZCI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDMwOiByZXBsYWNlICs9ICJ4MWUiOyBicmVhazsK
ICAgICAgICAgICAgY2FzZSAzMTogcmVwbGFjZSArPSAieDFmIjsgYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNv
ZGUoaSksICJnIiksIHJlcGxhY2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyLnJlcGxh
Y2UoLyIvZywgJ1xcIicpCiAgICB9CiAgICAvKgogICAgICogQ29udmVydCBhIHZhbHVlIHRvIGEg
bmljZSwgaHVtYW4tcmVhZGFibGUgc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZvcm1hdF92
YWx1ZSh2YWwpCiAgICB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAiWyIgKyB2YWwubWFwKGZvcm1hdF92YWx1ZSkuam9pbigiLCAi
KSArICJdIjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKQogICAgICAgIHsK
ICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICByZXR1cm4gJyInICsgZm9ybWF0X3N0
cmluZyh2YWwpICsgJyInOwogICAgICAgIGNhc2UgImJvb2xlYW4iOgogICAgICAgIGNhc2UgInVu
ZGVmaW5lZCI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTsKICAgICAgICBjYXNlICJu
dW1iZXIiOgogICAgICAgICAgICAvLyBJbiBKYXZhU2NyaXB0LCAtMCA9PT0gMCBhbmQgU3RyaW5n
KC0wKSA9PSAiMCIsIHNvIHdlIGhhdmUgdG8KICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlLgog
ICAgICAgICAgICBpZiAodmFsID09PSAtMCAmJiAxL3ZhbCA9PT0gLUluZmluaXR5KQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gIi0wIjsKICAgICAgICAgICAgfQogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHZhbCk7CiAgICAgICAgY2FzZSAib2JqZWN0IjoKICAgICAgICAg
ICAgaWYgKHZhbCA9PT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
ICJudWxsIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgTm9kZSBv
YmplY3RzLCBzaW5jZSB0aG9zZSBjb21lIHVwIGEgbG90IGluIG15IHRlc3RzLiAgSQogICAgICAg
ICAgICAvLyBpZ25vcmUgbmFtZXNwYWNlcy4gIEkgdXNlIGR1Y2stdHlwaW5nIGluc3RlYWQgb2Yg
aW5zdGFuY2VvZiwgYmVjYXVzZQogICAgICAgICAgICAvLyBpbnN0YW5jZW9mIGRvZXNuJ3Qgd29y
ayBpZiB0aGUgbm9kZSBpcyBmcm9tIGFub3RoZXIgd2luZG93IChsaWtlIGFuCiAgICAgICAgICAg
IC8vIGlmcmFtZSdzIGNvbnRlbnRXaW5kb3cpOgogICAgICAgICAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTUKICAgICAgICAgICAgaWYgKCJu
b2RlVHlwZSIgaW4gdmFsCiAgICAgICAgICAgICYmICJub2RlTmFtZSIgaW4gdmFsCiAgICAgICAg
ICAgICYmICJub2RlVmFsdWUiIGluIHZhbAogICAgICAgICAgICAmJiAiY2hpbGROb2RlcyIgaW4g
dmFsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5ub2RlVHlwZSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6
CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9ICI8IiArIHZhbC50YWdOYW1lLnRvTG93ZXJD
YXNlKCk7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwuYXR0cmli
dXRlcy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCArPSAiICIgKyB2YWwuYXR0cmlidXRlc1tpXS5uYW1lICsgJz0iJyArIHZhbC5h
dHRyaWJ1dGVzW2ldLnZhbHVlICsgJyInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICByZXQgKz0gIj4iICsgdmFsLmlubmVySFRNTCArICI8LyIgKyB2YWwudGFnTmFt
ZS50b0xvd2VyQ2FzZSgpICsgIj4iOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAiRWxlbWVu
dCBub2RlICIgKyB0cnVuY2F0ZShyZXQsIDYwKTsKICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5U
RVhUX05PREU6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUZXh0IG5vZGUgIicgKyB0cnVu
Y2F0ZSh2YWwuZGF0YSwgNjApICsgJyInOwogICAgICAgICAgICAgICAgY2FzZSBOb2RlLlBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlByb2Nl
c3NpbmdJbnN0cnVjdGlvbiBub2RlIHdpdGggdGFyZ2V0ICIgKyBmb3JtYXRfdmFsdWUodHJ1bmNh
dGUodmFsLnRhcmdldCwgNjApKSArICIgYW5kIGRhdGEgIiArIGZvcm1hdF92YWx1ZSh0cnVuY2F0
ZSh2YWwuZGF0YSwgNjApKTsKICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb21tZW50IG5vZGUgPCEtLSIgKyB0cnVuY2F0
ZSh2YWwuZGF0YSwgNjApICsgIi0tPiI7CiAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1F
TlRfTk9ERToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50IG5vZGUgd2l0aCAi
ICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxID8g
IiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7CiAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1F
TlRfVFlQRV9OT0RFOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAiRG9jdW1lbnRUeXBlIG5v
ZGUiOwogICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAiICsg
dmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxID8gIiBj
aGlsZCIgOiAiIGNoaWxkcmVuIik7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiTm9kZSBvYmplY3Qgb2YgdW5rbm93biB0eXBlIjsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZGVm
YXVsdAogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsICsgJyAi
JyArIHRydW5jYXRlKFN0cmluZyh2YWwpLCA2MCkgKyAnIic7CiAgICAgICAgfQogICAgfQogICAg
ZXhwb3NlKGZvcm1hdF92YWx1ZSwgImZvcm1hdF92YWx1ZSIpOwogICAgLyoKICAgICAqIEFzc2Vy
dGlvbnMKICAgICAqLwogICAgZnVuY3Rpb24gYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlv
bikKICAgIHsKICAgICAgICBhc3NlcnQoYWN0dWFsID09PSB0cnVlLCAiYXNzZXJ0X3RydWUiLCBk
ZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdHJ1
ZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsKICAgIH07CiAgICBleHBvc2UoYXNz
ZXJ0X3RydWUsICJhc3NlcnRfdHJ1ZSIpOwogICAgZnVuY3Rpb24gYXNzZXJ0X2ZhbHNlKGFjdHVh
bCwgZGVzY3JpcHRpb24pCiAgICB7CiAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gZmFsc2UsICJh
c3NlcnRfZmFsc2UiLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImV4cGVjdGVkIGZhbHNlIGdvdCAke2FjdHVhbH0iLCB7YWN0dWFsOmFjdHVhbH0pOwogICAg
fTsKICAgIGV4cG9zZShhc3NlcnRfZmFsc2UsICJhc3NlcnRfZmFsc2UiKTsKICAgIGZ1bmN0aW9u
IHNhbWVfdmFsdWUoeCwgeSkgewogICAgICAgIGlmICh5ICE9PSB5KQogICAgICAgIHsKICAgICAg
ICAgICAgLy9OYU4gY2FzZQogICAgICAgICAgICByZXR1cm4geCAhPT0geDsKICAgICAgICB9CiAg
ICAgICAgZWxzZSBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7CiAgICAgICAgICAgIC8vRGlzdGlu
Z3Vpc2ggKzAgYW5kIC0wCiAgICAgICAgICAgIHJldHVybiAxL3ggPT09IDEveTsKICAgICAgICB9
CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgLy90eXBpY2FsIGNhc2UKICAgICAg
ICAgICAgcmV0dXJuIHggPT09IHk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0
X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKICAgIHsKICAgICAgICAgLyoK
ICAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUgZXF1YWwgb3IgdHdvIG9iamVj
dHMKICAgICAgICAgICogYXJlIHRoZSBzYW1lIG9iamVjdAogICAgICAgICAgKi8KICAgICAgICBh
c3NlcnQoc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwgImFzc2VydF9lcXVhbHMiLCBkZXNj
cmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0
dWFsfSk7CiAgICB9OwogICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRfZXF1YWxzIik7
CiAgICBmdW5jdGlvbiBhc3NlcnRfbm90X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlw
dGlvbikKICAgIHsKICAgICAgICAgLyoKICAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZl
cyBhcmUgdW5lcXVhbCBvciB0d28gb2JqZWN0cwogICAgICAgICAgKiBhcmUgZGlmZmVyZW50IG9i
amVjdHMKICAgICAgICAgICovCiAgICAgICAgYXNzZXJ0KCFzYW1lX3ZhbHVlKGFjdHVhbCwgZXhw
ZWN0ZWQpLCAiYXNzZXJ0X25vdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgZGlzYWxsb3dlZCB2YWx1ZSAke2Fj
dHVhbH0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Fj
dHVhbDphY3R1YWx9KTsKICAgIH07CiAgICBleHBvc2UoYXNzZXJ0X25vdF9lcXVhbHMsICJhc3Nl
cnRfbm90X2VxdWFscyIpOwogICAgZnVuY3Rpb24gYXNzZXJ0X2luX2FycmF5KGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKQogICAgewogICAgICAgIGFzc2VydChleHBlY3RlZC5pbmRleE9m
KGFjdHVhbCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBkZXNjcmlwdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgJHthY3R1YWx9IG5v
dCBpbiBhcnJheSAke2V4cGVjdGVkfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWwsIGV4cGVjdGVkOmV4cGVjdGVkfSk7CiAgICB9
CiAgICBleHBvc2UoYXNzZXJ0X2luX2FycmF5LCAiYXNzZXJ0X2luX2FycmF5Iik7CiAgICBmdW5j
dGlvbiBhc3NlcnRfb2JqZWN0X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikK
ICAgIHsKICAgICAgICAgLy9UaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIGEgZ3JlYXQgZGVhbAog
ICAgICAgICBmdW5jdGlvbiBjaGVja19lcXVhbChleHBlY3RlZCwgYWN0dWFsLCBzdGFjaykKICAg
ICAgICAgewogICAgICAgICAgICAgc3RhY2sucHVzaChhY3R1YWwpOwogICAgICAgICAgICAgdmFy
IHA7CiAgICAgICAgICAgICBmb3IgKHAgaW4gYWN0dWFsKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGFzc2VydChleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShwKSwgImFzc2VydF9vYmpl
Y3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0pOwog
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsW3BdID09PSAib2JqZWN0IiAmJiBhY3R1
YWxbcF0gIT09IG51bGwpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suaW5kZXhPZihhY3R1YWxbcF0pID09PSAtMSkKICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZXF1YWwoYWN0dWFsW3BdLCBleHBlY3Rl
ZFtwXSwgc3RhY2spOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIGFzc2VydChhY3R1YWxbcF0gPT09IGV4cGVjdGVkW3BdLCAiYXNzZXJ0X29iamVjdF9lcXVh
bHMiLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGdvdCAk
e2FjdHVhbH0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHAgaW4gZXhwZWN0
ZWQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGFjdHVhbC5oYXNPd25Q
cm9wZXJ0eShwKSwKICAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF9vYmplY3RfZXF1YWxz
IiwgZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0
eSAke3B9IG1pc3NpbmciLCB7cDpwfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGFj
ay5wb3AoKTsKICAgICAgICAgfQogICAgICAgICBjaGVja19lcXVhbChhY3R1YWwsIGV4cGVjdGVk
LCBbXSk7CiAgICB9OwogICAgZXhwb3NlKGFzc2VydF9vYmplY3RfZXF1YWxzLCAiYXNzZXJ0X29i
amVjdF9lcXVhbHMiKTsKICAgIGZ1bmN0aW9uIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsLCBl
eHBlY3RlZCwgZGVzY3JpcHRpb24pCiAgICB7CiAgICAgICAgYXNzZXJ0KGFjdHVhbC5sZW5ndGgg
PT09IGV4cGVjdGVkLmxlbmd0aCwKICAgICAgICAgICAgICAgImFzc2VydF9hcnJheV9lcXVhbHMi
LCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgImxlbmd0aHMgZGlmZmVyLCBleHBlY3RlZCAk
e2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwKICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVj
dGVkLmxlbmd0aCwgYWN0dWFsOmFjdHVhbC5sZW5ndGh9KTsKICAgICAgICBmb3IgKHZhciBpPTA7
IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBhc3NlcnQoYWN0
dWFsLmhhc093blByb3BlcnR5KGkpID09PSBleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSwKICAg
ICAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sCiAgICAg
ICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgcHJvcGVydHkgZXhwZWN0ZWQgdG8gYmUgJGV4
cGVjdGVkIGJ1dCB3YXMgJGFjdHVhbCIsCiAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3Rl
ZDpleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJtaXNzaW5nIiwKICAg
ICAgICAgICAgICAgICAgIGFjdHVhbDphY3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPyAicHJlc2Vu
dCIgOiAibWlzc2luZyJ9KTsKICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkW2ldID09PSBhY3R1
YWxbaV0sCiAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0
aW9uLAogICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7aX0sIGV4cGVjdGVkICR7ZXhwZWN0
ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKICAgICAgICAgICAgICAgICAgIHtpOmksIGV4cGVjdGVk
OmV4cGVjdGVkW2ldLCBhY3R1YWw6YWN0dWFsW2ldfSk7CiAgICAgICAgfQogICAgfQogICAgZXhw
b3NlKGFzc2VydF9hcnJheV9lcXVhbHMsICJhc3NlcnRfYXJyYXlfZXF1YWxzIik7CiAgICBmdW5j
dGlvbiBhc3NlcnRfYXBwcm94X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBlcHNpbG9uLCBkZXNj
cmlwdGlvbikKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2
ZSBudW1iZXJzIGFyZSBlcXVhbCB3aXRoaW5nICsvLSBlcHNpbG9uCiAgICAgICAgICovCiAgICAg
ICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLAogICAgICAgICAgICAgICAiYXNz
ZXJ0X2FwcHJveF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgImV4cGVjdGVk
IGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCiAgICAgICAgICAgICAgIHt0eXBl
X2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7CiAgICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAt
IGV4cGVjdGVkKSA8PSBlcHNpbG9uLAogICAgICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVh
bHMiLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9ICsv
LSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwKICAgICAgICAgICAgICAge2V4cGVjdGVk
OmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBlcHNpbG9uOmVwc2lsb259KTsKICAgIH07CiAgICBl
eHBvc2UoYXNzZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2VxdWFscyIpOwogICAg
ZnVuY3Rpb24gYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlv
bikgewogICAgICAgIC8qCiAgICAgICAgICogVGVzdCBpZiBhIHN0cmluZyAoYWN0dWFsKSBtYXRj
aGVzIGEgcmVnZXhwIChleHBlY3RlZCkKICAgICAgICAgKi8KICAgICAgICBhc3NlcnQoZXhwZWN0
ZWQudGVzdChhY3R1YWwpLAogICAgICAgICAgICAgICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRl
c2NyaXB0aW9uLAogICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAk
e2FjdHVhbH0iLAogICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1
YWx9KTsKICAgIH0KICAgIGV4cG9zZShhc3NlcnRfcmVnZXhwX21hdGNoLCAiYXNzZXJ0X3JlZ2V4
cF9tYXRjaCIpOwogICAgZnVuY3Rpb24gX2Fzc2VydF9vd25fcHJvcGVydHkobmFtZSkgewogICAg
ICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQog
ICAgICAgIHsKICAgICAgICAgICAgYXNzZXJ0KG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0
eV9uYW1lKSwKICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAogICAgICAgICAg
ICAgICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnByb3BlcnR5X25h
bWV9KTsKICAgICAgICB9OwogICAgfQogICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJh
c3NlcnRfZXhpc3RzIiksICJhc3NlcnRfZXhpc3RzIik7CiAgICBleHBvc2UoX2Fzc2VydF9vd25f
cHJvcGVydHkoImFzc2VydF9vd25fcHJvcGVydHkiKSwgImFzc2VydF9vd25fcHJvcGVydHkiKTsK
ICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVz
Y3JpcHRpb24pCiAgICB7CiAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJv
cGVydHlfbmFtZSksCiAgICAgICAgICAgICAgICJhc3NlcnRfbm90X2V4aXN0cyIsIGRlc2NyaXB0
aW9uLAogICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9IGZvdW5kIiwge3A6
cHJvcGVydHlfbmFtZX0pOwogICAgfTsKICAgIGV4cG9zZShhc3NlcnRfbm90X2V4aXN0cywgImFz
c2VydF9ub3RfZXhpc3RzIik7CiAgICBmdW5jdGlvbiBfYXNzZXJ0X2luaGVyaXRzKG5hbWUpIHsK
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRp
b24pCiAgICAgICAgewogICAgICAgICAgICBhc3NlcnQodHlwZW9mIG9iamVjdCA9PT0gIm9iamVj
dCIsCiAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAg
ICAgICJwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAgICAgICAgICAgIGFzc2Vy
dCgiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCwKICAgICAgICAgICAgICAgICAgIG5hbWUsIGRl
c2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIGFuIG9iamVj
dCBidXQgaGFzIG5vIGhhc093blByb3BlcnR5IG1ldGhvZCIpOwogICAgICAgICAgICBhc3NlcnQo
IW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwKICAgICAgICAgICAgICAgICAg
IG5hbWUsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZm91
bmQgb24gb2JqZWN0IGV4cGVjdGVkIGluIHByb3RvdHlwZSBjaGFpbiIsCiAgICAgICAgICAgICAg
ICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7CiAgICAgICAgICAgIGFzc2VydChwcm9wZXJ0eV9uYW1l
IGluIG9iamVjdCwKICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAogICAgICAg
ICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIs
CiAgICAgICAgICAgICAgICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7CiAgICAgICAgfTsKICAgIH0K
ICAgIGV4cG9zZShfYXNzZXJ0X2luaGVyaXRzKCJhc3NlcnRfaW5oZXJpdHMiKSwgImFzc2VydF9p
bmhlcml0cyIpOwogICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJpdHMoImFzc2VydF9pZGxfYXR0cmli
dXRlIiksICJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIpOwogICAgZnVuY3Rpb24gYXNzZXJ0X3JlYWRv
bmx5KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCiAgICB7CiAgICAgICAgIHZh
ciBpbml0aWFsX3ZhbHVlID0gb2JqZWN0W3Byb3BlcnR5X25hbWVdOwogICAgICAgICB0cnkgewog
ICAgICAgICAgICAgLy9Ob3RlIHRoYXQgdGhpcyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMgaW4gdGhl
IGNhc2Ugd2hlcmUKICAgICAgICAgICAgIC8vdGhlIHByb3BlcnR5IGhhcyBQdXRGb3J3YXJkcwog
ICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVdID0gaW5pdGlhbF92YWx1ZSArICJhIjsg
Ly9YWFggdXNlIHNvbWUgb3RoZXIgdmFsdWUgaGVyZT8KICAgICAgICAgICAgIGFzc2VydChvYmpl
Y3RbcHJvcGVydHlfbmFtZV0gPT09IGluaXRpYWxfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAg
ImFzc2VydF9yZWFkb25seSIsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICJjaGFu
Z2luZyBwcm9wZXJ0eSAke3B9IHN1Y2NlZWRlZCIsCiAgICAgICAgICAgICAgICAgICAge3A6cHJv
cGVydHlfbmFtZX0pOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewogICAg
ICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVdID0gaW5pdGlhbF92YWx1ZTsKICAgICAgICAg
fQogICAgfTsKICAgIGV4cG9zZShhc3NlcnRfcmVhZG9ubHksICJhc3NlcnRfcmVhZG9ubHkiKTsK
ICAgIGZ1bmN0aW9uIGFzc2VydF90aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pCiAgICB7
CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7CiAgICAg
ICAgICAgIGFzc2VydChmYWxzZSwgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKICAgICAg
ICAgICAgICAgICAgICIke2Z1bmN9IGRpZCBub3QgdGhyb3ciLCB7ZnVuYzpmdW5jfSk7CiAgICAg
ICAgfQogICAgICAgIGNhdGNoKGUpCiAgICAgICAgewogICAgICAgICAgICBpZiAoZSBpbnN0YW5j
ZW9mIEFzc2VydGlvbkVycm9yKSB7CiAgICAgICAgICAgICAgICB0aHJvdyhlKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICJvYmplY3QiKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgIm5hbWUi
IGluIGUgJiYgZS5uYW1lID09IGNvZGUubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAiYXNz
ZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9
IHRocmV3ICR7YWN0dWFsfSAoJHthY3R1YWxfbmFtZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgk
e2V4cGVjdGVkX25hbWV9KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtm
dW5jOmZ1bmMsIGFjdHVhbDplLCBhY3R1YWxfbmFtZTplLm5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDpjb2RlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZTpjb2RlLm5hbWV9KTsKICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7
fTsKICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMuY29kZSA9IHsKICAgICAgICAgICAgICAgIElO
REVYX1NJWkVfRVJSOiAxLAogICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiAz
LAogICAgICAgICAgICAgICAgV1JPTkdfRE9DVU1FTlRfRVJSOiA0LAogICAgICAgICAgICAgICAg
SU5WQUxJRF9DSEFSQUNURVJfRVJSOiA1LAogICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOiA3LAogICAgICAgICAgICAgICAgTk9UX0ZPVU5EX0VSUjogOCwKICAgICAg
ICAgICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiA5LAogICAgICAgICAgICAgICAgSU5WQUxJRF9T
VEFURV9FUlI6IDExLAogICAgICAgICAgICAgICAgU1lOVEFYX0VSUjogMTIsCiAgICAgICAgICAg
ICAgICBJTlZBTElEX01PRElGSUNBVElPTl9FUlI6IDEzLAogICAgICAgICAgICAgICAgTkFNRVNQ
QUNFX0VSUjogMTQsCiAgICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6IDE1LAogICAg
ICAgICAgICAgICAgVFlQRV9NSVNNQVRDSF9FUlI6IDE3LAogICAgICAgICAgICAgICAgU0VDVVJJ
VFlfRVJSOiAxOCwKICAgICAgICAgICAgICAgIE5FVFdPUktfRVJSOiAxOSwKICAgICAgICAgICAg
ICAgIEFCT1JUX0VSUjogMjAsCiAgICAgICAgICAgICAgICBVUkxfTUlTTUFUQ0hfRVJSOiAyMSwK
ICAgICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjogMjIsCiAgICAgICAgICAgICAgICBU
SU1FT1VUX0VSUjogMjMsCiAgICAgICAgICAgICAgICBJTlZBTElEX05PREVfVFlQRV9FUlI6IDI0
LAogICAgICAgICAgICAgICAgREFUQV9DTE9ORV9FUlI6IDI1LAogICAgICAgICAgICB9W2NvZGVd
OwogICAgICAgICAgICBpZiAocmVxdWlyZWRfcHJvcHMuY29kZSA9PT0gdW5kZWZpbmVkKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3Qg
YnVnOiB1bnJlY29nbml6ZWQgRE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2Vk
IHRvIGFzc2VydF90aHJvd3MoKScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlcXVpcmVk
X3Byb3BzW2NvZGVdID0gcmVxdWlyZWRfcHJvcHMuY29kZTsKICAgICAgICAgICAgLy9VbmNvbW1l
bnQgdGhpcyB3aGVuIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBldmVyeSBicm93c2VyCiAgICAgICAg
ICAgIC8vYWN0dWFsbHkgaW1wbGVtZW50cyB0aGUgc3BlYzsgb3RoZXJ3aXNlIGl0IGp1c3QgY3Jl
YXRlcwogICAgICAgICAgICAvL3ppbGxpb25zIG9mIGZhaWx1cmVzLiAgQWxzbyBkbyByZXF1aXJl
ZF9wcm9wcy50eXBlLgogICAgICAgICAgICAvL3JlcXVpcmVkX3Byb3BzLm5hbWUgPSBjb2RlOwog
ICAgICAgICAgICAvLwogICAgICAgICAgICAvL1dlJ2QgbGlrZSB0byB0ZXN0IHRoYXQgZSBpbnN0
YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UsCiAgICAgICAgICAgIC8vYnV0IHdlIGNh
bid0LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB3aW5kb3cgaXQgd2FzIGNyZWF0ZWQKICAg
ICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRl
IGludGVyZmFjZSBvbiBzb21lCiAgICAgICAgICAgIC8vdW5rbm93biBvdGhlciB3aW5kb3cuICBU
T0RPOiBXb3JrIGFyb3VuZCB0aGlzIHNvbWVob3c/CiAgICAgICAgICAgIGFzc2VydCh0eXBlb2Yg
ZSA9PSAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3Jp
cHRpb24sCiAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHdpdGggdHlwZSAk
e3R5cGV9LCBub3QgYW4gb2JqZWN0IiwKICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGU6
ZSwgdHlwZTp0eXBlb2YgZX0pOwogICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlcXVpcmVk
X3Byb3BzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0g
Im9iamVjdCIgJiYgcHJvcCBpbiBlICYmIGVbcHJvcF0gPT0gcmVxdWlyZWRfcHJvcHNbcHJvcF0s
CiAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90IGEgRE9N
RXhjZXB0aW9uICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0byAke2Fj
dHVhbH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IiwKICAgICAgICAgICAgICAgICAgICAgICB7ZnVu
YzpmdW5jLCBlOmUsIHByb3A6cHJvcCwgYWN0dWFsOmVbcHJvcF0sIGV4cGVjdGVkOnJlcXVpcmVk
X3Byb3BzW3Byb3BdfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBleHBvc2Uo
YXNzZXJ0X3Rocm93cywgImFzc2VydF90aHJvd3MiKTsKICAgIGZ1bmN0aW9uIGFzc2VydF91bnJl
YWNoZWQoZGVzY3JpcHRpb24pIHsKICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X3VucmVh
Y2hlZCIsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgIlJlYWNoZWQgdW5yZWFjaGFibGUg
Y29kZSIpOwogICAgfQogICAgZXhwb3NlKGFzc2VydF91bnJlYWNoZWQsICJhc3NlcnRfdW5yZWFj
aGVkIik7CiAgICBmdW5jdGlvbiBUZXN0KG5hbWUsIHByb3BlcnRpZXMpCiAgICB7CiAgICAgICAg
dGhpcy5uYW1lID0gbmFtZTsKICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuTk9UUlVOOwogICAg
ICAgIHRoaXMudGltZW91dF9pZCA9IG51bGw7CiAgICAgICAgdGhpcy5pc19kb25lID0gZmFsc2U7
CiAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHByb3BlcnRpZXMudGltZW91dCA/IHByb3Bl
cnRpZXMudGltZW91dCA6IHNldHRpbmdzLnRlc3RfdGltZW91dDsKICAgICAgICB0aGlzLm1lc3Nh
Z2UgPSBudWxsOwogICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CiAgICAgICAgdGhpcy5zdGVw
cyA9IFtdOwogICAgICAgIHRlc3RzLnB1c2godGhpcyk7CiAgICB9CiAgICBUZXN0LnByb3RvdHlw
ZSA9IHsKICAgICAgICBQQVNTOjAsCiAgICAgICAgRkFJTDoxLAogICAgICAgIFRJTUVPVVQ6MiwK
ICAgICAgICBOT1RSVU46MwogICAgfTsKICAgIFRlc3QucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlv
bihmdW5jLCB0aGlzX29iaikKICAgIHsKICAgICAgICAvL0luIGNhc2UgdGhlIHRlc3QgaGFzIGFs
cmVhZHkgZmFpbGVkCiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSB0aGlzLk5PVFJVTikKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRlc3RzLnN0YXJ0ZWQg
PSB0cnVlOwogICAgICAgIGlmICh0aGlzLnRpbWVvdXRfaWQgPT09IG51bGwpIHsKICAgICAgICAg
ICAgdGhpcy5zZXRfdGltZW91dCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0ZXBzLnB1c2go
ZnVuYyk7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzX29iaiA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHRyeQogICAgICAgIHsK
ICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpCiAgICAgICAgewog
ICAgICAgICAgICAvL1RoaXMgY2FuIGhhcHBlbiBpZiBzb21ldGhpbmcgY2FsbGVkIHN5bmNocm9u
b3VzbHkgaW52b2tlZCBhbm90aGVyCiAgICAgICAgICAgIC8vc3RlcAogICAgICAgICAgICBpZiAo
dGhpcy5zdGF0dXMgIT09IHRoaXMuTk9UUlVOKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLkZB
SUw7CiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGUubWVzc2FnZTsKICAgICAgICAgICAgaWYg
KHR5cGVvZiBlLnN0YWNrICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT0gInN0
cmluZyIpIHsKICAgICAgICAgICAgICAgIC8vVHJ5IHRvIG1ha2UgaXQgbW9yZSBpbmZvcm1hdGl2
ZSBmb3Igc29tZSBleGNlcHRpb25zLCBhdCBsZWFzdAogICAgICAgICAgICAgICAgLy9pbiBHZWNr
byBhbmQgV2ViS2l0LiAgVGhpcyByZXN1bHRzIGluIGEgc3RhY2sgZHVtcCBpbnN0ZWFkIG9mCiAg
ICAgICAgICAgICAgICAvL2p1c3QgZXJyb3JzIGxpa2UgIkNhbm5vdCByZWFkIHByb3BlcnR5ICdw
YXJlbnROb2RlJyBvZiBudWxsIgogICAgICAgICAgICAgICAgLy9vciAicm9vdCBpcyBudWxsIi4g
IE1ha2VzIGl0IGEgbG90IGxvbmdlciwgb2YgY291cnNlLgogICAgICAgICAgICAgICAgdGhpcy5t
ZXNzYWdlICs9ICIoc3RhY2s6ICIgKyBlLnN0YWNrICsgIikiOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHRoaXMuZG9uZSgpOwogICAgICAgICAgICBpZiAoZGVidWcgJiYgZS5jb25zdHJ1Y3Rv
ciAhPT0gQXNzZXJ0aW9uRXJyb3IpIHsKICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9OwogICAgVGVzdC5wcm90b3R5cGUuc3RlcF9mdW5jID0gZnVu
Y3Rpb24oZnVuYywgdGhpc19vYmopCiAgICB7CiAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRoaXM7
CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpCiAgICAgICAgewogICAgICAgICAg
ICB0aGlzX29iaiA9IHRlc3RfdGhpczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkKICAgICAgICB7CiAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5KHRlc3RfdGhpcywg
W2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoCiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CiAgICAgICAgfTsKICAgIH07CiAgICBUZXN0LnByb3Rv
dHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICB2YXIgdGhpc19vYmog
PSB0aGlzOwogICAgICAgIHRoaXMudGltZW91dF9pZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMudGltZW91dF9sZW5ndGgpOwogICAgfTsKICAg
IFRlc3QucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdGhpcy5z
dGF0dXMgPSB0aGlzLlRJTUVPVVQ7CiAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsKICAg
ICAgICB0aGlzLm1lc3NhZ2UgPSAiVGVzdCB0aW1lZCBvdXQiOwogICAgICAgIHRoaXMuZG9uZSgp
OwogICAgfTsKICAgIFRlc3QucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbigpCiAgICB7CiAgICAg
ICAgaWYgKHRoaXMuaXNfZG9uZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAg
ICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRfaWQpOwogICAgICAgIGlmICh0aGlzLnN0YXR1
cyA9PT0gdGhpcy5OT1RSVU4pCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHRo
aXMuUEFTUzsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc19kb25lID0gdHJ1ZTsKICAgICAgICB0
ZXN0cy5yZXN1bHQodGhpcyk7CiAgICB9OwogICAgLyoKICAgICAqIEhhcm5lc3MKICAgICAqLwog
ICAgZnVuY3Rpb24gVGVzdHNTdGF0dXMoKQogICAgewogICAgICAgIHRoaXMuc3RhdHVzID0gbnVs
bDsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxsOwogICAgfQogICAgVGVzdHNTdGF0dXMucHJv
dG90eXBlID0gewogICAgICAgIE9LOjAsCiAgICAgICAgRVJST1I6MSwKICAgICAgICBUSU1FT1VU
OjIKICAgIH07CiAgICBmdW5jdGlvbiBUZXN0cygpCiAgICB7CiAgICAgICAgdGhpcy50ZXN0cyA9
IFtdOwogICAgICAgIHRoaXMubnVtX3BlbmRpbmcgPSAwOwogICAgICAgIHRoaXMucGhhc2VzID0g
ewogICAgICAgICAgICBJTklUSUFMOjAsCiAgICAgICAgICAgIFNFVFVQOjEsCiAgICAgICAgICAg
IEhBVkVfVEVTVFM6MiwKICAgICAgICAgICAgSEFWRV9SRVNVTFRTOjMsCiAgICAgICAgICAgIENP
TVBMRVRFOjQKICAgICAgICB9OwogICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5JTklU
SUFMOwogICAgICAgIC8vQWxsIHRlc3RzIGNhbid0IGJlIGRvbmUgdW50aWwgdGhlIGxvYWQgZXZl
bnQgZmlyZXMKICAgICAgICB0aGlzLmFsbF9sb2FkZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLndh
aXRfZm9yX2ZpbmlzaCA9IGZhbHNlOwogICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3Mg
PSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gc2V0dGluZ3MudGltZW91dDsK
ICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOwogICAgICAgIHRoaXMuc2V0X3RpbWVvdXQo
KTsKICAgICAgICB0aGlzLnN0YXJ0X2NhbGxiYWNrcyA9IFtdOwogICAgICAgIHRoaXMudGVzdF9k
b25lX2NhbGxiYWNrcyA9IFtdOwogICAgICAgIHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tzID0gW107
CiAgICAgICAgdGhpcy5zdGF0dXMgPSBuZXcgVGVzdHNTdGF0dXMoKTsKICAgICAgICB2YXIgdGhp
c19vYmogPSB0aGlzOwogICAgICAgIG9uX2V2ZW50KHdpbmRvdywgImxvYWQiLAogICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXNfb2JqLmFsbF9sb2FkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhp
c19vYmouYWxsX2RvbmUoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc19vYmouY29tcGxldGUoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9OwogICAgfQogICAg
VGVzdHMucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oZnVuYywgcHJvcGVydGllcykKICAgIHsK
ICAgICAgICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFMpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnBoYXNl
IDwgdGhpcy5waGFzZXMuU0VUVVApCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnBoYXNlID0g
dGhpcy5waGFzZXMuU0VUVVA7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIHAgaW4gcHJvcGVy
dGllcykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5
KHApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNbcF0gPSBw
cm9wZXJ0aWVzW3BdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChwcm9wZXJ0
aWVzLnRpbWVvdXQpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0g
cHJvcGVydGllcy50aW1lb3V0OwogICAgICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7CiAgICAg
ICAgfQogICAgICAgIGlmIChwcm9wZXJ0aWVzLmV4cGxpY2l0X2RvbmUpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlm
IChmdW5jKQogICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGZ1bmMoKTsKICAgICAgICAgICAgfSBjYXRjaChlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5FUlJPUjsKICAgICAg
ICAgICAgICAgIHRoaXMuc3RhdHVzLm1lc3NhZ2UgPSBlOwogICAgICAgICAgICB9OwogICAgICAg
IH0KICAgIH07CiAgICBUZXN0cy5wcm90b3R5cGUuc2V0X3RpbWVvdXQgPSBmdW5jdGlvbigpCiAg
ICB7CiAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsKICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy50aW1lb3V0X2lkKTsKICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2Jq
LnRpbWVvdXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMu
dGltZW91dF9sZW5ndGgpOwogICAgfTsKICAgIFRlc3RzLnByb3RvdHlwZS50aW1lb3V0ID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuVElNRU9V
VDsKICAgICAgICB0aGlzLmNvbXBsZXRlKCk7CiAgICB9OwogICAgVGVzdHMucHJvdG90eXBlLmVu
ZF93YWl0ID0gZnVuY3Rpb24oKQogICAgewogICAgICAgIHRoaXMud2FpdF9mb3JfZmluaXNoID0g
ZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuYWxsX2RvbmUoKSkgewogICAgICAgICAgICB0aGlzLmNv
bXBsZXRlKCk7CiAgICAgICAgfQogICAgfTsKICAgIFRlc3RzLnByb3RvdHlwZS5wdXNoID0gZnVu
Y3Rpb24odGVzdCkKICAgIHsKICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLkhB
VkVfVEVTVFMpIHsKICAgICAgICAgICAgdGhpcy5ub3RpZnlfc3RhcnQoKTsKICAgICAgICB9CiAg
ICAgICAgdGhpcy5udW1fcGVuZGluZysrOwogICAgICAgIHRoaXMudGVzdHMucHVzaCh0ZXN0KTsK
ICAgIH07CiAgICBUZXN0cy5wcm90b3R5cGUuYWxsX2RvbmUgPSBmdW5jdGlvbigpIHsKICAgICAg
ICByZXR1cm4gKHRoaXMuYWxsX2xvYWRlZCAmJiB0aGlzLm51bV9wZW5kaW5nID09PSAwICYmCiAg
ICAgICAgICAgICAgICAhdGhpcy53YWl0X2Zvcl9maW5pc2ggJiYgIXRoaXMucHJvY2Vzc2luZ19j
YWxsYmFja3MpOwogICAgfTsKICAgIFRlc3RzLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkg
ewogICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTOwogICAgICAgIHRo
aXMubm90aWZ5X3N0YXJ0KCk7CiAgICB9OwogICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9zdGFy
dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CiAgICAgICAgZm9y
RWFjaCAodGhpcy5zdGFydF9jYWxsYmFja3MsCiAgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2Fs
bGJhY2spCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0
aGlzX29iai5wcm9wZXJ0aWVzKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICBmb3JFYWNo
KGFuY2VzdG9yX3dpbmRvd3MoKSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYody5zdGFydF9jYWxsYmFjaykKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnN0YXJ0X2NhbGxiYWNr
KHRoaXNfb2JqLnByb3BlcnRpZXMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIGNhdGNoKGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyhlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgfTsKICAgIFRlc3RzLnByb3RvdHlw
ZS5yZXN1bHQgPSBmdW5jdGlvbih0ZXN0KQogICAgewogICAgICAgIGlmICh0aGlzLnBoYXNlID4g
dGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgIH0KICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTOwog
ICAgICAgIHRoaXMubnVtX3BlbmRpbmctLTsKICAgICAgICB0aGlzLm5vdGlmeV9yZXN1bHQodGVz
dCk7CiAgICB9OwogICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9yZXN1bHQgPSBmdW5jdGlvbih0
ZXN0KSB7CiAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsKICAgICAgICB0aGlzLnByb2Nlc3Np
bmdfY2FsbGJhY2tzID0gdHJ1ZTsKICAgICAgICBmb3JFYWNoKHRoaXMudGVzdF9kb25lX2NhbGxi
YWNrcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRlc3QsIHRoaXNfb2JqKTsKICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgIGZvckVhY2goYW5jZXN0b3Jfd2luZG93cygpLAogICAgICAgICAg
ICAgICAgZnVuY3Rpb24odykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBp
Zih3LnJlc3VsdF9jYWxsYmFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3LnJlc3VsdF9jYWxsYmFjayh0ZXN0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gZmFsc2U7
CiAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzX29iai5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgIH07CiAgICBUZXN0cy5wcm90b3R5cGUu
Y29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5waGFzZSA9PT0gdGhpcy5w
aGFzZXMuQ09NUExFVEUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0
aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuQ09NUExFVEU7CiAgICAgICAgdGhpcy5ub3RpZnlfY29t
cGxldGUoKTsKICAgIH07CiAgICBUZXN0cy5wcm90b3R5cGUubm90aWZ5X2NvbXBsZXRlID0gZnVu
Y3Rpb24oKQogICAgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRfaWQpOwogICAg
ICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzLnN0YXR1cyA9
PT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMu
c3RhdHVzLk9LOwogICAgICAgIH0KICAgICAgICBmb3JFYWNoICh0aGlzLmFsbF9kb25lX2NhbGxi
YWNrcywKICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXNfb2JqLnRlc3RzLCB0aGlzX29i
ai5zdGF0dXMpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgIGZvckVhY2goYW5jZXN0b3Jf
d2luZG93cygpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24odykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBpZih3LmNvbXBsZXRpb25fY2FsbGJhY2spCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5jb21wbGV0aW9uX2NhbGxiYWNr
KHRoaXNfb2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICB9OwogICAgdmFy
IHRlc3RzID0gbmV3IFRlc3RzKCk7CiAgICBmdW5jdGlvbiBhZGRfc3RhcnRfY2FsbGJhY2soY2Fs
bGJhY2spIHsKICAgICAgICB0ZXN0cy5zdGFydF9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAg
ICB9CiAgICBmdW5jdGlvbiBhZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxiYWNrKQogICAgewogICAg
ICAgIHRlc3RzLnRlc3RfZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICB9CiAgICBm
dW5jdGlvbiBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhjYWxsYmFjaykKICAgIHsKICAgICAgIHRl
c3RzLmFsbF9kb25lX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgIH0KICAgIGV4cG9zZShh
ZGRfc3RhcnRfY2FsbGJhY2ssICdhZGRfc3RhcnRfY2FsbGJhY2snKTsKICAgIGV4cG9zZShhZGRf
cmVzdWx0X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOwogICAgZXhwb3NlKGFkZF9j
b21wbGV0aW9uX2NhbGxiYWNrLCAnYWRkX2NvbXBsZXRpb25fY2FsbGJhY2snKTsKICAgIC8qCiAg
ICAgKiBPdXRwdXQgbGlzdGVuZXIKICAgICovCiAgICBmdW5jdGlvbiBPdXRwdXQoKSB7CiAgICAg
IHRoaXMub3V0cHV0X2RvY3VtZW50ID0gbnVsbDsKICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG51
bGw7CiAgICAgIHRoaXMuZG9uZV9jb3VudCA9IDA7CiAgICAgIHRoaXMuZW5hYmxlZCA9IHNldHRp
bmdzLm91dHB1dDsKICAgICAgdGhpcy5waGFzZSA9IHRoaXMuSU5JVElBTDsKICAgIH0KICAgIE91
dHB1dC5wcm90b3R5cGUuSU5JVElBTCA9IDA7CiAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQg
PSAxOwogICAgT3V0cHV0LnByb3RvdHlwZS5IQVZFX1JFU1VMVFMgPSAyOwogICAgT3V0cHV0LnBy
b3RvdHlwZS5DT01QTEVURSA9IDM7CiAgICBPdXRwdXQucHJvdG90eXBlLnNldHVwID0gZnVuY3Rp
b24ocHJvcGVydGllcykgewogICAgICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5JTklUSUFMKSB7
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy9JZiBvdXRwdXQgaXMgZGlz
YWJsZWQgaW4gdGVzdGhhcm5lc3NyZXBvcnQuanMgdGhlIHRlc3Qgc2hvdWxkbid0IGJlCiAgICAg
ICAgLy9hYmxlIHRvIG92ZXJyaWRlIHRoYXQKICAgICAgICB0aGlzLmVuYWJsZWQgPSB0aGlzLmVu
YWJsZWQgJiYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm91dHB1dCIpID8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMub3V0cHV0IDogc2V0dGlu
Z3Mub3V0cHV0KTsKICAgIH07CiAgICBPdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihw
cm9wZXJ0aWVzKQogICAgewogICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMuU1RBUlRFRCkg
ewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChwcm9wZXJ0aWVzLm91
dHB1dF9kb2N1bWVudCkgewogICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IHByb3Bl
cnRpZXMub3V0cHV0X2RvY3VtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMu
b3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgICAgfQogICAgICAgIHRoaXMucGhhc2Ug
PSB0aGlzLlNUQVJURUQ7CiAgICB9OwogICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9
IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICBpZiAoIXRoaXMub3V0cHV0X2RvY3VtZW50KSB7CiAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm91dHB1
dF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIik7CiAgICAgICAgaWYgKG5vZGUpIHsKICAg
ICAgICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG5vZGU7CiAgICAgICAgfQogICAgfTsKICAgIE91
dHB1dC5wcm90b3R5cGUuc2hvd19zdGF0dXMgPSBmdW5jdGlvbih0ZXN0KQogICAgewogICAgICAg
IGlmICh0aGlzLnBoYXNlIDwgdGhpcy5TVEFSVEVEKQogICAgICAgIHsKICAgICAgICAgICAgdGhp
cy5pbml0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5lbmFibGVkKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRo
aXMuSEFWRV9SRVNVTFRTKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygp
OwogICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5IQVZFX1JFU1VMVFM7CiAgICAgICAgfQog
ICAgICAgIHRoaXMuZG9uZV9jb3VudCsrOwogICAgICAgIGlmICh0aGlzLm91dHB1dF9ub2RlKQog
ICAgICAgIHsKICAgICAgICAgICAgaWYgKHRoaXMuZG9uZV9jb3VudCA8IDEwMAogICAgICAgICAg
ICB8fCAodGhpcy5kb25lX2NvdW50IDwgMTAwMCAmJiB0aGlzLmRvbmVfY291bnQgJSAxMDAgPT0g
MCkKICAgICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9PSAwKSB7CiAgICAgICAg
ICAgICAgICB0aGlzLm91dHB1dF9ub2RlLnRleHRDb250ZW50ID0gIlJ1bm5pbmcsICIKICAgICAg
ICAgICAgICAgICAgICArIHRoaXMuZG9uZV9jb3VudCArICIgY29tcGxldGUsICIKICAgICAgICAg
ICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1haW4iOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgfTsKICAgIE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRzID0gZnVu
Y3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykKICAgIHsKICAgICAgICBpZiAodGhpcy5waGFz
ZSA+PSB0aGlzLkNPTVBMRVRFKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg
ICAgaWYgKCF0aGlzLmVuYWJsZWQpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQogICAgICAgIGlmICghdGhpcy5vdXRwdXRfbm9kZSkgewogICAgICAgICAgICB0aGlzLnJl
c29sdmVfbG9nKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkNPTVBMRVRF
OwogICAgICAgIHZhciBsb2cgPSB0aGlzLm91dHB1dF9ub2RlOwogICAgICAgIGlmICghbG9nKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgb3V0cHV0
X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQ7CiAgICAgICAgd2hpbGUgKGxvZy5sYXN0
Q2hpbGQpCiAgICAgICAgewogICAgICAgICAgICBsb2cucmVtb3ZlQ2hpbGQobG9nLmxhc3RDaGls
ZCk7CiAgICAgICAgfQogICAgICAgIGlmIChzY3JpcHRfcHJlZml4ICE9IG51bGwpIHsKICAgICAg
ICAgICAgdmFyIHN0eWxlc2hlZXQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHho
dG1sX25zLCAibGluayIpOwogICAgICAgICAgICBzdHlsZXNoZWV0LnNldEF0dHJpYnV0ZSgicmVs
IiwgInN0eWxlc2hlZXQiKTsKICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRBdHRyaWJ1dGUoImhy
ZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3RoYXJuZXNzLmNzcyIpOwogICAgICAgICAgICB2YXIg
aGVhZHMgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKTsKICAg
ICAgICAgICAgaWYgKGhlYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgaGVhZHNbMF0uYXBw
ZW5kQ2hpbGQoc3R5bGVzaGVldCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFy
IHN0YXR1c190ZXh0ID0ge307CiAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuUEFT
U10gPSAiUGFzcyI7CiAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuRkFJTF0gPSAi
RmFpbCI7CiAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuVElNRU9VVF0gPSAiVGlt
ZW91dCI7CiAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuTk9UUlVOXSA9ICJOb3Qg
UnVuIjsKICAgICAgICB2YXIgc3RhdHVzX251bWJlciA9IHt9OwogICAgICAgIGZvckVhY2godGVz
dHMsIGZ1bmN0aW9uKHRlc3QpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gc3Rh
dHVzX3RleHRbdGVzdC5zdGF0dXNdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNfbnVt
YmVyLmhhc093blByb3BlcnR5KHN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gKz0gMTsKICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbnVtYmVyW3N0
YXR1c10gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgIGZ1bmN0aW9uIHN0YXR1c19jbGFzcyhzdGF0dXMpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gc3RhdHVzLnJlcGxhY2UoL1xzL2csICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0K
ICAgICAgICB2YXIgc3VtbWFyeV90ZW1wbGF0ZSA9IFsic2VjdGlvbiIsIHsiaWQiOiJzdW1tYXJ5
In0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMiIsIHt9LCAiU3VtbWFyeSJd
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicCIsIHt9LCAiRm91bmQgJHtudW1f
dGVzdHN9IHRlc3RzIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dmFycykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnYgPSBbWyJk
aXYiLCB7fV1dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaT0wOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdHVzX3RleHQuaGFz
T3duUHJvcGVydHkoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0dXNfbnVtYmVyLmhhc093blByb3BlcnR5KHN0YXR1c190ZXh0W2ldKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0
dXNfdGV4dFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
dlswXS5wdXNoKFsiZGl2IiwgeyJjbGFzcyI6c3RhdHVzX2NsYXNzKHN0YXR1cyl9LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsibGFiZWwi
LCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyJpbnB1dCIsIHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1c19udW1iZXJbc3RhdHVzXSArICIgIiArIHN0YXR1c11dKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnY7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfV07CiAgICAgICAgbG9nLmFwcGVuZENoaWxkKHJlbmRlcihzdW1tYXJ5
X3RlbXBsYXRlLCB7bnVtX3Rlc3RzOnRlc3RzLmxlbmd0aH0sIG91dHB1dF9kb2N1bWVudCkpOwog
ICAgICAgIGZvckVhY2gob3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInNlY3Rpb24j
c3VtbWFyeSBsYWJlbCIpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24oZWxlbWVudCkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvbl9ldmVudChlbGVtZW50LCAiY2xpY2si
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0
cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikgPT09IG51bGwpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0X2NsYXNzID0gZWxlbWVudC5wYXJl
bnROb2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHN0eWxlX2VsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi
c3R5bGUjaGlkZS0iICsgcmVzdWx0X2NsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGlucHV0X2VsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVfZWxlbWVudCAmJiAh
aW5wdXRfZWxlbWVudC5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZV9lbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRt
bF9ucywgInN0eWxlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZV9lbGVtZW50LmlkID0gImhpZGUtIiArIHJlc3VsdF9jbGFzczsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQuaW5uZXJIVE1MID0gInRhYmxlI3Jlc3Vs
dHMgPiB0Ym9keSA+IHRyLiIrcmVzdWx0X2NsYXNzKyJ7ZGlzcGxheTpub25lfSI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChzdHlsZV9lbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChzdHlsZV9lbGVtZW50ICYmIGlucHV0X2VsZW1lbnQuY2hlY2tlZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKHN0eWxlX2VsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAvLyBUaGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBtYW51YWwgZXNjYXBpbmcgaXMg
bm90IHJlY29tbWVuZGVkIGluCiAgICAgICAgLy8gZ2VuZXJhbCwgYnV0IGlzIG5lY2Vzc2FyeSBo
ZXJlIGZvciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRleHRDb250ZW50CiAgICAgICAgLy8gb24gZWFj
aCBpbmRpdmlkdWFsIDx0ZD4gYWRkcyB0ZW5zIG9mIHNlY29uZHMgb2YgZXhlY3V0aW9uIHRpbWUg
Zm9yCiAgICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMgKHRlbnMgb2YgdGhvdXNhbmRzIG9mIHRl
c3RzKS4KICAgICAgICBmdW5jdGlvbiBlc2NhcGVfaHRtbChzKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywgIiZhbXA7IikKICAgICAgICAgICAgICAgIC5yZXBs
YWNlKC88L2csICImbHQ7IikKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8iL2csICImcXVvdDsi
KQogICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIiYjMzk7Iik7CiAgICAgICAgfQogICAg
ICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIikpOwog
ICAgICAgIHZhciBodG1sID0gIjxoMj5EZXRhaWxzPC9oMj48dGFibGUgaWQ9J3Jlc3VsdHMnPiIK
ICAgICAgICAgICAgKyAiPHRoZWFkPjx0cj48dGg+UmVzdWx0PC90aD48dGg+VGVzdCBOYW1lPC90
aD48dGg+TWVzc2FnZTwvdGg+PC90cj48L3RoZWFkPiIKICAgICAgICAgICAgKyAiPHRib2R5PiI7
CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgewogICAgICAg
ICAgICBodG1sICs9ICc8dHIgY2xhc3M9IicKICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwo
c3RhdHVzX2NsYXNzKHN0YXR1c190ZXh0W3Rlc3RzW2ldLnN0YXR1c10pKQogICAgICAgICAgICAg
ICAgKyAnIj48dGQ+JwogICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0
ZXN0c1tpXS5zdGF0dXNdKQogICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+IgogICAgICAgICAg
ICAgICAgKyBlc2NhcGVfaHRtbChmb3JtYXRfc3RyaW5nKHRlc3RzW2ldLm5hbWUpKQogICAgICAg
ICAgICAgICAgKyAiPC90ZD48dGQ+IgogICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbCh0ZXN0
c1tpXS5tZXNzYWdlID8gZm9ybWF0X3N0cmluZyh0ZXN0c1tpXS5tZXNzYWdlKSA6ICIgIikKICAg
ICAgICAgICAgICAgICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgICBsb2cubGFzdENo
aWxkLmlubmVySFRNTCA9IGh0bWwgKyAiPC90Ym9keT48L3RhYmxlPiI7CiAgICB9OwogICAgdmFy
IG91dHB1dCA9IG5ldyBPdXRwdXQoKTsKICAgIGFkZF9zdGFydF9jYWxsYmFjayhmdW5jdGlvbiAo
cHJvcGVydGllcykge291dHB1dC5pbml0KHByb3BlcnRpZXMpO30pOwogICAgYWRkX3Jlc3VsdF9j
YWxsYmFjayhmdW5jdGlvbiAodGVzdCkge291dHB1dC5zaG93X3N0YXR1cyh0ZXN0cyk7fSk7CiAg
ICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVz
KSB7b3V0cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19zdGF0dXMpO30pOwogICAgLyoK
ICAgICAqIFRlbXBsYXRlIGNvZGUKICAgICAqCiAgICAgKiBBIHRlbXBsYXRlIGlzIGp1c3QgYSBq
YXZhc2NyaXB0IHN0cnVjdHVyZS4gQW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBhczoKICAgICAq
CiAgICAgKiBbdGFnX25hbWUsIHthdHRyX25hbWU6YXR0cl92YWx1ZX0sIGNoaWxkMSwgY2hpbGQy
XQogICAgICoKICAgICAqIHRoZSBjaGlsZHJlbiBjYW4gZWl0aGVyIGJlIHN0cmluZ3MgKHdoaWNo
IGFjdCBsaWtlIHRleHQgbm9kZXMpLCBvdGhlciB0ZW1wbGF0ZXMgb3IKICAgICAqIGZ1bmN0aW9u
cyAoc2VlIGJlbG93KQogICAgICoKICAgICAqIEEgdGV4dCBub2RlIGlzIHJlcHJlc2VudGVkIGFz
CiAgICAgKgogICAgICogWyJ7dGV4dH0iLCB2YWx1ZV0KICAgICAqCiAgICAgKiBTdHJpbmcgdmFs
dWVzIGhhdmUgYSBzaW1wbGUgc3Vic3RpdHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2VudHMg
YSB2YXJpYWJsZSBmb28uCiAgICAgKgogICAgICogSXQgaXMgcG9zc2libGUgdG8gZW1iZWQgbG9n
aWMgaW4gdGVtcGxhdGVzIGJ5IHVzaW5nIGEgZnVuY3Rpb24gaW4gYSBwbGFjZSB3aGVyZSBhCiAg
ICAgKiBub2RlIHdvdWxkIHVzdWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhlciByZXR1
cm4gcGFydCBvZiBhIHRlbXBsYXRlIG9yIG51bGwuCiAgICAgKgogICAgICogSW4gY2FzZXMgd2hl
cmUgYSBzZXQgb2Ygbm9kZXMgYXJlIHJlcXVpcmVkIGFzIG91dHB1dCByYXRoZXIgdGhhbiBhIHNp
bmdsZSBub2RlCiAgICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRvIGp1c3QgdXNl
IGEgbGlzdAogICAgICogW25vZGUxLCBub2RlMiwgbm9kZTNdCiAgICAgKgogICAgICogVXNhZ2U6
CiAgICAgKgogICAgICogcmVuZGVyKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKSAtIHRha2UgYSB0
ZW1wbGF0ZSBhbmQgYW4gb2JqZWN0IG1hcHBpbmcKICAgICAqIHZhcmlhYmxlIG5hbWVzIHRvIHBh
cmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBvciBhIGxpc3Qgb2YgRE9NIG5v
ZGVzCiAgICAgKgogICAgICogc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykgLSB0
YWtlIGEgdGVtcGxhdGUgYW5kIHZhcmlhYmxlIG1hcHBpbmcgb2JqZWN0LAogICAgICogbWFrZSB0
aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0dXRlZCB0ZW1w
bGF0ZQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gaXNfc2luZ2xlX25vZGUodGVtcGxhdGUp
CiAgICB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0ZW1wbGF0ZVswXSA9PT0gInN0cmluZyI7CiAg
ICB9CiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQogICAg
ewogICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAg
ICAgdmFyIHJlcGxhY2VtZW50ID0gdGVtcGxhdGUoc3Vic3RpdHV0aW9ucyk7CiAgICAgICAgICAg
IGlmIChyZXBsYWNlbWVudCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHJ2ID0g
c3Vic3RpdHV0ZShyZXBsYWNlbWVudCwgc3Vic3RpdHV0aW9ucyk7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gcnY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBlbHNlIGlmIChpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZmlsdGVyKG1h
cCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN1YnN0aXR1dGUoeCwgc3Vic3RpdHV0aW9ucyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pLCBmdW5jdGlvbih4KSB7cmV0dXJuIHggIT09IG51bGw7fSk7CiAgICAg
ICAgfQogICAgfQogICAgZnVuY3Rpb24gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0
aXR1dGlvbnMpCiAgICB7CiAgICAgICAgdmFyIHN1YnN0aXR1dGlvbl9yZSA9IC9cJHsoW14gfV0q
KX0vZzsKICAgICAgICBmdW5jdGlvbiBkb19zdWJzdGl0dXRpb24oaW5wdXQpIHsKICAgICAgICAg
ICAgdmFyIGNvbXBvbmVudHMgPSBpbnB1dC5zcGxpdChzdWJzdGl0dXRpb25fcmUpOwogICAgICAg
ICAgICB2YXIgcnYgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBvbmVudHMu
bGVuZ3RoOyBpKz0yKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBydi5wdXNoKGNvbXBv
bmVudHNbaV0pOwogICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbaSsxXSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBydi5wdXNoKFN0cmluZyhzdWJzdGl0dXRpb25z
W2NvbXBvbmVudHNbaSsxXV0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICByZXR1cm4gcnY7CiAgICAgICAgfQogICAgICAgIHZhciBydiA9IFtdOwogICAgICAg
IHJ2LnB1c2goZG9fc3Vic3RpdHV0aW9uKFN0cmluZyh0ZW1wbGF0ZVswXSkpLmpvaW4oIiIpKTsK
ICAgICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0iKSB7CiAgICAgICAgICAgIHN1YnN0
aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMSksIHJ2KTsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBzdWJzdGl0dXRlX2F0dHJzKHRlbXBsYXRlWzFdLCBydik7CiAgICAgICAgICAg
IHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMiksIHJ2KTsKICAgICAgICB9CiAg
ICAgICAgZnVuY3Rpb24gc3Vic3RpdHV0ZV9hdHRycyhhdHRycywgcnYpCiAgICAgICAgewogICAg
ICAgICAgICBydlsxXSA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRl
WzFdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVy
dHkobmFtZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld19u
YW1lID0gZG9fc3Vic3RpdHV0aW9uKG5hbWUpLmpvaW4oIiIpOwogICAgICAgICAgICAgICAgICAg
IHZhciBuZXdfdmFsdWUgPSBkb19zdWJzdGl0dXRpb24oYXR0cnNbbmFtZV0pLmpvaW4oIiIpOwog
ICAgICAgICAgICAgICAgICAgIHJ2WzFdW25ld19uYW1lXSA9IG5ld192YWx1ZTsKICAgICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gc3Vic3Rp
dHV0ZV9jaGlsZHJlbihjaGlsZHJlbiwgcnYpCiAgICAgICAgewogICAgICAgICAgICBmb3IgKHZh
ciBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmIChjaGlsZHJlbltpXSBpbnN0YW5jZW9mIE9iamVjdCkgewogICAgICAgICAgICAgICAg
ICAgIHZhciByZXBsYWNlbWVudCA9IHN1YnN0aXR1dGUoY2hpbGRyZW5baV0sIHN1YnN0aXR1dGlv
bnMpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVsbCkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19zaW5nbGVfbm9k
ZShyZXBsYWNlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJ2LnB1c2gocmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCByZXBsYWNlbWVudCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgZXh0ZW5kKHJ2LCBkb19zdWJzdGl0dXRpb24oU3RyaW5nKGNoaWxkcmVuW2ldKSkp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBydjsK
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJ2OwogICAgfQogZnVuY3Rpb24gbWFrZV9kb21fc2lu
Z2xlKHRlbXBsYXRlLCBkb2MpCiB7CiAgICAgdmFyIG91dHB1dF9kb2N1bWVudCA9IGRvYyB8fCBk
b2N1bWVudDsKICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0iKQogICAgIHsKICAgICAg
ICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwogICAg
ICAgICBmb3IgKHZhciBpPTE7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGVsZW1lbnQuZGF0YSArPSB0ZW1wbGF0ZVtpXTsKICAgICAgICAgfQogICAgIH0K
ICAgICBlbHNlCiAgICAgewogICAgICAgICB2YXIgZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5j
cmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsIHRlbXBsYXRlWzBdKTsKICAgICAgICAgZm9yICh2YXIg
bmFtZSBpbiB0ZW1wbGF0ZVsxXSkgewogICAgICAgICAgICAgaWYgKHRlbXBsYXRlWzFdLmhhc093
blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGVsZW1lbnQu
c2V0QXR0cmlidXRlKG5hbWUsIHRlbXBsYXRlWzFdW25hbWVdKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBmb3IgKHZhciBpPTI7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSBpbnN0YW5jZW9mIE9iamVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQgPSBtYWtlX2Rv
bSh0ZW1wbGF0ZVtpXSk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChzdWJf
ZWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgdmFyIHRleHRfbm9kZSA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0ZW1wbGF0ZVtpXSk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGls
ZCh0ZXh0X25vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBlbGVtZW50OwogfQogZnVuY3Rpb24gbWFrZV9kb20odGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMs
IG91dHB1dF9kb2N1bWVudCkKICAgIHsKICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxh
dGUpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG1ha2VfZG9tX3NpbmdsZSh0ZW1wbGF0
ZSwgb3V0cHV0X2RvY3VtZW50KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1bWVudCk7
CiAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQogZnVuY3Rpb24gcmVu
ZGVyKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zLCBvdXRwdXRfZG9jdW1lbnQpCiAgICB7CiAgICAg
ICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpLCBv
dXRwdXRfZG9jdW1lbnQpOwogICAgfQogICAgLyoKICAgICAqIFV0aWxpdHkgZnVuY2lvbnMKICAg
ICAqLwogICAgZnVuY3Rpb24gYXNzZXJ0KGV4cGVjdGVkX3RydWUsIGZ1bmN0aW9uX25hbWUsIGRl
c2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9ucykKICAgIHsKICAgICAgICBpZiAoZXhwZWN0
ZWRfdHJ1ZSAhPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRp
b25FcnJvcihtYWtlX21lc3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsIHN1YnN0aXR1
dGlvbnMpKTsKICAgICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihtZXNz
YWdlKQogICAgewogICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICB9CiAgICBmdW5j
dGlvbiBtYWtlX21lc3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRpb24sIGVycm9yLCBzdWJz
dGl0dXRpb25zKQogICAgewogICAgICAgIGZvciAodmFyIHAgaW4gc3Vic3RpdHV0aW9ucykgewog
ICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9ucy5oYXNPd25Qcm9wZXJ0eShwKSkgewogICAgICAg
ICAgICAgICAgc3Vic3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShzdWJzdGl0dXRpb25zW3Bd
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbm9kZV9mb3JtID0gc3Vic3Rp
dHV0ZShbInt0ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAke2Rlc2NyaXB0aW9ufSIgKyBlcnJv
cl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2Uoe2Z1bmN0aW9uX25h
bWU6ZnVuY3Rpb25fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb246KGRlc2NyaXB0aW9uP2Rlc2NyaXB0aW9uICsgIiAiOiIiKX0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMpKTsKICAg
ICAgICByZXR1cm4gbm9kZV9mb3JtLnNsaWNlKDEpLmpvaW4oIiIpOwogICAgfQogICAgZnVuY3Rp
b24gZmlsdGVyKGFycmF5LCBjYWxsYWJsZSwgdGhpc09iaikgewogICAgICAgIHZhciBydiA9IFtd
OwogICAgICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKykKICAgICAgICB7CiAg
ICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdmFyIHBhc3MgPSBjYWxsYWJsZS5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBp
LCBhcnJheSk7CiAgICAgICAgICAgICAgICBpZiAocGFzcykgewogICAgICAgICAgICAgICAgICAg
IHJ2LnB1c2goYXJyYXlbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBydjsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcChhcnJheSwgY2Fs
bGFibGUsIHRoaXNPYmopCiAgICB7CiAgICAgICAgdmFyIHJ2ID0gW107CiAgICAgICAgcnYubGVu
Z3RoID0gYXJyYXkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7
IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcnZbaV0gPSBjYWxsYWJsZS5jYWxsKHRoaXNP
YmosIGFycmF5W2ldLCBpLCBhcnJheSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
cmV0dXJuIHJ2OwogICAgfQogICAgZnVuY3Rpb24gZXh0ZW5kKGFycmF5LCBpdGVtcykKICAgIHsK
ICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheSwgaXRlbXMpOwogICAgfQog
ICAgZnVuY3Rpb24gZm9yRWFjaCAoYXJyYXksIGNhbGxiYWNrLCB0aGlzT2JqKQogICAgewogICAg
ICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKykKICAgICAgICB7CiAgICAgICAg
ICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgY2FsbGJhY2suY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWVyZ2UoYSxiKQogICAgewogICAg
ICAgIHZhciBydiA9IHt9OwogICAgICAgIHZhciBwOwogICAgICAgIGZvciAocCBpbiBhKQogICAg
ICAgIHsKICAgICAgICAgICAgcnZbcF0gPSBhW3BdOwogICAgICAgIH0KICAgICAgICBmb3IgKHAg
aW4gYikgewogICAgICAgICAgICBydltwXSA9IGJbcF07CiAgICAgICAgfQogICAgICAgIHJldHVy
biBydjsKICAgIH0KICAgIGZ1bmN0aW9uIGV4cG9zZShvYmplY3QsIG5hbWUpCiAgICB7CiAgICAg
ICAgdmFyIGNvbXBvbmVudHMgPSBuYW1lLnNwbGl0KCIuIik7CiAgICAgICAgdmFyIHRhcmdldCA9
IHdpbmRvdzsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y29tcG9uZW50cy5sZW5ndGggLSAxOyBp
KyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoIShjb21wb25lbnRzW2ldIGluIHRhcmdldCkp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRhcmdldFtjb21wb25lbnRzW2ldXSA9IHt9
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtjb21wb25lbnRzW2ld
XTsKICAgICAgICB9CiAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGgg
LSAxXV0gPSBvYmplY3Q7CiAgICB9CiBmdW5jdGlvbiBhbmNlc3Rvcl93aW5kb3dzKCkgewogICAg
IC8vR2V0IHRoZSB3aW5kb3dzIFtzZWxmIC4uLiB0b3BdIGFzIGFuIGFycmF5CiAgICAgaWYgKCJy
ZXN1bHRfY2FjaGUiIGluIGFuY2VzdG9yX3dpbmRvd3MpCiAgICAgewogICAgICAgICByZXR1cm4g
YW5jZXN0b3Jfd2luZG93cy5yZXN1bHRfY2FjaGU7CiAgICAgfQogICAgIHZhciBydiA9IFtzZWxm
XTsKICAgICB2YXIgdyA9IHNlbGY7CiAgICAgd2hpbGUgKHcgIT0gdy5wYXJlbnQpCiAgICAgewog
ICAgICAgICB3ID0gdy5wYXJlbnQ7CiAgICAgICAgIHJ2LnB1c2godyk7CiAgICAgfQogICAgIGFu
Y2VzdG9yX3dpbmRvd3MucmVzdWx0X2NhY2hlID0gcnY7CiAgICAgcmV0dXJuIHJ2OwogfQp9KSgp
Owo8L3NjcmlwdD4KCjxzY3JpcHQ+CmlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CiAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKfQpmdW5j
dGlvbiBjb252ZXJ0UmVzdWx0U3RhdHVzVG9TdHJpbmcocmVzdWx0U3RhdHVzKQp7CiAgICBzd2l0
Y2ggKHJlc3VsdFN0YXR1cykgewogICAgY2FzZSAwOgogICAgICAgIHJldHVybiAiUEFTUyI7CiAg
ICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJGQUlMIjsKICAgIGNhc2UgMjoKICAgICAgICByZXR1
cm4gIlRJTUVPVVQiOwogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gIk5PVFJVTiI7CiAgICB9
Cn0KLy8gRGlzYWJsZSB0aGUgZGVmYXVsdCBvdXRwdXQgb2YgdGVzdGhhcm5lc3MuanMuICBUaGUg
ZGVmYXVsdCBvdXRwdXQgZm9ybWF0cwovLyB0ZXN0IHJlc3VsdHMgaW50byBhbiBIVE1MIHRhYmxl
LiAgV2hlbiB0aGF0IHRhYmxlIGlzIGR1bXBlZCBhcyB0ZXh0LCBubwovLyBzcGFjaW5nIGJldHdl
ZW4gY2VsbHMgaXMgcHJlc2VydmVkLCBhbmQgaXQgaXMgdGhlcmVmb3JlIG5vdCByZWFkYWJsZS4g
QnkKLy8gc2V0dGluZyBvdXRwdXQgdG8gZmFsc2UsIHRoZSBIVE1MIHRhYmxlIHdpbGwgbm90IGJl
IGNyZWF0ZWQuCnNldHVwKHtvdXRwdXQ6IGZhbHNlfSk7Ci8vIFVzaW5nIGEgY2FsbGJhY2sgZnVu
Y3Rpb24sIHRlc3QgcmVzdWx0cyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYWdlIGluIGEKLy8gbWFu
bmVyIHRoYXQgYWxsb3dzIGR1bXBBc1RleHQgdG8gcHJvZHVjZSByZWFkYWJsZSB0ZXN0IHJlc3Vs
dHMuCmFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uICh0ZXN0cywgaGFybmVzc1N0YXR1
cykKewogICAgLy8gQW4gYXJyYXkgdG8gaG9sZCBzdHJpbmcgcGllY2VzLCB3aGljaCB3aWxsIGJl
IGpvaW5lZCBsYXRlciB0byBwcm9kdWNlIHRoZSBmaW5hbCByZXN1bHQuCiAgICB2YXIgcmVzdWx0
c0FycmF5ID0gWyJcbiJdOwogICAgaWYgKGhhcm5lc3NTdGF0dXMuc3RhdHVzICE9PSAwKSB7CiAg
ICAgICAgcmVzdWx0c0FycmF5LnB1c2goIkhhcm5lc3MgRXJyb3IuIGhhcm5lc3NTdGF0dXMuc3Rh
dHVzID0gIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJuZXNzU3RhdHVzLnN0YXR1cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICwgaGFybmVzc1N0YXR1cy5tZXNzYWdlID0gIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJuZXNzU3RhdHVzLm1lc3NhZ2UpOwogICAgfSBl
bHNlIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgICAgIHJlc3VsdHNBcnJheS5wdXNoKGNvbnZlcnRSZXN1bHRTdGF0dXNUb1N0cmluZyh0
ZXN0c1tpXS5zdGF0dXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW2ldLm5hbWUgIT09IG51bGwgPyB0ZXN0c1tp
XS5uYW1lIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdHNbaV0ubWVzc2FnZSAhPT0gbnVsbCA/IHRlc3RzW2ld
Lm1lc3NhZ2UgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIik7CiAgICAg
ICAgfQogICAgfQogICAgdmFyIHJlc3VsdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJwcmUiKTsKICAgIHJlc3VsdEVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1bHRzQXJyYXkuam9p
bigiIik7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3VsdEVsZW1lbnQpOwogICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwp9
KTsKPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIGdldE9iamVjdChpbnRlcmZhY2UpIHsKICAg
IHN3aXRjaChpbnRlcmZhY2UpIHsKICAgICAgICBjYXNlICJFbGVtZW50IjoKICAgICAgICAgICAg
dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAi
ZXhhbXBsZSIpOwogICAgICAgICAgICBhc3NlcnRfdHJ1ZShlIGluc3RhbmNlb2YgRWxlbWVudCk7
CiAgICAgICAgICAgIGFzc2VydF9mYWxzZShlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpOwogICAg
ICAgICAgICBhc3NlcnRfZmFsc2UoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpOwogICAgICAgICAg
ICByZXR1cm4gZTsKICAgICAgICBjYXNlICJIVE1MRWxlbWVudCI6CiAgICAgICAgICAgIHZhciBl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpOwogICAgICAgICAgICBhc3NlcnRfdHJ1
ZShlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpOwogICAgICAgICAgICByZXR1cm4gZTsKICAgICAg
ICBjYXNlICJIVE1MQm9keUVsZW1lbnQiOgogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImJvZHkiKTsKICAgICAgICAgICAgYXNzZXJ0X3RydWUoZSBpbnN0YW5jZW9m
IEhUTUxCb2R5RWxlbWVudCk7CiAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgIGNhc2UgIkhU
TUxGb3JtRWxlbWVudCI6CiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZm9ybSIpOwogICAgICAgICAgICBhc3NlcnRfdHJ1ZShlIGluc3RhbmNlb2YgSFRNTEZvcm1F
bGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgY2FzZSAiSFRNTEZyYW1lU2V0
RWxlbWVudCI6CiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZnJh
bWVzZXQiKTsKICAgICAgICAgICAgYXNzZXJ0X3RydWUoZSBpbnN0YW5jZW9mIEhUTUxGcmFtZVNl
dEVsZW1lbnQpOwogICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICBjYXNlICJTVkdFbGVtZW50
IjoKICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIiwgInJlY3QiKTsKICAgICAgICAgICAgYXNzZXJ0X3RydWUoZSBp
bnN0YW5jZW9mIFNWR0VsZW1lbnQpOwogICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICBjYXNl
ICJEb2N1bWVudCI6CiAgICAgICAgICAgIGFzc2VydF90cnVlKGRvY3VtZW50IGluc3RhbmNlb2Yg
RG9jdW1lbnQpOwogICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQ7CiAgICAgICAgY2FzZSAiV2lu
ZG93IjoKICAgICAgICAgICAgYXNzZXJ0X3RydWUod2luZG93IGluc3RhbmNlb2YgV2luZG93KTsK
ICAgICAgICAgICAgcmV0dXJuIHdpbmRvdzsKICAgIH0KICAgIGFzc2VydF91bnJlYWNoZWQoKTsK
fQpmdW5jdGlvbiB0ZXN0U2V0KGludGVyZmFjZSwgYXR0cmlidXRlKSB7CiAgICB0ZXN0KGZ1bmN0
aW9uKCkgewogICAgICAgIHZhciBvYmplY3QgPSBnZXRPYmplY3QoaW50ZXJmYWNlKTsKICAgICAg
ICBmdW5jdGlvbiBub3AoKSB7fQogICAgICAgIGFzc2VydF9lcXVhbHMob2JqZWN0W2F0dHJpYnV0
ZV0sIG51bGwsICJJbml0aWFsbHkgbnVsbCIpOwogICAgICAgIG9iamVjdFthdHRyaWJ1dGVdID0g
bm9wOwogICAgICAgIGFzc2VydF9lcXVhbHMob2JqZWN0W2F0dHJpYnV0ZV0sIG5vcCwgIlJldHVy
biBzYW1lIGZ1bmN0aW9uIik7CiAgICAgICAgb2JqZWN0W2F0dHJpYnV0ZV0gPSAiIjsKICAgICAg
ICBhc3NlcnRfZXF1YWxzKG9iamVjdFthdHRyaWJ1dGVdLCBudWxsLCAiUmV0dXJuIG51bGwgYWZ0
ZXIgc2V0dGluZyBzdHJpbmciKTsKICAgICAgICBvYmplY3RbYXR0cmlidXRlXSA9IG51bGw7CiAg
ICAgICAgYXNzZXJ0X2VxdWFscyhvYmplY3RbYXR0cmlidXRlXSwgbnVsbCwgIkZpbmFsbHkgbnVs
bCIpOwogICAgfSwgIlNldCAiICsgaW50ZXJmYWNlICsgIi4iICsgYXR0cmlidXRlKTsKfQpmdW5j
dGlvbiB0ZXN0UmVmbGVjdChpbnRlcmZhY2UsIGF0dHJpYnV0ZSkgewogICAgdGVzdChmdW5jdGlv
bigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGdldE9iamVjdChpbnRlcmZhY2UpOwogICAgICAg
IGFzc2VydF9mYWxzZShlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpLCAiSW5pdGlhbGx5
IG1pc3NpbmciKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsICJyZXR1
cm4iKTsKICAgICAgICBhc3NlcnRfZXF1YWxzKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0
ZSksICJyZXR1cm4iLCAiUmV0dXJuIHNhbWUgc3RyaW5nIik7CiAgICAgICAgYXNzZXJ0X2VxdWFs
cyh0eXBlb2YgZWxlbWVudFthdHRyaWJ1dGVdLCAiZnVuY3Rpb24iLCAiQ29udmVydCB0byBmdW5j
dGlvbiIpOwogICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiAgICB9
LCAiUmVmbGVjdCAiICsgaW50ZXJmYWNlICsgIi4iICsgYXR0cmlidXRlKTsKfQpmdW5jdGlvbiB0
ZXN0Rm9yd2FyZFRvV2luZG93KGludGVyZmFjZSwgYXR0cmlidXRlKSB7CiAgICB0ZXN0KGZ1bmN0
aW9uKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZ2V0T2JqZWN0KGludGVyZmFjZSk7CiAgICAg
ICAgd2luZG93W2F0dHJpYnV0ZV0gPSBudWxsOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRl
KGF0dHJpYnV0ZSwgInJldHVybiIpOwogICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHdpbmRv
d1thdHRyaWJ1dGVdLCAiZnVuY3Rpb24iLCAiQ29udmVydCB0byBmdW5jdGlvbiIpOwogICAgICAg
IGFzc2VydF9lcXVhbHMod2luZG93W2F0dHJpYnV0ZV0sIGVsZW1lbnRbYXR0cmlidXRlXSwgIkZv
cndhcmQgY29udGVudCBhdHRyaWJ1dGUiKTsKICAgICAgICBmdW5jdGlvbiBub3AoKSB7fQogICAg
ICAgIGVsZW1lbnRbYXR0cmlidXRlXSA9IG5vcDsKICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRv
d1thdHRyaWJ1dGVdLCBub3AsICJGb3J3YXJkIElETCBhdHRyaWJ1dGUiKTsKICAgICAgICB3aW5k
b3dbYXR0cmlidXRlXSA9IG51bGw7CiAgICB9LCAiRm9yd2FyZCAiICsgaW50ZXJmYWNlICsgIi4i
ICsgYXR0cmlidXRlICsgIiB0byBXaW5kb3ciKTsKfQovLyBPYmplY3QucHJvcGVydHlJc0VudW1l
cmFibGUgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBkb2Vzbid0Ci8vIHdvcmsgd2l0aCBwcm9w
ZXJ0aWVzIGluaGVyaXRlZCB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4uCmZ1bmN0aW9uIGdl
dEVudW1lcmFibGUoaW50ZXJmYWNlKSB7CiAgICB2YXIgZW51bWVyYWJsZSA9IHt9OwogICAgZm9y
ICh2YXIgYXR0cmlidXRlIGluIGdldE9iamVjdChpbnRlcmZhY2UpKSB7CiAgICAgICAgZW51bWVy
YWJsZVthdHRyaWJ1dGVdID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBlbnVtZXJhYmxlOwp9CnZh
ciBlbnVtZXJhYmxlQ2FjaGUgPSB7fTsKZnVuY3Rpb24gdGVzdEVudW1lcmF0ZShpbnRlcmZhY2Us
IGF0dHJpYnV0ZSkgewogICAgaWYgKCEoaW50ZXJmYWNlIGluIGVudW1lcmFibGVDYWNoZSkpIHsK
ICAgICAgICBlbnVtZXJhYmxlQ2FjaGVbaW50ZXJmYWNlXSA9IGdldEVudW1lcmFibGUoaW50ZXJm
YWNlKTsKICAgIH0KICAgIHRlc3QoZnVuY3Rpb24oKSB7CiAgICAgICAgYXNzZXJ0X3RydWUoZW51
bWVyYWJsZUNhY2hlW2ludGVyZmFjZV1bYXR0cmlidXRlXSk7CiAgICB9LCAiRW51bWVyYXRlICIg
KyBpbnRlcmZhY2UgKyAiLiIgKyBhdHRyaWJ1dGUpOwp9Cjwvc2NyaXB0Pgo8c2NyaXB0PgovLyBh
dHRyaWJ1dGUgbGlzdCBmcm9tIFdIQVRXRyBIVE1MIExpdmluZyBTdGFuZGFyZCByODIzOQpbCiAg
ICAib25ibHVyIiwKICAgICJvbmVycm9yIiwKICAgICJvbmZvY3VzIiwKICAgICJvbmxvYWQiLAog
ICAgIm9uc2Nyb2xsIgpdLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlKSB7CiAgICB0ZXN0U2V0
KCJIVE1MQm9keUVsZW1lbnQiLCBhdHRyaWJ1dGUpOwogICAgdGVzdEVudW1lcmF0ZSgiSFRNTEJv
ZHlFbGVtZW50IiwgYXR0cmlidXRlKTsKICAgIHRlc3RSZWZsZWN0KCJIVE1MQm9keUVsZW1lbnQi
LCBhdHRyaWJ1dGUpOwogICAgdGVzdEZvcndhcmRUb1dpbmRvdygiSFRNTEJvZHlFbGVtZW50Iiwg
YXR0cmlidXRlKTsKICAgIHRlc3RTZXQoIkhUTUxGcmFtZVNldEVsZW1lbnQiLCBhdHRyaWJ1dGUp
OwogICAgdGVzdEVudW1lcmF0ZSgiSFRNTEZyYW1lU2V0RWxlbWVudCIsIGF0dHJpYnV0ZSk7CiAg
ICB0ZXN0UmVmbGVjdCgiSFRNTEZyYW1lU2V0RWxlbWVudCIsIGF0dHJpYnV0ZSk7CiAgICB0ZXN0
Rm9yd2FyZFRvV2luZG93KCJIVE1MRnJhbWVTZXRFbGVtZW50IiwgYXR0cmlidXRlKTsKfSk7Cjwv
c2NyaXB0Pgo8ZGl2IGlkPSJsb2ciPjwvZGl2Pg==
</data>

          </attachment>
      

    </bug>

</bugzilla>