<?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>169976</bug_id>
          
          <creation_ts>2017-03-22 16:15:36 -0700</creation_ts>
          <short_desc>WebAssembly: add memory fuzzer</short_desc>
          <delta_ts>2017-05-16 00:23:39 -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>JavaScriptCore</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>
          <dependson>170137</dependson>
          <blocked>159775</blocked>
    
    <blocked>171936</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1290249</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-22 16:15:36 -0700</bug_when>
    <thetext>First stab at it forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290252</commentid>
    <comment_count>1</comment_count>
      <attachid>305135</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-22 16:18:43 -0700</bug_when>
    <thetext>Created attachment 305135
memory.js

Here&apos;s a first attempt at it. I still have a few things to add so it&apos;s not a patch yet. I&apos;ll work on this when I have downtime on other patches.

Sample output with 64 iterations, verbose on, takes 2.6s to run in debug:

+ memory: section, max:
+ memory: imported, exported:
^ invoke:
    instances[0].func()
    instances[0].max()
    instances[0].throws()
    instances[0].max()
+ memory: section:
+ memory: section:
+ memory: none:
- delete:
    delete 0 / 4
    delete 0 / 3
    delete 1 / 2
+ memory: section, exported, max:
+ memory: section, exported, max:
+ memory: empty, section:
+ memory: empty, section:
+ memory: none:
+ memory: empty, section:
+ memory: empty, section:
- delete:
    delete 0 / 8
+ memory: empty, section:
- delete:
    delete 6 / 8
    delete 6 / 7
+ memory: section, exported, max:
- delete:
    delete 3 / 7
    delete 0 / 6
    delete 0 / 5
    delete 1 / 4
    delete 1 / 3
    delete 0 / 2
+ memory: none:
- delete:
    delete 0 / 2
    delete 0 / 1
+ memory: empty, section:
+ memory: empty, section:
- delete:
    delete 1 / 2
    delete 0 / 1
^ invoke:
    nothing to invoke
+ memory: section:
+ memory: section, exported, max:
+ memory: section, exported, max:
+ memory: empty, section:
+ memory: none:
- delete:
    delete 1 / 5
    delete 1 / 4
    delete 2 / 3
^ invoke:
    instances[0].max()
    instances[1].get()
    instances[1].grow()
        Grow from 0 (max 4) to 2 returned 0, current now 2
    instances[1].get()
+ memory: none:
+ memory: section, exported, max:
+ memory: empty, section:
^ invoke:
    instances[1].max()
    instances[4].throws()
    instances[1].current()
    instances[4].get()
+ memory: section, max:
+ memory: imported, exported:
+ memory: none:
+ memory: none:
+ memory: section, max:
+ memory: section, max:
- delete:
    delete 0 / 11
    delete 3 / 10
    delete 5 / 9
    delete 4 / 8
    delete 2 / 7
    delete 3 / 6
    delete 3 / 5
+ memory: section, exported, max:
+ memory: section, max:
+ memory: section:
+ memory: imported, exported:
+ memory: none:
+ memory: section:
+ memory: section, exported:
+ memory: section, exported, max:
+ memory: section, max:
+ memory: none:
+ memory: empty, section:
+ memory: section:
+ memory: imported, exported:
^ invoke:
    instances[13].throws()
    instances[10].grow()
        Grow from 0 (max 3) to 7 returned -1, current now 0
    instances[3].func()
    instances[7].current()
+ memory: none:
+ memory: section:
+ memory: none:
+ memory: imported, exported:
+ memory: empty, section:
- delete:
    delete 20 / 22
    delete 13 / 21
    delete 15 / 20
    delete 7 / 19
    delete 7 / 18
    delete 2 / 17
    delete 10 / 16
    delete 7 / 15
    delete 4 / 14
    delete 7 / 13
    delete 6 / 12
    delete 0 / 11
    delete 5 / 10
    delete 8 / 9
    delete 7 / 8
+ memory: section, exported:
Finalizing:
    delete 3 / 8
    delete 5 / 7
    delete 5 / 6
    delete 0 / 5
    delete 0 / 4
    delete 1 / 3
    delete 0 / 2
    delete 0 / 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304074</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-03 09:55:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/31965328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306935</commentid>
    <comment_count>3</comment_count>
      <attachid>309622</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-05-10 11:36:52 -0700</bug_when>
    <thetext>Created attachment 309622
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306936</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-10 11:39:44 -0700</bug_when>
    <thetext>Attachment 309622 did not pass style-queue:


ERROR: JSTests/ChangeLog:3:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: fuzzer  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309012</commentid>
    <comment_count>5</comment_count>
      <attachid>309622</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-15 23:55:14 -0700</bug_when>
    <thetext>Comment on attachment 309622
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309033</commentid>
    <comment_count>6</comment_count>
      <attachid>309622</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-16 00:23:38 -0700</bug_when>
    <thetext>Comment on attachment 309622
patch

Clearing flags on attachment: 309622

Committed r216913: &lt;http://trac.webkit.org/changeset/216913&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309034</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-16 00:23:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>305135</attachid>
            <date>2017-03-22 16:18:43 -0700</date>
            <delta_ts>2017-05-10 11:36:52 -0700</delta_ts>
            <desc>memory.js</desc>
            <filename>memory.js</filename>
            <type>application/x-javascript</type>
            <size>15474</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CmltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnOwoKLy8gRklYTUU6IGFkZCB0aGUgZm9sbG93aW5nOgovLyAgLSBh
ZGQgc2V0KCkgYW5kIHNoYWRvdyBtZW1vcnksIHRoaXMgcmVxdWlyZXMgdHJhY2tpbmcgd2hlbiBt
ZW1vcnkgaXMgc2hhcmVkCi8vICAtIFN1cHBvcnQ6IGVtcHR5LCBleHBvcnRlZAovLyAgLSBJbXBv
cnRlZCBtZW1vcnkgY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkgKGJvdGggYmVmb3JlIGFuZCBh
ZnRlciBpbnN0YW50aWF0aW9uLCB0byBjYXVzZSByZWNvbXBpbGF0aW9uKQovLyAgLSByZWN1cnNp
dmUgY2FsbHMgKHJhbmRvbWx5IGNhbGwgb3RoZXIgaW5zdGFuY2UncyBleHBvcnRzLCBwb3RlbnRp
YWxseSBleGhhdXN0aW5nIHN0YWNrKQovLyAgLSBTaW1wbGlmeSBjb2RlIGJ5IGFsbG93aW5nIC5D
b2RlKCkuRXhwb3J0RnVuY3Rpb24oLi4uKSBpbiBidWlsZGVyCgpjb25zdCB0dW5lID0gewogICAg
dmVyYm9zZTogdHJ1ZSwKICAgIG51bVJhbmRvbUl0ZXJhdGlvbnM6IDY0LAogICAgbnVtUmFuZG9t
SW52b2tlczogNCwKICAgIG1heEluaXRpYWw6IDgsCiAgICBtYXhNYXg6IDgsCiAgICBtYXhHcm93
OiA4LAogICAgbWVtb3J5R2V0Q291bnQ6IDEwMjQsCn07Cgpjb25zdCBwYWdlU2l6ZSA9IDY0ICog
MTAyNDsgLy8gQXMgZGV0ZXJtaW5lZCBieSB0aGUgV2ViQXNzZW1ibHkgc3BlY2lmaWNhdGlvbi4K
CmxldCBpbnN0YW5jZXMgPSBbXTsKCmNvbnN0IGluc2VydCA9IChidWlsZGVyLCBpbXBvcnRPYmpl
Y3QgPSB1bmRlZmluZWQpID0+IHsKICAgIGNvbnN0IGxvY2F0aW9uID0gKE1hdGgucmFuZG9tKCkg
KiBpbnN0YW5jZXMubGVuZ3RoKSB8IDA7CiAgICBpbnN0YW5jZXMuc3BsaWNlKGxvY2F0aW9uLCAw
LCBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBpbXBvcnRPYmplY3QpKTsKfQpjb25zdCBpbml0aWFsTWF4
T2JqZWN0ID0gaGFzTWF4ID0+IHsKICAgIGNvbnN0IGluaXRpYWwgPSAoTWF0aC5yYW5kb20oKSAq
IHR1bmUubWF4SW5pdGlhbCkgfCAwOwogICAgaWYgKCFoYXNNYXgpCiAgICAgICAgcmV0dXJuIHsg
aW5pdGlhbDogaW5pdGlhbCwgbWF4OiB1bmRlZmluZWQgfTsKICAgIGNvbnN0IG1heCA9IGluaXRp
YWwgKyAoKE1hdGgucmFuZG9tKCkgKiB0dW5lLm1heE1heCkgfCAwKTsKICAgIHJldHVybiB7IGlu
aXRpYWw6IGluaXRpYWwsIG1heDogbWF4IH07Cn07CmNvbnN0IGluaXRpYWxNYXhPYmplY3RGcm9t
ID0gaW5zdGFuY2UgPT4gewogICAgY29uc3QgaGFzTWF4ID0gaW5zdGFuY2UuZXhwb3J0c1sibWF4
Il0gIT09IHVuZGVmaW5lZDsKICAgIGNvbnN0IGluaXRpYWwgPSAoTWF0aC5yYW5kb20oKSAqIGlu
c3RhbmNlLmV4cG9ydHMuaW5pdGlhbCgpKSB8IDA7CiAgICBpZiAoIWhhc01heCkKICAgICAgICBy
ZXR1cm4geyBpbml0aWFsOiBpbml0aWFsIH07CiAgICBjb25zdCBtYXggPSBNYXRoLm1heChpbml0
aWFsLCBpbnN0YW5jZS5leHBvcnRzLm1heCgpKSArICgoTWF0aC5yYW5kb20oKSAqIHR1bmUubWF4
TWF4KSB8IDApOwogICAgcmV0dXJuIHsgaW5pdGlhbDogaW5pdGlhbCwgbWF4OiBtYXggfTsKfTsK
CmNvbnN0IGFjdGlvbiA9IHsKICAgICctIGRlbGV0ZSc6ICgpID0+IHsKICAgICAgICBmb3IgKGxl
dCBjb3VudCA9IDEgKyAoTWF0aC5yYW5kb20oKSAqIGluc3RhbmNlcy5sZW5ndGgpIHwgMDsgaW5z
dGFuY2VzLmxlbmd0aCAmJiBjb3VudDsgLS1jb3VudCkgewogICAgICAgICAgICBjb25zdCB3aGlj
aCA9IChNYXRoLnJhbmRvbSgpICogaW5zdGFuY2VzLmxlbmd0aCkgfCAwOwogICAgICAgICAgICBp
ZiAodHVuZS52ZXJib3NlKQogICAgICAgICAgICAgICAgcHJpbnQoYCAgICBkZWxldGUgJHt3aGlj
aH0gLyAke2luc3RhbmNlcy5sZW5ndGh9YCk7CiAgICAgICAgICAgIGluc3RhbmNlcy5zcGxpY2Uo
d2hpY2gsIDEpOwogICAgICAgIH0KICAgIH0sCiAgICAnXiBpbnZva2UnOiAoKSA9PiB7CiAgICAg
ICAgaWYgKCFpbnN0YW5jZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmICh0dW5lLnZlcmJvc2Up
CiAgICAgICAgICAgICAgICBwcmludChgICAgIG5vdGhpbmcgdG8gaW52b2tlYCk7CiAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaXRlcmF0aW9ucyA9IDA7IGl0
ZXJhdGlvbnMgPCB0dW5lLm51bVJhbmRvbUludm9rZXM7ICsraXRlcmF0aW9ucykgewogICAgICAg
ICAgICBjb25zdCB3aGljaEluc3RhbmNlID0gKE1hdGgucmFuZG9tKCkgKiBpbnN0YW5jZXMubGVu
Z3RoKSB8IDA7CiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzW3doaWNoSW5z
dGFuY2VdOwogICAgICAgICAgICBjb25zdCB3aGljaEV4cG9ydCA9IChNYXRoLnJhbmRvbSgpICog
T2JqZWN0LmtleXMoaW5zdGFuY2UuZXhwb3J0cykubGVuZ3RoKSB8IDA7CiAgICAgICAgICAgIGlm
ICh0dW5lLnZlcmJvc2UpCiAgICAgICAgICAgICAgICBwcmludChgICAgIGluc3RhbmNlc1ske3do
aWNoSW5zdGFuY2V9XS4ke09iamVjdC5rZXlzKGluc3RhbmNlLmV4cG9ydHMpW3doaWNoRXhwb3J0
XX0oKWApOwogICAgICAgICAgICBzd2l0Y2ggKE9iamVjdC5rZXlzKGluc3RhbmNlLmV4cG9ydHMp
W3doaWNoRXhwb3J0XSkgewogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtIGZvciBrZXkgJyR7T2JqZWN0Lmtl
eXMoaW5zdGFuY2UuZXhwb3J0cylbd2hpY2hFeHBvcnRdfSdgKTsKICAgICAgICAgICAgY2FzZSAn
ZnVuYyc6CiAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mdW5jKCks
IDQyKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0aHJvd3MnOiB7
CiAgICAgICAgICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGxldCBh
ZGRyZXNzID0gMDsKICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5leHBvcnRzWyJjdXJyZW50
Il0pIHsKICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaGFzIGEgbWVtb3J5Lgog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbnN0YW5jZS5leHBvcnRzLmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBpbnN0YW5jZS5leHBvcnRzWyJt
YXgiXSA/IGluc3RhbmNlLmV4cG9ydHMubWF4KCkgOiAoMSA8PCAxNSk7CiAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzcyA9IHBhZ2VTaXplICogKGN1cnJlbnQgKyAoKE1hdGgucmFuZG9tKCkgKiAo
bWF4IC0gY3VycmVudCkpIHwgMCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
Ly8gTm8gbWVtb3J5IGluIHRoaXMgaW5zdGFuY2UuCiAgICAgICAgICAgICAgICB0cnkgeyBpbnN0
YW5jZS5leHBvcnRzLnRocm93cyhhZGRyZXNzKTsgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGUp
IHsgdGhyZXcgPSB0cnVlOyB9CiAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsK
ICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgY2FzZSAnZ2V0JzogewogICAgICAgICAg
ICAgICAgY29uc3QgY3VycmVudCA9IGluc3RhbmNlLmV4cG9ydHMuY3VycmVudCgpOwogICAgICAg
ICAgICAgICAgZm9yIChsZXQgYWNjZXNzID0gdHVuZS5tZW1vcnlHZXRDb3VudDsgY3VycmVudCAm
JiBhY2Nlc3M7IC0tYWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9
IChNYXRoLnJhbmRvbSgpICogKGN1cnJlbnQgKiBwYWdlU2l6ZSAtIDQpKSB8IDA7CiAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZ2V0KGFkZHJlc3MpLCAwKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgY2FzZSAn
Y3VycmVudCc6CiAgICAgICAgICAgICAgICBhc3NlcnQubGUoaW5zdGFuY2UuZXhwb3J0cy5pbml0
aWFsKCksIGluc3RhbmNlLmV4cG9ydHMuY3VycmVudCgpKTsKICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICBjYXNlICdpbml0aWFsJzoKICAgICAgICAgICAgICAgIGFzc2VydC5sZSgw
LCBpbnN0YW5jZS5leHBvcnRzLmluaXRpYWwoKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgY2FzZSAnbWF4JzoKICAgICAgICAgICAgICAgIGFzc2VydC5sZShpbnN0YW5jZS5l
eHBvcnRzLmluaXRpYWwoKSwgaW5zdGFuY2UuZXhwb3J0cy5tYXgoKSk7CiAgICAgICAgICAgICAg
ICBhc3NlcnQubGUoaW5zdGFuY2UuZXhwb3J0cy5jdXJyZW50KCksIGluc3RhbmNlLmV4cG9ydHMu
bWF4KCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21lbW9yeSc6
IHsKICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbnN0YW5jZS5leHBvcnRzLmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShpbnN0
YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXIpOwogICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGJ1
ZmZlci5ieXRlTGVuZ3RoLCBjdXJyZW50ICogcGFnZVNpemUpOwogICAgICAgICAgICAgICAgZm9y
IChsZXQgYWNjZXNzID0gdHVuZS5tZW1vcnlHZXRDb3VudDsgY3VycmVudCAmJiBhY2Nlc3M7IC0t
YWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IChNYXRoLnJhbmRv
bSgpICogKGN1cnJlbnQgKiBwYWdlU2l6ZSAtIDQpKSB8IDA7CiAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZ2V0KGFkZHJlc3MpLCAwKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgY2FzZSAnZ3Jvdyc6IHsKICAg
ICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbnN0YW5jZS5leHBvcnRzLmN1cnJlbnQoKTsK
ICAgICAgICAgICAgICAgIGNvbnN0IGJ5ID0gKE1hdGgucmFuZG9tKCkgKiB0dW5lLm1heEdyb3cp
IHwgMDsKICAgICAgICAgICAgICAgIGNvbnN0IGhhc01heCA9IGluc3RhbmNlLmV4cG9ydHNbIm1h
eCJdICE9PSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpbnN0YW5j
ZS5leHBvcnRzLmdyb3coY3VycmVudCArIGJ5KTsKICAgICAgICAgICAgICAgIGlmICh0dW5lLnZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgR3JvdyBmcm9tICR7Y3Vy
cmVudH0gKG1heCAke2hhc01heCA/IGluc3RhbmNlLmV4cG9ydHMubWF4KCkgOiAibm9uZSJ9KSB0
byAke2N1cnJlbnQgKyBieX0gcmV0dXJuZWQgJHtyZXN1bHR9LCBjdXJyZW50IG5vdyAke2luc3Rh
bmNlLmV4cG9ydHMuY3VycmVudCgpfWApOwogICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGN1cnJl
bnQsIGluc3RhbmNlLmV4cG9ydHMuY3VycmVudCgpKTsKICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT09IC0xKQogICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcShjdXJyZW50LCBpbnN0YW5j
ZS5leHBvcnRzLmN1cnJlbnQoKSk7CiAgICAgICAgICAgICAgICBpZiAoaGFzTWF4KQogICAgICAg
ICAgICAgICAgICAgIGFzc2VydC5sZShpbnN0YW5jZS5leHBvcnRzLmN1cnJlbnQoKSwgaW5zdGFu
Y2UuZXhwb3J0cy5tYXgoKSk7CiAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9LAogICAgJysgbWVtb3J5OiBub25lJzogKCkgPT4gewogICAgICAgIGNvbnN0
IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKICAgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCiAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAgICAgICAgICAuRXhwb3J0KCkuRnVu
Y3Rpb24oImZ1bmMiKS5GdW5jdGlvbigidGhyb3dzIikuRW5kKCkKICAgICAgICAgICAgICAuQ29k
ZSgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KS5JMzJDb25zdCg0MikuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAg
LkZ1bmN0aW9uKCJ0aHJvd3MiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5VbnJlYWNoYWJsZSgpLlJl
dHVybigpLkVuZCgpCiAgICAgICAgICAgICAgLkVuZCgpOwogICAgICAgIGluc2VydChidWlsZGVy
KTsKICAgIH0sCiAgICAnKyBtZW1vcnk6IGVtcHR5LCBzZWN0aW9uJzogKCkgPT4gewogICAgICAg
IGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKICAgICAgICAgICAgICAuVHlwZSgpLkVu
ZCgpCiAgICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAgICAgICAgICAuTWVtb3J5
KCkuSW5pdGlhbE1heFBhZ2VzKDAsIDApLkVuZCgpCiAgICAgICAgICAgICAgLkV4cG9ydCgpLkZ1
bmN0aW9uKCJmdW5jIikuRnVuY3Rpb24oInRocm93cyIpLkZ1bmN0aW9uKCJjdXJyZW50IikuRnVu
Y3Rpb24oImluaXRpYWwiKS5GdW5jdGlvbigiZ3JvdyIpLkZ1bmN0aW9uKCJtYXgiKS5FbmQoKQog
ICAgICAgICAgICAgIC5Db2RlKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQog
ICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0p
LkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjdXJyZW50IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkN1cnJl
bnRNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJn
cm93IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkuR2V0TG9jYWwoMCkuR3Jvd01l
bW9yeSgwKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImluaXRp
YWwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoMCkuUmV0dXJuKCkuRW5k
KCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYXgiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkuSTMyQ29uc3QoMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAuRW5kKCk7
CiAgICAgICAgaW5zZXJ0KGJ1aWxkZXIpOwogICAgfSwKICAgICcrIG1lbW9yeTogc2VjdGlvbic6
ICgpID0+IHsKICAgICAgICBjb25zdCBpbml0aWFsTWF4ID0gaW5pdGlhbE1heE9iamVjdChmYWxz
ZSk7CiAgICAgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQogICAgICAgICAgICAg
IC5UeXBlKCkuRW5kKCkKICAgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAg
ICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoaW5pdGlhbE1heC5pbml0aWFsLCBpbml0aWFs
TWF4Lm1heCkuRW5kKCkKICAgICAgICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImZ1bmMiKS5G
dW5jdGlvbigidGhyb3dzIikuRnVuY3Rpb24oImdldCIpLkZ1bmN0aW9uKCJjdXJyZW50IikuRnVu
Y3Rpb24oImluaXRpYWwiKS5GdW5jdGlvbigiZ3JvdyIpLkVuZCgpCiAgICAgICAgICAgICAgLkNv
ZGUoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkuSTMyQ29uc3QoNDIpLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigidGhyb3dzIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuR2V0TG9jYWwoMCkuSTMy
TG9hZCgyLCAwKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdl
dCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkkzMkxvYWQo
MiwgMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJjdXJyZW50
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkN1cnJlbnRNZW1vcnkoMCkuUmV0dXJuKCku
RW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93IiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogImkzMiIgfSkuR2V0TG9jYWwoMCkuR3Jvd01lbW9yeSgwKS5SZXR1cm4oKS5FbmQo
KQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1heC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQog
ICAgICAgICAgICAgIC5FbmQoKTsKICAgICAgICBpbnNlcnQoYnVpbGRlcik7CiAgICB9LAogICAg
JysgbWVtb3J5OiBzZWN0aW9uLCBtYXgnOiAoKSA9PiB7CiAgICAgICAgY29uc3QgaW5pdGlhbE1h
eCA9IGluaXRpYWxNYXhPYmplY3QodHJ1ZSk7CiAgICAgICAgY29uc3QgYnVpbGRlciA9IChuZXcg
QnVpbGRlcigpKQogICAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKICAgICAgICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQogICAgICAgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoaW5p
dGlhbE1heC5pbml0aWFsLCBpbml0aWFsTWF4Lm1heCkuRW5kKCkKICAgICAgICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImZ1bmMiKS5GdW5jdGlvbigidGhyb3dzIikuRnVuY3Rpb24oImdldCIp
LkZ1bmN0aW9uKCJjdXJyZW50IikuRnVuY3Rpb24oImluaXRpYWwiKS5GdW5jdGlvbigiZ3JvdyIp
LkZ1bmN0aW9uKCJtYXgiKS5FbmQoKQogICAgICAgICAgICAgIC5Db2RlKCkKICAgICAgICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNv
bnN0KDQyKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93
cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJu
KCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJnZXQiLCB7IHBhcmFtczogWyJp
MzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5JMzJMb2FkKDIsIDApLlJldHVybigpLkVu
ZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0p
LkdldExvY2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJpbml0aWFsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNv
bnN0KGluaXRpYWxNYXguaW5pdGlhbCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAg
LkZ1bmN0aW9uKCJtYXgiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoaW5p
dGlhbE1heC5tYXgpLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgLkVuZCgpOwogICAgICAg
IGluc2VydChidWlsZGVyKTsKICAgIH0sCiAgICAnKyBtZW1vcnk6IHNlY3Rpb24sIGV4cG9ydGVk
JzogKCkgPT4gewogICAgICAgIGNvbnN0IGluaXRpYWxNYXggPSBpbml0aWFsTWF4T2JqZWN0KGZh
bHNlKTsKICAgICAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCiAgICAgICAgICAg
ICAgLlR5cGUoKS5FbmQoKQogICAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAg
ICAgICAgLk1lbW9yeSgpLkluaXRpYWxNYXhQYWdlcyhpbml0aWFsTWF4LmluaXRpYWwsIGluaXRp
YWxNYXgubWF4KS5FbmQoKQogICAgICAgICAgICAgIC5FeHBvcnQoKQogICAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImZ1bmMiKS5GdW5jdGlvbigidGhyb3dzIikuRnVuY3Rpb24oImdldCIpLkZ1
bmN0aW9uKCJjdXJyZW50IikuRnVuY3Rpb24oImluaXRpYWwiKQogICAgICAgICAgICAgICAgICAu
TWVtb3J5KCJtZW1vcnkiLCAwKQogICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAgICAgIC5D
b2RlKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2FsKDApLkkz
MkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJn
ZXQiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5JMzJMb2Fk
KDIsIDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVu
dCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigp
LkVuZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0dXJuKCkuRW5k
KCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbml0aWFsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KGluaXRpYWxNYXguaW5pdGlhbCkuUmV0dXJuKCkuRW5kKCkK
ICAgICAgICAgICAgICAuRW5kKCk7CiAgICAgICAgaW5zZXJ0KGJ1aWxkZXIpOwogICAgfSwKICAg
ICcrIG1lbW9yeTogc2VjdGlvbiwgZXhwb3J0ZWQsIG1heCc6ICgpID0+IHsKICAgICAgICBjb25z
dCBpbml0aWFsTWF4ID0gaW5pdGlhbE1heE9iamVjdCh0cnVlKTsKICAgICAgICBjb25zdCBidWls
ZGVyID0gKG5ldyBCdWlsZGVyKCkpCiAgICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQogICAgICAg
ICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAgICAgICAgLk1lbW9yeSgpLkluaXRpYWxN
YXhQYWdlcyhpbml0aWFsTWF4LmluaXRpYWwsIGluaXRpYWxNYXgubWF4KS5FbmQoKQogICAgICAg
ICAgICAgIC5FeHBvcnQoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiKS5GdW5j
dGlvbigidGhyb3dzIikuRnVuY3Rpb24oImdldCIpLkZ1bmN0aW9uKCJjdXJyZW50IikuRnVuY3Rp
b24oImluaXRpYWwiKS5GdW5jdGlvbigiZ3JvdyIpLkZ1bmN0aW9uKCJtYXgiKQogICAgICAgICAg
ICAgICAgICAuTWVtb3J5KCJtZW1vcnkiLCAwKQogICAgICAgICAgICAgIC5FbmQoKQogICAgICAg
ICAgICAgIC5Db2RlKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQogICAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExv
Y2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1
bmN0aW9uKCJnZXQiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgw
KS5JMzJMb2FkKDIsIDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlv
bigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDAp
LlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFy
YW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0
dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbml0aWFsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KGluaXRpYWxNYXguaW5pdGlhbCkuUmV0dXJu
KCkuRW5kKCkKICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYXgiLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1heC5tYXgpLlJldHVybigpLkVuZCgpCiAg
ICAgICAgICAgICAgLkVuZCgpOwogICAgICAgIGluc2VydChidWlsZGVyKTsKICAgIH0sCiAgICAn
KyBtZW1vcnk6IGltcG9ydGVkLCBleHBvcnRlZCc6ICgpID0+IHsKICAgICAgICBsZXQgaW1wb3J0
RnJvbTsKICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBpbnN0YW5jZXMubGVuZ3RoOyAr
K2lkeCkKICAgICAgICAgICAgaWYgKGluc3RhbmNlc1tpZHhdLmV4cG9ydHMubWVtb3J5KSB7CiAg
ICAgICAgICAgICAgICBpbXBvcnRGcm9tID0gaW5zdGFuY2VzW2lkeF07CiAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIGlmICghaW1wb3J0RnJvbSkKICAgICAgICAg
ICAgcmV0dXJuOyAvLyBObyBtZW1vcnkgY291bGQgYmUgaW1wb3J0ZWQuCiAgICAgICAgY29uc3Qg
aW5pdGlhbE1heCA9IGluaXRpYWxNYXhPYmplY3RGcm9tKGltcG9ydEZyb20pOwogICAgICAgIGlm
IChpbXBvcnRGcm9tLmV4cG9ydHNbIm1heCJdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAg
Y29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQogICAgICAgICAgICAgICAgICAuVHlwZSgp
LkVuZCgpCiAgICAgICAgICAgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnki
LCBpbml0aWFsTWF4KS5FbmQoKQogICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQog
ICAgICAgICAgICAgICAgICAuRXhwb3J0KCkKICAgICAgICAgICAgICAgICAgICAgIC5GdW5jdGlv
bigiZnVuYyIpLkZ1bmN0aW9uKCJ0aHJvd3MiKS5GdW5jdGlvbigiZ2V0IikuRnVuY3Rpb24oImN1
cnJlbnQiKS5GdW5jdGlvbigiaW5pdGlhbCIpCiAgICAgICAgICAgICAgICAgICAgICAuTWVtb3J5
KCJtZW1vcnkiLCAwKQogICAgICAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgICAgICAgICAg
LkNvZGUoKQogICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvd3MiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5HZXRM
b2NhbCgwKS5JMzJMb2FkKDIsIDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImdldCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExv
Y2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50
TWVtb3J5KDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
Imdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5Hcm93
TWVtb3J5KDApLlJldHVybigpLkVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
ImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1h
eC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQogICAgICAgICAgICAgICAgICAuRW5kKCk7CiAgICAg
ICAgICAgIGluc2VydChidWlsZGVyLCB7IGltcDogeyBtZW1vcnk6IGltcG9ydEZyb20uZXhwb3J0
cy5tZW1vcnkgfSB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCiAgICAgICAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKICAgICAg
ICAgICAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIGluaXRpYWxNYXgp
LkVuZCgpCiAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAgICAgICAg
ICAgIC5FeHBvcnQoKQogICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIikuRnVu
Y3Rpb24oInRocm93cyIpLkZ1bmN0aW9uKCJnZXQiKS5GdW5jdGlvbigiY3VycmVudCIpLkZ1bmN0
aW9uKCJpbml0aWFsIikuRnVuY3Rpb24oImdyb3ciKS5GdW5jdGlvbigibWF4IikKICAgICAgICAg
ICAgICAgICAgICAgIC5NZW1vcnkoIm1lbW9yeSIsIDApCiAgICAgICAgICAgICAgICAgIC5FbmQo
KQogICAgICAgICAgICAgICAgICAuQ29kZSgpCiAgICAgICAgICAgICAgICAgICAgICAuRnVuY3Rp
b24oImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoNDIpLlJldHVy
bigpLkVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFy
YW1zOiBbImkzMiJdIH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkK
ICAgICAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZ2V0IiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogImkzMiIgfSkuR2V0TG9jYWwoMCkuSTMyTG9hZCgyLCAwKS5SZXR1cm4oKS5FbmQoKQog
ICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJjdXJyZW50IiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pLkN1cnJlbnRNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAg
ICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIi
IH0pLkdldExvY2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAg
ICAgICAgICAgIC5GdW5jdGlvbigiaW5pdGlhbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KS5JMzJDb25zdChpbml0aWFsTWF4LmluaXRpYWwpLlJldHVybigpLkVuZCgpCiAgICAgICAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oIm1heCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5J
MzJDb25zdChpbml0aWFsTWF4Lm1heCkuUmV0dXJuKCkuRW5kKCkKICAgICAgICAgICAgICAgICAg
LkVuZCgpOwogICAgICAgICAgICBpbnNlcnQoYnVpbGRlciwgeyBpbXA6IHsgbWVtb3J5OiBpbXBv
cnRGcm9tLmV4cG9ydHMubWVtb3J5IH0gfSk7CiAgICAgICAgfQogICAgfSwKfTsKY29uc3QgbnVt
QWN0aW9ucyA9IE9iamVjdC5rZXlzKGFjdGlvbikubGVuZ3RoOwpjb25zdCBwZXJmb3JtQWN0aW9u
ID0gKCkgPT4gewogICAgY29uc3Qgd2hpY2ggPSAoTWF0aC5yYW5kb20oKSAqIG51bUFjdGlvbnMp
IHwgMDsKICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGFjdGlvbilbd2hpY2hdOwogICAgaWYg
KHR1bmUudmVyYm9zZSkKICAgICAgICBwcmludChgJHtrZXl9OmApOwogICAgYWN0aW9uW2tleV0o
KTsKfTsKCmZvciAobGV0IGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IHR1bmUubnVtUmFuZG9t
SXRlcmF0aW9uczsgKytpdGVyYXRpb24pCiAgICBwZXJmb3JtQWN0aW9uKCk7CgppZiAodHVuZS52
ZXJib3NlKQogICAgcHJpbnQoYEZpbmFsaXppbmc6YCk7CgovLyBGaW5pc2ggYnkgZGVsZXRpbmcg
dGhlIGluc3RhbmNlcyBpbiBhIHJhbmRvbSBvcmRlci4Kd2hpbGUgKGluc3RhbmNlcy5sZW5ndGgp
CiAgICBhY3Rpb25bIi0gZGVsZXRlIl0oKTsK
</data>
<flag name="commit-queue"
          id="326606"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309622</attachid>
            <date>2017-05-10 11:36:52 -0700</date>
            <delta_ts>2017-05-16 00:23:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Memory-fuzzer.patch</filename>
            <type>text/plain</type>
            <size>17154</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBiMGVlNzBhZjU2YWI4ZGU4NzBiZjBlM2ViMDExOTRkMjhjODQwYzlmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBXZWQsIDEwIE1heSAyMDE3IDExOjM2OjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gTWVtb3J5
IGZ1enplcgoKLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgfCAgMTQgKysrCiBKU1Rl
c3RzL3dhc20vZnV6ei9tZW1vcnkuanMgfCAzMDEgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzE1IGluc2VydGlvbnMoKykKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnV6ei9tZW1vcnkuanMKCmRpZmYgLS1naXQg
YS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg2MGU4MjkuLmZk
YjI2NTAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDUtMTAgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBhZGQgbWVtb3J5IGZ1enplcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5OTc2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zMTk2NTMyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnV6ei9tZW1vcnkuanM6IEFkZGVkLgorICAg
ICAgICAoY29uc3QuaW5zZXJ0KToKKyAgICAgICAgKGNvbnN0LmFjdGlvbi5zdHJpbmdfYXBwZWFy
ZWRfaGVyZSk6CisgICAgICAgIChjb25zdC5wZXJmb3JtQWN0aW9uKToKKyAgICAgICAgKGNhdGNo
KToKKwogMjAxNy0wNS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBXVEY6OlJlZlB0cjxXVEY6OlN0cmluZ0lt
cGw+OjpvcGVyYXRvciEoKSB1bmRlciBzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2Z1enovbWVtb3J5LmpzIGIvSlNUZXN0cy93YXNtL2Z1enovbWVt
b3J5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGIyZTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnV6ei9tZW1vcnkuanMKQEAgLTAsMCArMSwzMDEg
QEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisKKy8vIEZJWE1FOiBhZGQgdGhlIGZvbGxvd2luZzog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTkzNgorLy8gIC0gYWRk
IHNldCgpIGFuZCBzaGFkb3cgbWVtb3J5LCB0aGlzIHJlcXVpcmVzIHRyYWNraW5nIHdoZW4gbWVt
b3J5IGlzIHNoYXJlZAorLy8gIC0gU3VwcG9ydDogZW1wdHksIGV4cG9ydGVkCisvLyAgLSBJbXBv
cnRlZCBtZW1vcnkgY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkgKGJvdGggYmVmb3JlIGFuZCBh
ZnRlciBpbnN0YW50aWF0aW9uLCB0byBjYXVzZSByZWNvbXBpbGF0aW9uKQorLy8gIC0gcmVjdXJz
aXZlIGNhbGxzIChyYW5kb21seSBjYWxsIG90aGVyIGluc3RhbmNlJ3MgZXhwb3J0cywgcG90ZW50
aWFsbHkgZXhoYXVzdGluZyBzdGFjaykKKy8vICAtIFNpbXBsaWZ5IGNvZGUgYnkgYWxsb3dpbmcg
LkNvZGUoKS5FeHBvcnRGdW5jdGlvbiguLi4pIGluIGJ1aWxkZXIKKworY29uc3QgdHVuZSA9IHsK
KyAgICBudW1SYW5kb21JdGVyYXRpb25zOiA2NCwKKyAgICBudW1SYW5kb21JbnZva2VzOiA0LAor
ICAgIG1heEluaXRpYWw6IDgsCisgICAgbWF4TWF4OiA4LAorICAgIG1heEdyb3c6IDgsCisgICAg
bWVtb3J5R2V0Q291bnQ6IDEwMjQsCit9OworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsg
Ly8gQXMgZGV0ZXJtaW5lZCBieSB0aGUgV2ViQXNzZW1ibHkgc3BlY2lmaWNhdGlvbi4KKworbGV0
IGxvZ1N0cmluZyA9ICIiOworbGV0IGxvZyA9IHdoYXQgPT4gbG9nU3RyaW5nICs9ICdcbicgKyB3
aGF0OworCitsZXQgaW5zdGFuY2VzID0gW107CisKK2NvbnN0IGluc2VydCA9IChidWlsZGVyLCBp
bXBvcnRPYmplY3QgPSB1bmRlZmluZWQpID0+IHsKKyAgICBjb25zdCBsb2NhdGlvbiA9IChNYXRo
LnJhbmRvbSgpICogaW5zdGFuY2VzLmxlbmd0aCkgfCAwOworICAgIGluc3RhbmNlcy5zcGxpY2Uo
bG9jYXRpb24sIDAsIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIGltcG9ydE9iamVjdCkpOworfQorY29u
c3QgaW5pdGlhbE1heE9iamVjdCA9IGhhc01heCA9PiB7CisgICAgY29uc3QgaW5pdGlhbCA9IChN
YXRoLnJhbmRvbSgpICogdHVuZS5tYXhJbml0aWFsKSB8IDA7CisgICAgaWYgKCFoYXNNYXgpCisg
ICAgICAgIHJldHVybiB7IGluaXRpYWw6IGluaXRpYWwsIG1heDogdW5kZWZpbmVkIH07CisgICAg
Y29uc3QgbWF4ID0gaW5pdGlhbCArICgoTWF0aC5yYW5kb20oKSAqIHR1bmUubWF4TWF4KSB8IDAp
OworICAgIHJldHVybiB7IGluaXRpYWw6IGluaXRpYWwsIG1heDogbWF4IH07Cit9OworY29uc3Qg
aW5pdGlhbE1heE9iamVjdEZyb20gPSBpbnN0YW5jZSA9PiB7CisgICAgY29uc3QgaGFzTWF4ID0g
aW5zdGFuY2UuZXhwb3J0c1sibWF4Il0gIT09IHVuZGVmaW5lZDsKKyAgICBjb25zdCBpbml0aWFs
ID0gKE1hdGgucmFuZG9tKCkgKiBpbnN0YW5jZS5leHBvcnRzLmluaXRpYWwoKSkgfCAwOworICAg
IGlmICghaGFzTWF4KQorICAgICAgICByZXR1cm4geyBpbml0aWFsOiBpbml0aWFsIH07CisgICAg
Y29uc3QgbWF4ID0gTWF0aC5tYXgoaW5pdGlhbCwgaW5zdGFuY2UuZXhwb3J0cy5tYXgoKSkgKyAo
KE1hdGgucmFuZG9tKCkgKiB0dW5lLm1heE1heCkgfCAwKTsKKyAgICByZXR1cm4geyBpbml0aWFs
OiBpbml0aWFsLCBtYXg6IG1heCB9OworfTsKKworY29uc3QgYWN0aW9uID0geworICAgICctIGRl
bGV0ZSc6ICgpID0+IHsKKyAgICAgICAgZm9yIChsZXQgY291bnQgPSAxICsgKE1hdGgucmFuZG9t
KCkgKiBpbnN0YW5jZXMubGVuZ3RoKSB8IDA7IGluc3RhbmNlcy5sZW5ndGggJiYgY291bnQ7IC0t
Y291bnQpIHsKKyAgICAgICAgICAgIGNvbnN0IHdoaWNoID0gKE1hdGgucmFuZG9tKCkgKiBpbnN0
YW5jZXMubGVuZ3RoKSB8IDA7CisgICAgICAgICAgICBsb2coYCAgICBkZWxldGUgJHt3aGljaH0g
LyAke2luc3RhbmNlcy5sZW5ndGh9YCk7CisgICAgICAgICAgICBpbnN0YW5jZXMuc3BsaWNlKHdo
aWNoLCAxKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgJ14gaW52b2tlJzogKCkgPT4geworICAg
ICAgICBpZiAoIWluc3RhbmNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGxvZyhgICAgIG5vdGhp
bmcgdG8gaW52b2tlYCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Zm9yIChsZXQgaXRlcmF0aW9ucyA9IDA7IGl0ZXJhdGlvbnMgPCB0dW5lLm51bVJhbmRvbUludm9r
ZXM7ICsraXRlcmF0aW9ucykgeworICAgICAgICAgICAgY29uc3Qgd2hpY2hJbnN0YW5jZSA9IChN
YXRoLnJhbmRvbSgpICogaW5zdGFuY2VzLmxlbmd0aCkgfCAwOworICAgICAgICAgICAgY29uc3Qg
aW5zdGFuY2UgPSBpbnN0YW5jZXNbd2hpY2hJbnN0YW5jZV07CisgICAgICAgICAgICBjb25zdCB3
aGljaEV4cG9ydCA9IChNYXRoLnJhbmRvbSgpICogT2JqZWN0LmtleXMoaW5zdGFuY2UuZXhwb3J0
cykubGVuZ3RoKSB8IDA7CisgICAgICAgICAgICBsb2coYCAgICBpbnN0YW5jZXNbJHt3aGljaElu
c3RhbmNlfV0uJHtPYmplY3Qua2V5cyhpbnN0YW5jZS5leHBvcnRzKVt3aGljaEV4cG9ydF19KClg
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoT2JqZWN0LmtleXMoaW5zdGFuY2UuZXhwb3J0cylbd2hp
Y2hFeHBvcnRdKSB7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbSBmb3Iga2V5ICcke09iamVjdC5rZXlz
KGluc3RhbmNlLmV4cG9ydHMpW3doaWNoRXhwb3J0XX0nYCk7CisgICAgICAgICAgICBjYXNlICdm
dW5jJzoKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mdW5jKCks
IDQyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93cyc6
IHsKKyAgICAgICAgICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBs
ZXQgYWRkcmVzcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmV4cG9ydHNbImN1
cnJlbnQiXSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaGFzIGEgbWVt
b3J5LgorICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaW5zdGFuY2UuZXhwb3J0
cy5jdXJyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IGluc3RhbmNlLmV4
cG9ydHNbIm1heCJdID8gaW5zdGFuY2UuZXhwb3J0cy5tYXgoKSA6ICgxIDw8IDE1KTsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IHBhZ2VTaXplICogKGN1cnJlbnQgKyAoKE1hdGgucmFu
ZG9tKCkgKiAobWF4IC0gY3VycmVudCkpIHwgMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyBObyBtZW1vcnkgaW4gdGhpcyBpbnN0YW5jZS4KKyAgICAgICAgICAgICAg
ICB0cnkgeyBpbnN0YW5jZS5leHBvcnRzLnRocm93cyhhZGRyZXNzKTsgfQorICAgICAgICAgICAg
ICAgIGNhdGNoIChlKSB7IHRocmV3ID0gdHJ1ZTsgfQorICAgICAgICAgICAgICAgIGFzc2VydC50
cnV0aHkodGhyZXcpOworICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2dl
dCc6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaW5zdGFuY2UuZXhwb3J0cy5j
dXJyZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWNjZXNzID0gdHVuZS5tZW1vcnlH
ZXRDb3VudDsgY3VycmVudCAmJiBhY2Nlc3M7IC0tYWNjZXNzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGFkZHJlc3MgPSAoTWF0aC5yYW5kb20oKSAqIChjdXJyZW50ICogcGFnZVNpemUg
LSA0KSkgfCAwOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5nZXQoYWRkcmVzcyksIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gYnJl
YWs7CisgICAgICAgICAgICBjYXNlICdjdXJyZW50JzoKKyAgICAgICAgICAgICAgICBhc3NlcnQu
bGUoaW5zdGFuY2UuZXhwb3J0cy5pbml0aWFsKCksIGluc3RhbmNlLmV4cG9ydHMuY3VycmVudCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2luaXRpYWwnOgor
ICAgICAgICAgICAgICAgIGFzc2VydC5sZSgwLCBpbnN0YW5jZS5leHBvcnRzLmluaXRpYWwoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdtYXgnOgorICAgICAg
ICAgICAgICAgIGFzc2VydC5sZShpbnN0YW5jZS5leHBvcnRzLmluaXRpYWwoKSwgaW5zdGFuY2Uu
ZXhwb3J0cy5tYXgoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGluc3RhbmNlLmV4cG9y
dHMuY3VycmVudCgpLCBpbnN0YW5jZS5leHBvcnRzLm1heCgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgJ21lbW9yeSc6IHsKKyAgICAgICAgICAgICAgICBjb25z
dCBjdXJyZW50ID0gaW5zdGFuY2UuZXhwb3J0cy5jdXJyZW50KCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgYnVmZmVyID0gbmV3IFVpbnQzMkFycmF5KGluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCBjdXJy
ZW50ICogcGFnZVNpemUpOworICAgICAgICAgICAgICAgIGZvciAobGV0IGFjY2VzcyA9IHR1bmUu
bWVtb3J5R2V0Q291bnQ7IGN1cnJlbnQgJiYgYWNjZXNzOyAtLWFjY2VzcykgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gKE1hdGgucmFuZG9tKCkgKiAoY3VycmVudCAqIHBh
Z2VTaXplIC0gNCkpIHwgMDsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuZ2V0KGFkZHJlc3MpLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZ3Jvdyc6IHsKKyAgICAgICAgICAgICAgICBj
b25zdCBjdXJyZW50ID0gaW5zdGFuY2UuZXhwb3J0cy5jdXJyZW50KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgYnkgPSAoTWF0aC5yYW5kb20oKSAqIHR1bmUubWF4R3JvdykgfCAwOworICAgICAg
ICAgICAgICAgIGNvbnN0IGhhc01heCA9IGluc3RhbmNlLmV4cG9ydHNbIm1heCJdICE9PSB1bmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5zdGFuY2UuZXhwb3J0cy5n
cm93KGN1cnJlbnQgKyBieSk7CisgICAgICAgICAgICAgICAgbG9nKGAgICAgICAgIEdyb3cgZnJv
bSAke2N1cnJlbnR9IChtYXggJHtoYXNNYXggPyBpbnN0YW5jZS5leHBvcnRzLm1heCgpIDogIm5v
bmUifSkgdG8gJHtjdXJyZW50ICsgYnl9IHJldHVybmVkICR7cmVzdWx0fSwgY3VycmVudCBub3cg
JHtpbnN0YW5jZS5leHBvcnRzLmN1cnJlbnQoKX1gKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
bGUoY3VycmVudCwgaW5zdGFuY2UuZXhwb3J0cy5jdXJyZW50KCkpOworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT09IC0xKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoY3VycmVu
dCwgaW5zdGFuY2UuZXhwb3J0cy5jdXJyZW50KCkpOworICAgICAgICAgICAgICAgIGlmIChoYXNN
YXgpCisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5sZShpbnN0YW5jZS5leHBvcnRzLmN1cnJl
bnQoKSwgaW5zdGFuY2UuZXhwb3J0cy5tYXgoKSk7CisgICAgICAgICAgICB9IGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICAnKyBtZW1vcnk6IG5vbmUnOiAoKSA9
PiB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImZ1bmMiKS5GdW5jdGlvbigidGhyb3dzIikuRW5k
KCkKKyAgICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
dW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5F
bmQoKQorICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvd3MiLCB7IHBhcmFtczogWyJp
MzIiXSB9KS5VbnJlYWNoYWJsZSgpLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgIC5FbmQo
KTsKKyAgICAgICAgaW5zZXJ0KGJ1aWxkZXIpOworICAgIH0sCisgICAgJysgbWVtb3J5OiBlbXB0
eSwgc2VjdGlvbic6ICgpID0+IHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMCwgMCku
RW5kKCkKKyAgICAgICAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJmdW5jIikuRnVuY3Rpb24o
InRocm93cyIpLkZ1bmN0aW9uKCJjdXJyZW50IikuRnVuY3Rpb24oImluaXRpYWwiKS5GdW5jdGlv
bigiZ3JvdyIpLkZ1bmN0aW9uKCJtYXgiKS5FbmQoKQorICAgICAgICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkuSTMyQ29uc3QoNDIpLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuRnVu
Y3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2FsKDApLkkzMkxvYWQo
MiwgMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVu
dCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigp
LkVuZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJp
MzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5Hcm93TWVtb3J5KDApLlJldHVybigpLkVu
ZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkuSTMyQ29uc3QoMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAg
ICAgIC5GdW5jdGlvbigibWF4IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0
KDApLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgIC5FbmQoKTsKKyAgICAgICAgaW5zZXJ0
KGJ1aWxkZXIpOworICAgIH0sCisgICAgJysgbWVtb3J5OiBzZWN0aW9uJzogKCkgPT4geworICAg
ICAgICBjb25zdCBpbml0aWFsTWF4ID0gaW5pdGlhbE1heE9iamVjdChmYWxzZSk7CisgICAgICAg
IGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgICAuTWVt
b3J5KCkuSW5pdGlhbE1heFBhZ2VzKGluaXRpYWxNYXguaW5pdGlhbCwgaW5pdGlhbE1heC5tYXgp
LkVuZCgpCisgICAgICAgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiZnVuYyIpLkZ1bmN0aW9u
KCJ0aHJvd3MiKS5GdW5jdGlvbigiZ2V0IikuRnVuY3Rpb24oImN1cnJlbnQiKS5GdW5jdGlvbigi
aW5pdGlhbCIpLkZ1bmN0aW9uKCJncm93IikuRW5kKCkKKyAgICAgICAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgLkZ1
bmN0aW9uKCJ0aHJvd3MiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5HZXRMb2NhbCgwKS5JMzJMb2Fk
KDIsIDApLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdldCIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwg
MCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigpLkVu
ZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIi
XSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5Hcm93TWVtb3J5KDApLlJldHVybigpLkVuZCgp
CisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1heC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQor
ICAgICAgICAgICAgICAuRW5kKCk7CisgICAgICAgIGluc2VydChidWlsZGVyKTsKKyAgICB9LAor
ICAgICcrIG1lbW9yeTogc2VjdGlvbiwgbWF4JzogKCkgPT4geworICAgICAgICBjb25zdCBpbml0
aWFsTWF4ID0gaW5pdGlhbE1heE9iamVjdCh0cnVlKTsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9
IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4
UGFnZXMoaW5pdGlhbE1heC5pbml0aWFsLCBpbml0aWFsTWF4Lm1heCkuRW5kKCkKKyAgICAgICAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJmdW5jIikuRnVuY3Rpb24oInRocm93cyIpLkZ1bmN0
aW9uKCJnZXQiKS5GdW5jdGlvbigiY3VycmVudCIpLkZ1bmN0aW9uKCJpbml0aWFsIikuRnVuY3Rp
b24oImdyb3ciKS5GdW5jdGlvbigibWF4IikuRW5kKCkKKyAgICAgICAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pLkkzMkNvbnN0KDQyKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgLkZ1
bmN0aW9uKCJ0aHJvd3MiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5HZXRMb2NhbCgwKS5JMzJMb2Fk
KDIsIDApLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdldCIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwg
MCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigpLkVu
ZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIi
XSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5Hcm93TWVtb3J5KDApLlJldHVybigpLkVuZCgp
CisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1heC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQor
ICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYXgiLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkuSTMyQ29uc3QoaW5pdGlhbE1heC5tYXgpLlJldHVybigpLkVuZCgpCisgICAgICAgICAg
ICAgIC5FbmQoKTsKKyAgICAgICAgaW5zZXJ0KGJ1aWxkZXIpOworICAgIH0sCisgICAgJysgbWVt
b3J5OiBzZWN0aW9uLCBleHBvcnRlZCc6ICgpID0+IHsKKyAgICAgICAgY29uc3QgaW5pdGlhbE1h
eCA9IGluaXRpYWxNYXhPYmplY3QoZmFsc2UpOworICAgICAgICBjb25zdCBidWlsZGVyID0gKG5l
dyBCdWlsZGVyKCkpCisgICAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgICAgLk1lbW9yeSgpLkluaXRpYWxNYXhQYWdl
cyhpbml0aWFsTWF4LmluaXRpYWwsIGluaXRpYWxNYXgubWF4KS5FbmQoKQorICAgICAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIpLkZ1bmN0aW9u
KCJ0aHJvd3MiKS5GdW5jdGlvbigiZ2V0IikuRnVuY3Rpb24oImN1cnJlbnQiKS5GdW5jdGlvbigi
aW5pdGlhbCIpCisgICAgICAgICAgICAgICAgICAuTWVtb3J5KCJtZW1vcnkiLCAwKQorICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgICAg
LkZ1bmN0aW9uKCJmdW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KDQy
KS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvd3MiLCB7
IHBhcmFtczogWyJpMzIiXSB9KS5HZXRMb2NhbCgwKS5JMzJMb2FkKDIsIDApLlJldHVybigpLkVu
ZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdldCIsIHsgcGFyYW1zOiBbImkzMiJd
LCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkK
KyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KS5DdXJyZW50TWVtb3J5KDApLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KS5H
ZXRMb2NhbCgwKS5Hcm93TWVtb3J5KDApLlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29u
c3QoaW5pdGlhbE1heC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAuRW5k
KCk7CisgICAgICAgIGluc2VydChidWlsZGVyKTsKKyAgICB9LAorICAgICcrIG1lbW9yeTogc2Vj
dGlvbiwgZXhwb3J0ZWQsIG1heCc6ICgpID0+IHsKKyAgICAgICAgY29uc3QgaW5pdGlhbE1heCA9
IGluaXRpYWxNYXhPYmplY3QodHJ1ZSk7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1
aWxkZXIoKSkKKyAgICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKGlu
aXRpYWxNYXguaW5pdGlhbCwgaW5pdGlhbE1heC5tYXgpLkVuZCgpCisgICAgICAgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIikuRnVuY3Rpb24oInRo
cm93cyIpLkZ1bmN0aW9uKCJnZXQiKS5GdW5jdGlvbigiY3VycmVudCIpLkZ1bmN0aW9uKCJpbml0
aWFsIikuRnVuY3Rpb24oImdyb3ciKS5GdW5jdGlvbigibWF4IikKKyAgICAgICAgICAgICAgICAg
IC5NZW1vcnkoIm1lbW9yeSIsIDApCisgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoNDIpLlJldHVybigpLkVuZCgpCisgICAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2Fs
KDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5j
dGlvbigiZ2V0IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkuR2V0TG9jYWwoMCku
STMyTG9hZCgyLCAwKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjdXJyZW50IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkN1cnJlbnRNZW1vcnkoMCku
UmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFy
YW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExvY2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0
dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW5pdGlhbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5JMzJDb25zdChpbml0aWFsTWF4LmluaXRpYWwpLlJldHVy
bigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oIm1heCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KS5JMzJDb25zdChpbml0aWFsTWF4Lm1heCkuUmV0dXJuKCkuRW5kKCkK
KyAgICAgICAgICAgICAgLkVuZCgpOworICAgICAgICBpbnNlcnQoYnVpbGRlcik7CisgICAgfSwK
KyAgICAnKyBtZW1vcnk6IGltcG9ydGVkLCBleHBvcnRlZCc6ICgpID0+IHsKKyAgICAgICAgbGV0
IGltcG9ydEZyb207CisgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGluc3RhbmNlcy5s
ZW5ndGg7ICsraWR4KQorICAgICAgICAgICAgaWYgKGluc3RhbmNlc1tpZHhdLmV4cG9ydHMubWVt
b3J5KSB7CisgICAgICAgICAgICAgICAgaW1wb3J0RnJvbSA9IGluc3RhbmNlc1tpZHhdOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWltcG9ydEZy
b20pCisgICAgICAgICAgICByZXR1cm47IC8vIE5vIG1lbW9yeSBjb3VsZCBiZSBpbXBvcnRlZC4K
KyAgICAgICAgY29uc3QgaW5pdGlhbE1heCA9IGluaXRpYWxNYXhPYmplY3RGcm9tKGltcG9ydEZy
b20pOworICAgICAgICBpZiAoaW1wb3J0RnJvbS5leHBvcnRzWyJtYXgiXSA9PT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAg
ICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuSW1wb3J0KCkuTWVt
b3J5KCJpbXAiLCAibWVtb3J5IiwgaW5pdGlhbE1heCkuRW5kKCkKKyAgICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiKS5GdW5jdGlvbigidGhyb3dzIikuRnVuY3Rp
b24oImdldCIpLkZ1bmN0aW9uKCJjdXJyZW50IikuRnVuY3Rpb24oImluaXRpYWwiKQorICAgICAg
ICAgICAgICAgICAgICAgIC5NZW1vcnkoIm1lbW9yeSIsIDApCisgICAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAgICAgICAu
RnVuY3Rpb24oImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29uc3QoNDIp
LlJldHVybigpLkVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvd3Mi
LCB7IHBhcmFtczogWyJpMzIiXSB9KS5HZXRMb2NhbCgwKS5JMzJMb2FkKDIsIDApLlJldHVybigp
LkVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJnZXQiLCB7IHBhcmFtczog
WyJpMzIiXSwgcmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5JMzJMb2FkKDIsIDApLlJldHVybigp
LkVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJjdXJyZW50IiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pLkN1cnJlbnRNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwg
cmV0OiAiaTMyIiB9KS5HZXRMb2NhbCgwKS5Hcm93TWVtb3J5KDApLlJldHVybigpLkVuZCgpCisg
ICAgICAgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbml0aWFsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pLkkzMkNvbnN0KGluaXRpYWxNYXguaW5pdGlhbCkuUmV0dXJuKCkuRW5kKCkK
KyAgICAgICAgICAgICAgICAgIC5FbmQoKTsKKyAgICAgICAgICAgIGluc2VydChidWlsZGVyLCB7
IGltcDogeyBtZW1vcnk6IGltcG9ydEZyb20uZXhwb3J0cy5tZW1vcnkgfSB9KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAg
ICAgICAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5JbXBvcnQo
KS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBpbml0aWFsTWF4KS5FbmQoKQorICAgICAgICAgICAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgIC5FeHBvcnQoKQorICAg
ICAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIpLkZ1bmN0aW9uKCJ0aHJvd3MiKS5G
dW5jdGlvbigiZ2V0IikuRnVuY3Rpb24oImN1cnJlbnQiKS5GdW5jdGlvbigiaW5pdGlhbCIpLkZ1
bmN0aW9uKCJncm93IikuRnVuY3Rpb24oIm1heCIpCisgICAgICAgICAgICAgICAgICAgICAgLk1l
bW9yeSgibWVtb3J5IiwgMCkKKyAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5JMzJDb25zdCg0MikuUmV0dXJuKCkuRW5kKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93cyIsIHsgcGFyYW1zOiBbImkzMiJd
IH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImdldCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIi
IH0pLkdldExvY2FsKDApLkkzMkxvYWQoMiwgMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImN1cnJlbnQiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkuQ3VycmVudE1lbW9yeSgwKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pLkdldExv
Y2FsKDApLkdyb3dNZW1vcnkoMCkuUmV0dXJuKCkuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImluaXRpYWwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuSTMyQ29u
c3QoaW5pdGlhbE1heC5pbml0aWFsKS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAg
ICAgIC5GdW5jdGlvbigibWF4IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkkzMkNvbnN0
KGluaXRpYWxNYXgubWF4KS5SZXR1cm4oKS5FbmQoKQorICAgICAgICAgICAgICAgICAgLkVuZCgp
OworICAgICAgICAgICAgaW5zZXJ0KGJ1aWxkZXIsIHsgaW1wOiB7IG1lbW9yeTogaW1wb3J0RnJv
bS5leHBvcnRzLm1lbW9yeSB9IH0pOworICAgICAgICB9CisgICAgfSwKK307Citjb25zdCBudW1B
Y3Rpb25zID0gT2JqZWN0LmtleXMoYWN0aW9uKS5sZW5ndGg7Citjb25zdCBwZXJmb3JtQWN0aW9u
ID0gKCkgPT4geworICAgIGNvbnN0IHdoaWNoID0gKE1hdGgucmFuZG9tKCkgKiBudW1BY3Rpb25z
KSB8IDA7CisgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoYWN0aW9uKVt3aGljaF07CisgICAg
bG9nKGAke2tleX06YCk7CisgICAgYWN0aW9uW2tleV0oKTsKK307CisKK3RyeSB7CisgICAgZm9y
IChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgdHVuZS5udW1SYW5kb21JdGVyYXRpb25z
OyArK2l0ZXJhdGlvbikKKyAgICAgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGxvZyhgRmluYWxp
emluZzpgKTsKKyAgICAvLyBGaW5pc2ggYnkgZGVsZXRpbmcgdGhlIGluc3RhbmNlcyBpbiBhIHJh
bmRvbSBvcmRlci4KKyAgICB3aGlsZSAoaW5zdGFuY2VzLmxlbmd0aCkKKyAgICAgICAgYWN0aW9u
WyItIGRlbGV0ZSJdKCk7Cit9IGNhdGNoIChlKSB7CisgICAgLy8gSWdub3JlIE9PTSB3aGlsZSBm
dXp6aW5nLiBJdCBjYW4ganVzdCBoYXBwZW4uCisgICAgaWYgKGUubWVzc2FnZSAhPT0gIk91dCBv
ZiBtZW1vcnkiKSB7CisgICAgICAgIHByaW50KGBGYWlsZWQ6ICR7ZX1gKTsKKyAgICAgICAgcHJp
bnQobG9nU3RyaW5nKTsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9Ci0tIAoyLjkuMwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>