<?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>200906</bug_id>
          
          <creation_ts>2019-08-19 17:52:07 -0700</creation_ts>
          <short_desc>Add some IDB performance tests</short_desc>
          <delta_ts>2019-08-21 10:22:18 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1562872</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-19 17:52:07 -0700</bug_when>
    <thetext>Add test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562873</commentid>
    <comment_count>1</comment_count>
      <attachid>376727</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-19 17:53:31 -0700</bug_when>
    <thetext>Created attachment 376727
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563235</commentid>
    <comment_count>2</comment_count>
      <attachid>376802</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-20 14:25:36 -0700</bug_when>
    <thetext>Created attachment 376802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563246</commentid>
    <comment_count>3</comment_count>
      <attachid>376809</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-20 14:43:07 -0700</bug_when>
    <thetext>Created attachment 376809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563255</commentid>
    <comment_count>4</comment_count>
      <attachid>376813</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-20 15:01:10 -0700</bug_when>
    <thetext>Created attachment 376813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563280</commentid>
    <comment_count>5</comment_count>
      <attachid>376813</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-20 15:54:33 -0700</bug_when>
    <thetext>Comment on attachment 376813
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563540</commentid>
    <comment_count>6</comment_count>
      <attachid>376813</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-21 10:21:34 -0700</bug_when>
    <thetext>Comment on attachment 376813
Patch

Clearing flags on attachment: 376813

Committed r248947: &lt;https://trac.webkit.org/changeset/248947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563541</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-21 10:21:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563542</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-21 10:22:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/54560821&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376727</attachid>
            <date>2019-08-19 17:53:31 -0700</date>
            <delta_ts>2019-08-20 14:25:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>WIP</filename>
            <type>text/plain</type>
            <size>28459</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWNvdW50LWtleS5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgtY291bnQta2V5Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQxNjkxOTAzODhiCi0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgtY291bnQta2V5Lmh0
bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwor
Y29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMTA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAw
MDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgor
dmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jb3VudC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0
YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0
ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxs
OwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVh
c3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVy
YXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAg
ICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdl
bmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7
CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVu
SXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQor
eworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9u
KCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUp
OworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3Jl
ID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNy
ZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mSXRlbXM7IGkrKykKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCB7IHRl
c3Q6ICd5bycsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJl
cXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFy
dFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAg
IHZhciBjb21wbGV0ZWRDb3VudHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgaSsrKQorICAgIHsKKyAgICAgICAgaW5kZXguY291bnQoJ2luZGV4JyArIGkpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5yZXN1bHQgIT0gMSkKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgMSBpdGVtIGZv
ciBrZXkgaW5kZXgiICsgaSk7CisKKyAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZENvdW50cyA9
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH07
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2luZGV4LWNvdW50Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1jb3Vu
dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZWEwOTM4YTEw
ZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWNv
dW50Lmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMTA7Citjb25zdCBudW1iZXJPZkl0ZW1z
ID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0
aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jb3VudC1EQiI7CitpbmRleGVkREIuZGVs
ZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBz
dGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIg
PSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFy
ZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVy
T2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAg
dGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAg
fQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9y
ID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0
ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRl
cmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFz
ZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVj
dFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0
b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mSXRlbXM7IGkrKykKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0
KCB7IHRlc3Q6ICd5bycsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAg
b3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZh
ciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRi
LnRyYW5zYWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcp
OworICAgIGluZGV4LmNvdW50KCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAg
IGFsZXJ0KCJFeHBlY3RlZCAiICsgbnVtYmVyT2ZJdGVtcyArICJpdGVtcyBidXQgZ2V0ICIgKyBl
dmVudC50YXJnZXQucmVzdWx0KTsKKworICAgICAgICBuZXh0U3RlcCgpOworICAgIH0KKworICAg
IHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJm
VGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1nZXQuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sCmluZGV4IDg5ZTUy
NjczYTg1Li4yMzFiZTZhNjc5YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVk
REIvaW5kZXgtZ2V0Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgt
Z2V0Lmh0bWwKQEAgLTQsNiArNCw5IEBACiA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5l
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAx
MDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCiAvLyBEZWxldGUgZGF0YWJhc2Uocykg
Zm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCiB2YXIgZGF0YWJhc2VOYW1lID0gImluZGV4LWdl
dC1EQiI7CiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbigpIHsKQEAgLTE1LDcgKzE4LDcgQEAgdmFyIGRiID0gbnVsbDsKIHZhciB0cmFu
c2FjdGlvbiA9IG51bGw7CiAKIFBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNB
c3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IDEwLAorICAgIGN1c3RvbUl0ZXJhdGlv
bkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCiAgICAgdW5pdDogJ21zJywKICAgICBkb25lOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsKQEAgLTM2LDggKzM5LDYg
QEAgZnVuY3Rpb24gbmV4dFN0ZXAoKQogICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwogfQogCi12
YXIgbnVtYmVyT2ZFbnRyaWVzID0gNTAwMDsKLQogZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCiB7
CiAgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKQEAg
LTQ1LDcgKzQ2LDcgQEAgZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCiAgICAgICAgIGRiID0gZXZl
bnQudGFyZ2V0LnJlc3VsdDsKICAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ3N0b3JlJyk7CiAgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRl
eCcsICdpbmRleEtleScpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50
cmllczsgaSsrKQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7IGkr
KykKICAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCB7IHRlc3Q6ICd5bycsIGluZGV4S2V5OiAi
aW5kZXgiICsgaSB9LCBpKTsKICAgICB9CiAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4
dFN0ZXA7CkBAIC01NiwxMyArNTcsMTMgQEAgZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCiAKICAg
ICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUn
KS5pbmRleCgnaW5kZXgnKTsKICAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVudHJpZXM7IGkrKykKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mSXRlbXM7IGkrKykKICAgICB7CiAgICAgICAgIGluZGV4LmdldCgnaW5kZXgn
ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoZXZl
bnQudGFyZ2V0LnJlc3VsdC50ZXN0ICE9ICJ5byIpCiAgICAgICAgICAgICAgICAgYWxlcnQoIkV4
cGVjdGVkICd5bycsIGdvdCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQudGVzdCArICInIik7CiAK
LSAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZEdldHMgPT0gbnVtYmVyT2ZFbnRyaWVzKQorICAg
ICAgICAgICAgaWYgKCsrY29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkl0ZW1zKQogICAgICAgICAg
ICAgICAgIG5leHRTdGVwKCk7CiAgICAgICAgIH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtYWRkLmh0bWwgYi9QZXJmb3JtYW5jZVRl
c3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1hZGQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMGIyYmU3Njg2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1hZGQuaHRtbApAQCAtMCwwICsxLDg2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJh
dGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0
YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0g
Im9iamVjdHN0b3JlLWdldC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VO
YW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQor
Cit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0
aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5j
KHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVu
aXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9
IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7
CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0
YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Cisg
ICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5l
cmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIg
b3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1
ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZl
bnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5l
eHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5u
ZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUn
LCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGNvbXBsZXRlZEFk
ZHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7Cisg
ICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSkub25zdWNjZXNzID0gKGZ1bmN0
aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9IGtleSkKKyAgICAgICAgICAgICAg
ICAgICAgYWxlcnQoIkV4cGVjdGVkICciICsga2V5ICsgIicsIGdvdCAnIiArIGV2ZW50LnRhcmdl
dC5yZXN1bHQgKyAiJyIpOworCisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkQWRkcyA9
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9KShpKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICgh
UGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBz
dGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbGVhciB0aGUgb2JqZWN0IHN0
b3JlIHNvIHdlIGRvbid0IGFkZCBleGlzdGluZyBpdGVtcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24u
CisgICAgdmFyIHNhbWVPYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFk
d3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICBzYW1lT2JqZWN0U3RvcmUuY2xlYXIo
KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3RlcCgpOworICAg
IH0KKworICAgIHlpZWxkOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWNsZWFyLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0lu
ZGV4ZWREQi9vYmplY3RzdG9yZS1jbGVhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4wMWNlZjgyYWFiMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWNsZWFyLmh0bWwKQEAgLTAsMCArMSw4MiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRp
b25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFi
YXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJv
YmplY3RzdG9yZS1nZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFt
ZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwor
dmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlv
biA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7
CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0
OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBu
dWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwor
ICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFy
dEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAg
IG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJh
dG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9w
ZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVz
dC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0
U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgor
ICAgIHZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUn
KTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUn
KTsKKyAgICB2YXIgY29tcGxldGVkQWRkcyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1iZXJPZkl0ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUuYWRkKCJ2YWx1ZSIgKyBp
LCBpKTsKKyAgICB9CisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIg
c3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgc2FtZU9iamVjdFN0
b3JlID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgIHNhbWVPYmplY3RTdG9yZS5jbGVhcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAg
ICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5v
dygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFy
dEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWNvdW50Lmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1jb3VudC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wY2ZiMDVmN2U3YQotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWNvdW50Lmh0bWwK
QEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29u
c3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsK
KworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFy
IGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1nZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJ
dGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVs
bDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01l
YXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRl
cmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RH
ZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30p
OworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1
bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkK
K3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlv
bigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1l
KTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9y
ZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2
YWx1ZSIgKyBpLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0
ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5u
b3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScpLm9i
amVjdFN0b3JlKCdzdG9yZScpOworICAgIG9iamVjdFN0b3JlLmNvdW50KCkub25zdWNjZXNzID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0gbnVt
YmVyT2ZJdGVtcykKKyAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAiICsgbnVtYmVyT2ZJdGVt
cyArICJpdGVtcyBidXQgZ2V0ICIgKyBldmVudC50YXJnZXQucmVzdWx0KTsKKworICAgICAgICBu
ZXh0U3RlcCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5l
ci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5jZS5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjIzYjg0MTAxMTUKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5j
ZS5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9
IDUwMDA7Citjb25zdCBjdXJzb3JTdGVwID0gMjsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZv
ciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9y
ZS1nZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNj
ZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RH
ZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7
CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3Vz
dG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAor
ICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAg
ICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQ
ZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlv
bigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVw
KCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQo
KTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0
ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkK
KyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIgKyBpLCBpKTsKKyAgICB9CisgICAg
b3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZh
ciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9y
ZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIHZh
ciBleHBlY3RlZEtleSA9IDA7CisgICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQu
cmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJzb3Iua2V5
ICE9IGV4cGVjdGVkS2V5KQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCBjdXJzb3Iu
a2V5ICciICsgZXhwZWN0ZWRLZXkgKyAiJywgZ290ICciICsgY3Vyc29yLmtleSArICInIik7CisK
KyAgICAgICAgICAgIGV4cGVjdGVkS2V5ICs9IGN1cnNvclN0ZXA7CisgICAgICAgICAgICBjdXJz
b3IuYWR2YW5jZShjdXJzb3JTdGVwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVy
ZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFy
dFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9u
LCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVlLmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1jdXJzb3ItY29udGludWUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjgyYmViZmMyYTIKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1j
dXJzb3ItY29udGludWUuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51
bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0
IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWdldC1EQiI7
CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5j
dGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9
IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRl
c3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRp
b25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTog
ZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0g
bnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVu
bmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAg
ICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKwor
ZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitm
dW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVk
REIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAg
ICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICAg
ICBvYmplY3RTdG9yZS5wdXQoInZhbHVlIiArIGksIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVz
dC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGlt
ZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJh
bnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGV4cGVjdGVk
S2V5ID0gMDsKKyAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Cisg
ICAgICAgIGlmKGN1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnNvci5rZXkgIT0gZXhwZWN0
ZWRLZXkrKykKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yLmtleSAnIiAr
IGV4cGVjdGVkS2V5ICsgIicsIGdvdCAnIiArIGN1cnNvci5rZXkgKyAiJyIpOworCisgICAgICAg
ICAgICBjdXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVy
ZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFy
dFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9u
LCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLWRlbGV0ZS5odG1sIGIvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLWRlbGV0ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMGZhNTZhNGIzNgotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNv
ci1kZWxldGUuaHRtbApAQCAtMCwwICsxLDkyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9m
SXRlbXMgPSA1MDAwOworY29uc3QgY3Vyc29yU3RlcCA9IDI7CisKKy8vIERlbGV0ZSBkYXRhYmFz
ZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2Jq
ZWN0c3RvcmUtZ2V0LURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3Zh
ciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgdHJhbnNhY3Rpb24g
PSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoewor
ICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDog
J21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVs
bDsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0
ZXA7CisKKyAgICB5aWVsZDsKKworICAgIC8vIFN0b3JlIGl0ZW1zIGZvciBkZWxldGlvbi4KKyAg
ICB2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7
CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7
CisgICAgdmFyIGNvbXBsZXRlZEFkZHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJdGVtczsgKytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwg
aSk7CisgICAgfQorICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBuZXh0U3RlcCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgdmFyIHN0
YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIHNhbWVPYmplY3RTdG9y
ZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3Rv
cmUnKTsKKyAgICB2YXIgY29tcGxldGVkRGVsZXRlcyA9IDA7CisgICAgc2FtZU9iamVjdFN0b3Jl
Lm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIg
Y3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAg
ICAgICAgICBjdXJzb3IuZGVsZXRlKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKytjb21wbGV0ZWREZWxldGVzID09IG51bWJlck9mSXRlbXMpCisg
ICAgICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisK
KyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci11cGRh
dGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci11
cGRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmI2YTNh
Y2ZiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmpl
Y3RzdG9yZS1jdXJzb3ItdXBkYXRlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citj
b25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0
aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1n
ZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNz
ID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5l
cmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisK
K1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9t
SXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAg
IGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAg
ICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJm
VGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigp
Cit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7
Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsK
K30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0g
aW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVu
ZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1
bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9y
ZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAg
ICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIsIGkpOworICAgIH0KKyAgICBvcGVuUmVx
dWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0
VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIHNhbWVPYmplY3RTdG9yZSA9
IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUn
KTsKKyAgICB2YXIgY29tcGxldGVkVXBkYXRlcyA9IDA7CisgICAgc2FtZU9iamVjdFN0b3JlLm9w
ZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY3Vy
c29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAgICAg
ICAgICBjdXJzb3IudXBkYXRlKE1hdGgucmFuZG9tKCkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkVXBkYXRlcyA9PSBudW1iZXJP
Zkl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJm
VGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1k
ZWxldGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWRlbGV0
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzVhNTZkN2Fk
MgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0
b3JlLWRlbGV0ZS5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVy
T2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhl
YWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtZ2V0LURCIjsKK2lu
ZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVs
bDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgdHJhbnNhY3Rpb24gPSBudWxsOworCitQZXJmVGVzdFJ1
bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNv
dW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsKKyAgICAgICAgZGIgPSBudWxs
OworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIu
Z2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRl
c3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5j
dGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0
aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5v
cGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAg
ICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB9
CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKwor
ICAgIC8vIFN0b3JlIGl0ZW1zIGZvciBkZWxldGlvbi4KKyAgICB2YXIgdHJhbnNhY3Rpb24gPSBk
Yi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7CisgICAgdmFyIG9iamVjdFN0b3Jl
ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGNvbXBsZXRlZEFk
ZHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7Cisg
ICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSk7CisgICAgfQorICAgIHRyYW5z
YWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3RlcCgp
OworICAgIH0KKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVu
bmVyLm5vdygpOworCisgICAgdmFyIHNhbWVPYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxl
dGVkRGVsZXRlcyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyAr
K2kpIHsKKyAgICAgICAgc2FtZU9iamVjdFN0b3JlLmRlbGV0ZShpKS5vbnN1Y2Nlc3MgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkRGVsZXRlcyA9PSBudW1i
ZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5
bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0
c3RvcmUtZ2V0Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1n
ZXQuaHRtbAppbmRleCA2YTRjOGFjMjMyNy4uMjdjMjExMzM1NWQgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWdldC5odG1sCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWdldC5odG1sCkBAIC00LDYgKzQsOSBAQAog
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4K
IAorY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0g
NTAwMDsKKwogLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1l
LgogdmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1nZXQtREIiOwogaW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CkBAIC0x
NSw3ICsxOCw3IEBAIHZhciBkYiA9IG51bGw7CiB2YXIgdHJhbnNhY3Rpb24gPSBudWxsOwogCiBQ
ZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoewotICAgIGN1c3RvbUl0
ZXJhdGlvbkNvdW50OiAyMCwKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVy
YXRpb25zLAogICAgIHVuaXQ6ICdtcycsCiAgICAgZG9uZTogZnVuY3Rpb24gKCkgewogICAgICAg
ICB0cmFuc2FjdGlvbiA9IG51bGw7CkBAIC0zNiwxNiArMzksMTQgQEAgZnVuY3Rpb24gbmV4dFN0
ZXAoKQogICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwogfQogCi12YXIgbnVtYmVyT2ZFbnRyaWVz
ID0gNTAwMDsKLQogZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCiB7CiAgICAgdmFyIG9wZW5SZXF1
ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKICAgICBvcGVuUmVxdWVzdC5vbnVw
Z3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICBkYiA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQ7CiAgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdzdG9yZScpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50cmllczsg
KytpKQotICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImluZGV4IiArIGksIGkpOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2Jq
ZWN0U3RvcmUucHV0KCJ2YWx1ZSIgKyBpLCBpKTsKICAgICB9CiAgICAgb3BlblJlcXVlc3Qub25z
dWNjZXNzID0gbmV4dFN0ZXA7CiAKQEAgLTU1LDE1ICs1NiwxNCBAQCBmdW5jdGlvbiAqcnVuSXRl
cmF0aW9uKCkKIAogICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScp
Lm9iamVjdFN0b3JlKCdzdG9yZScpOwogICAgIHZhciBjb21wbGV0ZWRHZXRzID0gMDsKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50cmllczsgKytpKQotICAgIHsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkgewogICAgICAgICAKICAgICAgICAg
b2JqZWN0U3RvcmUuZ2V0KGkpLm9uc3VjY2VzcyA9IChmdW5jdGlvbiAoaikgewogICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRh
cmdldC5yZXN1bHQgIT0gKCJpbmRleCIgKyBqKSkKLSAgICAgICAgICAgICAgICAgICAgYWxlcnQo
IkV4cGVjdGVkICdpbmRleCIgKyBqICsgIicsIGdvdCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQg
KyAiJyIpOworICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9ICgidmFs
dWUiICsgaikpCisgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAndmFsdWUiICsg
aiArICInLCBnb3QgJyIgKyBldmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKIAotICAgICAgICAg
ICAgICAgIGlmICgrK2NvbXBsZXRlZEdldHMgPT0gbnVtYmVyT2ZFbnRyaWVzKQorICAgICAgICAg
ICAgICAgIGlmICgrK2NvbXBsZXRlZEdldHMgPT0gbnVtYmVyT2ZJdGVtcykKICAgICAgICAgICAg
ICAgICAgICAgbmV4dFN0ZXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSkoaSk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1wdXQuaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLXB1dC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYTVkYjFjNGRhYQotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLXB1dC5odG1sCkBA
IC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0
IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisK
Ky8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBk
YXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtZ2V0LURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRl
cmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7
Cit2YXIgdHJhbnNhY3Rpb24gPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFz
dXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJh
dGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uID0gbnVsbDsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2Vu
ZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsK
KworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5J
dGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7
CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24o
KQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7
CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUg
PSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgidmFs
dWUiLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisK
KyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsK
KworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3Jp
dGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxldGVkUHV0cyA9IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpIHsKKyAgICAgICAgdmFy
IHJhbmRvbVZhbHVlID0gTWF0aC5yYW5kb20oKTsKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KHJh
bmRvbVZhbHVlLCBpKS5vbnN1Y2Nlc3MgPSAoZnVuY3Rpb24gKGtleSkgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5yZXN1bHQgIT0ga2V5KQorICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgJyIg
KyBrZXkgKyAiJywgZ290ICciICsgZXZlbnQudGFyZ2V0LnJlc3VsdCArICInIik7CisKKyAgICAg
ICAgICAgICAgICBpZiAoKytjb21wbGV0ZWRQdXRzID09IG51bWJlck9mSXRlbXMpCisgICAgICAg
ICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKGkpOwor
ICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFs
dWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376802</attachid>
            <date>2019-08-20 14:25:36 -0700</date>
            <delta_ts>2019-08-20 14:43:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200906-20190820142535.patch</filename>
            <type>text/plain</type>
            <size>83523</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODUzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAxZDkzNTExN2Fm
NzdkMTFiMmRiYjk5ODViN2JlMmRkODYwM2NmMmIuLjJhYmIzZTAwMWFhNzFlZDc4ZGRhNzc4NDMz
YThhMzM4YzA3NWM2ZDEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTktMDgt
MjAgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNvbWUg
SURCIHBlcmZvcm1hbmNlIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgdGVzdCBjb3ZlcmFnZSBmb3IgSURCIHBlcmZvcm1hbmNlLCBhbmQg
b3JnYW5pemUgSURCIHRlc3RzIGludG8gdHdvIGNhdGVnb3JpZXMuCisKKyAgICAgICAgKiBJbmRl
eGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9pbmRleC1jb3VudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIv
YmFzaWMvaW5kZXgtY3Vyc29yLWFkdmFuY2UuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhl
ZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJ
bmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRlbGV0ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9pbmRleC1tdWx0aWVudHJ5Lmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY2xlYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNvdW50Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5jZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29y
LWNvbnRpbnVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3Rz
dG9yZS1jdXJzb3ItZGVsZXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNp
Yy9vYmplY3RzdG9yZS1jdXJzb3ItdXBkYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1h
bmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sLgorICAgICAgICAqIElu
ZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sLgorICAgICAgICAqIEluZGV4ZWRE
Qi9iYXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhlZERC
L2Jhc2ljL29iamVjdHN0b3JlLXB1dC5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtZ2V0Lmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1hcnJheS1rZXlzLmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9sYXJnZS1hcnJheS1rZXlzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1iaW5hcnkta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbC4KKyAgICAgICAgKiBJbmRleGVkREIv
c3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0
cy1yZXNwb25zaXZlbmVzcy5odG1sLgorICAgICAgICAqIEluZGV4ZWREQi9zdHJlc3MvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERC
L3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbC4KKyAgICAgICAgKiBTa2lwcGVk
OgorCiAyMDE5LTA4LTE0ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbWFjT1MgPCAxMC4xMwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jb3VudC1rZXkuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wMGUzYTQzNjIyYjU1NWNkMTJjZjY2NTQ2M2MyODFlNDUyODk0NDUwCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0
bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0g
NTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1l
LgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jb3VudC1EQiI7CitpbmRleGVkREIuZGVsZXRl
RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFy
dEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBu
dWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAg
IGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21z
JywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsK
KyAgICAgICAgZGIgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0K
K30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9
IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVw
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJh
dGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VO
YW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBvYmplY3RTdG9y
ZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnaW5kZXhLZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyBpKyspCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgg
eyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOworICAgIH0KKyAg
ICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAg
dmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIGluZGV4ID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4
Jyk7CisgICAgdmFyIGNvbXBsZXRlZENvdW50cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBudW1iZXJPZkl0ZW1zOyBpKyspCisgICAgeworICAgICAgICBpbmRleC5jb3VudCgnaW5kZXgn
ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZl
bnQudGFyZ2V0LnJlc3VsdCAhPSAxKQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAx
IGl0ZW0gZm9yIGtleSBpbmRleCIgKyBpKTsKKworICAgICAgICAgICAgaWYgKCsrY29tcGxldGVk
Q291bnRzID09IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAg
ICAgICAgfTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvYmFzaWMvaW5kZXgtY291bnQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhl
ZERCL2Jhc2ljL2luZGV4LWNvdW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q4MDg3Y2JjN2Q2OTNjNTFj
NDkxMTQ4MzFhOTJmYzFjZTdlN2NkYwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWNvdW50Lmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRp
b25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFi
YXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJp
bmRleC1jb3VudC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIg
dGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5w
cmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBu
dW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Cisg
ICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0
SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAg
bmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0
b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3Bl
blJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcs
ICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7
IGkrKykKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCB7IHZhbHVlOiAndmFsdWUnLCBpbmRl
eEtleTogImluZGV4IiArIGkgfSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUn
KS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICBpbmRleC5jb3VudCgp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC50YXJnZXQu
cmVzdWx0ICE9IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgIiAr
IG51bWJlck9mSXRlbXMgKyAiaXRlbXMgYnV0IGdldCAiICsgZXZlbnQudGFyZ2V0LnJlc3VsdCk7
CisKKyAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICgh
UGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBz
dGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0
aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWFkdmFuY2UuaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1hZHZhbmNlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTU0YjM3YzhmY2JkODE0Mjk1YTAxMmVmYTVhNWEyZTM5Y2ZlYTZkYwot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4
LWN1cnNvci1hZHZhbmNlLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25z
dCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKK2NvbnN0IGN1cnNvclN0ZXAgPSAyOworCisvLyBEZWxl
dGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VO
YW1lID0gImluZGV4LWN1cnNvci1hZHZhbmNlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0
aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisK
K1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9t
SXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAg
IGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2Vu
ZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsK
KworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5J
dGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7
CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24o
KQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7
CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUg
PSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3Jl
YXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1
ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOworICAgIH0KKyAgICBvcGVu
UmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0
YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJh
bnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7Cisg
ICAgdmFyIHBvc2l0aW9uID0gMDsKKyAgICBpbmRleC5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1
bHQ7CisgICAgICAgIGlmKGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2UoY3Vy
c29yU3RlcCk7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBjdXJzb3JTdGVwOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbnVtYmVyT2ZJdGVtcykgCisgICAg
ICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkIGN1cnNvciB0byBzdG9wIGFmdGVyIHBvc2l0aW9u
IiArIG51bWJlck9mSXRlbXMgKyAiLCBidXQgc3RvcHBlZCBhdCAiICsgcG9zaXRpb24pOworCisg
ICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisK
KyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250
aW51ZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29y
LWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFmZDA4ODZiNzBjZjM2YWExZmEzMTI3MWVlNTgw
NzI2ZjM4ZGI4OQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51ZS5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9u
cyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFz
ZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5k
ZXgtY3Vyc29yLWNvbnRpbnVlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFz
ZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9
CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0
UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9u
Q291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rp
b24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24o
KTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVz
dEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAg
IHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3Bl
blJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIg
PSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVh
dGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgo
J2luZGV4JywgJ2luZGV4S2V5Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgKytpKQorICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1ZTogJ3ZhbHVl
JywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5v
bnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9
IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24o
J3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIHBv
c2l0aW9uID0gMDsKKyAgICBpbmRleC5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
ICAgIGlmKGN1cnNvcikgeworICAgICAgICAgICAgKysgcG9zaXRpb247CisgICAgICAgICAgICBj
dXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwb3Np
dGlvbiA8IG51bWJlck9mSXRlbXMpIAorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCBj
dXJzb3IgdG8gc3RvcCBhZnRlciBwb3NpdGlvbiIgKyBudW1iZXJPZkl0ZW1zICsgIiwgYnV0IHN0
b3BwZWQgYXQgIiArIHBvc2l0aW9uKTsKKworICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFz
dXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItY29udGludWVQcmltYXJ5S2V5Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItY29udGludWVQcmltYXJ5S2V5
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODM1MWY1OGUyMGUxODczNjAzMmEwOGNiMTkxNjNiZmVjODRmYWNm
OQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2lu
ZGV4LWN1cnNvci1jb250aW51ZVByaW1hcnlLZXkuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlv
bnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJh
c2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gImlu
ZGV4LWN1cnNvci1jb250aW51ZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJh
c2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOwor
fQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVz
dFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlv
bkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9
IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0
aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9u
KCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRl
c3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAg
ICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9w
ZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRi
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3Jl
YXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1
ZScsIGluZGV4S2V5OiAnaW5kZXhWYWx1ZScgfSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0
Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1l
ID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICB2YXIg
cHJpbWFyeUtleSA9IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0Owor
ICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgICsrIHByaW1hcnlLZXk7CisgICAgICAg
ICAgICBjdXJzb3IuY29udGludWVQcmltYXJ5S2V5KCdpbmRleFZhbHVlJywgcHJpbWFyeUtleSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocHJpbWFyeUtleSA8IG51bWJlck9m
SXRlbXMpIAorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCBjdXJzb3IgdG8gdmlzaXQg
IiArIG51bWJlck9mSXRlbXMgKyAiIGl0ZW1zLCBvbmx5IGdvdCAiICsgcHJpbWFyeUtleSk7CisK
KyAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsK
KworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5u
ZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0
KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRl
bGV0ZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29y
LWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkY2YyZTRlNmU5OGY0NTJkMWM0YmYyNGIzNDhhMTMx
ODVmNDZkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9i
YXNpYy9pbmRleC1jdXJzb3ItZGVsZXRlLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5u
ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0g
MjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMp
IGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1j
dXJzb3ItZGVsZXRlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3Zh
ciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgdHJhbnNhY3Rpb24g
PSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoewor
ICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDog
J21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVs
bDsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4Jywg
J2luZGV4S2V5Jyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVw
OworCisgICAgeWllbGQ7CisKKyAgICAvLyBTdG9yZSBpdGVtcyBmb3IgZGVsZXRpb24uCisgICAg
dHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7CisgICAg
dmFyIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgIG9iamVjdFN0
b3JlLnB1dCh7IHZhbHVlOiAndmFsdWUnLCBpbmRleEtleTogImluZGV4IiArIGkgfSwgaSk7CisK
KyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
bmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQ
ZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsK
KyAgICB2YXIgY29tcGxldGVkRGVsZXRlcyA9IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5k
ZWxldGUoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlm
ICgrK2NvbXBsZXRlZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAg
ICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vyc29yLmNvbnRp
bnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRp
bWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAw
KTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5odG1sIGIvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk1MTgwMjBiODI2ZTVjODAyMGUxNGJiMmJjMzE4N2UwMWMzMmUyN2MKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3It
dXBkYXRlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJP
Zkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVh
ZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJzb3ItdXBkYXRlLURCIjsK
K2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVW
YWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9u
cywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIg
PSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RS
dW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQorewor
ICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQor
CitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisK
K2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4
ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0Owor
ICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICAg
ICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJpbmRleCIgKyBp
IH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKwor
ICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwor
CisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9i
amVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAgIHZhciBjb21wbGV0ZWRVcGRh
dGVzID0gMDsKKyAgICBpbmRleC5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAg
IGlmKGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLnVwZGF0ZSh7IHZhbHVlOiBNYXRoLnJh
bmRvbSgpLCBpbmRleEtleTogY3Vyc29yLmtleX0pLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkVXBkYXRlcyA9PSBudW1iZXJPZkl0
ZW1zKQorICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlp
ZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVz
dFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRp
bWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1nZXQu
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWdldC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU0YmQ2MTc3NjgyM2Y5MmZkNDFmMzc3MTU5ODRjZGUxZGFjZGJlMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1nZXQu
aHRtbApAQCAtMCwwICsxLDc3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAxMDsKK2NvbnN0IG51bWJlck9mSXRlbXMg
PSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRp
bWUuCit2YXIgZGF0YWJhc2VOYW1lID0gImluZGV4LWdldC1EQiI7CitpbmRleGVkREIuZGVsZXRl
RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFy
dEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBu
dWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAg
IGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21z
JywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAg
dGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAg
fQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9y
ID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0
ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRl
cmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFz
ZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVj
dFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0
b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mSXRlbXM7IGkrKykKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0
KCB7IHRlc3Q6ICd5bycsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAg
b3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZh
ciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRi
LnRyYW5zYWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcp
OworICAgIHZhciBjb21wbGV0ZWRHZXRzID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bWJlck9mSXRlbXM7IGkrKykgeworICAgICAgICBpbmRleC5nZXQoJ2luZGV4JyArIGkpLm9uc3Vj
Y2VzcyA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5y
ZXN1bHQudGVzdCAhPSAieW8iKQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAneW8n
LCBnb3QgJyIgKyBldmVudC50YXJnZXQucmVzdWx0LnRlc3QgKyAiJyIpOworCisgICAgICAgICAg
ICBpZiAoKytjb21wbGV0ZWRHZXRzID09IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICAgICAg
bmV4dFN0ZXAoKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICgh
UGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBz
dGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0
aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtbXVsdGllbnRyeS5odG1sIGIvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtbXVsdGllbnRyeS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg2MDE2MzA2MDljOTUyMDg5MzA0MjRhY2M3Nzk5MWM1ZjZiYWRjZTUKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1tdWx0aWVu
dHJ5Lmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7CisKKy8vIERlbGV0ZSBhbGwg
ZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIG51bWJlckRlbGV0ZWQg
PSAwOwordmFyIGRhdGFiYXNlTmFtZVByZWZpeCA9ICJpbmRleC1tdWx0aWVudHJ5LURCLSI7Citm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlcmF0aW9ucyArIDE7ICsraSkgeworICAgIHJl
cSA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWVQcmVmaXggKyBpKTsKKyAg
ICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgrK251bWJlckRlbGV0
ZWQgPT0gbnVtYmVyT2ZJdGVyYXRpb25zKQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsK
KyAgICB9Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2
YXIgdHJhbnNhY3Rpb24gPSBudWxsOwordmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOworCitQZXJm
VGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJh
dGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsKKyAgICAgICAgZGIg
PSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RS
dW5uZXIuZ2MoKTsKKyAgICAgICAgKytjdXJyZW50SXRlcmF0aW9uOworICAgIH0KK30pOworCitm
dW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJh
dGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAg
ICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwordmFyIG9iamVjdCA9IHsgdGVzdDogJ3lvJywg
aW5kZXhLZXlzOiBbXSB9OworZm9yICh2YXIgaSA9IDA7IGkgPCA1MDAwOyBpKyspCisgICAgb2Jq
ZWN0LmluZGV4S2V5cy5wdXNoKCdpbmRleF9ub18nICsgaSk7CisKK2Z1bmN0aW9uICpydW5JdGVy
YXRpb24oKQoreworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKwor
ICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZVByZWZpeCAr
IGN1cnJlbnRJdGVyYXRpb24pOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAg
ICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJykuY3JlYXRlSW5kZXgoJ2luZGV4JywgJ2lu
ZGV4S2V5cycsIHsgbXVsdGlFbnRyeTogdHJ1ZSB9KTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHRyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHRyYW5zYWN0aW9uLm9i
amVjdFN0b3JlKCdzdG9yZScpLnB1dChvYmplY3QsIDEpOworICAgIHRyYW5zYWN0aW9uLm9uY29t
cGxldGUgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIGluZGV4ID0gZGIudHJh
bnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisK
KyAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
OyBpKyspCisgICAgeworICAgICAgICBpbmRleC5nZXQoJ2luZGV4X25vXycgKyBpKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVz
dWx0LnRlc3QgIT0gInlvIikKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgJ3lvJywg
Z290ICciICsgZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0ICsgIiciKTsKKworICAgICAgICAgICAg
aWYgKCsrY29tcGxldGVkR2V0cyA9PSAxMDAwKQorICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7
CisgICAgICAgIH07CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVu
bmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtYWRkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjIxNGZj
Nzg5MWE4OGQ4OWJlZWY4ZjJjMThlZWJkOTU4Nzc5MTlhMAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sCkBAIC0w
LDAgKzEsODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0
IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisK
Ky8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBk
YXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtYWRkLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRl
cmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7
CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3Vz
dG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAor
ICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0
R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9
KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBy
dW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgp
Cit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRp
b24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFt
ZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB9CisgICAgb3BlblJlcXVl
c3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRp
bWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRy
YW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAg
ICB2YXIgY29tcGxldGVkQWRkcyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
Zkl0ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUuYWRkKCJ2YWx1ZSIgKyBpLCBpKS5v
bnN1Y2Nlc3MgPSAoZnVuY3Rpb24gKGtleSkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0ga2V5
KQorICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgJyIgKyBrZXkgKyAiJywgZ290
ICciICsgZXZlbnQudGFyZ2V0LnJlc3VsdCArICInIik7CisKKyAgICAgICAgICAgICAgICBpZiAo
Kytjb21wbGV0ZWRBZGRzID09IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKGkpOworICAgIH0KKworICAgIHlp
ZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVz
dFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENs
ZWFyIHRoZSBvYmplY3Qgc3RvcmUgc28gd2UgZG9uJ3QgYWRkIGV4aXN0aW5nIGl0ZW1zIGluIHRo
ZSBuZXh0IGl0ZXJhdGlvbi4KKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9y
ZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICBvYmplY3RTdG9yZS5j
bGVhcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVwKCk7
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAw
KTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY2xlYXIuaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNsZWFyLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmQ3ZmE2ZGNhMTQ2ZmVjNWRkZGViZjMzNGJjNmRmMTNjNGMwYmZkMQotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNsZWFy
Lmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1z
ID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0
aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1jbGVhci1EQiI7CitpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
KyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2
YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIu
cHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDog
bnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24g
KCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAg
ICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7
CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2Vu
ZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24g
bmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAq
cnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Blbihk
YXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFy
IG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQorICAg
IG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICAv
LyBTdG9yZSBpdGVtcyBmb3IgY2xlYXIuCisgICAgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnLCAncmVhZHdyaXRlJyk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
Zkl0ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUuYWRkKCJ2YWx1ZSIgKyBpLCBpKTsK
KyAgICB9CisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRU
aW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICBv
YmplY3RTdG9yZS5jbGVhcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVu
bmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNvdW50Lmh0bWwgYi9QZXJmb3JtYW5jZVRl
c3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jb3VudC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFi
NmI0ZGEyOTRlNzMwZTdhZWZkODI1ZDc5ZmUyMmM1ZDFhNTI0NmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jb3VudC5odG1s
CkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUw
MDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4K
K3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY291bnQtREIiOworaW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAg
c3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRi
ID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsK
KyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6
ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAg
ICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwor
ICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVy
YXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5l
eHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1
bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0
YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBv
YmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3Rv
cmUucHV0KCJ2YWx1ZSIgKyBpLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVz
dFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIG9iamVjdFN0b3JlLmNvdW50KCkub25z
dWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1
bHQgIT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAiICsgbnVt
YmVyT2ZJdGVtcyArICJpdGVtcyBidXQgZ2V0ICIgKyBldmVudC50YXJnZXQucmVzdWx0KTsKKwor
ICAgICAgICBuZXh0U3RlcCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJm
VGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0
VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24s
IDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5jZS5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWFk
dmFuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYmEwZTVhNjE4OTIzZTMxMmUzZGU5NDE3ZTAyODAyNjdh
YmM1MjlhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFz
aWMvb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlv
bnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworY29uc3QgY3Vyc29yU3RlcCA9
IDI7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4K
K3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyb3NyLWFkdmFuY2UtREIiOworaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24o
KSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxs
OwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVl
c0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAor
ICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51
bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5l
ci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAg
dGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1
bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVu
Y3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERC
Lm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
ICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAg
b2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIgKyBpLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIHZhciBleHBlY3RlZEtl
eSA9IDA7CisgICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAg
ICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJzb3Iua2V5ICE9IGV4cGVjdGVk
S2V5KQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCBjdXJzb3Iua2V5ICciICsgZXhw
ZWN0ZWRLZXkgKyAiJywgZ290ICciICsgY3Vyc29yLmtleSArICInIik7CisKKyAgICAgICAgICAg
IGV4cGVjdGVkS2V5ICs9IGN1cnNvclN0ZXA7CisgICAgICAgICAgICBjdXJzb3IuYWR2YW5jZShj
dXJzb3JTdGVwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5leHRTdGVwKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVlLmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItY29udGludWUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYWJiZTYxNGVlZDRhOGUxNWEwM2RkYjMyNDZmYThmNWYwZjI3Njg4Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0
c3RvcmUtY3Vyc29yLWNvbnRpbnVlLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7
Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZv
ciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9y
ZS1jdXJvc3ItY29udGludWUtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNl
TmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30K
KwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RS
dW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25D
b3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBu
dWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlv
biBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigp
OworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0
R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAg
dmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVu
UmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9
IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0
ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIgKyBpLCBp
KTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5
aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAg
IHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgIHZhciBleHBlY3RlZEtleSA9IDA7CisgICAgb2JqZWN0U3RvcmUub3BlbkN1
cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3Ig
PSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAg
IGlmIChjdXJzb3Iua2V5ICE9IGV4cGVjdGVkS2V5KyspCisgICAgICAgICAgICAgICAgYWxlcnQo
IkV4cGVjdGVkIGN1cnNvci5rZXkgJyIgKyBleHBlY3RlZEtleSArICInLCBnb3QgJyIgKyBjdXJz
b3Iua2V5ICsgIiciKTsKKworICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBl
cmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLWN1cnNvci1kZWxldGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jh
c2ljL29iamVjdHN0b3JlLWN1cnNvci1kZWxldGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTUyMjQxOWRi
MTRiZTE1MWY2OGE2NTcwMjE3ZTA2NTYxZTAwZmFlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWRlbGV0ZS5odG1s
CkBAIC0wLDAgKzEsOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUw
MDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4K
K3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyc29yLWRlbGV0ZS1EQiI7CitpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigp
IHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7
Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5u
ZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3Vu
dDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rp
b24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsK
KyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdj
KCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0
R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rp
b24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlv
biAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Bl
bihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
dmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQor
ICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAg
ICAvLyBTdG9yZSBpdGVtcyBmb3IgZGVsZXRpb24uCisgICAgdHJhbnNhY3Rpb24gPSBkYi50cmFu
c2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJh
bnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwg
aSk7CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgbmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRp
bWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIG9iamVjdFN0b3JlID0gZGIudHJhbnNh
Y3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIHZh
ciBjb21wbGV0ZWREZWxldGVzID0gMDsKKyAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25z
dWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRh
cmdldC5yZXN1bHQ7CisgICAgICAgIGlmKGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLmRl
bGV0ZSgpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYg
KCsrY29tcGxldGVkRGVsZXRlcyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgICAg
ICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJzb3IuY29udGlu
dWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVz
dFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGlt
ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDAp
OworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItdXBkYXRlLmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItdXBkYXRl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTdmODIzYjMzZmJiNjM2Y2RhNjU4MTNmMDY3NzgyYzY2M2U3ODAz
ZAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29i
amVjdHN0b3JlLWN1cnNvci11cGRhdGUuaHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5l
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAy
MDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2Uocykg
Zm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0
b3JlLWN1cnNvci11cGRhdGUtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNl
TmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30K
KwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RS
dW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25D
b3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBu
dWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlv
biBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigp
OworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0
R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAg
dmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVu
UmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9
IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0
ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIsIGkpOwor
ICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxk
OworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFy
IG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgIHZhciBjb21wbGV0ZWRVcGRhdGVzID0gMDsKKyAgICBvYmpl
Y3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGlmKGN1cnNvcikg
eworICAgICAgICAgICAgY3Vyc29yLnVwZGF0ZShNYXRoLnJhbmRvbSgpKS5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZFVwZGF0ZXMg
PT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVl
QXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFz
aWMvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9i
YXNpYy9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWM0MjQ5ZjI1NTk1OTk3
OTE5YzAwODU5ODY0M2IwNTIyMTdjYjNiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKQEAgLTAsMCArMSw4
MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIGl0ZXJhdGlv
bkNvdW50ID0gMTA7CisKKy8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVh
ZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1jdXJzb3ItREIiOwor
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rp
b24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBu
dWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKKworUGVyZlRl
c3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRp
b25Db3VudDogaXRlcmF0aW9uQ291bnQsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51
bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgICAgICsrY3VycmVudEl0ZXJh
dGlvbjsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRl
c3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5j
dGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0
aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5v
cGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAg
ICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTAwMDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc3Vm
Zml4ID0gKCIwMDAwMDAwIiArIGkpLnNsaWNlKC03KTsKKyAgICAgICAgICAgIG9iamVjdFN0b3Jl
LnB1dCgiYmFyX3ZhbHVlXyIgKyBzdWZmaXgsICJmb29fa2V5XyIgKyBzdWZmaXgpOworICAgICAg
ICB9CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAg
eWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisgICAg
dmFyIGN1cnNvclJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgn
c3RvcmUnKS5vcGVuQ3Vyc29yKCk7CisgICAgdmFyIGN1cnNvckl0ZXJhdGlvbiA9IDA7CisgICAg
Y3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIg
Y3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYgKGN1cnNvcikgeworICAg
ICAgICAgICAgdmFyIHN1ZmZpeCA9ICgiMDAwMDAwMCIgKyBjdXJzb3JJdGVyYXRpb24pLnNsaWNl
KC03KTsKKyAgICAgICAgICAgIGlmIChjdXJzb3Iua2V5ICE9ICJmb29fa2V5XyIgKyBzdWZmaXgp
CisgICAgICAgICAgICAgICAgYWxlcnQoIkluY29ycmVjdCB2YWx1ZSByZXRyaWV2ZWQ6ICIgKyBj
dXJzb3Iua2V5KTsKKyAgICAgICAgICAgIGlmIChjdXJzb3IudmFsdWUgIT0gImJhcl92YWx1ZV8i
ICsgc3VmZml4KQorICAgICAgICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3QgdmFsdWUgcmV0cmll
dmVkOiAiICsgY3Vyc29yLmtleSk7CisgICAgICAgICAgICArK2N1cnNvckl0ZXJhdGlvbjsKKyAg
ICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG5leHRTdGVwKCk7CisgICAgfTsKKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1
bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbCBiL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk2NDU5YTRmOTQ1NjYwYWUyZmIzNWQxYTQzYWRiZjgwNjE0ZjgyZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUu
aHRtbApAQCAtMCwwICsxLDg1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMg
PSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRp
bWUuCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWRlbGV0ZS1EQiI7CitpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
KyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2
YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIu
cHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDog
bnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24g
KCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAg
ICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7
CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2Vu
ZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24g
bmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAq
cnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Blbihk
YXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFy
IG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQorICAg
IG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICAv
LyBTdG9yZSBpdGVtcyBmb3IgZGVsZXRpb24uCisgICAgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2Fj
dGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJhbnNh
Y3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkl0ZW1zOyArK2kpCisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSk7
CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgbmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rp
b24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIHZhciBj
b21wbGV0ZWREZWxldGVzID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRl
bXM7ICsraSkgeworICAgICAgICBvYmplY3RTdG9yZS5kZWxldGUoaSkub25zdWNjZXNzID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZERlbGV0ZXMgPT0gbnVt
YmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFz
eW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2lj
L29iamVjdHN0b3JlLWdldC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMv
b2JqZWN0c3RvcmUtZ2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY3OThhNWZjNjhmOTcyNzU5YTIxMzlm
YzdhMDkyYzE0Y2M5OTZlNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWdldC5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9u
cyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFz
ZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2Jq
ZWN0c3RvcmUtZ2V0LURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3Zh
ciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgdHJhbnNhY3Rpb24g
PSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoewor
ICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDog
J21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyYW5zYWN0aW9uID0gbnVs
bDsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgiaW5kZXgiICsgaSwgaSk7CisgICAg
fQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisK
KyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2Jq
ZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkl0ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUuZ2V0KGkpLm9uc3VjY2VzcyA9
IChmdW5jdGlvbiAoaikgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0gKCJpbmRleCIgKyBqKSkK
KyAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICdpbmRleCIgKyBqICsgIicsIGdv
dCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOworCisgICAgICAgICAgICAgICAgaWYg
KCsrY29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBu
ZXh0U3RlcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KShpKTsKKyAgICB9CisKKyAgICB5
aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRl
c3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRU
aW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3Rv
cmUtcHV0Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9y
ZS1wdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmZmMDVmNTRhZmQyOTA0Njk0MjQ3YmRjOWFkOWM4MWRl
ZmIwMGVlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFz
aWMvb2JqZWN0c3RvcmUtcHV0Lmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citj
b25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0
aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1w
dXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNz
ID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5l
cmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRv
TWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJ
dGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQ
ZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlv
bigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVw
KCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQo
KTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0
ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkK
KyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJ2YWx1ZSIsIGkpOworICAgIH0KKyAgICBvcGVu
UmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0
YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIG9iamVjdFN0b3JlID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdzdG9yZScp
OworICAgIHZhciBjb21wbGV0ZWRQdXRzID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bWJlck9mSXRlbXM7ICsraSkgeworICAgICAgICBvYmplY3RTdG9yZS5wdXQoTWF0aC5yYW5kb20o
KSwgaSkub25zdWNjZXNzID0gKGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0
ICE9IGtleSkKKyAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICciICsga2V5ICsg
IicsIGdvdCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOworCisgICAgICAgICAgICAg
ICAgaWYgKCsrY29tcGxldGVkUHV0cyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAg
ICAgICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KShpKTsKKyAgICB9CisK
KyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMo
UGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgtZ2V0
Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1nZXQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllNTI2NzNhODU3NzRiNWQxN2E1NmRiZWJhZWYyNmRj
MWNlNGVlNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1nZXQuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLS8vIERl
bGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFz
ZU5hbWUgPSAiaW5kZXgtZ2V0LURCIjsKLWluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFz
ZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgIHN0YXJ0SXRlcmF0aW9uKCk7Ci19
Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgdHJhbnNh
Y3Rpb24gPSBudWxsOwotCi1QZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5
bmMoewotICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiAxMCwKLSAgICB1bml0OiAnbXMnLAotICAg
IGRvbmU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOwotICAgICAg
ICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJm
VGVzdFJ1bm5lci5nYygpOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigp
Ci17Ci0gICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOwotICAgIG5leHRTdGVwKCk7
Ci19Ci0KLWZ1bmN0aW9uIG5leHRTdGVwKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsK
LX0KLQotdmFyIG51bWJlck9mRW50cmllcyA9IDUwMDA7Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRp
b24oKQotewotICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFt
ZSk7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsK
LSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKLSAgICAgICAgb2JqZWN0U3RvcmUu
Y3JlYXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbnVtYmVyT2ZFbnRyaWVzOyBpKyspCi0gICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgg
eyB0ZXN0OiAneW8nLCBpbmRleEtleTogImluZGV4IiArIGkgfSwgaSk7Ci0gICAgfQotICAgIG9w
ZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2YXIg
c3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7Ci0KLSAgICB2YXIgaW5kZXggPSBkYi50
cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsK
LSAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkVudHJpZXM7IGkrKykKLSAgICB7Ci0gICAgICAgIGluZGV4LmdldCgnaW5kZXgnICsgaSku
b25zdWNjZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQudGFy
Z2V0LnJlc3VsdC50ZXN0ICE9ICJ5byIpCi0gICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVk
ICd5bycsIGdvdCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQudGVzdCArICInIik7Ci0KLSAgICAg
ICAgICAgIGlmICgrK2NvbXBsZXRlZEdldHMgPT0gbnVtYmVyT2ZFbnRyaWVzKQotICAgICAgICAg
ICAgICAgIG5leHRTdGVwKCk7Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgeWllbGQ7Ci0KLSAg
ICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5v
dygpIC0gc3RhcnRUaW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChzdGFy
dEl0ZXJhdGlvbiwgMCk7Ci19Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LW11bHRpZW50cnkuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LW11bHRpZW50cnkuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0ZjJlY2U5N2E1Njg4NDgwOTkyZmI4YWZlZmU3MGUwNmQ1
YTBhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSw5NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi12
YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKLXZhciBudW1iZXJEZWxldGVkID0gMDsKLQotLy8gRGVs
ZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCi12YXIgZGF0YWJh
c2VOYW1lUHJlZml4ID0gImluZGV4LW11bHRpZW50cnktREItIjsKLWZvciAodmFyIGkgPSAwOyBp
IDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKLSAgICByZXEgPSBpbmRleGVkREIuZGVsZXRl
RGF0YWJhc2UoZGF0YWJhc2VOYW1lUHJlZml4ICsgaSk7Ci0gICAgcmVxLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50
KQotICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2Vu
ZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgdHJhbnNhY3Rpb24gPSBudWxsOwot
dmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOwotCi1QZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFz
dXJlVmFsdWVzQXN5bmMoewotICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBpdGVyYXRpb25Db3Vu
dCwKLSAgICB1bml0OiAnbXMnLAotICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJh
bnNhY3Rpb24gPSBudWxsOwotICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0
b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwotICAgICAgICArK2N1cnJl
bnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsK
LSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0K
LQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQot
Ci12YXIgb2JqZWN0ID0geyB0ZXN0OiAneW8nLCBpbmRleEtleXM6IFtdIH07Ci1mb3IgKHZhciBp
ID0gMDsgaSA8IDUwMDA7IGkrKykKLSAgICBvYmplY3QuaW5kZXhLZXlzLnB1c2goJ2luZGV4X25v
XycgKyBpKTsKLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIHN0YXJ0VGlt
ZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhl
ZERCLm9wZW4oZGF0YWJhc2VOYW1lUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7Ci0gICAgb3Bl
blJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgZGIg
PSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3Rv
cmUnKS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnaW5kZXhLZXlzJywgeyBtdWx0aUVudHJ5OiB0cnVl
IH0pOwotICAgIH0KLSAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAg
IHlpZWxkOwotCi0gICAgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVh
ZHdyaXRlJyk7Ci0gICAgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KG9iamVj
dCwgMSk7Ci0gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IG5leHRTdGVwOwotCi0gICAgeWll
bGQ7Ci0KLSAgICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKLQotICAgIHZhciBjb21wbGV0ZWRHZXRzID0gMDsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKLSAgICB7Ci0gICAgICAgIGluZGV4
LmdldCgnaW5kZXhfbm9fJyArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkgewotICAg
ICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQudGVzdCAhPSAieW8iKQotICAgICAgICAg
ICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAneW8nLCBnb3QgJyIgKyBldmVudC50YXJnZXQucmVzdWx0
LnRlc3QgKyAiJyIpOwotCi0gICAgICAgICAgICBpZiAoKytjb21wbGV0ZWRHZXRzID09IDEwMDAp
Ci0gICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICB5
aWVsZDsKLQotICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRl
c3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRU
aW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKLX0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1s
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtYXJyYXkta2V5
cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtYXJyYXkta2V5cy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTBlOTNjZDlhOGY5MGYyMDI0Y2JjYzY0
ZjJhNjI1OTQ1NWY3YTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWFycmF5LWtleXMuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08
Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25Db3VudCA9IDIwOwotdmFyIG51bWJlckRlbGV0ZWQgPSAw
OwotCi0vLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4K
LXZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1hcnJheS1rZXlzLURCLSI7Ci1mb3IgKHZhciBp
ID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytpKSB7Ci0gICAgaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlUHJlZml4ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICgrK251bWJlckRlbGV0ZWQgPT0gaXRlcmF0aW9uQ291bnQpCi0gICAgICAgICAg
ICBzdGFydEl0ZXJhdGlvbigpOwotICAgIH0KLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxs
OwotdmFyIGRiID0gbnVsbDsKLXZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RS
dW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25D
b3VudDogaXRlcmF0aW9uQ291bnQsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGRiID0gbnVsbDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7
Ci0gICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlv
bjsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAgIHRlc3RH
ZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlv
biBuZXh0U3RlcCgpCi17Ci0gICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLWZ1bmN0aW9u
IGNyZWF0ZVN1YkFycmF5KGNvdW50KQotewotICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShjb3Vu
dCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGFycmF5
W2ldID0gY3JlYXRlU3ViQXJyYXkoY291bnQgLSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5
OwotfQotCi12YXIgbnVtYmVyT2ZTdWJhcnJheXMgPSA2OwotdmFyIGFycmF5ID0gY3JlYXRlU3Vi
QXJyYXkobnVtYmVyT2ZTdWJhcnJheXMpOwotYXJyYXkucHVzaCgidmFyaWFudCIpOwotCi1mdW5j
dGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsKLSAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIu
b3BlbihkYXRhYmFzZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24pOwotICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2FycmF5cycpOwot
ICAgIH0KLSAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxk
OwotCi0gICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFy
IG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2FycmF5cycsICdyZWFkd3JpdGUnKS5vYmpl
Y3RTdG9yZSgnYXJyYXlzJyk7Ci0gICAgb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IG5leHRTdGVwOwotCi0gICAgdmFyIG51bWJlck9mSW5zZXJ0cyA9IDEwMDsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bWJlck9mSW5zZXJ0czsgKytpKSB7Ci0gICAgICAgIGFycmF5W251
bWJlck9mU3ViYXJyYXlzXSA9IGk7Ci0gICAgICAgIG9iamVjdFN0b3JlLnB1dCgiU29tZSB2YWx1
ZSEhISIsIGFycmF5KTsKLSAgICB9Ci0KLSAgICB5aWVsZDsKLQotICAgIGlmICghUGVyZlRlc3RS
dW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsK
LX0KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTRmZjRiZjVmZmYwZWM5ZThjNTJjYjEyMmRjYTlhNjM5OGQzOTJmNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTAg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFyIGl0ZXJhdGlv
bkNvdW50ID0gMjA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0KLXZhciBxdW90YSA9IDUwMCAq
IDEwMjQgKiAxMDI0OyAvLzUwME1CCi1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1
bm5lci5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0KLS8vIERlbGV0ZSBhbGwgZGF0YWJh
c2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlUHJlZml4ID0gImxh
cmdlLXN0cmluZy1rZXlzLURCLSI7Ci1mb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50
ICsgMTsgKytpKSB7Ci0gICAgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlUHJlZml4
ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICgrK251bWJlckRlbGV0
ZWQgPT0gaXRlcmF0aW9uQ291bnQpCi0gICAgICAgICAgICBzdGFydEl0ZXJhdGlvbigpOwotICAg
IH0KLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotdmFyIGRiID0gbnVsbDsKLXZhciBj
dXJyZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZh
bHVlc0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCi0g
ICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGRiID0gbnVs
bDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBlcmZUZXN0UnVubmVy
LmdjKCk7Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKLSAgICB9Ci19KTsKLQotZnVuY3Rp
b24gc3RhcnRJdGVyYXRpb24oKQotewotICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24o
KTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlvbiBuZXh0U3RlcCgpCi17Ci0gICAgdGVz
dEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLXZhciBiYXNlU3RyaW5nOwotZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDA7ICsraSkKLSAgICBiYXNlU3RyaW5nICs9ICJhYmNkZWZnaGlqa2xtbm9wcXJz
dHV2d3h5eiI7Ci0KLXZhciBudW1iZXJPZkluc2VydHMgPSA1MDsKLXZhciBhcnJheSA9IG5ldyBB
cnJheShudW1iZXJPZkluc2VydHMpOwotZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkluc2Vy
dHM7ICsraSkgewotICAgIGFycmF5W2ldID0gbmV3IEFycmF5QnVmZmVyKDIwOTcxNTIpOwotICAg
IHZhciB2aWV3ID0gbmV3IEludDMyQXJyYXkoYXJyYXlbaV0pOwotICAgIHZpZXdbdmlldy5sZW5n
dGggLSAxXSA9IGk7Ci19Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBv
cGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJh
dGlvbik7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnYXJyYXlzJyk7Ci0gICAgfQotICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9
IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RS
dW5uZXIubm93KCk7Ci0KLSAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXJy
YXlzJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdhcnJheXMnKTsKLSAgICBvYmplY3RTdG9y
ZS50cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gbmV4dFN0ZXA7Ci0KLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG51bWJlck9mSW5zZXJ0czsgKytpKQotICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNv
bWUgdmFsdWUhISEiLCBhcnJheVtpXSk7Ci0KLSAgICB5aWVsZDsKLQotICAgIGlmICghUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRp
bWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAw
KTsKLX0KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVz
cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2Vy
dHMtcmVzcG9uc2l2ZW5lc3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlm
ZjZiNWExNGVkYWU4ZGQyM2MzMDI5MzcwMjAyYzAxYmUxMzU0Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9s
YXJnZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy5odG1sCisrKyAvZGV2L251bGwK
QEAgLTEsODMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFy
IGl0ZXJhdGlvbkNvdW50ID0gMjA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0KLS8vIERlbGV0
ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNl
UHJlZml4ID0gImxhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLURCLSI7Ci1m
b3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytpKSB7Ci0gICAgaW5kZXhl
ZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlUHJlZml4ICsgaSkub25zdWNjZXNzID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGlmICgrK251bWJlckRlbGV0ZWQgPT0gaXRlcmF0aW9uQ291bnQpCi0g
ICAgICAgICAgICBzdGFydEl0ZXJhdGlvbigpOwotICAgIH0KLX0KLQotdmFyIHRlc3RHZW5lcmF0
b3IgPSBudWxsOwotdmFyIGRiID0gbnVsbDsKLXZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKLQot
UGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAgICBjdXN0b21J
dGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25l
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGRiID0gbnVsbDsKLSAgICAgICAgbGFyZ2VzdERlbGF5
ID0gMDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBlcmZUZXN0UnVu
bmVyLmdjKCk7Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKLSAgICB9Ci19KTsKLQotZnVu
Y3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRp
b24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlvbiBuZXh0U3RlcCgpCi17Ci0gICAg
dGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLXZhciBudW1iZXJPZk9iamVjdHMgPSA1MDAwMDsK
LXZhciBvYmplY3RzVG9JbnNlcnQgPSBuZXcgQXJyYXkobnVtYmVyT2ZPYmplY3RzKTsKLWZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmplY3RzOyArK2kpIHsKLSAgICBvYmplY3RzVG9JbnNl
cnRbaV0gPSB7IGRhdGE6IE1hdGgucmFuZG9tKCkgfTsKLSAgICBvYmplY3RzVG9JbnNlcnRbaV0u
aWQgPSAnb2JqZWN0XycgKyBpOwotfQotCi1mdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsKLSAg
ICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZVByZWZpeCArIGN1cnJl
bnRJdGVyYXRpb24pOwotICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9u
KGV2ZW50KSB7Ci0gICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ29iamVjdHMnLCB7a2V5UGF0aDogJ2lkJ30pOwotICAgIH0KLSAg
ICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAg
dmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ29iamVjdHMnLCAncmVhZHdyaXRlJyku
b2JqZWN0U3RvcmUoJ29iamVjdHMnKTsKLSAgICBvYmplY3RTdG9yZS50cmFuc2FjdGlvbi5vbmNv
bXBsZXRlID0gbmV4dFN0ZXA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9iamVj
dHM7ICsraSkKLSAgICAgICAgb2JqZWN0U3RvcmUucHV0KG9iamVjdHNUb0luc2VydFtpXSk7Ci0K
LSAgICBQZXJmVGVzdFJ1bm5lci5zdGFydENoZWNraW5nUmVzcG9uc2l2ZW5lc3MoKTsKLQotICAg
IHlpZWxkOwotCi0gICAgUGVyZlRlc3RSdW5uZXIuc3RvcENoZWNraW5nUmVzcG9uc2l2ZW5lc3Mo
KTsKLSAgICAKLSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZU
ZXN0UnVubmVyLmxvbmdlc3RSZXNwb25zaXZlbmVzc0RlbGF5KCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKLX0KLQotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9s
YXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIv
bGFyZ2UtbnVtYmVyLW9mLWluc2VydHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2FkZDcyODlhNGY2MDA5NDc5MTBjMzQxNTg4MTVkZjgzMGVmZTJkMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODAg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFyIGl0ZXJhdGlv
bkNvdW50ID0gMjA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0KLS8vIERlbGV0ZSBhbGwgZGF0
YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlUHJlZml4ID0g
ImxhcmdlLW51bWJlci1vZi1pbnNlcnRzLURCLSI7Ci1mb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJh
dGlvbkNvdW50ICsgMTsgKytpKSB7Ci0gICAgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFi
YXNlUHJlZml4ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICgrK251
bWJlckRlbGV0ZWQgPT0gaXRlcmF0aW9uQ291bnQpCi0gICAgICAgICAgICBzdGFydEl0ZXJhdGlv
bigpOwotICAgIH0KLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotdmFyIGRiID0gbnVs
bDsKLXZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRv
TWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9u
Q291bnQsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGRiID0gbnVsbDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBlcmZU
ZXN0UnVubmVyLmdjKCk7Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKLSAgICB9Ci19KTsK
LQotZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAgIHRlc3RHZW5lcmF0b3IgPSBydW5J
dGVyYXRpb24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlvbiBuZXh0U3RlcCgpCi17
Ci0gICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLXZhciBudW1iZXJPZk9iamVjdHMgPSAx
MDAwMDA7Ci12YXIgb2JqZWN0c1RvSW5zZXJ0ID0gbmV3IEFycmF5KG51bWJlck9mT2JqZWN0cyk7
Ci1mb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKSB7Ci0gICAgb2JqZWN0
c1RvSW5zZXJ0W2ldID0geyBkYXRhOiBNYXRoLnJhbmRvbSgpIH07Ci0gICAgb2JqZWN0c1RvSW5z
ZXJ0W2ldLmlkID0gJ29iamVjdF8nICsgaTsKLX0KLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigp
Ci17Ci0gICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXgg
KyBjdXJyZW50SXRlcmF0aW9uKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAg
ICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdvYmplY3RzJywge2tleVBhdGg6ICdpZCd9KTsKLSAg
ICB9Ci0gICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsK
LQotICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBv
YmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdvYmplY3RzJywgJ3JlYWR3cml0ZScpLm9iamVj
dFN0b3JlKCdvYmplY3RzJyk7Ci0gICAgb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IG5leHRTdGVwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmplY3RzOyAr
K2kpCi0gICAgICAgIG9iamVjdFN0b3JlLnB1dChvYmplY3RzVG9JbnNlcnRbaV0pOwotCi0gICAg
eWllbGQ7Ci0KLSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZU
ZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0
VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5n
LWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLXN0cmluZy1rZXlz
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNDA2Y2IyNGNjYzUwMjliMDI2
MTlkZTRhMmM3NTlkZDgwM2ZkOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25Db3VudCA9IDIwOwotdmFyIG51bWJlckRlbGV0
ZWQgPSAwOwotCi12YXIgcXVvdGEgPSA1MDAgKiAxMDI0ICogMTAyNDsgLy81MDBNQgotaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIuc2V0SURCUGVyT3JpZ2luUXVvdGEocXVv
dGEpOwotCi0vLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGlt
ZS4KLXZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1zdHJpbmcta2V5cy1EQi0iOwotZm9yICh2
YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5k
ZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAg
ICAgICAgc3RhcnRJdGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZU
ZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0
aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVu
Y3Rpb24gKCkgewotICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBu
dWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwotICAgICAgICArK2N1cnJlbnRJdGVy
YXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0
ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVu
Y3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQotCi12YXIg
YmFzZVN0cmluZzsKLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCi0gICAgYmFzZVN0
cmluZyArPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwotCi12YXIgbnVtYmVyT2ZJbnNl
cnRzID0gMTA7Ci12YXIgYXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZJbnNlcnRzKTsKLWZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpCi0gICAgYXJyYXlbaV0gPSBiYXNl
U3RyaW5nICsgaTsKLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5S
ZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9u
KTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewot
ICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAgICAgIGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhcnJheXMnKTsKLSAgICB9Ci0gICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4
dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5l
ci5ub3coKTsKLQotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhcnJheXMn
LCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ2FycmF5cycpOwotICAgIG9iamVjdFN0b3JlLnRy
YW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKLQotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpCi0gICAgICAgIG9iamVjdFN0b3JlLnB1dCgiU29tZSB2
YWx1ZSEhISIsIGFycmF5W2ldKTsKLQotICAgIHlpZWxkOwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1
bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwot
fQotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRiNWRiOTNlMWZlYzEwNzAzNmQxMTdjMjUzMmNiZDhiYmVhZGY1YzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4
MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi12YXIgaXRlcmF0
aW9uQ291bnQgPSAxMDsKLXZhciBudW1iZXJEZWxldGVkID0gMDsKLS8vIERlbGV0ZSBhbGwgZGF0
YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlTmFtZSA9ICJv
YmplY3RzdG9yZS1jdXJzb3ItREIiOwotaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNl
TmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgc3RhcnRJdGVyYXRpb24oKTsKLX0K
LQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotdmFyIGRiID0gbnVsbDsKLXZhciBjdXJyZW50
SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0Fz
eW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCi0gICAgdW5p
dDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGRiID0gbnVsbDsKLSAg
ICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7
Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gc3Rh
cnRJdGVyYXRpb24oKQotewotICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKLSAg
ICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlvbiBuZXh0U3RlcCgpCi17Ci0gICAgdGVzdEdlbmVy
YXRvci5uZXh0KCk7Ci19Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBv
cGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7Ci0gICAgb3BlblJlcXVl
c3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0OwotICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmpl
Y3RTdG9yZSgnc3RvcmUnKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTAwMDsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgc3VmZml4ID0gKCIwMDAwMDAwIiArIGkpLnNsaWNlKC03KTsK
LSAgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgiYmFyX3ZhbHVlXyIgKyBzdWZmaXgsICJmb29f
a2V5XyIgKyBzdWZmaXgpOwotICAgICAgICB9Ci0gICAgfQotICAgIG9wZW5SZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2YXIgc3RhcnRUaW1lID0gUGVy
ZlRlc3RSdW5uZXIubm93KCk7Ci0gICAgdmFyIGN1cnNvclJlcXVlc3QgPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5vcGVuQ3Vyc29yKCk7Ci0gICAgdmFyIGN1
cnNvckl0ZXJhdGlvbiA9IDA7Ci0gICAgY3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlv
bihldmVudCkgewotICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAg
ICAgICAgaWYgKGN1cnNvcikgewotICAgICAgICAgICAgdmFyIHN1ZmZpeCA9ICgiMDAwMDAwMCIg
KyBjdXJzb3JJdGVyYXRpb24pLnNsaWNlKC03KTsKLSAgICAgICAgICAgIGlmIChjdXJzb3Iua2V5
ICE9ICJmb29fa2V5XyIgKyBzdWZmaXgpCi0gICAgICAgICAgICAgICAgYWxlcnQoIkluY29ycmVj
dCB2YWx1ZSByZXRyaWV2ZWQ6ICIgKyBjdXJzb3Iua2V5KTsKLSAgICAgICAgICAgIGlmIChjdXJz
b3IudmFsdWUgIT0gImJhcl92YWx1ZV8iICsgc3VmZml4KQotICAgICAgICAgICAgICAgIGFsZXJ0
KCJJbmNvcnJlY3QgdmFsdWUgcmV0cmlldmVkOiAiICsgY3Vyc29yLmtleSk7Ci0gICAgICAgICAg
ICArK2N1cnNvckl0ZXJhdGlvbjsKLSAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5leHRTdGVwKCk7Ci0gICAgfTsKLQotICAgIHlpZWxk
OwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1
bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVv
dXQoc3RhcnRJdGVyYXRpb24sIDApOwotfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1nZXQuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWdldC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRjOGFjMjMyNzAxYWUxMjE2YmM3YzBjMjY4ODBm
Njk3NjU2MzIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWdldC5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4K
LQotLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFy
IGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1nZXQtREIiOwotaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgc3RhcnRJ
dGVyYXRpb24oKTsKLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotdmFyIGRiID0gbnVs
bDsKLXZhciB0cmFuc2FjdGlvbiA9IG51bGw7Ci0KLVBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01l
YXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IDIwLAotICAgIHVu
aXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAgICAgICB0cmFuc2FjdGlvbiA9
IG51bGw7Ci0gICAgICAgIGRiID0gbnVsbDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7
Ci0gICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0
YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0g
ICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5l
cmF0b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZFbnRyaWVzID0gNTAwMDsKLQotZnVuY3Rp
b24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9w
ZW4oZGF0YWJhc2VOYW1lKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5j
dGlvbihldmVudCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAgICAg
IHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50cmllczsgKytpKQotICAgICAgICAgICBv
YmplY3RTdG9yZS5wdXQoImluZGV4IiArIGksIGkpOwotICAgIH0KLSAgICBvcGVuUmVxdWVzdC5v
bnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAgdmFyIHN0YXJ0VGltZSA9
IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNh
Y3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7Ci0gICAgdmFyIGNvbXBsZXRlZEdl
dHMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbnRyaWVzOyArK2kpCi0g
ICAgewotICAgICAgICAKLSAgICAgICAgb2JqZWN0U3RvcmUuZ2V0KGkpLm9uc3VjY2VzcyA9IChm
dW5jdGlvbiAoaikgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0gKCJpbmRleCIgKyBqKSkKLSAg
ICAgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICdpbmRleCIgKyBqICsgIicsIGdvdCAn
IiArIGV2ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOwotCi0gICAgICAgICAgICAgICAgaWYgKCsr
Y29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkVudHJpZXMpCi0gICAgICAgICAgICAgICAgICAgIG5l
eHRTdGVwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pKGkpOwotICAgIH0KLQotICAgIHlp
ZWxkOwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVz
dFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRp
bWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwotfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtYXJy
YXkta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWFy
cmF5LWtleXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGIwZDNmOTMxOWVkZWJiZTI3YzdiMWVlMzllM2E0
ODU1ZDg5ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIv
c3RyZXNzL2xhcmdlLWFycmF5LWtleXMuaHRtbApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5l
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKK3Zh
ciBudW1iZXJEZWxldGVkID0gMDsKKworLy8gRGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0
ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VQcmVmaXggPSAibGFyZ2UtYXJyYXkta2V5
cy1EQi0iOworZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewor
ICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlv
bkNvdW50KQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKKyAgICB9Cit9CisKK3ZhciB0
ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlv
biA9IDA7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Cisg
ICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycs
CisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRl
c3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAg
ICArK2N1cnJlbnRJdGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0
aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0
ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4
dCgpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdWJBcnJheShjb3VudCkKK3sKKyAgICB2YXIgYXJy
YXkgPSBuZXcgQXJyYXkoY291bnQpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBhcnJheVtpXSA9IGNyZWF0ZVN1YkFycmF5KGNvdW50IC0gMSk7CisgICAg
fQorICAgIHJldHVybiBhcnJheTsKK30KKwordmFyIG51bWJlck9mU3ViYXJyYXlzID0gNjsKK3Zh
ciBhcnJheSA9IGNyZWF0ZVN1YkFycmF5KG51bWJlck9mU3ViYXJyYXlzKTsKK2FycmF5LnB1c2go
InZhcmlhbnQiKTsKKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5S
ZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9u
KTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhcnJheXMnKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4
dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5l
ci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhcnJheXMn
LCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ2FycmF5cycpOworICAgIG9iamVjdFN0b3JlLnRy
YW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKKworICAgIHZhciBudW1iZXJPZkluc2Vy
dHMgPSAxMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkluc2VydHM7ICsraSkg
eworICAgICAgICBhcnJheVtudW1iZXJPZlN1YmFycmF5c10gPSBpOworICAgICAgICBvYmplY3RT
dG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBhcnJheSk7CisgICAgfQorCisgICAgeWllbGQ7CisK
KyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWJpbmFyeS1r
ZXlzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtYmluYXJ5
LWtleXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMjI3MDA3ZDVjOTAyM2Q3Y2RmMWU3Mjg1MGUzZWVmMWNj
NjA1YzlkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3Ry
ZXNzL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIGl0ZXJhdGlvbkNvdW50ID0gMjA7Cit2YXIg
bnVtYmVyRGVsZXRlZCA9IDA7CisKK3ZhciBxdW90YSA9IDUwMCAqIDEwMjQgKiAxMDI0OyAvLzUw
ME1CCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5zZXRJREJQZXJPcmln
aW5RdW90YShxdW90YSk7CisKKy8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBh
aGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlUHJlZml4ID0gImxhcmdlLXN0cmluZy1rZXlzLURC
LSI7Citmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytpKSB7CisgICAg
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlUHJlZml4ICsgaSkub25zdWNjZXNzID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgrK251bWJlckRlbGV0ZWQgPT0gaXRlcmF0aW9uQ291
bnQpCisgICAgICAgICAgICBzdGFydEl0ZXJhdGlvbigpOworICAgIH0KK30KKwordmFyIHRlc3RH
ZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciBjdXJyZW50SXRlcmF0aW9uID0g
MDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBj
dXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCisgICAgdW5pdDogJ21zJywKKyAg
ICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdl
bmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgICAgICsr
Y3VycmVudEl0ZXJhdGlvbjsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24o
KQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgp
OworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7
Cit9CisKK3ZhciBiYXNlU3RyaW5nOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkK
KyAgICBiYXNlU3RyaW5nICs9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisKK3ZhciBu
dW1iZXJPZkluc2VydHMgPSA1MDsKK3ZhciBhcnJheSA9IG5ldyBBcnJheShudW1iZXJPZkluc2Vy
dHMpOworZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkluc2VydHM7ICsraSkgeworICAgIGFy
cmF5W2ldID0gbmV3IEFycmF5QnVmZmVyKDIwOTcxNTIpOworICAgIHZhciB2aWV3ID0gbmV3IElu
dDMyQXJyYXkoYXJyYXlbaV0pOworICAgIHZpZXdbdmlldy5sZW5ndGggLSAxXSA9IGk7Cit9CisK
K2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4
ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7CisgICAgb3BlblJl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBl
dmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnYXJyYXlz
Jyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAg
eWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAg
ICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXJyYXlzJywgJ3JlYWR3cml0ZScp
Lm9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICBvYmplY3RTdG9yZS50cmFuc2FjdGlvbi5vbmNv
bXBsZXRlID0gbmV4dFN0ZXA7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSW5z
ZXJ0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBhcnJh
eVtpXSk7CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZh
bHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWRE
Qi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy1y
ZXNwb25zaXZlbmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNWFjMzc0YjczNDIxNTdmMjU3MjdiZDM3
ODRmNDRjZTI4YTIzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbApA
QCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2
YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKK3ZhciBudW1iZXJEZWxldGVkID0gMDsKKworLy8gRGVs
ZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJh
c2VQcmVmaXggPSAibGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MtREItIjsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKKyAgICBpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VQcmVmaXggKyBpKS5vbnN1Y2Nlc3MgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkK
KyAgICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAgfQorfQorCit2YXIgdGVzdEdlbmVy
YXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOwor
CitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3Rv
bUl0ZXJhdGlvbkNvdW50OiBpdGVyYXRpb25Db3VudCwKKyAgICB1bml0OiAnbXMnLAorICAgIGRv
bmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICBsYXJnZXN0RGVs
YXkgPSAwOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RS
dW5uZXIuZ2MoKTsKKyAgICAgICAgKytjdXJyZW50SXRlcmF0aW9uOworICAgIH0KK30pOworCitm
dW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJh
dGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAg
ICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwordmFyIG51bWJlck9mT2JqZWN0cyA9IDUwMDAw
OwordmFyIG9iamVjdHNUb0luc2VydCA9IG5ldyBBcnJheShudW1iZXJPZk9iamVjdHMpOworZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9iamVjdHM7ICsraSkgeworICAgIG9iamVjdHNUb0lu
c2VydFtpXSA9IHsgZGF0YTogTWF0aC5yYW5kb20oKSB9OworICAgIG9iamVjdHNUb0luc2VydFtp
XS5pZCA9ICdvYmplY3RfJyArIGk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQorewor
ICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3Vy
cmVudEl0ZXJhdGlvbik7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnb2JqZWN0cycsIHtrZXlQYXRoOiAnaWQnfSk7CisgICAgfQor
ICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAg
ICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignb2JqZWN0cycsICdyZWFkd3JpdGUn
KS5vYmplY3RTdG9yZSgnb2JqZWN0cycpOworICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9u
Y29tcGxldGUgPSBuZXh0U3RlcDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mT2Jq
ZWN0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQob2JqZWN0c1RvSW5zZXJ0W2ldKTsK
KworICAgIFBlcmZUZXN0UnVubmVyLnN0YXJ0Q2hlY2tpbmdSZXNwb25zaXZlbmVzcygpOworCisg
ICAgeWllbGQ7CisKKyAgICBQZXJmVGVzdFJ1bm5lci5zdG9wQ2hlY2tpbmdSZXNwb25zaXZlbmVz
cygpOworICAgIAorICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVy
ZlRlc3RSdW5uZXIubG9uZ2VzdFJlc3BvbnNpdmVuZXNzRGVsYXkoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzY2NmY4MDUxOTkzMDM5MmNjMmYwODBlZjQxNzAxOWY5ZDU4N2MzZAotLS0gL2Rldi9udWxsCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5z
ZXJ0cy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9IDIwOwordmFyIG51bWJlckRlbGV0ZWQgPSAw
OworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4K
K3ZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1udW1iZXItb2YtaW5zZXJ0cy1EQi0iOworZm9y
ICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgeworICAgIGluZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQorICAg
ICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKKyAgICB9Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9y
ID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKK1Bl
cmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRl
cmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTog
ZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3Ig
PSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICArK2N1cnJlbnRJ
dGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAg
ICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKwor
ZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCit2
YXIgbnVtYmVyT2ZPYmplY3RzID0gMTAwMDAwOwordmFyIG9iamVjdHNUb0luc2VydCA9IG5ldyBB
cnJheShudW1iZXJPZk9iamVjdHMpOworZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9iamVj
dHM7ICsraSkgeworICAgIG9iamVjdHNUb0luc2VydFtpXSA9IHsgZGF0YTogTWF0aC5yYW5kb20o
KSB9OworICAgIG9iamVjdHNUb0luc2VydFtpXS5pZCA9ICdvYmplY3RfJyArIGk7Cit9CisKK2Z1
bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWRE
Qi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7CisgICAgb3BlblJlcXVl
c3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnb2JqZWN0cycs
IHtrZXlQYXRoOiAnaWQnfSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5l
eHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5u
ZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignb2JqZWN0
cycsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnb2JqZWN0cycpOworICAgIG9iamVjdFN0b3Jl
LnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mT2JqZWN0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQob2JqZWN0
c1RvSW5zZXJ0W2ldKTsKKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5t
ZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorCis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLXN0cmluZy1rZXlzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZi
YTgyNjhmODMzYjg0ZjI3NWU3N2U4NDYzMGY3ZmJkYWEwZDE0MAotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1s
CkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K3ZhciBpdGVyYXRpb25Db3VudCA9IDIwOwordmFyIG51bWJlckRlbGV0ZWQgPSAwOworCit2YXIg
cXVvdGEgPSA1MDAgKiAxMDI0ICogMTAyNDsgLy81MDBNQgoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIuc2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOworCisvLyBEZWxl
dGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFz
ZVByZWZpeCA9ICJsYXJnZS1zdHJpbmcta2V5cy1EQi0iOworZm9yICh2YXIgaSA9IDA7IGkgPCBp
dGVyYXRpb25Db3VudCArIDE7ICsraSkgeworICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShk
YXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
KytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQorICAgICAgICAgICAgc3RhcnRJdGVy
YXRpb24oKTsKKyAgICB9Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9
IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKK1BlcmZUZXN0UnVubmVyLnByZXBh
cmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJh
dGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQ
ZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247CisgICAgfQor
fSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0g
cnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAo
KQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCit2YXIgYmFzZVN0cmluZzsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgYmFzZVN0cmluZyArPSAiYWJjZGVm
Z2hpamtsbW5vcHFyc3R1dnd4eXoiOworCit2YXIgbnVtYmVyT2ZJbnNlcnRzID0gMTA7Cit2YXIg
YXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZJbnNlcnRzKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJbnNlcnRzOyArK2kpCisgICAgYXJyYXlbaV0gPSBiYXNlU3RyaW5nICsgaTsKKwor
ZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhl
ZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9uKTsKKyAgICBvcGVuUmVx
dWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2
ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhcnJheXMn
KTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5
aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAg
IHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhcnJheXMnLCAncmVhZHdyaXRlJyku
b2JqZWN0U3RvcmUoJ2FycmF5cycpOworICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29t
cGxldGUgPSBuZXh0U3RlcDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNl
cnRzOyArK2kpCisgICAgICAgIG9iamVjdFN0b3JlLnB1dCgiU29tZSB2YWx1ZSEhISIsIGFycmF5
W2ldKTsKKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFs
dWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU2tpcHBlZCBi
L1BlcmZvcm1hbmNlVGVzdHMvU2tpcHBlZAppbmRleCA0ODNkMTQ4NGFlZjQ3MmQ0ZjcxNTA3ZTli
MjZjNmQ4YzYyYmE2Zjg3Li4zMGZlOTE5ZjJkYTcyZDgzYjVlNDA0ODQ5YzFmMDQxNGZlZDZlYzM2
IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NraXBwZWQKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ta2lwcGVkCkBAIC0xMTQsMTcgKzExNCwxNyBAQCBNZWRpYS8KIE1lZGlhVGltZS8KIAog
IyBCdWdzIDE2NzYyMiwgMTY3NjM3LCAxNjc2MzggYW5kIDE2NzY0MCAtIFNvbWUgSW5kZXhlZERC
IHRlc3QgZGVhZGxvY2sgb24gdGhlIEdUSysgcGVyZiBib3QuCi1bR1RLXSBJbmRleGVkREIvaW5k
ZXgtZ2V0Lmh0bWwKLVtHVEtdIEluZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1s
Ci1bR1RLXSBJbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKLVtHVEtdIEluZGV4ZWRE
Qi9vYmplY3RzdG9yZS1nZXQuaHRtbAorW0dUS10gSW5kZXhlZERCL2Jhc2ljL2luZGV4LWdldC5o
dG1sCitbR1RLXSBJbmRleGVkREIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwK
K1tHVEtdIEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbAorW0dUS10gSW5k
ZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWdldC5odG1sCiAKICMgQnVnIDE2NzYyMyAtIFtHVEtd
W0VGTF0gUGVyZm9ybWFuY2UgdGVzdCBJbmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMt
cmVzcG9uc2l2ZW5lc3MuaHRtbCB0aW1lb3V0cy4KIFtFRkxdIEluZGV4ZWREQi9sYXJnZS1udW1i
ZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy5odG1sCiBbR1RLXSBJbmRleGVkREIvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbAogCiAjIEJ1ZyAxNjc2MTYgLSBQ
ZXJmb3JtYW5jZSB0ZXN0IEluZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sIGNyZWF0ZXMg
YSBEQiBvZiBtb3JlIHRoYW4gNkdCIGFuZCB0YWtlcyBtb3JlIHRoYW4gMTAgbWludXRlcyB0byBy
dW4uCi1bR1RLXSBJbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbAorW0dUS10gSW5kZXhl
ZERCL3N0cmVzcy9sYXJnZS1iaW5hcnkta2V5cy5odG1sCiAKICMgUkVHUkVTU0lPTiAocjI0Mjkx
MT8pOiBIaWdoIFNpZXJyYSBSZWxlYXNlIFdLMiBQZXJmIGJvdCB0aW1pbmcgb3V0IHdoaWxlIHJ1
bm5pbmcgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwKLUluZGV4ZWREQi9s
YXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCitJbmRleGVkREIvc3RyZXNzL2xhcmdlLW51bWJl
ci1vZi1pbnNlcnRzLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376809</attachid>
            <date>2019-08-20 14:43:07 -0700</date>
            <delta_ts>2019-08-20 15:01:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200906-20190820144307.patch</filename>
            <type>text/plain</type>
            <size>78474</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTE3CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRhMjVjZmU0ZDMz
MzhiMjQzNWRiZmRkMGY0NTFkYjY3YzFkNGM0NGUuLjA5YjIwMzRhNjQ2OGU5NTZiMDBiMzk3YmUy
ZjM0MDJkNjA5YTgzNjQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTktMDgt
MjAgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNvbWUg
SURCIHBlcmZvcm1hbmNlIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgdGVzdCBjb3ZlcmFnZSBmb3IgSURCIHBlcmZvcm1hbmNlLCBhbmQg
b3JnYW5pemUgSURCIHRlc3RzIGludG8gdHdvIGNhdGVnb3JpZXMuCisKKyAgICAgICAgKiBJbmRl
eGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9pbmRleC1jb3VudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIv
YmFzaWMvaW5kZXgtY3Vyc29yLWFkdmFuY2UuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhl
ZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJ
bmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRlbGV0ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9pbmRleC1tdWx0aWVudHJ5Lmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY2xlYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNvdW50Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5jZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29y
LWNvbnRpbnVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3Rz
dG9yZS1jdXJzb3ItZGVsZXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNp
Yy9vYmplY3RzdG9yZS1jdXJzb3ItdXBkYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1h
bmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sLgorICAgICAgICAqIElu
ZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sLgorICAgICAgICAqIEluZGV4ZWRE
Qi9iYXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhlZERC
L2Jhc2ljL29iamVjdHN0b3JlLXB1dC5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtZ2V0Lmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1hcnJheS1rZXlzLmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9sYXJnZS1hcnJheS1rZXlzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1iaW5hcnkta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbC4KKyAgICAgICAgKiBJbmRleGVkREIv
c3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0
cy1yZXNwb25zaXZlbmVzcy5odG1sLgorICAgICAgICAqIEluZGV4ZWREQi9zdHJlc3MvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERC
L3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbC4KKyAgICAgICAgKiBTa2lwcGVk
OgorCiAyMDE5LTA4LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWNvdW50LWtleS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBlM2E0
MzYyMmI1NTVjZDEyY2Y2NjU0NjNjMjgxZTQ1Mjg5NDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWNvdW50LWtleS5odG1sCkBAIC0w
LDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0
IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisK
Ky8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBk
YXRhYmFzZU5hbWUgPSAiaW5kZXgtY291bnQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRp
b24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKwor
UGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21J
dGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAg
ZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAg
IGRiID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKwor
ZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVy
YXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7Cisg
ICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQor
eworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7Cisg
ICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRl
SW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJdGVtczsgaSsrKQorICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoIHsgdmFsdWU6
ICd2YWx1ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJl
cXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFy
dFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAg
IHZhciBjb21wbGV0ZWRDb3VudHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgaSsrKQorICAgIHsKKyAgICAgICAgaW5kZXguY291bnQoJ2luZGV4JyArIGkpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5yZXN1bHQgIT0gMSkKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgMSBpdGVtIGZv
ciBrZXkgaW5kZXgiICsgaSk7CisKKyAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZENvdW50cyA9
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH07
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2Jhc2ljL2luZGV4LWNvdW50Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNp
Yy9pbmRleC1jb3VudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkODA4N2NiYzdkNjkzYzUxYzQ5MTE0ODMx
YTkyZmMxY2U3ZTdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9pbmRleC1jb3VudC5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIw
OworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBm
b3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY291
bnQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNz
ID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5l
cmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRv
TWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJ
dGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQ
ZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlv
bigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVw
KCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQo
KTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0
ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnaW5kZXhL
ZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyBpKyspCisg
ICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCggeyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJp
bmRleCIgKyBpIH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0
U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVy
Lm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0
U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgaW5kZXguY291bnQoKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdCAh
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICIgKyBudW1iZXJP
Zkl0ZW1zICsgIml0ZW1zIGJ1dCBnZXQgIiArIGV2ZW50LnRhcmdldC5yZXN1bHQpOworCisgICAg
ICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0
UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1hZHZhbmNlLmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItYWR2YW5jZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1NGIzN2M4ZmNiZDgxNDI5NWEwMTJlZmE1YTVhMmUzOWNmZWE2ZGMKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3It
YWR2YW5jZS5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVy
T2ZJdGVtcyA9IDUwMDA7Citjb25zdCBjdXJzb3JTdGVwID0gMjsKKworLy8gRGVsZXRlIGRhdGFi
YXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJp
bmRleC1jdXJzb3ItYWR2YW5jZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJh
c2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOwor
fQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVz
dFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlv
bkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9
IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0
aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9u
KCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRl
c3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAg
ICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9w
ZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRi
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3Jl
YXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1
ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9u
KCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAgIHZhciBw
b3NpdGlvbiA9IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAg
ICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5hZHZhbmNlKGN1cnNvclN0ZXAp
OworICAgICAgICAgICAgcG9zaXRpb24gKz0gY3Vyc29yU3RlcDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IG51bWJlck9mSXRlbXMpIAorICAgICAgICAgICAg
ICAgIGFsZXJ0KCJFeHBlY3RlZCBjdXJzb3IgdG8gc3RvcCBhZnRlciBwb3NpdGlvbiIgKyBudW1i
ZXJPZkl0ZW1zICsgIiwgYnV0IHN0b3BwZWQgYXQgIiArIHBvc2l0aW9uKTsKKworICAgICAgICAg
ICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYg
KCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAt
IHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVy
YXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItY29udGludWUuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkxZmQwODg2YjcwY2YzNmFhMWZhMzEyNzFlZTU4MDcyNmYzOGRi
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9p
bmRleC1jdXJzb3ItY29udGludWUuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsK
K2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9y
IHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gImluZGV4LWN1cnNv
ci1jb250aW51ZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIg
dGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5w
cmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBu
dW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Cisg
ICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0
SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAg
bmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0
b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3Bl
blJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcs
ICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7
ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1ZScsIGluZGV4
S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVz
dFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScp
Lm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAgIHZhciBwb3NpdGlvbiA9
IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihj
dXJzb3IpIHsKKyAgICAgICAgICAgICsrIHBvc2l0aW9uOworICAgICAgICAgICAgY3Vyc29yLmNv
bnRpbnVlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBu
dW1iZXJPZkl0ZW1zKSAKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yIHRv
IHN0b3AgYWZ0ZXIgcG9zaXRpb24iICsgbnVtYmVyT2ZJdGVtcyArICIsIGJ1dCBzdG9wcGVkIGF0
ICIgKyBwb3NpdGlvbik7CisKKyAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVl
QXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFz
aWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgzNTFmNThlMjBlMTg3MzYwMzJhMDhjYjE5MTYzYmZlYzg0ZmFjZjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJz
b3ItY29udGludWVQcmltYXJ5S2V5Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7
Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZv
ciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJz
b3ItY29udGludWUtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSku
b25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFy
IHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIu
cHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDog
bnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24g
KCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwor
ICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFy
dEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAg
IG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJh
dG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9w
ZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVz
dC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgn
LCAnaW5kZXhLZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCh7IHZhbHVlOiAndmFsdWUnLCBpbmRl
eEtleTogJ2luZGV4VmFsdWUnIH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nl
c3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZU
ZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
Jykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIHByaW1hcnlL
ZXkgPSAwOworICAgIGluZGV4Lm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
aWYoY3Vyc29yKSB7CisgICAgICAgICAgICArKyBwcmltYXJ5S2V5OworICAgICAgICAgICAgY3Vy
c29yLmNvbnRpbnVlUHJpbWFyeUtleSgnaW5kZXhWYWx1ZScsIHByaW1hcnlLZXkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHByaW1hcnlLZXkgPCBudW1iZXJPZkl0ZW1zKSAK
KyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yIHRvIHZpc2l0ICIgKyBudW1i
ZXJPZkl0ZW1zICsgIiBpdGVtcywgb25seSBnb3QgIiArIHByaW1hcnlLZXkpOworCisgICAgICAg
ICAgICBuZXh0U3RlcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBp
ZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygp
IC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0
ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZGNmMmU0ZTZlOThmNDUyZDFjNGJmMjRiMzQ4YTEzMTg1ZjQ2ZDU5
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5k
ZXgtY3Vyc29yLWRlbGV0ZS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29u
c3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhl
IHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY3Vyc29yLWRl
bGV0ZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdl
bmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsK
KworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0
b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisg
ICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAg
ICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBl
cmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9u
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAo
KTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgp
OworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3Qg
PSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFk
ZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtl
eScpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAg
IHlpZWxkOworCisgICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0
aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmpl
Y3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQo
eyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOworCisgICAgdHJh
bnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVw
KCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RS
dW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAn
cmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFy
IGNvbXBsZXRlZERlbGV0ZXMgPSAwOworICAgIGluZGV4Lm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAgICAgICAgICBjdXJzb3IuZGVsZXRlKCku
b25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytjb21w
bGV0ZWREZWxldGVzID09IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgIG5leHRT
dGVwKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVy
Lm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci11cGRhdGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci11cGRhdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NTE4MDIwYjgyNmU1YzgwMjBlMTRiYjJiYzMxODdlMDFjMzJlMjdjCi0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5o
dG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9
IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGlt
ZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY3Vyc29yLXVwZGF0ZS1EQiI7CitpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
KyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2
YXIgZGIgPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5
bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAg
dW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsK
KyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdj
KCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0
R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rp
b24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlv
biAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Bl
bihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
dmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAg
IG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0
U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsK
KyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVs
ZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZh
ciBpbmRleCA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICB2YXIgY29tcGxldGVkVXBkYXRlcyA9IDA7
CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJz
b3IpIHsKKyAgICAgICAgICAgIGN1cnNvci51cGRhdGUoeyB2YWx1ZTogTWF0aC5yYW5kb20oKSwg
aW5kZXhLZXk6IGN1cnNvci5rZXl9KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZFVwZGF0ZXMgPT0gbnVtYmVyT2ZJdGVtcykKKyAg
ICAgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY3Vyc29yLmNvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKwor
ICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIu
bm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0
YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1nZXQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNGJkNjE3NzY4MjNmOTJmZDQxZjM3NzE1OTg0Y2RlMWRhY2RiZTE0Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWwKQEAg
LTAsMCArMSw3NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29u
c3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMTA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsK
KworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFy
IGRhdGFiYXNlTmFtZSA9ICJpbmRleC1nZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRp
b24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKwor
UGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21J
dGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAg
ZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5l
cmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOwor
CitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0
ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sK
KyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigp
Cit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsK
KyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVh
dGVJbmRleCgnaW5kZXgnLCAnaW5kZXhLZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBudW1iZXJPZkl0ZW1zOyBpKyspCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCggeyB0ZXN0
OiAneW8nLCBpbmRleEtleTogImluZGV4IiArIGkgfSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1
ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRU
aW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2Fj
dGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICB2
YXIgY29tcGxldGVkR2V0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0
ZW1zOyBpKyspIHsKKyAgICAgICAgaW5kZXguZ2V0KCdpbmRleCcgKyBpKS5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0LnRl
c3QgIT0gInlvIikKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgJ3lvJywgZ290ICci
ICsgZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0ICsgIiciKTsKKworICAgICAgICAgICAgaWYgKCsr
Y29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVw
KCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0
UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LW11bHRpZW50cnkuaHRtbCBiL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LW11bHRpZW50cnkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NjAxNjMwNjA5Yzk1MjA4OTMwNDI0YWNjNzc5OTFjNWY2YmFkY2U1Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtbXVsdGllbnRyeS5odG1s
CkBAIC0wLDAgKzEsOTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNl
cyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBudW1iZXJEZWxldGVkID0gMDsKK3Zh
ciBkYXRhYmFzZU5hbWVQcmVmaXggPSAiaW5kZXgtbXVsdGllbnRyeS1EQi0iOworZm9yICh2YXIg
aSA9IDA7IGkgPCBudW1iZXJPZkl0ZXJhdGlvbnMgKyAxOyArK2kpIHsKKyAgICByZXEgPSBpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lUHJlZml4ICsgaSk7CisgICAgcmVxLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IG51
bWJlck9mSXRlcmF0aW9ucykKKyAgICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAgfQor
fQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5z
YWN0aW9uID0gbnVsbDsKK3ZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKKworUGVyZlRlc3RSdW5u
ZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3Vu
dDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rp
b24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsK
KyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdj
KCk7CisgICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24g
c3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsK
KyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdl
bmVyYXRvci5uZXh0KCk7Cit9CisKK3ZhciBvYmplY3QgPSB7IHRlc3Q6ICd5bycsIGluZGV4S2V5
czogW10gfTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgaSsrKQorICAgIG9iamVjdC5pbmRl
eEtleXMucHVzaCgnaW5kZXhfbm9fJyArIGkpOworCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkK
K3sKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIg
b3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWVQcmVmaXggKyBjdXJyZW50
SXRlcmF0aW9uKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleXMn
LCB7IG11bHRpRW50cnk6IHRydWUgfSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB0cmFuc2FjdGlvbiA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKTsKKyAgICB0cmFuc2FjdGlvbi5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5wdXQob2JqZWN0LCAxKTsKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0g
bmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9u
KCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworCisgICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQor
ICAgIHsKKyAgICAgICAgaW5kZXguZ2V0KCdpbmRleF9ub18nICsgaSkub25zdWNjZXNzID0gZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0
ICE9ICJ5byIpCisgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICd5bycsIGdvdCAnIiAr
IGV2ZW50LnRhcmdldC5yZXN1bHQudGVzdCArICInIik7CisKKyAgICAgICAgICAgIGlmICgrK2Nv
bXBsZXRlZEdldHMgPT0gMTAwMCkKKyAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAg
ICB9OworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFz
dXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1hZGQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhl
ZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyMTRmYzc4OTFhODhk
ODliZWVmOGYyYzE4ZWViZDk1ODc3OTE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1hZGQuaHRtbApAQCAtMCwwICsxLDg0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJP
Zkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxl
dGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VO
YW1lID0gIm9iamVjdHN0b3JlLWFkZC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0
YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigp
OworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJm
VGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJh
dGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRv
ciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1
bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0
aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAg
IHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sK
KyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAg
IG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVy
ZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGNv
bXBsZXRlZEFkZHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsg
KytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSkub25zdWNjZXNz
ID0gKGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkg
eworICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9IGtleSkKKyAgICAg
ICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICciICsga2V5ICsgIicsIGdvdCAnIiArIGV2
ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOworCisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxl
dGVkQWRkcyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9KShpKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKwor
ICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIu
bm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbGVhciB0aGUg
b2JqZWN0IHN0b3JlIHNvIHdlIGRvbid0IGFkZCBleGlzdGluZyBpdGVtcyBpbiB0aGUgbmV4dCBp
dGVyYXRpb24uCisgICAgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVh
ZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgb2JqZWN0U3RvcmUuY2xlYXIoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3RlcCgpOworICAgIH0K
KworICAgIHlpZWxkOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNsZWFyLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jbGVhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkN2Zh
NmRjYTE0NmZlYzVkZGRlYmYzMzRiYzZkZjEzYzRjMGJmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jbGVhci5odG1sCkBA
IC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Nv
bnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7
CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3Zh
ciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY2xlYXItREIiOworaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3Rh
cnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0g
bnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVU
b01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9m
SXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRl
c3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0K
K30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9
IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVw
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJh
dGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VO
YW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVuUmVx
dWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3RvcmUg
aXRlbXMgZm9yIGNsZWFyLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
JywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsg
KytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSk7CisgICAgfQor
ICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBu
ZXh0U3RlcCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBl
cmZUZXN0UnVubmVyLm5vdygpOworCisgICAgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
c3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgb2JqZWN0U3Rv
cmUuY2xlYXIoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3Rl
cCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFz
dXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jb3VudC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRl
eGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY291bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjZiNGRhMjk0
ZTczMGU3YWVmZDgyNWQ3OWZlMjJjNWQxYTUyNDZiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY291bnQuaHRtbApAQCAtMCww
ICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBu
dW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWNvdW50LURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRl
cmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7
CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3Vz
dG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAor
ICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0
R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9
KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBy
dW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgp
Cit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRp
b24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFt
ZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgi
dmFsdWUiICsgaSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRT
dGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIu
bm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5v
YmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICBvYmplY3RTdG9yZS5jb3VudCgpLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9IG51
bWJlck9mSXRlbXMpCisgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgIiArIG51bWJlck9mSXRl
bXMgKyAiaXRlbXMgYnV0IGdldCAiICsgZXZlbnQudGFyZ2V0LnJlc3VsdCk7CisKKyAgICAgICAg
bmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5u
ZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UuaHRtbCBiL1BlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1hZHZhbmNlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmJhMGU1YTYxODkyM2UzMTJlM2RlOTQxN2UwMjgwMjY3YWJjNTI5YQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLWN1cnNvci1hZHZhbmNlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7
Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKK2NvbnN0IGN1cnNvclN0ZXAgPSAyOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWN1cm9zci1hZHZhbmNlLURCIjsKK2luZGV4ZWREQi5k
ZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAg
IHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBk
YiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7
CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0
OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAg
ICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsK
KyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5l
cmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBu
ZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpy
dW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRh
dGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIg
b2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgICAgIG9iamVjdFN0
b3JlLnB1dCgidmFsdWUiICsgaSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
c3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgZXhwZWN0ZWRLZXkgPSAwOwor
ICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYo
Y3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLmtleSAhPSBleHBlY3RlZEtleSkKKyAg
ICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yLmtleSAnIiArIGV4cGVjdGVkS2V5
ICsgIicsIGdvdCAnIiArIGN1cnNvci5rZXkgKyAiJyIpOworCisgICAgICAgICAgICBleHBlY3Rl
ZEtleSArPSBjdXJzb3JTdGVwOworICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2UoY3Vyc29yU3Rl
cCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1jb250aW51ZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGFiYmU2MTRlZWQ0YThlMTVhMDNkZGIzMjQ2ZmE4ZjVmMGYyNzY4OAotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1
cnNvci1jb250aW51ZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3Qg
bnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRl
c3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyb3Ny
LWNvbnRpbnVlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0
ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51
bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiICsgaSwgaSk7CisgICAg
fQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisK
KyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2Jq
ZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICB2YXIgZXhwZWN0ZWRLZXkgPSAwOworICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3Vy
c29yLmtleSAhPSBleHBlY3RlZEtleSsrKQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3Rl
ZCBjdXJzb3Iua2V5ICciICsgZXhwZWN0ZWRLZXkgKyAiJywgZ290ICciICsgY3Vyc29yLmtleSAr
ICInIik7CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxk
OworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1
bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVv
dXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1j
dXJzb3ItZGVsZXRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmpl
Y3RzdG9yZS1jdXJzb3ItZGVsZXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MjI0MTlkYjE0YmUxNTFm
NjhhNjU3MDIxN2UwNjU2MWUwMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1kZWxldGUuaHRtbApAQCAtMCww
ICsxLDkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBu
dW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWN1cnNvci1kZWxldGUtREIiOworaW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAg
c3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRi
ID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBh
cmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJl
ck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAg
IHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAg
IH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRv
ciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRT
dGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0
ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJh
c2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmpl
Y3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVu
UmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3Rv
cmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24o
J3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9u
Lm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
dGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5hZGQoInZhbHVlIiArIGksIGkpOworCisg
ICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVy
ZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxl
dGVkRGVsZXRlcyA9IDA7CisgICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVz
dWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5kZWxldGUoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBs
ZXRlZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4dFN0
ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLXVwZGF0ZS5odG1sIGIvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLXVwZGF0ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk3ZjgyM2IzM2ZiYjYzNmNkYTY1ODEzZjA2Nzc4MmM2NjNlNzgwM2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9y
ZS1jdXJzb3ItdXBkYXRlLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25z
dCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUg
dGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1jdXJz
b3ItdXBkYXRlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0
ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51
bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiLCBpKTsKKyAgICB9Cisg
ICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAg
IHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgn
c3RvcmUnKTsKKyAgICB2YXIgY29tcGxldGVkVXBkYXRlcyA9IDA7CisgICAgb2JqZWN0U3RvcmUu
b3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBj
dXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAg
ICAgICAgIGN1cnNvci51cGRhdGUoTWF0aC5yYW5kb20oKSkub25zdWNjZXNzID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytjb21wbGV0ZWRVcGRhdGVzID09IG51bWJl
ck9mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBl
cmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLWN1cnNvci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2Jq
ZWN0c3RvcmUtY3Vyc29yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFjNDI0OWYyNTU5NTk5NzkxOWMwMDg1
OTg2NDNiMDUyMjE3Y2IzYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9
IDEwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGlt
ZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyc29yLURCIjsKK2luZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewor
ICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3Zh
ciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKK1BlcmZUZXN0UnVubmVy
LnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6
IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkg
eworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAg
ICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Cisg
ICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJh
dG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4
dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVu
SXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRh
YmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9i
amVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMjUwMDA7ICsraSkgeworICAgICAgICAgICAgdmFyIHN1ZmZpeCA9ICgi
MDAwMDAwMCIgKyBpKS5zbGljZSgtNyk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImJh
cl92YWx1ZV8iICsgc3VmZml4LCAiZm9vX2tleV8iICsgc3VmZml4KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOwor
CisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworICAgIHZhciBjdXJz
b3JSZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyku
b3BlbkN1cnNvcigpOworICAgIHZhciBjdXJzb3JJdGVyYXRpb24gPSAwOworICAgIGN1cnNvclJl
cXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9
IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGlmIChjdXJzb3IpIHsKKyAgICAgICAgICAg
IHZhciBzdWZmaXggPSAoIjAwMDAwMDAiICsgY3Vyc29ySXRlcmF0aW9uKS5zbGljZSgtNyk7Cisg
ICAgICAgICAgICBpZiAoY3Vyc29yLmtleSAhPSAiZm9vX2tleV8iICsgc3VmZml4KQorICAgICAg
ICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3QgdmFsdWUgcmV0cmlldmVkOiAiICsgY3Vyc29yLmtl
eSk7CisgICAgICAgICAgICBpZiAoY3Vyc29yLnZhbHVlICE9ICJiYXJfdmFsdWVfIiArIHN1ZmZp
eCkKKyAgICAgICAgICAgICAgICBhbGVydCgiSW5jb3JyZWN0IHZhbHVlIHJldHJpZXZlZDogIiAr
IGN1cnNvci5rZXkpOworICAgICAgICAgICAgKytjdXJzb3JJdGVyYXRpb247CisgICAgICAgICAg
ICBjdXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXh0U3Rl
cCgpOworICAgIH07CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVh
c3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRl
eGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtZGVsZXRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0lu
ZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjQ1OWE0
Zjk0NTY2MGFlMmZiMzVkMWE0M2FkYmY4MDYxNGY4MmQwCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtZGVsZXRlLmh0bWwKQEAg
LTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29u
c3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsK
KworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFy
IGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1kZWxldGUtREIiOworaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3Rh
cnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0g
bnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVU
b01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9m
SXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRl
c3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0K
K30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9
IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVw
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJh
dGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VO
YW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVuUmVx
dWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3RvcmUg
aXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0
b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9i
amVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVt
czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5hZGQoInZhbHVlIiArIGksIGkpOworCisgICAg
dHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRT
dGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9y
ZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxldGVk
RGVsZXRlcyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kp
IHsKKyAgICAgICAgb2JqZWN0U3RvcmUuZGVsZXRlKGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgICAgICBpZiAoKytjb21wbGV0ZWREZWxldGVzID09IG51bWJlck9mSXRl
bXMpCisgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJm
VGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3Rz
dG9yZS1nZXQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0
b3JlLWdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNzk4YTVmYzY4Zjk3Mjc1OWEyMTM5ZmM3YTA5MmMx
NGNjOTk2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9i
YXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsK
K2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9y
IHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3Jl
LWdldC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdl
bmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsK
KworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0
b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisg
ICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAg
ICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBl
cmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9u
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAo
KTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgp
OworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3Qg
PSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFk
ZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlJyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQor
ICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImluZGV4IiArIGksIGkpOworICAgIH0KKyAgICBv
cGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFy
IHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIG9iamVjdFN0b3Jl
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVt
czsgKytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmdldChpKS5vbnN1Y2Nlc3MgPSAoZnVuY3Rp
b24gKGopIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICAg
ICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9ICgiaW5kZXgiICsgaikpCisgICAgICAg
ICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAnaW5kZXgiICsgaiArICInLCBnb3QgJyIgKyBl
dmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKKworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBs
ZXRlZEdldHMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4dFN0ZXAo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoaSk7CisgICAgfQorCisgICAgeWllbGQ7CisK
KyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLXB1dC5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtcHV0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjZmZjA1ZjU0YWZkMjkwNDY5NDI0N2JkYzlhZDljODFkZWZiMDBlZQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLXB1dC5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVt
YmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3Qg
YWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtcHV0LURCIjsK
K2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVW
YWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9u
cywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIg
PSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RS
dW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQorewor
ICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQor
CitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisK
K2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4
ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0Owor
ICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAg
ICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2
YXIgY29tcGxldGVkUHV0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0
ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KE1hdGgucmFuZG9tKCksIGkpLm9u
c3VjY2VzcyA9IChmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdCAhPSBrZXkp
CisgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAnIiArIGtleSArICInLCBnb3Qg
JyIgKyBldmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKKworICAgICAgICAgICAgICAgIGlmICgr
K2NvbXBsZXRlZFB1dHMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4
dFN0ZXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoaSk7CisgICAgfQorCisgICAgeWll
bGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0
UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGlt
ZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sIGIv
UGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgtZ2V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg5ZTUyNjczYTg1Nzc0YjVkMTdhNTZkYmViYWVmMjZkYzFjZTRlZTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvaW5kZXgtZ2V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSAr
MCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi0vLyBEZWxldGUgZGF0
YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCi12YXIgZGF0YWJhc2VOYW1lID0g
ImluZGV4LWdldC1EQiI7Ci1pbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKLSAgICBzdGFydEl0ZXJhdGlvbigpOwotfQotCi12YXIg
dGVzdEdlbmVyYXRvciA9IG51bGw7Ci12YXIgZGIgPSBudWxsOwotdmFyIHRyYW5zYWN0aW9uID0g
bnVsbDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAg
ICBjdXN0b21JdGVyYXRpb25Db3VudDogMTAsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsKLSAgICAgICAgZGIgPSBu
dWxsOwotICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLSAgICAgICAgUGVyZlRlc3RSdW5u
ZXIuZ2MoKTsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAg
IHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1m
dW5jdGlvbiBuZXh0U3RlcCgpCi17Ci0gICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLXZh
ciBudW1iZXJPZkVudHJpZXMgPSA1MDAwOwotCi1mdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsK
LSAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOwotICAg
IG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAg
IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7Ci0gICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUlu
ZGV4KCdpbmRleCcsICdpbmRleEtleScpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bWJlck9mRW50cmllczsgaSsrKQotICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoIHsgdGVzdDog
J3lvJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOwotICAgIH0KLSAgICBvcGVuUmVxdWVz
dC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAgdmFyIHN0YXJ0VGlt
ZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rp
b24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7Ci0gICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbnRy
aWVzOyBpKyspCi0gICAgewotICAgICAgICBpbmRleC5nZXQoJ2luZGV4JyArIGkpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1
bHQudGVzdCAhPSAieW8iKQotICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAneW8nLCBn
b3QgJyIgKyBldmVudC50YXJnZXQucmVzdWx0LnRlc3QgKyAiJyIpOwotCi0gICAgICAgICAgICBp
ZiAoKytjb21wbGV0ZWRHZXRzID09IG51bWJlck9mRW50cmllcykKLSAgICAgICAgICAgICAgICBu
ZXh0U3RlcCgpOwotICAgICAgICB9OwotICAgIH0KLQotICAgIHlpZWxkOwotCi0gICAgaWYgKCFQ
ZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0
YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRp
b24sIDApOwotfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwgYi9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFhNGYyZWNlOTdhNTY4ODQ4MDk5MmZiOGFmZWZlNzBlMDZkNWEwYTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvaW5kZXgtbXVsdGllbnRyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
OTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFyIGl0ZXJh
dGlvbkNvdW50ID0gMjA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0KLS8vIERlbGV0ZSBhbGwg
ZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlTmFtZVBy
ZWZpeCA9ICJpbmRleC1tdWx0aWVudHJ5LURCLSI7Ci1mb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJh
dGlvbkNvdW50ICsgMTsgKytpKSB7Ci0gICAgcmVxID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZVByZWZpeCArIGkpOwotICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkKLSAgICAg
ICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7Ci0gICAgfQotfQotCi12YXIgdGVzdEdlbmVyYXRvciA9
IG51bGw7Ci12YXIgZGIgPSBudWxsOwotdmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKLXZhciBjdXJy
ZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVl
c0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCi0gICAg
dW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9u
ID0gbnVsbDsKLSAgICAgICAgZGIgPSBudWxsOwotICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVs
bDsKLSAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKLSAgICAgICAgKytjdXJyZW50SXRlcmF0
aW9uOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCi17Ci0gICAgdGVz
dEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOwotICAgIG5leHRTdGVwKCk7Ci19Ci0KLWZ1bmN0
aW9uIG5leHRTdGVwKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKLX0KLQotdmFyIG9i
amVjdCA9IHsgdGVzdDogJ3lvJywgaW5kZXhLZXlzOiBbXSB9OwotZm9yICh2YXIgaSA9IDA7IGkg
PCA1MDAwOyBpKyspCi0gICAgb2JqZWN0LmluZGV4S2V5cy5wdXNoKCdpbmRleF9ub18nICsgaSk7
Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBzdGFydFRpbWUgPSBQZXJm
VGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVu
KGRhdGFiYXNlTmFtZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24pOwotICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJykuY3Jl
YXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5cycsIHsgbXVsdGlFbnRyeTogdHJ1ZSB9KTsKLSAg
ICB9Ci0gICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsK
LQotICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScp
OwotICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dChvYmplY3QsIDEpOwot
ICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0g
ICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3Jl
JykuaW5kZXgoJ2luZGV4Jyk7Ci0KLSAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0gICAgewotICAgICAgICBpbmRleC5nZXQoJ2lu
ZGV4X25vXycgKyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgICAg
IGlmIChldmVudC50YXJnZXQucmVzdWx0LnRlc3QgIT0gInlvIikKLSAgICAgICAgICAgICAgICBh
bGVydCgiRXhwZWN0ZWQgJ3lvJywgZ290ICciICsgZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0ICsg
IiciKTsKLQotICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkR2V0cyA9PSAxMDAwKQotICAgICAg
ICAgICAgICAgIG5leHRTdGVwKCk7Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgeWllbGQ7Ci0K
LSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWFycmF5LWtleXMuaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWFycmF5LWtleXMuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwZTkzY2Q5YThmOTBmMjAyNGNiY2M2NGYyYTYyNTk0
NTVmN2E0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1hcnJheS1rZXlzLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSw5MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0Pgot
Ci12YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKLXZhciBudW1iZXJEZWxldGVkID0gMDsKLQotLy8g
RGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCi12YXIgZGF0
YWJhc2VQcmVmaXggPSAibGFyZ2UtYXJyYXkta2V5cy1EQi0iOwotZm9yICh2YXIgaSA9IDA7IGkg
PCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAgc3RhcnRJ
dGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBk
YiA9IG51bGw7Ci12YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0
ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewot
ICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAg
ICBQZXJmVGVzdFJ1bm5lci5nYygpOwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAg
fQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9y
ID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0
ZXAoKQotewotICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQotCi1mdW5jdGlvbiBjcmVhdGVT
dWJBcnJheShjb3VudCkKLXsKLSAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoY291bnQpOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhcnJheVtpXSA9IGNy
ZWF0ZVN1YkFycmF5KGNvdW50IC0gMSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQot
dmFyIG51bWJlck9mU3ViYXJyYXlzID0gNjsKLXZhciBhcnJheSA9IGNyZWF0ZVN1YkFycmF5KG51
bWJlck9mU3ViYXJyYXlzKTsKLWFycmF5LnB1c2goInZhcmlhbnQiKTsKLQotZnVuY3Rpb24gKnJ1
bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0
YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9uKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7Ci0gICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhcnJheXMnKTsKLSAgICB9Ci0g
ICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAg
IHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhcnJheXMnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUo
J2FycmF5cycpOwotICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0
U3RlcDsKLQotICAgIHZhciBudW1iZXJPZkluc2VydHMgPSAxMDA7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkluc2VydHM7ICsraSkgewotICAgICAgICBhcnJheVtudW1iZXJPZlN1
YmFycmF5c10gPSBpOwotICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBh
cnJheSk7Ci0gICAgfQotCi0gICAgeWllbGQ7Ci0KLSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1l
YXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci0KLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNp
dmVuZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmY2YjVhMTRlZGFl
OGRkMjNjMzAyOTM3MDIwMmMwMWJlMTM1NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtbnVtYmVy
LW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25D
b3VudCA9IDIwOwotdmFyIG51bWJlckRlbGV0ZWQgPSAwOwotCi0vLyBEZWxldGUgYWxsIGRhdGFi
YXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZVByZWZpeCA9ICJs
YXJnZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy1EQi0iOwotZm9yICh2YXIgaSA9
IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVE
YXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAg
c3RhcnRJdGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsK
LXZhciBkYiA9IG51bGw7Ci12YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVu
bmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291
bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24g
KCkgewotICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIGxhcmdlc3REZWxheSA9IDA7Ci0gICAg
ICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwot
ICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0
SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAg
bmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5lcmF0
b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZPYmplY3RzID0gNTAwMDA7Ci12YXIgb2JqZWN0
c1RvSW5zZXJ0ID0gbmV3IEFycmF5KG51bWJlck9mT2JqZWN0cyk7Ci1mb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mT2JqZWN0czsgKytpKSB7Ci0gICAgb2JqZWN0c1RvSW5zZXJ0W2ldID0geyBk
YXRhOiBNYXRoLnJhbmRvbSgpIH07Ci0gICAgb2JqZWN0c1RvSW5zZXJ0W2ldLmlkID0gJ29iamVj
dF8nICsgaTsKLX0KLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5S
ZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9u
KTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewot
ICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAgICAgIGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdvYmplY3RzJywge2tleVBhdGg6ICdpZCd9KTsKLSAgICB9Ci0gICAgb3BlblJlcXVl
c3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdvYmplY3RzJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3Jl
KCdvYmplY3RzJyk7Ci0gICAgb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IG5l
eHRTdGVwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmplY3RzOyArK2kpCi0g
ICAgICAgIG9iamVjdFN0b3JlLnB1dChvYmplY3RzVG9JbnNlcnRbaV0pOwotCi0gICAgUGVyZlRl
c3RSdW5uZXIuc3RhcnRDaGVja2luZ1Jlc3BvbnNpdmVuZXNzKCk7Ci0KLSAgICB5aWVsZDsKLQot
ICAgIFBlcmZUZXN0UnVubmVyLnN0b3BDaGVja2luZ1Jlc3BvbnNpdmVuZXNzKCk7Ci0gICAgCi0g
ICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5s
b25nZXN0UmVzcG9uc2l2ZW5lc3NEZWxheSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0
VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtbnVtYmVy
LW9mLWluc2VydHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLW51bWJl
ci1vZi1pbnNlcnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZGQ3Mjg5
YTRmNjAwOTQ3OTEwYzM0MTU4ODE1ZGY4MzBlZmUyZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
cnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25Db3VudCA9IDIw
OwotdmFyIG51bWJlckRlbGV0ZWQgPSAwOwotCi0vLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3Ig
dGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1udW1i
ZXItb2YtaW5zZXJ0cy1EQi0iOwotZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCAr
IDE7ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCAr
IGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoKytudW1iZXJEZWxldGVk
ID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKLSAgICB9
Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgY3Vy
cmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1
ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAg
IHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAgICAgICBkYiA9IG51bGw7
Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5n
YygpOwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9u
IHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7
Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RH
ZW5lcmF0b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZPYmplY3RzID0gMTAwMDAwOwotdmFy
IG9iamVjdHNUb0luc2VydCA9IG5ldyBBcnJheShudW1iZXJPZk9iamVjdHMpOwotZm9yICh2YXIg
aSA9IDA7IGkgPCBudW1iZXJPZk9iamVjdHM7ICsraSkgewotICAgIG9iamVjdHNUb0luc2VydFtp
XSA9IHsgZGF0YTogTWF0aC5yYW5kb20oKSB9OwotICAgIG9iamVjdHNUb0luc2VydFtpXS5pZCA9
ICdvYmplY3RfJyArIGk7Ci19Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZh
ciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0
ZXJhdGlvbik7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZl
bnQpIHsKLSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICBkYi5jcmVh
dGVPYmplY3RTdG9yZSgnb2JqZWN0cycsIHtrZXlQYXRoOiAnaWQnfSk7Ci0gICAgfQotICAgIG9w
ZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2YXIg
c3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7Ci0KLSAgICB2YXIgb2JqZWN0U3RvcmUg
PSBkYi50cmFuc2FjdGlvbignb2JqZWN0cycsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnb2Jq
ZWN0cycpOwotICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3Rl
cDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKQotICAgICAg
ICBvYmplY3RTdG9yZS5wdXQob2JqZWN0c1RvSW5zZXJ0W2ldKTsKLQotICAgIHlpZWxkOwotCi0g
ICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5u
b3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVvdXQoc3Rh
cnRJdGVyYXRpb24sIDApOwotfQotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNWRiOTNlMWZlYzEwNzAzNmQxMTdjMjUzMmNi
ZDhiYmVhZGY1YzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJv
ZHk+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0PgotCi12YXIgaXRlcmF0aW9uQ291bnQgPSAxMDsKLXZhciBudW1iZXJEZWxldGVkID0gMDsK
LS8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFy
IGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1jdXJzb3ItREIiOwotaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgc3Rh
cnRJdGVyYXRpb24oKTsKLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotdmFyIGRiID0g
bnVsbDsKLXZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFy
ZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0
aW9uQ291bnQsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGRiID0gbnVsbDsKLSAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBl
cmZUZXN0UnVubmVyLmdjKCk7Ci0gICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKLSAgICB9Ci19
KTsKLQotZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAgIHRlc3RHZW5lcmF0b3IgPSBy
dW5JdGVyYXRpb24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1mdW5jdGlvbiBuZXh0U3RlcCgp
Ci17Ci0gICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRp
b24oKQotewotICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFt
ZSk7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsK
LSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAyNTAwMDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgc3VmZml4ID0gKCIwMDAwMDAw
IiArIGkpLnNsaWNlKC03KTsKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgiYmFyX3ZhbHVl
XyIgKyBzdWZmaXgsICJmb29fa2V5XyIgKyBzdWZmaXgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2
YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7Ci0gICAgdmFyIGN1cnNvclJlcXVl
c3QgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5vcGVuQ3Vy
c29yKCk7Ci0gICAgdmFyIGN1cnNvckl0ZXJhdGlvbiA9IDA7Ci0gICAgY3Vyc29yUmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgaWYgKGN1cnNvcikgewotICAgICAgICAgICAgdmFyIHN1
ZmZpeCA9ICgiMDAwMDAwMCIgKyBjdXJzb3JJdGVyYXRpb24pLnNsaWNlKC03KTsKLSAgICAgICAg
ICAgIGlmIChjdXJzb3Iua2V5ICE9ICJmb29fa2V5XyIgKyBzdWZmaXgpCi0gICAgICAgICAgICAg
ICAgYWxlcnQoIkluY29ycmVjdCB2YWx1ZSByZXRyaWV2ZWQ6ICIgKyBjdXJzb3Iua2V5KTsKLSAg
ICAgICAgICAgIGlmIChjdXJzb3IudmFsdWUgIT0gImJhcl92YWx1ZV8iICsgc3VmZml4KQotICAg
ICAgICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3QgdmFsdWUgcmV0cmlldmVkOiAiICsgY3Vyc29y
LmtleSk7Ci0gICAgICAgICAgICArK2N1cnNvckl0ZXJhdGlvbjsKLSAgICAgICAgICAgIGN1cnNv
ci5jb250aW51ZSgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5leHRTdGVwKCk7Ci0g
ICAgfTsKLQotICAgIHlpZWxkOwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFs
dWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwotfQotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9v
YmplY3RzdG9yZS1nZXQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0
b3JlLWdldC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRjOGFjMjMyNzAx
YWUxMjE2YmM3YzBjMjY4ODBmNjk3NjU2MzIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3Jl
LWdldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwv
c2NyaXB0PgotPHNjcmlwdD4KLQotLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBh
aGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1nZXQtREIiOwot
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rp
b24oKSB7Ci0gICAgc3RhcnRJdGVyYXRpb24oKTsKLX0KLQotdmFyIHRlc3RHZW5lcmF0b3IgPSBu
dWxsOwotdmFyIGRiID0gbnVsbDsKLXZhciB0cmFuc2FjdGlvbiA9IG51bGw7Ci0KLVBlcmZUZXN0
UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9u
Q291bnQ6IDIwLAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAg
ICAgICB0cmFuc2FjdGlvbiA9IG51bGw7Ci0gICAgICAgIGRiID0gbnVsbDsKLSAgICAgICAgdGVz
dEdlbmVyYXRvciA9IG51bGw7Ci0gICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7Ci0gICAgfQot
fSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0g
cnVuSXRlcmF0aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAo
KQotewotICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZFbnRyaWVz
ID0gNTAwMDsKLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5SZXF1
ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVw
Z3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQ7Ci0gICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdzdG9yZScpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50cmllczsg
KytpKQotICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImluZGV4IiArIGksIGkpOwotICAgIH0K
LSAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0g
ICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFyIG9iamVj
dFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7Ci0g
ICAgdmFyIGNvbXBsZXRlZEdldHMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZFbnRyaWVzOyArK2kpCi0gICAgewotICAgICAgICAKLSAgICAgICAgb2JqZWN0U3RvcmUuZ2V0
KGkpLm9uc3VjY2VzcyA9IChmdW5jdGlvbiAoaikgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgIT0g
KCJpbmRleCIgKyBqKSkKLSAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICdpbmRl
eCIgKyBqICsgIicsIGdvdCAnIiArIGV2ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkVudHJpZXMpCi0gICAg
ICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pKGkp
OwotICAgIH0KLQotICAgIHlpZWxkOwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJl
VmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwotfQotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWRE
Qi9zdHJlc3MvbGFyZ2UtYXJyYXkta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVk
REIvc3RyZXNzL2xhcmdlLWFycmF5LWtleXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGIwZDNmOTMxOWVk
ZWJiZTI3YzdiMWVlMzllM2E0ODU1ZDg5ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWFycmF5LWtleXMuaHRtbApAQCAtMCwwICsx
LDkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgaXRlcmF0
aW9uQ291bnQgPSAyMDsKK3ZhciBudW1iZXJEZWxldGVkID0gMDsKKworLy8gRGVsZXRlIGFsbCBk
YXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VQcmVmaXgg
PSAibGFyZ2UtYXJyYXkta2V5cy1EQi0iOworZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25D
b3VudCArIDE7ICsraSkgeworICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVBy
ZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJE
ZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsK
KyAgICB9Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2
YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1
cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50
LAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9
IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1
bm5lci5nYygpOworICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1
bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0
aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAg
IHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdWJBcnJheShjb3Vu
dCkKK3sKKyAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoY291bnQpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhcnJheVtpXSA9IGNyZWF0ZVN1YkFycmF5
KGNvdW50IC0gMSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwordmFyIG51bWJlck9m
U3ViYXJyYXlzID0gNjsKK3ZhciBhcnJheSA9IGNyZWF0ZVN1YkFycmF5KG51bWJlck9mU3ViYXJy
YXlzKTsKK2FycmF5LnB1c2goInZhcmlhbnQiKTsKKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigp
Cit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXgg
KyBjdXJyZW50SXRlcmF0aW9uKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
ICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICB9CisgICAgb3BlblJlcXVl
c3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRp
bWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRy
YW5zYWN0aW9uKCdhcnJheXMnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ2FycmF5cycpOwor
ICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKKworICAg
IHZhciBudW1iZXJPZkluc2VydHMgPSAxMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1i
ZXJPZkluc2VydHM7ICsraSkgeworICAgICAgICBhcnJheVtudW1iZXJPZlN1YmFycmF5c10gPSBp
OworICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBhcnJheSk7CisgICAg
fQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFz
eW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3Ry
ZXNzL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9z
dHJlc3MvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjIwNzE3OTQxNmYxYzM4
ZTU0M2ViYmI5MDg2M2RkOTYxNmNmMjJhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwKQEAgLTAsMCArMSw4
NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIGl0ZXJhdGlv
bkNvdW50ID0gMjA7Cit2YXIgbnVtYmVyRGVsZXRlZCA9IDA7CisKKy8vIERlbGV0ZSBhbGwgZGF0
YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlUHJlZml4ID0g
ImxhcmdlLXN0cmluZy1rZXlzLURCLSI7Citmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNv
dW50ICsgMTsgKytpKSB7CisgICAgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlUHJl
Zml4ICsgaSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgrK251bWJlckRl
bGV0ZWQgPT0gaXRlcmF0aW9uQ291bnQpCisgICAgICAgICAgICBzdGFydEl0ZXJhdGlvbigpOwor
ICAgIH0KK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3Zh
ciBjdXJyZW50SXRlcmF0aW9uID0gMDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3Vy
ZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQs
CisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0g
bnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVu
bmVyLmdjKCk7CisgICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKKyAgICB9Cit9KTsKKworZnVu
Y3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRp
b24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAg
dGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK3ZhciBiYXNlU3RyaW5nOworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICBiYXNlU3RyaW5nICs9ICJhYmNkZWZnaGlqa2xtbm9w
cXJzdHV2d3h5eiI7CisKK3ZhciBudW1iZXJPZkluc2VydHMgPSA1MDsKK3ZhciBhcnJheSA9IG5l
dyBBcnJheShudW1iZXJPZkluc2VydHMpOworZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZklu
c2VydHM7ICsraSkgeworICAgIGFycmF5W2ldID0gbmV3IEFycmF5QnVmZmVyKDIwOTcxNTIpOwor
ICAgIHZhciB2aWV3ID0gbmV3IEludDMyQXJyYXkoYXJyYXlbaV0pOworICAgIHZpZXdbdmlldy5s
ZW5ndGggLSAxXSA9IGk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZh
ciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0
ZXJhdGlvbik7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVh
dGVPYmplY3RTdG9yZSgnYXJyYXlzJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
YXJyYXlzJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICBvYmplY3RT
dG9yZS50cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gbmV4dFN0ZXA7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mSW5zZXJ0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQo
IlNvbWUgdmFsdWUhISEiLCBhcnJheVtpXSk7CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVy
ZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFy
dFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9u
LCAwKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVz
cG9uc2l2ZW5lc3MuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJn
ZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNWFj
Mzc0YjczNDIxNTdmMjU3MjdiZDM3ODRmNDRjZTI4YTIzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMt
cmVzcG9uc2l2ZW5lc3MuaHRtbApAQCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKK3ZhciBudW1iZXJE
ZWxldGVkID0gMDsKKworLy8gRGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFk
IG9mIHRpbWUuCit2YXIgZGF0YWJhc2VQcmVmaXggPSAibGFyZ2UtbnVtYmVyLW9mLWluc2VydHMt
cmVzcG9uc2l2ZW5lc3MtREItIjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQg
KyAxOyArK2kpIHsKKyAgICBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VQcmVmaXgg
KyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRl
ZCA9PSBpdGVyYXRpb25Db3VudCkKKyAgICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAg
fQorfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIGN1
cnJlbnRJdGVyYXRpb24gPSAwOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFs
dWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBpdGVyYXRpb25Db3VudCwKKyAg
ICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxs
OworICAgICAgICBsYXJnZXN0RGVsYXkgPSAwOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVs
bDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICAgICAgKytjdXJyZW50SXRlcmF0
aW9uOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVz
dEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0
aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwordmFyIG51
bWJlck9mT2JqZWN0cyA9IDUwMDAwOwordmFyIG9iamVjdHNUb0luc2VydCA9IG5ldyBBcnJheShu
dW1iZXJPZk9iamVjdHMpOworZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9iamVjdHM7ICsr
aSkgeworICAgIG9iamVjdHNUb0luc2VydFtpXSA9IHsgZGF0YTogTWF0aC5yYW5kb20oKSB9Owor
ICAgIG9iamVjdHNUb0luc2VydFtpXS5pZCA9ICdvYmplY3RfJyArIGk7Cit9CisKK2Z1bmN0aW9u
ICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVu
KGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7CisgICAgb3BlblJlcXVlc3Qub251
cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJn
ZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnb2JqZWN0cycsIHtrZXlQ
YXRoOiAnaWQnfSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVw
OworCisgICAgeWllbGQ7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
b2JqZWN0cycsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnb2JqZWN0cycpOworICAgIG9iamVj
dFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQo
b2JqZWN0c1RvSW5zZXJ0W2ldKTsKKworICAgIFBlcmZUZXN0UnVubmVyLnN0YXJ0Q2hlY2tpbmdS
ZXNwb25zaXZlbmVzcygpOworCisgICAgeWllbGQ7CisKKyAgICBQZXJmVGVzdFJ1bm5lci5zdG9w
Q2hlY2tpbmdSZXNwb25zaXZlbmVzcygpOworICAgIAorICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubG9uZ2VzdFJlc3BvbnNpdmVuZXNzRGVs
YXkoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24s
IDApOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNl
cnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY2NmY4MDUxOTkzMDM5MmNjMmYwODBlZjQxNzAxOWY5ZDU4
N2MzZAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVz
cy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9IDIwOwor
dmFyIG51bWJlckRlbGV0ZWQgPSAwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhl
IHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1udW1iZXIt
b2YtaW5zZXJ0cy1EQi0iOworZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7
ICsraSkgeworICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09
IGl0ZXJhdGlvbkNvdW50KQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKKyAgICB9Cit9
CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgY3VycmVu
dEl0ZXJhdGlvbiA9IDA7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNB
c3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAorICAgIHVu
aXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7Cisg
ICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygp
OworICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0
YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Cisg
ICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5l
cmF0b3IubmV4dCgpOworfQorCit2YXIgbnVtYmVyT2ZPYmplY3RzID0gMTAwMDAwOwordmFyIG9i
amVjdHNUb0luc2VydCA9IG5ldyBBcnJheShudW1iZXJPZk9iamVjdHMpOworZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZk9iamVjdHM7ICsraSkgeworICAgIG9iamVjdHNUb0luc2VydFtpXSA9
IHsgZGF0YTogTWF0aC5yYW5kb20oKSB9OworICAgIG9iamVjdHNUb0luc2VydFtpXS5pZCA9ICdv
YmplY3RfJyArIGk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBv
cGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJh
dGlvbik7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnb2JqZWN0cycsIHtrZXlQYXRoOiAnaWQnfSk7CisgICAgfQorICAgIG9wZW5S
ZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3Rh
cnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBk
Yi50cmFuc2FjdGlvbignb2JqZWN0cycsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnb2JqZWN0
cycpOworICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKQorICAgICAgICBv
YmplY3RTdG9yZS5wdXQob2JqZWN0c1RvSW5zZXJ0W2ldKTsKKworICAgIHlpZWxkOworCisgICAg
aWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3co
KSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJ
dGVyYXRpb24sIDApOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLXN0cmluZy1rZXlz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmUzMTEyMDZhODY1OGQ3ODM3MGYwZTZjMjkzMGQ4ZDhjMzIxMGEz
MAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9s
YXJnZS1zdHJpbmcta2V5cy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9IDIwOwordmFyIG51bWJl
ckRlbGV0ZWQgPSAwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhl
YWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1zdHJpbmcta2V5cy1EQi0i
OworZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgeworICAgIGlu
ZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50
KQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKKyAgICB9Cit9CisKK3ZhciB0ZXN0R2Vu
ZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7
CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3Vz
dG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisgICAg
ZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5l
cmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICArK2N1
cnJlbnRJdGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkK
K3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsK
K30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwor
fQorCit2YXIgYmFzZVN0cmluZzsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisg
ICAgYmFzZVN0cmluZyArPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCit2YXIgbnVt
YmVyT2ZJbnNlcnRzID0gMTA7Cit2YXIgYXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZJbnNlcnRz
KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpCisgICAgYXJyYXlb
aV0gPSBiYXNlU3RyaW5nICsgaTsKKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAg
dmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50
SXRlcmF0aW9uKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNj
ZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJm
VGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9u
KCdhcnJheXMnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ2FycmF5cycpOworICAgIG9iamVj
dFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpCisgICAgICAgIG9iamVjdFN0b3JlLnB1
dCgiU29tZSB2YWx1ZSEhISIsIGFycmF5W2ldKTsKKworICAgIHlpZWxkOworCisgICAgaWYgKCFQ
ZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0
YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRp
b24sIDApOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU2tpcHBlZCBiL1BlcmZvcm1hbmNlVGVzdHMvU2tpcHBlZAppbmRleCA0
ODNkMTQ4NGFlZjQ3MmQ0ZjcxNTA3ZTliMjZjNmQ4YzYyYmE2Zjg3Li4zMGZlOTE5ZjJkYTcyZDgz
YjVlNDA0ODQ5YzFmMDQxNGZlZDZlYzM2IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1Nr
aXBwZWQKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ta2lwcGVkCkBAIC0xMTQsMTcgKzExNCwxNyBA
QCBNZWRpYS8KIE1lZGlhVGltZS8KIAogIyBCdWdzIDE2NzYyMiwgMTY3NjM3LCAxNjc2MzggYW5k
IDE2NzY0MCAtIFNvbWUgSW5kZXhlZERCIHRlc3QgZGVhZGxvY2sgb24gdGhlIEdUSysgcGVyZiBi
b3QuCi1bR1RLXSBJbmRleGVkREIvaW5kZXgtZ2V0Lmh0bWwKLVtHVEtdIEluZGV4ZWREQi9sYXJn
ZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCi1bR1RLXSBJbmRleGVkREIvb2JqZWN0c3RvcmUtY3Vy
c29yLmh0bWwKLVtHVEtdIEluZGV4ZWREQi9vYmplY3RzdG9yZS1nZXQuaHRtbAorW0dUS10gSW5k
ZXhlZERCL2Jhc2ljL2luZGV4LWdldC5odG1sCitbR1RLXSBJbmRleGVkREIvc3RyZXNzL2xhcmdl
LW51bWJlci1vZi1pbnNlcnRzLmh0bWwKK1tHVEtdIEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9y
ZS1jdXJzb3IuaHRtbAorW0dUS10gSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWdldC5odG1s
CiAKICMgQnVnIDE2NzYyMyAtIFtHVEtdW0VGTF0gUGVyZm9ybWFuY2UgdGVzdCBJbmRleGVkREIv
bGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbCB0aW1lb3V0cy4KIFtF
RkxdIEluZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy5odG1s
CiBbR1RLXSBJbmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3Mu
aHRtbAogCiAjIEJ1ZyAxNjc2MTYgLSBQZXJmb3JtYW5jZSB0ZXN0IEluZGV4ZWREQi9sYXJnZS1i
aW5hcnkta2V5cy5odG1sIGNyZWF0ZXMgYSBEQiBvZiBtb3JlIHRoYW4gNkdCIGFuZCB0YWtlcyBt
b3JlIHRoYW4gMTAgbWludXRlcyB0byBydW4uCi1bR1RLXSBJbmRleGVkREIvbGFyZ2UtYmluYXJ5
LWtleXMuaHRtbAorW0dUS10gSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1iaW5hcnkta2V5cy5odG1s
CiAKICMgUkVHUkVTU0lPTiAocjI0MjkxMT8pOiBIaWdoIFNpZXJyYSBSZWxlYXNlIFdLMiBQZXJm
IGJvdCB0aW1pbmcgb3V0IHdoaWxlIHJ1bm5pbmcgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1p
bnNlcnRzLmh0bWwKLUluZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCitJbmRl
eGVkREIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376813</attachid>
            <date>2019-08-20 15:01:10 -0700</date>
            <delta_ts>2019-08-21 10:21:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200906-20190820150109.patch</filename>
            <type>text/plain</type>
            <size>83071</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTE3CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRhMjVjZmU0ZDMz
MzhiMjQzNWRiZmRkMGY0NTFkYjY3YzFkNGM0NGUuLjA5YjIwMzRhNjQ2OGU5NTZiMDBiMzk3YmUy
ZjM0MDJkNjA5YTgzNjQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTktMDgt
MjAgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNvbWUg
SURCIHBlcmZvcm1hbmNlIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgdGVzdCBjb3ZlcmFnZSBmb3IgSURCIHBlcmZvcm1hbmNlLCBhbmQg
b3JnYW5pemUgSURCIHRlc3RzIGludG8gdHdvIGNhdGVnb3JpZXMuCisKKyAgICAgICAgKiBJbmRl
eGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9pbmRleC1jb3VudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIv
YmFzaWMvaW5kZXgtY3Vyc29yLWFkdmFuY2UuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhl
ZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBJ
bmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRlbGV0ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9pbmRleC1tdWx0aWVudHJ5Lmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY2xlYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNvdW50Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3ItYWR2YW5jZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29y
LWNvbnRpbnVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9vYmplY3Rz
dG9yZS1jdXJzb3ItZGVsZXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4ZWREQi9iYXNp
Yy9vYmplY3RzdG9yZS1jdXJzb3ItdXBkYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEluZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1h
bmNlVGVzdHMvSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sLgorICAgICAgICAqIElu
ZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sLgorICAgICAgICAqIEluZGV4ZWRE
Qi9iYXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogSW5kZXhlZERC
L2Jhc2ljL29iamVjdHN0b3JlLXB1dC5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtZ2V0Lmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1hcnJheS1rZXlzLmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9sYXJnZS1hcnJheS1rZXlzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1iaW5hcnkta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbC4KKyAgICAgICAgKiBJbmRleGVkREIv
c3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWw6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0
cy1yZXNwb25zaXZlbmVzcy5odG1sLgorICAgICAgICAqIEluZGV4ZWREQi9zdHJlc3MvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwuCisgICAgICAgICogSW5kZXhlZERC
L3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbC4KKyAgICAgICAgKiBTa2lwcGVk
OgorCiAyMDE5LTA4LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWNvdW50LWtleS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY291bnQta2V5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBlM2E0
MzYyMmI1NTVjZDEyY2Y2NjU0NjNjMjgxZTQ1Mjg5NDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWNvdW50LWtleS5odG1sCkBAIC0w
LDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0
IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisK
Ky8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBk
YXRhYmFzZU5hbWUgPSAiaW5kZXgtY291bnQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRp
b24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKwor
UGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21J
dGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAg
ZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAg
IGRiID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKwor
ZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVy
YXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7Cisg
ICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQor
eworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7Cisg
ICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRl
SW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJdGVtczsgaSsrKQorICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoIHsgdmFsdWU6
ICd2YWx1ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJl
cXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFy
dFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAg
IHZhciBjb21wbGV0ZWRDb3VudHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgaSsrKQorICAgIHsKKyAgICAgICAgaW5kZXguY291bnQoJ2luZGV4JyArIGkpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5yZXN1bHQgIT0gMSkKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgMSBpdGVtIGZv
ciBrZXkgaW5kZXgiICsgaSk7CisKKyAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZENvdW50cyA9
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH07
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2Jhc2ljL2luZGV4LWNvdW50Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNp
Yy9pbmRleC1jb3VudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkODA4N2NiYzdkNjkzYzUxYzQ5MTE0ODMx
YTkyZmMxY2U3ZTdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9pbmRleC1jb3VudC5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIw
OworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBm
b3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY291
bnQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNz
ID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5l
cmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRv
TWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJ
dGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQ
ZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlv
bigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVw
KCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQo
KTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0
ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnaW5kZXhL
ZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyBpKyspCisg
ICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCggeyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJp
bmRleCIgKyBpIH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0
U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVy
Lm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0
U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgaW5kZXguY291bnQoKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdCAh
PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICIgKyBudW1iZXJP
Zkl0ZW1zICsgIml0ZW1zIGJ1dCBnZXQgIiArIGV2ZW50LnRhcmdldC5yZXN1bHQpOworCisgICAg
ICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0
UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1hZHZhbmNlLmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItYWR2YW5jZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1NGIzN2M4ZmNiZDgxNDI5NWEwMTJlZmE1YTVhMmUzOWNmZWE2ZGMKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3It
YWR2YW5jZS5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVy
T2ZJdGVtcyA9IDUwMDA7Citjb25zdCBjdXJzb3JTdGVwID0gMjsKKworLy8gRGVsZXRlIGRhdGFi
YXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJp
bmRleC1jdXJzb3ItYWR2YW5jZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJh
c2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOwor
fQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVz
dFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlv
bkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9
IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0
aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9u
KCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRl
c3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAg
ICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9w
ZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRi
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3Jl
YXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1
ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9u
KCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAgIHZhciBw
b3NpdGlvbiA9IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAg
ICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5hZHZhbmNlKGN1cnNvclN0ZXAp
OworICAgICAgICAgICAgcG9zaXRpb24gKz0gY3Vyc29yU3RlcDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IG51bWJlck9mSXRlbXMpIAorICAgICAgICAgICAg
ICAgIGFsZXJ0KCJFeHBlY3RlZCBjdXJzb3IgdG8gc3RvcCBhZnRlciBwb3NpdGlvbiIgKyBudW1i
ZXJPZkl0ZW1zICsgIiwgYnV0IHN0b3BwZWQgYXQgIiArIHBvc2l0aW9uKTsKKworICAgICAgICAg
ICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYg
KCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAt
IHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVy
YXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItY29udGludWUuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1jb250aW51
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkxZmQwODg2YjcwY2YzNmFhMWZhMzEyNzFlZTU4MDcyNmYzOGRi
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9p
bmRleC1jdXJzb3ItY29udGludWUuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsK
K2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9y
IHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gImluZGV4LWN1cnNv
ci1jb250aW51ZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIg
dGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5w
cmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBu
dW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7Cisg
ICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0
SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAg
bmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0
b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3Bl
blJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcs
ICdpbmRleEtleScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7
ICsraSkKKyAgICAgICAgICAgb2JqZWN0U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1ZScsIGluZGV4
S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVz
dFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScp
Lm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworICAgIHZhciBwb3NpdGlvbiA9
IDA7CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihj
dXJzb3IpIHsKKyAgICAgICAgICAgICsrIHBvc2l0aW9uOworICAgICAgICAgICAgY3Vyc29yLmNv
bnRpbnVlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBu
dW1iZXJPZkl0ZW1zKSAKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yIHRv
IHN0b3AgYWZ0ZXIgcG9zaXRpb24iICsgbnVtYmVyT2ZJdGVtcyArICIsIGJ1dCBzdG9wcGVkIGF0
ICIgKyBwb3NpdGlvbik7CisKKyAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVl
QXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFz
aWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWNvbnRpbnVlUHJpbWFyeUtleS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgzNTFmNThlMjBlMTg3MzYwMzJhMDhjYjE5MTYzYmZlYzg0ZmFjZjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJz
b3ItY29udGludWVQcmltYXJ5S2V5Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7
Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZv
ciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJz
b3ItY29udGludWUtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSku
b25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFy
IHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIu
cHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDog
bnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24g
KCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwor
ICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFy
dEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAg
IG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJh
dG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9w
ZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVz
dC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgn
LCAnaW5kZXhLZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCh7IHZhbHVlOiAndmFsdWUnLCBpbmRl
eEtleTogJ2luZGV4VmFsdWUnIH0sIGkpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nl
c3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZU
ZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
Jykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIHByaW1hcnlL
ZXkgPSAwOworICAgIGluZGV4Lm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
aWYoY3Vyc29yKSB7CisgICAgICAgICAgICArKyBwcmltYXJ5S2V5OworICAgICAgICAgICAgY3Vy
c29yLmNvbnRpbnVlUHJpbWFyeUtleSgnaW5kZXhWYWx1ZScsIHByaW1hcnlLZXkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHByaW1hcnlLZXkgPCBudW1iZXJPZkl0ZW1zKSAK
KyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yIHRvIHZpc2l0ICIgKyBudW1i
ZXJPZkl0ZW1zICsgIiBpdGVtcywgb25seSBnb3QgIiArIHByaW1hcnlLZXkpOworCisgICAgICAg
ICAgICBuZXh0U3RlcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBp
ZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygp
IC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0
ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZGNmMmU0ZTZlOThmNDUyZDFjNGJmMjRiMzQ4YTEzMTg1ZjQ2ZDU5
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5k
ZXgtY3Vyc29yLWRlbGV0ZS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29u
c3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhl
IHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY3Vyc29yLWRl
bGV0ZS1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdl
bmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsK
KworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0
b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisg
ICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAg
ICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBl
cmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9u
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAo
KTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgp
OworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3Qg
PSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFk
ZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlJyk7CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtl
eScpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAg
IHlpZWxkOworCisgICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0
aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmpl
Y3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQo
eyB2YWx1ZTogJ3ZhbHVlJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOworCisgICAgdHJh
bnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVw
KCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RS
dW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAn
cmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFy
IGNvbXBsZXRlZERlbGV0ZXMgPSAwOworICAgIGluZGV4Lm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAgICAgICAgICBjdXJzb3IuZGVsZXRlKCku
b25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytjb21w
bGV0ZWREZWxldGVzID09IG51bWJlck9mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgIG5leHRT
dGVwKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVy
Lm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci11cGRhdGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci11cGRhdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MTEwNDNmNTllYjVhNGRhNmVkMTczMWFmNzY2NDhmZTU2ZTdhNzU5Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLXVwZGF0ZS5o
dG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDEwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9
IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGlt
ZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAiaW5kZXgtY3Vyc29yLXVwZGF0ZS1EQiI7CitpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
KyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2
YXIgZGIgPSBudWxsOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5
bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAg
dW5pdDogJ21zJywKKyAgICBkb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsK
KyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdj
KCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0
R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rp
b24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlv
biAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Bl
bihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
dmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAg
IG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkKKyAgICAgICAgICAgb2JqZWN0
U3RvcmUucHV0KHsgdmFsdWU6ICd2YWx1ZScsIGluZGV4S2V5OiAiaW5kZXgiICsgaSB9LCBpKTsK
KyAgICB9CisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVs
ZDsKKworICAgIHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZh
ciBpbmRleCA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICB2YXIgY29tcGxldGVkVXBkYXRlcyA9IDA7
CisgICAgaW5kZXgub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJz
b3IpIHsKKyAgICAgICAgICAgIGN1cnNvci51cGRhdGUoeyB2YWx1ZTogTWF0aC5yYW5kb20oKSwg
aW5kZXhLZXk6IGN1cnNvci5rZXl9KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZFVwZGF0ZXMgPT0gbnVtYmVyT2ZJdGVtcykKKyAg
ICAgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY3Vyc29yLmNvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKwor
ICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIu
bm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0
YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1nZXQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNGJkNjE3NzY4MjNmOTJmZDQxZjM3NzE1OTg0Y2RlMWRhY2RiZTE0Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtZ2V0Lmh0bWwKQEAg
LTAsMCArMSw3NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29u
c3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMTA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsK
KworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFy
IGRhdGFiYXNlTmFtZSA9ICJpbmRleC1nZXQtREIiOworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRp
b24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKKwor
UGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21J
dGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAg
ZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5l
cmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0KK30pOwor
CitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0
ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sK
KyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigp
Cit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsK
KyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RTdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgICAgICBvYmplY3RTdG9yZS5jcmVh
dGVJbmRleCgnaW5kZXgnLCAnaW5kZXhLZXknKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBudW1iZXJPZkl0ZW1zOyBpKyspCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCggeyB0ZXN0
OiAneW8nLCBpbmRleEtleTogImluZGV4IiArIGkgfSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1
ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRU
aW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXggPSBkYi50cmFuc2Fj
dGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKTsKKyAgICB2
YXIgY29tcGxldGVkR2V0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0
ZW1zOyBpKyspIHsKKyAgICAgICAgaW5kZXguZ2V0KCdpbmRleCcgKyBpKS5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0LnRl
c3QgIT0gInlvIikKKyAgICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgJ3lvJywgZ290ICci
ICsgZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0ICsgIiciKTsKKworICAgICAgICAgICAgaWYgKCsr
Y29tcGxldGVkR2V0cyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgIG5leHRTdGVw
KCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0
UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LW11bHRpZW50cnkuaHRtbCBiL1BlcmZvcm1hbmNl
VGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LW11bHRpZW50cnkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NjAxNjMwNjA5Yzk1MjA4OTMwNDI0YWNjNzc5OTFjNWY2YmFkY2U1Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtbXVsdGllbnRyeS5odG1s
CkBAIC0wLDAgKzEsOTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNl
cyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3ZhciBudW1iZXJEZWxldGVkID0gMDsKK3Zh
ciBkYXRhYmFzZU5hbWVQcmVmaXggPSAiaW5kZXgtbXVsdGllbnRyeS1EQi0iOworZm9yICh2YXIg
aSA9IDA7IGkgPCBudW1iZXJPZkl0ZXJhdGlvbnMgKyAxOyArK2kpIHsKKyAgICByZXEgPSBpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lUHJlZml4ICsgaSk7CisgICAgcmVxLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IG51
bWJlck9mSXRlcmF0aW9ucykKKyAgICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAgfQor
fQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5z
YWN0aW9uID0gbnVsbDsKK3ZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsKKworUGVyZlRlc3RSdW5u
ZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3Vu
dDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rp
b24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsK
KyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdj
KCk7CisgICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24g
c3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsK
KyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdl
bmVyYXRvci5uZXh0KCk7Cit9CisKK3ZhciBvYmplY3QgPSB7IHRlc3Q6ICd5bycsIGluZGV4S2V5
czogW10gfTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgaSsrKQorICAgIG9iamVjdC5pbmRl
eEtleXMucHVzaCgnaW5kZXhfbm9fJyArIGkpOworCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkK
K3sKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIg
b3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWVQcmVmaXggKyBjdXJyZW50
SXRlcmF0aW9uKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleXMn
LCB7IG11bHRpRW50cnk6IHRydWUgfSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB0cmFuc2FjdGlvbiA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKTsKKyAgICB0cmFuc2FjdGlvbi5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5wdXQob2JqZWN0LCAxKTsKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0g
bmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0aW9u
KCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpOworCisgICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQor
ICAgIHsKKyAgICAgICAgaW5kZXguZ2V0KCdpbmRleF9ub18nICsgaSkub25zdWNjZXNzID0gZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0
ICE9ICJ5byIpCisgICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICd5bycsIGdvdCAnIiAr
IGV2ZW50LnRhcmdldC5yZXN1bHQudGVzdCArICInIik7CisKKyAgICAgICAgICAgIGlmICgrK2Nv
bXBsZXRlZEdldHMgPT0gMTAwMCkKKyAgICAgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAg
ICB9OworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFz
dXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1hZGQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhl
ZERCL2Jhc2ljL29iamVjdHN0b3JlLWFkZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyMTRmYzc4OTFhODhk
ODliZWVmOGYyYzE4ZWViZDk1ODc3OTE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1hZGQuaHRtbApAQCAtMCwwICsxLDg0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJP
Zkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxl
dGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VO
YW1lID0gIm9iamVjdHN0b3JlLWFkZC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0
YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigp
OworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOworCitQZXJm
VGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJh
dGlvbkNvdW50OiBudW1iZXJPZkl0ZXJhdGlvbnMsCisgICAgdW5pdDogJ21zJywKKyAgICBkb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRv
ciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1
bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0
aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAg
IHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sK
KyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAg
IG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVy
ZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGNv
bXBsZXRlZEFkZHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsg
KytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSkub25zdWNjZXNz
ID0gKGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkg
eworICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9IGtleSkKKyAgICAg
ICAgICAgICAgICAgICAgYWxlcnQoIkV4cGVjdGVkICciICsga2V5ICsgIicsIGdvdCAnIiArIGV2
ZW50LnRhcmdldC5yZXN1bHQgKyAiJyIpOworCisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxl
dGVkQWRkcyA9PSBudW1iZXJPZkl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9KShpKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKwor
ICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIu
bm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbGVhciB0aGUg
b2JqZWN0IHN0b3JlIHNvIHdlIGRvbid0IGFkZCBleGlzdGluZyBpdGVtcyBpbiB0aGUgbmV4dCBp
dGVyYXRpb24uCisgICAgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVh
ZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgb2JqZWN0U3RvcmUuY2xlYXIoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3RlcCgpOworICAgIH0K
KworICAgIHlpZWxkOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWNsZWFyLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jbGVhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkN2Zh
NmRjYTE0NmZlYzVkZGRlYmYzMzRiYzZkZjEzYzRjMGJmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jbGVhci5odG1sCkBA
IC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Nv
bnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDUwMDA7
CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KK3Zh
ciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY2xlYXItREIiOworaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3Rh
cnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0g
bnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVU
b01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9m
SXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRl
c3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0K
K30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9
IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVw
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJh
dGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VO
YW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVuUmVx
dWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3RvcmUg
aXRlbXMgZm9yIGNsZWFyLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
JywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVj
dFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsg
KytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZCgidmFsdWUiICsgaSwgaSk7CisgICAgfQor
ICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBu
ZXh0U3RlcCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBl
cmZUZXN0UnVubmVyLm5vdygpOworCisgICAgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
c3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgb2JqZWN0U3Rv
cmUuY2xlYXIoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBuZXh0U3Rl
cCgpOworICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFz
dXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4
ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1jb3VudC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRl
eGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY291bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjZiNGRhMjk0
ZTczMGU3YWVmZDgyNWQ3OWZlMjJjNWQxYTUyNDZiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY291bnQuaHRtbApAQCAtMCww
ICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBu
dW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWNvdW50LURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRl
cmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7
CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3Vz
dG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAor
ICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0
R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9
KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBy
dW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgp
Cit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRp
b24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFt
ZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgi
dmFsdWUiICsgaSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRT
dGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIu
bm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5v
YmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICBvYmplY3RTdG9yZS5jb3VudCgpLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9IG51
bWJlck9mSXRlbXMpCisgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgIiArIG51bWJlck9mSXRl
bXMgKyAiaXRlbXMgYnV0IGdldCAiICsgZXZlbnQudGFyZ2V0LnJlc3VsdCk7CisKKyAgICAgICAg
bmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5u
ZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UuaHRtbCBiL1BlcmZv
cm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1hZHZhbmNlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmJhMGU1YTYxODkyM2UzMTJlM2RlOTQxN2UwMjgwMjY3YWJjNTI5YQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLWN1cnNvci1hZHZhbmNlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7
Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKK2NvbnN0IGN1cnNvclN0ZXAgPSAyOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWN1cm9zci1hZHZhbmNlLURCIjsKK2luZGV4ZWREQi5k
ZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAg
IHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBk
YiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7
CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0
OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAg
ICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsK
KyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5l
cmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBu
ZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpy
dW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRh
dGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIg
b2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAgICAgIG9iamVjdFN0
b3JlLnB1dCgidmFsdWUiICsgaSwgaSk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
c3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgZXhwZWN0ZWRLZXkgPSAwOwor
ICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYo
Y3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLmtleSAhPSBleHBlY3RlZEtleSkKKyAg
ICAgICAgICAgICAgICBhbGVydCgiRXhwZWN0ZWQgY3Vyc29yLmtleSAnIiArIGV4cGVjdGVkS2V5
ICsgIicsIGdvdCAnIiArIGN1cnNvci5rZXkgKyAiJyIpOworCisgICAgICAgICAgICBleHBlY3Rl
ZEtleSArPSBjdXJzb3JTdGVwOworICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2UoY3Vyc29yU3Rl
cCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXh0U3RlcCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERC
L2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1jb250aW51ZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGFiYmU2MTRlZWQ0YThlMTVhMDNkZGIzMjQ2ZmE4ZjVmMGYyNzY4OAotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1
cnNvci1jb250aW51ZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3Qg
bnVtYmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRl
c3QgYWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyb3Ny
LWNvbnRpbnVlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0
ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51
bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiICsgaSwgaSk7CisgICAg
fQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisK
KyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgb2Jq
ZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICB2YXIgZXhwZWN0ZWRLZXkgPSAwOworICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgaWYoY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3Vy
c29yLmtleSAhPSBleHBlY3RlZEtleSsrKQorICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3Rl
ZCBjdXJzb3Iua2V5ICciICsgZXhwZWN0ZWRLZXkgKyAiJywgZ290ICciICsgY3Vyc29yLmtleSAr
ICInIik7CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxk
OworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1
bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVv
dXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1j
dXJzb3ItZGVsZXRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmpl
Y3RzdG9yZS1jdXJzb3ItZGVsZXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MjI0MTlkYjE0YmUxNTFm
NjhhNjU3MDIxN2UwNjU2MWUwMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci1kZWxldGUuaHRtbApAQCAtMCww
ICsxLDkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBu
dW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsKK2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlLWN1cnNvci1kZWxldGUtREIiOworaW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAg
c3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRi
ID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBh
cmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJl
ck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAg
IHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAg
IH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRv
ciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRT
dGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0
ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJh
c2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmpl
Y3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVu
UmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3Rv
cmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24o
J3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9u
Lm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
dGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5hZGQoInZhbHVlIiArIGksIGkpOworCisg
ICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVy
ZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxl
dGVkRGVsZXRlcyA9IDA7CisgICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVz
dWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5kZWxldGUoKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBs
ZXRlZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4dFN0
ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLXVwZGF0ZS5odG1sIGIvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLXVwZGF0ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk3ZjgyM2IzM2ZiYjYzNmNkYTY1ODEzZjA2Nzc4MmM2NjNlNzgwM2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9y
ZS1jdXJzb3ItdXBkYXRlLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25z
dCBudW1iZXJPZkl0ZW1zID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUg
dGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1jdXJz
b3ItdXBkYXRlLURCIjsKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0
ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51
bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAg
ICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJ
dGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBu
ZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRv
ci5uZXh0KCk7Cit9CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVu
UmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiLCBpKTsKKyAgICB9Cisg
ICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAg
IHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgn
c3RvcmUnKTsKKyAgICB2YXIgY29tcGxldGVkVXBkYXRlcyA9IDA7CisgICAgb2JqZWN0U3RvcmUu
b3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBj
dXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAg
ICAgICAgIGN1cnNvci51cGRhdGUoTWF0aC5yYW5kb20oKSkub25zdWNjZXNzID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytjb21wbGV0ZWRVcGRhdGVzID09IG51bWJl
ck9mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBl
cmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLWN1cnNvci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2Jq
ZWN0c3RvcmUtY3Vyc29yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFjNDI0OWYyNTU5NTk5NzkxOWMwMDg1
OTg2NDNiMDUyMjE3Y2IzYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5k
ZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLWN1cnNvci5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9
IDEwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGlt
ZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtY3Vyc29yLURCIjsKK2luZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewor
ICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKK3Zh
ciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKK1BlcmZUZXN0UnVubmVy
LnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6
IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkg
eworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAg
ICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Cisg
ICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJh
dG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4
dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVu
SXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRh
YmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9i
amVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMjUwMDA7ICsraSkgeworICAgICAgICAgICAgdmFyIHN1ZmZpeCA9ICgi
MDAwMDAwMCIgKyBpKS5zbGljZSgtNyk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImJh
cl92YWx1ZV8iICsgc3VmZml4LCAiZm9vX2tleV8iICsgc3VmZml4KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOwor
CisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworICAgIHZhciBjdXJz
b3JSZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyku
b3BlbkN1cnNvcigpOworICAgIHZhciBjdXJzb3JJdGVyYXRpb24gPSAwOworICAgIGN1cnNvclJl
cXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9
IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGlmIChjdXJzb3IpIHsKKyAgICAgICAgICAg
IHZhciBzdWZmaXggPSAoIjAwMDAwMDAiICsgY3Vyc29ySXRlcmF0aW9uKS5zbGljZSgtNyk7Cisg
ICAgICAgICAgICBpZiAoY3Vyc29yLmtleSAhPSAiZm9vX2tleV8iICsgc3VmZml4KQorICAgICAg
ICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3QgdmFsdWUgcmV0cmlldmVkOiAiICsgY3Vyc29yLmtl
eSk7CisgICAgICAgICAgICBpZiAoY3Vyc29yLnZhbHVlICE9ICJiYXJfdmFsdWVfIiArIHN1ZmZp
eCkKKyAgICAgICAgICAgICAgICBhbGVydCgiSW5jb3JyZWN0IHZhbHVlIHJldHJpZXZlZDogIiAr
IGN1cnNvci5rZXkpOworICAgICAgICAgICAgKytjdXJzb3JJdGVyYXRpb247CisgICAgICAgICAg
ICBjdXJzb3IuY29udGludWUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXh0U3Rl
cCgpOworICAgIH07CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVh
c3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRl
eGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtZGVsZXRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0lu
ZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1kZWxldGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjQ1OWE0
Zjk0NTY2MGFlMmZiMzVkMWE0M2FkYmY4MDYxNGY4MmQwCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtZGVsZXRlLmh0bWwKQEAg
LTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworY29u
c3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJPZkl0ZW1zID0gNTAwMDsK
KworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFy
IGRhdGFiYXNlTmFtZSA9ICJvYmplY3RzdG9yZS1kZWxldGUtREIiOworaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgc3Rh
cnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxsOwordmFyIGRiID0g
bnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVU
b01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9m
SXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRl
c3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgIH0K
K30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9
IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVw
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rpb24gKnJ1bkl0ZXJh
dGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VO
YW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIH0KKyAgICBvcGVuUmVx
dWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgLy8gU3RvcmUg
aXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0
b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9i
amVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVt
czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5hZGQoInZhbHVlIiArIGksIGkpOworCisgICAg
dHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRT
dGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRl
c3RSdW5uZXIubm93KCk7CisKKyAgICBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdzdG9y
ZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2YXIgY29tcGxldGVk
RGVsZXRlcyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kp
IHsKKyAgICAgICAgb2JqZWN0U3RvcmUuZGVsZXRlKGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgICAgICBpZiAoKytjb21wbGV0ZWREZWxldGVzID09IG51bWJlck9mSXRl
bXMpCisgICAgICAgICAgICAgICAgbmV4dFN0ZXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJm
VGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9vYmplY3Rz
dG9yZS1nZXQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0
b3JlLWdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNzk4YTVmYzY4Zjk3Mjc1OWEyMTM5ZmM3YTA5MmMx
NGNjOTk2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9i
YXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitjb25zdCBudW1iZXJPZkl0ZXJhdGlvbnMgPSAyMDsK
K2NvbnN0IG51bWJlck9mSXRlbXMgPSA1MDAwOworCisvLyBEZWxldGUgZGF0YWJhc2UocykgZm9y
IHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3Jl
LWdldC1EQiI7CitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFydEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdl
bmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsK
KworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0
b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJdGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisg
ICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAg
ICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBl
cmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9u
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAo
KTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgp
OworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3Qg
PSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFk
ZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlJyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQor
ICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImluZGV4IiArIGksIGkpOworICAgIH0KKyAgICBv
cGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFy
IHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisgICAgdmFyIG9iamVjdFN0b3Jl
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVt
czsgKytpKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmdldChpKS5vbnN1Y2Nlc3MgPSAoZnVuY3Rp
b24gKGopIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICAg
ICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9ICgiaW5kZXgiICsgaikpCisgICAgICAg
ICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAnaW5kZXgiICsgaiArICInLCBnb3QgJyIgKyBl
dmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKKworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBs
ZXRlZEdldHMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4dFN0ZXAo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoaSk7CisgICAgfQorCisgICAgeWllbGQ7CisK
KyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVjdHN0b3JlLXB1dC5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtcHV0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjZmZjA1ZjU0YWZkMjkwNDY5NDI0N2JkYzlhZDljODFkZWZiMDBlZQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL29iamVj
dHN0b3JlLXB1dC5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOworY29uc3QgbnVt
YmVyT2ZJdGVtcyA9IDUwMDA7CisKKy8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3Qg
YWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtcHV0LURCIjsK
K2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkgeworICAgIHN0YXJ0SXRlcmF0aW9uKCk7Cit9CisKK3ZhciB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKK3ZhciBkYiA9IG51bGw7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVW
YWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9u
cywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIg
PSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RS
dW5uZXIuZ2MoKTsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQorewor
ICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQor
CitmdW5jdGlvbiBuZXh0U3RlcCgpCit7CisgICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisK
K2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4
ZWREQi5vcGVuKGRhdGFiYXNlTmFtZSk7CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0Owor
ICAgICAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpCisgICAgICAg
ICAgIG9iamVjdFN0b3JlLnB1dCgidmFsdWUiLCBpKTsKKyAgICB9CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gbmV4dFN0ZXA7CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKTsKKyAgICB2
YXIgY29tcGxldGVkUHV0cyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0
ZW1zOyArK2kpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KE1hdGgucmFuZG9tKCksIGkpLm9u
c3VjY2VzcyA9IChmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdCAhPSBrZXkp
CisgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAnIiArIGtleSArICInLCBnb3Qg
JyIgKyBldmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKKworICAgICAgICAgICAgICAgIGlmICgr
K2NvbXBsZXRlZFB1dHMgPT0gbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgbmV4
dFN0ZXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoaSk7CisgICAgfQorCisgICAgeWll
bGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0
UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0VGlt
ZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2luZGV4LWdldC5odG1sIGIv
UGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvaW5kZXgtZ2V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg5ZTUyNjczYTg1Nzc0YjVkMTdhNTZkYmViYWVmMjZkYzFjZTRlZTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvaW5kZXgtZ2V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSAr
MCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi0vLyBEZWxldGUgZGF0
YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCi12YXIgZGF0YWJhc2VOYW1lID0g
ImluZGV4LWdldC1EQiI7Ci1pbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKLSAgICBzdGFydEl0ZXJhdGlvbigpOwotfQotCi12YXIg
dGVzdEdlbmVyYXRvciA9IG51bGw7Ci12YXIgZGIgPSBudWxsOwotdmFyIHRyYW5zYWN0aW9uID0g
bnVsbDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKLSAg
ICBjdXN0b21JdGVyYXRpb25Db3VudDogMTAsCi0gICAgdW5pdDogJ21zJywKLSAgICBkb25lOiBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbDsKLSAgICAgICAgZGIgPSBu
dWxsOwotICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLSAgICAgICAgUGVyZlRlc3RSdW5u
ZXIuZ2MoKTsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQotewotICAg
IHRlc3RHZW5lcmF0b3IgPSBydW5JdGVyYXRpb24oKTsKLSAgICBuZXh0U3RlcCgpOwotfQotCi1m
dW5jdGlvbiBuZXh0U3RlcCgpCi17Ci0gICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Ci19Ci0KLXZh
ciBudW1iZXJPZkVudHJpZXMgPSA1MDAwOwotCi1mdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsK
LSAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOwotICAg
IG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAg
IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7Ci0gICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUlu
ZGV4KCdpbmRleCcsICdpbmRleEtleScpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bWJlck9mRW50cmllczsgaSsrKQotICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoIHsgdGVzdDog
J3lvJywgaW5kZXhLZXk6ICJpbmRleCIgKyBpIH0sIGkpOwotICAgIH0KLSAgICBvcGVuUmVxdWVz
dC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAgdmFyIHN0YXJ0VGlt
ZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOwotCi0gICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rp
b24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7Ci0gICAgdmFy
IGNvbXBsZXRlZEdldHMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbnRy
aWVzOyBpKyspCi0gICAgewotICAgICAgICBpbmRleC5nZXQoJ2luZGV4JyArIGkpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1
bHQudGVzdCAhPSAieW8iKQotICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAneW8nLCBn
b3QgJyIgKyBldmVudC50YXJnZXQucmVzdWx0LnRlc3QgKyAiJyIpOwotCi0gICAgICAgICAgICBp
ZiAoKytjb21wbGV0ZWRHZXRzID09IG51bWJlck9mRW50cmllcykKLSAgICAgICAgICAgICAgICBu
ZXh0U3RlcCgpOwotICAgICAgICB9OwotICAgIH0KLQotICAgIHlpZWxkOwotCi0gICAgaWYgKCFQ
ZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0
YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRp
b24sIDApOwotfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwgYi9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9pbmRleC1tdWx0aWVudHJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFhNGYyZWNlOTdhNTY4ODQ4MDk5MmZiOGFmZWZlNzBlMDZkNWEwYTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvaW5kZXgtbXVsdGllbnRyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
OTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFyIGl0ZXJh
dGlvbkNvdW50ID0gMjA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0KLS8vIERlbGV0ZSBhbGwg
ZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgotdmFyIGRhdGFiYXNlTmFtZVBy
ZWZpeCA9ICJpbmRleC1tdWx0aWVudHJ5LURCLSI7Ci1mb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJh
dGlvbkNvdW50ICsgMTsgKytpKSB7Ci0gICAgcmVxID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZVByZWZpeCArIGkpOwotICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkKLSAgICAg
ICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7Ci0gICAgfQotfQotCi12YXIgdGVzdEdlbmVyYXRvciA9
IG51bGw7Ci12YXIgZGIgPSBudWxsOwotdmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKLXZhciBjdXJy
ZW50SXRlcmF0aW9uID0gMDsKLQotUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVl
c0FzeW5jKHsKLSAgICBjdXN0b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCi0gICAg
dW5pdDogJ21zJywKLSAgICBkb25lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9u
ID0gbnVsbDsKLSAgICAgICAgZGIgPSBudWxsOwotICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVs
bDsKLSAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKLSAgICAgICAgKytjdXJyZW50SXRlcmF0
aW9uOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCi17Ci0gICAgdGVz
dEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOwotICAgIG5leHRTdGVwKCk7Ci19Ci0KLWZ1bmN0
aW9uIG5leHRTdGVwKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKLX0KLQotdmFyIG9i
amVjdCA9IHsgdGVzdDogJ3lvJywgaW5kZXhLZXlzOiBbXSB9OwotZm9yICh2YXIgaSA9IDA7IGkg
PCA1MDAwOyBpKyspCi0gICAgb2JqZWN0LmluZGV4S2V5cy5wdXNoKCdpbmRleF9ub18nICsgaSk7
Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBzdGFydFRpbWUgPSBQZXJm
VGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVu
KGRhdGFiYXNlTmFtZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24pOwotICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJykuY3Jl
YXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5cycsIHsgbXVsdGlFbnRyeTogdHJ1ZSB9KTsKLSAg
ICB9Ci0gICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsK
LQotICAgIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScp
OwotICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dChvYmplY3QsIDEpOwot
ICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0g
ICAgdmFyIGluZGV4ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3Jl
JykuaW5kZXgoJ2luZGV4Jyk7Ci0KLSAgICB2YXIgY29tcGxldGVkR2V0cyA9IDA7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0gICAgewotICAgICAgICBpbmRleC5nZXQoJ2lu
ZGV4X25vXycgKyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgICAg
IGlmIChldmVudC50YXJnZXQucmVzdWx0LnRlc3QgIT0gInlvIikKLSAgICAgICAgICAgICAgICBh
bGVydCgiRXhwZWN0ZWQgJ3lvJywgZ290ICciICsgZXZlbnQudGFyZ2V0LnJlc3VsdC50ZXN0ICsg
IiciKTsKLQotICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkR2V0cyA9PSAxMDAwKQotICAgICAg
ICAgICAgICAgIG5leHRTdGVwKCk7Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgeWllbGQ7Ci0K
LSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVy
Lm5vdygpIC0gc3RhcnRUaW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChz
dGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWFycmF5LWtleXMuaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWFycmF5LWtleXMuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwZTkzY2Q5YThmOTBmMjAyNGNiY2M2NGYyYTYyNTk0
NTVmN2E0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1hcnJheS1rZXlzLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSw5MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGJvZHk+Ci08
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0Pgot
Ci12YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKLXZhciBudW1iZXJEZWxldGVkID0gMDsKLQotLy8g
RGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCi12YXIgZGF0
YWJhc2VQcmVmaXggPSAibGFyZ2UtYXJyYXkta2V5cy1EQi0iOwotZm9yICh2YXIgaSA9IDA7IGkg
PCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAgc3RhcnRJ
dGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBk
YiA9IG51bGw7Ci12YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnBy
ZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0
ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewot
ICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAg
ICBQZXJmVGVzdFJ1bm5lci5nYygpOwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAg
fQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9y
ID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0
ZXAoKQotewotICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQotCi1mdW5jdGlvbiBjcmVhdGVT
dWJBcnJheShjb3VudCkKLXsKLSAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoY291bnQpOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhcnJheVtpXSA9IGNy
ZWF0ZVN1YkFycmF5KGNvdW50IC0gMSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQot
dmFyIG51bWJlck9mU3ViYXJyYXlzID0gNjsKLXZhciBhcnJheSA9IGNyZWF0ZVN1YkFycmF5KG51
bWJlck9mU3ViYXJyYXlzKTsKLWFycmF5LnB1c2goInZhcmlhbnQiKTsKLQotZnVuY3Rpb24gKnJ1
bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0
YWJhc2VQcmVmaXggKyBjdXJyZW50SXRlcmF0aW9uKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3Jh
ZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7Ci0gICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhcnJheXMnKTsKLSAgICB9Ci0g
ICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAg
IHZhciBzdGFydFRpbWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhcnJheXMnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUo
J2FycmF5cycpOwotICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBuZXh0
U3RlcDsKLQotICAgIHZhciBudW1iZXJPZkluc2VydHMgPSAxMDA7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZkluc2VydHM7ICsraSkgewotICAgICAgICBhcnJheVtudW1iZXJPZlN1
YmFycmF5c10gPSBpOwotICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBh
cnJheSk7Ci0gICAgfQotCi0gICAgeWllbGQ7Ci0KLSAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1l
YXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci0KLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9J
bmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhl
ZERCL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcyYTcxY2ZhYjNiMmQ0MDVhMzZmYWUyYTllMTEyY2I1YTAzMDY4MjQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVk
REIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25Db3VudCA9
IDIwOwotdmFyIG51bWJlckRlbGV0ZWQgPSAwOwotCi0vLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBm
b3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1z
dHJpbmcta2V5cy1EQi0iOwotZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7
ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09
IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKLSAgICB9Ci19
Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgY3VycmVu
dEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNB
c3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAgIHVu
aXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAgICAgICBkYiA9IG51bGw7Ci0g
ICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygp
OwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0
YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0g
ICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5l
cmF0b3IubmV4dCgpOwotfQotCi12YXIgYmFzZVN0cmluZzsKLWZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwOyArK2kpCi0gICAgYmFzZVN0cmluZyArPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
eXoiOwotCi12YXIgbnVtYmVyT2ZJbnNlcnRzID0gNTA7Ci12YXIgYXJyYXkgPSBuZXcgQXJyYXko
bnVtYmVyT2ZJbnNlcnRzKTsKLWZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyAr
K2kpIHsKLSAgICBhcnJheVtpXSA9IG5ldyBBcnJheUJ1ZmZlcigyMDk3MTUyKTsKLSAgICB2YXIg
dmlldyA9IG5ldyBJbnQzMkFycmF5KGFycmF5W2ldKTsKLSAgICB2aWV3W3ZpZXcubGVuZ3RoIC0g
MV0gPSBpOwotfQotCi1mdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsKLSAgICB2YXIgb3BlblJl
cXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24p
OwotICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0g
ICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ2FycmF5cycpOwotICAgIH0KLSAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0
U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVy
Lm5vdygpOwotCi0gICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2FycmF5cycs
ICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnYXJyYXlzJyk7Ci0gICAgb2JqZWN0U3RvcmUudHJh
bnNhY3Rpb24ub25jb21wbGV0ZSA9IG5leHRTdGVwOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBudW1iZXJPZkluc2VydHM7ICsraSkKLSAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJTb21lIHZh
bHVlISEhIiwgYXJyYXlbaV0pOwotCi0gICAgeWllbGQ7Ci0KLSAgICBpZiAoIVBlcmZUZXN0UnVu
bmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19
Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJl
c3BvbnNpdmVuZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmY2YjVh
MTRlZGFlOGRkMjNjMzAyOTM3MDIwMmMwMWJlMTM1NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVy
YXRpb25Db3VudCA9IDIwOwotdmFyIG51bWJlckRlbGV0ZWQgPSAwOwotCi0vLyBEZWxldGUgYWxs
IGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZVByZWZp
eCA9ICJsYXJnZS1udW1iZXItb2YtaW5zZXJ0cy1yZXNwb25zaXZlbmVzcy1EQi0iOwotZm9yICh2
YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5k
ZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAg
ICAgICAgc3RhcnRJdGVyYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0g
bnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZU
ZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0
aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVu
Y3Rpb24gKCkgewotICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIGxhcmdlc3REZWxheSA9IDA7
Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5n
YygpOwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9u
IHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7
Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RH
ZW5lcmF0b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZPYmplY3RzID0gNTAwMDA7Ci12YXIg
b2JqZWN0c1RvSW5zZXJ0ID0gbmV3IEFycmF5KG51bWJlck9mT2JqZWN0cyk7Ci1mb3IgKHZhciBp
ID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKSB7Ci0gICAgb2JqZWN0c1RvSW5zZXJ0W2ld
ID0geyBkYXRhOiBNYXRoLnJhbmRvbSgpIH07Ci0gICAgb2JqZWN0c1RvSW5zZXJ0W2ldLmlkID0g
J29iamVjdF8nICsgaTsKLX0KLQotZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCi17Ci0gICAgdmFy
IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VQcmVmaXggKyBjdXJyZW50SXRl
cmF0aW9uKTsKLSAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVu
dCkgewotICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAgICAgIGRiLmNyZWF0
ZU9iamVjdFN0b3JlKCdvYmplY3RzJywge2tleVBhdGg6ICdpZCd9KTsKLSAgICB9Ci0gICAgb3Bl
blJlcXVlc3Qub25zdWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAgIHZhciBv
YmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdvYmplY3RzJywgJ3JlYWR3cml0ZScpLm9iamVj
dFN0b3JlKCdvYmplY3RzJyk7Ci0gICAgb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IG5leHRTdGVwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmplY3RzOyAr
K2kpCi0gICAgICAgIG9iamVjdFN0b3JlLnB1dChvYmplY3RzVG9JbnNlcnRbaV0pOwotCi0gICAg
UGVyZlRlc3RSdW5uZXIuc3RhcnRDaGVja2luZ1Jlc3BvbnNpdmVuZXNzKCk7Ci0KLSAgICB5aWVs
ZDsKLQotICAgIFBlcmZUZXN0UnVubmVyLnN0b3BDaGVja2luZ1Jlc3BvbnNpdmVuZXNzKCk7Ci0g
ICAgCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1
bm5lci5sb25nZXN0UmVzcG9uc2l2ZW5lc3NEZWxheSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Ci19Ci0KLTwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdl
LW51bWJlci1vZi1pbnNlcnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdh
ZGQ3Mjg5YTRmNjAwOTQ3OTEwYzM0MTU4ODE1ZGY4MzBlZmUyZDIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIv
bGFyZ2UtbnVtYmVyLW9mLWluc2VydHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0KLXZhciBpdGVyYXRpb25Db3Vu
dCA9IDIwOwotdmFyIG51bWJlckRlbGV0ZWQgPSAwOwotCi0vLyBEZWxldGUgYWxsIGRhdGFiYXNl
cyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJn
ZS1udW1iZXItb2YtaW5zZXJ0cy1EQi0iOwotZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25D
b3VudCArIDE7ICsraSkgewotICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVBy
ZWZpeCArIGkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoKytudW1iZXJE
ZWxldGVkID09IGl0ZXJhdGlvbkNvdW50KQotICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsK
LSAgICB9Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12
YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1
cmVWYWx1ZXNBc3luYyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50
LAotICAgIHVuaXQ6ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAgICAgICBkYiA9
IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1
bm5lci5nYygpOwotICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1
bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0
aW9uKCk7Ci0gICAgbmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAg
IHRlc3RHZW5lcmF0b3IubmV4dCgpOwotfQotCi12YXIgbnVtYmVyT2ZPYmplY3RzID0gMTAwMDAw
OwotdmFyIG9iamVjdHNUb0luc2VydCA9IG5ldyBBcnJheShudW1iZXJPZk9iamVjdHMpOwotZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9iamVjdHM7ICsraSkgewotICAgIG9iamVjdHNUb0lu
c2VydFtpXSA9IHsgZGF0YTogTWF0aC5yYW5kb20oKSB9OwotICAgIG9iamVjdHNUb0luc2VydFtp
XS5pZCA9ICdvYmplY3RfJyArIGk7Ci19Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewot
ICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3Vy
cmVudEl0ZXJhdGlvbik7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rp
b24oZXZlbnQpIHsKLSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnb2JqZWN0cycsIHtrZXlQYXRoOiAnaWQnfSk7Ci0gICAgfQot
ICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOwotCi0gICAgeWllbGQ7Ci0KLSAg
ICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7Ci0KLSAgICB2YXIgb2JqZWN0
U3RvcmUgPSBkYi50cmFuc2FjdGlvbignb2JqZWN0cycsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9y
ZSgnb2JqZWN0cycpOwotICAgIG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBu
ZXh0U3RlcDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mT2JqZWN0czsgKytpKQot
ICAgICAgICBvYmplY3RTdG9yZS5wdXQob2JqZWN0c1RvSW5zZXJ0W2ldKTsKLQotICAgIHlpZWxk
OwotCi0gICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1
bm5lci5ub3coKSAtIHN0YXJ0VGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFRpbWVv
dXQoc3RhcnRJdGVyYXRpb24sIDApOwotfQotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLXN0cmluZy1rZXlz
Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1zdHJpbmcta2V5cy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTZkOTBhZWVkN2ZiMWY0NjU1NmI1NGJh
YzE0ODllMDcwOGNjNDFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLXN0cmluZy1rZXlzLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGJvZHk+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0PgotCi12YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKLXZhciBudW1iZXJEZWxldGVkID0g
MDsKLQotLy8gRGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUu
Ci12YXIgZGF0YWJhc2VQcmVmaXggPSAibGFyZ2Utc3RyaW5nLWtleXMtREItIjsKLWZvciAodmFy
IGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKLSAgICBpbmRleGVkREIuZGVs
ZXRlRGF0YWJhc2UoZGF0YWJhc2VQcmVmaXggKyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkKLSAgICAgICAg
ICAgIHN0YXJ0SXRlcmF0aW9uKCk7Ci0gICAgfQotfQotCi12YXIgdGVzdEdlbmVyYXRvciA9IG51
bGw7Ci12YXIgZGIgPSBudWxsOwotdmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOwotCi1QZXJmVGVz
dFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoewotICAgIGN1c3RvbUl0ZXJhdGlv
bkNvdW50OiBpdGVyYXRpb25Db3VudCwKLSAgICB1bml0OiAnbXMnLAotICAgIGRvbmU6IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgZGIgPSBudWxsOwotICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVs
bDsKLSAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKLSAgICAgICAgKytjdXJyZW50SXRlcmF0
aW9uOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCi17Ci0gICAgdGVz
dEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOwotICAgIG5leHRTdGVwKCk7Ci19Ci0KLWZ1bmN0
aW9uIG5leHRTdGVwKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKLX0KLQotdmFyIGJh
c2VTdHJpbmc7Ci1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQotICAgIGJhc2VTdHJp
bmcgKz0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKLQotdmFyIG51bWJlck9mSW5zZXJ0
cyA9IDEwOwotdmFyIGFycmF5ID0gbmV3IEFycmF5KG51bWJlck9mSW5zZXJ0cyk7Ci1mb3IgKHZh
ciBpID0gMDsgaSA8IG51bWJlck9mSW5zZXJ0czsgKytpKQotICAgIGFycmF5W2ldID0gYmFzZVN0
cmluZyArIGk7Ci0KLWZ1bmN0aW9uICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBvcGVuUmVx
dWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7
Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAg
ICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnYXJyYXlzJyk7Ci0gICAgfQotICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRT
dGVwOwotCi0gICAgeWllbGQ7Ci0KLSAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIu
bm93KCk7Ci0KLSAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXJyYXlzJywg
J3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdhcnJheXMnKTsKLSAgICBvYmplY3RTdG9yZS50cmFu
c2FjdGlvbi5vbmNvbXBsZXRlID0gbmV4dFN0ZXA7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bWJlck9mSW5zZXJ0czsgKytpKQotICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFs
dWUhISEiLCBhcnJheVtpXSk7Ci0KLSAgICB5aWVsZDsKLQotICAgIGlmICghUGVyZlRlc3RSdW5u
ZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKLX0K
LQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkYjVkYjkzZTFmZWMxMDcwMzZkMTE3YzI1MzJjYmQ4YmJlYWRmNWMwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotdmFyIGl0ZXJhdGlv
bkNvdW50ID0gMTA7Ci12YXIgbnVtYmVyRGVsZXRlZCA9IDA7Ci0vLyBEZWxldGUgYWxsIGRhdGFi
YXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBkYXRhYmFzZU5hbWUgPSAib2Jq
ZWN0c3RvcmUtY3Vyc29yLURCIjsKLWluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5h
bWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgIHN0YXJ0SXRlcmF0aW9uKCk7Ci19Ci0K
LXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7Ci12YXIgY3VycmVudEl0
ZXJhdGlvbiA9IDA7Ci0KLVBlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3lu
Yyh7Ci0gICAgY3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAotICAgIHVuaXQ6
ICdtcycsCi0gICAgZG9uZTogZnVuY3Rpb24gKCkgewotICAgICAgICBkYiA9IG51bGw7Ci0gICAg
ICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwotICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwot
ICAgICAgICArK2N1cnJlbnRJdGVyYXRpb247Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIHN0YXJ0
SXRlcmF0aW9uKCkKLXsKLSAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7Ci0gICAg
bmV4dFN0ZXAoKTsKLX0KLQotZnVuY3Rpb24gbmV4dFN0ZXAoKQotewotICAgIHRlc3RHZW5lcmF0
b3IubmV4dCgpOwotfQotCi1mdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKLXsKLSAgICB2YXIgb3Bl
blJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOwotICAgIG9wZW5SZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlJyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjUwMDA7ICsraSkg
ewotICAgICAgICAgICAgdmFyIHN1ZmZpeCA9ICgiMDAwMDAwMCIgKyBpKS5zbGljZSgtNyk7Ci0g
ICAgICAgICAgICBvYmplY3RTdG9yZS5wdXQoImJhcl92YWx1ZV8iICsgc3VmZml4LCAiZm9vX2tl
eV8iICsgc3VmZml4KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nl
c3MgPSBuZXh0U3RlcDsKLQotICAgIHlpZWxkOwotCi0gICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZU
ZXN0UnVubmVyLm5vdygpOwotICAgIHZhciBjdXJzb3JSZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24o
J3N0b3JlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykub3BlbkN1cnNvcigpOwotICAgIHZhciBjdXJz
b3JJdGVyYXRpb24gPSAwOwotICAgIGN1cnNvclJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24o
ZXZlbnQpIHsKLSAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAg
ICAgIGlmIChjdXJzb3IpIHsKLSAgICAgICAgICAgIHZhciBzdWZmaXggPSAoIjAwMDAwMDAiICsg
Y3Vyc29ySXRlcmF0aW9uKS5zbGljZSgtNyk7Ci0gICAgICAgICAgICBpZiAoY3Vyc29yLmtleSAh
PSAiZm9vX2tleV8iICsgc3VmZml4KQotICAgICAgICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3Qg
dmFsdWUgcmV0cmlldmVkOiAiICsgY3Vyc29yLmtleSk7Ci0gICAgICAgICAgICBpZiAoY3Vyc29y
LnZhbHVlICE9ICJiYXJfdmFsdWVfIiArIHN1ZmZpeCkKLSAgICAgICAgICAgICAgICBhbGVydCgi
SW5jb3JyZWN0IHZhbHVlIHJldHJpZXZlZDogIiArIGN1cnNvci5rZXkpOwotICAgICAgICAgICAg
KytjdXJzb3JJdGVyYXRpb247Ci0gICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBuZXh0U3RlcCgpOwotICAgIH07Ci0KLSAgICB5aWVsZDsK
LQotICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5u
ZXIubm93KCkgLSBzdGFydFRpbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRUaW1lb3V0
KHN0YXJ0SXRlcmF0aW9uLCAwKTsKLX0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvb2JqZWN0c3RvcmUtZ2V0Lmh0bWwg
Yi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1nZXQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0YzhhYzIzMjcwMWFlMTIxNmJjN2MwYzI2ODgwZjY5
NzY1NjMyMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9vYmplY3RzdG9yZS1nZXQuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDgxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0K
LS8vIERlbGV0ZSBkYXRhYmFzZShzKSBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KLXZhciBk
YXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmUtZ2V0LURCIjsKLWluZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewotICAgIHN0YXJ0SXRl
cmF0aW9uKCk7Ci19Ci0KLXZhciB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKLXZhciBkYiA9IG51bGw7
Ci12YXIgdHJhbnNhY3Rpb24gPSBudWxsOwotCi1QZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFz
dXJlVmFsdWVzQXN5bmMoewotICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiAyMCwKLSAgICB1bml0
OiAnbXMnLAotICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24gPSBu
dWxsOwotICAgICAgICBkYiA9IG51bGw7Ci0gICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOwot
ICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBzdGFy
dEl0ZXJhdGlvbigpCi17Ci0gICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOwotICAg
IG5leHRTdGVwKCk7Ci19Ci0KLWZ1bmN0aW9uIG5leHRTdGVwKCkKLXsKLSAgICB0ZXN0R2VuZXJh
dG9yLm5leHQoKTsKLX0KLQotdmFyIG51bWJlck9mRW50cmllcyA9IDUwMDA7Ci0KLWZ1bmN0aW9u
ICpydW5JdGVyYXRpb24oKQotewotICAgIHZhciBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVu
KGRhdGFiYXNlTmFtZSk7Ci0gICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rp
b24oZXZlbnQpIHsKLSAgICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICB2
YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVudHJpZXM7ICsraSkKLSAgICAgICAgICAgb2Jq
ZWN0U3RvcmUucHV0KCJpbmRleCIgKyBpLCBpKTsKLSAgICB9Ci0gICAgb3BlblJlcXVlc3Qub25z
dWNjZXNzID0gbmV4dFN0ZXA7Ci0KLSAgICB5aWVsZDsKLQotICAgIHZhciBzdGFydFRpbWUgPSBQ
ZXJmVGVzdFJ1bm5lci5ub3coKTsKLQotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0
aW9uKCdzdG9yZScpLm9iamVjdFN0b3JlKCdzdG9yZScpOwotICAgIHZhciBjb21wbGV0ZWRHZXRz
ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRW50cmllczsgKytpKQotICAg
IHsKLSAgICAgICAgCi0gICAgICAgIG9iamVjdFN0b3JlLmdldChpKS5vbnN1Y2Nlc3MgPSAoZnVu
Y3Rpb24gKGopIHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewotICAgICAg
ICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVzdWx0ICE9ICgiaW5kZXgiICsgaikpCi0gICAg
ICAgICAgICAgICAgICAgIGFsZXJ0KCJFeHBlY3RlZCAnaW5kZXgiICsgaiArICInLCBnb3QgJyIg
KyBldmVudC50YXJnZXQucmVzdWx0ICsgIiciKTsKLQotICAgICAgICAgICAgICAgIGlmICgrK2Nv
bXBsZXRlZEdldHMgPT0gbnVtYmVyT2ZFbnRyaWVzKQotICAgICAgICAgICAgICAgICAgICBuZXh0
U3RlcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KShpKTsKLSAgICB9Ci0KLSAgICB5aWVs
ZDsKLQotICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RS
dW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRUaW1l
b3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKLX0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWFycmF5
LWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1hcnJh
eS1rZXlzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTBiMGQzZjkzMTllZGViYmUyN2M3YjFlZTM5ZTNhNDg1
NWQ4OWVmMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0
cmVzcy9sYXJnZS1hcnJheS1rZXlzLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIGl0ZXJhdGlvbkNvdW50ID0gMjA7Cit2YXIg
bnVtYmVyRGVsZXRlZCA9IDA7CisKKy8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVz
dCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlUHJlZml4ID0gImxhcmdlLWFycmF5LWtleXMt
REItIjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKKyAg
ICBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VQcmVmaXggKyBpKS5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25D
b3VudCkKKyAgICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAgfQorfQorCit2YXIgdGVz
dEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIGN1cnJlbnRJdGVyYXRpb24g
PSAwOworCitQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAg
IGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBpdGVyYXRpb25Db3VudCwKKyAgICB1bml0OiAnbXMnLAor
ICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0
R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICAgICAg
KytjdXJyZW50SXRlcmF0aW9uOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlv
bigpCit7CisgICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVw
KCk7Cit9CisKK2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQo
KTsKK30KKworZnVuY3Rpb24gY3JlYXRlU3ViQXJyYXkoY291bnQpCit7CisgICAgdmFyIGFycmF5
ID0gbmV3IEFycmF5KGNvdW50KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgYXJyYXlbaV0gPSBjcmVhdGVTdWJBcnJheShjb3VudCAtIDEpOworICAgIH0K
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZhciBudW1iZXJPZlN1YmFycmF5cyA9IDY7Cit2YXIg
YXJyYXkgPSBjcmVhdGVTdWJBcnJheShudW1iZXJPZlN1YmFycmF5cyk7CithcnJheS5wdXNoKCJ2
YXJpYW50Iik7CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVx
dWVzdCA9IGluZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7
CisgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnYXJyYXlzJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRT
dGVwOworCisgICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIu
bm93KCk7CisKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXJyYXlzJywg
J3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICBvYmplY3RTdG9yZS50cmFu
c2FjdGlvbi5vbmNvbXBsZXRlID0gbmV4dFN0ZXA7CisKKyAgICB2YXIgbnVtYmVyT2ZJbnNlcnRz
ID0gMTAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpIHsK
KyAgICAgICAgYXJyYXlbbnVtYmVyT2ZTdWJhcnJheXNdID0gaTsKKyAgICAgICAgb2JqZWN0U3Rv
cmUucHV0KCJTb21lIHZhbHVlISEhIiwgYXJyYXkpOworICAgIH0KKworICAgIHlpZWxkOworCisg
ICAgaWYgKCFQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5u
b3coKSAtIHN0YXJ0VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3Rh
cnRJdGVyYXRpb24sIDApOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1iaW5hcnkta2V5
cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvc3RyZXNzL2xhcmdlLWJpbmFyeS1r
ZXlzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYyMDcxNzk0MTZmMWMzOGU1NDNlYmJiOTA4NjNkZDk2MTZj
ZjIyYQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL3N0cmVz
cy9sYXJnZS1iaW5hcnkta2V5cy5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBpdGVyYXRpb25Db3VudCA9IDIwOwordmFyIG51
bWJlckRlbGV0ZWQgPSAwOworCisvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3Qg
YWhlYWQgb2YgdGltZS4KK3ZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1zdHJpbmcta2V5cy1E
Qi0iOworZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgeworICAg
IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZVByZWZpeCArIGkpLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoKytudW1iZXJEZWxldGVkID09IGl0ZXJhdGlvbkNv
dW50KQorICAgICAgICAgICAgc3RhcnRJdGVyYXRpb24oKTsKKyAgICB9Cit9CisKK3ZhciB0ZXN0
R2VuZXJhdG9yID0gbnVsbDsKK3ZhciBkYiA9IG51bGw7Cit2YXIgY3VycmVudEl0ZXJhdGlvbiA9
IDA7CisKK1BlcmZUZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAg
Y3VzdG9tSXRlcmF0aW9uQ291bnQ6IGl0ZXJhdGlvbkNvdW50LAorICAgIHVuaXQ6ICdtcycsCisg
ICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkYiA9IG51bGw7CisgICAgICAgIHRlc3RH
ZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5nYygpOworICAgICAgICAr
K2N1cnJlbnRJdGVyYXRpb247CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9u
KCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0gcnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAo
KTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAoKQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgp
OworfQorCit2YXIgYmFzZVN0cmluZzsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kp
CisgICAgYmFzZVN0cmluZyArPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCit2YXIg
bnVtYmVyT2ZJbnNlcnRzID0gNTA7Cit2YXIgYXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZJbnNl
cnRzKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnNlcnRzOyArK2kpIHsKKyAgICBh
cnJheVtpXSA9IG5ldyBBcnJheUJ1ZmZlcigyMDk3MTUyKTsKKyAgICB2YXIgdmlldyA9IG5ldyBJ
bnQzMkFycmF5KGFycmF5W2ldKTsKKyAgICB2aWV3W3ZpZXcubGVuZ3RoIC0gMV0gPSBpOworfQor
CitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRl
eGVkREIub3BlbihkYXRhYmFzZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24pOworICAgIG9wZW5S
ZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2FycmF5
cycpOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAg
IHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVubmVyLm5vdygpOworCisg
ICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2FycmF5cycsICdyZWFkd3JpdGUn
KS5vYmplY3RTdG9yZSgnYXJyYXlzJyk7CisgICAgb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25j
b21wbGV0ZSA9IG5leHRTdGVwOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZklu
c2VydHM7ICsraSkKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KCJTb21lIHZhbHVlISEhIiwgYXJy
YXlbaV0pOworCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVk
REIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMt
cmVzcG9uc2l2ZW5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzVhYzM3NGI3MzQyMTU3ZjI1NzI3YmQz
Nzg0ZjQ0Y2UyOGEyM2QyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRl
eGVkREIvc3RyZXNzL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWwK
QEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwor
dmFyIGl0ZXJhdGlvbkNvdW50ID0gMjA7Cit2YXIgbnVtYmVyRGVsZXRlZCA9IDA7CisKKy8vIERl
bGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgordmFyIGRhdGFi
YXNlUHJlZml4ID0gImxhcmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLURCLSI7
Citmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytpKSB7CisgICAgaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlUHJlZml4ICsgaSkub25zdWNjZXNzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICgrK251bWJlckRlbGV0ZWQgPT0gaXRlcmF0aW9uQ291bnQp
CisgICAgICAgICAgICBzdGFydEl0ZXJhdGlvbigpOworICAgIH0KK30KKwordmFyIHRlc3RHZW5l
cmF0b3IgPSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsK
KworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0
b21JdGVyYXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCisgICAgdW5pdDogJ21zJywKKyAgICBk
b25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgbGFyZ2VzdERl
bGF5ID0gMDsKKyAgICAgICAgdGVzdEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0
UnVubmVyLmdjKCk7CisgICAgICAgICsrY3VycmVudEl0ZXJhdGlvbjsKKyAgICB9Cit9KTsKKwor
ZnVuY3Rpb24gc3RhcnRJdGVyYXRpb24oKQoreworICAgIHRlc3RHZW5lcmF0b3IgPSBydW5JdGVy
YXRpb24oKTsKKyAgICBuZXh0U3RlcCgpOworfQorCitmdW5jdGlvbiBuZXh0U3RlcCgpCit7Cisg
ICAgdGVzdEdlbmVyYXRvci5uZXh0KCk7Cit9CisKK3ZhciBudW1iZXJPZk9iamVjdHMgPSA1MDAw
MDsKK3ZhciBvYmplY3RzVG9JbnNlcnQgPSBuZXcgQXJyYXkobnVtYmVyT2ZPYmplY3RzKTsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmplY3RzOyArK2kpIHsKKyAgICBvYmplY3RzVG9J
bnNlcnRbaV0gPSB7IGRhdGE6IE1hdGgucmFuZG9tKCkgfTsKKyAgICBvYmplY3RzVG9JbnNlcnRb
aV0uaWQgPSAnb2JqZWN0XycgKyBpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sK
KyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZVByZWZpeCArIGN1
cnJlbnRJdGVyYXRpb24pOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ29iamVjdHMnLCB7a2V5UGF0aDogJ2lkJ30pOworICAgIH0K
KyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisg
ICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ29iamVjdHMnLCAncmVhZHdyaXRl
Jykub2JqZWN0U3RvcmUoJ29iamVjdHMnKTsKKyAgICBvYmplY3RTdG9yZS50cmFuc2FjdGlvbi5v
bmNvbXBsZXRlID0gbmV4dFN0ZXA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZk9i
amVjdHM7ICsraSkKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KG9iamVjdHNUb0luc2VydFtpXSk7
CisKKyAgICBQZXJmVGVzdFJ1bm5lci5zdGFydENoZWNraW5nUmVzcG9uc2l2ZW5lc3MoKTsKKwor
ICAgIHlpZWxkOworCisgICAgUGVyZlRlc3RSdW5uZXIuc3RvcENoZWNraW5nUmVzcG9uc2l2ZW5l
c3MoKTsKKyAgICAKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKFBl
cmZUZXN0UnVubmVyLmxvbmdlc3RSZXNwb25zaXZlbmVzc0RlbGF5KCkpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWRE
Qi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMv
SW5kZXhlZERCL3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM2NjZmODA1MTk5MzAzOTJjYzJmMDgwZWY0MTcwMTlmOWQ1ODdjM2QKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2UtbnVtYmVyLW9mLWlu
c2VydHMuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCit2YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKK3ZhciBudW1iZXJEZWxldGVkID0g
MDsKKworLy8gRGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUu
Cit2YXIgZGF0YWJhc2VQcmVmaXggPSAibGFyZ2UtbnVtYmVyLW9mLWluc2VydHMtREItIjsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKKyAgICBpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VQcmVmaXggKyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkKKyAg
ICAgICAgICAgIHN0YXJ0SXRlcmF0aW9uKCk7CisgICAgfQorfQorCit2YXIgdGVzdEdlbmVyYXRv
ciA9IG51bGw7Cit2YXIgZGIgPSBudWxsOwordmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOworCitQ
ZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0
ZXJhdGlvbkNvdW50OiBpdGVyYXRpb25Db3VudCwKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9y
ID0gbnVsbDsKKyAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICAgICAgKytjdXJyZW50
SXRlcmF0aW9uOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7Cisg
ICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisK
K2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwor
dmFyIG51bWJlck9mT2JqZWN0cyA9IDEwMDAwMDsKK3ZhciBvYmplY3RzVG9JbnNlcnQgPSBuZXcg
QXJyYXkobnVtYmVyT2ZPYmplY3RzKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZPYmpl
Y3RzOyArK2kpIHsKKyAgICBvYmplY3RzVG9JbnNlcnRbaV0gPSB7IGRhdGE6IE1hdGgucmFuZG9t
KCkgfTsKKyAgICBvYmplY3RzVG9JbnNlcnRbaV0uaWQgPSAnb2JqZWN0XycgKyBpOworfQorCitm
dW5jdGlvbiAqcnVuSXRlcmF0aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVk
REIub3BlbihkYXRhYmFzZVByZWZpeCArIGN1cnJlbnRJdGVyYXRpb24pOworICAgIG9wZW5SZXF1
ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRiID0gZXZl
bnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ29iamVjdHMn
LCB7a2V5UGF0aDogJ2lkJ30pOworICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBu
ZXh0U3RlcDsKKworICAgIHlpZWxkOworCisgICAgdmFyIHN0YXJ0VGltZSA9IFBlcmZUZXN0UnVu
bmVyLm5vdygpOworCisgICAgdmFyIG9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ29iamVj
dHMnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ29iamVjdHMnKTsKKyAgICBvYmplY3RTdG9y
ZS50cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gbmV4dFN0ZXA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1iZXJPZk9iamVjdHM7ICsraSkKKyAgICAgICAgb2JqZWN0U3RvcmUucHV0KG9iamVj
dHNUb0luc2VydFtpXSk7CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0luZGV4ZWREQi9zdHJlc3MvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1zdHJpbmcta2V5cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZl
MzExMjA2YTg2NThkNzgzNzBmMGU2YzI5MzBkOGQ4YzMyMTBhMzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9zdHJlc3MvbGFyZ2Utc3RyaW5nLWtleXMuaHRt
bApAQCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
Cit2YXIgaXRlcmF0aW9uQ291bnQgPSAyMDsKK3ZhciBudW1iZXJEZWxldGVkID0gMDsKKworLy8g
RGVsZXRlIGFsbCBkYXRhYmFzZXMgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VQcmVmaXggPSAibGFyZ2Utc3RyaW5nLWtleXMtREItIjsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgaXRlcmF0aW9uQ291bnQgKyAxOyArK2kpIHsKKyAgICBpbmRleGVkREIuZGVsZXRlRGF0YWJh
c2UoZGF0YWJhc2VQcmVmaXggKyBpKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKCsrbnVtYmVyRGVsZXRlZCA9PSBpdGVyYXRpb25Db3VudCkKKyAgICAgICAgICAgIHN0YXJ0
SXRlcmF0aW9uKCk7CisgICAgfQorfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIg
ZGIgPSBudWxsOwordmFyIGN1cnJlbnRJdGVyYXRpb24gPSAwOworCitQZXJmVGVzdFJ1bm5lci5w
cmVwYXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoeworICAgIGN1c3RvbUl0ZXJhdGlvbkNvdW50OiBp
dGVyYXRpb25Db3VudCwKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgZGIgPSBudWxsOworICAgICAgICB0ZXN0R2VuZXJhdG9yID0gbnVsbDsKKyAgICAg
ICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKKyAgICAgICAgKytjdXJyZW50SXRlcmF0aW9uOworICAg
IH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVzdEdlbmVyYXRv
ciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0aW9uIG5leHRT
dGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwordmFyIGJhc2VTdHJpbmc7
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgIGJhc2VTdHJpbmcgKz0gImFi
Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKwordmFyIG51bWJlck9mSW5zZXJ0cyA9IDEwOwor
dmFyIGFycmF5ID0gbmV3IEFycmF5KG51bWJlck9mSW5zZXJ0cyk7Citmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mSW5zZXJ0czsgKytpKQorICAgIGFycmF5W2ldID0gYmFzZVN0cmluZyArIGk7
CisKK2Z1bmN0aW9uICpydW5JdGVyYXRpb24oKQoreworICAgIHZhciBvcGVuUmVxdWVzdCA9IGlu
ZGV4ZWREQi5vcGVuKGRhdGFiYXNlUHJlZml4ICsgY3VycmVudEl0ZXJhdGlvbik7CisgICAgb3Bl
blJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGIg
PSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnYXJy
YXlzJyk7CisgICAgfQorICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisg
ICAgeWllbGQ7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisK
KyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXJyYXlzJywgJ3JlYWR3cml0
ZScpLm9iamVjdFN0b3JlKCdhcnJheXMnKTsKKyAgICBvYmplY3RTdG9yZS50cmFuc2FjdGlvbi5v
bmNvbXBsZXRlID0gbmV4dFN0ZXA7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9m
SW5zZXJ0czsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQoIlNvbWUgdmFsdWUhISEiLCBh
cnJheVtpXSk7CisKKyAgICB5aWVsZDsKKworICAgIGlmICghUGVyZlRlc3RSdW5uZXIubWVhc3Vy
ZVZhbHVlQXN5bmMoUGVyZlRlc3RSdW5uZXIubm93KCkgLSBzdGFydFRpbWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzZXRUaW1lb3V0KHN0YXJ0SXRlcmF0aW9uLCAwKTsKK30KKworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NraXBw
ZWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NraXBwZWQKaW5kZXggNDgzZDE0ODRhZWY0NzJkNGY3MTUw
N2U5YjI2YzZkOGM2MmJhNmY4Ny4uMzBmZTkxOWYyZGE3MmQ4M2I1ZTQwNDg0OWMxZjA0MTRmZWQ2
ZWMzNiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Ta2lwcGVkCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU2tpcHBlZApAQCAtMTE0LDE3ICsxMTQsMTcgQEAgTWVkaWEvCiBNZWRpYVRpbWUv
CiAKICMgQnVncyAxNjc2MjIsIDE2NzYzNywgMTY3NjM4IGFuZCAxNjc2NDAgLSBTb21lIEluZGV4
ZWREQiB0ZXN0IGRlYWRsb2NrIG9uIHRoZSBHVEsrIHBlcmYgYm90LgotW0dUS10gSW5kZXhlZERC
L2luZGV4LWdldC5odG1sCi1bR1RLXSBJbmRleGVkREIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMu
aHRtbAotW0dUS10gSW5kZXhlZERCL29iamVjdHN0b3JlLWN1cnNvci5odG1sCi1bR1RLXSBJbmRl
eGVkREIvb2JqZWN0c3RvcmUtZ2V0Lmh0bWwKK1tHVEtdIEluZGV4ZWREQi9iYXNpYy9pbmRleC1n
ZXQuaHRtbAorW0dUS10gSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5o
dG1sCitbR1RLXSBJbmRleGVkREIvYmFzaWMvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKK1tHVEtd
IEluZGV4ZWREQi9iYXNpYy9vYmplY3RzdG9yZS1nZXQuaHRtbAogCiAjIEJ1ZyAxNjc2MjMgLSBb
R1RLXVtFRkxdIFBlcmZvcm1hbmNlIHRlc3QgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNl
cnRzLXJlc3BvbnNpdmVuZXNzLmh0bWwgdGltZW91dHMuCiBbRUZMXSBJbmRleGVkREIvbGFyZ2Ut
bnVtYmVyLW9mLWluc2VydHMtcmVzcG9uc2l2ZW5lc3MuaHRtbAogW0dUS10gSW5kZXhlZERCL2xh
cmdlLW51bWJlci1vZi1pbnNlcnRzLXJlc3BvbnNpdmVuZXNzLmh0bWwKIAogIyBCdWcgMTY3NjE2
IC0gUGVyZm9ybWFuY2UgdGVzdCBJbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbCBjcmVh
dGVzIGEgREIgb2YgbW9yZSB0aGFuIDZHQiBhbmQgdGFrZXMgbW9yZSB0aGFuIDEwIG1pbnV0ZXMg
dG8gcnVuLgotW0dUS10gSW5kZXhlZERCL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwKK1tHVEtdIElu
ZGV4ZWREQi9zdHJlc3MvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbAogCiAjIFJFR1JFU1NJT04gKHIy
NDI5MTE/KTogSGlnaCBTaWVycmEgUmVsZWFzZSBXSzIgUGVyZiBib3QgdGltaW5nIG91dCB3aGls
ZSBydW5uaW5nIEluZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCi1JbmRleGVk
REIvbGFyZ2UtbnVtYmVyLW9mLWluc2VydHMuaHRtbAorSW5kZXhlZERCL3N0cmVzcy9sYXJnZS1u
dW1iZXItb2YtaW5zZXJ0cy5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>