<?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>126596</bug_id>
          
          <creation_ts>2014-01-07 14:08:20 -0800</creation_ts>
          <short_desc>DoYouEvenBench: Extract tests and runner code from benchmark.js/html</short_desc>
          <delta_ts>2014-01-07 15:18:26 -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>Tools / Tests</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>124497</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>965155</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-07 14:08:20 -0800</bug_when>
    <thetext>Right now, benchmark.html contains both the interactive UI and core runner code all mangled in one place.
Extract the runner code and tests into a separate resource files in order to automate the suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965168</commentid>
    <comment_count>1</comment_count>
      <attachid>220549</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-07 14:28:49 -0800</bug_when>
    <thetext>Created attachment 220549
Refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965184</commentid>
    <comment_count>2</comment_count>
      <attachid>220549</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-07 15:07:50 -0800</bug_when>
    <thetext>Comment on attachment 220549
Refactoring

Attachment 220549 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/4810447391817728</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965187</commentid>
    <comment_count>3</comment_count>
      <attachid>220549</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-07 15:18:23 -0800</bug_when>
    <thetext>Comment on attachment 220549
Refactoring

Clearing flags on attachment: 220549

Committed r161458: &lt;http://trac.webkit.org/changeset/161458&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965188</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-07 15:18:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220549</attachid>
            <date>2014-01-07 14:28:49 -0800</date>
            <delta_ts>2014-01-07 15:18:23 -0800</delta_ts>
            <desc>Refactoring</desc>
            <filename>bug-126596-20140107142848.patch</filename>
            <type>text/plain</type>
            <size>52036</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMDU5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUxYjQ1NjY1N2Ew
ZjkxNzA2MzZhYWQxYWQ1ZjVjZDUwMWRmOTRjM2QuLjJkZjlkNjA2Y2U0NDNlNTJlYWM2NGY5YzYw
YmFjMzI5YTA5Y2I5YmQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTQtMDEt
MDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRG9Zb3VFdmVu
QmVuY2g6IEV4dHJhY3QgdGVzdHMgYW5kIHJ1bm5lciBjb2RlIGZyb20gYmVuY2htYXJrLmpzL2h0
bWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjU5
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgRXh0cmFjdGVkIGJlbmNobWFyay1ydW5uZXIuanMgYW5kIHRlc3RzLmpzIG91dCBvZiBiZW5j
aG1hcmsuanMgYW5kIGJlbmNobWFyay5odG1sLgorCisgICAgICAgIEFkZGVkIGEgImNsaWVudCIg
aW50ZXJmYWNlIHRvIEJlbmNobWFya1J1bm5lciBzbyB0aGF0IGJlbmNobWFyay5odG1sIGNvdWxk
IHJlZ2lzdGVyIG5lY2Vzc2FyeSBob29rcyB0bworICAgICAgICB1cGRhdGUgaXRzIFVJLiBBbHNv
IG1hZGUgQmVuY2htYXJrUnVubmVyIHN0b3JlIGEgdHJlZSBvZiByZXN1bHRzIHNvIHRoYXQgdGhl
IHNlcmlhbGl6YXRpb24gb2YgdGVzdCBuYW1lcworICAgICAgICBjb3VsZCBiZSBpc29sYXRlZCBm
cm9tIEJlbmNobWFya1J1bm5lciBpdHNlbGYgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIERv
WW91RXZlbkJlbmNoL2JlbmNobWFyay5odG1sOgorICAgICAgICBNb3ZlZCB0aGUgY29kZSB0byBp
bnN0YW50aWF0ZSBhbmQgdXBkYXRlIFVJIGhlcmUgZnJvbSBiZW5jaG1hcmsuanMuIFRoZSB0ZXN0
IGNvZGUgd2FzIG1vdmVkIG91dCBvZiB0aGlzCisgICAgICAgIGZpbGUgaW50byByZXNvdXJjZXMv
dGVzdHMuanMuCisKKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvYmVuY2htYXJr
LXJ1bm5lci5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
YmVuY2htYXJrLmpzLgorICAgICAgICAoU2ltcGxlUHJvbWlzZSk6IE1vdmVkIGZyb20gYmVuY2ht
YXJrLmpzCisgICAgICAgIChTaW1wbGVQcm9taXNlLnByb3RvdHlwZS50aGVuKTogRGl0dG8uCisg
ICAgICAgIChTaW1wbGVQcm9taXNlLnByb3RvdHlwZS5yZXNvbHZlKTogRGl0dG8uCisgICAgICAg
IChCZW5jaG1hcmtUZXN0U3RlcCk6IEFkZGVkLiBXcmFwcyBlYWNoIHRlc3Qgc3RlcC4KKyAgICAg
ICAgKEJlbmNobWFya1J1bm5lci5zdWl0ZSk6IE1vdmVkIGZyb20gYmVuY2htYXJrLmpzLgorICAg
ICAgICAoQmVuY2htYXJrUnVubmVyLnNldENsaWVudCk6IEFkZGVkLgorICAgICAgICAoQmVuY2ht
YXJrUnVubmVyLndhaXRGb3JFbGVtZW50KTogTW92ZWQuCisgICAgICAgIChCZW5jaG1hcmtSdW5u
ZXIuX3JlbW92ZUZyYW1lKTogRGl0dG8uCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX2FwcGVu
ZEZyYW1lKTogRGl0dG8uIFNldCB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgb2YgdGhlIGlmcmFt
ZSBhcyB0aGV5J3JlIG1vcmUgdGhhbgorICAgICAgICBwcmVzZW50YXRpb25hbCBhcyB0aGV5IGFm
ZmVjdCBwZXJmb3JtYW5jZS4KKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5fd2FpdEFuZFdhcm1V
cCk6IERpdHRvLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLl9ydW5UZXN0KTogRGl0dG8uCisg
ICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX3Rlc3ROYW1lKTogRGl0dG8uCisgICAgICAgIChCZW5j
aG1hcmtTdGF0ZSk6IERpdHRvLgorICAgICAgICAoQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmN1
cnJlbnRTdWl0ZSk6IERpdHRvLgorICAgICAgICAoQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmN1
cnJlbnRUZXN0KTogRGl0dG8uCisgICAgICAgIChCZW5jaG1hcmtTdGF0ZS5wcm90b3R5cGUubmV4
dCk6IERpdHRvLgorICAgICAgICAoQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmlzRmlyc3RUZXN0
KTogRGl0dG8uCisgICAgICAgIChCZW5jaG1hcmtTdGF0ZS5wcm90b3R5cGUucHJlcGFyZUN1cnJl
bnRTdWl0ZSk6IERpdHRvLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLnN0ZXApOiBEaXR0by4K
KyAgICAgICAgKEJlbmNobWFya1J1bm5lci5fcnVuVGVzdEFuZFJlY29yZFJlc3VsdHMpOiBEaXR0
by4gTm90ZSB0aGUgY29kZSB0byB1cGRhdGUgdGhlIFVJIGhhcyBiZWVuIG1vdmUgdG8KKyAgICAg
ICAgYmVuY2htYXJrLmh0bWwuIEFsc28gbW92ZWQgdGhlIGNvZGUgdG8gYWNjdW11bGF0ZSB0aGUg
dG90YWxzIGhlcmUgZnJvbSBfZmluYWxpemUuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX2Zp
bmFsaXplKTogTW92ZWQuIAorCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rl
c3RzLmpzOiBDb3BpZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNo
bWFyay5odG1sLgorICAgICAgICBVc2VzIEJlbmNobWFya1Rlc3RTdGVwIGluc3RlYWQgb2YgYW4g
YXJyYXkgZm9yIGVhY2ggdGVzdCBzdGVwLgorCiAyMDEzLTEyLTIzICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTYwOTQ1LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9i
ZW5jaG1hcmsuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJr
Lmh0bWwKaW5kZXggYmI1NTI4OTg4NjQ0YjczYjYwMjg0OTdjNzU0ZmRhZDc3ZDcyNmI1OC4uYTVi
ZGI1NmQ1NDczNTU5NjI3NDM0ZWVlN2U2ZDc3OTZhMWFhNTZlOSAxMDA2NDQKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuaHRtbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5odG1sCkBAIC0yLDI5NiArMiwxMjMgQEAK
IDxodG1sPgogPGhlYWQ+CiA8dGl0bGU+RG9Zb3VFdmVuQmVuY2g8L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImJlbmNobWFyay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JlbmNo
bWFyay1ydW5uZXIuanMiIGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90
ZXN0cy5qcyIgZGVmZXI+PC9zY3JpcHQ+Cis8c3R5bGU+CitpZnJhbWUgeyBib3JkZXI6IDFweCBz
b2xpZCBibGFjazsgfQorb2wgeyBsaXN0LXN0eWxlOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6
IDA7IH0KK29sIG9sIHsgbWFyZ2luLWxlZnQ6IDJlbTsgbGlzdC1wb3NpdGlvbjogb3V0c2lkZTsg
fQorLnJ1bm5pbmcgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnJhbiB7IGNvbG9y
OiBncmV5OyB9CituYXYgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB9Cis8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+CiA8c2NyaXB0PgogCi12YXIgbnVtYmVyT2ZJdGVtc1RvQWRk
ID0gMTAwOwotCi1CZW5jaG1hcmtSdW5uZXIuc3VpdGUoewotICAgIG5hbWU6ICdWYW5pbGxhSlMv
VG9kb01WQycsCi0gICAgdXJsOiAndG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9p
bmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBCZW5jaG1hcmtSdW5uZXIud2FpdEZvckVsZW1l
bnQoJyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVs
ZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICB9KTsK
LSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIFsnQWRkaW5nJyArIG51bWJlck9mSXRlbXNU
b0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciB0b2RvQ29udHJvbGxlciA9IGNvbnRlbnRXaW5k
b3cudG9kby5jb250cm9sbGVyOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAn
U29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAgICAgICAgICAgIHRvZG9Db250cm9sbGVyLmFk
ZEl0ZW0oe2tleUNvZGU6IHRvZG9Db250cm9sbGVyLkVOVEVSX0tFWSwgdGFyZ2V0OiBuZXdUb2Rv
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgICAgICBbJ0NvbXBsZXRpbmdBbGxJ
dGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQp
IHsKLSAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3JBbGwoJy50b2dnbGUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hl
Y2tib3hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNr
KCk7Ci0gICAgICAgIH1dLAotICAgICAgICBbJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAo
bmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2
YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVz
dHJveScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxl
bmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2soKTsKLSAg
ICAgICAgfV0sCi0gICAgXQotfSk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1
bmN0aW9uICgpIHsKKyAgICB2YXIgc2VsZiA9IEJlbmNobWFya1J1bm5lcjsKKyAgICB2YXIgY29u
dHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25hdicpOwogCi1CZW5jaG1hcmtSdW5uZXIu
c3VpdGUoewotICAgIG5hbWU6ICdFbWJlckpTL1RvZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvaW5kZXguaHRtbCcsCi0gICAgcHJlcGFyZTog
ZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICBjb250
ZW50V2luZG93LlRvZG9zLlN0b3JlID0gY29udGVudFdpbmRvdy5EUy5TdG9yZS5leHRlbmQoewot
ICAgICAgICAgICAgcmV2aXNpb246IDEyLAotICAgICAgICAgICAgYWRhcHRlcjogJ1RvZG9zLkxT
QWRhcHRlcicsCi0gICAgICAgICAgICBjb21taXQ6IGZ1bmN0aW9uICgpIHsgfQotICAgICAgICB9
KTsKKyAgICB2YXIgc3VpdGVzID0gQmVuY2htYXJrUnVubmVyLl9zdWl0ZXM7CisgICAgdmFyIG9s
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb2wnKTsKKyAgICB2YXIgY2hlY2tib3hlcyA9IFtd
OworICAgIGZvciAodmFyIHN1aXRlSW5kZXggPSAwOyBzdWl0ZUluZGV4IDwgc3VpdGVzLmxlbmd0
aDsgc3VpdGVJbmRleCsrKSB7CisgICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tzdWl0ZUluZGV4
XTsKKyAgICAgICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICAg
ICAgdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICAg
ICAgY2hlY2tib3guaWQgPSBzdWl0ZS5uYW1lOworICAgICAgICBjaGVja2JveC50eXBlID0gJ2No
ZWNrYm94JzsKKyAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRydWU7CisgICAgICAgIGNoZWNr
Ym94Lm9uY2hhbmdlID0gKGZ1bmN0aW9uIChzdWl0ZSwgY2hlY2tib3gpIHsgcmV0dXJuIGZ1bmN0
aW9uICgpIHsgc3VpdGUuZGlzYWJsZWQgPSAhY2hlY2tib3guY2hlY2tlZDsgfSB9KShzdWl0ZSwg
Y2hlY2tib3gpOworICAgICAgICBjaGVja2JveC5vbmNoYW5nZSgpOworICAgICAgICBjaGVja2Jv
eGVzLnB1c2goY2hlY2tib3gpOwogCi0gICAgICAgIHJldHVybiBCZW5jaG1hcmtSdW5uZXIud2Fp
dEZvckVsZW1lbnQoJyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAg
ICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdmlld3M6IGNvbnRlbnRXaW5kb3cuRW1iZXIuVmlldy52aWV3cywKLSAgICAgICAgICAg
ICAgICBlbWJlclJ1bjogY29udGVudFdpbmRvdy5FbWJlci5ydW4sCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgIH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgWydBZGRpbmcnICsgbnVt
YmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKHBhcmFtcykgewotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAg
ICAgICAgICAgIHBhcmFtcy5lbWJlclJ1bihmdW5jdGlvbiAoKSB7IHBhcmFtcy52aWV3c1sibmV3
LXRvZG8iXS5zZXQoJ3ZhbHVlJywgJ1NvbWV0aGluZyB0byBkbycgKyBpKTsgfSk7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zLmVtYmVyUnVuKGZ1bmN0aW9uICgpIHsgcGFyYW1zLnZpZXdzWyJuZXct
dG9kbyJdLmluc2VydE5ld2xpbmUoZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykpOyB9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfV0sCi0gICAgICAgIFsnQ29tcGxldGluZ0FsbEl0ZW1z
JywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0g
ICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCcuZW1iZXItY2hlY2tib3gnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2hlY2tib3hlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gcGFy
YW1zLnZpZXdzW2NoZWNrYm94ZXNbaV0uaWRdOwotICAgICAgICAgICAgICAgIHBhcmFtcy5lbWJl
clJ1bihmdW5jdGlvbiAoKSB7IHZpZXcuc2V0KCdjaGVja2VkJywgdHJ1ZSk7IH0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9XSwKLSAgICAgICAgWydEZWxldGluZ0l0ZW1zJywgZnVuY3Rpb24g
KHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2
YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVz
dHJveScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxl
bmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHBhcmFtcy5lbWJlclJ1bihmdW5jdGlvbiAoKSB7
IGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2soKTsgfSk7Ci0gICAgICAgIH1dLAotICAgIF0KLX0pOwor
ICAgICAgICBsaS5hcHBlbmRDaGlsZChjaGVja2JveCk7CisgICAgICAgIHZhciBsYWJlbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgICAgIGxhYmVsLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNlbGYuX3Rlc3ROYW1lKHN1aXRlKSkpOworICAgICAg
ICBsaS5hcHBlbmRDaGlsZChsYWJlbCk7CisgICAgICAgIGxhYmVsLmh0bWxGb3IgPSBjaGVja2Jv
eC5pZDsKIAotQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKLSAgICBuYW1lOiAnQmFja2JvbmVKUy9U
b2RvTVZDJywKLSAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9u
ZS9pbmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29u
dGVudERvY3VtZW50KSB7Ci0gICAgY29udGVudFdpbmRvdy5CYWNrYm9uZS5zeW5jID0gZnVuY3Rp
b24gKCkge30KLSAgICAgICAgcmV0dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVudCgn
I25ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgZWxlbWVu
dC5mb2N1cygpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0pOwotICAg
IH0sCi0gICAgdGVzdHM6IFsKLSAgICAgICAgWydBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRk
ICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgewotICAgICAgICAgICAgdmFyIGFwcFZpZXcgPSBjb250ZW50V2luZG93LmFwcFZpZXc7
Ci0gICAgICAgICAgICB2YXIgZmFrZUV2ZW50ID0ge3doaWNoOiBjb250ZW50V2luZG93LkVOVEVS
X0tFWX07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0Fk
ZDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8g
ZG8gJyArIGk7Ci0gICAgICAgICAgICAgICAgYXBwVmlldy5jcmVhdGVPbkVudGVyKGZha2VFdmVu
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgICAgICBbJ0NvbXBsZXRpbmdBbGxJ
dGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQp
IHsKLSAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3JBbGwoJy50b2dnbGUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hl
Y2tib3hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNr
KCk7Ci0gICAgICAgIH1dLAotICAgICAgICBbJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAo
bmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2
YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVz
dHJveScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxl
bmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2soKTsKLSAg
ICAgICAgfV0sCi0gICAgXQotfSk7CisgICAgICAgIHZhciB0ZXN0TGlzdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ29sJyk7CisgICAgICAgIGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRlc3RJ
bmRleCA8IHN1aXRlLnRlc3RzLmxlbmd0aDsgdGVzdEluZGV4KyspIHsKKyAgICAgICAgICAgIHZh
ciB0ZXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAgICAgICAgICB2
YXIgdGVzdCA9IHN1aXRlLnRlc3RzW3Rlc3RJbmRleF07CisgICAgICAgICAgICB2YXIgYW5jaG9y
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgICAgICAgYW5jaG9yLmlkID0g
c3VpdGUubmFtZSArICctJyArIHRlc3QubmFtZTsKKyAgICAgICAgICAgIHRlc3QuYW5jaG9yID0g
YW5jaG9yOworICAgICAgICAgICAgYW5jaG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHNlbGYuX3Rlc3ROYW1lKHN1aXRlLCB0ZXN0Lm5hbWUpKSk7CisgICAgICAgICAgICB0
ZXN0SXRlbS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgICAgICAgICAgdGVzdExpc3QuYXBwZW5k
Q2hpbGQodGVzdEl0ZW0pOworICAgICAgICB9CisgICAgICAgIGxpLmFwcGVuZENoaWxkKHRlc3RM
aXN0KTsKIAotQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKLSAgICBuYW1lOiAnalF1ZXJ5L1RvZG9N
VkMnLAotICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9pbmRl
eC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVudERv
Y3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBCZW5jaG1hcmtSdW5uZXIud2FpdEZvckVsZW1lbnQo
JyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVsZW1l
bnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICB9KTsKLSAg
ICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIFsnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0Fk
ZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9j
dW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBhcHAgPSBjb250ZW50V2luZG93LmFwcDsKLSAgICAg
ICAgICAgIHZhciBmYWtlRXZlbnQgPSB7d2hpY2g6IGFwcC5FTlRFUl9LRVl9OwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAg
ICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOwotICAgICAg
ICAgICAgICAgIGFwcC5jcmVhdGUuY2FsbChuZXdUb2RvLCBmYWtlRXZlbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9XSwKLSAgICAgICAgWydDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlv
biAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAg
ICB2YXIgYXBwID0gY29udGVudFdpbmRvdy5hcHA7Ci0gICAgICAgICAgICB2YXIgY2hlY2tib3hl
cyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7Ci0gICAgICAg
ICAgICB2YXIgJCA9IGNvbnRlbnRXaW5kb3cuJDsKKyAgICAgICAgb2wuYXBwZW5kQ2hpbGQobGkp
OworICAgIH0KIAotICAgICAgICAgICAgaXRlbUluZGV4VG9JZCA9IG5ldyBBcnJheShjaGVja2Jv
eGVzLmxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMu
bGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaXRlbUluZGV4VG9JZFtpXSA9ICQoY2hlY2ti
b3hlc1tpXSkuY2xvc2VzdCgnbGknKS5kYXRhKCdpZCcpOworICAgIGNvbnRyb2wuYXBwZW5kQ2hp
bGQob2wpOwogCi0gICAgICAgICAgICBhcHAuZ2V0VG9kbyA9IGZ1bmN0aW9uIChlbGVtZW50LCBj
YWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAg
ICAgICB2YXIgaWQgPSBpdGVtSW5kZXhUb0lkW3RoaXMuY3VycmVudEl0ZW1JbmRleF07Ci0gICAg
ICAgICAgICAgICAgJC5lYWNoKHRoaXMudG9kb3MsIGZ1bmN0aW9uIChqLCB2YWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbC5pZCA9PT0gaWQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQmVuY2htYXJrUnVubmVyLnNldENsaWVudCh7CisgICAg
ICAgIHdpbGxSdW5UZXN0OiBmdW5jdGlvbiAoc3VpdGUsIHRlc3QpIHsKKyAgICAgICAgICAgIHRl
c3QuYW5jaG9yLmNsYXNzTGlzdC5hZGQoJ3J1bm5pbmcnKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZGlkUnVuVGVzdDogZnVuY3Rpb24gKHN1aXRlLCB0ZXN0KSB7CisgICAgICAgICAgICB2YXIgY2xh
c3NMaXN0ID0gdGVzdC5hbmNob3IuY2xhc3NMaXN0OworICAgICAgICAgICAgY2xhc3NMaXN0LnJl
bW92ZSgncnVubmluZycpOworICAgICAgICAgICAgY2xhc3NMaXN0LmFkZCgncmFuJyk7CisgICAg
ICAgIH0sCisgICAgICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7
CisgICAgICAgICAgICB2YXIgcmVzdWx0cyA9ICcnOworICAgICAgICAgICAgdmFyIHRvdGFsID0g
MDsgLy8gRklYTUU6IENvbXB1dGUgdGhlIHRvdGFsIHByb3Blcmx5LgorICAgICAgICAgICAgZm9y
ICh2YXIgc3VpdGVOYW1lIGluIG1lYXN1cmVkVmFsdWVzKSB7CisgICAgICAgICAgICAgICAgdmFy
IHN1aXRlUmVzdWx0cyA9IG1lYXN1cmVkVmFsdWVzW3N1aXRlTmFtZV07CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gc3VpdGVSZXN1bHRzLnRlc3RzKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IHN1aXRlUmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV07
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1YnRlc3ROYW1lIGluIHRlc3RSZXN1bHRz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzICs9IHN1aXRlTmFtZSArICcgOiAn
ICsgdGVzdE5hbWUgKyAnIDogJyArIHN1YnRlc3ROYW1lCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKyAnOiAnICsgdGVzdFJlc3VsdHNbc3VidGVzdE5hbWVdICsgJyBtc1xuJzsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHRzICs9IHN1aXRlTmFtZSArICcgOiAnICsgc3VpdGVSZXN1
bHRzLnRvdGFsICsgJyBtc1xuJzsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzdWl0ZVJlc3Vs
dHMudG90YWw7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRzICs9ICdUb3RhbCA6
ICcgKyB0b3RhbCArICcgbXNcbic7CiAKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2hlY2tib3hlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGFwcC5jdXJyZW50SXRl
bUluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBhcHAudG9nZ2xlLmNhbGwoY2hlY2tib3hlc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgICAgICBbJ0RlbGV0aW5nQWxsSXRl
bXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
Ci0gICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NsZWFyLWNvbXBs
ZXRlZCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICB2YXIgYXBwID0gY29udGVudFdpbmRvdy5hcHA7
Ci0gICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxl
dGVCdXR0b25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXBwLmN1cnJlbnRJdGVt
SW5kZXggPSBpOwotICAgICAgICAgICAgICAgIGFwcC5kZXN0cm95LmNhbGwoZGVsZXRlQnV0dG9u
c1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgIF0KLX0pOworICAgICAgICAg
ICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOworICAgICAgICAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcmUpOworICAgICAgICAgICAgcHJlLnRleHRDb250
ZW50ID0gcmVzdWx0czsKKyAgICAgICAgfQorICAgIH0pOwogCi1CZW5jaG1hcmtSdW5uZXIuc3Vp
dGUoewotICAgIG5hbWU6ICdBbmd1bGFySlMvVG9kb01WQycsCi0gICAgdXJsOiAndG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2luZGV4Lmh0bWwnLAotICAgIHByZXBhcmU6
IGZ1bmN0aW9uIChjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVudCgnI25ldy10b2RvJykudGhlbihmdW5j
dGlvbiAoZWxlbWVudCkgewotICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwotICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0pOwotICAgIH0sCi0gICAgdGVzdHM6IFsKLSAg
ICAgICAgWydBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24g
KG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAg
dmFyIHRvZG9tdmMgPSBjb250ZW50V2luZG93LnRvZG9tdmM7Ci0gICAgICAgICAgICB2YXIgc3Vi
bWl0RXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKLSAgICAgICAgICAgIHN1
Ym1pdEV2ZW50LmluaXRFdmVudCgnc3VibWl0JywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICB2
YXIgaW5wdXRFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOwotICAgICAgICAg
ICAgaW5wdXRFdmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7Ci0gICAgICAg
ICAgICAgICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpOwotICAgICAgICAgICAg
ICAgIG5ld1RvZG8uZm9ybS5kaXNwYXRjaEV2ZW50KHN1Ym1pdEV2ZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfV0sCi0gICAgICAgIFsnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24g
KG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAg
dmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2ds
ZScpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsg
aSsrKQotICAgICAgICAgICAgICAgIGNoZWNrYm94ZXNbaV0uY2xpY2soKTsKLSAgICAgICAgfV0s
Ci0gICAgICAgIFsnRGVsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50
V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25z
ID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspCi0gICAg
ICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygpOwotICAgICAgICB9XSwKLSAgICBd
Ci19KTsKKyAgICB2YXIgY3VycmVudFN0YXRlID0gbnVsbDsKKworICAgIC8vIERvbid0IGNhbGwg
c3RlcCB3aGlsZSBzdGVwIGlzIGFscmVhZHkgZXhlY3V0aW5nLgorICAgIHZhciBidXR0b24gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKKyAgICBidXR0b24udGV4dENvbnRlbnQg
PSAnU3RlcCc7CisgICAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNl
bGYuc3RlcChjdXJyZW50U3RhdGUpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7IGN1cnJlbnRTdGF0
ZSA9IHN0YXRlOyB9KTsKKyAgICB9CisgICAgY29udHJvbC5hcHBlbmRDaGlsZChidXR0b24pOwog
Ci1CZW5jaG1hcmtSdW5uZXIuc3VpdGUoewotICAgIG5hbWU6ICdSZWFjdC9Ub2RvTVZDJywKLSAg
ICB1cmw6ICd0b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0
bWwnLAotICAgIHByZXBhcmU6IGZ1bmN0aW9uIChjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1l
bnQpIHsKLSAgICAgICAgY29udGVudFdpbmRvdy5VdGlscy5zdG9yZSA9IGZ1bmN0aW9uICgpIHt9
Ci0gICAgICAgIHJldHVybiBCZW5jaG1hcmtSdW5uZXIud2FpdEZvckVsZW1lbnQoJyNuZXctdG9k
bycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMo
KTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIGZ1bmN0aW9uIGNhbGxOZXh0U3Rl
cChzdGF0ZSkgeworICAgICAgICBzZWxmLnN0ZXAoc3RhdGUpLnRoZW4oZnVuY3Rpb24gKG5ld1N0
YXRlKSB7CisgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTsKKyAgICAgICAgICAg
IGlmIChuZXdTdGF0ZSkKKyAgICAgICAgICAgICAgICBjYWxsTmV4dFN0ZXAobmV3U3RhdGUpOwog
ICAgICAgICB9KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIFsnQWRkaW5nJyArIG51
bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciB0b2RvbXZjID0gY29udGVu
dFdpbmRvdy50b2RvbXZjOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
Zkl0ZW1zVG9BZGQ7IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29t
ZXRoaW5nIHRvIGRvICcgKyBpOworICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciBrZXlkb3du
RXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKLSAgICAgICAgICAgICAgICBr
ZXlkb3duRXZlbnQuaW5pdEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAga2V5ZG93bkV2ZW50LndoaWNoID0gMTM7IC8vIFZLX0VOVEVSCi0gICAgICAgICAgICAg
ICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KGtleWRvd25FdmVudCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH1dLAotICAgICAgICBbJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChuZXdU
b2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBj
aGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykK
LSAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7Ci0gICAgICAgIH1dLAotICAg
ICAgICBbJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRv
dywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNv
bnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOwotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQotICAgICAgICAg
ICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2soKTsKLSAgICAgICAgfV0sCi0gICAgXQotfSk7
CisgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOworICAg
IGJ1dHRvbi50ZXh0Q29udGVudCA9ICdSdW4nOworICAgIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rp
b24gKCkgeyBjYWxsTmV4dFN0ZXAoY3VycmVudFN0YXRlKTsgfQorICAgIGNvbnRyb2wuYXBwZW5k
Q2hpbGQoYnV0dG9uKTsKIAotdmFyIGFjdGlvbkNvdW50ID0gNTA7Ci1CZW5jaG1hcmtSdW5uZXIu
c3VpdGUoewotICAgIG5hbWU6ICdGbGlnaHRKUy9NYWlsQ2xpZW50JywKLSAgICB1cmw6ICdmbGln
aHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sJywKLSAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29u
dGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgIHJldHVybiBCZW5jaG1hcmtS
dW5uZXIud2FpdEZvckVsZW1lbnQoJy5zcGFuOCcpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsK
LSAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIHRlc3RzOiBbCi0gICAgICAgIFsnT3BlbmluZ1Rh
YnMnICsgYWN0aW9uQ291bnQgKyAnVGltZXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdp
bmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYWN0aW9uQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGF0ZXInKS5jbGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VudCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICAg
ICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmFzaCcpLmNsaWNrKCk7Ci0gICAg
ICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNr
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgICAgICBbJ01vdmluZ0VtYWlscycg
KyBhY3Rpb25Db3VudCArICdUaW1lcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93
LCBjb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW5ib3gnKS5jbGljaygpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhY3Rpb25Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZV9tYWlsJykuY2xpY2soKTsKLSAgICAgICAg
ICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21vdmVfdG9fc2VsZWN0b3Ig
I2xhdGVyJykuY2xpY2soKTsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xhdGVyJykuY2xpY2soKTsKLSAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlX21haWwnKS5jbGljaygpOwotICAg
ICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbW92ZV90b19zZWxl
Y3RvciAjdHJhc2gnKS5jbGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndHJhc2gnKS5jbGljaygpOwotICAgICAgICAgICAgICAgIGNvbnRlbnRE
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsKLSAgICAgICAgICAg
ICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFpbCcpLmNsaWNrKCk7
Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtb3ZlX3Rv
X3NlbGVjdG9yICNpbmJveCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH1dLAotICAgICAgICBbJ1NlbmRpbmcnICsgYWN0aW9uQ291bnQgKyAnTmV3RW1haWxzJywg
ZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25Db3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdfbWFpbCcpLmNsaWNr
KCk7Ci0gICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNp
cGllbnRfc2VsZWN0Jykuc2VsZWN0ZWRJbmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgdmFyIHN1
YmplY3QgPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbXBvc2Vfc3ViamVjdCcp
OwotICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gY29udGVudERvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb21wb3NlX21lc3NhZ2UnKTsKLSAgICAgICAgICAgICAgICBzdWJqZWN0LmZvY3Vz
KCk7Ci0gICAgICAgICAgICAgICAgY29udGVudFdpbmRvdy4kKHN1YmplY3QpLnRyaWdnZXIoJ2tl
eWRvd24nKTsKLSAgICAgICAgICAgICAgICBjb250ZW50V2luZG93LiQoc3ViamVjdCkudGV4dCgn
SGVsbG8nKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlLmZvY3VzKCk7Ci0gICAgICAgICAgICAg
ICAgY29udGVudFdpbmRvdy4kKG1lc3NhZ2UpLnRyaWdnZXIoJ2tleWRvd24nKTsKLSAgICAgICAg
ICAgICAgICBjb250ZW50V2luZG93LiQobWVzc2FnZSkudGV4dCgnSGVsbG8sXG5cblRoaXMgaXMg
YSB0ZXN0IG1lc3NhZ2UuXG5cbi0gV2ViS2l0dGVuJyk7Ci0gICAgICAgICAgICAgICAgY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kX2NvbXBvc2VkJykuY2xpY2soKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfV0sCi0gICAgXQorICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoY29udHJvbCk7CiB9KTsKIAogPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KIDwvYm9keT4K
IDwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvYmVu
Y2htYXJrLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOWFlNDgwMzE3YmU3OWI5NjZhZWMyMDlj
ZWNjNTFhYTg0N2VlMjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotCi0vLyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21p
c2UgaWYgYXZhaWxhYmxlLgotLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBj
b21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlzZS4KLWZ1bmN0aW9uIFNpbXBsZVByb21pc2Uo
KSB7Ci0gICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBudWxsOwotICAgIHRoaXMuX2NhbGxiYWNr
ID0gbnVsbDsKLX0KLQotU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgewotICAgIGlmICh0aGlzLl9jYWxsYmFjaykKLSAgICB0aHJvdyAiU2ltcGxlUHJv
bWlzZSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhlbiI7Ci0gICAgdGhpcy5f
Y2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG5ldyBTaW1w
bGVQcm9taXNlOwotICAgIAotICAgIGlmICh0aGlzLl9yZXNvbHZlZCkKLSAgICAgICAgdGhpcy5y
ZXNvbHZlKHRoaXMuX3Jlc29sdmVkVmFsdWUpOwotCi0gICAgcmV0dXJuIHRoaXMuX2NoYWluZWRQ
cm9taXNlOwotfQotCi1TaW1wbGVQcm9taXNlLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24g
KHZhbHVlKSB7Ci0gICAgaWYgKCF0aGlzLl9jYWxsYmFjaykgewotICAgICAgICB0aGlzLl9yZXNv
bHZlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3Jlc29sdmVkVmFsdWUgPSB2YWx1ZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSB0aGlzLl9jYWxsYmFjayh2YWx1
ZSk7Ci0gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFNpbXBsZVByb21pc2UpIHsKLSAgICAgICAg
dmFyIGNoYWluZWRQcm9taXNlID0gdGhpcy5fY2hhaW5lZFByb21pc2U7Ci0gICAgICAgIHJlc3Vs
dC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsgY2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1bHQp
OyB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGhpcy5fY2hhaW5lZFByb21pc2UucmVzb2x2ZShy
ZXN1bHQpOwotfQotCi12YXIgQmVuY2htYXJrUnVubmVyID0ge19zdWl0ZXM6IFtdLCBfcHJlcGFy
ZVJldHVyblZhbHVlOiBudWxsLCBfbWVhc3VyZWRWYWx1ZXM6IHt9fTsKLQotQmVuY2htYXJrUnVu
bmVyLnN1aXRlID0gZnVuY3Rpb24gKHN1aXRlKSB7Ci0gICAgdmFyIHNlbGYgPSBCZW5jaG1hcmtS
dW5uZXI7Ci0gICAgc2VsZi5fc3VpdGVzLnB1c2goc3VpdGUpOwotfQotCi1CZW5jaG1hcmtSdW5u
ZXIud2FpdEZvckVsZW1lbnQgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHsKLSAgICB2YXIgc2VsZiA9
IEJlbmNobWFya1J1bm5lcjsKLSAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOwot
ICAgIHZhciBjb250ZW50RG9jdW1lbnQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9jdW1lbnQ7Ci0K
LSAgICBmdW5jdGlvbiByZXNvbHZlSWZSZWFkeSgpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBj
b250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7Ci0gICAgICAgIGlmIChlbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHByb21pc2UucmVzb2x2ZShlbGVtZW50KTsKLSAgICAg
ICAgc2V0VGltZW91dChyZXNvbHZlSWZSZWFkeSwgNTApOwotICAgIH0KLQotICAgIHJlc29sdmVJ
ZlJlYWR5KCk7Ci0gICAgcmV0dXJuIHByb21pc2U7Ci19Ci0KLUJlbmNobWFya1J1bm5lci5fcmVt
b3ZlRnJhbWUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHNlbGYgPSBCZW5jaG1hcmtSdW5uZXI7
Ci0gICAgaWYgKHNlbGYuX2ZyYW1lKSB7Ci0gICAgICAgIHNlbGYuX2ZyYW1lLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoc2VsZi5fZnJhbWUpOwotICAgICAgICBzZWxmLl9mcmFtZSA9IG51bGw7Ci0g
ICAgfQotfQotCi1CZW5jaG1hcmtSdW5uZXIuX2FwcGVuZEZyYW1lID0gZnVuY3Rpb24gKHNyYykg
ewotICAgIHZhciBzZWxmID0gQmVuY2htYXJrUnVubmVyOwotICAgIHZhciBmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZnJhbWUpOwotICAgIHNlbGYuX2ZyYW1lID0gZnJhbWU7Ci0gICAgcmV0dXJuIGZyYW1lOwot
fQotCi1CZW5jaG1hcmtSdW5uZXIuX3dhaXRBbmRXYXJtVXAgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
dmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLSAgICBmdW5jdGlvbiBGaWJvbmFjY2kobikg
ewotICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDEwMCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKG4gPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBlbHNlIGlmIChuID09IDEpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmV0
dXJuIEZpYm9uYWNjaShuIC0gMikgKyBGaWJvbmFjY2kobiAtIDEpOwotICAgIH0KLQotICAgIHZh
ciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIEZpYm9uYWNjaSgxMDApOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsK
LSAgICB9LCAyMDApOwotICAgIHJldHVybiBwcm9taXNlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9u
IG91Z2h0IGJlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gRG9uJ3QgZXZlbiB1c2UgU2ltcGxlUHJv
bWlzZS4KLUJlbmNobWFya1J1bm5lci5fcnVuVGVzdCA9IGZ1bmN0aW9uKHN1aXRlLCB0ZXN0RnVu
Y3Rpb24sIHByZXBhcmVSZXR1cm5WYWx1ZSwgY2FsbGJhY2spCi17Ci0gICAgdmFyIHNlbGYgPSBC
ZW5jaG1hcmtSdW5uZXI7Ci0gICAgdmFyIG5vdyA9IHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5k
b3cucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnBlcmZvcm1h
bmNlLm5vdygpOyB9IDogRGF0ZS5ub3c7Ci0KLSAgICB2YXIgY29udGVudFdpbmRvdyA9IHNlbGYu
X2ZyYW1lLmNvbnRlbnRXaW5kb3c7Ci0gICAgdmFyIGNvbnRlbnREb2N1bWVudCA9IHNlbGYuX2Zy
YW1lLmNvbnRlbnREb2N1bWVudDsKLQotICAgIHZhciBzdGFydFRpbWUgPSBub3coKTsKLSAgICB0
ZXN0RnVuY3Rpb24ocHJlcGFyZVJldHVyblZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9j
dW1lbnQpOwotICAgIHZhciBlbmRUaW1lID0gbm93KCk7Ci0gICAgdmFyIHN5bmNUaW1lID0gZW5k
VGltZSAtIHN0YXJ0VGltZTsKLQotICAgIHZhciBzdGFydFRpbWUgPSBub3coKTsKLSAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKLSAgICAg
ICAgY2FsbGJhY2soc3luY1RpbWUsIGVuZFRpbWUgLSBzdGFydFRpbWUpOwotICAgIH0sIDApOwot
fQotCi1CZW5jaG1hcmtSdW5uZXIuX3Rlc3ROYW1lID0gZnVuY3Rpb24gKHN1aXRlLCB0ZXN0TmFt
ZSwgbWV0cmljKSB7Ci0gICAgaWYgKCF0ZXN0TmFtZSkKLSAgICAgICAgcmV0dXJuIHN1aXRlLm5h
bWU7Ci0gICAgcmV0dXJuIHN1aXRlLm5hbWUgKyAnLycgKyB0ZXN0TmFtZSArIChtZXRyaWMgPyAn
LycgKyBtZXRyaWMgOiAnJyk7Ci19Ci0KLUJlbmNobWFya1J1bm5lci5fdGVzdEl0ZW1JZCA9IGZ1
bmN0aW9uIChzdWl0ZSwgdGVzdE5hbWUpIHsKLSAgICByZXR1cm4gc3VpdGUubmFtZSArICctJyAr
IHRlc3ROYW1lOwotfQotCi1CZW5jaG1hcmtSdW5uZXIubGlzdFN1aXRlcyA9IGZ1bmN0aW9uICgp
IHsKLSAgICB2YXIgc2VsZiA9IEJlbmNobWFya1J1bm5lcjsKLQotICAgIHZhciBjb250cm9sID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmF2Jyk7Ci0KLSAgICB2YXIgc3VpdGVzID0gc2VsZi5f
c3VpdGVzOwotICAgIHZhciBvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29sJyk7Ci0gICAg
dmFyIGNoZWNrYm94ZXMgPSBbXTsKLSAgICBmb3IgKHZhciBzdWl0ZUluZGV4ID0gMDsgc3VpdGVJ
bmRleCA8IHN1aXRlcy5sZW5ndGg7IHN1aXRlSW5kZXgrKykgewotICAgICAgICB2YXIgc3VpdGUg
PSBzdWl0ZXNbc3VpdGVJbmRleF07Ci0gICAgICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2xpJyk7Ci0gICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2lucHV0Jyk7Ci0gICAgICAgIGNoZWNrYm94LmlkID0gc3VpdGUubmFtZTsKLSAgICAgICAg
Y2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7Ci0gICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0
cnVlOwotICAgICAgICBjaGVja2JveGVzLnB1c2goY2hlY2tib3gpOwotCi0gICAgICAgIGxpLmFw
cGVuZENoaWxkKGNoZWNrYm94KTsKLSAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnbGFiZWwnKTsKLSAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoc2VsZi5fdGVzdE5hbWUoc3VpdGUpKSk7Ci0gICAgICAgIGxpLmFwcGVuZENo
aWxkKGxhYmVsKTsKLSAgICAgICAgbGFiZWwuaHRtbEZvciA9IGNoZWNrYm94LmlkOwotCi0gICAg
ICAgIHZhciB0ZXN0TGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29sJyk7Ci0gICAgICAg
IGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IHN1aXRlLnRlc3RzLmxlbmd0aDsg
dGVzdEluZGV4KyspIHsKLSAgICAgICAgICAgIHZhciB0ZXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2xpJyk7Ci0gICAgICAgICAgICB2YXIgdGVzdCA9IHN1aXRlLnRlc3RzW3Rlc3RJ
bmRleF07Ci0gICAgICAgICAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YScpOwotICAgICAgICAgICAgYW5jaG9yLmlkID0gc2VsZi5fdGVzdEl0ZW1JZChzdWl0ZSwgdGVz
dFswXSk7Ci0gICAgICAgICAgICBhbmNob3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoc2VsZi5fdGVzdE5hbWUoc3VpdGUsIHRlc3RbMF0pKSk7Ci0gICAgICAgICAgICB0ZXN0
SXRlbS5hcHBlbmRDaGlsZChhbmNob3IpOwotICAgICAgICAgICAgdGVzdExpc3QuYXBwZW5kQ2hp
bGQodGVzdEl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIGxpLmFwcGVuZENoaWxkKHRlc3RMaXN0
KTsKLQotICAgICAgICBvbC5hcHBlbmRDaGlsZChsaSk7Ci0gICAgfQotCi0gICAgY29udHJvbC5h
cHBlbmRDaGlsZChvbCk7Ci0KLSAgICB2YXIgY3VycmVudFN0YXRlID0gbnVsbDsKLQotICAgIC8v
IERvbid0IGNhbGwgc3RlcCB3aGlsZSBzdGVwIGlzIGFscmVhZHkgZXhlY3V0aW5nLgotICAgIHZh
ciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKLSAgICBidXR0b24u
dGV4dENvbnRlbnQgPSAnU3RlcCc7Ci0gICAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIHNlbGYuc3RlcChjdXJyZW50U3RhdGUpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7
IGN1cnJlbnRTdGF0ZSA9IHN0YXRlOyB9KTsKLSAgICB9Ci0gICAgY29udHJvbC5hcHBlbmRDaGls
ZChidXR0b24pOwotCi0gICAgZnVuY3Rpb24gY2FsbE5leHRTdGVwKHN0YXRlKSB7Ci0gICAgICAg
IHNlbGYuc3RlcChzdGF0ZSkudGhlbihmdW5jdGlvbiAobmV3U3RhdGUpIHsKLSAgICAgICAgICAg
IGN1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlOwotICAgICAgICAgICAgaWYgKG5ld1N0YXRlKQotICAg
ICAgICAgICAgICAgIGNhbGxOZXh0U3RlcChuZXdTdGF0ZSk7Ci0gICAgICAgIH0pOwotICAgIH0K
LQotICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKLSAg
ICBidXR0b24udGV4dENvbnRlbnQgPSAnUnVuJzsKLSAgICBidXR0b24ub25jbGljayA9IGZ1bmN0
aW9uICgpIHsgY2FsbE5leHRTdGVwKGN1cnJlbnRTdGF0ZSk7IH0KLSAgICBjb250cm9sLmFwcGVu
ZENoaWxkKGJ1dHRvbik7Ci0KLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRyb2wp
OwotfQotCi1mdW5jdGlvbiBCZW5jaG1hcmtTdGF0ZShzdWl0ZXMpIHsKLSAgICB0aGlzLl9zdWl0
ZXMgPSBzdWl0ZXM7Ci0gICAgdGhpcy5fc3VpdGVJbmRleCA9IC0xOwotICAgIHRoaXMuX3Rlc3RJ
bmRleCA9IDA7Ci0gICAgdGhpcy5uZXh0KCk7Ci19Ci0KLUJlbmNobWFya1N0YXRlLnByb3RvdHlw
ZS5jdXJyZW50U3VpdGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5fc3VpdGVzW3Ro
aXMuX3N1aXRlSW5kZXhdOwotfQotCi1CZW5jaG1hcmtTdGF0ZS5wcm90b3R5cGUuY3VycmVudFRl
c3QgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHN1aXRlID0gdGhpcy5jdXJyZW50U3VpdGUoKTsK
LSAgICByZXR1cm4gc3VpdGUgPyBzdWl0ZS50ZXN0c1t0aGlzLl90ZXN0SW5kZXhdIDogbnVsbDsK
LX0KLQotQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
dGhpcy5fdGVzdEluZGV4Kys7Ci0KLSAgICB2YXIgc3VpdGUgPSB0aGlzLl9zdWl0ZXNbdGhpcy5f
c3VpdGVJbmRleF07Ci0gICAgaWYgKHN1aXRlICYmIHRoaXMuX3Rlc3RJbmRleCA8IHN1aXRlLnRl
c3RzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICB0aGlzLl90ZXN0SW5kZXgg
PSAwOwotICAgIGRvIHsKLSAgICAgICAgdGhpcy5fc3VpdGVJbmRleCsrOwotICAgIH0gd2hpbGUg
KHRoaXMuX3N1aXRlSW5kZXggPCB0aGlzLl9zdWl0ZXMubGVuZ3RoICYmICFkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCh0aGlzLl9zdWl0ZXNbdGhpcy5fc3VpdGVJbmRleF0ubmFtZSkuY2hlY2tlZCk7
Ci0KLSAgICByZXR1cm4gdGhpczsKLX0KLQotQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmlzRmly
c3RUZXN0ID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiAhdGhpcy5fdGVzdEluZGV4OwotfQot
Ci1CZW5jaG1hcmtTdGF0ZS5wcm90b3R5cGUucHJlcGFyZUN1cnJlbnRTdWl0ZSA9IGZ1bmN0aW9u
IChmcmFtZSkgewotICAgIHZhciBzZWxmID0gdGhpczsKLSAgICB2YXIgc3VpdGUgPSB0aGlzLmN1
cnJlbnRTdWl0ZSgpOwotICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7Ci0gICAg
ZnJhbWUub25sb2FkID0gZnVuY3Rpb24gKCkgewotICAgICAgICBzdWl0ZS5wcmVwYXJlKGZyYW1l
LmNvbnRlbnRXaW5kb3csIGZyYW1lLmNvbnRlbnREb2N1bWVudCkudGhlbihmdW5jdGlvbiAocmVz
dWx0KSB7IHByb21pc2UucmVzb2x2ZShyZXN1bHQpOyB9KTsKLSAgICB9Ci0gICAgZnJhbWUuc3Jj
ID0gc3VpdGUudXJsOwotICAgIHJldHVybiBwcm9taXNlOwotfQotCi1CZW5jaG1hcmtSdW5uZXIu
c3RlcCA9IGZ1bmN0aW9uIChzdGF0ZSkgewotICAgIHZhciBzZWxmID0gQmVuY2htYXJrUnVubmVy
OwotCi0gICAgaWYgKCFzdGF0ZSkKLSAgICAgICAgc3RhdGUgPSBuZXcgQmVuY2htYXJrU3RhdGUo
c2VsZi5fc3VpdGVzKTsKLQotICAgIHZhciBzdWl0ZSA9IHN0YXRlLmN1cnJlbnRTdWl0ZSgpOwot
ICAgIGlmICghc3VpdGUpIHsKLSAgICAgICAgc2VsZi5fZmluYWxpemUoKTsKLSAgICAgICAgdmFy
IHByb21pc2UgPSBuZXcgU2ltcGxlUHJvbWlzZTsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7
Ci0gICAgICAgIHJldHVybiBwcm9taXNlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZS5pc0ZpcnN0
VGVzdCgpKSB7Ci0gICAgICAgIHNlbGYuX21hc3VyZWRWYWx1ZXNGb3JDdXJyZW50U3VpdGUgPSB7
fTsKLSAgICAgICAgcmV0dXJuIHN0YXRlLnByZXBhcmVDdXJyZW50U3VpdGUoc2VsZi5fYXBwZW5k
RnJhbWUoKSkudGhlbihmdW5jdGlvbiAocHJlcGFyZVJldHVyblZhbHVlKSB7Ci0gICAgICAgICAg
ICBzZWxmLl9wcmVwYXJlUmV0dXJuVmFsdWUgPSBwcmVwYXJlUmV0dXJuVmFsdWU7Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuVGVzdEFuZFJlY29yZFJlc3VsdHMoc3RhdGUpOwotICAgICAg
ICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2VsZi5fcnVuVGVzdEFuZFJlY29yZFJlc3VsdHMo
c3RhdGUpOwotfQotCi1CZW5jaG1hcmtSdW5uZXIuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzID0g
ZnVuY3Rpb24gKHN0YXRlKSB7Ci0gICAgdmFyIHNlbGYgPSBCZW5jaG1hcmtSdW5uZXI7Ci0gICAg
dmFyIHByb21pc2UgPSBuZXcgU2ltcGxlUHJvbWlzZTsKLSAgICB2YXIgc3VpdGUgPSBzdGF0ZS5j
dXJyZW50U3VpdGUoKTsKLSAgICB2YXIgdGVzdCA9IHN0YXRlLmN1cnJlbnRUZXN0KCk7Ci0KLSAg
ICB2YXIgdGVzdE5hbWUgPSB0ZXN0WzBdOwotICAgIHZhciB0ZXN0SXRlbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKHNlbGYuX3Rlc3RJdGVtSWQoc3VpdGUsIHRlc3ROYW1lKSk7Ci0gICAgdGVz
dEl0ZW0uY2xhc3NMaXN0LmFkZCgncnVubmluZycpOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgewotICAgICAgICBzZWxmLl9ydW5UZXN0KHN1aXRlLCB0ZXN0WzFdLCBzZWxmLl9wcmVwYXJl
UmV0dXJuVmFsdWUsIGZ1bmN0aW9uIChzeW5jVGltZSwgYXN5bmNUaW1lKSB7Ci0gICAgICAgICAg
ICBzZWxmLl9tYXN1cmVkVmFsdWVzRm9yQ3VycmVudFN1aXRlW3NlbGYuX3Rlc3ROYW1lKHN1aXRl
LCB0ZXN0TmFtZSwgJ1N5bmMnKV0gPSBzeW5jVGltZTsKLSAgICAgICAgICAgIHNlbGYuX21hc3Vy
ZWRWYWx1ZXNGb3JDdXJyZW50U3VpdGVbc2VsZi5fdGVzdE5hbWUoc3VpdGUsIHRlc3ROYW1lLCAn
QXN5bmMnKV0gPSBhc3luY1RpbWU7Ci0gICAgICAgICAgICB0ZXN0SXRlbS5jbGFzc0xpc3QucmVt
b3ZlKCdydW5uaW5nJyk7Ci0gICAgICAgICAgICB0ZXN0SXRlbS5jbGFzc0xpc3QuYWRkKCdyYW4n
KTsKLSAgICAgICAgICAgIHN0YXRlLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5jdXJy
ZW50U3VpdGUoKSAhPSBzdWl0ZSkgewotICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7Ci0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgdGl0bGUgaW4gc2VsZi5fbWFzdXJlZFZhbHVlc0ZvckN1
cnJlbnRTdWl0ZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzZWxmLl9tYXN1
cmVkVmFsdWVzRm9yQ3VycmVudFN1aXRlW3RpdGxlXTsKLSAgICAgICAgICAgICAgICAgICAgdG90
YWwgKz0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX21lYXN1cmVkVmFsdWVzW3Rp
dGxlXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZWxmLl9t
ZWFzdXJlZFZhbHVlc1tzZWxmLl90ZXN0TmFtZShzdWl0ZSldID0gdG90YWw7Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fcmVtb3ZlRnJhbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBy
b21pc2UucmVzb2x2ZShzdGF0ZSk7Ci0gICAgICAgIH0pOwotICAgIH0sIDApOwotICAgIHJldHVy
biBwcm9taXNlOwotfQotCi1CZW5jaG1hcmtSdW5uZXIuX2ZpbmFsaXplID0gZnVuY3Rpb24gKCkg
ewotICAgIHZhciBzZWxmID0gQmVuY2htYXJrUnVubmVyOwotCi0gICAgdmFyIHJlc3VsdHMgPSAn
JzsKLSAgICB2YXIgdG90YWwgPSAwOyAvLyBGSVhNRTogQ29tcHV0ZSB0aGUgdG90YWwgcHJvcGVy
bHkuCi0gICAgZm9yICh2YXIgdGl0bGUgaW4gc2VsZi5fbWVhc3VyZWRWYWx1ZXMpIHsKLSAgICAg
ICAgcmVzdWx0cyArPSB0aXRsZSArICcgOiAnICsgc2VsZi5fbWVhc3VyZWRWYWx1ZXNbdGl0bGVd
ICsgJyBtc1xuJzsKLSAgICAgICAgdG90YWwgKz0gc2VsZi5fbWVhc3VyZWRWYWx1ZXNbdGl0bGVd
OwotICAgIH0KLSAgICByZXN1bHRzICs9ICdUb3RhbCA6ICcgKyAodG90YWwgLyAyKSArICcgbXNc
bic7Ci0gICAgc2VsZi5fbWVhc3VyZWRWYWx1ZXMgPSB7fTsKLQotICAgIHNlbGYuX3JlbW92ZUZy
YW1lKCk7Ci0KLSAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBw
cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsKLSAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHByZSk7Ci0gICAgcHJlLnRleHRDb250ZW50ID0gcmVzdWx0czsKLX0KLQotd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7IEJlbmNobWFya1J1bm5l
ci5saXN0U3VpdGVzKCk7IH0pOwotCi0oZnVuY3Rpb24gKCkgewotICAgIHZhciBzdHlsZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7Ci0gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2lmcmFtZSB7IHdpZHRoOiAxMDAwcHg7IGhlaWdodDogNTAw
cHg7IGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOyB9JwotICAgICAgICArICdvbCB7IGxpc3Qtc3R5
bGU6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgfScKLSAgICAgICAgKyAnb2wgb2wgeyBt
YXJnaW4tbGVmdDogMmVtOyBsaXN0LXBvc2l0aW9uOiBvdXRzaWRlOyB9JwotICAgICAgICArICcu
cnVubmluZyB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9JwotICAgICAgICArICcucmFu
IHtjb2xvcjogZ3JleX0nCi0gICAgICAgICsgJ25hdiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgcmln
aHQ6IDEwcHg7IH0nKSk7Ci0gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7Ci19
KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJj
ZXMvYmVuY2htYXJrLXJ1bm5lci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
cmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmExNGZhMDRjM2E3ZWM0
NzkxOTdiZWYwNDBjNWNjYmQ5MDczOTJkMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMKQEAgLTAs
MCArMSwyNDEgQEAKKy8vIEZJWE1FOiBVc2UgdGhlIHJlYWwgcHJvbWlzZSBpZiBhdmFpbGFibGUu
CisvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgaW50ZXJmYWNlIGlzIGNvbXBhdGlibGUgd2l0aCB0
aGUgcmVhbCBQcm9taXNlLgorZnVuY3Rpb24gU2ltcGxlUHJvbWlzZSgpIHsKKyAgICB0aGlzLl9j
aGFpbmVkUHJvbWlzZSA9IG51bGw7CisgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOworfQorCitT
aW1wbGVQcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAg
aWYgKHRoaXMuX2NhbGxiYWNrKQorICAgICAgICB0aHJvdyAiU2ltcGxlUHJvbWlzZSBkb2Vzbid0
IHN1cHBvcnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhlbiI7CisgICAgdGhpcy5fY2FsbGJhY2sgPSBj
YWxsYmFjazsKKyAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOwor
ICAgIAorICAgIGlmICh0aGlzLl9yZXNvbHZlZCkKKyAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMu
X3Jlc29sdmVkVmFsdWUpOworCisgICAgcmV0dXJuIHRoaXMuX2NoYWluZWRQcm9taXNlOworfQor
CitTaW1wbGVQcm9taXNlLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgaWYgKCF0aGlzLl9jYWxsYmFjaykgeworICAgICAgICB0aGlzLl9yZXNvbHZlZCA9IHRydWU7
CisgICAgICAgIHRoaXMuX3Jlc29sdmVkVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZhciByZXN1bHQgPSB0aGlzLl9jYWxsYmFjayh2YWx1ZSk7CisgICAgaWYg
KHJlc3VsdCBpbnN0YW5jZW9mIFNpbXBsZVByb21pc2UpIHsKKyAgICAgICAgdmFyIGNoYWluZWRQ
cm9taXNlID0gdGhpcy5fY2hhaW5lZFByb21pc2U7CisgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0
aW9uIChyZXN1bHQpIHsgY2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1bHQpOyB9KTsKKyAgICB9
IGVsc2UKKyAgICAgICAgdGhpcy5fY2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1bHQpOworfQor
CitmdW5jdGlvbiBCZW5jaG1hcmtUZXN0U3RlcCh0ZXN0TmFtZSwgdGVzdEZ1bmN0aW9uKSB7Cisg
ICAgdGhpcy5uYW1lID0gdGVzdE5hbWU7CisgICAgdGhpcy5ydW4gPSB0ZXN0RnVuY3Rpb247Cit9
CisKK3ZhciBCZW5jaG1hcmtSdW5uZXIgPSB7X3N1aXRlczogW10sIF9wcmVwYXJlUmV0dXJuVmFs
dWU6IG51bGwsIF9tZWFzdXJlZFZhbHVlczoge30sIF9jbGllbnQ6IG51bGx9OworCitCZW5jaG1h
cmtSdW5uZXIuc3VpdGUgPSBmdW5jdGlvbiAoc3VpdGUpIHsKKyAgICBCZW5jaG1hcmtSdW5uZXIu
X3N1aXRlcy5wdXNoKHN1aXRlKTsKK30KKworQmVuY2htYXJrUnVubmVyLnNldENsaWVudCA9IGZ1
bmN0aW9uIChjbGllbnQpIHsKKyAgICBCZW5jaG1hcmtSdW5uZXIuX2NsaWVudCA9IGNsaWVudDsK
K30KKworQmVuY2htYXJrUnVubmVyLndhaXRGb3JFbGVtZW50ID0gZnVuY3Rpb24gKHNlbGVjdG9y
KSB7CisgICAgdmFyIHNlbGYgPSBCZW5jaG1hcmtSdW5uZXI7CisgICAgdmFyIHByb21pc2UgPSBu
ZXcgU2ltcGxlUHJvbWlzZTsKKyAgICB2YXIgY29udGVudERvY3VtZW50ID0gc2VsZi5fZnJhbWUu
Y29udGVudERvY3VtZW50OworCisgICAgZnVuY3Rpb24gcmVzb2x2ZUlmUmVhZHkoKSB7CisgICAg
ICAgIHZhciBlbGVtZW50ID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3Ip
OworICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnJlc29s
dmUoZWxlbWVudCk7CisgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZUlmUmVhZHksIDUwKTsKKyAg
ICB9CisKKyAgICByZXNvbHZlSWZSZWFkeSgpOworICAgIHJldHVybiBwcm9taXNlOworfQorCitC
ZW5jaG1hcmtSdW5uZXIuX3JlbW92ZUZyYW1lID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxm
ID0gQmVuY2htYXJrUnVubmVyOworICAgIGlmIChzZWxmLl9mcmFtZSkgeworICAgICAgICBzZWxm
Ll9mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuX2ZyYW1lKTsKKyAgICAgICAgc2Vs
Zi5fZnJhbWUgPSBudWxsOworICAgIH0KK30KKworQmVuY2htYXJrUnVubmVyLl9hcHBlbmRGcmFt
ZSA9IGZ1bmN0aW9uIChzcmMpIHsKKyAgICB2YXIgc2VsZiA9IEJlbmNobWFya1J1bm5lcjsKKyAg
ICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICBmcmFt
ZS5zdHlsZS53aWR0aCA9ICc4MDBweCc7CisgICAgZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzYwMHB4
JworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAgIHNlbGYuX2ZyYW1l
ID0gZnJhbWU7CisgICAgcmV0dXJuIGZyYW1lOworfQorCitCZW5jaG1hcmtSdW5uZXIuX3dhaXRB
bmRXYXJtVXAgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7
CisKKyAgICBmdW5jdGlvbiBGaWJvbmFjY2kobikgeworICAgICAgICBpZiAoRGF0ZS5ub3coKSAt
IHN0YXJ0VGltZSA+IDEwMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG4gPD0g
MCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIGlmIChuID09IDEpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIEZpYm9uYWNjaShuIC0gMikgKyBGaWJv
bmFjY2kobiAtIDEpOworICAgIH0KKworICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21p
c2U7CisgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgIEZpYm9uYWNjaSgxMDAp
OworICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKKyAgICB9LCAyMDApOworICAgIHJldHVybiBw
cm9taXNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG91Z2h0IGJlIGFzIHNpbXBsZSBhcyBwb3Nz
aWJsZS4gRG9uJ3QgZXZlbiB1c2UgU2ltcGxlUHJvbWlzZS4KK0JlbmNobWFya1J1bm5lci5fcnVu
VGVzdCA9IGZ1bmN0aW9uKHN1aXRlLCB0ZXN0RnVuY3Rpb24sIHByZXBhcmVSZXR1cm5WYWx1ZSwg
Y2FsbGJhY2spCit7CisgICAgdmFyIHNlbGYgPSBCZW5jaG1hcmtSdW5uZXI7CisgICAgdmFyIG5v
dyA9IHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rp
b24gKCkgeyByZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpOyB9IDogRGF0ZS5ub3c7CisK
KyAgICB2YXIgY29udGVudFdpbmRvdyA9IHNlbGYuX2ZyYW1lLmNvbnRlbnRXaW5kb3c7CisgICAg
dmFyIGNvbnRlbnREb2N1bWVudCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudDsKKworICAg
IHZhciBzdGFydFRpbWUgPSBub3coKTsKKyAgICB0ZXN0RnVuY3Rpb24ocHJlcGFyZVJldHVyblZh
bHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIHZhciBlbmRUaW1lID0g
bm93KCk7CisgICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKKworICAgIHZh
ciBzdGFydFRpbWUgPSBub3coKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGVuZFRpbWUgPSBub3coKTsKKyAgICAgICAgY2FsbGJhY2soc3luY1RpbWUsIGVuZFRp
bWUgLSBzdGFydFRpbWUpOworICAgIH0sIDApOworfQorCitCZW5jaG1hcmtSdW5uZXIuX3Rlc3RO
YW1lID0gZnVuY3Rpb24gKHN1aXRlLCB0ZXN0TmFtZSwgbWV0cmljKSB7CisgICAgaWYgKCF0ZXN0
TmFtZSkKKyAgICAgICAgcmV0dXJuIHN1aXRlLm5hbWU7CisgICAgcmV0dXJuIHN1aXRlLm5hbWUg
KyAnLycgKyB0ZXN0TmFtZSArIChtZXRyaWMgPyAnLycgKyBtZXRyaWMgOiAnJyk7Cit9CisKK2Z1
bmN0aW9uIEJlbmNobWFya1N0YXRlKHN1aXRlcykgeworICAgIHRoaXMuX3N1aXRlcyA9IHN1aXRl
czsKKyAgICB0aGlzLl9zdWl0ZUluZGV4ID0gLTE7CisgICAgdGhpcy5fdGVzdEluZGV4ID0gMDsK
KyAgICB0aGlzLm5leHQoKTsKK30KKworQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmN1cnJlbnRT
dWl0ZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9zdWl0ZXNbdGhpcy5fc3VpdGVJ
bmRleF07Cit9CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5jdXJyZW50VGVzdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICB2YXIgc3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0ZSgpOworICAgIHJldHVy
biBzdWl0ZSA/IHN1aXRlLnRlc3RzW3RoaXMuX3Rlc3RJbmRleF0gOiBudWxsOworfQorCitCZW5j
aG1hcmtTdGF0ZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl90ZXN0
SW5kZXgrKzsKKworICAgIHZhciBzdWl0ZSA9IHRoaXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUluZGV4
XTsKKyAgICBpZiAoc3VpdGUgJiYgdGhpcy5fdGVzdEluZGV4IDwgc3VpdGUudGVzdHMubGVuZ3Ro
KQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIHRoaXMuX3Rlc3RJbmRleCA9IDA7CisgICAg
ZG8geworICAgICAgICB0aGlzLl9zdWl0ZUluZGV4Kys7CisgICAgfSB3aGlsZSAodGhpcy5fc3Vp
dGVJbmRleCA8IHRoaXMuX3N1aXRlcy5sZW5ndGggJiYgdGhpcy5fc3VpdGVzW3RoaXMuX3N1aXRl
SW5kZXhdLmRpc2FibGVkKTsKKworICAgIHJldHVybiB0aGlzOworfQorCitCZW5jaG1hcmtTdGF0
ZS5wcm90b3R5cGUuaXNGaXJzdFRlc3QgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICF0aGlz
Ll90ZXN0SW5kZXg7Cit9CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5wcmVwYXJlQ3VycmVu
dFN1aXRlID0gZnVuY3Rpb24gKGZyYW1lKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHZh
ciBzdWl0ZSA9IHRoaXMuY3VycmVudFN1aXRlKCk7CisgICAgdmFyIHByb21pc2UgPSBuZXcgU2lt
cGxlUHJvbWlzZTsKKyAgICBmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN1
aXRlLnByZXBhcmUoZnJhbWUuY29udGVudFdpbmRvdywgZnJhbWUuY29udGVudERvY3VtZW50KS50
aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsgcHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7IH0pOworICAg
IH0KKyAgICBmcmFtZS5zcmMgPSBzdWl0ZS51cmw7CisgICAgcmV0dXJuIHByb21pc2U7Cit9CisK
K0JlbmNobWFya1J1bm5lci5zdGVwID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgdmFyIHNlbGYg
PSBCZW5jaG1hcmtSdW5uZXI7CisKKyAgICBpZiAoIXN0YXRlKQorICAgICAgICBzdGF0ZSA9IG5l
dyBCZW5jaG1hcmtTdGF0ZShzZWxmLl9zdWl0ZXMpOworCisgICAgdmFyIHN1aXRlID0gc3RhdGUu
Y3VycmVudFN1aXRlKCk7CisgICAgaWYgKCFzdWl0ZSkgeworICAgICAgICBzZWxmLl9maW5hbGl6
ZSgpOworICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgICAgICBw
cm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfQorCisgICAg
aWYgKHN0YXRlLmlzRmlyc3RUZXN0KCkpIHsKKyAgICAgICAgc2VsZi5fbWFzdXJlZFZhbHVlc0Zv
ckN1cnJlbnRTdWl0ZSA9IHt9OworICAgICAgICByZXR1cm4gc3RhdGUucHJlcGFyZUN1cnJlbnRT
dWl0ZShzZWxmLl9hcHBlbmRGcmFtZSgpKS50aGVuKGZ1bmN0aW9uIChwcmVwYXJlUmV0dXJuVmFs
dWUpIHsKKyAgICAgICAgICAgIHNlbGYuX3ByZXBhcmVSZXR1cm5WYWx1ZSA9IHByZXBhcmVSZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5UZXN0QW5kUmVjb3JkUmVzdWx0
cyhzdGF0ZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBzZWxmLl9ydW5UZXN0
QW5kUmVjb3JkUmVzdWx0cyhzdGF0ZSk7Cit9CisKK0JlbmNobWFya1J1bm5lci5fcnVuVGVzdEFu
ZFJlY29yZFJlc3VsdHMgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICB2YXIgc2VsZiA9IEJlbmNo
bWFya1J1bm5lcjsKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIHZh
ciBzdWl0ZSA9IHN0YXRlLmN1cnJlbnRTdWl0ZSgpOworICAgIHZhciB0ZXN0ID0gc3RhdGUuY3Vy
cmVudFRlc3QoKTsKKworICAgIGlmIChzZWxmLl9jbGllbnQgJiYgc2VsZi5fY2xpZW50LndpbGxS
dW5UZXN0KQorICAgICAgICBzZWxmLl9jbGllbnQud2lsbFJ1blRlc3Qoc3VpdGUsIHRlc3QpOwor
CisgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNlbGYuX3J1blRlc3Qoc3Vp
dGUsIHRlc3QucnVuLCBzZWxmLl9wcmVwYXJlUmV0dXJuVmFsdWUsIGZ1bmN0aW9uIChzeW5jVGlt
ZSwgYXN5bmNUaW1lKSB7CisgICAgICAgICAgICB2YXIgc3VpdGVSZXN1bHRzID0gc2VsZi5fbWVh
c3VyZWRWYWx1ZXNbc3VpdGUubmFtZV0gfHwge3Rlc3RzOnt9LCB0b3RhbDogMH07CisgICAgICAg
ICAgICBzZWxmLl9tZWFzdXJlZFZhbHVlc1tzdWl0ZS5uYW1lXSA9IHN1aXRlUmVzdWx0czsKKyAg
ICAgICAgICAgIHN1aXRlUmVzdWx0cy50ZXN0c1t0ZXN0Lm5hbWVdID0geydTeW5jJzogc3luY1Rp
bWUsICdBc3luYyc6IGFzeW5jVGltZX07CisgICAgICAgICAgICBzdWl0ZVJlc3VsdHMudG90YWwg
Kz0gc3luY1RpbWUgKyBhc3luY1RpbWU7CisKKyAgICAgICAgICAgIGlmIChzZWxmLl9jbGllbnQg
JiYgc2VsZi5fY2xpZW50LndpbGxSdW5UZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2NsaWVu
dC5kaWRSdW5UZXN0KHN1aXRlLCB0ZXN0KTsKKworICAgICAgICAgICAgc3RhdGUubmV4dCgpOwor
ICAgICAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRTdWl0ZSgpICE9IHN1aXRlKQorICAgICAgICAg
ICAgICAgIHNlbGYuX3JlbW92ZUZyYW1lKCk7CisgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUo
c3RhdGUpOworICAgICAgICB9KTsKKyAgICB9LCAwKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKK30K
KworQmVuY2htYXJrUnVubmVyLl9maW5hbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc2Vs
ZiA9IEJlbmNobWFya1J1bm5lcjsKKworICAgIHNlbGYuX3JlbW92ZUZyYW1lKCk7CisKKyAgICBp
ZiAoc2VsZi5fY2xpZW50ICYmIHNlbGYuX2NsaWVudC5kaWRSdW5TdWl0ZXMpCisgICAgICAgIHNl
bGYuX2NsaWVudC5kaWRSdW5TdWl0ZXMoc2VsZi5fbWVhc3VyZWRWYWx1ZXMpOworCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgd2hlbiB3ZSBzdGFydCBydW5uaW5nIHRlc3RzLgor
ICAgIHNlbGYuX21lYXN1cmVkVmFsdWVzID0ge307Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90ZXN0cy5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5N2Q4OTJh
MWJmMWJlNGIwOTA4OWE4YzIxYjUzY2I0ZDE3N2FlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90ZXN0cy5qcwpAQCAtMCwwICsx
LDI4NCBAQAordmFyIG51bWJlck9mSXRlbXNUb0FkZCA9IDEwMDsKKworQmVuY2htYXJrUnVubmVy
LnN1aXRlKHsKKyAgICBuYW1lOiAnVmFuaWxsYUpTLVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTog
ZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1
cm4gQmVuY2htYXJrUnVubmVyLndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAg
ICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQg
KyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3Vt
ZW50KSB7CisgICAgICAgICAgICB2YXIgdG9kb0NvbnRyb2xsZXIgPSBjb250ZW50V2luZG93LnRv
ZG8uY29udHJvbGxlcjsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
dGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0
aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAgICAgICAgICB0b2RvQ29udHJvbGxlci5hZGRJdGVt
KHtrZXlDb2RlOiB0b2RvQ29udHJvbGxlci5FTlRFUl9LRVksIHRhcmdldDogbmV3VG9kb30pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVw
KCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnRE
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hl
Y2tib3hlc1tpXS5jbGljaygpOworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rl
c3RTdGVwKCdEZWxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5k
b3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBj
b250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30p
OworCitCZW5jaG1hcmtSdW5uZXIuc3VpdGUoeworICAgIG5hbWU6ICdFbWJlckpTLVRvZG9NVkMn
LAorICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvaW5kZXgu
aHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgeworICAgICAgICBjb250ZW50V2luZG93LlRvZG9zLlN0b3JlID0gY29udGVudFdpbmRv
dy5EUy5TdG9yZS5leHRlbmQoeworICAgICAgICAgICAgcmV2aXNpb246IDEyLAorICAgICAgICAg
ICAgYWRhcHRlcjogJ1RvZG9zLkxTQWRhcHRlcicsCisgICAgICAgICAgICBjb21taXQ6IGZ1bmN0
aW9uICgpIHsgfQorICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gQmVuY2htYXJrUnVubmVy
LndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Cisg
ICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHZpZXdzOiBjb250ZW50V2luZG93LkVtYmVyLlZpZXcudmlld3MsCisgICAgICAg
ICAgICAgICAgZW1iZXJSdW46IGNvbnRlbnRXaW5kb3cuRW1iZXIucnVuLAorICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9LAorICAgIHRlc3RzOiBbCisgICAgICAgIG5ldyBCZW5jaG1h
cmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0
aW9uIChwYXJhbXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
dGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZW1iZXJSdW4oZnVuY3Rp
b24gKCkgeyBwYXJhbXMudmlld3NbIm5ldy10b2RvIl0uc2V0KCd2YWx1ZScsICdTb21ldGhpbmcg
dG8gZG8nICsgaSk7IH0pOworICAgICAgICAgICAgICAgIHBhcmFtcy5lbWJlclJ1bihmdW5jdGlv
biAoKSB7IHBhcmFtcy52aWV3c1sibmV3LXRvZG8iXS5pbnNlcnROZXdsaW5lKGRvY3VtZW50LmNy
ZWF0ZUV2ZW50KCdFdmVudCcpKTsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAg
ICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9u
IChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAg
dmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmVtYmVy
LWNoZWNrYm94Jyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdmlldyA9IHBhcmFtcy52aWV3c1tj
aGVja2JveGVzW2ldLmlkXTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZW1iZXJSdW4oZnVuY3Rp
b24gKCkgeyB2aWV3LnNldCgnY2hlY2tlZCcsIHRydWUpOyB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnRGVsZXRpbmdJdGVtcycs
IGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAg
ICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRl
QnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBwYXJhbXMuZW1iZXJSdW4oZnVu
Y3Rpb24gKCkgeyBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7IH0pOworICAgICAgICB9KSwKKyAg
ICBdCit9KTsKKworQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKKyAgICBuYW1lOiAnQmFja2JvbmVK
Uy1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KSB7CisgICAgY29udGVudFdpbmRvdy5CYWNrYm9uZS5zeW5jID0gZnVu
Y3Rpb24gKCkge30KKyAgICAgICAgcmV0dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVu
dCgnI25ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxl
bWVudC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOwor
ICAgIH0sCisgICAgdGVzdHM6IFsKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRp
bmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNv
bnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGFwcFZpZXcg
PSBjb250ZW50V2luZG93LmFwcFZpZXc7CisgICAgICAgICAgICB2YXIgZmFrZUV2ZW50ID0ge3do
aWNoOiBjb250ZW50V2luZG93LkVOVEVSX0tFWX07CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbmV3VG9k
by52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7CisgICAgICAgICAgICAgICAgYXBwVmll
dy5jcmVhdGVPbkVudGVyKGZha2VFdmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAor
ICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0
aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50
b2dnbGUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5n
dGg7IGkrKykKKyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAg
IH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMnLCBm
dW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAg
ICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVC
dXR0b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xp
Y2soKTsKKyAgICAgICAgfSksCisgICAgXQorfSk7CisKK0JlbmNobWFya1J1bm5lci5zdWl0ZSh7
CisgICAgbmFtZTogJ2pRdWVyeS1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9qcXVlcnkvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24g
KGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gQmVuY2ht
YXJrUnVubmVyLndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVt
ZW50KSB7CisgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBuZXcg
QmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMn
LCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Cisg
ICAgICAgICAgICB2YXIgYXBwID0gY29udGVudFdpbmRvdy5hcHA7CisgICAgICAgICAgICB2YXIg
ZmFrZUV2ZW50ID0ge3doaWNoOiBhcHAuRU5URVJfS0VZfTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBu
ZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAgICAgICAgICBh
cHAuY3JlYXRlLmNhbGwobmV3VG9kbywgZmFrZUV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1z
JywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewor
ICAgICAgICAgICAgdmFyIGFwcCA9IGNvbnRlbnRXaW5kb3cuYXBwOworICAgICAgICAgICAgdmFy
IGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScp
OworICAgICAgICAgICAgdmFyICQgPSBjb250ZW50V2luZG93LiQ7CisKKyAgICAgICAgICAgIGl0
ZW1JbmRleFRvSWQgPSBuZXcgQXJyYXkoY2hlY2tib3hlcy5sZW5ndGgpOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
ICAgIGl0ZW1JbmRleFRvSWRbaV0gPSAkKGNoZWNrYm94ZXNbaV0pLmNsb3Nlc3QoJ2xpJykuZGF0
YSgnaWQnKTsKKworICAgICAgICAgICAgYXBwLmdldFRvZG8gPSBmdW5jdGlvbiAoZWxlbWVudCwg
Y2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAg
ICAgICAgdmFyIGlkID0gaXRlbUluZGV4VG9JZFt0aGlzLmN1cnJlbnRJdGVtSW5kZXhdOworICAg
ICAgICAgICAgICAgICQuZWFjaCh0aGlzLnRvZG9zLCBmdW5jdGlvbiAoaiwgdmFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWwuaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjay5hcHBseShzZWxmLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2hlY2tib3hlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGFwcC5jdXJyZW50SXRl
bUluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBhcHAudG9nZ2xlLmNhbGwoY2hlY2tib3hlc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVz
dFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRv
dywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignI2NsZWFyLWNvbXBsZXRlZCcpLmNsaWNrKCk7CisgICAgICAgICAgICB2YXIgYXBw
ID0gY29udGVudFdpbmRvdy5hcHA7CisgICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNv
bnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOworCisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBhcHAuY3VycmVudEl0ZW1JbmRleCA9IGk7CisgICAgICAgICAgICAgICAgYXBw
LmRlc3Ryb3kuY2FsbChkZWxldGVCdXR0b25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSksCisgICAgXQorfSk7CisKK0JlbmNobWFya1J1bm5lci5zdWl0ZSh7CisgICAgbmFtZTogJ0Fu
Z3VsYXJKUy1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKGNvbnRlbnRX
aW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gQmVuY2htYXJrUnVubmVy
LndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Cisg
ICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
KyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBuZXcgQmVuY2htYXJr
VGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlv
biAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAg
ICB2YXIgdG9kb212YyA9IGNvbnRlbnRXaW5kb3cudG9kb212YzsKKyAgICAgICAgICAgIHZhciBz
dWJtaXRFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgICAgICAgICAg
c3VibWl0RXZlbnQuaW5pdEV2ZW50KCdzdWJtaXQnLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAg
IHZhciBpbnB1dEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7CisgICAgICAg
ICAgICBpbnB1dEV2ZW50LmluaXRFdmVudCgnaW5wdXQnLCB0cnVlLCB0cnVlKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAg
ICAgICAgICAgICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7CisgICAgICAgICAg
ICAgICAgbmV3VG9kby5mb3JtLmRpc3BhdGNoRXZlbnQoc3VibWl0RXZlbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0
aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERv
Y3VtZW50KSB7CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tp
XS5jbGljaygpOworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdE
ZWxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRl
bnREb2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9j
dW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBk
ZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitCZW5j
aG1hcmtSdW5uZXIuc3VpdGUoeworICAgIG5hbWU6ICdSZWFjdC1Ub2RvTVZDJywKKyAgICB1cmw6
ICd0b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwnLAor
ICAgIHByZXBhcmU6IGZ1bmN0aW9uIChjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsK
KyAgICAgICAgY29udGVudFdpbmRvdy5VdGlscy5zdG9yZSA9IGZ1bmN0aW9uICgpIHt9CisgICAg
ICAgIHJldHVybiBCZW5jaG1hcmtSdW5uZXIud2FpdEZvckVsZW1lbnQoJyNuZXctdG9kbycpLnRo
ZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRlc3Rz
OiBbCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRl
bXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250
ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciB0b2RvbXZjID0gY29udGVudFdpbmRvdy50
b2RvbXZjOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9B
ZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRv
IGRvICcgKyBpOworCisgICAgICAgICAgICAgICAgdmFyIGtleWRvd25FdmVudCA9IGRvY3VtZW50
LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgICAgICAgICAgICAgIGtleWRvd25FdmVudC5pbml0
RXZlbnQoJ2tleWRvd24nLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBrZXlkb3duRXZl
bnQud2hpY2ggPSAxMzsgLy8gVktfRU5URVIKKyAgICAgICAgICAgICAgICBuZXdUb2RvLmRpc3Bh
dGNoRXZlbnQoa2V5ZG93bkV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSksCisgICAg
ICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24g
KG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAg
dmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2ds
ZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgICAgIGNoZWNrYm94ZXNbaV0uY2xpY2soKTsKKyAgICAgICAgfSks
CisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnRGVsZXRpbmdBbGxJdGVtcycsIGZ1bmN0
aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
Jy5kZXN0cm95Jyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRv
bnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygp
OworICAgICAgICB9KSwKKyAgICBdCit9KTsKKwordmFyIGFjdGlvbkNvdW50ID0gNTA7CitCZW5j
aG1hcmtSdW5uZXIuc3VpdGUoeworICAgIG5hbWU6ICdGbGlnaHRKUy1NYWlsQ2xpZW50JywKKyAg
ICB1cmw6ICdmbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBm
dW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIHJldHVy
biBCZW5jaG1hcmtSdW5uZXIud2FpdEZvckVsZW1lbnQoJy5zcGFuOCcpLnRoZW4oZnVuY3Rpb24g
KGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50OworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRlc3RzOiBbCisgICAgICAg
IG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnT3BlbmluZ1RhYnMnICsgYWN0aW9uQ291bnQgKyAnVGlt
ZXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
CisgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xp
Y2soKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uQ291bnQ7IGkrKykg
eworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF0ZXIn
KS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc2VudCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0cmFzaCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ01vdmluZ0VtYWlscycgKyBh
Y3Rpb25Db3VudCArICdUaW1lcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBj
b250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaW5ib3gnKS5jbGljaygpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
Y3Rpb25Db3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnRE
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZV9tYWlsJykuY2xpY2soKTsKKyAgICAgICAgICAg
ICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21vdmVfdG9fc2VsZWN0b3IgI2xh
dGVyJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2xhdGVyJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29u
dGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlX21haWwnKS5jbGljaygpOworICAgICAg
ICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbW92ZV90b19zZWxlY3Rv
ciAjdHJhc2gnKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndHJhc2gnKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsKKyAgICAgICAgICAgICAg
ICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFpbCcpLmNsaWNrKCk7Cisg
ICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtb3ZlX3RvX3Nl
bGVjdG9yICNpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ1NlbmRpbmcnICsgYWN0aW9uQ291
bnQgKyAnTmV3RW1haWxzJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRl
bnREb2N1bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25Db3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCduZXdfbWFpbCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdyZWNpcGllbnRfc2VsZWN0Jykuc2VsZWN0ZWRJbmRleCA9IDE7CisgICAg
ICAgICAgICAgICAgdmFyIHN1YmplY3QgPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbXBvc2Vfc3ViamVjdCcpOworICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21wb3NlX21lc3NhZ2UnKTsKKyAgICAgICAgICAg
ICAgICBzdWJqZWN0LmZvY3VzKCk7CisgICAgICAgICAgICAgICAgY29udGVudFdpbmRvdy4kKHN1
YmplY3QpLnRyaWdnZXIoJ2tleWRvd24nKTsKKyAgICAgICAgICAgICAgICBjb250ZW50V2luZG93
LiQoc3ViamVjdCkudGV4dCgnSGVsbG8nKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLmZvY3Vz
KCk7CisgICAgICAgICAgICAgICAgY29udGVudFdpbmRvdy4kKG1lc3NhZ2UpLnRyaWdnZXIoJ2tl
eWRvd24nKTsKKyAgICAgICAgICAgICAgICBjb250ZW50V2luZG93LiQobWVzc2FnZSkudGV4dCgn
SGVsbG8sXG5cblRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UuXG5cbi0gV2ViS2l0dGVuJyk7CisgICAg
ICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kX2NvbXBvc2Vk
JykuY2xpY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSksCisgICAgXQorfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>