<?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>118605</bug_id>
          
          <creation_ts>2013-07-12 07:57:18 -0700</creation_ts>
          <short_desc>Web Inspector: update CodeMirror to 3.14.1</short_desc>
          <delta_ts>2013-08-23 13:31:29 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>118658</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>thorton</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>907965</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-12 07:57:18 -0700</bug_when>
    <thetext>There are a few fixes in 7f560afa1c that fix regressions from CodeMirror 3.14 that we should pick up and live on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907966</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-07-12 07:57:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/14427280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907967</commentid>
    <comment_count>2</comment_count>
      <attachid>206548</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-12 07:59:39 -0700</bug_when>
    <thetext>Created attachment 206548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908013</commentid>
    <comment_count>3</comment_count>
      <attachid>206548</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-07-12 11:09:26 -0700</bug_when>
    <thetext>Comment on attachment 206548
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908018</commentid>
    <comment_count>4</comment_count>
      <attachid>206548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-12 11:32:24 -0700</bug_when>
    <thetext>Comment on attachment 206548
Patch

Clearing flags on attachment: 206548

Committed r152598: &lt;http://trac.webkit.org/changeset/152598&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908019</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-12 11:32:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908309</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-07-14 23:37:00 -0700</bug_when>
    <thetext>This totally broke the inspector for me.

CodeMirror.js:701: JS ERROR: SyntaxError: Expected token &apos;}&apos;

I&apos;m going to roll it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908311</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-14 23:38:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 118658</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908399</commentid>
    <comment_count>8</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-15 08:00:54 -0700</bug_when>
    <thetext>This happened because the JS minifier caused an error in CodeMirror. We fixed this before, but I forgot to upstream that fix to CodeMirror.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908543</commentid>
    <comment_count>9</comment_count>
      <attachid>206694</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-15 15:35:46 -0700</bug_when>
    <thetext>Created attachment 206694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908544</commentid>
    <comment_count>10</comment_count>
      <attachid>206694</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-07-15 15:38:05 -0700</bug_when>
    <thetext>Comment on attachment 206694
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908566</commentid>
    <comment_count>11</comment_count>
      <attachid>206694</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-15 16:30:36 -0700</bug_when>
    <thetext>Comment on attachment 206694
Patch

Clearing flags on attachment: 206694

Committed r152669: &lt;http://trac.webkit.org/changeset/152669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908567</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-15 16:30:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920410</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-08-23 13:31:29 -0700</bug_when>
    <thetext>Oops, I did this again…</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206548</attachid>
            <date>2013-07-12 07:59:39 -0700</date>
            <delta_ts>2013-07-15 15:35:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118605-20130712105720.patch</filename>
            <type>text/plain</type>
            <size>237173</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAw
NzQxNzNjODk0MzM0ZmU0NTQzMmRkMTdjZTg4Y2M3MGFmNTFhYTVjLi5lZDY2YjA4ZTc0OTkwYzUx
NWU5NTk3MGQ1OTE5ODNkMWY3Yjc5MjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxMy0wNy0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gN2Y1NjBhZmExYyAoMy4xNCspLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2MDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRvb2xz
L1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgorICAgICAgICAqIFRvb2xz
L1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmlu
dGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQ
cmludGluZy9jb2RlbWlycm9yLmNzczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9j
b2RlbWlycm9yLmpzOgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qczoKKyAg
ICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczoKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMu
anM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qczoK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOgorCiAy
MDEzLTA3LTEyICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBQYXNzIG51bGwgZm9yIHNpZGViYXJQYW5lbHMgYW5kIHJvbGUgaW4g
V2ViSW5zcGVjdG9yLlNpZGViYXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1Rvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpz
CmluZGV4IGQ1ZmE5NDFhNDY5NDZhZWJlMWU0NWM2YWFhNjNlNTk2NzRhN2IyMTQuLjgxYzgxNTVl
NzEyNzVjYzk5MDJhNjA2MzljZDQ2MzI0ZGJhMDc5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJv
ckZvcm1hdHRlcnMuanMKQEAgLTEsMyArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKIC8vIEluIHRoZSBp
bnNwZWN0b3IgdG9rZW4gdHlwZXMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgZXh0cmEg
bW9kZSBpbmZvcm1hdGlvbgogLy8gYWZ0ZXIgdGhlIGFjdHVhbCB0b2tlbiB0eXBlLiBTbyB3ZSBj
YW4ndCBkbyB0b2tlbiA9PT0gImZvbyIuIFNvIGluc3RlYWQgd2UgZG8KIC8vIC9cYmZvb1xiLy50
ZXN0KHRva2VuKS4KQEAgLTQyLDYgKzY3LDggQEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJqYXZh
c2NyaXB0IiwgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgaWYg
KGxhc3RDb250ZW50ID09PSAiZmluYWxseSIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBpZiAobGFzdENvbnRlbnQgPT09ICJkbyIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1h
dHRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanMKaW5kZXggNmZkNjU4ZWY5NGM2MDY3NjVhZmFmOTVmYjVlOGZhMDdjZGZkYjFmMy4u
NTI0ZTUwZDVhYjM4N2UzYzFhNzY4OWQxMjIwZjVmM2MwYzM0NDI4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpz
CkBAIC0xLDMgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCiBmdW5jdGlvbiBGb3JtYXR0ZXIoY29kZU1p
cnJvciwgYnVpbGRlcikKIHsKICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQ
cmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcwppbmRleCBlOTRkZWNhNWZiMDExNzVk
ZGQ1NDk1YjMzNGU2MGYwZDhhYTMyM2IyLi40NTk2ODgwY2JhMTlhMmMwZDhhMjM5NjE3N2EwZmVh
NGU1ZDEwYjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCkBA
IC0xLDMgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCiBmdW5jdGlvbiBGb3JtYXR0ZXJDb250ZW50QnVp
bGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywg
b3JpZ2luYWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQogewogICAgIHRo
aXMuX29yaWdpbmFsQ29udGVudCA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MKaW5kZXggMGI1Mzcw
NDUwNjczNTU0Y2NmOTIzMjAwMjJmODMwN2JhNzM4MDY2Yi4uNTI4ODFmN2RmZDA5ZjgzY2M1Y2Q1
NmY5MWZkM2NhNmI4NDYwYzAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rv
b2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcwpAQCAtMTksNyArMTksNyBA
QAogICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8K
IH0KIAotLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciB7CisuQ29kZU1pcnJvci1zY3JvbGxi
YXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgYmFja2dyb3VuZC1jb2xv
cjogd2hpdGU7IC8qIFRoZSBsaXR0bGUgc3F1YXJlIGJldHdlZW4gSCBhbmQgViBzY3JvbGxiYXJz
ICovCiB9CiAKQEAgLTI4LDYgKzI4LDcgQEAKIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICBib3Jk
ZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkOwogICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3Owor
ICB3aGl0ZS1zcGFjZTogbm93cmFwOwogfQogLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge30KIC5D
b2RlTWlycm9yLWxpbmVudW1iZXIgewpAQCAtMTI0LDcgKzEyNSw3IEBAIGRpdi5Db2RlTWlycm9y
IHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIC8qIFRo
ZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBz
Y3JvbGxpbmcKICAgIGJlZm9yZSBhY3R1YWxsIHNjcm9sbGluZyBoYXBwZW5zLCB0aHVzIHByZXZl
bnRpbmcgc2hha2luZyBhbmQKICAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwotLkNvZGVNaXJy
b3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xs
YmFyLWZpbGxlciB7CisuQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xs
YmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmls
bGVyIHsKICAgcG9zaXRpb246IGFic29sdXRlOwogICB6LWluZGV4OiA2OwogICBkaXNwbGF5OiBu
b25lOwpAQCAtMTQxLDE2ICsxNDIsMTggQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9y
LW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogfQogLkNvZGVNaXJyb3Itc2Nyb2xs
YmFyLWZpbGxlciB7CiAgIHJpZ2h0OiAwOyBib3R0b206IDA7Ci0gIHotaW5kZXg6IDY7Cit9Cisu
Q29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKKyAgbGVmdDogMDsgYm90dG9tOiAwOwogfQogCiAu
Q29kZU1pcnJvci1ndXR0ZXJzIHsKICAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6
IDA7Ci0gIGhlaWdodDogMTAwJTsKICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgIHotaW5kZXg6
IDM7CiB9CiAuQ29kZU1pcnJvci1ndXR0ZXIgeworICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICBo
ZWlnaHQ6IDEwMCU7CiAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICBtYXJnaW4tYm90dG9tOiAt
MzJweDsKQEAgLTIwMiw3ICsyMDUsNiBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3It
bm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiB9CiAKIC5Db2RlTWlycm9yLXdpZGdl
dCB7Ci0gIGRpc3BsYXk6IGlubGluZS1ibG9jazsKIH0KIAogLkNvZGVNaXJyb3Itd3JhcCAuQ29k
ZU1pcnJvci1zY3JvbGwgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xz
L1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9v
bHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcwppbmRleCA5YTk2Y2Q2OTg2M2ZjZTE5ZjM1
MmM4ZmUzZGEyZjk4OGZjZTJmOGNmLi45YTZhOTMyMDEwMjc5OWJmOGE1N2E1M2UxYzc3NjI5YjU3
YTQ3YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJp
bnRpbmcvY29kZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJl
dHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcwpAQCAtOTcsNyArOTcsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBlbHNlIGlucHV0LnNldEF0dHJpYnV0ZSgid3JhcCIs
ICJvZmYiKTsKICAgICAvLyBpZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJv
YXJkIChpc3N1ZSAjMTI4NykKICAgICBpZiAoaW9zKSBpbnB1dC5zdHlsZS5ib3JkZXIgPSAiMXB4
IHNvbGlkIGJsYWNrIjsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0IiwgIm9m
ZiIpOyBpbnB1dC5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOworICAgIGlu
cHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0
ZSgiYXV0b2NhcGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVj
ayIsICJmYWxzZSIpOwogCiAgICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCiAg
ICAgZC5pbnB1dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRk
ZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CkBAIC0x
MDUsOCArMTA1LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZC5z
Y3JvbGxiYXJIID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAx
cHgiKV0sICJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKTsKICAgICBkLnNjcm9sbGJhclYgPSBlbHQo
ImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJ3aWR0aDogMXB4IildLCAiQ29kZU1pcnJv
ci12c2Nyb2xsYmFyIik7CiAgICAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGws
ICJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIiKTsKKyAgICBkLmd1dHRlckZpbGxlciA9IGVs
dCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpOwogICAgIC8vIERJVnMg
Y29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgYWN0dWFsIGNvZGUKLSAgICBkLmxpbmVE
aXYgPSBlbHQoImRpdiIpOworICAgIGQubGluZURpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVN
aXJyb3ItY29kZSIpOwogICAgIGQuc2VsZWN0aW9uRGl2ID0gZWx0KCJkaXYiLCBudWxsLCBudWxs
LCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIik7CiAgICAgLy8gQmxpbmt5IGN1cnNv
ciwgYW5kIGVsZW1lbnQgdXNlZCB0byBlbnN1cmUgY3Vyc29yIGZpdHMgYXQgdGhlIGVuZCBvZiBh
IGxpbmUKICAgICBkLmN1cnNvciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1
cnNvciIpOwpAQCAtMTI2LDE0ICsxMjcsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkKICAgICBkLmd1
dHRlcnMgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlcnMiKTsKICAgICBkLmxp
bmVHdXR0ZXIgPSBudWxsOwotICAgIC8vIEhlbHBlciBlbGVtZW50IHRvIHByb3Blcmx5IHNpemUg
dGhlIGd1dHRlciBiYWNrZ3JvdW5kcwotICAgIHZhciBzY3JvbGxlcklubmVyID0gZWx0KCJkaXYi
LCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sIG51bGwsICJwb3NpdGlvbjog
cmVsYXRpdmU7IG1pbi1oZWlnaHQ6IDEwMCUiKTsKICAgICAvLyBQcm92aWRlcyBzY3JvbGxpbmcK
LSAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbc2Nyb2xsZXJJbm5lcl0sICJDb2RlTWlycm9y
LXNjcm9sbCIpOworICAgIGQuc2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBkLmhlaWdo
dEZvcmNlciwgZC5ndXR0ZXJzXSwgIkNvZGVNaXJyb3Itc2Nyb2xsIik7CiAgICAgZC5zY3JvbGxl
ci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwgIi0xIik7CiAgICAgLy8gVGhlIGVsZW1lbnQgaW4g
d2hpY2ggdGhlIGVkaXRvciBsaXZlcy4KICAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLmlu
cHV0RGl2LCBkLnNjcm9sbGJhckgsIGQuc2Nyb2xsYmFyViwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLnNjcm9sbGJhckZpbGxlciwgZC5zY3JvbGxlcl0sICJDb2RlTWlycm9yIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmls
bGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKICAgICAvLyBXb3JrIGFyb3VuZCBJRTcg
ei1pbmRleCBidWcKICAgICBpZiAoaWVfbHQ4KSB7IGQuZ3V0dGVycy5zdHlsZS56SW5kZXggPSAt
MTsgZC5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAwOyB9CiAgICAgaWYgKHBsYWNlLmFw
cGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyBlbHNlIHBsYWNlKGQud3Jh
cHBlcik7CkBAIC0xNjQsOCArMTYzLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgZC5wb2xsaW5nRmFzdCA9IGZhbHNlOwogICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRp
bWVvdXQgZm9yIHRoZSBwb2xsZXIKICAgICBkLnBvbGwgPSBuZXcgRGVsYXllZCgpOwotICAgIC8v
IFRydWUgd2hlbiBhIGRyYWcgZnJvbSB0aGUgZWRpdG9yIGlzIGFjdGl2ZQotICAgIGQuZHJhZ2dp
bmdUZXh0ID0gZmFsc2U7CiAKICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhl
aWdodCA9IG51bGw7CiAgICAgZC5tZWFzdXJlTGluZUNhY2hlID0gW107CkBAIC0yMTQsNyArMjEx
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZXN0aW1hdGVMaW5l
SGVpZ2h0cyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKICAgICBjbGVhckNhY2hlcyhjbSk7Ci0g
ICAgc2V0VGltZW91dChmdW5jdGlvbigpe3VwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20u
ZG9jLmhlaWdodCk7fSwgMTAwKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Ny
b2xsYmFycyhjbSk7fSwgMTAwKTsKICAgfQogCiAgIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNt
KSB7CkBAIC0yMzksOSArMjM2LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB9CiAKICAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChjbSkgewotICAgIHZhciBzdHlsZSA9
IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0uc3R5bGU7CisgICAgdmFyIG1hcCA9IGtleU1hcFtj
bS5vcHRpb25zLmtleU1hcF0sIHN0eWxlID0gbWFwLnN0eWxlOwogICAgIGNtLmRpc3BsYXkud3Jh
cHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xz
KmNtLWtleW1hcC1cUysvZywgIiIpICsKICAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFwLSIgKyBz
dHlsZSA6ICIiKTsKKyAgICBjbS5zdGF0ZS5kaXNhYmxlSW5wdXQgPSBtYXAuZGlzYWJsZUlucHV0
OwogICB9CiAKICAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKGNtKSB7CkBAIC0yNTMsNiArMjUxLDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGd1dHRlcnND
aGFuZ2VkKGNtKSB7CiAgICAgdXBkYXRlR3V0dGVycyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsK
KyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIwKTsK
ICAgfQogCiAgIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcnMoY20pIHsKQEAgLTMxOSwxMiArMzE4LDE0
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFJlLXN5bmNocm9u
aXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgIC8v
IGNvbnRlbnQuIE9wdGlvbmFsbHkgZm9yY2UgYSBzY3JvbGxUb3AuCi0gIGZ1bmN0aW9uIHVwZGF0
ZVNjcm9sbGJhcnMoZCAvKiBkaXNwbGF5ICovLCBkb2NIZWlnaHQpIHsKKyAgZnVuY3Rpb24gdXBk
YXRlU2Nyb2xsYmFycyhjbSkgeworICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jSGVpZ2h0ID0g
Y20uZG9jLmhlaWdodDsKICAgICB2YXIgdG90YWxIZWlnaHQgPSBkb2NIZWlnaHQgKyBwYWRkaW5n
VmVydChkKTsKICAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGQuaGVpZ2h0Rm9yY2VyLnN0
eWxlLnRvcCA9IHRvdGFsSGVpZ2h0ICsgInB4IjsKKyAgICBkLmd1dHRlcnMuc3R5bGUuaGVpZ2h0
ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xs
ZXJDdXRPZmYpICsgInB4IjsKICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgodG90YWxI
ZWlnaHQsIGQuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KTsKLSAgICB2YXIgbmVlZHNIID0gZC5zY3Jv
bGxlci5zY3JvbGxXaWR0aCA+IGQuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgdmFyIG5lZWRz
ViA9IHNjcm9sbEhlaWdodCA+IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0OworICAgIHZhciBuZWVk
c0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoID4gKGQuc2Nyb2xsZXIuY2xpZW50V2lkdGggKyAx
KTsKKyAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gKGQuc2Nyb2xsZXIuY2xpZW50SGVp
Z2h0ICsgMSk7CiAgICAgaWYgKG5lZWRzVikgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRp
c3BsYXkgPSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRz
SCA/IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOwpAQCAtMzQxLDYgKzM0
MiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGQuc2Nyb2xs
YmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJGaWxs
ZXIuc3R5bGUuaGVpZ2h0ID0gZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGggPSBzY3JvbGxi
YXJXaWR0aChkLm1lYXN1cmUpICsgInB4IjsKICAgICB9IGVsc2UgZC5zY3JvbGxiYXJGaWxsZXIu
c3R5bGUuZGlzcGxheSA9ICIiOworICAgIGlmIChuZWVkc0ggJiYgY20ub3B0aW9ucy5jb3Zlckd1
dHRlck5leHRUb1Njcm9sbGJhciAmJiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7CisgICAgICBk
Lmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgIGQuZ3V0dGVyRmls
bGVyLnN0eWxlLmhlaWdodCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOworICAg
ICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGggKyAi
cHgiOworICAgIH0gZWxzZSBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAKICAg
ICBpZiAobWFjX2dlTGlvbiAmJiBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpID09PSAwKQogICAg
ICAgZC5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoID0gZC5zY3JvbGxiYXJILnN0eWxlLm1pbkhl
aWdodCA9IG1hY19nZU1vdW50YWluTGlvbiA/ICIxOHB4IiA6ICIxMnB4IjsKQEAgLTM5OSwxNCAr
NDA1LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBvbGRG
cm9tID0gY20uZGlzcGxheS5zaG93aW5nRnJvbSwgb2xkVG8gPSBjbS5kaXNwbGF5LnNob3dpbmdU
bywgdXBkYXRlZDsKICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBj
bS5kb2MsIHZpZXdQb3J0KTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICBpZiAodXBkYXRlRGlzcGxh
eUlubmVyKGNtLCBjaGFuZ2VzLCB2aXNpYmxlKSkgewotICAgICAgICB1cGRhdGVkID0gdHJ1ZTsK
LSAgICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICAgIGlmIChjbS5k
aXNwbGF5LnNob3dpbmdGcm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0g
b2xkVG8pCi0gICAgICAgICAgc2lnbmFsTGF0ZXIoY20sICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBj
bS5kaXNwbGF5LnNob3dpbmdGcm9tLCBjbS5kaXNwbGF5LnNob3dpbmdUbyk7Ci0gICAgICB9IGVs
c2UgYnJlYWs7CisgICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywgdmlz
aWJsZSkpIGJyZWFrOworICAgICAgdXBkYXRlZCA9IHRydWU7CiAgICAgICB1cGRhdGVTZWxlY3Rp
b24oY20pOwotICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNwbGF5LCBjbS5kb2MuaGVpZ2h0
KTsKKyAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20pOwogCiAgICAgICAvLyBDbGlwIGZvcmNlZCB2
aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhCiAgICAgICBpZiAodmlld1BvcnQpCkBA
IC00MTgsNiArNDIwLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgY2hhbmdlcyA9IFtdOwogICAgIH0KIAorICAgIGlmICh1cGRhdGVkKSB7CisgICAgICBzaWdu
YWxMYXRlcihjbSwgInVwZGF0ZSIsIGNtKTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnNob3dpbmdG
cm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0gb2xkVG8pCisgICAgICAg
IHNpZ25hbExhdGVyKGNtLCAidmlld3BvcnRDaGFuZ2UiLCBjbSwgY20uZGlzcGxheS5zaG93aW5n
RnJvbSwgY20uZGlzcGxheS5zaG93aW5nVG8pOworICAgIH0KICAgICByZXR1cm4gdXBkYXRlZDsK
ICAgfQogCkBAIC01MDUsOSArNTEyLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhl
aWdodDsKICAgICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0cyB3
aGVuIHRoZSBlZGl0b3IgaXMKICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdl
cy4KLSAgICBpZiAoZGlmZmVyZW50KSBkaXNwbGF5Lmxhc3RTaXplQyA9IGRpc3BsYXkud3JhcHBl
ci5jbGllbnRIZWlnaHQ7CisgICAgaWYgKGRpZmZlcmVudCkgeworICAgICAgZGlzcGxheS5sYXN0
U2l6ZUMgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgc3RhcnRXb3JrZXIo
Y20sIDQwMCk7CisgICAgfQogICAgIGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBmcm9tOyBkaXNwbGF5
LnNob3dpbmdUbyA9IHRvOwotICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogCiAgICAgdmFyIHBy
ZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wOwogICAgIGZvciAodmFyIG5vZGUg
PSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0OyBub2RlOyBub2RlID0gbm9kZS5u
ZXh0U2libGluZykgaWYgKG5vZGUubGluZU9iaikgewpAQCAtNTk2LDggKzYwNSw5IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG5leHRJbnRhY3QgJiYgbmV4
dEludGFjdC50byA9PSBsaW5lTikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwogICAgICAg
aWYgKGxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7CiAgICAgICAgIGlmIChsaW5lLmhlaWdo
dCAhPSAwKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgICBpZiAobGluZS53aWRn
ZXRzICYmIGN1ci5wcmV2aW91c1NpYmxpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRn
ZXRzLmxlbmd0aDsgKytpKQotICAgICAgICAgIGlmIChsaW5lLndpZGdldHNbaV0uc2hvd0lmSGlk
ZGVuKSB7CisgICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyLnByZXZpb3VzU2libGluZykg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICB2YXIgdyA9IGxpbmUud2lkZ2V0c1tpXTsKKyAgICAgICAgICBpZiAody5zaG93SWZIaWRkZW4p
IHsKICAgICAgICAgICAgIHZhciBwcmV2ID0gY3VyLnByZXZpb3VzU2libGluZzsKICAgICAgICAg
ICAgIGlmICgvcHJlL2kudGVzdChwcmV2Lm5vZGVOYW1lKSkgewogICAgICAgICAgICAgICB2YXIg
d3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwpAQCAt
NjA1LDkgKzYxNSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChwcmV2KTsKICAgICAgICAgICAgICAgcHJldiA9IHdy
YXA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgd25vZGUgPSBwcmV2LmFwcGVuZENo
aWxkKGVsdCgiZGl2IiwgW2xpbmUud2lkZ2V0c1tpXS5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdp
ZGdldCIpKTsKLSAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldChsaW5lLndpZGdldHNbaV0s
IHdub2RlLCBwcmV2LCBkaW1zKTsKKyAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBwZW5k
Q2hpbGQoZWx0KCJkaXYiLCBbdy5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsKKyAg
ICAgICAgICAgIGlmICghdy5oYW5kbGVNb3VzZUV2ZW50cykgd25vZGUuaWdub3JlRXZlbnRzID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3LCB3bm9kZSwgcHJldiwgZGlt
cyk7CiAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKG5leHRJbnRhY3Qg
JiYgbmV4dEludGFjdC5mcm9tIDw9IGxpbmVOICYmIG5leHRJbnRhY3QudG8gPiBsaW5lTikgewog
ICAgICAgICAvLyBUaGlzIGxpbmUgaXMgaW50YWN0LiBTa2lwIHRvIHRoZSBhY3R1YWwgbm9kZS4g
VXBkYXRlIGl0cwogICAgICAgICAvLyBsaW5lIG51bWJlciBpZiBuZWVkZWQuCkBAIC02NTAsMjUg
KzY2MiwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGlmIChy
ZXVzZSkgewogICAgICAgcmV1c2UuYWxpZ25hYmxlID0gbnVsbDsKLSAgICAgIHZhciBpc09rID0g
dHJ1ZSwgd2lkZ2V0c1NlZW4gPSAwOworICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3aWRnZXRzU2Vl
biA9IDAsIGluc2VydEJlZm9yZSA9IG51bGw7CiAgICAgICBmb3IgKHZhciBuID0gcmV1c2UuZmly
c3RDaGlsZCwgbmV4dDsgbjsgbiA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IG4ubmV4dFNpYmxp
bmc7CiAgICAgICAgIGlmICghL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIvLnRlc3Qobi5jbGFz
c05hbWUpKSB7CiAgICAgICAgICAgcmV1c2UucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGZpcnN0ID0gdHJ1ZTsgaSA8IGxpbmUud2lk
Z2V0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHdpZGdldCA9IGxpbmUud2lkZ2V0
c1tpXSwgaXNGaXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCF3aWRnZXQuYWJvdmUpIHsg
aXNGaXJzdCA9IGZpcnN0OyBmaXJzdCA9IGZhbHNlOyB9CisgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB3aWRn
ZXQgPSBsaW5lLndpZGdldHNbaV07CiAgICAgICAgICAgICBpZiAod2lkZ2V0Lm5vZGUgPT0gbi5m
aXJzdENoaWxkKSB7CisgICAgICAgICAgICAgIGlmICghd2lkZ2V0LmFib3ZlICYmICFpbnNlcnRC
ZWZvcmUpIGluc2VydEJlZm9yZSA9IG47CiAgICAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdl
dCh3aWRnZXQsIG4sIHJldXNlLCBkaW1zKTsKICAgICAgICAgICAgICAgKyt3aWRnZXRzU2VlbjsK
LSAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHJldXNlLmluc2VydEJlZm9yZShsaW5lRWxlbWVu
dCwgbik7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0K
ICAgICAgICAgICBpZiAoaSA9PSBsaW5lLndpZGdldHMubGVuZ3RoKSB7IGlzT2sgPSBmYWxzZTsg
YnJlYWs7IH0KICAgICAgICAgfQogICAgICAgfQorICAgICAgcmV1c2UuaW5zZXJ0QmVmb3JlKGxp
bmVFbGVtZW50LCBpbnNlcnRCZWZvcmUpOwogICAgICAgaWYgKGlzT2sgJiYgd2lkZ2V0c1NlZW4g
PT0gbGluZS53aWRnZXRzLmxlbmd0aCkgewogICAgICAgICB3cmFwID0gcmV1c2U7CiAgICAgICAg
IHJldXNlLmNsYXNzTmFtZSA9IGxpbmUud3JhcENsYXNzIHx8ICIiOwpAQCAtNzAzLDYgKzcxNSw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpZV9sdDgpIHdy
YXAuc3R5bGUuekluZGV4ID0gMjsKICAgICBpZiAobGluZS53aWRnZXRzICYmIHdyYXAgIT0gcmV1
c2UpIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytp
KSB7CiAgICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoImRpdiIsIFt3aWRnZXQu
bm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTsKKyAgICAgIGlmICghd2lkZ2V0LmhhbmRs
ZU1vdXNlRXZlbnRzKSBub2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7CiAgICAgICBwb3NpdGlvbkxp
bmVXaWRnZXQod2lkZ2V0LCBub2RlLCB3cmFwLCBkaW1zKTsKICAgICAgIGlmICh3aWRnZXQuYWJv
dmUpCiAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLm9wdGlvbnMubGluZU51bWJl
cnMgJiYgbGluZS5oZWlnaHQgIT0gMCA/IGd1dHRlcldyYXAgOiBsaW5lRWxlbWVudCk7CkBAIC03
ODUsNjcgKzc5OCw1OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0b3Ap
ICsgInB4IikpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21B
cmcsIHRvQXJnLCByZXRUb3ApIHsKKyAgICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9t
QXJnLCB0b0FyZykgewogICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7Ci0g
ICAgICB2YXIgbGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIHJWYWwgPSByZXRUb3AgPyBJ
bmZpbml0eSA6IC1JbmZpbml0eTsKLSAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCkgewotICAgICAg
ICByZXR1cm4gY2hhckNvb3JkcyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxpbmVPYmopOwor
ICAgICAgdmFyIGxpbmVMZW4gPSBsaW5lT2JqLnRleHQubGVuZ3RoOworICAgICAgdmFyIHN0YXJ0
LCBlbmQ7CisgICAgICBmdW5jdGlvbiBjb29yZHMoY2gsIGJpYXMpIHsKKyAgICAgICAgcmV0dXJu
IGNoYXJDb29yZHMoY20sIFBvcyhsaW5lLCBjaCksICJkaXYiLCBsaW5lT2JqLCBiaWFzKTsKICAg
ICAgIH0KIAogICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhnZXRPcmRlcihsaW5lT2JqKSwgZnJv
bUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbihmcm9t
LCB0bywgZGlyKSB7Ci0gICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGRpciA9PSAicnRsIiA/
IHRvIC0gMSA6IGZyb20pOwotICAgICAgICB2YXIgcmlnaHRQb3MgPSBjb29yZHMoZGlyID09ICJy
dGwiID8gZnJvbSA6IHRvIC0gMSk7Ci0gICAgICAgIHZhciBsZWZ0ID0gbGVmdFBvcy5sZWZ0LCBy
aWdodCA9IHJpZ2h0UG9zLnJpZ2h0OworICAgICAgICB2YXIgbGVmdFBvcyA9IGNvb3Jkcyhmcm9t
LCAibGVmdCIpLCByaWdodFBvcywgbGVmdCwgcmlnaHQ7CisgICAgICAgIGlmIChmcm9tID09IHRv
KSB7CisgICAgICAgICAgcmlnaHRQb3MgPSBsZWZ0UG9zOworICAgICAgICAgIGxlZnQgPSByaWdo
dCA9IGxlZnRQb3MubGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByaWdodFBvcyA9
IGNvb3Jkcyh0byAtIDEsICJyaWdodCIpOworICAgICAgICAgIGlmIChkaXIgPT0gInJ0bCIpIHsg
dmFyIHRtcCA9IGxlZnRQb3M7IGxlZnRQb3MgPSByaWdodFBvczsgcmlnaHRQb3MgPSB0bXA7IH0K
KyAgICAgICAgICBsZWZ0ID0gbGVmdFBvcy5sZWZ0OworICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQ
b3MucmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9t
ID09IDApIGxlZnQgPSBwbDsKICAgICAgICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9w
ID4gMykgeyAvLyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9wIHBhcnQKICAgICAgICAgICBhZGQo
bGVmdCwgbGVmdFBvcy50b3AsIG51bGwsIGxlZnRQb3MuYm90dG9tKTsKICAgICAgICAgICBsZWZ0
ID0gcGw7CiAgICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQo
bGVmdCwgbGVmdFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSBjbGllbnRX
aWR0aDsKLSAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBw
bDsKLSAgICAgICAgclZhbCA9IHJldFRvcCA/IE1hdGgubWluKHJpZ2h0UG9zLnRvcCwgclZhbCkg
OiBNYXRoLm1heChyaWdodFBvcy5ib3R0b20sIHJWYWwpOworICAgICAgICBpZiAoIXN0YXJ0IHx8
IGxlZnRQb3MudG9wIDwgc3RhcnQudG9wIHx8IGxlZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBs
ZWZ0UG9zLmxlZnQgPCBzdGFydC5sZWZ0KQorICAgICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKKyAg
ICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQb3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBv
cy5ib3R0b20gPT0gZW5kLmJvdHRvbSAmJiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKKyAg
ICAgICAgICBlbmQgPSByaWdodFBvczsKICAgICAgICAgaWYgKGxlZnQgPCBwbCArIDEpIGxlZnQg
PSBwbDsKICAgICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdo
dFBvcy5ib3R0b20pOwogICAgICAgfSk7Ci0gICAgICByZXR1cm4gclZhbDsKKyAgICAgIHJldHVy
biB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07CiAgICAgfQogCiAgICAgaWYgKHNlbC5mcm9tLmxp
bmUgPT0gc2VsLnRvLmxpbmUpIHsKICAgICAgIGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNl
bC5mcm9tLmNoLCBzZWwudG8uY2gpOwogICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgZnJvbU9iaiA9
IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKTsKLSAgICAgIHZhciBjdXIgPSBmcm9tT2JqLCBt
ZXJnZWQsIHBhdGggPSBbc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2hdLCBzaW5nbGVMaW5lOwot
ICAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChjdXIpKSB7Ci0gICAgICAg
IHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKCk7Ci0gICAgICAgIHBhdGgucHVzaChmb3VuZC5mcm9t
LmNoLCBmb3VuZC50by5saW5lLCBmb3VuZC50by5jaCk7Ci0gICAgICAgIGlmIChmb3VuZC50by5s
aW5lID09IHNlbC50by5saW5lKSB7Ci0gICAgICAgICAgcGF0aC5wdXNoKHNlbC50by5jaCk7Ci0g
ICAgICAgICAgc2luZ2xlTGluZSA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7CisgICAgICB2YXIg
ZnJvbUxpbmUgPSBnZXRMaW5lKGRvYywgc2VsLmZyb20ubGluZSksIHRvTGluZSA9IGdldExpbmUo
ZG9jLCBzZWwudG8ubGluZSk7CisgICAgICB2YXIgc2luZ2xlVkxpbmUgPSB2aXN1YWxMaW5lKGRv
YywgZnJvbUxpbmUpID09IHZpc3VhbExpbmUoZG9jLCB0b0xpbmUpOworICAgICAgdmFyIGxlZnRF
bmQgPSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgc2luZ2xlVkxpbmUg
PyBmcm9tTGluZS50ZXh0Lmxlbmd0aCA6IG51bGwpLmVuZDsKKyAgICAgIHZhciByaWdodFN0YXJ0
ID0gZHJhd0ZvckxpbmUoc2VsLnRvLmxpbmUsIHNpbmdsZVZMaW5lID8gMCA6IG51bGwsIHNlbC50
by5jaCkuc3RhcnQ7CisgICAgICBpZiAoc2luZ2xlVkxpbmUpIHsKKyAgICAgICAgaWYgKGxlZnRF
bmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7CisgICAgICAgICAgYWRkKGxlZnRFbmQucmln
aHQsIGxlZnRFbmQudG9wLCBudWxsLCBsZWZ0RW5kLmJvdHRvbSk7CisgICAgICAgICAgYWRkKHBs
LCByaWdodFN0YXJ0LnRvcCwgcmlnaHRTdGFydC5sZWZ0LCByaWdodFN0YXJ0LmJvdHRvbSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9w
LCByaWdodFN0YXJ0LmxlZnQgLSBsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLmJvdHRvbSk7CiAgICAg
ICAgIH0KLSAgICAgICAgY3VyID0gZ2V0TGluZShkb2MsIGZvdW5kLnRvLmxpbmUpOwotICAgICAg
fQotCi0gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlLCBtZXJnZWQgbGluZQotICAgICAgaWYgKHNp
bmdsZUxpbmUpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSAr
PSAzKQotICAgICAgICAgIGRyYXdGb3JMaW5lKHBhdGhbaV0sIHBhdGhbaSsxXSwgcGF0aFtpKzJd
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBtaWRkbGVUb3AsIG1pZGRsZUJvdCwgdG9P
YmogPSBnZXRMaW5lKGRvYywgc2VsLnRvLmxpbmUpOwotICAgICAgICBpZiAoc2VsLmZyb20uY2gp
Ci0gICAgICAgICAgLy8gRHJhdyB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3Rpb24uCi0gICAgICAg
ICAgbWlkZGxlVG9wID0gZHJhd0ZvckxpbmUoc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2gsIG51
bGwsIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIC8vIFNpbXBseSBpbmNsdWRlIGl0
IGluIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgICAgICAgbWlkZGxlVG9wID0gaGVpZ2h0QXRMaW5l
KGNtLCBmcm9tT2JqKSAtIGRpc3BsYXkudmlld09mZnNldDsKLQotICAgICAgICBpZiAoIXNlbC50
by5jaCkKLSAgICAgICAgICBtaWRkbGVCb3QgPSBoZWlnaHRBdExpbmUoY20sIHRvT2JqKSAtIGRp
c3BsYXkudmlld09mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG1pZGRsZUJvdCA9IGRy
YXdGb3JMaW5lKHNlbC50by5saW5lLCBjb2xsYXBzZWRTcGFuQXRTdGFydCh0b09iaikgPyBudWxs
IDogMCwgc2VsLnRvLmNoLCB0cnVlKTsKLQotICAgICAgICBpZiAobWlkZGxlVG9wIDwgbWlkZGxl
Qm90KSBhZGQocGwsIG1pZGRsZVRvcCwgbnVsbCwgbWlkZGxlQm90KTsKICAgICAgIH0KKyAgICAg
IGlmIChsZWZ0RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9wKQorICAgICAgICBhZGQocGwsIGxl
ZnRFbmQuYm90dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7CiAgICAgfQogCiAgICAgcmVtb3Zl
Q2hpbGRyZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGZyYWdtZW50KTsKQEAgLTkxMSwx
MiArOTE2LDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyB2YWxp
ZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZQogICAv
LyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29u
dGV4dCB0bwogICAvLyBwYXJzZSBjb3JyZWN0bHkuCi0gIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUo
Y20sIG4pIHsKKyAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSkgewogICAg
IHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9IGNtLmRvYzsKICAgICBmb3IgKHZhciBzZWFy
Y2ggPSBuLCBsaW0gPSBuIC0gMTAwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7CiAgICAgICBp
ZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgcmV0dXJuIGRvYy5maXJzdDsKICAgICAgIHZhciBsaW5l
ID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpOwotICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikg
cmV0dXJuIHNlYXJjaDsKKyAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIgJiYgKCFwcmVjaXNlIHx8
IHNlYXJjaCA8PSBkb2MuZnJvbnRpZXIpKSByZXR1cm4gc2VhcmNoOwogICAgICAgdmFyIGluZGVu
dGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpOwog
ICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkgewogICAg
ICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTsKQEAgLTkyNiwxMCArOTMxLDEwIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBtaW5saW5lOwogICB9CiAKLSAg
ZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4pIHsKKyAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZv
cmUoY20sIG4sIHByZWNpc2UpIHsKICAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20u
ZGlzcGxheTsKICAgICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRydWU7Ci0g
ICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4pLCBzdGF0ZSA9IHBvcyA+IGRvYy5maXJz
dCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7CisgICAgdmFyIHBvcyA9IGZpbmRT
dGFydExpbmUoY20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9IHBvcyA+IGRvYy5maXJzdCAmJiBnZXRM
aW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7CiAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFy
dFN0YXRlKGRvYy5tb2RlKTsKICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBz
dGF0ZSk7CiAgICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7CkBAIC05NTAsNyAr
OTU1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIGUu
b2Zmc2V0TGVmdDsKICAgfQogCi0gIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwg
ZGF0YSkgeworICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGRhdGEsIGJpYXMp
IHsKICAgICB2YXIgZGlyID0gLTE7CiAgICAgZGF0YSA9IGRhdGEgfHwgbWVhc3VyZUxpbmUoY20s
IGxpbmUpOwogCkBAIC05NTksOSArOTY0LDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgaWYgKHIpIGJyZWFrOwogICAgICAgaWYgKGRpciA8IDAgJiYgcG9zID09
IDApIGRpciA9IDE7CiAgICAgfQorICAgIGJpYXMgPSBwb3MgPiBjaCA/ICJsZWZ0IiA6IHBvcyA8
IGNoID8gInJpZ2h0IiA6IGJpYXM7CisgICAgaWYgKGJpYXMgPT0gImxlZnQiICYmIHIubGVmdFNp
ZGUpIHIgPSByLmxlZnRTaWRlOworICAgIGVsc2UgaWYgKGJpYXMgPT0gInJpZ2h0IiAmJiByLnJp
Z2h0U2lkZSkgciA9IHIucmlnaHRTaWRlOwogICAgIHJldHVybiB7bGVmdDogcG9zIDwgY2ggPyBy
LnJpZ2h0IDogci5sZWZ0LAogICAgICAgICAgICAgcmlnaHQ6IHBvcyA+IGNoID8gci5sZWZ0IDog
ci5yaWdodCwKLSAgICAgICAgICAgIHRvcDogci50b3AsIGJvdHRvbTogci5ib3R0b219OworICAg
ICAgICAgICAgdG9wOiByLnRvcCwKKyAgICAgICAgICAgIGJvdHRvbTogci5ib3R0b219OwogICB9
CiAKICAgZnVuY3Rpb24gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CkBAIC05NzEs
MjMgKzk4MCwyOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlm
IChtZW1vLnRleHQgPT0gbGluZS50ZXh0ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJr
ZWRTcGFucyAmJgogICAgICAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0g
bWVtby53aWR0aCAmJgogICAgICAgICAgIG1lbW8uY2xhc3NlcyA9PSBsaW5lLnRleHRDbGFzcyAr
ICJ8IiArIGxpbmUuYmdDbGFzcyArICJ8IiArIGxpbmUud3JhcENsYXNzKQotICAgICAgICByZXR1
cm4gbWVtby5tZWFzdXJlOworICAgICAgICByZXR1cm4gbWVtbzsKICAgICB9CiAgIH0KIAorICBm
dW5jdGlvbiBjbGVhckNhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CisgICAgdmFyIGV4aXN0
cyA9IGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7CisgICAgaWYgKGV4aXN0cykgZXhp
c3RzLnRleHQgPSBleGlzdHMubWVhc3VyZSA9IGV4aXN0cy5tYXJrZWRTcGFucyA9IG51bGw7Cisg
IH0KKwogICBmdW5jdGlvbiBtZWFzdXJlTGluZShjbSwgbGluZSkgewogICAgIC8vIEZpcnN0IGxv
b2sgaW4gdGhlIGNhY2hlCi0gICAgdmFyIG1lYXN1cmUgPSBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQo
Y20sIGxpbmUpOwotICAgIGlmICghbWVhc3VyZSkgewotICAgICAgLy8gRmFpbGluZyB0aGF0LCBy
ZWNvbXB1dGUgYW5kIHN0b3JlIHJlc3VsdCBpbiBjYWNoZQotICAgICAgbWVhc3VyZSA9IG1lYXN1
cmVMaW5lSW5uZXIoY20sIGxpbmUpOwotICAgICAgdmFyIGNhY2hlID0gY20uZGlzcGxheS5tZWFz
dXJlTGluZUNhY2hlOwotICAgICAgdmFyIG1lbW8gPSB7dGV4dDogbGluZS50ZXh0LCB3aWR0aDog
Y20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAgICAgICAgICAgIG1hcmtl
ZFNwYW5zOiBsaW5lLm1hcmtlZFNwYW5zLCBtZWFzdXJlOiBtZWFzdXJlLAotICAgICAgICAgICAg
ICAgICAgY2xhc3NlczogbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLmJnQ2xhc3MgKyAifCIg
KyBsaW5lLndyYXBDbGFzc307Ci0gICAgICBpZiAoY2FjaGUubGVuZ3RoID09IDE2KSBjYWNoZVsr
K2NtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyAlIDE2XSA9IG1lbW87Ci0gICAgICBlbHNl
IGNhY2hlLnB1c2gobWVtbyk7Ci0gICAgfQorICAgIHZhciBjYWNoZWQgPSBmaW5kQ2FjaGVkTWVh
c3VyZW1lbnQoY20sIGxpbmUpOworICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQubWVhc3Vy
ZTsKKworICAgIC8vIEZhaWxpbmcgdGhhdCwgcmVjb21wdXRlIGFuZCBzdG9yZSByZXN1bHQgaW4g
Y2FjaGUKKyAgICB2YXIgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5uZXIoY20sIGxpbmUpOworICAg
IHZhciBjYWNoZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZTsKKyAgICB2YXIgbWVtbyA9
IHt0ZXh0OiBsaW5lLnRleHQsIHdpZHRoOiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRo
LAorICAgICAgICAgICAgICAgIG1hcmtlZFNwYW5zOiBsaW5lLm1hcmtlZFNwYW5zLCBtZWFzdXJl
OiBtZWFzdXJlLAorICAgICAgICAgICAgICAgIGNsYXNzZXM6IGxpbmUudGV4dENsYXNzICsgInwi
ICsgbGluZS5iZ0NsYXNzICsgInwiICsgbGluZS53cmFwQ2xhc3N9OworICAgIGlmIChjYWNoZS5s
ZW5ndGggPT0gMTYpIGNhY2hlWysrY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zICUgMTZd
ID0gbWVtbzsKKyAgICBlbHNlIGNhY2hlLnB1c2gobWVtbyk7CiAgICAgcmV0dXJuIG1lYXN1cmU7
CiAgIH0KIApAQCAtMTAyOSwzMCArMTA0Myw1MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBpZiAoaWVfbHQ5ICYmIGRpc3BsYXkubWVhc3VyZS5maXJzdCAhPSBwcmUp
CiAgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7CiAKLSAg
ICBmb3IgKHZhciBpID0gMCwgY3VyOyBpIDwgbWVhc3VyZS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9
IG1lYXN1cmVbaV0pIHsKLSAgICAgIHZhciBzaXplID0gZ2V0UmVjdChjdXIpOwotICAgICAgdmFy
IHRvcCA9IE1hdGgubWF4KDAsIHNpemUudG9wIC0gb3V0ZXIudG9wKSwgYm90ID0gTWF0aC5taW4o
c2l6ZS5ib3R0b20gLSBvdXRlci50b3AsIG1heEJvdCk7Ci0gICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHZyYW5nZXMubGVuZ3RoOyBqICs9IDIpIHsKLSAgICAgICAgdmFyIHJ0b3AgPSB2cmFuZ2Vz
W2pdLCByYm90ID0gdnJhbmdlc1tqKzFdOworICAgIGZ1bmN0aW9uIG1lYXN1cmVSZWN0KHJlY3Qp
IHsKKyAgICAgIHZhciB0b3AgPSByZWN0LnRvcCAtIG91dGVyLnRvcCwgYm90ID0gcmVjdC5ib3R0
b20gLSBvdXRlci50b3A7CisgICAgICBpZiAoYm90ID4gbWF4Qm90KSBib3QgPSBtYXhCb3Q7Cisg
ICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKKyAgICAgIGZvciAodmFyIGkgPSB2cmFuZ2VzLmxl
bmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7CisgICAgICAgIHZhciBydG9wID0gdnJhbmdlc1tp
XSwgcmJvdCA9IHZyYW5nZXNbaSsxXTsKICAgICAgICAgaWYgKHJ0b3AgPiBib3QgfHwgcmJvdCA8
IHRvcCkgY29udGludWU7CiAgICAgICAgIGlmIChydG9wIDw9IHRvcCAmJiByYm90ID49IGJvdCB8
fAogICAgICAgICAgICAgdG9wIDw9IHJ0b3AgJiYgYm90ID49IHJib3QgfHwKICAgICAgICAgICAg
IE1hdGgubWluKGJvdCwgcmJvdCkgLSBNYXRoLm1heCh0b3AsIHJ0b3ApID49IChib3QgLSB0b3Ap
ID4+IDEpIHsKLSAgICAgICAgICB2cmFuZ2VzW2pdID0gTWF0aC5taW4odG9wLCBydG9wKTsKLSAg
ICAgICAgICB2cmFuZ2VzW2orMV0gPSBNYXRoLm1heChib3QsIHJib3QpOworICAgICAgICAgIHZy
YW5nZXNbaV0gPSBNYXRoLm1pbih0b3AsIHJ0b3ApOworICAgICAgICAgIHZyYW5nZXNbaSsxXSA9
IE1hdGgubWF4KGJvdCwgcmJvdCk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
IH0KLSAgICAgIGlmIChqID09IHZyYW5nZXMubGVuZ3RoKSB2cmFuZ2VzLnB1c2godG9wLCBib3Qp
OwotICAgICAgdmFyIHJpZ2h0ID0gc2l6ZS5yaWdodDsKLSAgICAgIGlmIChjdXIubWVhc3VyZVJp
Z2h0KSByaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCkubGVmdDsKLSAgICAgIGRhdGFb
aV0gPSB7bGVmdDogc2l6ZS5sZWZ0IC0gb3V0ZXIubGVmdCwgcmlnaHQ6IHJpZ2h0IC0gb3V0ZXIu
bGVmdCwgdG9wOiBqfTsKKyAgICAgIGlmIChpIDwgMCkgeyBpID0gdnJhbmdlcy5sZW5ndGg7IHZy
YW5nZXMucHVzaCh0b3AsIGJvdCk7IH0KKyAgICAgIHJldHVybiB7bGVmdDogcmVjdC5sZWZ0IC0g
b3V0ZXIubGVmdCwKKyAgICAgICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgLSBvdXRlci5sZWZ0
LAorICAgICAgICAgICAgICB0b3A6IGksIGJvdHRvbTogbnVsbH07CiAgICAgfQotICAgIGZvciAo
dmFyIGkgPSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkg
ewotICAgICAgdmFyIHZyID0gY3VyLnRvcDsKLSAgICAgIGN1ci50b3AgPSB2cmFuZ2VzW3ZyXTsg
Y3VyLmJvdHRvbSA9IHZyYW5nZXNbdnIrMV07CisgICAgZnVuY3Rpb24gZmluaXNoUmVjdChyZWN0
KSB7CisgICAgICByZWN0LmJvdHRvbSA9IHZyYW5nZXNbcmVjdC50b3ArMV07CisgICAgICByZWN0
LnRvcCA9IHZyYW5nZXNbcmVjdC50b3BdOwogICAgIH0KIAorICAgIGZvciAodmFyIGkgPSAwLCBj
dXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gbWVhc3VyZVtpXSkgeworICAg
ICAgdmFyIG5vZGUgPSBjdXIsIHJlY3QgPSBudWxsOworICAgICAgLy8gQSB3aWRnZXQgbWlnaHQg
d3JhcCwgbmVlZHMgc3BlY2lhbCBjYXJlCisgICAgICBpZiAoL1xiQ29kZU1pcnJvci13aWRnZXRc
Yi8udGVzdChjdXIuY2xhc3NOYW1lKSAmJiBjdXIuZ2V0Q2xpZW50UmVjdHMpIHsKKyAgICAgICAg
aWYgKGN1ci5maXJzdENoaWxkLm5vZGVUeXBlID09IDEpIG5vZGUgPSBjdXIuZmlyc3RDaGlsZDsK
KyAgICAgICAgdmFyIHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpOworICAgICAgICBpZiAo
cmVjdHMubGVuZ3RoID4gMSkgeworICAgICAgICAgIHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJl
Y3QocmVjdHNbMF0pOworICAgICAgICAgIHJlY3QucmlnaHRTaWRlID0gbWVhc3VyZVJlY3QocmVj
dHNbcmVjdHMubGVuZ3RoIC0gMV0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIXJl
Y3QpIHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QoZ2V0UmVjdChub2RlKSk7CisgICAgICBp
ZiAoY3VyLm1lYXN1cmVSaWdodCkgcmVjdC5yaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdo
dCkubGVmdDsKKyAgICAgIGlmIChjdXIubGVmdFNpZGUpIHJlY3QubGVmdFNpZGUgPSBtZWFzdXJl
UmVjdChnZXRSZWN0KGN1ci5sZWZ0U2lkZSkpOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMCwg
Y3VyOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IGRhdGFbaV0pIHsKKyAgICAgIGZp
bmlzaFJlY3QoY3VyKTsKKyAgICAgIGlmIChjdXIubGVmdFNpZGUpIGZpbmlzaFJlY3QoY3VyLmxl
ZnRTaWRlKTsKKyAgICAgIGlmIChjdXIucmlnaHRTaWRlKSBmaW5pc2hSZWN0KGN1ci5yaWdodFNp
ZGUpOworICAgIH0KICAgICByZXR1cm4gZGF0YTsKICAgfQogCkBAIC0xMDYzLDcgKzEwOTgsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChzcC5jb2xsYXBz
ZWQgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0Jh
ZFNwYW4gPSB0cnVlOwogICAgIH0KICAgICB2YXIgY2FjaGVkID0gIWhhc0JhZFNwYW4gJiYgZmlu
ZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAoY2FjaGVkKSByZXR1cm4gbWVh
c3VyZUNoYXIoY20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgsIGNhY2hlZCkucmlnaHQ7CisgICAg
aWYgKGNhY2hlZCkgcmV0dXJuIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBsaW5lLnRleHQubGVuZ3Ro
LCBjYWNoZWQubWVhc3VyZSwgInJpZ2h0IikucmlnaHQ7CiAKICAgICB2YXIgcHJlID0gbGluZUNv
bnRlbnQoY20sIGxpbmUpOwogICAgIHZhciBlbmQgPSBwcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRo
RWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKQEAgLTEwNzgsNiArMTExMyw5IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJz
ID0gbnVsbDsKICAgfQogCisgIGZ1bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93
LnBhZ2VYT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9k
eSkuc2Nyb2xsTGVmdDsgfQorICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRv
dy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJv
ZHkpLnNjcm9sbFRvcDsgfQorCiAgIC8vIENvbnRleHQgaXMgb25lIG9mICJsaW5lIiwgImRpdiIg
KGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiCiAgIGZ1
bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAg
IGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRz
Lmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CkBAIC0xMDg3LDEx
ICsxMTI1LDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChj
b250ZXh0ID09ICJsaW5lIikgcmV0dXJuIHJlY3Q7CiAgICAgaWYgKCFjb250ZXh0KSBjb250ZXh0
ID0gImxvY2FsIjsKICAgICB2YXIgeU9mZiA9IGhlaWdodEF0TGluZShjbSwgbGluZU9iaik7Ci0g
ICAgaWYgKGNvbnRleHQgIT0gImxvY2FsIikgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7
Ci0gICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiKSB7CisgICAgaWYgKGNvbnRleHQgPT0gImxvY2Fs
IikgeU9mZiArPSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOworICAgIGVsc2UgeU9mZiAtPSBjbS5k
aXNwbGF5LnZpZXdPZmZzZXQ7CisgICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiIHx8IGNvbnRleHQg
PT0gIndpbmRvdyIpIHsKICAgICAgIHZhciBsT2ZmID0gZ2V0UmVjdChjbS5kaXNwbGF5LmxpbmVT
cGFjZSk7Ci0gICAgICB5T2ZmICs9IGxPZmYudG9wICsgKHdpbmRvdy5wYWdlWU9mZnNldCB8fCAo
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcCk7Ci0g
ICAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0KTsKKyAgICAg
IHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xs
WSgpKTsKKyAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIg
PyAwIDogcGFnZVNjcm9sbFgoKSk7CiAgICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVjdC5yaWdo
dCArPSB4T2ZmOwogICAgIH0KICAgICByZWN0LnRvcCArPSB5T2ZmOyByZWN0LmJvdHRvbSArPSB5
T2ZmOwpAQCAtMTEwMyw2NCArMTE0Miw1OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgZnVuY3Rpb24gZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMsIGNvbnRleHQpIHsK
ICAgICBpZiAoY29udGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKICAgICB2YXIgbGVmdCA9
IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wOworICAgIC8vIEZpcnN0IG1vdmUgaW50byAi
cGFnZSIgY29vcmRpbmF0ZSBzeXN0ZW0KICAgICBpZiAoY29udGV4dCA9PSAicGFnZSIpIHsKLSAg
ICAgIGxlZnQgLT0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdDsKLSAgICAgIHRvcCAtPSB3aW5kb3cucGFn
ZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5z
Y3JvbGxUb3A7CisgICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7CisgICAgICB0b3AgLT0gcGFn
ZVNjcm9sbFkoKTsKKyAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4
dCkgeworICAgICAgdmFyIGxvY2FsQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LnNpemVyKTsKKyAg
ICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDsKKyAgICAgIHRvcCArPSBsb2NhbEJveC50b3A7CiAg
ICAgfQorCiAgICAgdmFyIGxpbmVTcGFjZUJveCA9IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3Bh
Y2UpOwotICAgIGxlZnQgLT0gbGluZVNwYWNlQm94LmxlZnQ7Ci0gICAgdG9wIC09IGxpbmVTcGFj
ZUJveC50b3A7Ci0gICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkgewotICAg
ICAgdmFyIGVkaXRvckJveCA9IGdldFJlY3QoY20uZGlzcGxheS53cmFwcGVyKTsKLSAgICAgIGxl
ZnQgKz0gZWRpdG9yQm94LmxlZnQ7Ci0gICAgICB0b3AgKz0gZWRpdG9yQm94LnRvcDsKLSAgICB9
Ci0gICAgcmV0dXJuIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcH07CisgICAgcmV0dXJuIHtsZWZ0OiBs
ZWZ0IC0gbGluZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNlQm94LnRvcH07CiAg
IH0KIAotICBmdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmopIHsK
KyAgZnVuY3Rpb24gY2hhckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7
CiAgICAgaWYgKCFsaW5lT2JqKSBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsK
LSAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwg
bGluZU9iaiwgcG9zLmNoKSwgY29udGV4dCk7CisgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShj
bSwgbGluZU9iaiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgbnVsbCwgYmlhcyks
IGNvbnRleHQpOwogICB9CiAKICAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRl
eHQsIGxpbmVPYmosIG1lYXN1cmVtZW50KSB7CiAgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0
TGluZShjbS5kb2MsIHBvcy5saW5lKTsKICAgICBpZiAoIW1lYXN1cmVtZW50KSBtZWFzdXJlbWVu
dCA9IG1lYXN1cmVMaW5lKGNtLCBsaW5lT2JqKTsKICAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0
KSB7Ci0gICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBjaCwgbWVhc3VyZW1l
bnQpOworICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgY2gsIG1lYXN1cmVt
ZW50LCByaWdodCA/ICJyaWdodCIgOiAibGVmdCIpOwogICAgICAgaWYgKHJpZ2h0KSBtLmxlZnQg
PSBtLnJpZ2h0OyBlbHNlIG0ucmlnaHQgPSBtLmxlZnQ7CiAgICAgICByZXR1cm4gaW50b0Nvb3Jk
U3lzdGVtKGNtLCBsaW5lT2JqLCBtLCBjb250ZXh0KTsKICAgICB9Ci0gICAgdmFyIG9yZGVyID0g
Z2V0T3JkZXIobGluZU9iaiksIGNoID0gcG9zLmNoOwotICAgIGlmICghb3JkZXIpIHJldHVybiBn
ZXQoY2gpOwotICAgIHZhciBtYWluLCBvdGhlciwgbGluZWRpciA9IG9yZGVyWzBdLmxldmVsOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBw
YXJ0ID0gb3JkZXJbaV0sIHJ0bCA9IHBhcnQubGV2ZWwgJSAyLCBuYiwgaGVyZTsKLSAgICAgIGlm
IChwYXJ0LmZyb20gPCBjaCAmJiBwYXJ0LnRvID4gY2gpIHJldHVybiBnZXQoY2gsIHJ0bCk7Ci0g
ICAgICB2YXIgbGVmdCA9IHJ0bCA/IHBhcnQudG8gOiBwYXJ0LmZyb20sIHJpZ2h0ID0gcnRsID8g
cGFydC5mcm9tIDogcGFydC50bzsKLSAgICAgIGlmIChsZWZ0ID09IGNoKSB7Ci0gICAgICAgIC8v
IElFIHJldHVybnMgYm9ndXMgb2Zmc2V0cyBhbmQgd2lkdGhzIGZvciBlZGdlcyB3aGVyZSB0aGUK
LSAgICAgICAgLy8gZGlyZWN0aW9uIGZsaXBzLCBidXQgb25seSBmb3IgdGhlIHNpZGUgd2l0aCB0
aGUgbG93ZXIKLSAgICAgICAgLy8gbGV2ZWwuIFNvIHdlIHRyeSB0byB1c2UgdGhlIHNpZGUgd2l0
aCB0aGUgaGlnaGVyIGxldmVsLgotICAgICAgICBpZiAoaSAmJiBwYXJ0LmxldmVsIDwgKG5iID0g
b3JkZXJbaS0xXSkubGV2ZWwpIGhlcmUgPSBnZXQobmIubGV2ZWwgJSAyID8gbmIuZnJvbSA6IG5i
LnRvIC0gMSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UgaGVyZSA9IGdldChydGwgJiYgcGFydC5mcm9t
ICE9IHBhcnQudG8gPyBjaCAtIDEgOiBjaCk7Ci0gICAgICAgIGlmIChydGwgPT0gbGluZWRpcikg
bWFpbiA9IGhlcmU7IGVsc2Ugb3RoZXIgPSBoZXJlOwotICAgICAgfSBlbHNlIGlmIChyaWdodCA9
PSBjaCkgewotICAgICAgICB2YXIgbmIgPSBpIDwgb3JkZXIubGVuZ3RoIC0gMSAmJiBvcmRlcltp
KzFdOwotICAgICAgICBpZiAoIXJ0bCAmJiBuYiAmJiBuYi5mcm9tID09IG5iLnRvKSBjb250aW51
ZTsKLSAgICAgICAgaWYgKG5iICYmIHBhcnQubGV2ZWwgPCBuYi5sZXZlbCkgaGVyZSA9IGdldChu
Yi5sZXZlbCAlIDIgPyBuYi50byAtIDEgOiBuYi5mcm9tKTsKLSAgICAgICAgZWxzZSBoZXJlID0g
Z2V0KHJ0bCA/IGNoIDogY2ggLSAxLCB0cnVlKTsKLSAgICAgICAgaWYgKHJ0bCA9PSBsaW5lZGly
KSBtYWluID0gaGVyZTsgZWxzZSBvdGhlciA9IGhlcmU7CisgICAgZnVuY3Rpb24gZ2V0QmlkaShj
aCwgcGFydFBvcykgeworICAgICAgdmFyIHBhcnQgPSBvcmRlcltwYXJ0UG9zXSwgcmlnaHQgPSBw
YXJ0LmxldmVsICUgMjsKKyAgICAgIGlmIChjaCA9PSBiaWRpTGVmdChwYXJ0KSAmJiBwYXJ0UG9z
ICYmIHBhcnQubGV2ZWwgPCBvcmRlcltwYXJ0UG9zIC0gMV0ubGV2ZWwpIHsKKyAgICAgICAgcGFy
dCA9IG9yZGVyWy0tcGFydFBvc107CisgICAgICAgIGNoID0gYmlkaVJpZ2h0KHBhcnQpIC0gKHBh
cnQubGV2ZWwgJSAyID8gMCA6IDEpOworICAgICAgICByaWdodCA9IHRydWU7CisgICAgICB9IGVs
c2UgaWYgKGNoID09IGJpZGlSaWdodChwYXJ0KSAmJiBwYXJ0UG9zIDwgb3JkZXIubGVuZ3RoIC0g
MSAmJiBwYXJ0LmxldmVsIDwgb3JkZXJbcGFydFBvcyArIDFdLmxldmVsKSB7CisgICAgICAgIHBh
cnQgPSBvcmRlclsrK3BhcnRQb3NdOworICAgICAgICBjaCA9IGJpZGlMZWZ0KHBhcnQpIC0gcGFy
dC5sZXZlbCAlIDI7CisgICAgICAgIHJpZ2h0ID0gZmFsc2U7CiAgICAgICB9CisgICAgICBpZiAo
cmlnaHQgJiYgY2ggPT0gcGFydC50byAmJiBjaCA+IHBhcnQuZnJvbSkgcmV0dXJuIGdldChjaCAt
IDEpOworICAgICAgcmV0dXJuIGdldChjaCwgcmlnaHQpOwogICAgIH0KLSAgICBpZiAobGluZWRp
ciAmJiAhY2gpIG90aGVyID0gZ2V0KG9yZGVyWzBdLnRvIC0gMSk7Ci0gICAgaWYgKCFtYWluKSBy
ZXR1cm4gb3RoZXI7Ci0gICAgaWYgKG90aGVyKSBtYWluLm90aGVyID0gb3RoZXI7Ci0gICAgcmV0
dXJuIG1haW47CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiksIGNoID0gcG9zLmNo
OworICAgIGlmICghb3JkZXIpIHJldHVybiBnZXQoY2gpOworICAgIHZhciBwYXJ0UG9zID0gZ2V0
QmlkaVBhcnRBdChvcmRlciwgY2gpOworICAgIHZhciB2YWwgPSBnZXRCaWRpKGNoLCBwYXJ0UG9z
KTsKKyAgICBpZiAoYmlkaU90aGVyICE9IG51bGwpIHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIGJp
ZGlPdGhlcik7CisgICAgcmV0dXJuIHZhbDsKICAgfQogCi0gIGZ1bmN0aW9uIFBvc01heWJlT3V0
c2lkZShsaW5lLCBjaCwgb3V0c2lkZSkgeworICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBj
aCwgb3V0c2lkZSwgeFJlbCkgewogICAgIHZhciBwb3MgPSBuZXcgUG9zKGxpbmUsIGNoKTsKKyAg
ICBwb3MueFJlbCA9IHhSZWw7CiAgICAgaWYgKG91dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsK
ICAgICByZXR1cm4gcG9zOwogICB9CkBAIC0xMTY5LDEwICsxMjAyLDEwIEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBjb29yZHNDaGFyKGNtLCB4LCB5KSB7
CiAgICAgdmFyIGRvYyA9IGNtLmRvYzsKICAgICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDsK
LSAgICBpZiAoeSA8IDApIHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0LCAwLCB0cnVl
KTsKKyAgICBpZiAoeSA8IDApIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIHRydWUs
IC0xKTsKICAgICB2YXIgbGluZU5vID0gbGluZUF0SGVpZ2h0KGRvYywgeSksIGxhc3QgPSBkb2Mu
Zmlyc3QgKyBkb2Muc2l6ZSAtIDE7CiAgICAgaWYgKGxpbmVObyA+IGxhc3QpCi0gICAgICByZXR1
cm4gUG9zTWF5YmVPdXRzaWRlKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2Ms
IGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlKTsKKyAgICAgIHJldHVybiBQb3NXaXRoSW5mbyhkb2Mu
Zmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgdHJ1
ZSwgMSk7CiAgICAgaWYgKHggPCAwKSB4ID0gMDsKIAogICAgIGZvciAoOzspIHsKQEAgLTExODAs
NyArMTIxMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFy
IGZvdW5kID0gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpOwogICAg
ICAgdmFyIG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lT2JqKTsKICAgICAgIHZhciBt
ZXJnZWRQb3MgPSBtZXJnZWQgJiYgbWVyZ2VkLmZpbmQoKTsKLSAgICAgIGlmIChtZXJnZWQgJiYg
Zm91bmQuY2ggPj0gbWVyZ2VkUG9zLmZyb20uY2gpCisgICAgICBpZiAobWVyZ2VkICYmIChmb3Vu
ZC5jaCA+IG1lcmdlZFBvcy5mcm9tLmNoIHx8IGZvdW5kLmNoID09IG1lcmdlZFBvcy5mcm9tLmNo
ICYmIGZvdW5kLnhSZWwgPiAwKSkKICAgICAgICAgbGluZU5vID0gbWVyZ2VkUG9zLnRvLmxpbmU7
CiAgICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmb3VuZDsKQEAgLTEyMDYsMTQgKzEyMzksMTUg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZyb20gPSBsaW5l
TGVmdChsaW5lT2JqKSwgdG8gPSBsaW5lUmlnaHQobGluZU9iaik7CiAgICAgdmFyIGZyb21YID0g
Z2V0WChmcm9tKSwgZnJvbU91dHNpZGUgPSB3cm9uZ0xpbmUsIHRvWCA9IGdldFgodG8pLCB0b091
dHNpZGUgPSB3cm9uZ0xpbmU7CiAKLSAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIFBvc01heWJlT3V0
c2lkZShsaW5lTm8sIHRvLCB0b091dHNpZGUpOworICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9z
V2l0aEluZm8obGluZU5vLCB0bywgdG9PdXRzaWRlLCAxKTsKICAgICAvLyBEbyBhIGJpbmFyeSBz
ZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCiAgICAgZm9yICg7OykgewogICAgICAgaWYgKGJp
ZGkgPyB0byA9PSBmcm9tIHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6
IHRvIC0gZnJvbSA8PSAxKSB7Ci0gICAgICAgIHZhciBhZnRlciA9IHggLSBmcm9tWCA8IHRvWCAt
IHgsIGNoID0gYWZ0ZXIgPyBmcm9tIDogdG87CisgICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8
fCB4IC0gZnJvbVggPD0gdG9YIC0geCA/IGZyb20gOiB0bzsKKyAgICAgICAgdmFyIHhEaWZmID0g
eCAtIChjaCA9PSBmcm9tID8gZnJvbVggOiB0b1gpOwogICAgICAgICB3aGlsZSAoaXNFeHRlbmRp
bmdDaGFyLnRlc3QobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2NoOwotICAgICAgICB2YXIg
cG9zID0gUG9zTWF5YmVPdXRzaWRlKGxpbmVObywgY2gsIGFmdGVyID8gZnJvbU91dHNpZGUgOiB0
b091dHNpZGUpOwotICAgICAgICBwb3MuYWZ0ZXIgPSBhZnRlcjsKKyAgICAgICAgdmFyIHBvcyA9
IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0
c2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgMCA/IC0xIDogeERp
ZmYgPyAxIDogMCk7CiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgICB9CiAgICAgICB2YXIgc3Rl
cCA9IE1hdGguY2VpbChkaXN0IC8gMiksIG1pZGRsZSA9IGZyb20gKyBzdGVwOwpAQCAtMTIyMiw4
ICsxMjU2LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RlcDsgKytpKSBtaWRkbGUgPSBtb3ZlVmlzdWFsbHkobGluZU9i
aiwgbWlkZGxlLCAxKTsKICAgICAgIH0KICAgICAgIHZhciBtaWRkbGVYID0gZ2V0WChtaWRkbGUp
OwotICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7IGlm
ICh0b091dHNpZGUgPSB3cm9uZ0xpbmUpIHRvWCArPSAxMDAwOyBkaXN0IC09IHN0ZXA7fQotICAg
ICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdy
b25nTGluZTsgZGlzdCA9IHN0ZXA7fQorICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRk
bGU7IHRvWCA9IG1pZGRsZVg7IGlmICh0b091dHNpZGUgPSB3cm9uZ0xpbmUpIHRvWCArPSAxMDAw
OyBkaXN0ID0gc3RlcDt9CisgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRs
ZVg7IGZyb21PdXRzaWRlID0gd3JvbmdMaW5lOyBkaXN0IC09IHN0ZXA7fQogICAgIH0KICAgfQog
CkBAIC0xMzk5LDMxICsxNDMzLDMyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAvLyBzdXBwb3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQog
ICBmdW5jdGlvbiByZWFkSW5wdXQoY20pIHsKICAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5Lmlu
cHV0LCBwcmV2SW5wdXQgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jLCBzZWwg
PSBkb2Muc2VsOwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5w
dXQpIHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjbS5zdGF0ZS5m
b2N1c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20uc3Rh
dGUuZGlzYWJsZUlucHV0KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1
ZTsKICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykp
IHJldHVybiBmYWxzZTsKLSAgICAvLyBJRSBlbmpveXMgcmFuZG9tbHkgZGVzZWxlY3Rpbmcgb3Vy
IGlucHV0J3MgdGV4dCB3aGVuCi0gICAgLy8gcmUtZm9jdXNpbmcuIElmIHRoZSBzZWxlY3Rpb24g
aXMgZ29uZSBidXQgdGhlIGN1cnNvciBpcyBhdCB0aGUKLSAgICAvLyBzdGFydCBvZiB0aGUgaW5w
dXQsIHRoYXQncyBwcm9iYWJseSB3aGF0IGhhcHBlbmVkLgotICAgIGlmIChpZSAmJiB0ZXh0ICYm
IGlucHV0LnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7CisgICAgaWYgKGllICYmICFpZV9sdDkgJiYg
Y20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9PT0gdGV4dCkgewogICAgICAgcmVzZXRJbnB1
dChjbSwgdHJ1ZSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCiAgICAgdmFyIHdpdGhP
cCA9ICFjbS5jdXJPcDsKICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7CiAgICAg
c2VsLnNoaWZ0ID0gZmFsc2U7CiAgICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklu
cHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwotICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5w
dXRbc2FtZV0gPT0gdGV4dFtzYW1lXSkgKytzYW1lOworICAgIHdoaWxlIChzYW1lIDwgbCAmJiBw
cmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpICsrc2Ft
ZTsKICAgICB2YXIgZnJvbSA9IHNlbC5mcm9tLCB0byA9IHNlbC50bzsKICAgICBpZiAoc2FtZSA8
IHByZXZJbnB1dC5sZW5ndGgpCiAgICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAt
IChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSkpOwogICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3
cml0ZSAmJiBwb3NFcShmcm9tLCB0bykgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcpCiAgICAg
ICB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5s
ZW5ndGgsIHRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpKTsKLSAgICB2YXIgdXBkYXRlSW5w
dXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKLSAgICBtYWtlQ2hhbmdlKGNtLmRvYywge2Zyb206
IGZyb20sIHRvOiB0bywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LnNsaWNlKHNhbWUpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0
ZSIgOiAiK2lucHV0In0sICJlbmQiKTsKIAorICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9w
LnVwZGF0ZUlucHV0OworICAgIHZhciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8s
IHRleHQ6IHNwbGl0TGluZXModGV4dC5zbGljZShzYW1lKSksCisgICAgICAgICAgICAgICAgICAg
ICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lucHV0In07
CisgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZUV2ZW50LCAiZW5kIik7CiAgICAgY20uY3Vy
T3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKKyAgICBzaWduYWxMYXRlcihjbSwgImlucHV0
UmVhZCIsIGNtLCBjaGFuZ2VFdmVudCk7CisKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8
IHRleHQuaW5kZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklu
cHV0ID0gIiI7CiAgICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAgICAgaWYg
KHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKQEAgLTE0MzcsMTAgKzE0NzIsMTQgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9
ICIiOwogICAgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAmJgogICAgICAgICAoZG9jLnNlbC50
by5saW5lIC0gZG9jLnNlbC5mcm9tLmxpbmUgPiAxMDAgfHwgKHNlbGVjdGVkID0gY20uZ2V0U2Vs
ZWN0aW9uKCkpLmxlbmd0aCA+IDEwMDApOwotICAgICAgaWYgKG1pbmltYWwpIGNtLmRpc3BsYXku
aW5wdXQudmFsdWUgPSAiLSI7Ci0gICAgICBlbHNlIGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSBz
ZWxlY3RlZCB8fCBjbS5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciBjb250ZW50ID0gbWluaW1h
bCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOworICAgICAgY20uZGlzcGxh
eS5pbnB1dC52YWx1ZSA9IGNvbnRlbnQ7CiAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2Vs
ZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7Ci0gICAgfSBlbHNlIGlmICh1c2VyKSBjbS5kaXNw
bGF5LnByZXZJbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKKyAgICAgIGlmIChp
ZSAmJiAhaWVfbHQ5KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29udGVudDsKKyAg
ICB9IGVsc2UgaWYgKHVzZXIpIHsKKyAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gY20uZGlz
cGxheS5pbnB1dC52YWx1ZSA9ICIiOworICAgICAgaWYgKGllICYmICFpZV9sdDkpIGNtLmRpc3Bs
YXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOworICAgIH0KICAgICBjbS5kaXNwbGF5LmluYWNj
dXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwogICB9CiAKQEAgLTE0NTgsNyArMTQ5NywxNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVu
dEhhbmRsZXJzKGNtKSB7CiAgICAgdmFyIGQgPSBjbS5kaXNwbGF5OwogICAgIG9uKGQuc2Nyb2xs
ZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7Ci0gICAgb24oZC5z
Y3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBlX3ByZXZlbnREZWZhdWx0KSk7Cisg
ICAgaWYgKGllKQorICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNt
LCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVy
bjsKKyAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CisgICAgICAgIGlmICgh
cG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwg
ZSkpIHJldHVybjsKKyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgdmFyIHdv
cmQgPSBmaW5kV29yZEF0KGdldExpbmUoY20uZG9jLCBwb3MubGluZSkudGV4dCwgcG9zKTsKKyAg
ICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3JkLnRvKTsKKyAgICAg
IH0pKTsKKyAgICBlbHNlCisgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBmdW5jdGlv
bihlKSB7IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUpOyB9KTsK
ICAgICBvbihkLmxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZnVuY3Rpb24oZSkgewogICAgICAg
aWYgKCFldmVudEluV2lkZ2V0KGQsIGUpKSBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgIH0pOwpA
QCAtMTQ5MCwxMSArMTUzOSwxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZwogICAgIG9uKGQud3Jh
cHBlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeyBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFw
cGVyLnNjcm9sbExlZnQgPSAwOyB9KTsKIAorICAgIHZhciByZXNpemVUaW1lcjsKICAgICBmdW5j
dGlvbiBvblJlc2l6ZSgpIHsKLSAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJh
dGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuCi0gICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2Fj
aGVkVGV4dEhlaWdodCA9IG51bGw7Ci0gICAgICBjbGVhckNhY2hlcyhjbSk7Ci0gICAgICBydW5J
bk9wKGNtLCBiaW5kKHJlZ0NoYW5nZSwgY20pKTsKKyAgICAgIGlmIChyZXNpemVUaW1lciA9PSBu
dWxsKSByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc2l6
ZVRpbWVyID0gbnVsbDsKKyAgICAgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0
aW9uLCBjbGVhciBzaXplIGNhY2hlcy4KKyAgICAgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNh
Y2hlZFRleHRIZWlnaHQgPSBrbm93blNjcm9sbGJhcldpZHRoID0gbnVsbDsKKyAgICAgICAgY2xl
YXJDYWNoZXMoY20pOworICAgICAgICBydW5Jbk9wKGNtLCBiaW5kKHJlZ0NoYW5nZSwgY20pKTsK
KyAgICAgIH0sIDEwMCk7CiAgICAgfQogICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIG9uUmVzaXpl
KTsKICAgICAvLyBBYm92ZSBoYW5kbGVyIGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0cyBk
YXRhIHN0cnVjdHVyZXMuCkBAIC0xNTA4LDcgKzE1NjEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KHVucmVnaXN0ZXIsIDUwMDApOwogCiAgICAg
b24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICBp
ZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRk
U3RvcChlKSkpIHJldHVybjsKKyAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20u
b3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChl
KSkpIHJldHVybjsKICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIGNtLmRvYy5zZWwuc2hpZnQg
PSBmYWxzZTsKICAgICB9KSk7CiAgICAgb24oZC5pbnB1dCwgImlucHV0IiwgYmluZChmYXN0UG9s
bCwgY20pKTsKQEAgLTE1MTgsNyArMTU3MSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIG9uKGQuaW5wdXQsICJibHVyIiwgYmluZChvbkJsdXIsIGNtKSk7CiAKICAg
ICBmdW5jdGlvbiBkcmFnXyhlKSB7Ci0gICAgICBpZiAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAm
JiBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAg
aWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNt
Lm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgICBlX3N0
b3AoZSk7CiAgICAgfQogICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wKSB7CkBAIC0xNTU3LDkg
KzE2MTAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlv
biBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKICAgICBmb3IgKHZhciBuID0gZV90YXJnZXQo
ZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7Ci0gICAgICBpZiAo
IW4pIHJldHVybiB0cnVlOwotICAgICAgaWYgKC9cYkNvZGVNaXJyb3ItKD86bGluZSk/d2lkZ2V0
XGIvLnRlc3Qobi5jbGFzc05hbWUpIHx8Ci0gICAgICAgICAgbi5wYXJlbnROb2RlID09IGRpc3Bs
YXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKKyAgICAgIGlmICgh
biB8fCBuLmlnbm9yZUV2ZW50cyB8fCBuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAmJiBu
ICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogCkBAIC0xNTY5LDcg
KzE2MjAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciB0
YXJnZXQgPSBlX3RhcmdldChlKTsKICAgICAgIGlmICh0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxi
YXJIIHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckguZmlyc3RDaGlsZCB8fAogICAgICAg
ICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwgdGFyZ2V0ID09IGRpc3BsYXkuc2Ny
b2xsYmFyVi5maXJzdENoaWxkIHx8Ci0gICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xs
YmFyRmlsbGVyKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICB0YXJnZXQgPT0gZGlzcGxheS5zY3Jv
bGxiYXJGaWxsZXIgfHwgdGFyZ2V0ID09IGRpc3BsYXkuZ3V0dGVyRmlsbGVyKSByZXR1cm4gbnVs
bDsKICAgICB9CiAgICAgdmFyIHgsIHksIHNwYWNlID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVTcGFj
ZSk7CiAgICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBk
cmFnZ2VkIGFyb3VuZCBxdWlja2x5LgpAQCAtMTU3OSw2ICsxNjMwLDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNr
OwogICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KHRo
aXMsIGUpKSByZXR1cm47CiAgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXks
IGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKICAgICBzZWwuc2hpZnQgPSBlLnNoaWZ0S2V5
OwogCkBAIC0xNjQ5LDkgKzE3MDEsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICBpZiAodHlwZSA9PSAic2luZ2xlIikg
ZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSk7CiAKLSAgICB2YXIg
c3RhcnRzdGFydCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bzsKKyAgICB2YXIgc3RhcnRz
dGFydCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bywgbGFzdFBvcyA9IHN0YXJ0OwogCiAg
ICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7CisgICAgICBpZiAocG9zRXEobGFzdFBvcywgY3Vy
KSkgcmV0dXJuOworICAgICAgbGFzdFBvcyA9IGN1cjsKKwogICAgICAgaWYgKHR5cGUgPT0gInNp
bmdsZSIpIHsKICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0
YXJ0KSwgY3VyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5OSw4ICsxNzU0LDYgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBmdW5jdGlvbiBkb25lKGUpIHsKICAg
ICAgIGNvdW50ZXIgPSBJbmZpbml0eTsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20s
IGUpOwotICAgICAgaWYgKGN1cikgZG9TZWxlY3QoY3VyKTsKICAgICAgIGVfcHJldmVudERlZmF1
bHQoZSk7CiAgICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNl
bW92ZSIsIG1vdmUpOwpAQCAtMTcxNiwxMSArMTc2OSw0MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CiAgIH0KIAor
ICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5OworICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0K
KyAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaWYgKG1YID49IE1hdGguZmxv
b3IoZ2V0UmVjdChkaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOworICAgIGVf
cHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ2xpY2si
KSkgcmV0dXJuIHRydWU7CisKKyAgICB2YXIgbGluZUJveCA9IGdldFJlY3QoZGlzcGxheS5saW5l
RGl2KTsKKyAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7CisgICAgbVkg
LT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIGcgPSBk
aXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKKyAgICAgIGlmIChnICYmIGdldFJlY3QoZyku
cmlnaHQgPj0gbVgpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20uZG9jLCBt
WSk7CisgICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07CisgICAgICAg
IHNpZ25hbExhdGVyKGNtLCAiZ3V0dGVyQ2xpY2siLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKyAg
Ly8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwg
c29tZXRpbWVzCisgIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2YgZHJhZy1yZWxhdGVkIGV2ZW50cyBy
aWdodCBhZnRlciB0aGUgZHJvcCAoIzE1NTEpCisgIHZhciBsYXN0RHJvcCA9IDA7CisKICAgZnVu
Y3Rpb24gb25Ecm9wKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChldmVudEluV2lk
Z2V0KGNtLmRpc3BsYXksIGUpIHx8IChjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlv
bnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSkKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQo
Y20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgKGNtLm9wdGlvbnMub25E
cmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpKQogICAg
ICAgcmV0dXJuOwogICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKGllKSBsYXN0RHJv
cCA9ICtuZXcgRGF0ZTsKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlKSwg
ZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICBpZiAoIXBvcyB8fCBpc1JlYWRPbmx5
KGNtKSkgcmV0dXJuOwogICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZp
bGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHsKQEAgLTE3NjAsNDAgKzE4NDMsMTYgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gY2xp
Y2tJbkd1dHRlcihjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB0
cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9Ci0gICAgY2F0Y2goZSkg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGdldFJlY3QoZGlz
cGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsKLSAgICBlX3ByZXZlbnREZWZhdWx0
KGUpOwotICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNsaWNrIikpIHJldHVybiB0cnVl
OwotCi0gICAgdmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0gICAgaWYg
KG1ZID4gbGluZUJveC5ib3R0b20pIHJldHVybiB0cnVlOwotICAgIG1ZIC09IGxpbmVCb3gudG9w
IC0gZGlzcGxheS52aWV3T2Zmc2V0OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRp
b25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBnID0gZGlzcGxheS5ndXR0ZXJz
LmNoaWxkTm9kZXNbaV07Ci0gICAgICBpZiAoZyAmJiBnZXRSZWN0KGcpLnJpZ2h0ID49IG1YKSB7
Ci0gICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpOwotICAgICAgICB2
YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwotICAgICAgICBzaWduYWxMYXRlcihj
bSwgImd1dHRlckNsaWNrIiwgY20sIGxpbmUsIGd1dHRlciwgZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCiAgIGZ1bmN0aW9uIG9uRHJh
Z1N0YXJ0KGNtLCBlKSB7Ci0gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJl
dHVybjsKKyAgICBpZiAoaWUgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRl
IC0gbGFzdERyb3AgPCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuOyB9CisgICAgaWYgKHNpZ25h
bERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47
CiAKICAgICB2YXIgdHh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7CiAgICAgZS5kYXRhVHJhbnNmZXIu
c2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAKICAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBv
ZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikg
aGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24n
dCBkbyBpdCB0aGVyZS4KLSAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKSB7Cisg
ICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7CiAgICAgICB2
YXIgaW1nID0gZWx0KCJpbWciLCBudWxsLCBudWxsLCAicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAw
OyB0b3A6IDA7Iik7CiAgICAgICBpZiAob3BlcmEpIHsKICAgICAgICAgaW1nLndpZHRoID0gaW1n
LmhlaWdodCA9IDE7CkBAIC0xODAxLDE1ICsxODYwLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQsIG9yIE9wZXJhIHdvbid0
IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24KICAgICAgICAgaW1nLl90b3Ag
PSBpbWcub2Zmc2V0VG9wOwogICAgICAgfQotICAgICAgaWYgKHNhZmFyaSkgewotICAgICAgICBp
ZiAoY20uZGlzcGxheS5kcmFnSW1nKSB7Ci0gICAgICAgICAgaW1nID0gY20uZGlzcGxheS5kcmFn
SW1nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNtLmRpc3BsYXkuZHJhZ0ltZyA9IGlt
ZzsKLSAgICAgICAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFR
QUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09IjsKLSAgICAgICAgICBj
bS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsKLSAgICAgICAgfQotICAgICAgfQog
ICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7CiAgICAgICBpZiAo
b3BlcmEpIGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7CiAgICAgfQpAQCAtMTgyMiw2
ICsxODcyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGNt
LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxUb3AgPSB2YWw7CiAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3Ag
IT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gdmFsOwogICAgIGlmIChn
ZWNrbykgdXBkYXRlRGlzcGxheShjbSwgW10pOworICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwog
ICB9CiAgIGZ1bmN0aW9uIHNldFNjcm9sbExlZnQoY20sIHZhbCwgaXNTY3JvbGxlcikgewogICAg
IGlmIChpc1Njcm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20u
ZG9jLnNjcm9sbExlZnQgLSB2YWwpIDwgMikgcmV0dXJuOwpAQCAtMTk1NCw4ICsyMDA1LDEwIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBzdGFydE1hcCA9IGdl
dEtleU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwogICAgIGNs
ZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOwogICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVy
S2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAg
aWYgKGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApCisgICAgICBpZiAo
Z2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5TWFwKSA9PSBzdGFydE1hcCkgewogICAgICAgICBjbS5v
cHRpb25zLmtleU1hcCA9IChuZXh0LmNhbGwgPyBuZXh0LmNhbGwobnVsbCwgY20pIDogbmV4dCk7
CisgICAgICAgIGtleU1hcENoYW5nZWQoY20pOworICAgICAgfQogICAgIH0sIDUwKTsKIAogICAg
IHZhciBuYW1lID0ga2V5TmFtZShlLCB0cnVlKSwgaGFuZGxlZCA9IGZhbHNlOwpAQCAtMTk2OCwx
NyArMjAyMSwxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIC8v
ICdnbycpIGJvdW5kIHRvIHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCiAgICAgICBoYW5k
bGVkID0gbG9va3VwS2V5KCJTaGlmdC0iICsgbmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikge3Jl
dHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpO30pCiAgICAgICAgICAgICAgfHwgbG9v
a3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsKLSAgICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgYiA9PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hh
bmRsZUJpbmRpbmcoY20sIGIpOworICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJz
dHJpbmciID8gL15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24pCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOwogICAgICAgICAgICAgICAgIH0pOwog
ICAgIH0gZWxzZSB7CiAgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1
bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwogICAgIH0KLSAg
ICBpZiAoaGFuZGxlZCA9PSAic3RvcCIpIGhhbmRsZWQgPSBmYWxzZTsKIAogICAgIGlmIChoYW5k
bGVkKSB7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgcmVzdGFydEJsaW5rKGNt
KTsKICAgICAgIGlmIChpZV9sdDkpIHsgZS5vbGRLZXlDb2RlID0gZS5rZXlDb2RlOyBlLmtleUNv
ZGUgPSAwOyB9CisgICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwg
ZSk7CiAgICAgfQogICAgIHJldHVybiBoYW5kbGVkOwogICB9CkBAIC0xOTg5LDYgKzIwNDMsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoaGFuZGxlZCkgewog
ICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHJlc3RhcnRCbGluayhjbSk7CisgICAg
ICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgIiciICsgY2ggKyAiJyIsIGUpOwog
ICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKICAgfQpAQCAtMTk5OCw3ICsyMDUzLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNtID0gdGhpczsKICAgICBp
ZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwogICAgIGlmIChpZSAmJiBlLmtleUNv
ZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9Ci0gICAgaWYgKGNtLm9wdGlvbnMu
b25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1
cm47CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uS2V5RXZl
bnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAg
IHZhciBjb2RlID0gZS5rZXlDb2RlOwogICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0
aCBlc2NhcGUuCiAgICAgY20uZG9jLnNlbC5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtl
eTsKQEAgLTIwMTQsNyArMjA2OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogCiAgIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAg
aWYgKGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFk
ZFN0b3AoZSkpKSByZXR1cm47CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5v
cHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUp
KSkgcmV0dXJuOwogICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hh
ckNvZGU7CiAgICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0
U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CiAgICAgaWYg
KCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5k
bGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwpAQCAtMjAyNCw2ICsyMDc5LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRoaXMuZG9jLm1vZGUuZWxlY3Ry
aWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQogICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20s
IGZ1bmN0aW9uKCkge2luZGVudExpbmUoY20sIGNtLmRvYy5zZWwudG8ubGluZSwgInNtYXJ0Iik7
fSksIDc1KTsKICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOwor
ICAgIGlmIChpZSAmJiAhaWVfbHQ5KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVs
bDsKICAgICBmYXN0UG9sbChjbSk7CiAgIH0KIApAQCAtMjA2OSw2ICsyMTI1LDEzIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIEFkZHMgIlNlbGVjdCBhbGwiIHRv
IGNvbnRleHQgbWVudSBpbiBGRgogICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgZGlz
cGxheS5pbnB1dC52YWx1ZSA9IGRpc3BsYXkucHJldklucHV0ID0gIiAiOwogCisgICAgZnVuY3Rp
b24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7CisgICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxl
Y3Rpb25TdGFydCAhPSBudWxsKSB7CisgICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0
LnZhbHVlID0gIiAiICsgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5Lmlu
cHV0LnZhbHVlKTsKKyAgICAgICAgZGlzcGxheS5wcmV2SW5wdXQgPSAiICI7CisgICAgICAgIGRp
c3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSAxOyBkaXNwbGF5LmlucHV0LnNlbGVjdGlvbkVu
ZCA9IGV4dHZhbC5sZW5ndGg7CisgICAgICB9CisgICAgfQogICAgIGZ1bmN0aW9uIHJlaGlkZSgp
IHsKICAgICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwog
ICAgICAgZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwpAQCAtMjA3NiwxMiAr
MjEzOSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHNsb3dQ
b2xsKGNtKTsKIAogICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxl
Y3QtYWxsCi0gICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsICYm
ICghaWUgfHwgaWVfbHQ5KSkgeworICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3Rh
cnQgIT0gbnVsbCkgeworICAgICAgICBpZiAoIWllIHx8IGllX2x0OSkgcHJlcGFyZVNlbGVjdEFs
bEhhY2soKTsKICAgICAgICAgY2xlYXJUaW1lb3V0KGRldGVjdGluZ1NlbGVjdEFsbCk7Ci0gICAg
ICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0VxKHNlbC5m
cm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVlKSwgaSA9IDA7Ci0gICAgICAg
IGRpc3BsYXkucHJldklucHV0ID0gIiAiOwotICAgICAgICBkaXNwbGF5LmlucHV0LnNlbGVjdGlv
blN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOwot
ICAgICAgICB2YXIgcG9sbCA9IGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciBpID0gMCwgcG9sbCA9
IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgaWYgKGRpc3BsYXkucHJldklucHV0ID09ICIgIiAmJiBk
aXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCiAgICAgICAgICAgICBvcGVyYXRpb24o
Y20sIGNvbW1hbmRzLnNlbGVjdEFsbCkoY20pOwogICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEw
KSBkZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDUwMCk7CkBAIC0yMDkxLDYg
KzIxNTIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAg
ICB9CiAKKyAgICBpZiAoaWUgJiYgIWllX2x0OSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKICAg
ICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSB7CiAgICAgICBlX3N0b3AoZSk7CiAgICAgICB2YXIg
bW91c2V1cCA9IGZ1bmN0aW9uKCkgewpAQCAtMjEwNSwxMSArMjE2NywxMSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBVUERBVElORwogCi0gIGZ1bmN0aW9uIGNo
YW5nZUVuZChjaGFuZ2UpIHsKKyAgdmFyIGNoYW5nZUVuZCA9IENvZGVNaXJyb3IuY2hhbmdlRW5k
ID0gZnVuY3Rpb24oY2hhbmdlKSB7CiAgICAgaWYgKCFjaGFuZ2UudGV4dCkgcmV0dXJuIGNoYW5n
ZS50bzsKICAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5n
dGggLSAxLAogICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdl
LnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKTsKLSAgfQorICB9OwogCiAg
IC8vIE1ha2Ugc3VyZSBhIHBvc2l0aW9uIHdpbGwgYmUgdmFsaWQgYWZ0ZXIgdGhlIGdpdmVuIGNo
YW5nZS4KICAgZnVuY3Rpb24gY2xpcFBvc3RDaGFuZ2UoZG9jLCBjaGFuZ2UsIHBvcykgewpAQCAt
MjE1MSwyMSArMjIxMywyMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICByZXR1cm4ge2FuY2hvcjogYWRqdXN0UG9zKGRvYy5zZWwuYW5jaG9yKSwgaGVhZDogYWRqdXN0
UG9zKGRvYy5zZWwuaGVhZCl9OwogICB9CiAKLSAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlKSB7CisgIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7
CiAgICAgdmFyIG9iaiA9IHsKICAgICAgIGNhbmNlbGVkOiBmYWxzZSwKICAgICAgIGZyb206IGNo
YW5nZS5mcm9tLAogICAgICAgdG86IGNoYW5nZS50bywKICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0
LAogICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLAotICAgICAgdXBkYXRlOiBmdW5jdGlvbihm
cm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7Ci0gICAgICAgIGlmIChmcm9tKSB0aGlzLmZyb20gPSBj
bGlwUG9zKGRvYywgZnJvbSk7Ci0gICAgICAgIGlmICh0bykgdGhpcy50byA9IGNsaXBQb3MoZG9j
LCB0byk7Ci0gICAgICAgIGlmICh0ZXh0KSB0aGlzLnRleHQgPSB0ZXh0OwotICAgICAgICBpZiAo
b3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3JpZ2luID0gb3JpZ2luOwotICAgICAgfSwKICAg
ICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7IHRoaXMuY2FuY2VsZWQgPSB0cnVlOyB9CiAgICAgfTsK
KyAgICBpZiAodXBkYXRlKSBvYmoudXBkYXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIHRleHQsIG9y
aWdpbikgeworICAgICAgaWYgKGZyb20pIHRoaXMuZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKTsK
KyAgICAgIGlmICh0bykgdGhpcy50byA9IGNsaXBQb3MoZG9jLCB0byk7CisgICAgICBpZiAodGV4
dCkgdGhpcy50ZXh0ID0gdGV4dDsKKyAgICAgIGlmIChvcmlnaW4gIT09IHVuZGVmaW5lZCkgdGhp
cy5vcmlnaW4gPSBvcmlnaW47CisgICAgfTsKICAgICBzaWduYWwoZG9jLCAiYmVmb3JlQ2hhbmdl
IiwgZG9jLCBvYmopOwogICAgIGlmIChkb2MuY20pIHNpZ25hbChkb2MuY20sICJiZWZvcmVDaGFu
Z2UiLCBkb2MuY20sIG9iaik7CiAKQEAgLTIxODIsNyArMjI0NCw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KIAogICAgIGlmIChoYXNIYW5kbGVyKGRvYywgImJl
Zm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5n
ZSIpKSB7Ci0gICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOworICAgICAg
Y2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB0cnVlKTsKICAgICAgIGlmICghY2hh
bmdlKSByZXR1cm47CiAgICAgfQogCkBAIC0yMjIxLDE1ICsyMjgzLDIzIEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7CiAgICAg
dmFyIGV2ZW50ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUpLnBv
cCgpOwogICAgIGlmICghZXZlbnQpIHJldHVybjsKLSAgICBoaXN0LmRpcnR5Q291bnRlciArPSB0
eXBlID09ICJ1bmRvIiA/IC0xIDogMTsKIAogICAgIHZhciBhbnRpID0ge2NoYW5nZXM6IFtdLCBh
bmNob3JCZWZvcmU6IGV2ZW50LmFuY2hvckFmdGVyLCBoZWFkQmVmb3JlOiBldmVudC5oZWFkQWZ0
ZXIsCi0gICAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVh
ZEFmdGVyOiBldmVudC5oZWFkQmVmb3JlfTsKKyAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjog
ZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkQWZ0ZXI6IGV2ZW50LmhlYWRCZWZvcmUsCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufTsKICAgICAodHlwZSA9PSAidW5k
byIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZSkucHVzaChhbnRpKTsKKyAgICBoaXN0LmdlbmVy
YXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uOworCisgICAg
dmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwgZG9jLmNtICYm
IGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7CiAKICAgICBmb3IgKHZhciBpID0g
ZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewogICAgICAgdmFyIGNoYW5n
ZSA9IGV2ZW50LmNoYW5nZXNbaV07CiAgICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKKyAgICAg
IGlmIChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgZmFsc2UpKSB7CisgICAg
ICAgICh0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5sZW5ndGggPSAw
OworICAgICAgICByZXR1cm47CisgICAgICB9CisKICAgICAgIGFudGkuY2hhbmdlcy5wdXNoKGhp
c3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7CiAKICAgICAgIHZhciBhZnRlciA9
IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIG51bGwpCkBAIC0yNDkxLDEx
ICsyNTYxLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBTQ1JP
TExJTkcKIAogICBmdW5jdGlvbiBzY3JvbGxDdXJzb3JJbnRvVmlldyhjbSkgewotICAgIHZhciBj
b29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY20uZG9jLnNlbC5oZWFkKTsKKyAgICB2YXIg
Y29vcmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNtLmRvYy5zZWwuaGVhZCwgY20ub3B0aW9u
cy5jdXJzb3JTY3JvbGxNYXJnaW4pOwogICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgcmV0dXJu
OwotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNp
emVyKSwgZG9TY3JvbGwgPSBudWxsLCBwVG9wID0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKLSAg
ICBpZiAoY29vcmRzLnRvcCArIHBUb3AgKyBib3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOwot
ICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0b20gKyBwVG9wICsgYm94LnRvcCA+ICh3aW5kb3cuaW5u
ZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Ny
b2xsID0gZmFsc2U7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBnZXRSZWN0
KGRpc3BsYXkuc2l6ZXIpLCBkb1Njcm9sbCA9IG51bGw7CisgICAgaWYgKGNvb3Jkcy50b3AgKyBi
b3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOworICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0b20g
KyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50SGVpZ2h0KSkgZG9TY3JvbGwgPSBmYWxzZTsKICAgICBpZiAoZG9TY3JvbGwgIT0g
bnVsbCAmJiAhcGhhbnRvbSkgewogICAgICAgdmFyIGhpZGRlbiA9IGRpc3BsYXkuY3Vyc29yLnN0
eWxlLmRpc3BsYXkgPT0gIm5vbmUiOwogICAgICAgaWYgKGhpZGRlbikgewpAQCAtMjUzMywxMiAr
MjYwMywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1
bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICB2YXIg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0ID0gcGFkZGluZ1RvcChkaXNwbGF5KTsKLSAgICB5MSAr
PSBwdDsgeTIgKz0gcHQ7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2lu
ID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7CiAgICAg
dmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRP
ZmYsIHNjcmVlbnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsK
ICAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkp
OwotICAgIHZhciBhdFRvcCA9IHkxIDwgcHQgKyAxMCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9j
Qm90dG9tIC0gMTA7CisgICAgdmFyIGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9
IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdpbjsKICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsK
ICAgICAgIHJlc3VsdC5zY3JvbGxUb3AgPSBhdFRvcCA/IDAgOiB5MTsKICAgICB9IGVsc2UgaWYg
KHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7CkBAIC0yNTc1LDcgKzI2NDQsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBpbmRlbnRMaW5lKGNtLCBu
LCBob3csIGFnZ3Jlc3NpdmUpIHsKICAgICB2YXIgZG9jID0gY20uZG9jOwotICAgIGlmICghaG93
KSBob3cgPSAiYWRkIjsKKyAgICBpZiAoaG93ID09IG51bGwpIGhvdyA9ICJhZGQiOwogICAgIGlm
IChob3cgPT0gInNtYXJ0IikgewogICAgICAgaWYgKCFjbS5kb2MubW9kZS5pbmRlbnQpIGhvdyA9
ICJwcmV2IjsKICAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOwpA
QCAtMjU5OCw2ICsyNjY3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OwogICAg
IH0gZWxzZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIHsKICAgICAgIGluZGVudGF0aW9uID0gY3Vy
U3BhY2UgLSBjbS5vcHRpb25zLmluZGVudFVuaXQ7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgaG93
ID09ICJudW1iZXIiKSB7CisgICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgaG93OwogICAg
IH0KICAgICBpbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIGluZGVudGF0aW9uKTsKIApAQCAtMjYy
Miw3ICsyNjkzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAog
ICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkgewotICAg
IHZhciBsaW5lID0gcG9zLmxpbmUsIGNoID0gcG9zLmNoOworICAgIHZhciBsaW5lID0gcG9zLmxp
bmUsIGNoID0gcG9zLmNoLCBvcmlnRGlyID0gZGlyOwogICAgIHZhciBsaW5lT2JqID0gZ2V0TGlu
ZShkb2MsIGxpbmUpOwogICAgIHZhciBwb3NzaWJsZSA9IHRydWU7CiAgICAgZnVuY3Rpb24gZmlu
ZE5leHRMaW5lKCkgewpAQCAtMjY2MSw3ICsyNzMyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChkaXIgPiAwICYmICFtb3ZlT25jZSghZmlyc3QpKSBi
cmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgdmFyIHJlc3VsdCA9IHNraXBBdG9taWMoZG9jLCBQ
b3MobGluZSwgY2gpLCBkaXIsIHRydWUpOworICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWljKGRv
YywgUG9zKGxpbmUsIGNoKSwgb3JpZ0RpciwgdHJ1ZSk7CiAgICAgaWYgKCFwb3NzaWJsZSkgcmVz
dWx0LmhpdFNpZGUgPSB0cnVlOwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTI2ODYsNyAr
Mjc1Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBm
aW5kV29yZEF0KGxpbmUsIHBvcykgewogICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9z
LmNoOwogICAgIGlmIChsaW5lKSB7Ci0gICAgICBpZiAocG9zLmFmdGVyID09PSBmYWxzZSB8fCBl
bmQgPT0gbGluZS5sZW5ndGgpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7CisgICAgICBpZiAoKHBvcy54
UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsr
ZW5kOwogICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKICAgICAgIHZh
ciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyKSA/IGlzV29yZENoYXIKICAgICAgICAgOiAv
XHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7
fQpAQCAtMjcwNyw2ICsyNzc4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBw
YXJhbWV0ZXInCiAKICAgQ29kZU1pcnJvci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6
IENvZGVNaXJyb3IsCiAgICAgZm9jdXM6IGZ1bmN0aW9uKCl7d2luZG93LmZvY3VzKCk7IGZvY3Vz
SW5wdXQodGhpcyk7IG9uRm9jdXModGhpcyk7IGZhc3RQb2xsKHRoaXMpO30sCiAKICAgICBzZXRP
cHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKQEAgLTI3MjYsNyArMjc5OCw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJlbW92ZUtleU1hcDogZnVuY3Rp
b24obWFwKSB7CiAgICAgICB2YXIgbWFwcyA9IHRoaXMuc3RhdGUua2V5TWFwczsKICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKCh0eXBlb2Yg
bWFwID09ICJzdHJpbmciID8gbWFwc1tpXS5uYW1lIDogbWFwc1tpXSkgPT0gbWFwKSB7CisgICAg
ICAgIGlmIChtYXBzW2ldID09IG1hcCB8fCAodHlwZW9mIG1hcHNbaV0gIT0gInN0cmluZyIgJiYg
bWFwc1tpXS5uYW1lID09IG1hcCkpIHsKICAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjc0Miw3ICsyODE0LDggQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVtb3ZlT3ZlcmxheTogb3BlcmF0
aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMpIHsKICAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3Rh
dGUub3ZlcmxheXM7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIGlmIChvdmVybGF5c1tpXS5tb2RlU3BlYyA9PSBzcGVjKSB7CisgICAg
ICAgIHZhciBjdXIgPSBvdmVybGF5c1tpXS5tb2RlU3BlYzsKKyAgICAgICAgaWYgKGN1ciA9PSBz
cGVjIHx8IHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIGN1ci5uYW1lID09IHNwZWMpIHsKICAg
ICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgdGhpcy5zdGF0ZS5tb2Rl
R2VuKys7CiAgICAgICAgICAgcmVnQ2hhbmdlKHRoaXMpOwpAQCAtMjc1Miw3ICsyODI1LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSksCiAKICAgICBpbmRlbnRM
aW5lOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7Ci0gICAg
ICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIikgeworICAgICAgaWYgKHR5cGVvZiBkaXIgIT0g
InN0cmluZyIgJiYgdHlwZW9mIGRpciAhPSAibnVtYmVyIikgewogICAgICAgICBpZiAoZGlyID09
IG51bGwpIGRpciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7
CiAgICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiOwogICAgICAgfQpA
QCAtMjc2NywxMCArMjg0MCwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBV
c2VmdWwgZm9yIGhhY2tzCiAgICAgLy8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3Rh
dGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLgotICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykg
eworICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcywgcHJlY2lzZSkgewogICAgICAgdmFyIGRv
YyA9IHRoaXMuZG9jOwogICAgICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7Ci0gICAgICB2YXIg
c3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGluZSksIG1vZGUgPSB0aGlzLmRvYy5t
b2RlOworICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUodGhpcywgcG9zLmxpbmUsIHBy
ZWNpc2UpLCBtb2RlID0gdGhpcy5kb2MubW9kZTsKICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShk
b2MsIHBvcy5saW5lKTsKICAgICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUu
dGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwogICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBw
b3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewpAQCAtMjc4NSwxMCArMjg1OCwzNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsK
ICAgICB9LAogCi0gICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSkgeworICAgIGdldFRv
a2VuVHlwZUF0OiBmdW5jdGlvbihwb3MpIHsKKyAgICAgIHBvcyA9IGNsaXBQb3ModGhpcy5kb2Ms
IHBvcyk7CisgICAgICB2YXIgc3R5bGVzID0gZ2V0TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRo
aXMuZG9jLCBwb3MubGluZSkpOworICAgICAgdmFyIGJlZm9yZSA9IDAsIGFmdGVyID0gKHN0eWxl
cy5sZW5ndGggLSAxKSAvIDIsIGNoID0gcG9zLmNoOworICAgICAgaWYgKGNoID09IDApIHJldHVy
biBzdHlsZXNbMl07CisgICAgICBmb3IgKDs7KSB7CisgICAgICAgIHZhciBtaWQgPSAoYmVmb3Jl
ICsgYWZ0ZXIpID4+IDE7CisgICAgICAgIGlmICgobWlkID8gc3R5bGVzW21pZCAqIDIgLSAxXSA6
IDApID49IGNoKSBhZnRlciA9IG1pZDsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGVzW21pZCAqIDIg
KyAxXSA8IGNoKSBiZWZvcmUgPSBtaWQgKyAxOworICAgICAgICBlbHNlIHJldHVybiBzdHlsZXNb
bWlkICogMiArIDJdOworICAgICAgfQorICAgIH0sCisKKyAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9u
KHBvcykgeworICAgICAgdmFyIG1vZGUgPSB0aGlzLmRvYy5tb2RlOworICAgICAgaWYgKCFtb2Rl
LmlubmVyTW9kZSkgcmV0dXJuIG1vZGU7CisgICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1v
ZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0KHBvcykuc3RhdGUpLm1vZGU7CisgICAgfSwKKworICAg
IGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CisgICAgICBpZiAoIWhlbHBlcnMuaGFz
T3duUHJvcGVydHkodHlwZSkpIHJldHVybjsKKyAgICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBl
XSwgbW9kZSA9IHRoaXMuZ2V0TW9kZUF0KHBvcyk7CisgICAgICByZXR1cm4gbW9kZVt0eXBlXSAm
JiBoZWxwW21vZGVbdHlwZV1dIHx8CisgICAgICAgIG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21v
ZGUuaGVscGVyVHlwZV0gfHwKKyAgICAgICAgaGVscFttb2RlLm5hbWVdOworICAgIH0sCisKKyAg
ICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7CiAgICAgICB2YXIgZG9j
ID0gdGhpcy5kb2M7CiAgICAgICBsaW5lID0gY2xpcExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpOwotICAgICAgcmV0dXJuIGdldFN0YXRlQmVm
b3JlKHRoaXMsIGxpbmUgKyAxKTsKKyAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBs
aW5lICsgMSwgcHJlY2lzZSk7CiAgICAgfSwKIAogICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24o
c3RhcnQsIG1vZGUpIHsKQEAgLTI4MDgsNiArMjkwOCwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0
LCBjb29yZHMudG9wKTsKICAgICB9LAogCisgICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWln
aHQsIG1vZGUpIHsKKyAgICAgIGhlaWdodCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7dG9wOiBo
ZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wOworICAgICAgcmV0dXJuIGxpbmVB
dEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpOworICAg
IH0sCisgICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlKSB7CisgICAgICB2YXIg
ZW5kID0gZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOwor
ICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0Owor
ICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0K
KyAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7CisgICAgICByZXR1
cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGdldExpbmUodGhpcy5kb2MsIGxpbmUpLCB7dG9wOiAw
LCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRvcCArCisgICAgICAgIChlbmQgPyBsaW5lT2Jq
LmhlaWdodCA6IDApOworICAgIH0sCisKICAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24o
KSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSk7IH0sCiAgICAgZGVmYXVsdENoYXJX
aWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgodGhpcy5kaXNwbGF5KTsgfSwKIApA
QCAtMjgzNiw3ICsyOTQ5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKICAg
ICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIgPyAidGV4dENsYXNzIiA6IHdoZXJlID09
ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3cmFwQ2xhc3MiOwogICAgICAgICBpZiAoIWxp
bmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7Ci0gICAgICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAo
IlxcYiIgKyBjbHMgKyAiXFxiIikudGVzdChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOworICAg
ICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKCIoPzpefFxccykiICsgY2xzICsgIig/OiR8XFxzKSIp
LnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxzZSBsaW5lW3Byb3Bd
ICs9ICIgIiArIGNsczsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9KTsKQEAgLTI4NDks
OSArMjk2MiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAg
aWYgKCFjdXIpIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIGxp
bmVbcHJvcF0gPSBudWxsOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICB2YXIgdXBkID0gY3Vy
LnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIgKyBjbHMgKyAiXFxiXFxzKnxcXHMqXFxiIiArIGNscyAr
ICJcXGIiKSwgIiIpOwotICAgICAgICAgIGlmICh1cGQgPT0gY3VyKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgbGluZVtwcm9wXSA9IHVwZCB8fCBudWxsOworICAgICAgICAgIHZhciBmb3VuZCA9
IGN1ci5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIiArIGNscyArICIoPzokfFxccyspIikp
OworICAgICAgICAgIGlmICghZm91bmQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB2YXIgZW5k
ID0gZm91bmQuaW5kZXggKyBmb3VuZFswXS5sZW5ndGg7CisgICAgICAgICAgbGluZVtwcm9wXSA9
IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIu
bGVuZ3RoID8gIiIgOiAiICIpICsgY3VyLnNsaWNlKGVuZCkgfHwgbnVsbDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0pOwpAQCAtMjg5OSw3ICszMDEzLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5v
ZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZz
ZXRXaWR0aDsKICAgICAgIH0KLSAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdU
b3AoZGlzcGxheSkpICsgInB4IjsKKyAgICAgIG5vZGUuc3R5bGUudG9wID0gdG9wICsgInB4IjsK
ICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgIGlm
IChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVu
dFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKQEAgLTI5NjcsNyArMzA4MSw4IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgc2VsLmdvYWxDb2x1bW4gPSBwb3MubGVm
dDsKICAgICB9KSwKIAotICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oKSB7CisgICAgdG9n
Z2xlT3ZlcndyaXRlOiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgaWYgKHZhbHVlICE9IG51bGwg
JiYgdmFsdWUgPT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHJldHVybjsKICAgICAgIGlmICh0aGlz
LnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkKICAgICAgICAgdGhpcy5k
aXNwbGF5LmN1cnNvci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI7CiAgICAg
ICBlbHNlCkBAIC0zMDA4LDkgKzMxMjMsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgIH0sCiAKLSAgICBvbjogZnVuY3Rpb24o
dHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO30sCi0gICAgb2ZmOiBmdW5jdGlvbih0eXBlLCBm
KSB7b2ZmKHRoaXMsIHR5cGUsIGYpO30sCi0KICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3Jl
dHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCiAKICAgICByZWZyZXNoOiBvcGVyYXRpb24obnVsbCwg
ZnVuY3Rpb24oKSB7CkBAIC0zMDM0LDYgKzMxNDYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZGlzcGxheS5zY3JvbGxlcjt9LAogICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KICAgfTsKKyAgZXZlbnRNaXhpbihDb2RlTWly
cm9yKTsKIAogICAvLyBPUFRJT04gREVGQVVMVFMKIApAQCAtMzA5MCw2ICszMjAzLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0
eWxlLmxlZnQgPSB2YWwgPyBjb21wZW5zYXRlRm9ySFNjcm9sbChjbS5kaXNwbGF5KSArICJweCIg
OiAiMCI7CiAgICAgY20ucmVmcmVzaCgpOwogICB9LCB0cnVlKTsKKyAgb3B0aW9uKCJjb3Zlckd1
dHRlck5leHRUb1Njcm9sbGJhciIsIGZhbHNlLCB1cGRhdGVTY3JvbGxiYXJzLCB0cnVlKTsKICAg
b3B0aW9uKCJsaW5lTnVtYmVycyIsIGZhbHNlLCBmdW5jdGlvbihjbSkgewogICAgIHNldEd1dHRl
cnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKICAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CkBA
IC0zMTA1LDEyICszMjE5LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSk7CiAKICAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUi
LCA1MzApOworICBvcHRpb24oImN1cnNvclNjcm9sbE1hcmdpbiIsIDApOwogICBvcHRpb24oImN1
cnNvckhlaWdodCIsIDEpOwogICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKICAgb3B0aW9uKCJ3
b3JrRGVsYXkiLCAxMDApOwogICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUpOwogICBvcHRp
b24oInBvbGxJbnRlcnZhbCIsIDEwMCk7CiAgIG9wdGlvbigidW5kb0RlcHRoIiwgNDAsIGZ1bmN0
aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHZhbDt9KTsKKyAgb3B0aW9u
KCJoaXN0b3J5RXZlbnREZWxheSIsIDUwMCk7CiAgIG9wdGlvbigidmlld3BvcnRNYXJnaW4iLCAx
MCwgZnVuY3Rpb24oY20pe2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJtYXhIaWdo
bGlnaHRMZW5ndGgiLCAxMDAwMCwgZnVuY3Rpb24oY20pe2xvYWRNb2RlKGNtKTsgY20ucmVmcmVz
aCgpO30sIHRydWUpOwogICBvcHRpb24oIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCB0cnVlLCBmdW5j
dGlvbihjbSwgdmFsKSB7CkBAIC0zMTQxLDE2ICszMjU3LDIxIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICB9OwogCiAgIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSBmdW5j
dGlvbihzcGVjKSB7Ci0gICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rl
cy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkKKyAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIg
JiYgbWltZU1vZGVzLmhhc093blByb3BlcnR5KHNwZWMpKSB7CiAgICAgICBzcGVjID0gbWltZU1v
ZGVzW3NwZWNdOwotICAgIGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3
XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkKKyAgICB9IGVsc2UgaWYgKHNwZWMgJiYg
dHlwZW9mIHNwZWMubmFtZSA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHko
c3BlYy5uYW1lKSkgeworICAgICAgdmFyIGZvdW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV07Cisg
ICAgICBzcGVjID0gY3JlYXRlT2JqKGZvdW5kLCBzcGVjKTsKKyAgICAgIHNwZWMubmFtZSA9IGZv
dW5kLm5hbWU7CisgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiAvXltc
d1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3Qoc3BlYykpIHsKICAgICAgIHJldHVybiBDb2RlTWly
cm9yLnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICB9CiAgICAgaWYgKHR5cGVv
ZiBzcGVjID09ICJzdHJpbmciKSByZXR1cm4ge25hbWU6IHNwZWN9OwogICAgIGVsc2UgcmV0dXJu
IHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgIH07CiAKICAgQ29kZU1pcnJvci5nZXRNb2RlID0g
ZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewotICAgIHNwZWMgPSBDb2RlTWlycm9yLnJlc29sdmVN
b2RlKHNwZWMpOworICAgIHZhciBzcGVjID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsK
ICAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOwogICAgIGlmICghbWZhY3Rvcnkp
IHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgICB2
YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpOwpAQCAtMzE2Myw2ICszMjg0LDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogICAg
IG1vZGVPYmoubmFtZSA9IHNwZWMubmFtZTsKKwogICAgIHJldHVybiBtb2RlT2JqOwogICB9Owog
CkBAIC0zMTgyLDEyICszMzA0LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsK
ICAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7CiAgIH07Ci0KKyAgQ29kZU1p
cnJvci5kZWZpbmVEb2NFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7CisgICAgRG9j
LnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7CisgIH07CiAgIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9u
ID0gb3B0aW9uOwogCiAgIHZhciBpbml0SG9va3MgPSBbXTsKICAgQ29kZU1pcnJvci5kZWZpbmVJ
bml0SG9vayA9IGZ1bmN0aW9uKGYpIHtpbml0SG9va3MucHVzaChmKTt9OwogCisgIHZhciBoZWxw
ZXJzID0gQ29kZU1pcnJvci5oZWxwZXJzID0ge307CisgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxw
ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCB2YWx1ZSkgeworICAgIGlmICghaGVscGVycy5oYXNP
d25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7fTsK
KyAgICBoZWxwZXJzW3R5cGVdW25hbWVdID0gdmFsdWU7CisgIH07CisKICAgLy8gTU9ERSBTVEFU
RSBIQU5ETElORwogCiAgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3Rh
dGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKQEAgLTMyMzMsNiArMzM2MywxMCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBsID0gY20uZ2V0Q3Vyc29yKCku
bGluZTsKICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGwsIDApLCBQb3MobCksICIrZGVs
ZXRlIik7CiAgICAgfSwKKyAgICBkZWxMaW5lTGVmdDogZnVuY3Rpb24oY20pIHsKKyAgICAgIHZh
ciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKKyAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGN1
ci5saW5lLCAwKSwgY3VyLCAiK2RlbGV0ZSIpOworICAgIH0sCiAgICAgdW5kbzogZnVuY3Rpb24o
Y20pIHtjbS51bmRvKCk7fSwKICAgICByZWRvOiBmdW5jdGlvbihjbSkge2NtLnJlZG8oKTt9LAog
ICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5m
aXJzdExpbmUoKSwgMCkpO30sCkBAIC0zMzI4LDcgKzM0NjIsNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAiQWx0LVJpZ2h0IjogImdvR3JvdXBSaWdodCIsICJDbWQt
TGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNr
c3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAogICAgICJDdHJsLUFsdC1CYWNrc3BhY2UiOiAiZGVs
R3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21kLVMiOiAic2F2
ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ21k
LUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ21kLUFsdC1G
IjogInJlcGxhY2VBbGwiLAotICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNtZC1dIjogImlu
ZGVudE1vcmUiLAorICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1v
cmUiLCAiQ21kLUJhY2tzcGFjZSI6ICJkZWxMaW5lTGVmdCIsCiAgICAgZmFsbHRocm91Z2g6IFsi
YmFzaWMiLCAiZW1hY3N5Il0KICAgfTsKICAga2V5TWFwWyJkZWZhdWx0Il0gPSBtYWMgPyBrZXlN
YXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CkBAIC0zMzY3LDcgKzM1MDEsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbWFwcy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGRvbmUgPSBsb29rdXAobWFwc1tpXSk7
Ci0gICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmU7CisgICAgICBpZiAoZG9uZSkgcmV0dXJuIGRv
bmUgIT0gInN0b3AiOwogICAgIH0KICAgfQogICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50
KSB7CkBAIC0zNTIxLDYgKzM2NTUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB0aGlzLmRvYyA9IGRvYzsKICAgfQogICBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBU
ZXh0TWFya2VyOworICBldmVudE1peGluKFRleHRNYXJrZXIpOwogCiAgIFRleHRNYXJrZXIucHJv
dG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFy
ZWQpIHJldHVybjsKQEAgLTM1NDksNyArMzY4NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSkgcmVnQ2hhbmdlKGNtLCBtaW4s
IG1heCArIDEpOwogICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDsKICAgICB0aGlzLmV4cGxpY2l0
bHlDbGVhcmVkID0gdHJ1ZTsKLSAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5kb2MuY2Fu
dEVkaXQpIHsKKyAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKICAg
ICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7CiAgICAgICBpZiAoY20pIHJlQ2hlY2tTZWxl
Y3Rpb24oY20pOwogICAgIH0KQEAgLTM1NzIsMTUgKzM3MDcsMTggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0
b307CiAgIH07CiAKLSAgVGV4dE1hcmtlci5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9u
KGNvcHlXaWRnZXQpIHsKLSAgICB2YXIgcmVwbCA9IHRoaXMucmVwbGFjZWRXaXRoOwotICAgIHJl
dHVybiB7Y2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSwKLSAgICAgICAgICAgIGluY2x1c2l2ZUxl
ZnQ6IHRoaXMuaW5jbHVzaXZlTGVmdCwgaW5jbHVzaXZlUmlnaHQ6IHRoaXMuaW5jbHVzaXZlUmln
aHQsCi0gICAgICAgICAgICBhdG9taWM6IHRoaXMuYXRvbWljLAotICAgICAgICAgICAgY29sbGFw
c2VkOiB0aGlzLmNvbGxhcHNlZCwKLSAgICAgICAgICAgIHJlcGxhY2VkV2l0aDogY29weVdpZGdl
dCA/IHJlcGwgJiYgcmVwbC5jbG9uZU5vZGUodHJ1ZSkgOiByZXBsLAotICAgICAgICAgICAgcmVh
ZE9ubHk6IHRoaXMucmVhZE9ubHksCi0gICAgICAgICAgICBzdGFydFN0eWxlOiB0aGlzLnN0YXJ0
U3R5bGUsIGVuZFN0eWxlOiB0aGlzLmVuZFN0eWxlfTsKKyAgVGV4dE1hcmtlci5wcm90b3R5cGUu
Y2hhbmdlZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoKSwgY20gPSB0
aGlzLmRvYy5jbTsKKyAgICBpZiAoIXBvcyB8fCAhY20pIHJldHVybjsKKyAgICB2YXIgbGluZSA9
IGdldExpbmUodGhpcy5kb2MsIHBvcy5mcm9tLmxpbmUpOworICAgIGNsZWFyQ2FjaGVkTWVhc3Vy
ZW1lbnQoY20sIGxpbmUpOworICAgIGlmIChwb3MuZnJvbS5saW5lID49IGNtLmRpc3BsYXkuc2hv
d2luZ0Zyb20gJiYgcG9zLmZyb20ubGluZSA8IGNtLmRpc3BsYXkuc2hvd2luZ1RvKSB7CisgICAg
ICBmb3IgKHZhciBub2RlID0gY20uZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7IG5vZGU7IG5v
ZGUgPSBub2RlLm5leHRTaWJsaW5nKSBpZiAobm9kZS5saW5lT2JqID09IGxpbmUpIHsKKyAgICAg
ICAgaWYgKG5vZGUub2Zmc2V0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0
KGxpbmUsIG5vZGUub2Zmc2V0SGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg
ICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRy
dWU7IH0pOworICAgIH0KICAgfTsKIAogICBUZXh0TWFya2VyLnByb3RvdHlwZS5hdHRhY2hMaW5l
ID0gZnVuY3Rpb24obGluZSkgewpAQCAtMzYwOSw2ICszNzQ3LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKICAgICAg
IG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlOwogICAgICAgbWFya2VyLnJlcGxhY2VkV2l0aCA9IGVs
dCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVNaXJyb3Itd2lkZ2V0Iik7Cisg
ICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci5yZXBsYWNlZFdpdGgu
aWdub3JlRXZlbnRzID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHNh
d0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTsKIApAQCAtMzY1MSw3ICszNzkwLDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIGlmIChjbSkgewogICAgICAgaWYg
KHVwZGF0ZU1heExpbmUpIGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgaWYg
KG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxl
IHx8IG1hcmtlci5jb2xsYXBzZWQpCisgICAgICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJr
ZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtl
ci5jb2xsYXBzZWQpCiAgICAgICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsg
MSk7CiAgICAgICBpZiAobWFya2VyLmF0b21pYykgcmVDaGVja1NlbGVjdGlvbihjbSk7CiAgICAg
fQpAQCAtMzY2OSw2ICszODA4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgfQogICB9CiAgIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRN
YXJrZXI7CisgIGV2ZW50TWl4aW4oU2hhcmVkVGV4dE1hcmtlcik7CiAKICAgU2hhcmVkVGV4dE1h
cmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgICBpZiAodGhpcy5leHBsaWNp
dGx5Q2xlYXJlZCkgcmV0dXJuOwpAQCAtMzY4MCwxMSArMzgyMCw2IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0g
ZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKCk7CiAgIH07Ci0gIFNo
YXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbihjb3B5V2lkZ2V0
KSB7Ci0gICAgdmFyIGlubmVyID0gdGhpcy5wcmltYXJ5LmdldE9wdGlvbnMoY29weVdpZGdldCk7
Ci0gICAgaW5uZXIuc2hhcmVkID0gdHJ1ZTsKLSAgICByZXR1cm4gaW5uZXI7Ci0gIH07CiAKICAg
ZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgewog
ICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpOwpAQCAtMzc4Nyw2ICszOTIyLDEzIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICB9CiAgICAgICB9CiAgICAg
fQorICAgIGlmIChzYW1lTGluZSAmJiBmaXJzdCkgeworICAgICAgLy8gTWFrZSBzdXJlIHdlIGRp
ZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNwYW5zCisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZpcnN0Lmxlbmd0aDsgKytpKQorICAgICAgICBpZiAoZmlyc3RbaV0uZnJvbSAhPSBudWxs
ICYmIGZpcnN0W2ldLmZyb20gPT0gZmlyc3RbaV0udG8gJiYgZmlyc3RbaV0ubWFya2VyLnR5cGUg
IT0gImJvb2ttYXJrIikKKyAgICAgICAgICBmaXJzdC5zcGxpY2UoaS0tLCAxKTsKKyAgICAgIGlm
ICghZmlyc3QubGVuZ3RoKSBmaXJzdCA9IG51bGw7CisgICAgfQogCiAgICAgdmFyIG5ld01hcmtl
cnMgPSBbZmlyc3RdOwogICAgIGlmICghc2FtZUxpbmUpIHsKQEAgLTM4ODEsNiArNDAyMyw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgc3AgPSBzcHNbaV07CiAg
ICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVlOwogICAgICAgaWYgKHNwLmZy
b20gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgICBpZiAoc3AubWFya2VyLnJlcGxhY2VkV2l0
aCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJvbSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNp
dmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0zODk0LDcgKzQwMzcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB0cnVlOwogICAgIGZvciAodmFyIHNwLCBpID0g
MDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHsKICAgICAgIHNwID0gbGluZS5t
YXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmIHNwLmZyb20g
PT0gc3Bhbi50byAmJgorICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtl
ci5yZXBsYWNlZFdpdGggJiYgc3AuZnJvbSA9PSBzcGFuLnRvICYmCiAgICAgICAgICAgKHNwLm1h
cmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgogICAg
ICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0zOTE4LDExICs0MDYxLDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAvLyBMSU5FIFdJREdFVFMKIAogICB2YXIgTGluZVdpZGdldCA9IENvZGVNaXJyb3Iu
TGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBvcHRpb25zKSB7Ci0gICAgZm9yICh2YXIg
b3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCisgICAgaWYg
KG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSBpZiAob3B0aW9ucy5oYXNPd25Qcm9w
ZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0gb3B0aW9uc1tvcHRdOwogICAgIHRoaXMuY20g
PSBjbTsKICAgICB0aGlzLm5vZGUgPSBub2RlOwogICB9OworICBldmVudE1peGluKExpbmVXaWRn
ZXQpOwogICBmdW5jdGlvbiB3aWRnZXRPcGVyYXRpb24oZikgewogICAgIHJldHVybiBmdW5jdGlv
bigpIHsKICAgICAgIHZhciB3aXRoT3AgPSAhdGhpcy5jbS5jdXJPcDsKQEAgLTM5MzcsNyArNDA4
MSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChubyA9PSBu
dWxsIHx8ICF3cykgcmV0dXJuOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyAr
K2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKICAgICBpZiAoIXdzLmxl
bmd0aCkgdGhpcy5saW5lLndpZGdldHMgPSBudWxsOworICAgIHZhciBhYm92ZVZpc2libGUgPSBo
ZWlnaHRBdExpbmUodGhpcy5jbSwgdGhpcy5saW5lKSA8IHRoaXMuY20uZG9jLnNjcm9sbFRvcDsK
ICAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGluZSwgTWF0aC5tYXgoMCwgdGhpcy5saW5lLmhl
aWdodCAtIHdpZGdldEhlaWdodCh0aGlzKSkpOworICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRv
U2Nyb2xsUG9zKHRoaXMuY20sIDAsIC10aGlzLmhlaWdodCk7CiAgICAgcmVnQ2hhbmdlKHRoaXMu
Y20sIG5vLCBubyArIDEpOwogICB9KTsKICAgTGluZVdpZGdldC5wcm90b3R5cGUuY2hhbmdlZCA9
IHdpZGdldE9wZXJhdGlvbihmdW5jdGlvbigpIHsKQEAgLTM5NjEsMTAgKzQxMDcsMTIgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHdpZGdldCA9IG5ldyBMaW5l
V2lkZ2V0KGNtLCBub2RlLCBvcHRpb25zKTsKICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgY20u
ZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOwogICAgIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwg
ZnVuY3Rpb24obGluZSkgewotICAgICAgKGxpbmUud2lkZ2V0cyB8fCAobGluZS53aWRnZXRzID0g
W10pKS5wdXNoKHdpZGdldCk7CisgICAgICB2YXIgd2lkZ2V0cyA9IGxpbmUud2lkZ2V0cyB8fCAo
bGluZS53aWRnZXRzID0gW10pOworICAgICAgaWYgKHdpZGdldC5pbnNlcnRBdCA9PSBudWxsKSB3
aWRnZXRzLnB1c2god2lkZ2V0KTsKKyAgICAgIGVsc2Ugd2lkZ2V0cy5zcGxpY2UoTWF0aC5taW4o
d2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgwLCB3aWRnZXQuaW5zZXJ0QXQpKSwgMCwgd2lk
Z2V0KTsKICAgICAgIHdpZGdldC5saW5lID0gbGluZTsKICAgICAgIGlmICghbGluZUlzSGlkZGVu
KGNtLmRvYywgbGluZSkgfHwgd2lkZ2V0LnNob3dJZkhpZGRlbikgewotICAgICAgICB2YXIgYWJv
dmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lKSA8IGNtLmRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsVG9wOworICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBs
aW5lKSA8IGNtLmRvYy5zY3JvbGxUb3A7CiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwg
bGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7CiAgICAgICAgIGlmIChhYm92ZVZp
c2libGUpIGFkZFRvU2Nyb2xsUG9zKGNtLCAwLCB3aWRnZXQuaGVpZ2h0KTsKICAgICAgIH0KQEAg
LTM5NzcsMTIgKzQxMjUsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBp
bmNsdWRpbmcKICAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLgotICBm
dW5jdGlvbiBtYWtlTGluZSh0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsKLSAg
ICB2YXIgbGluZSA9IHt0ZXh0OiB0ZXh0fTsKLSAgICBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBt
YXJrZWRTcGFucyk7Ci0gICAgbGluZS5oZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRl
SGVpZ2h0KGxpbmUpIDogMTsKLSAgICByZXR1cm4gbGluZTsKLSAgfQorICB2YXIgTGluZSA9IENv
ZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdo
dCkgeworICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywg
bWFya2VkU3BhbnMpOworICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0
ZUhlaWdodCh0aGlzKSA6IDE7CisgIH07CisgIGV2ZW50TWl4aW4oTGluZSk7CiAKICAgZnVuY3Rp
b24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsK
ICAgICBsaW5lLnRleHQgPSB0ZXh0OwpAQCAtNDAwNiw3ICs0MTU0LDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUs
IHN0YXRlLCBmKSB7CiAgICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zOwog
ICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5m
bGF0dGVuU3BhbnM7Ci0gICAgdmFyIGN1clRleHQgPSAiIiwgY3VyU3R5bGUgPSBudWxsOworICAg
IHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDsKICAgICB2YXIgc3RyZWFtID0gbmV3
IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUpLCBzdHlsZTsKICAgICBpZiAo
dGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAg
IHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CkBAIC00MDE4LDE0ICs0MTY2LDEzIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3R5bGUg
PSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICAgfQotICAgICAgdmFyIHN1YnN0ciA9
IHN0cmVhbS5jdXJyZW50KCk7Ci0gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAg
ICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHsKLSAgICAgICAgaWYg
KGN1clRleHQpIGYoY3VyVGV4dCwgY3VyU3R5bGUpOwotICAgICAgICBjdXJUZXh0ID0gc3Vic3Ry
OyBjdXJTdHlsZSA9IHN0eWxlOwotICAgICAgfSBlbHNlIGN1clRleHQgPSBjdXJUZXh0ICsgc3Vi
c3RyOworICAgICAgICBpZiAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIGYoc3RyZWFtLnN0YXJ0
LCBjdXJTdHlsZSk7CisgICAgICAgIGN1clN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyBjdXJTdHlsZSA9
IHN0eWxlOworICAgICAgfQorICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICB9
Ci0gICAgaWYgKGN1clRleHQpIGYoY3VyVGV4dCwgY3VyU3R5bGUpOworICAgIGlmIChjdXJTdGFy
dCA8IHN0cmVhbS5wb3MpIGYoc3RyZWFtLnBvcywgY3VyU3R5bGUpOwogICB9CiAKICAgZnVuY3Rp
b24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUpIHsKQEAgLTQwMzMsMjcgKzQxODAsMjQg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gbW9kZS9vdmVybGF5
cyB0aGF0IGl0IGlzIGJhc2VkIG9uIChmb3IgZWFzeSBpbnZhbGlkYXRpb24pLgogICAgIHZhciBz
dCA9IFtjbS5zdGF0ZS5tb2RlR2VuXTsKICAgICAvLyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9m
IHN0eWxlcwotICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBm
dW5jdGlvbih0eHQsIHN0eWxlKSB7c3QucHVzaCh0eHQsIHN0eWxlKTt9KTsKKyAgICBydW5Nb2Rl
KGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBzdGF0ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkg
e3N0LnB1c2goZW5kLCBzdHlsZSk7fSk7CiAKICAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBz
dHlsZSBhcnJheS4KICAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxl
bmd0aDsgKytvKSB7Ci0gICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBp
ID0gMTsKLSAgICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgb3ZlcmxheS5tb2RlLCB0cnVlLCBm
dW5jdGlvbih0eHQsIHN0eWxlKSB7Ci0gICAgICAgIHZhciBzdGFydCA9IGksIGxlbiA9IHR4dC5s
ZW5ndGg7CisgICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwg
YXQgPSAwOworICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUs
IGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKKyAgICAgICAgdmFyIHN0YXJ0ID0gaTsKICAgICAgICAg
Ly8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFu
ZCB0aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICB2
YXIgY3VyID0gc3RbaV0sIGxlbl8gPSBjdXIubGVuZ3RoOwotICAgICAgICAgIGlmIChsZW5fIDw9
IGxlbikgewotICAgICAgICAgICAgbGVuIC09IGxlbl87Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBjdXIuc2xpY2UoMCwgbGVuKSwgc3RbaSsxXSwgY3Vy
LnNsaWNlKGxlbikpOwotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICB9CisgICAgICAg
IHdoaWxlIChhdCA8IGVuZCkgeworICAgICAgICAgIHZhciBpX2VuZCA9IHN0W2ldOworICAgICAg
ICAgIGlmIChpX2VuZCA+IGVuZCkKKyAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0
W2krMV0sIGlfZW5kKTsKICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgYXQgPSBNYXRoLm1p
bihlbmQsIGlfZW5kKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm47CiAg
ICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkgewotICAgICAgICAgIHN0LnNwbGljZShzdGFydCwg
aSAtIHN0YXJ0LCB0eHQsIHN0eWxlKTsKKyAgICAgICAgICBzdC5zcGxpY2Uoc3RhcnQsIGkgLSBz
dGFydCwgZW5kLCBzdHlsZSk7CiAgICAgICAgICAgaSA9IHN0YXJ0ICsgMjsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7CkBAIC00MDkz
LDM3ICs0MjM3LDMxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAK
ICAgZnVuY3Rpb24gbGluZUNvbnRlbnQoY20sIHJlYWxMaW5lLCBtZWFzdXJlKSB7Ci0gICAgdmFy
IG1lcmdlZCwgbGluZSA9IHJlYWxMaW5lLCBsaW5lQmVmb3JlLCBzYXdCZWZvcmUsIHNpbXBsZSA9
IHRydWU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpKSB7
Ci0gICAgICBzaW1wbGUgPSBmYWxzZTsKKyAgICB2YXIgbWVyZ2VkLCBsaW5lID0gcmVhbExpbmUs
IGVtcHR5ID0gdHJ1ZTsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQo
bGluZSkpCiAgICAgICBsaW5lID0gZ2V0TGluZShjbS5kb2MsIG1lcmdlZC5maW5kKCkuZnJvbS5s
aW5lKTsKLSAgICAgIGlmICghbGluZUJlZm9yZSkgbGluZUJlZm9yZSA9IGxpbmU7Ci0gICAgfQog
CiAgICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIpLCBjb2w6IDAsIHBvczogMCwgZGlz
cGxheTogIW1lYXN1cmUsCi0gICAgICAgICAgICAgICAgICAgbWVhc3VyZTogbnVsbCwgYWRkZWRP
bmU6IGZhbHNlLCBjbTogY219OworICAgICAgICAgICAgICAgICAgIG1lYXN1cmU6IG51bGwsIG1l
YXN1cmVkU29tZXRoaW5nOiBmYWxzZSwgY206IGNtfTsKICAgICBpZiAobGluZS50ZXh0Q2xhc3Mp
IGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9IGxpbmUudGV4dENsYXNzOwogCiAgICAgZG8geworICAg
ICAgaWYgKGxpbmUudGV4dCkgZW1wdHkgPSBmYWxzZTsKICAgICAgIGJ1aWxkZXIubWVhc3VyZSA9
IGxpbmUgPT0gcmVhbExpbmUgJiYgbWVhc3VyZTsKICAgICAgIGJ1aWxkZXIucG9zID0gMDsKICAg
ICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZGVyLm1lYXN1cmUgPyBidWlsZFRva2VuTWVhc3Vy
ZSA6IGJ1aWxkVG9rZW47CiAgICAgICBpZiAoKGllIHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9u
KCJsaW5lV3JhcHBpbmciKSkKICAgICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5T
cGxpdFNwYWNlcyhidWlsZGVyLmFkZFRva2VuKTsKLSAgICAgIGlmIChtZWFzdXJlICYmIHNhd0Jl
Zm9yZSAmJiBsaW5lICE9IHJlYWxMaW5lICYmICFidWlsZGVyLmFkZGVkT25lKSB7Ci0gICAgICAg
IG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNt
LmRpc3BsYXkubWVhc3VyZSkpOwotICAgICAgICBidWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKLSAg
ICAgIH0KICAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwg
Z2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAgICAgc2F3QmVmb3JlID0gbGluZSA9PSBsaW5l
QmVmb3JlOwotICAgICAgaWYgKG5leHQpIHsKLSAgICAgICAgbGluZSA9IGdldExpbmUoY20uZG9j
LCBuZXh0LnRvLmxpbmUpOwotICAgICAgICBzaW1wbGUgPSBmYWxzZTsKKyAgICAgIGlmIChtZWFz
dXJlICYmIGxpbmUgPT0gcmVhbExpbmUgJiYgIWJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcpIHsK
KyAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVs
ZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7CisgICAgICAgIGJ1aWxkZXIubWVhc3VyZWRTb21l
dGhpbmcgPSB0cnVlOwogICAgICAgfQorICAgICAgaWYgKG5leHQpIGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgbmV4dC50by5saW5lKTsKICAgICB9IHdoaWxlIChuZXh0KTsKIAotICAgIGlmIChtZWFz
dXJlICYmICFidWlsZGVyLmFkZGVkT25lKQotICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJl
LmFwcGVuZENoaWxkKHNpbXBsZSA/IGVsdCgic3BhbiIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVs
ZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7CisgICAgaWYgKG1lYXN1cmUgJiYgIWJ1aWxkZXIu
bWVhc3VyZWRTb21ldGhpbmcgJiYgIW1lYXN1cmVbMF0pCisgICAgICBtZWFzdXJlWzBdID0gYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQoZW1wdHkgPyBlbHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJv
V2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwogICAgIGlmICghYnVpbGRlci5wcmUu
Zmlyc3RDaGlsZCAmJiAhbGluZUlzSGlkZGVuKGNtLmRvYywgcmVhbExpbmUpKQogICAgICAgYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MDBhMCIpKTsK
IApAQCAtNDE0Nyw3ICs0Mjg1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIH0KIAogICB2YXIgdG9rZW5TcGVjaWFsQ2hhcnMgPSAvW1x0XHUwMDAwLVx1MDAxOVx1MDBh
ZFx1MjAwYlx1MjAyOFx1MjAyOVx1RkVGRl0vZzsKLSAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWls
ZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpIHsKKyAgZnVuY3Rpb24gYnVp
bGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxl
KSB7CiAgICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICAgaWYgKCF0b2tlblNwZWNpYWxDaGFycy50
ZXN0KHRleHQpKSB7CiAgICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDsKQEAgLTQxODAs
NyArNDMxOCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFy
IGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIiOwogICAgICAgaWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHls
ZSArPSBzdGFydFN0eWxlOwogICAgICAgaWYgKGVuZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5
bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW2Nv
bnRlbnRdLCBmdWxsU3R5bGUpKTsKKyAgICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsIFtjb250
ZW50XSwgZnVsbFN0eWxlKTsKKyAgICAgIGlmICh0aXRsZSkgdG9rZW4udGl0bGUgPSB0aXRsZTsK
KyAgICAgIHJldHVybiBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh0b2tlbik7CiAgICAgfQogICAg
IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGNvbnRlbnQpOwogICB9CkBAIC00MTkyLDEzICs0MzMy
LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGNoID49
ICJcdWQ4MDAiICYmIGNoIDwgIlx1ZGJmZiIgJiYgaSA8IHRleHQubGVuZ3RoIC0gMSkgewogICAg
ICAgICBjaCA9IHRleHQuc2xpY2UoaSwgaSArIDIpOwogICAgICAgICArK2k7Ci0gICAgICB9IGVs
c2UgaWYgKGkgJiYgd3JhcHBpbmcgJiYKLSAgICAgICAgICAgICAgICAgc3BhbkFmZmVjdHNXcmFw
cGluZy50ZXN0KHRleHQuc2xpY2UoaSAtIDEsIGkgKyAxKSkpIHsKKyAgICAgIH0gZWxzZSBpZiAo
aSAmJiB3cmFwcGluZyAmJiBzcGFuQWZmZWN0c1dyYXBwaW5nKHRleHQsIGkpKSB7CiAgICAgICAg
IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVsdCgid2JyIikpOwogICAgICAgfQorICAgICAgdmFy
IG9sZCA9IGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc107CiAgICAgICB2YXIgc3BhbiA9IGJ1
aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPQogICAgICAgICBidWlsZFRva2VuKGJ1aWxkZXIs
IGNoLCBzdHlsZSwKICAgICAgICAgICAgICAgICAgICBzdGFydCAmJiBzdGFydFN0eWxlLCBpID09
IHRleHQubGVuZ3RoIC0gMSAmJiBlbmRTdHlsZSk7CisgICAgICBpZiAob2xkKSBzcGFuLmxlZnRT
aWRlID0gb2xkLmxlZnRTaWRlIHx8IG9sZDsKICAgICAgIC8vIEluIElFIHNpbmdsZS1zcGFjZSBu
b2RlcyB3cmFwIGRpZmZlcmVudGx5IHRoYW4gc3BhY2VzCiAgICAgICAvLyBlbWJlZGRlZCBpbiBs
YXJnZXIgdGV4dCBub2RlcywgZXhjZXB0IHdoZW4gc2V0IHRvCiAgICAgICAvLyB3aGl0ZS1zcGFj
ZTogbm9ybWFsIChpc3N1ZSAjMTI2OCkuCkBAIC00MjA3LDcgKzQzNDgsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0g
Im5vcm1hbCI7CiAgICAgICBidWlsZGVyLnBvcyArPSBjaC5sZW5ndGg7CiAgICAgfQotICAgIGlm
ICh0ZXh0Lmxlbmd0aCkgYnVpbGRlci5hZGRlZE9uZSA9IHRydWU7CisgICAgaWYgKHRleHQubGVu
Z3RoKSBidWlsZGVyLm1lYXN1cmVkU29tZXRoaW5nID0gdHJ1ZTsKICAgfQogCiAgIGZ1bmN0aW9u
IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhpbm5lcikgewpAQCAtNDIxNywxOCArNDM1OCwyNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIG91dCArPSAiICI7CiAgICAg
ICByZXR1cm4gb3V0OwogICAgIH0KLSAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwg
c3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7Ci0gICAgICByZXR1cm4gaW5uZXIoYnVpbGRl
ciwgdGV4dC5yZXBsYWNlKC8gezMsfS8sIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0
eWxlKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5
bGUsIGVuZFN0eWxlLCB0aXRsZSkgeworICAgICAgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQu
cmVwbGFjZSgvIHszLH0vLCBzcGxpdCksIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0
bGUpOwogICAgIH07CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRl
ciwgc2l6ZSwgd2lkZ2V0KSB7CisgIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVy
LCBzaXplLCBtYXJrZXIsIGlnbm9yZVdpZGdldCkgeworICAgIHZhciB3aWRnZXQgPSAhaWdub3Jl
V2lkZ2V0ICYmIG1hcmtlci5yZXBsYWNlZFdpdGg7CiAgICAgaWYgKHdpZGdldCkgewogICAgICAg
aWYgKCFidWlsZGVyLmRpc3BsYXkpIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7CiAg
ICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh3aWRnZXQpOwotICAgICAgaWYgKGJ1aWxkZXIu
bWVhc3VyZSAmJiBzaXplKSB7Ci0gICAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10g
PSB3aWRnZXQ7Ci0gICAgICAgIGJ1aWxkZXIuYWRkZWRPbmUgPSB0cnVlOworICAgICAgaWYgKGJ1
aWxkZXIubWVhc3VyZSkgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgIGJ1aWxkZXIu
bWVhc3VyZVtidWlsZGVyLnBvc10gPSB3aWRnZXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgdmFyIGVsdCA9IGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSB6ZXJvV2lkdGhFbGVt
ZW50KGJ1aWxkZXIuY20uZGlzcGxheS5tZWFzdXJlKTsKKyAgICAgICAgICBpZiAobWFya2VyLnR5
cGUgIT0gImJvb2ttYXJrIiB8fCBtYXJrZXIuaW5zZXJ0TGVmdCkKKyAgICAgICAgICAgIGJ1aWxk
ZXIucHJlLmluc2VydEJlZm9yZShlbHQsIHdpZGdldCk7CisgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KTsKKyAgICAgICAgfQorICAgICAgICBi
dWlsZGVyLm1lYXN1cmVkU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgIH0KICAgICB9CiAgICAgYnVp
bGRlci5wb3MgKz0gc2l6ZTsKQEAgLTQyMzcsMTkgKzQzODcsMTggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIE91dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFr
ZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGlnaHRpbmcKICAgLy8gYW5kIG1hcmtlZCB0ZXh0IGlu
dG8gYWNjb3VudC4KICAgZnVuY3Rpb24gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwg
c3R5bGVzKSB7Ci0gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsKKyAgICB2YXIgc3Bh
bnMgPSBsaW5lLm1hcmtlZFNwYW5zLCBhbGxUZXh0ID0gbGluZS50ZXh0LCBhdCA9IDA7CiAgICAg
aWYgKCFzcGFucykgewogICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzdHlsZXMubGVuZ3RoOyBp
Kz0yKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIHN0eWxlc1tpXSwgc3R5bGVU
b0NsYXNzKHN0eWxlc1tpKzFdKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwg
YWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaV0pLCBzdHlsZVRvQ2xhc3Moc3R5bGVzW2kr
MV0pKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB2YXIgYWxsVGV4dCA9IGxpbmUudGV4
dCwgbGVuID0gYWxsVGV4dC5sZW5ndGg7Ci0gICAgdmFyIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0g
IiIsIHN0eWxlOwotICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5
bGUsIHNwYW5TdGFydFN0eWxlLCBjb2xsYXBzZWQ7CisgICAgdmFyIGxlbiA9IGFsbFRleHQubGVu
Z3RoLCBwb3MgPSAwLCBpID0gMSwgdGV4dCA9ICIiLCBzdHlsZTsKKyAgICB2YXIgbmV4dENoYW5n
ZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgdGl0bGUsIGNv
bGxhcHNlZDsKICAgICBmb3IgKDs7KSB7CiAgICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3MpIHsg
Ly8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldAotICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5k
U3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9ICIiOworICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5k
U3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9IHRpdGxlID0gIiI7CiAgICAgICAgIGNvbGxhcHNlZCA9
IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eTsKICAgICAgICAgdmFyIGZvdW5kQm9va21hcmsg
PSBudWxsOwogICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7
CkBAIC00MjU5LDE3ICs0NDA4LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgaWYgKG0uY2xhc3NOYW1lKSBzcGFuU3R5bGUgKz0gIiAiICsgbS5jbGFz
c05hbWU7CiAgICAgICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSBz
cGFuU3RhcnRTdHlsZSArPSAiICIgKyBtLnN0YXJ0U3R5bGU7CiAgICAgICAgICAgICBpZiAobS5l
bmRTdHlsZSAmJiBzcC50byA9PSBuZXh0Q2hhbmdlKSBzcGFuRW5kU3R5bGUgKz0gIiAiICsgbS5l
bmRTdHlsZTsKLSAgICAgICAgICAgIGlmIChtLmNvbGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBj
b2xsYXBzZWQubWFya2VyLndpZHRoIDwgbS53aWR0aCkpCisgICAgICAgICAgICBpZiAobS50aXRs
ZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsKKyAgICAgICAgICAgIGlmIChtLmNvbGxhcHNl
ZCAmJiAoIWNvbGxhcHNlZCB8fCBjb2xsYXBzZWQubWFya2VyLnNpemUgPCBtLnNpemUpKQogICAg
ICAgICAgICAgICBjb2xsYXBzZWQgPSBzcDsKICAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20g
PiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHsKICAgICAgICAgICAgIG5leHRDaGFuZ2Ug
PSBzcC5mcm9tOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFy
ayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS5yZXBsYWNlZFdpdGgpCi0gICAgICAgICAgICBmb3Vu
ZEJvb2ttYXJrID0gbS5yZXBsYWNlZFdpdGg7CisgICAgICAgICAgaWYgKG0udHlwZSA9PSAiYm9v
a21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ucmVwbGFjZWRXaXRoKSBmb3VuZEJvb2ttYXJr
ID0gbTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJv
bSB8fCAwKSA9PSBwb3MpIHsKICAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwg
KGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuIDogY29sbGFwc2VkLnRvKSAtIHBvcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLmZyb20gIT0gbnVsbCAmJiBjb2xsYXBz
ZWQubWFya2VyLnJlcGxhY2VkV2l0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpOwogICAgICAgICAgIGlmIChj
b2xsYXBzZWQudG8gPT0gbnVsbCkgcmV0dXJuIGNvbGxhcHNlZC5tYXJrZXIuZmluZCgpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChmb3VuZEJvb2ttYXJrICYmICFjb2xsYXBzZWQpIGJ1aWxkQ29s
bGFwc2VkU3BhbihidWlsZGVyLCAwLCBmb3VuZEJvb2ttYXJrKTsKQEAgLTQyODMsMTMgKzQ0MzIs
MTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgaWYgKCFj
b2xsYXBzZWQpIHsKICAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4
dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7CiAgICAgICAgICAgICBidWlsZGVyLmFkZFRv
a2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNwYW5T
dHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyAr
IHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4
dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0aXRsZSk7CiAgICAg
ICAgICAgfQogICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVw
dG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVhazt9CiAgICAgICAgICAgcG9zID0gZW5kOwogICAg
ICAgICAgIHNwYW5TdGFydFN0eWxlID0gIiI7CiAgICAgICAgIH0KLSAgICAgICAgdGV4dCA9IHN0
eWxlc1tpKytdOyBzdHlsZSA9IHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsrXSk7CisgICAgICAgIHRl
eHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpKytdKTsKKyAgICAgICAgc3R5bGUg
PSBzdHlsZVRvQ2xhc3Moc3R5bGVzW2krK10pOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNDMx
Miw3ICs0NDYyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAv
LyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtl
CiAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9z
ZWQgdG8uCiAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQg
PSBbXTsgaSA8IGU7ICsraSkKLSAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBz
cGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgYWRkZWQucHVzaChuZXcgTGlu
ZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgIHVwZGF0ZShs
YXN0TGluZSwgbGFzdExpbmUudGV4dCwgbGFzdFNwYW5zKTsKICAgICAgIGlmIChubGluZXMpIGRv
Yy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMpOwogICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9j
Lmluc2VydChmcm9tLmxpbmUsIGFkZGVkKTsKQEAgLTQzMjEsOCArNDQ3MSw4IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJz
dExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQu
c2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh2
YXIgYWRkZWQgPSBbXSwgaSA9IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCi0g
ICAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1h
dGVIZWlnaHQpKTsKLSAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZShsYXN0VGV4dCArIGZpcnN0
TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOworICAg
ICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRl
SGVpZ2h0KSk7CisgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExp
bmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAg
ICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0
ZXh0WzBdLCBzcGFuc0ZvcigwKSk7CiAgICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwg
YWRkZWQpOwogICAgICAgfQpAQCAtNDMzMyw3ICs0NDgzLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5z
bGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsKICAgICAgIHVwZGF0ZShs
YXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5z
KTsKICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gdGV4dC5sZW5ndGggLSAxLCBhZGRlZCA9IFtd
OyBpIDwgZTsgKytpKQotICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0sIHNwYW5z
Rm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOworICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRl
eHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgaWYgKG5saW5lcyA+
IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSk7CiAgICAgICBkb2MuaW5z
ZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICB9CkBAIC00NDc2LDExICs0NjI2LDEyIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBEb2MpKSByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUpOwogICAgIGlm
IChmaXJzdExpbmUgPT0gbnVsbCkgZmlyc3RMaW5lID0gMDsKIAotICAgIEJyYW5jaENodW5rLmNh
bGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW21ha2VMaW5lKCIiLCBudWxsKV0pXSk7CisgICAgQnJh
bmNoQ2h1bmsuY2FsbCh0aGlzLCBbbmV3IExlYWZDaHVuayhbbmV3IExpbmUoIiIsIG51bGwpXSld
KTsKICAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lOwogICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhp
cy5zY3JvbGxMZWZ0ID0gMDsKICAgICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7CiAgICAgdGhpcy5o
aXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKKyAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IDE7CiAg
ICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKICAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RM
aW5lLCAwKTsKICAgICB0aGlzLnNlbCA9IHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0LCBoZWFkOiBz
dGFydCwgYW5jaG9yOiBzdGFydCwgc2hpZnQ6IGZhbHNlLCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29s
dW1uOiBudWxsfTsKQEAgLTQ0OTIsNiArNDY0Myw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICB9OwogCiAgIERvYy5wcm90b3R5cGUgPSBjcmVhdGVPYmooQnJhbmNoQ2h1
bmsucHJvdG90eXBlLCB7CisgICAgY29uc3RydWN0b3I6IERvYywKICAgICBpdGVyOiBmdW5jdGlv
bihmcm9tLCB0bywgb3ApIHsKICAgICAgIGlmIChvcCkgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5m
aXJzdCwgdG8gLSBmcm9tLCBvcCk7CiAgICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwg
dGhpcy5maXJzdCArIHRoaXMuc2l6ZSwgZnJvbSk7CkBAIC00NTM5LDYgKzQ2OTEsMTEgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rp
b24obGluZSkge2lmIChpc0xpbmUodGhpcywgbGluZSkpIHJldHVybiBnZXRMaW5lKHRoaXMsIGxp
bmUpO30sCiAgICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24obGluZSkge3JldHVybiBsaW5lTm8o
bGluZSk7fSwKIAorICAgIGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDogZnVuY3Rpb24obGluZSkg
eworICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZSh0aGlz
LCBsaW5lKTsKKyAgICAgIHJldHVybiB2aXN1YWxMaW5lKHRoaXMsIGxpbmUpOworICAgIH0sCisK
ICAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNpemU7fSwKICAgICBmaXJz
dExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0O30sCiAgICAgbGFzdExpbmU6IGZ1
bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTt9LApAQCAtNDU4MCwy
MCArNDczNywyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZh
ciBoaXN0ID0gdGhpcy5oaXN0b3J5OwogICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRvbmUubGVu
Z3RoLCByZWRvOiBoaXN0LnVuZG9uZS5sZW5ndGh9OwogICAgIH0sCi0gICAgY2xlYXJIaXN0b3J5
OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCisgICAgY2xlYXJI
aXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSh0aGlzLmhpc3Rv
cnkubWF4R2VuZXJhdGlvbik7fSwKIAogICAgIG1hcmtDbGVhbjogZnVuY3Rpb24oKSB7Ci0gICAg
ICB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVyID0gMDsKKyAgICAgIHRoaXMuY2xlYW5HZW5lcmF0
aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCk7CisgICAgfSwKKyAgICBjaGFuZ2VHZW5lcmF0
aW9uOiBmdW5jdGlvbigpIHsKICAgICAgIHRoaXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3Rv
cnkubGFzdE9yaWdpbiA9IG51bGw7CisgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRp
b247CisgICAgfSwKKyAgICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7CisgICAgICByZXR1cm4g
dGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0gKGdlbiB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbik7
CiAgICAgfSwKLSAgICBpc0NsZWFuOiBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMuaGlzdG9yeS5k
aXJ0eUNvdW50ZXIgPT0gMDt9LAogCiAgICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7CiAgICAg
ICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLAogICAg
ICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9
OwogICAgIH0sCiAgICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsKLSAgICAgIHZh
ciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKKyAgICAgIHZhciBoaXN0ID0g
dGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pOwog
ICAgICAgaGlzdC5kb25lID0gaGlzdERhdGEuZG9uZS5zbGljZSgwKTsKICAgICAgIGhpc3QudW5k
b25lID0gaGlzdERhdGEudW5kb25lLnNsaWNlKDApOwogICAgIH0sCkBAIC00NzA0LDYgKzQ4NjYs
OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpO307CiAgICAg
fSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7CiAKKyAgZXZlbnRNaXhpbihEb2MpOworCiAgIGZ1bmN0
aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewogICAgIGZ1bmN0aW9uIHBy
b3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHsKICAgICAgIGlmIChkb2MubGlua2VkKSBm
b3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kpIHsKQEAgLTQ4MjMsNyAr
NDk4Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIEhJU1RP
UlkKIAotICBmdW5jdGlvbiBtYWtlSGlzdG9yeSgpIHsKKyAgZnVuY3Rpb24gbWFrZUhpc3Rvcnko
c3RhcnRHZW4pIHsKICAgICByZXR1cm4gewogICAgICAgLy8gQXJyYXlzIG9mIGhpc3RvcnkgZXZl
bnRzLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhbiBldmVudCB0bwogICAgICAgLy8gZG9uZSBhbmQg
Y2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZSB0bwpAQCAtNDgzMyw3
ICs0OTk3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAvLyBl
dmVudAogICAgICAgbGFzdFRpbWU6IDAsIGxhc3RPcDogbnVsbCwgbGFzdE9yaWdpbjogbnVsbCwK
ICAgICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKLSAgICAgIGRpcnR5Q291bnRl
cjogMAorICAgICAgZ2VuZXJhdGlvbjogc3RhcnRHZW4gfHwgMSwgbWF4R2VuZXJhdGlvbjogc3Rh
cnRHZW4gfHwgMQogICAgIH07CiAgIH0KIApAQCAtNDg0Nyw3ICs1MDExLDggQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBoaXN0b3J5Q2hhbmdl
RnJvbUNoYW5nZShkb2MsIGNoYW5nZSkgewotICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNo
YW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBj
aGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07CisgICAgdmFyIGZyb20gPSB7IGxpbmU6IGNoYW5nZS5m
cm9tLmxpbmUsIGNoOiBjaGFuZ2UuZnJvbS5jaCB9OworICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zy
b206IGZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNo
YW5nZS5mcm9tLCBjaGFuZ2UudG8pfTsKICAgICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENo
YW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTsKICAgICBsaW5rZWRE
b2NzKGRvYywgZnVuY3Rpb24oZG9jKSB7YXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2Us
IGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7fSwgdHJ1ZSk7CiAgICAgcmV0
dXJuIGhpc3RDaGFuZ2U7CkBAIC00ODYxLDcgKzUwMjYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBpZiAoY3VyICYmCiAgICAgICAgIChoaXN0Lmxhc3RPcCA9PSBv
cElkIHx8CiAgICAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFu
Z2Uub3JpZ2luICYmCi0gICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIrIiAm
JiBoaXN0Lmxhc3RUaW1lID4gdGltZSAtIDYwMCkgfHwgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkg
PT0gIioiKSkpIHsKKyAgICAgICAgICgoY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIisiICYm
IGRvYy5jbSAmJiBoaXN0Lmxhc3RUaW1lID4gdGltZSAtIGRvYy5jbS5vcHRpb25zLmhpc3RvcnlF
dmVudERlbGF5KSB8fAorICAgICAgICAgIGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIqIikp
KSB7CiAgICAgICAvLyBNZXJnZSB0aGlzIGNoYW5nZSBpbnRvIHRoZSBsYXN0IGV2ZW50CiAgICAg
ICB2YXIgbGFzdCA9IGxzdChjdXIuY2hhbmdlcyk7CiAgICAgICBpZiAocG9zRXEoY2hhbmdlLmZy
b20sIGNoYW5nZS50bykgJiYgcG9zRXEoY2hhbmdlLmZyb20sIGxhc3QudG8pKSB7CkBAIC00ODc2
LDE3ICs1MDQyLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0g
ZWxzZSB7CiAgICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuCiAg
ICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdl
KV0sCisgICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9uLAogICAgICAgICAg
ICAgIGFuY2hvckJlZm9yZTogZG9jLnNlbC5hbmNob3IsIGhlYWRCZWZvcmU6IGRvYy5zZWwuaGVh
ZCwKICAgICAgICAgICAgICBhbmNob3JBZnRlcjogc2VsQWZ0ZXIuYW5jaG9yLCBoZWFkQWZ0ZXI6
IHNlbEFmdGVyLmhlYWR9OwogICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTsKKyAgICAgIGhpc3Qu
Z2VuZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9uOwogICAgICAgd2hpbGUgKGhpc3QuZG9u
ZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkKICAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7Ci0g
ICAgICBpZiAoaGlzdC5kaXJ0eUNvdW50ZXIgPCAwKQotICAgICAgICAvLyBUaGUgdXNlciBoYXMg
bWFkZSBhIGNoYW5nZSBhZnRlciB1bmRvaW5nIHBhc3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuCi0g
ICAgICAgIC8vIFdlIGNhbiBuZXZlciBnZXQgYmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRp
bCBtYXJrQ2xlYW4oKSBpcyBjYWxsZWQuCi0gICAgICAgIGhpc3QuZGlydHlDb3VudGVyID0gTmFO
OwotICAgICAgZWxzZQotICAgICAgICBoaXN0LmRpcnR5Q291bnRlcisrOwogICAgIH0KICAgICBo
aXN0Lmxhc3RUaW1lID0gdGltZTsKICAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7CkBAIC01MDAxLDYg
KzUxNjMsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoZS5z
dG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgZWxzZSBlLmNhbmNlbEJ1
YmJsZSA9IHRydWU7CiAgIH0KKyAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKKyAg
ICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQg
OiBlLnJldHVyblZhbHVlID09IGZhbHNlOworICB9CiAgIGZ1bmN0aW9uIGVfc3RvcChlKSB7ZV9w
cmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFnYXRpb24oZSk7fQogICBDb2RlTWlycm9yLmVf
c3RvcCA9IGVfc3RvcDsKICAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50
RGVmYXVsdDsKQEAgLTUwNjcsNiArNTIzMiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MucHVzaChibmQoYXJyW2ldKSk7CiAgIH0K
IAorICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSkgeworICAgIHNpZ25hbChjbSwgZS50
eXBlLCBjbSwgZSk7CisgICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsKKyAgfQorCiAg
IGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkgewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAg
ICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwpAQCAtNTA4MSw2ICs1MjUxLDExIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIENvZGVNaXJyb3Iub24gPSBv
bjsgQ29kZU1pcnJvci5vZmYgPSBvZmY7IENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsOwogCisg
IGZ1bmN0aW9uIGV2ZW50TWl4aW4oY3RvcikgeworICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVu
Y3Rpb24odHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO307CisgICAgY3Rvci5wcm90b3R5cGUu
b2ZmID0gZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9OworICB9CisKICAg
Ly8gTUlTQyBVVElMSVRJRVMKIAogICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9s
bGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgpAQCAtNTEyMSw3ICs1Mjk2LDExIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpb3MpIHsgLy8gTW9iaWxl
IFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCiAg
ICAgICBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0g
bm9kZS52YWx1ZS5sZW5ndGg7Ci0gICAgfSBlbHNlIG5vZGUuc2VsZWN0KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnMKKyAgICAgIHRyeSB7
IG5vZGUuc2VsZWN0KCk7IH0KKyAgICAgIGNhdGNoKF9lKSB7fQorICAgIH0KICAgfQogCiAgIGZ1
bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7CkBAIC01MTU1LDcgKzUzMzQsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oKXty
ZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTt9OwogICB9CiAKLSAgdmFyIG5vbkFTQ0lJU2luZ2xl
Q2FzZVdvcmRDaGFyID0gL1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVc
dTRlMDAtXHU5ZmNjXS87CisgIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUz
MDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1c
dWQ3YWZdLzsKICAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCkgewogICAgIHJldHVybiAvXHcvLnRl
c3QoY2gpIHx8IGNoID4gIlx4ODAiICYmCiAgICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50
b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKTsKQEAg
LTUyMTYsMTMgKzUzOTUsMjYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IC8vIHdvcmQgd3JhcHBpbmcgYmV0d2VlbiBjZXJ0YWluIGNoYXJhY3RlcnMgKm9ubHkqIGlmIGEg
bmV3IGlubGluZQogICAvLyBlbGVtZW50IGlzIHN0YXJ0ZWQgYmV0d2VlbiB0aGVtLiBUaGlzIG1h
a2VzIGl0IGhhcmQgdG8gcmVsaWFibHkKICAgLy8gbWVhc3VyZSB0aGUgcG9zaXRpb24gb2YgdGhp
bmdzLCBzaW5jZSB0aGF0IHJlcXVpcmVzIGluc2VydGluZyBhbgotICAvLyBleHRyYSBzcGFuLiBU
aGlzIHRlcnJpYmx5IGZyYWdpbGUgc2V0IG9mIHJlZ2V4cHMgbWF0Y2hlcyB0aGUKKyAgLy8gZXh0
cmEgc3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiB0ZXN0cyBtYXRjaGVzIHRoZQog
ICAvLyBjaGFyYWN0ZXIgY29tYmluYXRpb25zIHRoYXQgc3VmZmVyIGZyb20gdGhpcyBwaGVub21l
bm9uIG9uIHRoZQogICAvLyB2YXJpb3VzIGJyb3dzZXJzLgotICB2YXIgc3BhbkFmZmVjdHNXcmFw
cGluZyA9IC9eJC87IC8vIFdvbid0IG1hdGNoIGFueSB0d28tY2hhcmFjdGVyIHN0cmluZwotICBp
ZiAoZ2Vja28pIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvJCcvOwotICBlbHNlIGlmIChzYWZhcmkg
JiYgIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkg
c3BhbkFmZmVjdHNXcmFwcGluZyA9IC9cLVteIFwtP118XD9bXiAhJ1wiXCksLlwtXC86O1w/XF1c
fV0vOwotICBlbHNlIGlmICh3ZWJraXQpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvW34hIyUmKik9
K31cXXxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5dfFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF0v
OworICBmdW5jdGlvbiBzcGFuQWZmZWN0c1dyYXBwaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
aWYgKGdlY2tvKSAvLyBPbmx5IGZvciAiJCciCisgICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1
bmN0aW9uKHN0ciwgaSkgeworICAgICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSAz
NiAmJiBzdHIuY2hhckNvZGVBdChpKSA9PSAzOTsKKyAgICB9OworICBlbHNlIGlmIChzYWZhcmkg
JiYgIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkK
KyAgICBzcGFuQWZmZWN0c1dyYXBwaW5nID0gZnVuY3Rpb24oc3RyLCBpKSB7CisgICAgICByZXR1
cm4gL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3Qoc3RyLnNsaWNl
KGkgLSAxLCBpICsgMSkpOworICAgIH07CisgIGVsc2UgaWYgKHdlYmtpdCAmJiAhL0Nocm9tZVwv
KD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCisgICAg
c3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgeworICAgICAgaWYgKGkgPiAx
ICYmIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSA0NSkgeworICAgICAgICBpZiAoL1x3Ly50ZXN0
KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW15cLT9cLl0vLnRlc3Qoc3RyLmNoYXJBdChpKSkpIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoaSA+IDIgJiYgL1tcZFwuLF0vLnRlc3Qoc3RyLmNoYXJB
dChpIC0gMikpICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gZmFsc2U7
CisgICAgICB9CisgICAgICByZXR1cm4gL1t+ISMlJiopPSt9XF18XCJcLj4sOjtdWyh7WzxdfC1b
XlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZb
XHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKKyAg
ICB9OwogCiAgIHZhciBrbm93blNjcm9sbGJhcldpZHRoOwogICBmdW5jdGlvbiBzY3JvbGxiYXJX
aWR0aChtZWFzdXJlKSB7CkBAIC01MzA3LDExICs1NDk5LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGl0ZXJhdGVCaWRpU2VjdGlvbnMob3JkZXIs
IGZyb20sIHRvLCBmKSB7CiAgICAgaWYgKCFvcmRlcikgcmV0dXJuIGYoZnJvbSwgdG8sICJsdHIi
KTsKKyAgICB2YXIgZm91bmQgPSBmYWxzZTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVy
Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOwotICAgICAgaWYgKHBh
cnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9
PSBmcm9tKQorICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZy
b20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKSB7CiAgICAgICAgIGYoTWF0aC5tYXgocGFydC5m
cm9tLCBmcm9tKSwgTWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyAicnRs
IiA6ICJsdHIiKTsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgfQogICAgIH0KKyAgICBp
ZiAoIWZvdW5kKSBmKGZyb20sIHRvLCAibHRyIik7CiAgIH0KIAogICBmdW5jdGlvbiBiaWRpTGVm
dChwYXJ0KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH0K
QEAgLTUzNDEsNiArNTUzNyw0MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7CiAgIH0KIAorICBmdW5jdGlvbiBjb21wYXJlQmlk
aUxldmVsKG9yZGVyLCBhLCBiKSB7CisgICAgdmFyIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsK
KyAgICBpZiAoYSA9PSBsaW5lZGlyKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYiA9PSBsaW5lZGly
KSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEgPCBiOworICB9CisgIHZhciBiaWRpT3RoZXI7
CisgIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgeworICAgIGZvciAodmFyIGkg
PSAwLCBmb3VuZDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgY3VyID0gb3Jk
ZXJbaV07CisgICAgICBpZiAoY3VyLmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSB7IGJpZGlP
dGhlciA9IG51bGw7IHJldHVybiBpOyB9CisgICAgICBpZiAoY3VyLmZyb20gPT0gcG9zIHx8IGN1
ci50byA9PSBwb3MpIHsKKyAgICAgICAgaWYgKGZvdW5kID09IG51bGwpIHsKKyAgICAgICAgICBm
b3VuZCA9IGk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZlbChvcmRlciwgY3Vy
LmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7CisgICAgICAgICAgYmlkaU90aGVyID0gZm91
bmQ7CisgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYmlk
aU90aGVyID0gaTsKKyAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisgICAgYmlkaU90aGVyID0gbnVsbDsKKyAgICByZXR1cm4gZm91bmQ7CisgIH0KKwor
ICBmdW5jdGlvbiBtb3ZlSW5MaW5lKGxpbmUsIHBvcywgZGlyLCBieVVuaXQpIHsKKyAgICBpZiAo
IWJ5VW5pdCkgcmV0dXJuIHBvcyArIGRpcjsKKyAgICBkbyBwb3MgKz0gZGlyOworICAgIHdoaWxl
IChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQocG9zKSkp
OworICAgIHJldHVybiBwb3M7CisgIH0KKwogICAvLyBUaGlzIGlzIHNvbWV3aGF0IGludm9sdmVk
LiBJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbW92ZQogICAvLyAndmlzdWFsbHknIHRocm91Z2gg
YmktZGlyZWN0aW9uYWwgdGV4dCAtLSBpLmUuLCBwcmVzc2luZyBsZWZ0CiAgIC8vIHNob3VsZCBt
YWtlIHRoZSBjdXJzb3IgZ28gbGVmdCwgZXZlbiB3aGVuIGluIFJUTCB0ZXh0LiBUaGUKQEAgLTUz
NTAsMzcgKzU1ODAsMjQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1
bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKICAgICB2YXIg
YmlkaSA9IGdldE9yZGVyKGxpbmUpOwogICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVMb2dpY2Fs
bHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKLSAgICB2YXIgbW92ZU9uZVVuaXQgPSBieVVu
aXQgPyBmdW5jdGlvbihwb3MsIGRpcikgewotICAgICAgZG8gcG9zICs9IGRpcjsKLSAgICAgIHdo
aWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQocG9z
KSkpOwotICAgICAgcmV0dXJuIHBvczsKLSAgICB9IDogZnVuY3Rpb24ocG9zLCBkaXIpIHsgcmV0
dXJuIHBvcyArIGRpcjsgfTsKLSAgICB2YXIgbGluZWRpciA9IGJpZGlbMF0ubGV2ZWw7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBiaWRpLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgcGFydCA9
IGJpZGlbaV0sIHN0aWNreSA9IHBhcnQubGV2ZWwgJSAyID09IGxpbmVkaXI7Ci0gICAgICBpZiAo
KHBhcnQuZnJvbSA8IHN0YXJ0ICYmIHBhcnQudG8gPiBzdGFydCkgfHwKLSAgICAgICAgICAoc3Rp
Y2t5ICYmIChwYXJ0LmZyb20gPT0gc3RhcnQgfHwgcGFydC50byA9PSBzdGFydCkpKSBicmVhazsK
LSAgICB9Ci0gICAgdmFyIHRhcmdldCA9IG1vdmVPbmVVbml0KHN0YXJ0LCBwYXJ0LmxldmVsICUg
MiA/IC1kaXIgOiBkaXIpOwotCi0gICAgd2hpbGUgKHRhcmdldCAhPSBudWxsKSB7Ci0gICAgICBp
ZiAocGFydC5sZXZlbCAlIDIgPT0gbGluZWRpcikgewotICAgICAgICBpZiAodGFyZ2V0IDwgcGFy
dC5mcm9tIHx8IHRhcmdldCA+IHBhcnQudG8pIHsKLSAgICAgICAgICBwYXJ0ID0gYmlkaVtpICs9
IGRpcl07Ci0gICAgICAgICAgdGFyZ2V0ID0gcGFydCAmJiAoZGlyID4gMCA9PSBwYXJ0LmxldmVs
ICUgMiA/IG1vdmVPbmVVbml0KHBhcnQudG8sIC0xKSA6IG1vdmVPbmVVbml0KHBhcnQuZnJvbSwg
MSkpOwotICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgdmFyIHBvcyA9IGdldEJpZGlQYXJ0QXQo
YmlkaSwgc3RhcnQpLCBwYXJ0ID0gYmlkaVtwb3NdOworICAgIHZhciB0YXJnZXQgPSBtb3ZlSW5M
aW5lKGxpbmUsIHN0YXJ0LCBwYXJ0LmxldmVsICUgMiA/IC1kaXIgOiBkaXIsIGJ5VW5pdCk7CisK
KyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAodGFyZ2V0ID4gcGFydC5mcm9tICYmIHRhcmdldCA8
IHBhcnQudG8pIHJldHVybiB0YXJnZXQ7CisgICAgICBpZiAodGFyZ2V0ID09IHBhcnQuZnJvbSB8
fCB0YXJnZXQgPT0gcGFydC50bykgeworICAgICAgICBpZiAoZ2V0QmlkaVBhcnRBdChiaWRpLCB0
YXJnZXQpID09IHBvcykgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgcGFydCA9IGJpZGlbcG9zICs9
IGRpcl07CisgICAgICAgIHJldHVybiAoZGlyID4gMCkgPT0gcGFydC5sZXZlbCAlIDIgPyBwYXJ0
LnRvIDogcGFydC5mcm9tOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBi
aWRpTGVmdChwYXJ0KSkgewotICAgICAgICAgIHBhcnQgPSBiaWRpWy0taV07Ci0gICAgICAgICAg
dGFyZ2V0ID0gcGFydCAmJiBiaWRpUmlnaHQocGFydCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IGJpZGlSaWdodChwYXJ0KSkgewotICAgICAgICAgIHBhcnQgPSBiaWRpWysraV07Ci0g
ICAgICAgICAgdGFyZ2V0ID0gcGFydCAmJiBiaWRpTGVmdChwYXJ0KTsKLSAgICAgICAgfSBlbHNl
IGJyZWFrOworICAgICAgICBwYXJ0ID0gYmlkaVtwb3MgKz0gZGlyXTsKKyAgICAgICAgaWYgKCFw
YXJ0KSByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUg
MikKKyAgICAgICAgICB0YXJnZXQgPSBtb3ZlSW5MaW5lKGxpbmUsIHBhcnQudG8sIC0xLCBieVVu
aXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBw
YXJ0LmZyb20sIDEsIGJ5VW5pdCk7CiAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIHRhcmdl
dCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7CiAgIH0K
IAogICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewpA
QCAtNTU1Miw3ICs1NzY5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjExICsiOworICBDb2Rl
TWlycm9yLnZlcnNpb24gPSAiMy4xNC4xIjsKIAogICByZXR1cm4gQ29kZU1pcnJvcjsKIH0pKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Y3NzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5q
cwppbmRleCAxZWY3MmI1MTdkZTQ1OTNlNDcwOWQwMjRmZTFhM2U3M2Y5ZTJlYTg0Li5iNTJlNzg3
YTcwYWIwNzY4Y2U4YWEzM2RjZjA0ZWExM2QxMmNkNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jc3MuanMKQEAgLTEwMyw3ICsxMDMsOCBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgICByZXR1
cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgIGJhc2VJbmRlbnQ6IGJhc2Ug
fHwgMCwKLSAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKKyAgICAgICAgICAgICAgc3RhY2s6IFtd
LAorICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGx9OwogICAgIH0sCiAKICAgICB0b2tlbjog
ZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewpAQCAtMTYzLDI4ICsxNjQsMjkgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsK
ICAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgIGlmICh0eXBlID09ICJ2
YXJpYWJsZS1kZWZpbml0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIpOwot
ICAgICAgICByZXR1cm4gInZhcmlhYmxlLTIiOworICAgICAgICByZXR1cm4gc3RhdGUubGFzdFRv
a2VuID0gInZhcmlhYmxlLTIiOwogICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PSAicHJvcGVydHki
KSB7Ci0gICAgICAgIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIil7Ci0gICAgICAgICAg
aWYgKHZhbHVlS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgdmFyIHdvcmQg
PSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGlmIChjb250ZXh0ID09
ICJwcm9wZXJ0eVZhbHVlIikgeworICAgICAgICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blBy
b3BlcnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJzdHJpbmctMiI7Ci0gICAgICAg
ICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAg
ICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7CiAgICAg
ICAgICAgICBzdHlsZSA9ICJrZXl3b3JkIjsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KGNvbnRleHQgPT0gInJ1bGUiKSB7Ci0gICAgICAgICAgaWYgKCFwcm9wZXJ0eUtleXdvcmRzW3N0
cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgaWYgKCFwcm9wZXJ0eUtleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSArPSAiIGVycm9yIjsKICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiYmxvY2siKSB7CiAgICAgICAg
ICAgLy8gaWYgYSB2YWx1ZSBpcyBwcmVzZW50IGluIGJvdGggcHJvcGVydHksIHZhbHVlLCBvciBj
b2xvciwgdGhlIG9yZGVyCiAgICAgICAgICAgLy8gb2YgcHJlZmVyZW5jZSBpcyBwcm9wZXJ0eSAt
PiBjb2xvciAtPiB2YWx1ZQotICAgICAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5j
dXJyZW50KCldKSB7CisgICAgICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVy
dHkod29yZCkpIHsKICAgICAgICAgICAgIHN0eWxlID0gInByb3BlcnR5IjsKLSAgICAgICAgICB9
IGVsc2UgaWYgKGNvbG9yS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICB9
IGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAg
ICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jk
c1tzdHJlYW0uY3VycmVudCgpXSkgeworICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jk
cy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAic3RyaW5nLTIi
OwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJ0YWciOwpAQCAtMTk0
LDQyICsxOTYsNDIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAi
QG1lZGlhIikgewogICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFtLmN1cnJlbnQoKV0p
IHsKICAgICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3duIGF0dHJpYnV0ZQot
ICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC9pLnRlc3Qoc3RyZWFtLmN1cnJlbnQo
KSkpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8bm90KSQvLnRlc3Qod29yZCkpIHsK
ICAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAoc3Ry
ZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7CisgICAgICAgICAgfSBlbHNl
IGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJh
bmQiIGlzIG9ubHkgYWxsb3dlZCBpbiBAbWVkaWFUeXBlCi0gICAgICAgICAgfSBlbHNlIGlmIChh
dE1lZGlhRmVhdHVyZXNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICB9IGVsc2UgaWYg
KGF0TWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewogICAgICAgICAgICAgc3R5
bGUgPSAiZXJyb3IiOyAvLyBLbm93biBwcm9wZXJ0eSwgc2hvdWxkIGJlIGluIEBtZWRpYVR5cGUo
CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFVua25vd24sIGV4cGVjdGluZyBr
ZXl3b3JkIG9yIGF0dHJpYnV0ZSwgYXNzdW1pbmcgYXR0cmlidXRlCiAgICAgICAgICAgICBzdHls
ZSA9ICJhdHRyaWJ1dGUgZXJyb3IiOwogICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChj
b250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3Ry
ZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3Bl
cnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgICAg
IH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7Cisg
ICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHlsZSA9
ICJvcGVyYXRvciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVzdChz
dHJlYW0uY3VycmVudCgpKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC8u
dGVzdCh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFsbG93
ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwogICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSwgYnV0IGV4cGVjdGluZyBw
cm9wZXJ0eSAocHJlY2VkZWQKICAgICAgICAgICAgIC8vIGJ5ICJhbmQiKS4gU2hvdWxkIGJlIGlu
IHBhcmVudGhlc2VzCiAgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7CiAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIikgewotICAgICAgICAg
IGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgaWYg
KHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAgICAgIC8v
IGRvIG5vdGhpbmcsIHJlbWFpbnMgInByb3BlcnR5IgotICAgICAgICAgIH0gZWxzZSBpZiAoYXRN
ZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChhdE1l
ZGlhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAgICAgIHN0eWxlID0gImVy
cm9yIjsgLy8gS25vd24gcHJvcGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwotICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7
CisgICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHls
ZSA9ICJvcGVyYXRvciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVz
dChzdHJlYW0uY3VycmVudCgpKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3Qp
JC8udGVzdCh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFs
bG93ZWQgaW4gQG1lZGlhCiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0eWxlICs9
ICIgZXJyb3IiOwogICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJA
aW1wb3J0IikgeworICAgICAgICAgIHN0eWxlID0gInRhZyI7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwogICAgICAgICB9CkBAIC0yNjYsMTQgKzI2OCwxNiBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRp
b24iKSBzdGF0ZS5zdGFjay5wdXNoKCJpbnRlcnBvbGF0aW9uIik7CiAgICAgICBlbHNlIGlmICh0
eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKKyAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gIkBpbXBvcnQiKSBzdGF0ZS5zdGFjay5wdXNoKCJAaW1wb3J0Iik7CiAgICAg
ICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWEiICYmIC9cYihrZXl3b3JkfGF0dHJpYnV0ZSlc
Yi8udGVzdChzdHlsZSkpCiAgICAgICAgIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYVR5cGUiKTsK
ICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiICYmIHN0cmVhbS5jdXJyZW50
KCkgPT0gIiwiKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0g
IkBtZWRpYVR5cGUiICYmIHR5cGUgPT0gIigiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWFUeXBl
KCIpOwogICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSgiICYmIHR5cGUgPT0g
IikiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgIGVsc2UgaWYgKChjb250ZXh0ID09ICJydWxl
IiB8fCBjb250ZXh0ID09ICJibG9jayIpICYmIHR5cGUgPT0gIjoiKSBzdGF0ZS5zdGFjay5wdXNo
KCJwcm9wZXJ0eVZhbHVlIik7CisgICAgICBlbHNlIGlmICh0eXBlID09ICI6IiAmJiBzdGF0ZS5s
YXN0VG9rZW4gPT0gInByb3BlcnR5Iikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIp
OwogICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIgJiYgdHlwZSA9PSAi
OyIpIHN0YXRlLnN0YWNrLnBvcCgpOwotICAgICAgcmV0dXJuIHN0eWxlOworICAgICAgZWxzZSBp
ZiAoY29udGV4dCA9PSAiQGltcG9ydCIgJiYgdHlwZSA9PSAiOyIpIHN0YXRlLnN0YWNrLnBvcCgp
OworICAgICAgcmV0dXJuIHN0YXRlLmxhc3RUb2tlbiA9IHN0eWxlOwogICAgIH0sCiAKICAgICBp
bmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKQEAgLTI4Myw3ICsyODcsMTAgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0
OwogICAgIH0sCiAKLSAgICBlbGVjdHJpY0NoYXJzOiAifSIKKyAgICBlbGVjdHJpY0NoYXJzOiAi
fSIsCisgICAgYmxvY2tDb21tZW50U3RhcnQ6ICIvKiIsCisgICAgYmxvY2tDb21tZW50RW5kOiAi
Ki8iLAorICAgIGZvbGQ6ICJicmFjZSIKICAgfTsKIH0pOwogCkBAIC0zODcsMTIgKzM5NCw0NiBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICAidmVydGljYWwtYWxpZ24iLCAidmlzaWJpbGl0eSIsICJ2b2ljZS1i
YWxhbmNlIiwgInZvaWNlLWR1cmF0aW9uIiwKICAgICAidm9pY2UtZmFtaWx5IiwgInZvaWNlLXBp
dGNoIiwgInZvaWNlLXJhbmdlIiwgInZvaWNlLXJhdGUiLCAidm9pY2Utc3RyZXNzIiwKICAgICAi
dm9pY2Utdm9sdW1lIiwgInZvbHVtZSIsICJ3aGl0ZS1zcGFjZSIsICJ3aWRvd3MiLCAid2lkdGgi
LCAid29yZC1icmVhayIsCi0gICAgIndvcmQtc3BhY2luZyIsICJ3b3JkLXdyYXAiLCAiei1pbmRl
eCIKKyAgICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwKKyAgICAvLyBT
Vkctc3BlY2lmaWMKKyAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIsICJtYXNrIiwgImVuYWJs
ZS1iYWNrZ3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCisgICAgImZsb29kLW9wYWNp
dHkiLCAibGlnaHRpbmctY29sb3IiLCAic3RvcC1jb2xvciIsICJzdG9wLW9wYWNpdHkiLCAicG9p
bnRlci1ldmVudHMiLAorICAgICJjb2xvci1pbnRlcnBvbGF0aW9uIiwgImNvbG9yLWludGVycG9s
YXRpb24tZmlsdGVycyIsICJjb2xvci1wcm9maWxlIiwKKyAgICAiY29sb3ItcmVuZGVyaW5nIiwg
ImZpbGwiLCAiZmlsbC1vcGFjaXR5IiwgImZpbGwtcnVsZSIsICJpbWFnZS1yZW5kZXJpbmciLAor
ICAgICJtYXJrZXIiLCAibWFya2VyLWVuZCIsICJtYXJrZXItbWlkIiwgIm1hcmtlci1zdGFydCIs
ICJzaGFwZS1yZW5kZXJpbmciLCAic3Ryb2tlIiwKKyAgICAic3Ryb2tlLWRhc2hhcnJheSIsICJz
dHJva2UtZGFzaG9mZnNldCIsICJzdHJva2UtbGluZWNhcCIsICJzdHJva2UtbGluZWpvaW4iLAor
ICAgICJzdHJva2UtbWl0ZXJsaW1pdCIsICJzdHJva2Utb3BhY2l0eSIsICJzdHJva2Utd2lkdGgi
LCAidGV4dC1yZW5kZXJpbmciLAorICAgICJiYXNlbGluZS1zaGlmdCIsICJkb21pbmFudC1iYXNl
bGluZSIsICJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKKyAgICAiZ2x5cGgtb3JpZW50
YXRpb24tdmVydGljYWwiLCAia2VybmluZyIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUi
CiAgIF0pOwogCiAgIHZhciBjb2xvcktleXdvcmRzID0ga2V5U2V0KFsKLSAgICAiYmxhY2siLCAi
c2lsdmVyIiwgImdyYXkiLCAid2hpdGUiLCAibWFyb29uIiwgInJlZCIsICJwdXJwbGUiLCAiZnVj
aHNpYSIsCi0gICAgImdyZWVuIiwgImxpbWUiLCAib2xpdmUiLCAieWVsbG93IiwgIm5hdnkiLCAi
Ymx1ZSIsICJ0ZWFsIiwgImFxdWEiCisgICAgImFsaWNlYmx1ZSIsICJhbnRpcXVld2hpdGUiLCAi
YXF1YSIsICJhcXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKKyAgICAiYmlzcXVlIiwgImJs
YWNrIiwgImJsYW5jaGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJicm93biIsCisg
ICAgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9jb2xhdGUiLCAi
Y29yYWwiLCAiY29ybmZsb3dlcmJsdWUiLAorICAgICJjb3Juc2lsayIsICJjcmltc29uIiwgImN5
YW4iLCAiZGFya2JsdWUiLCAiZGFya2N5YW4iLCAiZGFya2dvbGRlbnJvZCIsCisgICAgImRhcmtn
cmF5IiwgImRhcmtncmVlbiIsICJkYXJra2hha2kiLCAiZGFya21hZ2VudGEiLCAiZGFya29saXZl
Z3JlZW4iLAorICAgICJkYXJrb3JhbmdlIiwgImRhcmtvcmNoaWQiLCAiZGFya3JlZCIsICJkYXJr
c2FsbW9uIiwgImRhcmtzZWFncmVlbiIsCisgICAgImRhcmtzbGF0ZWJsdWUiLCAiZGFya3NsYXRl
Z3JheSIsICJkYXJrdHVycXVvaXNlIiwgImRhcmt2aW9sZXQiLAorICAgICJkZWVwcGluayIsICJk
ZWVwc2t5Ymx1ZSIsICJkaW1ncmF5IiwgImRvZGdlcmJsdWUiLCAiZmlyZWJyaWNrIiwKKyAgICAi
ZmxvcmFsd2hpdGUiLCAiZm9yZXN0Z3JlZW4iLCAiZnVjaHNpYSIsICJnYWluc2Jvcm8iLCAiZ2hv
c3R3aGl0ZSIsCisgICAgImdvbGQiLCAiZ29sZGVucm9kIiwgImdyYXkiLCAiZ3JlZW4iLCAiZ3Jl
ZW55ZWxsb3ciLCAiaG9uZXlkZXciLAorICAgICJob3RwaW5rIiwgImluZGlhbnJlZCIsICJpbmRp
Z28iLCAiaXZvcnkiLCAia2hha2kiLCAibGF2ZW5kZXIiLAorICAgICJsYXZlbmRlcmJsdXNoIiwg
Imxhd25ncmVlbiIsICJsZW1vbmNoaWZmb24iLCAibGlnaHRibHVlIiwgImxpZ2h0Y29yYWwiLAor
ICAgICJsaWdodGN5YW4iLCAibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCAibGlnaHRncmF5IiwgImxp
Z2h0Z3JlZW4iLCAibGlnaHRwaW5rIiwKKyAgICAibGlnaHRzYWxtb24iLCAibGlnaHRzZWFncmVl
biIsICJsaWdodHNreWJsdWUiLCAibGlnaHRzbGF0ZWdyYXkiLAorICAgICJsaWdodHN0ZWVsYmx1
ZSIsICJsaWdodHllbGxvdyIsICJsaW1lIiwgImxpbWVncmVlbiIsICJsaW5lbiIsICJtYWdlbnRh
IiwKKyAgICAibWFyb29uIiwgIm1lZGl1bWFxdWFtYXJpbmUiLCAibWVkaXVtYmx1ZSIsICJtZWRp
dW1vcmNoaWQiLCAibWVkaXVtcHVycGxlIiwKKyAgICAibWVkaXVtc2VhZ3JlZW4iLCAibWVkaXVt
c2xhdGVibHVlIiwgIm1lZGl1bXNwcmluZ2dyZWVuIiwgIm1lZGl1bXR1cnF1b2lzZSIsCisgICAg
Im1lZGl1bXZpb2xldHJlZCIsICJtaWRuaWdodGJsdWUiLCAibWludGNyZWFtIiwgIm1pc3R5cm9z
ZSIsICJtb2NjYXNpbiIsCisgICAgIm5hdmFqb3doaXRlIiwgIm5hdnkiLCAib2xkbGFjZSIsICJv
bGl2ZSIsICJvbGl2ZWRyYWIiLCAib3JhbmdlIiwgIm9yYW5nZXJlZCIsCisgICAgIm9yY2hpZCIs
ICJwYWxlZ29sZGVucm9kIiwgInBhbGVncmVlbiIsICJwYWxldHVycXVvaXNlIiwgInBhbGV2aW9s
ZXRyZWQiLAorICAgICJwYXBheWF3aGlwIiwgInBlYWNocHVmZiIsICJwZXJ1IiwgInBpbmsiLCAi
cGx1bSIsICJwb3dkZXJibHVlIiwKKyAgICAicHVycGxlIiwgInJlZCIsICJyb3N5YnJvd24iLCAi
cm95YWxibHVlIiwgInNhZGRsZWJyb3duIiwgInNhbG1vbiIsCisgICAgInNhbmR5YnJvd24iLCAi
c2VhZ3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwKKyAg
ICAic2xhdGVibHVlIiwgInNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwgInN0ZWVs
Ymx1ZSIsICJ0YW4iLAorICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1cnF1b2lz
ZSIsICJ2aW9sZXQiLCAid2hlYXQiLCAid2hpdGUiLAorICAgICJ3aGl0ZXNtb2tlIiwgInllbGxv
dyIsICJ5ZWxsb3dncmVlbiIKICAgXSk7CiAKICAgdmFyIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQo
WwpAQCAtNDc1LDcgKzUxNiw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzLWJhc2UiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJ1cHBlci1hbHBoYSIsICJ1cHBl
ci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVjaW1hbCIsCiAgICAgInVw
cGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1cHBlci1yb21hbiIsICJ1cHBlcmNhc2Ui
LCAidXJkdSIsICJ1cmwiLAogICAgICJ2ZXJ0aWNhbCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2li
bGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJsZVBhaW50ZWQiLAotICAgICJ2aXNpYmxlU3Ryb2tl
IiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2hpdGUiLCAid2lkZXIi
LAorICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndh
dmUiLCAid2lkZXIiLAogICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIs
ICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKICAgICAieHgtbGFyZ2UiLCAieHgtc21hbGwi
CiAgIF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVBy
aW50aW5nL2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvamF2YXNjcmlwdC5qcwppbmRleCAyMjlmYjJkYzBhNjdlZDUyMzkwYmY4ZDczOTU5
NDhlOTJiMzZlMzYwLi4zZDA0NjAzYzI4NWZlZTVjYTMzYzg2M2VhNjc4ODA3NjUyMzRmZDU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvamF2
YXNjcmlwdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvamF2YXNjcmlwdC5qcwpAQCAtMiw2ICsyLDcgQEAKIAogQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgdmFyIGlu
ZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKKyAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBh
cnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7CiAgIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZp
Zy5qc29uOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0OwogCkBAIC0xMyw3
ICsxNCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiks
IGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKIAogICAgIHZhciBqc0tleXdv
cmRzID0gewotICAgICAgImlmIjogQSwgIndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIs
ICJkbyI6IEIsICJ0cnkiOiBCLCAiZmluYWxseSI6IEIsCisgICAgICAiaWYiOiBrdygiaWYiKSwg
IndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIsICJkbyI6IEIsICJ0cnkiOiBCLCAiZmlu
YWxseSI6IEIsCiAgICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywg
Im5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAgInZhciI6IGt3KCJ2YXIi
KSwgImNvbnN0Ijoga3coInZhciIpLCAibGV0Ijoga3coInZhciIpLAogICAgICAgImZ1bmN0aW9u
Ijoga3coImZ1bmN0aW9uIiksICJjYXRjaCI6IGt3KCJjYXRjaCIpLApAQCAtMjI2LDggKzIyNyw5
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7CiAg
ICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7
Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChzdGF0ZS5pbmRlbnRlZCwgY3gu
c3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKKyAgICAg
IHZhciBzdGF0ZSA9IGN4LnN0YXRlLCBpbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDsKKyAgICAgIGlm
IChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gInN0YXQiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmlu
ZGVudGVkOworICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoaW5kZW50LCBjeC5z
dHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pOwogICAgIH07
CiAgICAgcmVzdWx0LmxleCA9IHRydWU7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI1NiwzMCAr
MjU4LDMyIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIpIHJldHVy
biBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgIGlmICh0eXBl
ID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgICBp
ZiAodHlwZSA9PSAiOyIpIHJldHVybiBjb250KCk7CisgICAgaWYgKHR5cGUgPT0gImlmIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleCwg
bWF5YmVlbHNlKTsKICAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5j
dGlvbmRlZik7CiAgICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hsZXgoImZv
cm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwg
cG9wbGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wbGV4LCBzdGF0
ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQo
cHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgICBpZiAodHlwZSA9PSAic3dpdGNoIikg
cmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3
aXRjaCIpLCBleHBlY3QoInsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAiY2Fz
ZSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKICAgICBpZiAodHlwZSA9
PSAiZGVmYXVsdCIpIHJldHVybiBjb250KGV4cGVjdCgiOiIpKTsKICAgICBpZiAodHlwZSA9PSAi
Y2F0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBleHBlY3Qo
IigiKSwgZnVuYXJnLCBleHBlY3QoIikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOwog
ICAgIHJldHVybiBwYXNzKHB1c2hsZXgoInN0YXQiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCI7Iiks
IHBvcGxleCk7CiAgIH0KICAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7Ci0gICAgcmV0dXJu
IGV4cHJlc3Npb25Jbm5lcih0eXBlLCBtYXliZW9wZXJhdG9yQ29tbWEpOworICAgIHJldHVybiBl
eHByZXNzaW9uSW5uZXIodHlwZSwgZmFsc2UpOwogICB9CiAgIGZ1bmN0aW9uIGV4cHJlc3Npb25O
b0NvbW1hKHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3Bl
cmF0b3JOb0NvbW1hKTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHRydWUpOwog
ICB9Ci0gIGZ1bmN0aW9uIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBtYXliZW9wKSB7CisgIGZ1bmN0
aW9uIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBub0NvbW1hKSB7CisgICAgdmFyIG1heWJlb3AgPSBu
b0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWE7CiAgICAg
aWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9w
KTsKICAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7
Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lv
bik7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG5vQ29tbWEgPyBt
YXliZWV4cHJlc3Npb25Ob0NvbW1hIDogbWF5YmVleHByZXNzaW9uKTsKICAgICBpZiAodHlwZSA9
PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3Qo
IikiKSwgcG9wbGV4LCBtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1
cm4gY29udChleHByZXNzaW9uKTsKKyAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1cm4g
Y29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTsKICAgICBpZiAo
dHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lv
bk5vQ29tbWEsICJdIiksIHBvcGxleCwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSBy
ZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGNvbW1hc2VwKG9ianByb3AsICJ9IiksIHBvcGxleCwg
bWF5YmVvcCk7CiAgICAgcmV0dXJuIGNvbnQoKTsKQEAgLTI4OCw2ICsyOTIsMTAgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICBpZiAodHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4gcGFzcygpOwog
ICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogICB9CisgIGZ1bmN0aW9uIG1heWJlZXhwcmVz
c2lvbk5vQ29tbWEodHlwZSkgeworICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJl
dHVybiBwYXNzKCk7CisgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEpOworICB9CiAK
ICAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5
cGUgPT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKQEAgLTMwMyw3ICszMTEsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwogICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIsICJjYWxsIiksIGNvbW1hc2VwKGV4cHJlc3Np
b25Ob0NvbW1hLCAiKSIpLCBwb3BsZXgsIG1lKTsKICAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVy
biBjb250KHByb3BlcnR5LCBtZSk7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChw
dXNobGV4KCJdIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1lKTsKKyAgICBp
ZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgbWF5YmVleHByZXNzaW9u
LCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtZSk7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0
eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVu
dCk7CkBAIC0zNjUsNiArMzczLDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodmFsdWUgPT0gIj0i
KSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSwgdmFyZGVmMik7CiAgICAgaWYgKHR5cGUg
PT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYxKTsKICAgfQorICBmdW5jdGlvbiBtYXliZWVsc2Uo
dHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIiAmJiB2YWx1ZSA9PSAi
ZWxzZSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwor
ICB9CiAgIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAidmFyIikg
cmV0dXJuIGNvbnQodmFyZGVmMSwgZXhwZWN0KCI7IiksIGZvcnNwZWMyKTsKICAgICBpZiAodHlw
ZSA9PSAiOyIpIHJldHVybiBjb250KGZvcnNwZWMyKTsKQEAgLTQxNiw3ICs0MjcsNyBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5Db21tZW50ICYmIHN0
cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRv
a2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgaWYgKHR5cGUgPT0gImNvbW1lbnQiKSByZXR1
cm4gc3R5bGU7Ci0gICAgICBzdGF0ZS5sYXN0VHlwZSA9IHR5cGU7CisgICAgICBzdGF0ZS5sYXN0
VHlwZSA9IHR5cGUgPT0gIm9wZXJhdG9yIiAmJiAoY29udGVudCA9PSAiKysiIHx8IGNvbnRlbnQg
PT0gIi0tIikgPyAiaW5jZGVjIiA6IHR5cGU7CiAgICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwg
c3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7CiAgICAgfSwKIApAQCAtNDI0LDI2ICs0MzUs
MzUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSBqc1Rva2VuQ29t
bWVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAh
PSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVy
ICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsOworICAgICAg
Ly8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2Nv
cGUgcG9wcworICAgICAgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07CisgICAgICAgIGlmIChjID09IHBv
cGxleCkgbGV4aWNhbCA9IGxleGljYWwucHJldjsKKyAgICAgICAgZWxzZSBpZiAoYyAhPSBtYXli
ZWVsc2UgfHwgL15lbHNlXGIvLnRlc3QodGV4dEFmdGVyKSkgYnJlYWs7CisgICAgICB9CiAgICAg
ICBpZiAobGV4aWNhbC50eXBlID09ICJzdGF0IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBsZXhpY2Fs
ID0gbGV4aWNhbC5wcmV2OworICAgICAgaWYgKHN0YXRlbWVudEluZGVudCAmJiBsZXhpY2FsLnR5
cGUgPT0gIikiICYmIGxleGljYWwucHJldi50eXBlID09ICJzdGF0IikKKyAgICAgICAgbGV4aWNh
bCA9IGxleGljYWwucHJldjsKICAgICAgIHZhciB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5n
ID0gZmlyc3RDaGFyID09IHR5cGU7Ci0gICAgICBpZiAocGFyc2VyQ29uZmlnLnN0YXRlbWVudElu
ZGVudCAhPSBudWxsKSB7Ci0gICAgICAgIGlmICh0eXBlID09ICIpIiAmJiBsZXhpY2FsLnByZXYg
JiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gInN0YXQiKSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2Owot
ICAgICAgICBpZiAobGV4aWNhbC50eXBlID09ICJzdGF0IikgcmV0dXJuIGxleGljYWwuaW5kZW50
ZWQgKyBwYXJzZXJDb25maWcuc3RhdGVtZW50SW5kZW50OwotICAgICAgfQogCiAgICAgICBpZiAo
dHlwZSA9PSAidmFyZGVmIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5
cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyA0IDogMCk7CiAgICAg
ICBlbHNlIGlmICh0eXBlID09ICJmb3JtIiAmJiBmaXJzdENoYXIgPT0gInsiKSByZXR1cm4gbGV4
aWNhbC5pbmRlbnRlZDsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iKSByZXR1cm4gbGV4
aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0
IikKLSAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0g
Im9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyBpbmRlbnRVbml0IDogMCk7Ci0g
ICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCisgICAg
ICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRv
ciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVu
aXQgOiAwKTsKKyAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xv
c2luZyAmJiBwYXJzZXJDb25maWcuZG91YmxlSW5kZW50U3dpdGNoICE9IGZhbHNlKQogICAgICAg
ICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0
ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTsKICAgICAgIGVsc2UgaWYg
KGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEp
OwogICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGlu
ZGVudFVuaXQpOwogICAgIH0sCiAKICAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IiwKKyAgICBibG9j
a0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKKyAgICBibG9ja0NvbW1lbnRF
bmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCisgICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8g
bnVsbCA6ICIvLyIsCisgICAgZm9sZDogImJyYWNlIiwKIAorICAgIGhlbHBlclR5cGU6IGpzb25N
b2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAogICAgIGpzb25Nb2RlOiBqc29uTW9kZQogICB9
OwogfSk7CkBAIC00NTMsNSArNDczLDYgQEAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2Vj
bWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
YXBwbGljYXRpb24vZWNtYXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRlZmlu
ZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVl
fSk7CitDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtanNvbiIsIHtuYW1lOiAi
amF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC90
eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7CiBD
b2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7IG5hbWU6ICJq
YXZhc2NyaXB0IiwgdHlwZXNjcmlwdDogdHJ1ZSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5j
c3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL2NvZGVtaXJyb3IuY3NzCmluZGV4IGY1Mzc5ZDk2N2M5ODAwZjZmMGQ0NGRkOGY4YTk5ZjI0
ZTkwNmE3ZDMuLjUyODgxZjdkZmQwOWY4M2NjNWNkNTZmOTFmZDNjYTZiODQ2MGMwMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY29kZW1pcnJvci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcwpAQCAtMjA1LDcgKzIwNSw2
IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2Nv
bG9yOiAjZjIyO30KIH0KIAogLkNvZGVNaXJyb3Itd2lkZ2V0IHsKLSAgZGlzcGxheTogaW5saW5l
LWJsb2NrOwogfQogCiAuQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLXNjcm9sbCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKaW5kZXggM2E1OTFiMjE4YmRhNzdl
YWRlMDI5MTNlOTkzOGNlNWExYzBmMmVhZC4uOWE2YTkzMjAxMDI3OTliZjhhNTdhNTNlMWM3NzYy
OWI1N2E0N2FhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcwpA
QCAtMjM2LDkgKzIzNiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
fQogCiAgIGZ1bmN0aW9uIGtleU1hcENoYW5nZWQoY20pIHsKLSAgICB2YXIgc3R5bGUgPSBrZXlN
YXBbY20ub3B0aW9ucy5rZXlNYXBdLnN0eWxlOworICAgIHZhciBtYXAgPSBrZXlNYXBbY20ub3B0
aW9ucy5rZXlNYXBdLCBzdHlsZSA9IG1hcC5zdHlsZTsKICAgICBjbS5kaXNwbGF5LndyYXBwZXIu
Y2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1r
ZXltYXAtXFMrL2csICIiKSArCiAgICAgICAoc3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUg
OiAiIik7CisgICAgY20uc3RhdGUuZGlzYWJsZUlucHV0ID0gbWFwLmRpc2FibGVJbnB1dDsKICAg
fQogCiAgIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkgewpAQCAtMzIzLDggKzMyNCw4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGQuc2l6ZXIuc3R5bGUubWluSGVp
Z2h0ID0gZC5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gdG90YWxIZWlnaHQgKyAicHgiOwogICAg
IGQuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5zY3JvbGxl
ci5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZikgKyAicHgiOwogICAgIHZhciBzY3JvbGxI
ZWlnaHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5zY3JvbGxlci5zY3JvbGxIZWlnaHQpOwot
ICAgIHZhciBuZWVkc0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoID4gZC5zY3JvbGxlci5jbGll
bnRXaWR0aDsKLSAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gZC5zY3JvbGxlci5jbGll
bnRIZWlnaHQ7CisgICAgdmFyIG5lZWRzSCA9IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPiAoZC5z
Y3JvbGxlci5jbGllbnRXaWR0aCArIDEpOworICAgIHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQg
PiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQgKyAxKTsKICAgICBpZiAobmVlZHNWKSB7CiAgICAg
ICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBkLnNjcm9sbGJh
clYuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJw
eCIgOiAiMCI7CkBAIC01MTEsOSArNTEyLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVu
dEhlaWdodDsKICAgICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0
cyB3aGVuIHRoZSBlZGl0b3IgaXMKICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hh
bmdlcy4KLSAgICBpZiAoZGlmZmVyZW50KSBkaXNwbGF5Lmxhc3RTaXplQyA9IGRpc3BsYXkud3Jh
cHBlci5jbGllbnRIZWlnaHQ7CisgICAgaWYgKGRpZmZlcmVudCkgeworICAgICAgZGlzcGxheS5s
YXN0U2l6ZUMgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgc3RhcnRXb3Jr
ZXIoY20sIDQwMCk7CisgICAgfQogICAgIGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBmcm9tOyBkaXNw
bGF5LnNob3dpbmdUbyA9IHRvOwotICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogCiAgICAgdmFy
IHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wOwogICAgIGZvciAodmFyIG5v
ZGUgPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0OyBub2RlOyBub2RlID0gbm9k
ZS5uZXh0U2libGluZykgaWYgKG5vZGUubGluZU9iaikgewpAQCAtNjAyLDggKzYwNSw5IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG5leHRJbnRhY3QgJiYg
bmV4dEludGFjdC50byA9PSBsaW5lTikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwogICAg
ICAgaWYgKGxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7CiAgICAgICAgIGlmIChsaW5lLmhl
aWdodCAhPSAwKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgICBpZiAobGluZS53
aWRnZXRzICYmIGN1ci5wcmV2aW91c1NpYmxpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53
aWRnZXRzLmxlbmd0aDsgKytpKQotICAgICAgICAgIGlmIChsaW5lLndpZGdldHNbaV0uc2hvd0lm
SGlkZGVuKSB7CisgICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyLnByZXZpb3VzU2libGlu
ZykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICB2YXIgdyA9IGxpbmUud2lkZ2V0c1tpXTsKKyAgICAgICAgICBpZiAody5zaG93SWZIaWRk
ZW4pIHsKICAgICAgICAgICAgIHZhciBwcmV2ID0gY3VyLnByZXZpb3VzU2libGluZzsKICAgICAg
ICAgICAgIGlmICgvcHJlL2kudGVzdChwcmV2Lm5vZGVOYW1lKSkgewogICAgICAgICAgICAgICB2
YXIgd3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwpA
QCAtNjExLDkgKzYxNSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChwcmV2KTsKICAgICAgICAgICAgICAgcHJldiA9
IHdyYXA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgd25vZGUgPSBwcmV2LmFwcGVu
ZENoaWxkKGVsdCgiZGl2IiwgW2xpbmUud2lkZ2V0c1tpXS5ub2RlXSwgIkNvZGVNaXJyb3ItbGlu
ZXdpZGdldCIpKTsKLSAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldChsaW5lLndpZGdldHNb
aV0sIHdub2RlLCBwcmV2LCBkaW1zKTsKKyAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBw
ZW5kQ2hpbGQoZWx0KCJkaXYiLCBbdy5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsK
KyAgICAgICAgICAgIGlmICghdy5oYW5kbGVNb3VzZUV2ZW50cykgd25vZGUuaWdub3JlRXZlbnRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3LCB3bm9kZSwgcHJldiwg
ZGltcyk7CiAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKG5leHRJbnRh
Y3QgJiYgbmV4dEludGFjdC5mcm9tIDw9IGxpbmVOICYmIG5leHRJbnRhY3QudG8gPiBsaW5lTikg
ewogICAgICAgICAvLyBUaGlzIGxpbmUgaXMgaW50YWN0LiBTa2lwIHRvIHRoZSBhY3R1YWwgbm9k
ZS4gVXBkYXRlIGl0cwogICAgICAgICAvLyBsaW5lIG51bWJlciBpZiBuZWVkZWQuCkBAIC02NTYs
MjUgKzY2MiwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGlm
IChyZXVzZSkgewogICAgICAgcmV1c2UuYWxpZ25hYmxlID0gbnVsbDsKLSAgICAgIHZhciBpc09r
ID0gdHJ1ZSwgd2lkZ2V0c1NlZW4gPSAwOworICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3aWRnZXRz
U2VlbiA9IDAsIGluc2VydEJlZm9yZSA9IG51bGw7CiAgICAgICBmb3IgKHZhciBuID0gcmV1c2Uu
Zmlyc3RDaGlsZCwgbmV4dDsgbjsgbiA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IG4ubmV4dFNp
Ymxpbmc7CiAgICAgICAgIGlmICghL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIvLnRlc3Qobi5j
bGFzc05hbWUpKSB7CiAgICAgICAgICAgcmV1c2UucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGZpcnN0ID0gdHJ1ZTsgaSA8IGxpbmUu
d2lkZ2V0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHdpZGdldCA9IGxpbmUud2lk
Z2V0c1tpXSwgaXNGaXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCF3aWRnZXQuYWJvdmUp
IHsgaXNGaXJzdCA9IGZpcnN0OyBmaXJzdCA9IGZhbHNlOyB9CisgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB3
aWRnZXQgPSBsaW5lLndpZGdldHNbaV07CiAgICAgICAgICAgICBpZiAod2lkZ2V0Lm5vZGUgPT0g
bi5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgIGlmICghd2lkZ2V0LmFib3ZlICYmICFpbnNl
cnRCZWZvcmUpIGluc2VydEJlZm9yZSA9IG47CiAgICAgICAgICAgICAgIHBvc2l0aW9uTGluZVdp
ZGdldCh3aWRnZXQsIG4sIHJldXNlLCBkaW1zKTsKICAgICAgICAgICAgICAgKyt3aWRnZXRzU2Vl
bjsKLSAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHJldXNlLmluc2VydEJlZm9yZShsaW5lRWxl
bWVudCwgbik7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
IH0KICAgICAgICAgICBpZiAoaSA9PSBsaW5lLndpZGdldHMubGVuZ3RoKSB7IGlzT2sgPSBmYWxz
ZTsgYnJlYWs7IH0KICAgICAgICAgfQogICAgICAgfQorICAgICAgcmV1c2UuaW5zZXJ0QmVmb3Jl
KGxpbmVFbGVtZW50LCBpbnNlcnRCZWZvcmUpOwogICAgICAgaWYgKGlzT2sgJiYgd2lkZ2V0c1Nl
ZW4gPT0gbGluZS53aWRnZXRzLmxlbmd0aCkgewogICAgICAgICB3cmFwID0gcmV1c2U7CiAgICAg
ICAgIHJldXNlLmNsYXNzTmFtZSA9IGxpbmUud3JhcENsYXNzIHx8ICIiOwpAQCAtNzA5LDYgKzcx
NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpZV9sdDgp
IHdyYXAuc3R5bGUuekluZGV4ID0gMjsKICAgICBpZiAobGluZS53aWRnZXRzICYmIHdyYXAgIT0g
cmV1c2UpIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsg
KytpKSB7CiAgICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoImRpdiIsIFt3aWRn
ZXQubm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTsKKyAgICAgIGlmICghd2lkZ2V0Lmhh
bmRsZU1vdXNlRXZlbnRzKSBub2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7CiAgICAgICBwb3NpdGlv
bkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCB3cmFwLCBkaW1zKTsKICAgICAgIGlmICh3aWRnZXQu
YWJvdmUpCiAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLm9wdGlvbnMubGluZU51
bWJlcnMgJiYgbGluZS5oZWlnaHQgIT0gMCA/IGd1dHRlcldyYXAgOiBsaW5lRWxlbWVudCk7CkBA
IC03OTEsNzQgKzc5OCw1OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0
b3ApICsgInB4IikpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZy
b21BcmcsIHRvQXJnLCByZXRUb3ApIHsKKyAgICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBm
cm9tQXJnLCB0b0FyZykgewogICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7
Ci0gICAgICB2YXIgbGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIHJWYWwgPSByZXRUb3Ag
PyBJbmZpbml0eSA6IC1JbmZpbml0eTsKLSAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCkgewotICAg
ICAgICByZXR1cm4gY2hhckNvb3JkcyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxpbmVPYmop
OworICAgICAgdmFyIGxpbmVMZW4gPSBsaW5lT2JqLnRleHQubGVuZ3RoOworICAgICAgdmFyIHN0
YXJ0LCBlbmQ7CisgICAgICBmdW5jdGlvbiBjb29yZHMoY2gsIGJpYXMpIHsKKyAgICAgICAgcmV0
dXJuIGNoYXJDb29yZHMoY20sIFBvcyhsaW5lLCBjaCksICJkaXYiLCBsaW5lT2JqLCBiaWFzKTsK
ICAgICAgIH0KIAogICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhnZXRPcmRlcihsaW5lT2JqKSwg
ZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbihm
cm9tLCB0bywgZGlyKSB7Ci0gICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGZyb20pLCByaWdo
dFBvcywgbGVmdCwgcmlnaHQ7CisgICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGZyb20sICJs
ZWZ0IiksIHJpZ2h0UG9zLCBsZWZ0LCByaWdodDsKICAgICAgICAgaWYgKGZyb20gPT0gdG8pIHsK
ICAgICAgICAgICByaWdodFBvcyA9IGxlZnRQb3M7CiAgICAgICAgICAgbGVmdCA9IHJpZ2h0ID0g
bGVmdFBvcy5sZWZ0OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJpZ2h0UG9zID0gY29v
cmRzKHRvIC0gMSk7CisgICAgICAgICAgcmlnaHRQb3MgPSBjb29yZHModG8gLSAxLCAicmlnaHQi
KTsKICAgICAgICAgICBpZiAoZGlyID09ICJydGwiKSB7IHZhciB0bXAgPSBsZWZ0UG9zOyBsZWZ0
UG9zID0gcmlnaHRQb3M7IHJpZ2h0UG9zID0gdG1wOyB9CiAgICAgICAgICAgbGVmdCA9IGxlZnRQ
b3MubGVmdDsKICAgICAgICAgICByaWdodCA9IHJpZ2h0UG9zLnJpZ2h0OwogICAgICAgICB9Cisg
ICAgICAgIGlmIChmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gcGw7CiAgICAg
ICAgIGlmIChyaWdodFBvcy50b3AgLSBsZWZ0UG9zLnRvcCA+IDMpIHsgLy8gRGlmZmVyZW50IGxp
bmVzLCBkcmF3IHRvcCBwYXJ0CiAgICAgICAgICAgYWRkKGxlZnQsIGxlZnRQb3MudG9wLCBudWxs
LCBsZWZ0UG9zLmJvdHRvbSk7CiAgICAgICAgICAgbGVmdCA9IHBsOwogICAgICAgICAgIGlmIChs
ZWZ0UG9zLmJvdHRvbSA8IHJpZ2h0UG9zLnRvcCkgYWRkKGxlZnQsIGxlZnRQb3MuYm90dG9tLCBu
dWxsLCByaWdodFBvcy50b3ApOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b0FyZyA9PSBudWxs
ICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gY2xpZW50V2lkdGg7Ci0gICAgICAgIGlmIChmcm9t
QXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gcGw7Ci0gICAgICAgIHJWYWwgPSByZXRU
b3AgPyBNYXRoLm1pbihyaWdodFBvcy50b3AsIHJWYWwpIDogTWF0aC5tYXgocmlnaHRQb3MuYm90
dG9tLCByVmFsKTsKKyAgICAgICAgaWYgKCFzdGFydCB8fCBsZWZ0UG9zLnRvcCA8IHN0YXJ0LnRv
cCB8fCBsZWZ0UG9zLnRvcCA9PSBzdGFydC50b3AgJiYgbGVmdFBvcy5sZWZ0IDwgc3RhcnQubGVm
dCkKKyAgICAgICAgICBzdGFydCA9IGxlZnRQb3M7CisgICAgICAgIGlmICghZW5kIHx8IHJpZ2h0
UG9zLmJvdHRvbSA+IGVuZC5ib3R0b20gfHwgcmlnaHRQb3MuYm90dG9tID09IGVuZC5ib3R0b20g
JiYgcmlnaHRQb3MucmlnaHQgPiBlbmQucmlnaHQpCisgICAgICAgICAgZW5kID0gcmlnaHRQb3M7
CiAgICAgICAgIGlmIChsZWZ0IDwgcGwgKyAxKSBsZWZ0ID0gcGw7CiAgICAgICAgIGFkZChsZWZ0
LCByaWdodFBvcy50b3AsIHJpZ2h0IC0gbGVmdCwgcmlnaHRQb3MuYm90dG9tKTsKICAgICAgIH0p
OwotICAgICAgcmV0dXJuIHJWYWw7CisgICAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBl
bmR9OwogICAgIH0KIAogICAgIGlmIChzZWwuZnJvbS5saW5lID09IHNlbC50by5saW5lKSB7CiAg
ICAgICBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgc2VsLnRvLmNoKTsK
ICAgICB9IGVsc2UgewotICAgICAgdmFyIGZyb21PYmogPSBnZXRMaW5lKGRvYywgc2VsLmZyb20u
bGluZSk7Ci0gICAgICB2YXIgY3VyID0gZnJvbU9iaiwgbWVyZ2VkLCBwYXRoID0gW3NlbC5mcm9t
LmxpbmUsIHNlbC5mcm9tLmNoXSwgc2luZ2xlTGluZTsKLSAgICAgIHdoaWxlIChtZXJnZWQgPSBj
b2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgewotICAgICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmlu
ZCgpOwotICAgICAgICBwYXRoLnB1c2goZm91bmQuZnJvbS5jaCwgZm91bmQudG8ubGluZSwgZm91
bmQudG8uY2gpOwotICAgICAgICBpZiAoZm91bmQudG8ubGluZSA9PSBzZWwudG8ubGluZSkgewot
ICAgICAgICAgIHBhdGgucHVzaChzZWwudG8uY2gpOwotICAgICAgICAgIHNpbmdsZUxpbmUgPSB0
cnVlOwotICAgICAgICAgIGJyZWFrOworICAgICAgdmFyIGZyb21MaW5lID0gZ2V0TGluZShkb2Ms
IHNlbC5mcm9tLmxpbmUpLCB0b0xpbmUgPSBnZXRMaW5lKGRvYywgc2VsLnRvLmxpbmUpOworICAg
ICAgdmFyIHNpbmdsZVZMaW5lID0gdmlzdWFsTGluZShkb2MsIGZyb21MaW5lKSA9PSB2aXN1YWxM
aW5lKGRvYywgdG9MaW5lKTsKKyAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc2VsLmZy
b20ubGluZSwgc2VsLmZyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGgg
OiBudWxsKS5lbmQ7CisgICAgICB2YXIgcmlnaHRTdGFydCA9IGRyYXdGb3JMaW5lKHNlbC50by5s
aW5lLCBzaW5nbGVWTGluZSA/IDAgOiBudWxsLCBzZWwudG8uY2gpLnN0YXJ0OworICAgICAgaWYg
KHNpbmdsZVZMaW5lKSB7CisgICAgICAgIGlmIChsZWZ0RW5kLnRvcCA8IHJpZ2h0U3RhcnQudG9w
IC0gMikgeworICAgICAgICAgIGFkZChsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLnRvcCwgbnVsbCwg
bGVmdEVuZC5ib3R0b20pOworICAgICAgICAgIGFkZChwbCwgcmlnaHRTdGFydC50b3AsIHJpZ2h0
U3RhcnQubGVmdCwgcmlnaHRTdGFydC5ib3R0b20pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGFkZChsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLnRvcCwgcmlnaHRTdGFydC5sZWZ0IC0gbGVm
dEVuZC5yaWdodCwgbGVmdEVuZC5ib3R0b20pOwogICAgICAgICB9Ci0gICAgICAgIGN1ciA9IGdl
dExpbmUoZG9jLCBmb3VuZC50by5saW5lKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGhpcyBpcyBh
IHNpbmdsZSwgbWVyZ2VkIGxpbmUKLSAgICAgIGlmIChzaW5nbGVMaW5lKSB7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkgKz0gMykKLSAgICAgICAgICBkcmF3Rm9y
TGluZShwYXRoW2ldLCBwYXRoW2krMV0sIHBhdGhbaSsyXSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB2YXIgbWlkZGxlVG9wLCBtaWRkbGVCb3QsIHRvT2JqID0gZ2V0TGluZShkb2MsIHNlbC50
by5saW5lKTsKLSAgICAgICAgaWYgKHNlbC5mcm9tLmNoKQotICAgICAgICAgIC8vIERyYXcgdGhl
IGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLgotICAgICAgICAgIG1pZGRsZVRvcCA9IGRyYXdGb3JM
aW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAvLyBTaW1wbHkgaW5jbHVkZSBpdCBpbiB0aGUgbWlkZGxlIGJsb2NrLgot
ICAgICAgICAgIG1pZGRsZVRvcCA9IGhlaWdodEF0TGluZShjbSwgZnJvbU9iaikgLSBkaXNwbGF5
LnZpZXdPZmZzZXQ7Ci0KLSAgICAgICAgaWYgKCFzZWwudG8uY2gpCi0gICAgICAgICAgbWlkZGxl
Qm90ID0gaGVpZ2h0QXRMaW5lKGNtLCB0b09iaikgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICBtaWRkbGVCb3QgPSBkcmF3Rm9yTGluZShzZWwudG8ubGluZSwg
Y29sbGFwc2VkU3BhbkF0U3RhcnQodG9PYmopID8gbnVsbCA6IDAsIHNlbC50by5jaCwgdHJ1ZSk7
Ci0KLSAgICAgICAgaWYgKG1pZGRsZVRvcCA8IG1pZGRsZUJvdCkgYWRkKHBsLCBtaWRkbGVUb3As
IG51bGwsIG1pZGRsZUJvdCk7CiAgICAgICB9CisgICAgICBpZiAobGVmdEVuZC5ib3R0b20gPCBy
aWdodFN0YXJ0LnRvcCkKKyAgICAgICAgYWRkKHBsLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmln
aHRTdGFydC50b3ApOwogICAgIH0KIAogICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXku
c2VsZWN0aW9uRGl2LCBmcmFnbWVudCk7CkBAIC05MjQsMTIgKzkxNiwxMiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gdmFsaWQgc3RhdGUuIElmIHRoYXQgZmFpbHMs
IGl0IHJldHVybnMgdGhlIGxpbmUgd2l0aCB0aGUKICAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24s
IHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxlYXN0IGNvbnRleHQgdG8KICAgLy8gcGFyc2UgY29y
cmVjdGx5LgotICBmdW5jdGlvbiBmaW5kU3RhcnRMaW5lKGNtLCBuKSB7CisgIGZ1bmN0aW9uIGZp
bmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpIHsKICAgICB2YXIgbWluaW5kZW50LCBtaW5saW5l
LCBkb2MgPSBjbS5kb2M7CiAgICAgZm9yICh2YXIgc2VhcmNoID0gbiwgbGltID0gbiAtIDEwMDsg
c2VhcmNoID4gbGltOyAtLXNlYXJjaCkgewogICAgICAgaWYgKHNlYXJjaCA8PSBkb2MuZmlyc3Qp
IHJldHVybiBkb2MuZmlyc3Q7CiAgICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2gg
LSAxKTsKLSAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CisgICAgICBp
ZiAobGluZS5zdGF0ZUFmdGVyICYmICghcHJlY2lzZSB8fCBzZWFyY2ggPD0gZG9jLmZyb250aWVy
KSkgcmV0dXJuIHNlYXJjaDsKICAgICAgIHZhciBpbmRlbnRlZCA9IGNvdW50Q29sdW1uKGxpbmUu
dGV4dCwgbnVsbCwgY20ub3B0aW9ucy50YWJTaXplKTsKICAgICAgIGlmIChtaW5saW5lID09IG51
bGwgfHwgbWluaW5kZW50ID4gaW5kZW50ZWQpIHsKICAgICAgICAgbWlubGluZSA9IHNlYXJjaCAt
IDE7CkBAIC05MzksMTAgKzkzMSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICByZXR1cm4gbWlubGluZTsKICAgfQogCi0gIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3Jl
KGNtLCBuKSB7CisgIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKGNtLCBuLCBwcmVjaXNlKSB7CiAg
ICAgdmFyIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgICBpZiAoIWRv
Yy5tb2RlLnN0YXJ0U3RhdGUpIHJldHVybiB0cnVlOwotICAgIHZhciBwb3MgPSBmaW5kU3RhcnRM
aW5lKGNtLCBuKSwgc3RhdGUgPSBwb3MgPiBkb2MuZmlyc3QgJiYgZ2V0TGluZShkb2MsIHBvcy0x
KS5zdGF0ZUFmdGVyOworICAgIHZhciBwb3MgPSBmaW5kU3RhcnRMaW5lKGNtLCBuLCBwcmVjaXNl
KSwgc3RhdGUgPSBwb3MgPiBkb2MuZmlyc3QgJiYgZ2V0TGluZShkb2MsIHBvcy0xKS5zdGF0ZUFm
dGVyOwogICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShkb2MubW9kZSk7CiAgICAg
ZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpOwogICAgIGRvYy5pdGVyKHBv
cywgbiwgZnVuY3Rpb24obGluZSkgewpAQCAtOTYzLDcgKzk1NSw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBlLm9mZnNldExlZnQ7CiAgIH0KIAotICBm
dW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGRhdGEpIHsKKyAgZnVuY3Rpb24gbWVh
c3VyZUNoYXIoY20sIGxpbmUsIGNoLCBkYXRhLCBiaWFzKSB7CiAgICAgdmFyIGRpciA9IC0xOwog
ICAgIGRhdGEgPSBkYXRhIHx8IG1lYXN1cmVMaW5lKGNtLCBsaW5lKTsKIApAQCAtOTcyLDkgKzk2
NCwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChyKSBi
cmVhazsKICAgICAgIGlmIChkaXIgPCAwICYmIHBvcyA9PSAwKSBkaXIgPSAxOwogICAgIH0KKyAg
ICBiaWFzID0gcG9zID4gY2ggPyAibGVmdCIgOiBwb3MgPCBjaCA/ICJyaWdodCIgOiBiaWFzOwor
ICAgIGlmIChiaWFzID09ICJsZWZ0IiAmJiByLmxlZnRTaWRlKSByID0gci5sZWZ0U2lkZTsKKyAg
ICBlbHNlIGlmIChiaWFzID09ICJyaWdodCIgJiYgci5yaWdodFNpZGUpIHIgPSByLnJpZ2h0U2lk
ZTsKICAgICByZXR1cm4ge2xlZnQ6IHBvcyA8IGNoID8gci5yaWdodCA6IHIubGVmdCwKICAgICAg
ICAgICAgIHJpZ2h0OiBwb3MgPiBjaCA/IHIubGVmdCA6IHIucmlnaHQsCi0gICAgICAgICAgICB0
b3A6IHIudG9wLCBib3R0b206IHIuYm90dG9tfTsKKyAgICAgICAgICAgIHRvcDogci50b3AsCisg
ICAgICAgICAgICBib3R0b206IHIuYm90dG9tfTsKICAgfQogCiAgIGZ1bmN0aW9uIGZpbmRDYWNo
ZWRNZWFzdXJlbWVudChjbSwgbGluZSkgewpAQCAtMTA0NywzMCArMTA0Myw1MSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoaWVfbHQ5ICYmIGRpc3BsYXkubWVh
c3VyZS5maXJzdCAhPSBwcmUpCiAgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1l
YXN1cmUsIHByZSk7CiAKLSAgICBmb3IgKHZhciBpID0gMCwgY3VyOyBpIDwgbWVhc3VyZS5sZW5n
dGg7ICsraSkgaWYgKGN1ciA9IG1lYXN1cmVbaV0pIHsKLSAgICAgIHZhciBzaXplID0gZ2V0UmVj
dChjdXIpOwotICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIHNpemUudG9wIC0gb3V0ZXIudG9w
KSwgYm90ID0gTWF0aC5taW4oc2l6ZS5ib3R0b20gLSBvdXRlci50b3AsIG1heEJvdCk7Ci0gICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHZyYW5nZXMubGVuZ3RoOyBqICs9IDIpIHsKLSAgICAgICAg
dmFyIHJ0b3AgPSB2cmFuZ2VzW2pdLCByYm90ID0gdnJhbmdlc1tqKzFdOworICAgIGZ1bmN0aW9u
IG1lYXN1cmVSZWN0KHJlY3QpIHsKKyAgICAgIHZhciB0b3AgPSByZWN0LnRvcCAtIG91dGVyLnRv
cCwgYm90ID0gcmVjdC5ib3R0b20gLSBvdXRlci50b3A7CisgICAgICBpZiAoYm90ID4gbWF4Qm90
KSBib3QgPSBtYXhCb3Q7CisgICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKKyAgICAgIGZvciAo
dmFyIGkgPSB2cmFuZ2VzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7CisgICAgICAgIHZh
ciBydG9wID0gdnJhbmdlc1tpXSwgcmJvdCA9IHZyYW5nZXNbaSsxXTsKICAgICAgICAgaWYgKHJ0
b3AgPiBib3QgfHwgcmJvdCA8IHRvcCkgY29udGludWU7CiAgICAgICAgIGlmIChydG9wIDw9IHRv
cCAmJiByYm90ID49IGJvdCB8fAogICAgICAgICAgICAgdG9wIDw9IHJ0b3AgJiYgYm90ID49IHJi
b3QgfHwKICAgICAgICAgICAgIE1hdGgubWluKGJvdCwgcmJvdCkgLSBNYXRoLm1heCh0b3AsIHJ0
b3ApID49IChib3QgLSB0b3ApID4+IDEpIHsKLSAgICAgICAgICB2cmFuZ2VzW2pdID0gTWF0aC5t
aW4odG9wLCBydG9wKTsKLSAgICAgICAgICB2cmFuZ2VzW2orMV0gPSBNYXRoLm1heChib3QsIHJi
b3QpOworICAgICAgICAgIHZyYW5nZXNbaV0gPSBNYXRoLm1pbih0b3AsIHJ0b3ApOworICAgICAg
ICAgIHZyYW5nZXNbaSsxXSA9IE1hdGgubWF4KGJvdCwgcmJvdCk7CiAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGlmIChqID09IHZyYW5nZXMubGVuZ3RoKSB2cmFu
Z2VzLnB1c2godG9wLCBib3QpOwotICAgICAgdmFyIHJpZ2h0ID0gc2l6ZS5yaWdodDsKLSAgICAg
IGlmIChjdXIubWVhc3VyZVJpZ2h0KSByaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCku
bGVmdDsKLSAgICAgIGRhdGFbaV0gPSB7bGVmdDogc2l6ZS5sZWZ0IC0gb3V0ZXIubGVmdCwgcmln
aHQ6IHJpZ2h0IC0gb3V0ZXIubGVmdCwgdG9wOiBqfTsKKyAgICAgIGlmIChpIDwgMCkgeyBpID0g
dnJhbmdlcy5sZW5ndGg7IHZyYW5nZXMucHVzaCh0b3AsIGJvdCk7IH0KKyAgICAgIHJldHVybiB7
bGVmdDogcmVjdC5sZWZ0IC0gb3V0ZXIubGVmdCwKKyAgICAgICAgICAgICAgcmlnaHQ6IHJlY3Qu
cmlnaHQgLSBvdXRlci5sZWZ0LAorICAgICAgICAgICAgICB0b3A6IGksIGJvdHRvbTogbnVsbH07
CiAgICAgfQotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBp
ZiAoY3VyID0gZGF0YVtpXSkgewotICAgICAgdmFyIHZyID0gY3VyLnRvcDsKLSAgICAgIGN1ci50
b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJvdHRvbSA9IHZyYW5nZXNbdnIrMV07CisgICAgZnVuY3Rp
b24gZmluaXNoUmVjdChyZWN0KSB7CisgICAgICByZWN0LmJvdHRvbSA9IHZyYW5nZXNbcmVjdC50
b3ArMV07CisgICAgICByZWN0LnRvcCA9IHZyYW5nZXNbcmVjdC50b3BdOwogICAgIH0KIAorICAg
IGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0g
bWVhc3VyZVtpXSkgeworICAgICAgdmFyIG5vZGUgPSBjdXIsIHJlY3QgPSBudWxsOworICAgICAg
Ly8gQSB3aWRnZXQgbWlnaHQgd3JhcCwgbmVlZHMgc3BlY2lhbCBjYXJlCisgICAgICBpZiAoL1xi
Q29kZU1pcnJvci13aWRnZXRcYi8udGVzdChjdXIuY2xhc3NOYW1lKSAmJiBjdXIuZ2V0Q2xpZW50
UmVjdHMpIHsKKyAgICAgICAgaWYgKGN1ci5maXJzdENoaWxkLm5vZGVUeXBlID09IDEpIG5vZGUg
PSBjdXIuZmlyc3RDaGlsZDsKKyAgICAgICAgdmFyIHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0
cygpOworICAgICAgICBpZiAocmVjdHMubGVuZ3RoID4gMSkgeworICAgICAgICAgIHJlY3QgPSBk
YXRhW2ldID0gbWVhc3VyZVJlY3QocmVjdHNbMF0pOworICAgICAgICAgIHJlY3QucmlnaHRTaWRl
ID0gbWVhc3VyZVJlY3QocmVjdHNbcmVjdHMubGVuZ3RoIC0gMV0pOworICAgICAgICB9CisgICAg
ICB9CisgICAgICBpZiAoIXJlY3QpIHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QoZ2V0UmVj
dChub2RlKSk7CisgICAgICBpZiAoY3VyLm1lYXN1cmVSaWdodCkgcmVjdC5yaWdodCA9IGdldFJl
Y3QoY3VyLm1lYXN1cmVSaWdodCkubGVmdDsKKyAgICAgIGlmIChjdXIubGVmdFNpZGUpIHJlY3Qu
bGVmdFNpZGUgPSBtZWFzdXJlUmVjdChnZXRSZWN0KGN1ci5sZWZ0U2lkZSkpOworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMCwgY3VyOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IGRh
dGFbaV0pIHsKKyAgICAgIGZpbmlzaFJlY3QoY3VyKTsKKyAgICAgIGlmIChjdXIubGVmdFNpZGUp
IGZpbmlzaFJlY3QoY3VyLmxlZnRTaWRlKTsKKyAgICAgIGlmIChjdXIucmlnaHRTaWRlKSBmaW5p
c2hSZWN0KGN1ci5yaWdodFNpZGUpOworICAgIH0KICAgICByZXR1cm4gZGF0YTsKICAgfQogCkBA
IC0xMDgxLDcgKzEwOTgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPT0gbGluZS50
ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0cnVlOwogICAgIH0KICAgICB2YXIgY2FjaGVkID0g
IWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAo
Y2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgsIGNh
Y2hlZC5tZWFzdXJlKS5yaWdodDsKKyAgICBpZiAoY2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIo
Y20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgsIGNhY2hlZC5tZWFzdXJlLCAicmlnaHQiKS5yaWdo
dDsKIAogICAgIHZhciBwcmUgPSBsaW5lQ29udGVudChjbSwgbGluZSk7CiAgICAgdmFyIGVuZCA9
IHByZS5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwpA
QCAtMTA5Niw2ICsxMTEzLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBudWxsOwogICB9CiAKKyAgZnVuY3Rpb24gcGFn
ZVNjcm9sbFgoKSB7IHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0OyB9CisgIGZ1bmN0aW9uIHBh
Z2VTY3JvbGxZKCkgeyByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wOyB9CisKICAgLy8gQ29udGV4
dCBpcyBvbmUgb2YgImxpbmUiLCAiZGl2IiAoZGlzcGxheS5saW5lRGl2KSwgImxvY2FsIi9udWxs
IChlZGl0b3IpLCBvciAicGFnZSIKICAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5l
T2JqLCByZWN0LCBjb250ZXh0KSB7CiAgICAgaWYgKGxpbmVPYmoud2lkZ2V0cykgZm9yICh2YXIg
aSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIGlmIChsaW5lT2JqLndpZGdl
dHNbaV0uYWJvdmUpIHsKQEAgLTExMDUsMTEgKzExMjUsMTIgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGNvbnRleHQgPT0gImxpbmUiKSByZXR1cm4gcmVjdDsK
ICAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSAibG9jYWwiOwogICAgIHZhciB5T2ZmID0gaGVp
Z2h0QXRMaW5lKGNtLCBsaW5lT2JqKTsKLSAgICBpZiAoY29udGV4dCAhPSAibG9jYWwiKSB5T2Zm
IC09IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoY29udGV4dCA9PSAicGFnZSIpIHsK
KyAgICBpZiAoY29udGV4dCA9PSAibG9jYWwiKSB5T2ZmICs9IHBhZGRpbmdUb3AoY20uZGlzcGxh
eSk7CisgICAgZWxzZSB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsKKyAgICBpZiAoY29u
dGV4dCA9PSAicGFnZSIgfHwgY29udGV4dCA9PSAid2luZG93IikgewogICAgICAgdmFyIGxPZmYg
PSBnZXRSZWN0KGNtLmRpc3BsYXkubGluZVNwYWNlKTsKLSAgICAgIHlPZmYgKz0gbE9mZi50b3Ag
KyAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9j
dW1lbnQuYm9keSkuc2Nyb2xsVG9wKTsKLSAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKHdp
bmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50
LmJvZHkpLnNjcm9sbExlZnQpOworICAgICAgeU9mZiArPSBsT2ZmLnRvcCArIChjb250ZXh0ID09
ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxZKCkpOworICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxl
ZnQgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWCgpKTsKICAgICAgIHJl
Y3QubGVmdCArPSB4T2ZmOyByZWN0LnJpZ2h0ICs9IHhPZmY7CiAgICAgfQogICAgIHJlY3QudG9w
ICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmY7CkBAIC0xMTIxLDMxICsxMTQyLDMwIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBmcm9tQ29vcmRTeXN0
ZW0oY20sIGNvb3JkcywgY29udGV4dCkgewogICAgIGlmIChjb250ZXh0ID09ICJkaXYiKSByZXR1
cm4gY29vcmRzOwogICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQsIHRvcCA9IGNvb3Jkcy50b3A7
CisgICAgLy8gRmlyc3QgbW92ZSBpbnRvICJwYWdlIiBjb29yZGluYXRlIHN5c3RlbQogICAgIGlm
IChjb250ZXh0ID09ICJwYWdlIikgewotICAgICAgbGVmdCAtPSB3aW5kb3cucGFnZVhPZmZzZXQg
fHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0
OwotICAgICAgdG9wIC09IHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcDsKKyAgICAgIGxlZnQgLT0gcGFnZVNj
cm9sbFgoKTsKKyAgICAgIHRvcCAtPSBwYWdlU2Nyb2xsWSgpOworICAgIH0gZWxzZSBpZiAoY29u
dGV4dCA9PSAibG9jYWwiIHx8ICFjb250ZXh0KSB7CisgICAgICB2YXIgbG9jYWxCb3ggPSBnZXRS
ZWN0KGNtLmRpc3BsYXkuc2l6ZXIpOworICAgICAgbGVmdCArPSBsb2NhbEJveC5sZWZ0OworICAg
ICAgdG9wICs9IGxvY2FsQm94LnRvcDsKICAgICB9CisKICAgICB2YXIgbGluZVNwYWNlQm94ID0g
Z2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7Ci0gICAgbGVmdCAtPSBsaW5lU3BhY2VCb3gu
bGVmdDsKLSAgICB0b3AgLT0gbGluZVNwYWNlQm94LnRvcDsKLSAgICBpZiAoY29udGV4dCA9PSAi
bG9jYWwiIHx8ICFjb250ZXh0KSB7Ci0gICAgICB2YXIgZWRpdG9yQm94ID0gZ2V0UmVjdChjbS5k
aXNwbGF5LndyYXBwZXIpOwotICAgICAgbGVmdCArPSBlZGl0b3JCb3gubGVmdDsKLSAgICAgIHRv
cCArPSBlZGl0b3JCb3gudG9wOwotICAgIH0KLSAgICByZXR1cm4ge2xlZnQ6IGxlZnQsIHRvcDog
dG9wfTsKKyAgICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0
b3AgLSBsaW5lU3BhY2VCb3gudG9wfTsKICAgfQogCi0gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20s
IHBvcywgY29udGV4dCwgbGluZU9iaikgeworICBmdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3Ms
IGNvbnRleHQsIGxpbmVPYmosIGJpYXMpIHsKICAgICBpZiAoIWxpbmVPYmopIGxpbmVPYmogPSBn
ZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20s
IGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gpLCBjb250ZXh0KTsKKyAg
ICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGlu
ZU9iaiwgcG9zLmNoLCBudWxsLCBiaWFzKSwgY29udGV4dCk7CiAgIH0KIAogICBmdW5jdGlvbiBj
dXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgbWVhc3VyZW1lbnQpIHsKICAg
ICBsaW5lT2JqID0gbGluZU9iaiB8fCBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgIGlm
ICghbWVhc3VyZW1lbnQpIG1lYXN1cmVtZW50ID0gbWVhc3VyZUxpbmUoY20sIGxpbmVPYmopOwog
ICAgIGZ1bmN0aW9uIGdldChjaCwgcmlnaHQpIHsKLSAgICAgIHZhciBtID0gbWVhc3VyZUNoYXIo
Y20sIGxpbmVPYmosIGNoLCBtZWFzdXJlbWVudCk7CisgICAgICB2YXIgbSA9IG1lYXN1cmVDaGFy
KGNtLCBsaW5lT2JqLCBjaCwgbWVhc3VyZW1lbnQsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7
CiAgICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdodCA9IG0ubGVm
dDsKICAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQp
OwogICAgIH0KQEAgLTExNzEsOCArMTE5MSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIHJldHVybiB2YWw7CiAgIH0KIAotICBmdW5jdGlvbiBQb3NNYXliZU91dHNp
ZGUobGluZSwgY2gsIG91dHNpZGUpIHsKKyAgZnVuY3Rpb24gUG9zV2l0aEluZm8obGluZSwgY2gs
IG91dHNpZGUsIHhSZWwpIHsKICAgICB2YXIgcG9zID0gbmV3IFBvcyhsaW5lLCBjaCk7CisgICAg
cG9zLnhSZWwgPSB4UmVsOwogICAgIGlmIChvdXRzaWRlKSBwb3Mub3V0c2lkZSA9IHRydWU7CiAg
ICAgcmV0dXJuIHBvczsKICAgfQpAQCAtMTE4MSwxMCArMTIwMiwxMCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkgewog
ICAgIHZhciBkb2MgPSBjbS5kb2M7CiAgICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7Ci0g
ICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRlKGRvYy5maXJzdCwgMCwgdHJ1ZSk7
CisgICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0LCAwLCB0cnVlLCAt
MSk7CiAgICAgdmFyIGxpbmVObyA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZp
cnN0ICsgZG9jLnNpemUgLSAxOwogICAgIGlmIChsaW5lTm8gPiBsYXN0KQotICAgICAgcmV0dXJu
IFBvc01heWJlT3V0c2lkZShkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBs
YXN0KS50ZXh0Lmxlbmd0aCwgdHJ1ZSk7CisgICAgICByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZp
cnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUs
IDEpOwogICAgIGlmICh4IDwgMCkgeCA9IDA7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0xMTkyLDcg
KzEyMTMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBm
b3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5vLCB4LCB5KTsKICAgICAg
IHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZU9iaik7CiAgICAgICB2YXIgbWVy
Z2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5kKCk7Ci0gICAgICBpZiAobWVyZ2VkICYmIGZv
dW5kLmNoID49IG1lcmdlZFBvcy5mcm9tLmNoKQorICAgICAgaWYgKG1lcmdlZCAmJiAoZm91bmQu
Y2ggPiBtZXJnZWRQb3MuZnJvbS5jaCB8fCBmb3VuZC5jaCA9PSBtZXJnZWRQb3MuZnJvbS5jaCAm
JiBmb3VuZC54UmVsID4gMCkpCiAgICAgICAgIGxpbmVObyA9IG1lcmdlZFBvcy50by5saW5lOwog
ICAgICAgZWxzZQogICAgICAgICByZXR1cm4gZm91bmQ7CkBAIC0xMjE4LDE0ICsxMjM5LDE1IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBmcm9tID0gbGluZUxl
ZnQobGluZU9iaiksIHRvID0gbGluZVJpZ2h0KGxpbmVPYmopOwogICAgIHZhciBmcm9tWCA9IGdl
dFgoZnJvbSksIGZyb21PdXRzaWRlID0gd3JvbmdMaW5lLCB0b1ggPSBnZXRYKHRvKSwgdG9PdXRz
aWRlID0gd3JvbmdMaW5lOwogCi0gICAgaWYgKHggPiB0b1gpIHJldHVybiBQb3NNYXliZU91dHNp
ZGUobGluZU5vLCB0bywgdG9PdXRzaWRlKTsKKyAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIFBvc1dp
dGhJbmZvKGxpbmVObywgdG8sIHRvT3V0c2lkZSwgMSk7CiAgICAgLy8gRG8gYSBiaW5hcnkgc2Vh
cmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgIGZvciAoOzspIHsKICAgICAgIGlmIChiaWRp
ID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgZnJvbSwgMSkgOiB0
byAtIGZyb20gPD0gMSkgewotICAgICAgICB2YXIgYWZ0ZXIgPSB4IC0gZnJvbVggPCB0b1ggLSB4
LCBjaCA9IGFmdGVyID8gZnJvbSA6IHRvOworICAgICAgICB2YXIgY2ggPSB4IDwgZnJvbVggfHwg
eCAtIGZyb21YIDw9IHRvWCAtIHggPyBmcm9tIDogdG87CisgICAgICAgIHZhciB4RGlmZiA9IHgg
LSAoY2ggPT0gZnJvbSA/IGZyb21YIDogdG9YKTsKICAgICAgICAgd2hpbGUgKGlzRXh0ZW5kaW5n
Q2hhci50ZXN0KGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgKytjaDsKLSAgICAgICAgdmFyIHBv
cyA9IFBvc01heWJlT3V0c2lkZShsaW5lTm8sIGNoLCBhZnRlciA/IGZyb21PdXRzaWRlIDogdG9P
dXRzaWRlKTsKLSAgICAgICAgcG9zLmFmdGVyID0gYWZ0ZXI7CisgICAgICAgIHZhciBwb3MgPSBQ
b3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBjaCA9PSBmcm9tID8gZnJvbU91dHNpZGUgOiB0b091dHNp
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGlmZiA8IDAgPyAtMSA6IHhEaWZm
ID8gMSA6IDApOwogICAgICAgICByZXR1cm4gcG9zOwogICAgICAgfQogICAgICAgdmFyIHN0ZXAg
PSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUgPSBmcm9tICsgc3RlcDsKQEAgLTE0MTEsNyAr
MTQzMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBzdXBwb3J0
ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQogICBmdW5jdGlvbiByZWFk
SW5wdXQoY20pIHsKICAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0LCBwcmV2SW5wdXQg
PSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jLCBzZWwgPSBkb2Muc2VsOwotICAg
IGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5wdXQpIHx8IGlzUmVhZE9u
bHkoY20pKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8IGhhc1Nl
bGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20uc3RhdGUuZGlzYWJsZUlucHV0
KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKICAgICBpZiAodGV4
dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaWUgJiYgIWllX2x0OSAmJiBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID09
PSB0ZXh0KSB7CkBAIC0xNDI5LDExICsxNDUxLDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSAocHJldklu
cHV0Lmxlbmd0aCAtIHNhbWUpKTsKICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYg
cG9zRXEoZnJvbSwgdG8pICYmICFjbS5zdGF0ZS5wYXN0ZUluY29taW5nKQogICAgICAgdG8gPSBQ
b3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0
by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNhbWUpKSk7Ci0gICAgdmFyIHVwZGF0ZUlucHV0ID0gY20u
Y3VyT3AudXBkYXRlSW5wdXQ7Ci0gICAgbWFrZUNoYW5nZShjbS5kb2MsIHtmcm9tOiBmcm9tLCB0
bzogdG8sIHRleHQ6IHNwbGl0TGluZXModGV4dC5zbGljZShzYW1lKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnaW46IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogIitp
bnB1dCJ9LCAiZW5kIik7CiAKKyAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJ
bnB1dDsKKyAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBz
cGxpdExpbmVzKHRleHQuc2xpY2Uoc2FtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICBvcmln
aW46IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogIitpbnB1dCJ9OworICAgIG1h
a2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCwgImVuZCIpOwogICAgIGNtLmN1ck9wLnVwZGF0
ZUlucHV0ID0gdXBkYXRlSW5wdXQ7CisgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBj
bSwgY2hhbmdlRXZlbnQpOworCiAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCB8fCB0ZXh0Lmlu
ZGV4T2YoIlxuIikgPiAtMSkgaW5wdXQudmFsdWUgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9ICIi
OwogICAgIGVsc2UgY20uZGlzcGxheS5wcmV2SW5wdXQgPSB0ZXh0OwogICAgIGlmICh3aXRoT3Ap
IGVuZE9wZXJhdGlvbihjbSk7CkBAIC0xNDc0LDYgKzE0OTksNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0
aW9uKGNtLCBvbk1vdXNlRG93bikpOwogICAgIGlmIChpZSkKICAgICAgIG9uKGQuc2Nyb2xsZXIs
ICJkYmxjbGljayIsIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoc2ln
bmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91
c2UoY20sIGUpOwogICAgICAgICBpZiAoIXBvcyB8fCBjbGlja0luR3V0dGVyKGNtLCBlKSB8fCBl
dmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47CiAgICAgICAgIGVfcHJldmVudERl
ZmF1bHQoZSk7CkBAIC0xNDgxLDcgKzE1MDcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3Jk
LnRvKTsKICAgICAgIH0pKTsKICAgICBlbHNlCi0gICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xp
Y2siLCBlX3ByZXZlbnREZWZhdWx0KTsKKyAgICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIs
IGZ1bmN0aW9uKGUpIHsgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGVfcHJldmVudERlZmF1bHQo
ZSk7IH0pOwogICAgIG9uKGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7
CiAgICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7CiAg
ICAgfSk7CkBAIC0xNTEzLDExICsxNTM5LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCiAgICAg
b24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxUb3Ag
PSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwogCisgICAgdmFyIHJlc2l6ZVRpbWVyOwog
ICAgIGZ1bmN0aW9uIG9uUmVzaXplKCkgewotICAgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxp
bmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy4KLSAgICAgIGQuY2FjaGVkQ2hhcldpZHRo
ID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKLSAgICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAg
ICAgIHJ1bkluT3AoY20sIGJpbmQocmVnQ2hhbmdlLCBjbSkpOworICAgICAgaWYgKHJlc2l6ZVRp
bWVyID09IG51bGwpIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmVzaXplVGltZXIgPSBudWxsOworICAgICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGlu
ZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgorICAgICAgICBkLmNhY2hlZENoYXJXaWR0
aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOworICAg
ICAgICBjbGVhckNhY2hlcyhjbSk7CisgICAgICAgIHJ1bkluT3AoY20sIGJpbmQocmVnQ2hhbmdl
LCBjbSkpOworICAgICAgfSwgMTAwKTsKICAgICB9CiAgICAgb24od2luZG93LCAicmVzaXplIiwg
b25SZXNpemUpOwogICAgIC8vIEFib3ZlIGhhbmRsZXIgaG9sZHMgb24gdG8gdGhlIGVkaXRvciBh
bmQgaXRzIGRhdGEgc3RydWN0dXJlcy4KQEAgLTE1MzEsNyArMTU2MSw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHNldFRpbWVvdXQodW5yZWdpc3RlciwgNTAwMCk7
CiAKICAgICBvbihkLmlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsK
LSAgICAgIGlmIChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50
KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBl
KSB8fCBjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBh
ZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICAgaWYgKGUua2V5Q29kZSA9PSAxNikgY20uZG9jLnNl
bC5zaGlmdCA9IGZhbHNlOwogICAgIH0pKTsKICAgICBvbihkLmlucHV0LCAiaW5wdXQiLCBiaW5k
KGZhc3RQb2xsLCBjbSkpOwpAQCAtMTU0MSw3ICsxNTcxLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwgY20p
KTsKIAogICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKLSAgICAgIGlmIChjbS5vcHRpb25zLm9uRHJh
Z0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47
CisgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25EcmFnRXZl
bnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAg
ICAgIGVfc3RvcChlKTsKICAgICB9CiAgICAgaWYgKGNtLm9wdGlvbnMuZHJhZ0Ryb3ApIHsKQEAg
LTE1ODAsOSArMTYxMCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IGZ1bmN0aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgewogICAgIGZvciAodmFyIG4gPSBl
X3RhcmdldChlKTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKLSAg
ICAgIGlmICghbikgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoL1xiQ29kZU1pcnJvci0oPzpsaW5l
KT93aWRnZXRcYi8udGVzdChuLmNsYXNzTmFtZSkgfHwKLSAgICAgICAgICBuLnBhcmVudE5vZGUg
PT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOworICAg
ICAgaWYgKCFuIHx8IG4uaWdub3JlRXZlbnRzIHx8IG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNp
emVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKQEAg
LTE2MDIsNiArMTYzMCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljazsKICAgZnVuY3Rpb24gb25Nb3VzZURvd24o
ZSkgeworICAgIGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkgcmV0dXJuOwogICAgIHZhciBj
bSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5z
ZWw7CiAgICAgc2VsLnNoaWZ0ID0gZS5zaGlmdEtleTsKIApAQCAtMTcyNSw4ICsxNzU0LDYgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBmdW5jdGlvbiBkb25lKGUp
IHsKICAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91
c2UoY20sIGUpOwotICAgICAgaWYgKGN1cikgZG9TZWxlY3QoY3VyKTsKICAgICAgIGVfcHJldmVu
dERlZmF1bHQoZSk7CiAgICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAgIG9mZihkb2N1bWVudCwg
Im1vdXNlbW92ZSIsIG1vdmUpOwpAQCAtMTc0MiwxMSArMTc2OSw0MSBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CiAg
IH0KIAorICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7CisgICAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5OworICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVu
dFk7IH0KKyAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaWYgKG1YID49IE1h
dGguZmxvb3IoZ2V0UmVjdChkaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwor
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVy
Q2xpY2siKSkgcmV0dXJuIHRydWU7CisKKyAgICB2YXIgbGluZUJveCA9IGdldFJlY3QoZGlzcGxh
eS5saW5lRGl2KTsKKyAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7Cisg
ICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgeworICAgICAgdmFy
IGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKKyAgICAgIGlmIChnICYmIGdldFJl
Y3QoZykucmlnaHQgPj0gbVgpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20u
ZG9jLCBtWSk7CisgICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07Cisg
ICAgICAgIHNpZ25hbExhdGVyKGNtLCAiZ3V0dGVyQ2xpY2siLCBjbSwgbGluZSwgZ3V0dGVyLCBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9
CisKKyAgLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUg
aXQnbGwgc29tZXRpbWVzCisgIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2YgZHJhZy1yZWxhdGVkIGV2
ZW50cyByaWdodCBhZnRlciB0aGUgZHJvcCAoIzE1NTEpCisgIHZhciBsYXN0RHJvcCA9IDA7CisK
ICAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChldmVu
dEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8IChjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNt
Lm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSkKKyAgICBpZiAoc2lnbmFsRE9N
RXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgKGNtLm9wdGlv
bnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkp
KQogICAgICAgcmV0dXJuOwogICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKGllKSBs
YXN0RHJvcCA9ICtuZXcgRGF0ZTsKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0
cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICBpZiAoIXBvcyB8fCBpc1Jl
YWRPbmx5KGNtKSkgcmV0dXJuOwogICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2lu
ZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHsKQEAgLTE3ODYsNDEgKzE4NDMsMTYgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rp
b24gY2xpY2tJbkd1dHRlcihjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsK
LSAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9Ci0gICAgY2F0
Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGdldFJl
Y3QoZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsKLSAgICBlX3ByZXZlbnRE
ZWZhdWx0KGUpOwotICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNsaWNrIikpIHJldHVy
biB0cnVlOwotCi0gICAgdmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0g
ICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20pIHJldHVybiB0cnVlOwotICAgIG1ZIC09IGxpbmVC
b3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
bS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBnID0gZGlzcGxheS5n
dXR0ZXJzLmNoaWxkTm9kZXNbaV07Ci0gICAgICBpZiAoZyAmJiBnZXRSZWN0KGcpLnJpZ2h0ID49
IG1YKSB7Ci0gICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpOwotICAg
ICAgICB2YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwotICAgICAgICBzaWduYWxM
YXRlcihjbSwgImd1dHRlckNsaWNrIiwgY20sIGxpbmUsIGd1dHRlciwgZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCiAgIGZ1bmN0aW9u
IG9uRHJhZ1N0YXJ0KGNtLCBlKSB7Ci0gICAgaWYgKGllICYmICFjbS5zdGF0ZS5kcmFnZ2luZ1Rl
eHQpIHsgZV9zdG9wKGUpOyByZXR1cm47IH0KLSAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNw
bGF5LCBlKSkgcmV0dXJuOworICAgIGlmIChpZSAmJiAoIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8
fCArbmV3IERhdGUgLSBsYXN0RHJvcCA8IDEwMCkpIHsgZV9zdG9wKGUpOyByZXR1cm47IH0KKyAg
ICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwg
ZSkpIHJldHVybjsKIAogICAgIHZhciB0eHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICBlLmRh
dGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgdHh0KTsKIAogICAgIC8vIFVzZSBkdW1teSBpbWFn
ZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuCiAgICAgLy8gUmVjZW50IFNhZmFy
aSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlzIGhhcHBlbnMs
IHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLgotICAgIGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFn
SW1hZ2UpIHsKKyAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkp
IHsKICAgICAgIHZhciBpbWcgPSBlbHQoImltZyIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogZml4
ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsKICAgICAgIGlmIChvcGVyYSkgewogICAgICAgICBpbWcu
d2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKQEAgLTE4MjgsMTUgKzE4NjAsNiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3Ig
T3BlcmEgd29uJ3QgdXNlIG91ciBpbWFnZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbgogICAgICAg
ICBpbWcuX3RvcCA9IGltZy5vZmZzZXRUb3A7CiAgICAgICB9Ci0gICAgICBpZiAoc2FmYXJpKSB7
Ci0gICAgICAgIGlmIChjbS5kaXNwbGF5LmRyYWdJbWcpIHsKLSAgICAgICAgICBpbWcgPSBjbS5k
aXNwbGF5LmRyYWdJbWc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY20uZGlzcGxheS5k
cmFnSW1nID0gaW1nOwotICAgICAgICAgIGltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0
LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOwot
ICAgICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChpbWcpOwotICAgICAgICB9
Ci0gICAgICB9CiAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTsK
ICAgICAgIGlmIChvcGVyYSkgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsKICAgICB9
CkBAIC0xODQ5LDYgKzE4NzIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJW
LnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSB2YWw7
CiAgICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSk7CisgICAgc3RhcnRXb3JrZXIo
Y20sIDEwMCk7CiAgIH0KICAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9s
bGVyKSB7CiAgICAgaWYgKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBN
YXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSByZXR1cm47CkBAIC0xOTgxLDgg
KzIwMDUsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHN0
YXJ0TWFwID0gZ2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5TWFwKSwgbmV4dCA9IHN0YXJ0TWFwLmF1
dG87CiAgICAgY2xlYXJUaW1lb3V0KG1heWJlVHJhbnNpdGlvbik7CiAgICAgaWYgKG5leHQgJiYg
IWlzTW9kaWZpZXJLZXkoZSkpIG1heWJlVHJhbnNpdGlvbiA9IHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7Ci0gICAgICBpZiAoZ2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5TWFwKSA9PSBzdGFydE1hcCkK
KyAgICAgIGlmIChnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApID09IHN0YXJ0TWFwKSB7CiAg
ICAgICAgIGNtLm9wdGlvbnMua2V5TWFwID0gKG5leHQuY2FsbCA/IG5leHQuY2FsbChudWxsLCBj
bSkgOiBuZXh0KTsKKyAgICAgICAga2V5TWFwQ2hhbmdlZChjbSk7CisgICAgICB9CiAgICAgfSwg
NTApOwogCiAgICAgdmFyIG5hbWUgPSBrZXlOYW1lKGUsIHRydWUpLCBoYW5kbGVkID0gZmFsc2U7
CkBAIC0xOTk1LDE3ICsyMDIxLDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgLy8gJ2dvJykgYm91bmQgdG8gdGhlIGtleW5hbWUgd2l0aG91dCAnU2hpZnQtJy4K
ICAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkoIlNoaWZ0LSIgKyBuYW1lLCBrZXltYXBzLCBmdW5j
dGlvbihiKSB7cmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7fSkKICAgICAgICAg
ICAgICB8fCBsb29rdXBLZXkobmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikgewotICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJzdHJpbmciICYmIC9eZ29bQS1aXS8udGVzdChiKSkg
cmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7CisgICAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIGIgPT0gInN0cmluZyIgPyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlvbikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkobmFtZSwg
a2V5bWFwcywgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSk7
CiAgICAgfQotICAgIGlmIChoYW5kbGVkID09ICJzdG9wIikgaGFuZGxlZCA9IGZhbHNlOwogCiAg
ICAgaWYgKGhhbmRsZWQpIHsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgICByZXN0
YXJ0QmxpbmsoY20pOwogICAgICAgaWYgKGllX2x0OSkgeyBlLm9sZEtleUNvZGUgPSBlLmtleUNv
ZGU7IGUua2V5Q29kZSA9IDA7IH0KKyAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5SGFuZGxlZCIs
IGNtLCBuYW1lLCBlKTsKICAgICB9CiAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgIH0KQEAgLTIwMTYs
NiArMjA0Myw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmICho
YW5kbGVkKSB7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgcmVzdGFydEJsaW5r
KGNtKTsKKyAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5SGFuZGxlZCIsIGNtLCAiJyIgKyBjaCAr
ICInIiwgZSk7CiAgICAgfQogICAgIHJldHVybiBoYW5kbGVkOwogICB9CkBAIC0yMDI1LDcgKzIw
NTMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgY20gPSB0
aGlzOwogICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CiAgICAgaWYgKGll
ICYmIGUua2V5Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KLSAgICBpZiAo
Y20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3Rv
cChlKSkpIHJldHVybjsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlv
bnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSBy
ZXR1cm47CiAgICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7CiAgICAgLy8gSUUgZG9lcyBzdHJhbmdl
IHRoaW5ncyB3aXRoIGVzY2FwZS4KICAgICBjbS5kb2Muc2VsLnNoaWZ0ID0gY29kZSA9PSAxNiB8
fCBlLnNoaWZ0S2V5OwpAQCAtMjA0MSw3ICsyMDY5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICAgdmFyIGNtID0g
dGhpczsKLSAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlF
dmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20s
IGUpIHx8IGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20s
IGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJD
b2RlID0gZS5jaGFyQ29kZTsKICAgICBpZiAob3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBl
ZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJu
O30KICAgICBpZiAoKChvcGVyYSAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgfHwga2h0
bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47CkBAIC0yMTM5LDExICsyMTY3
LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFVQREFUSU5H
CiAKLSAgZnVuY3Rpb24gY2hhbmdlRW5kKGNoYW5nZSkgeworICB2YXIgY2hhbmdlRW5kID0gQ29k
ZU1pcnJvci5jaGFuZ2VFbmQgPSBmdW5jdGlvbihjaGFuZ2UpIHsKICAgICBpZiAoIWNoYW5nZS50
ZXh0KSByZXR1cm4gY2hhbmdlLnRvOwogICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSAr
IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEsCiAgICAgICAgICAgICAgICBsc3QoY2hhbmdlLnRleHQp
Lmxlbmd0aCArIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkp
OwotICB9CisgIH07CiAKICAgLy8gTWFrZSBzdXJlIGEgcG9zaXRpb24gd2lsbCBiZSB2YWxpZCBh
ZnRlciB0aGUgZ2l2ZW4gY2hhbmdlLgogICBmdW5jdGlvbiBjbGlwUG9zdENoYW5nZShkb2MsIGNo
YW5nZSwgcG9zKSB7CkBAIC0yMTg1LDIxICsyMjEzLDIxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB7YW5jaG9yOiBhZGp1c3RQb3MoZG9jLnNlbC5hbmNo
b3IpLCBoZWFkOiBhZGp1c3RQb3MoZG9jLnNlbC5oZWFkKX07CiAgIH0KIAotICBmdW5jdGlvbiBm
aWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlLCB1cGRhdGUpIHsKICAgICB2YXIgb2JqID0gewogICAgICAgY2FuY2VsZWQ6IGZhbHNl
LAogICAgICAgZnJvbTogY2hhbmdlLmZyb20sCiAgICAgICB0bzogY2hhbmdlLnRvLAogICAgICAg
dGV4dDogY2hhbmdlLnRleHQsCiAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sCi0gICAgICB1
cGRhdGU6IGZ1bmN0aW9uKGZyb20sIHRvLCB0ZXh0LCBvcmlnaW4pIHsKLSAgICAgICAgaWYgKGZy
b20pIHRoaXMuZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKTsKLSAgICAgICAgaWYgKHRvKSB0aGlz
LnRvID0gY2xpcFBvcyhkb2MsIHRvKTsKLSAgICAgICAgaWYgKHRleHQpIHRoaXMudGV4dCA9IHRl
eHQ7Ci0gICAgICAgIGlmIChvcmlnaW4gIT09IHVuZGVmaW5lZCkgdGhpcy5vcmlnaW4gPSBvcmln
aW47Ci0gICAgICB9LAogICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxlZCA9
IHRydWU7IH0KICAgICB9OworICAgIGlmICh1cGRhdGUpIG9iai51cGRhdGUgPSBmdW5jdGlvbihm
cm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7CisgICAgICBpZiAoZnJvbSkgdGhpcy5mcm9tID0gY2xp
cFBvcyhkb2MsIGZyb20pOworICAgICAgaWYgKHRvKSB0aGlzLnRvID0gY2xpcFBvcyhkb2MsIHRv
KTsKKyAgICAgIGlmICh0ZXh0KSB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgaWYgKG9yaWdpbiAh
PT0gdW5kZWZpbmVkKSB0aGlzLm9yaWdpbiA9IG9yaWdpbjsKKyAgICB9OwogICAgIHNpZ25hbChk
b2MsICJiZWZvcmVDaGFuZ2UiLCBkb2MsIG9iaik7CiAgICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRv
Yy5jbSwgImJlZm9yZUNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKIApAQCAtMjIxNiw3ICsyMjQ0LDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogCiAgICAgaWYgKGhh
c0hhbmRsZXIoZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9j
LmNtLCAiYmVmb3JlQ2hhbmdlIikpIHsKLSAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2Ms
IGNoYW5nZSk7CisgICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHRydWUp
OwogICAgICAgaWYgKCFjaGFuZ2UpIHJldHVybjsKICAgICB9CiAKQEAgLTIyNTUsMTUgKzIyODMs
MjMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGhpc3QgPSBk
b2MuaGlzdG9yeTsKICAgICB2YXIgZXZlbnQgPSAodHlwZSA9PSAidW5kbyIgPyBoaXN0LmRvbmUg
OiBoaXN0LnVuZG9uZSkucG9wKCk7CiAgICAgaWYgKCFldmVudCkgcmV0dXJuOwotICAgIGhpc3Qu
ZGlydHlDb3VudGVyICs9IHR5cGUgPT0gInVuZG8iID8gLTEgOiAxOwogCiAgICAgdmFyIGFudGkg
PSB7Y2hhbmdlczogW10sIGFuY2hvckJlZm9yZTogZXZlbnQuYW5jaG9yQWZ0ZXIsIGhlYWRCZWZv
cmU6IGV2ZW50LmhlYWRBZnRlciwKLSAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjogZXZlbnQu
YW5jaG9yQmVmb3JlLCBoZWFkQWZ0ZXI6IGV2ZW50LmhlYWRCZWZvcmV9OworICAgICAgICAgICAg
ICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZlbnQuaGVh
ZEJlZm9yZSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259Owog
ICAgICh0eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lKS5wdXNoKGFudGkp
OworICAgIGhpc3QuZ2VuZXJhdGlvbiA9IGV2ZW50LmdlbmVyYXRpb24gfHwgKytoaXN0Lm1heEdl
bmVyYXRpb247CisKKyAgICB2YXIgZmlsdGVyID0gaGFzSGFuZGxlcihkb2MsICJiZWZvcmVDaGFu
Z2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVDaGFuZ2UiKTsKIAog
ICAgIGZvciAodmFyIGkgPSBldmVudC5jaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CiAgICAgICB2YXIgY2hhbmdlID0gZXZlbnQuY2hhbmdlc1tpXTsKICAgICAgIGNoYW5nZS5vcmln
aW4gPSB0eXBlOworICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdl
LCBmYWxzZSkpIHsKKyAgICAgICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51
bmRvbmUpLmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKwogICAgICAgYW50
aS5jaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKIAog
ICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwg
bnVsbCkKQEAgLTI1MjcsOSArMjU2Myw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICBmdW5jdGlvbiBzY3JvbGxDdXJzb3JJbnRvVmlldyhjbSkgewogICAgIHZhciBjb29y
ZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY20uZG9jLnNlbC5oZWFkLCBjbS5vcHRpb25zLmN1
cnNvclNjcm9sbE1hcmdpbik7CiAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSByZXR1cm47Ci0g
ICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIp
LCBkb1Njcm9sbCA9IG51bGwsIHBUb3AgPSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOwotICAgIGlm
IChjb29yZHMudG9wICsgcFRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7Ci0gICAg
ZWxzZSBpZiAoY29vcmRzLmJvdHRvbSArIHBUb3AgKyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhl
aWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgZG9TY3JvbGwg
PSBmYWxzZTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGdldFJlY3QoZGlz
cGxheS5zaXplciksIGRvU2Nyb2xsID0gbnVsbDsKKyAgICBpZiAoY29vcmRzLnRvcCArIGJveC50
b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7CisgICAgZWxzZSBpZiAoY29vcmRzLmJvdHRvbSArIGJv
eC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
bGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwogICAgIGlmIChkb1Njcm9sbCAhPSBudWxs
ICYmICFwaGFudG9tKSB7CiAgICAgICB2YXIgaGlkZGVuID0gZGlzcGxheS5jdXJzb3Iuc3R5bGUu
ZGlzcGxheSA9PSAibm9uZSI7CiAgICAgICBpZiAoaGlkZGVuKSB7CkBAIC0yNTY3LDEyICsyNjAz
LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAKICAgZnVuY3Rp
b24gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCB4MSwgeTEsIHgyLCB5MikgewotICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheSwgcHQgPSBwYWRkaW5nVG9wKGRpc3BsYXkpOwotICAgIHkxICs9IHB0
OyB5MiArPSBwdDsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNuYXBNYXJnaW4gPSB0
ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOwogICAgIGlmICh5MSA8IDApIHkxID0gMDsKICAgICB2YXIg
c2NyZWVuID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZiwg
c2NyZWVudG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AsIHJlc3VsdCA9IHt9OwogICAg
IHZhciBkb2NCb3R0b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxheSk7Ci0g
ICAgdmFyIGF0VG9wID0geTEgPCBwdCArIDEwLCBhdEJvdHRvbSA9IHkyICsgcHQgPiBkb2NCb3R0
b20gLSAxMDsKKyAgICB2YXIgYXRUb3AgPSB5MSA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0geTIg
PiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luOwogICAgIGlmICh5MSA8IHNjcmVlbnRvcCkgewogICAg
ICAgcmVzdWx0LnNjcm9sbFRvcCA9IGF0VG9wID8gMCA6IHkxOwogICAgIH0gZWxzZSBpZiAoeTIg
PiBzY3JlZW50b3AgKyBzY3JlZW4pIHsKQEAgLTI2MDksNyArMjY0NCw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGluZGVudExpbmUoY20sIG4sIGhv
dywgYWdncmVzc2l2ZSkgewogICAgIHZhciBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFob3cpIGhv
dyA9ICJhZGQiOworICAgIGlmIChob3cgPT0gbnVsbCkgaG93ID0gImFkZCI7CiAgICAgaWYgKGhv
dyA9PSAic21hcnQiKSB7CiAgICAgICBpZiAoIWNtLmRvYy5tb2RlLmluZGVudCkgaG93ID0gInBy
ZXYiOwogICAgICAgZWxzZSB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbik7CkBAIC0y
NjMyLDYgKzI2NjcsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBjbS5vcHRpb25zLmluZGVudFVuaXQ7CiAgICAgfSBl
bHNlIGlmIChob3cgPT0gInN1YnRyYWN0IikgewogICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFj
ZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdDsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0g
Im51bWJlciIpIHsKKyAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBob3c7CiAgICAgfQog
ICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pOwogCkBAIC0yNzIwLDcg
KzI3NTcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24g
ZmluZFdvcmRBdChsaW5lLCBwb3MpIHsKICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBv
cy5jaDsKICAgICBpZiAobGluZSkgewotICAgICAgaWYgKHBvcy5hZnRlciA9PT0gZmFsc2UgfHwg
ZW5kID09IGxpbmUubGVuZ3RoKSAtLXN0YXJ0OyBlbHNlICsrZW5kOworICAgICAgaWYgKChwb3Mu
eFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSAr
K2VuZDsKICAgICAgIHZhciBzdGFydENoYXIgPSBsaW5lLmNoYXJBdChzdGFydCk7CiAgICAgICB2
YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhcikgPyBpc1dvcmRDaGFyCiAgICAgICAgIDog
L1xzLy50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5jdGlvbihjaCkge3JldHVybiAvXHMvLnRlc3QoY2gp
O30KQEAgLTI3NjEsNyArMjc5OCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7CiAgICAgICB2YXIgbWFwcyA9IHRo
aXMuc3RhdGUua2V5TWFwczsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7
ICsraSkKLSAgICAgICAgaWYgKCh0eXBlb2YgbWFwID09ICJzdHJpbmciID8gbWFwc1tpXS5uYW1l
IDogbWFwc1tpXSkgPT0gbWFwKSB7CisgICAgICAgIGlmIChtYXBzW2ldID09IG1hcCB8fCAodHlw
ZW9mIG1hcHNbaV0gIT0gInN0cmluZyIgJiYgbWFwc1tpXS5uYW1lID09IG1hcCkpIHsKICAgICAg
ICAgICBtYXBzLnNwbGljZShpLCAxKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQpAQCAtMjc3Nyw3ICsyODE0LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgcmVtb3ZlT3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMpIHsKICAg
ICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7CiAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdmVybGF5c1tp
XS5tb2RlU3BlYyA9PSBzcGVjKSB7CisgICAgICAgIHZhciBjdXIgPSBvdmVybGF5c1tpXS5tb2Rl
U3BlYzsKKyAgICAgICAgaWYgKGN1ciA9PSBzcGVjIHx8IHR5cGVvZiBzcGVjID09ICJzdHJpbmci
ICYmIGN1ci5uYW1lID09IHNwZWMpIHsKICAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7
CiAgICAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7CiAgICAgICAgICAgcmVnQ2hhbmdlKHRo
aXMpOwpAQCAtMjc4Nyw3ICsyODI1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgfSksCiAKICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24o
biwgZGlyLCBhZ2dyZXNzaXZlKSB7Ci0gICAgICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIikg
eworICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIgJiYgdHlwZW9mIGRpciAhPSAibnVt
YmVyIikgewogICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IHRoaXMub3B0aW9ucy5zbWFy
dEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFk
ZCIgOiAic3VidHJhY3QiOwogICAgICAgfQpAQCAtMjgwMiwxMCArMjg0MCwxMCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9r
ZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAgLy8gdGhhdCB3
YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLgotICAg
IGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykgeworICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBv
cywgcHJlY2lzZSkgewogICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwogICAgICAgcG9zID0gY2xp
cFBvcyhkb2MsIHBvcyk7Ci0gICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBw
b3MubGluZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOworICAgICAgdmFyIHN0YXRlID0gZ2V0U3Rh
dGVCZWZvcmUodGhpcywgcG9zLmxpbmUsIHByZWNpc2UpLCBtb2RlID0gdGhpcy5kb2MubW9kZTsK
ICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTsKICAgICAgIHZhciBzdHJl
YW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwog
ICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewpAQCAt
MjgyMCwxMCArMjg1OCwzNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsKICAgICB9LAogCi0gICAgZ2V0U3RhdGVBZnRlcjog
ZnVuY3Rpb24obGluZSkgeworICAgIGdldFRva2VuVHlwZUF0OiBmdW5jdGlvbihwb3MpIHsKKyAg
ICAgIHBvcyA9IGNsaXBQb3ModGhpcy5kb2MsIHBvcyk7CisgICAgICB2YXIgc3R5bGVzID0gZ2V0
TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSkpOworICAgICAgdmFy
IGJlZm9yZSA9IDAsIGFmdGVyID0gKHN0eWxlcy5sZW5ndGggLSAxKSAvIDIsIGNoID0gcG9zLmNo
OworICAgICAgaWYgKGNoID09IDApIHJldHVybiBzdHlsZXNbMl07CisgICAgICBmb3IgKDs7KSB7
CisgICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7CisgICAgICAgIGlmICgo
bWlkID8gc3R5bGVzW21pZCAqIDIgLSAxXSA6IDApID49IGNoKSBhZnRlciA9IG1pZDsKKyAgICAg
ICAgZWxzZSBpZiAoc3R5bGVzW21pZCAqIDIgKyAxXSA8IGNoKSBiZWZvcmUgPSBtaWQgKyAxOwor
ICAgICAgICBlbHNlIHJldHVybiBzdHlsZXNbbWlkICogMiArIDJdOworICAgICAgfQorICAgIH0s
CisKKyAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykgeworICAgICAgdmFyIG1vZGUgPSB0aGlz
LmRvYy5tb2RlOworICAgICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgcmV0dXJuIG1vZGU7CisgICAg
ICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0KHBvcyku
c3RhdGUpLm1vZGU7CisgICAgfSwKKworICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBl
KSB7CisgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybjsKKyAg
ICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwgbW9kZSA9IHRoaXMuZ2V0TW9kZUF0KHBvcyk7
CisgICAgICByZXR1cm4gbW9kZVt0eXBlXSAmJiBoZWxwW21vZGVbdHlwZV1dIHx8CisgICAgICAg
IG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVyVHlwZV0gfHwKKyAgICAgICAgaGVs
cFttb2RlLm5hbWVdOworICAgIH0sCisKKyAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5l
LCBwcmVjaXNlKSB7CiAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CiAgICAgICBsaW5lID0gY2xp
cExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUp
OwotICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxpbmUgKyAxKTsKKyAgICAgIHJl
dHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSk7CiAgICAgfSwKIAog
ICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKQEAgLTI4NDMsNiArMjkw
OCwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBj
b29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTsKICAgICB9LAogCisgICAg
bGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1vZGUpIHsKKyAgICAgIGhlaWdodCA9IGZy
b21Db29yZFN5c3RlbSh0aGlzLCB7dG9wOiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdl
IikudG9wOworICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhp
cy5kaXNwbGF5LnZpZXdPZmZzZXQpOworICAgIH0sCisgICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlv
bihsaW5lLCBtb2RlKSB7CisgICAgICB2YXIgZW5kID0gZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5m
aXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOworICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJz
dCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OworICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsg
bGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KKyAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0
aGlzLmRvYywgbGluZSk7CisgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGdldExp
bmUodGhpcy5kb2MsIGxpbmUpLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRv
cCArCisgICAgICAgIChlbmQgPyBsaW5lT2JqLmhlaWdodCA6IDApOworICAgIH0sCisKICAgICBk
ZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlz
cGxheSk7IH0sCiAgICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFy
V2lkdGgodGhpcy5kaXNwbGF5KTsgfSwKIApAQCAtMjg3MSw3ICsyOTQ5LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBo
YW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4
dCIgPyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3
cmFwQ2xhc3MiOwogICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7Ci0g
ICAgICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiIikudGVzdChsaW5l
W3Byb3BdKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKCIoPzpe
fFxccykiICsgY2xzICsgIig/OiR8XFxzKSIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxz
ZTsKICAgICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICB9KTsKQEAgLTI4ODQsOSArMjk2MiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKICAgICAg
ICAgZWxzZSBpZiAoY2xzID09IG51bGwpIGxpbmVbcHJvcF0gPSBudWxsOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICB2YXIgdXBkID0gY3VyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIgKyBjbHMg
KyAiXFxiXFxzKnxcXHMqXFxiIiArIGNscyArICJcXGIiKSwgIiIpOwotICAgICAgICAgIGlmICh1
cGQgPT0gY3VyKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgbGluZVtwcm9wXSA9IHVwZCB8fCBu
dWxsOworICAgICAgICAgIHZhciBmb3VuZCA9IGN1ci5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxc
cyspIiArIGNscyArICIoPzokfFxccyspIikpOworICAgICAgICAgIGlmICghZm91bmQpIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBmb3VuZFswXS5sZW5n
dGg7CisgICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAo
IWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gIiIgOiAiICIpICsgY3VyLnNsaWNl
KGVuZCkgfHwgbnVsbDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0p
OwpAQCAtMjkzNCw3ICszMDEzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAgICAgICAg
ICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgIH0KLSAgICAgIG5vZGUu
c3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdUb3AoZGlzcGxheSkpICsgInB4IjsKKyAgICAgIG5v
ZGUuc3R5bGUudG9wID0gdG9wICsgInB4IjsKICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUu
c3R5bGUucmlnaHQgPSAiIjsKICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAg
IGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKQEAg
LTMwNDQsOSArMzEyMyw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgdGhpcy5yZWZyZXNoKCk7CiAgICAgfSwKIAotICAgIG9uOiBmdW5jdGlvbih0eXBlLCBmKSB7
b24odGhpcywgdHlwZSwgZik7fSwKLSAgICBvZmY6IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhp
cywgdHlwZSwgZik7fSwKLQogICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIHJ1bklu
T3AodGhpcywgZik7fSwKIAogICAgIHJlZnJlc2g6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbigp
IHsKQEAgLTMwNzAsNiArMzE0Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5
LnNjcm9sbGVyO30sCiAgICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5kaXNwbGF5Lmd1dHRlcnM7fQogICB9OworICBldmVudE1peGluKENvZGVNaXJyb3IpOwogCiAg
IC8vIE9QVElPTiBERUZBVUxUUwogCkBAIC0zMTk0LDcgKzMyNzEsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgfTsKIAogICBDb2RlTWlycm9yLmdldE1vZGUgPSBmdW5j
dGlvbihvcHRpb25zLCBzcGVjKSB7Ci0gICAgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUo
c3BlYyk7CisgICAgdmFyIHNwZWMgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKHNwZWMpOwogICAg
IHZhciBtZmFjdG9yeSA9IG1vZGVzW3NwZWMubmFtZV07CiAgICAgaWYgKCFtZmFjdG9yeSkgcmV0
dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShvcHRpb25zLCAidGV4dC9wbGFpbiIpOwogICAgIHZhciBt
b2RlT2JqID0gbWZhY3Rvcnkob3B0aW9ucywgc3BlYyk7CkBAIC0zMjA3LDYgKzMyODQsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9CiAgICAgbW9k
ZU9iai5uYW1lID0gc3BlYy5uYW1lOworCiAgICAgcmV0dXJuIG1vZGVPYmo7CiAgIH07CiAKQEAg
LTMyMzQsNiArMzMxMiwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
dmFyIGluaXRIb29rcyA9IFtdOwogICBDb2RlTWlycm9yLmRlZmluZUluaXRIb29rID0gZnVuY3Rp
b24oZikge2luaXRIb29rcy5wdXNoKGYpO307CiAKKyAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9y
LmhlbHBlcnMgPSB7fTsKKyAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlciA9IGZ1bmN0aW9uKHR5
cGUsIG5hbWUsIHZhbHVlKSB7CisgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUp
KSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHt9OworICAgIGhlbHBlcnNbdHlw
ZV1bbmFtZV0gPSB2YWx1ZTsKKyAgfTsKKwogICAvLyBNT0RFIFNUQVRFIEhBTkRMSU5HCiAKICAg
Ly8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVj
YXVzZSBtb2RlcwpAQCAtMzI3OSw2ICszMzYzLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgdmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwogICAgICAgY20u
cmVwbGFjZVJhbmdlKCIiLCBQb3MobCwgMCksIFBvcyhsKSwgIitkZWxldGUiKTsKICAgICB9LAor
ICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGN1ciA9IGNtLmdldEN1
cnNvcigpOworICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIDApLCBjdXIs
ICIrZGVsZXRlIik7CisgICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9
LAogICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCiAgICAgZ29Eb2NTdGFydDog
ZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7
fSwKQEAgLTMzNzQsNyArMzQ2Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICJBbHQtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkNtZC1MZWZ0IjogImdvTGluZVN0
YXJ0IiwgIkNtZC1SaWdodCI6ICJnb0xpbmVFbmQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91
cEJlZm9yZSIsCiAgICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEFmdGVyIiwgIkFs
dC1EZWxldGUiOiAiZGVsR3JvdXBBZnRlciIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZp
bmQiLAogICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIs
ICJDbWQtQWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIs
Ci0gICAgIkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsCisgICAg
IkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3Nw
YWNlIjogImRlbExpbmVMZWZ0IiwKICAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3ki
XQogICB9OwogICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDog
a2V5TWFwLnBjRGVmYXVsdDsKQEAgLTM0MTMsNyArMzUwMSw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsg
KytpKSB7CiAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChtYXBzW2ldKTsKLSAgICAgIGlmIChkb25l
KSByZXR1cm4gZG9uZTsKKyAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZSAhPSAic3RvcCI7CiAg
ICAgfQogICB9CiAgIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkoZXZlbnQpIHsKQEAgLTM1NjcsNiAr
MzY1NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHRoaXMuZG9j
ID0gZG9jOwogICB9CiAgIENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IFRleHRNYXJrZXI7CisgIGV2
ZW50TWl4aW4oVGV4dE1hcmtlcik7CiAKICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBm
dW5jdGlvbigpIHsKICAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwpAQCAt
MzU5NSw3ICszNjg0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
aWYgKG1pbiAhPSBudWxsICYmIGNtKSByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7CiAgICAg
dGhpcy5saW5lcy5sZW5ndGggPSAwOwogICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVl
OwotICAgIGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmRvYy5jYW50RWRpdCkgeworICAgIGlm
ICh0aGlzLmF0b21pYyAmJiB0aGlzLmRvYy5jYW50RWRpdCkgewogICAgICAgdGhpcy5kb2MuY2Fu
dEVkaXQgPSBmYWxzZTsKICAgICAgIGlmIChjbSkgcmVDaGVja1NlbGVjdGlvbihjbSk7CiAgICAg
fQpAQCAtMzY1OCw2ICszNzQ3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKICAgICAgIG1hcmtlci5jb2xsYXBzZWQg
PSB0cnVlOwogICAgICAgbWFya2VyLnJlcGxhY2VkV2l0aCA9IGVsdCgic3BhbiIsIFttYXJrZXIu
cmVwbGFjZWRXaXRoXSwgIkNvZGVNaXJyb3Itd2lkZ2V0Iik7CisgICAgICBpZiAoIW9wdGlvbnMu
aGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci5yZXBsYWNlZFdpdGguaWdub3JlRXZlbnRzID0gdHJ1
ZTsKICAgICB9CiAgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHNhd0NvbGxhcHNlZFNwYW5zID0g
dHJ1ZTsKIApAQCAtMzcwMCw3ICszNzkwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgfQogICAgIGlmIChjbSkgewogICAgICAgaWYgKHVwZGF0ZU1heExpbmUpIGNt
LmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgaWYgKG1hcmtlci5jbGFzc05hbWUg
fHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBz
ZWQpCisgICAgICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2Vy
LnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCiAgICAg
ICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSk7CiAgICAgICBpZiAobWFy
a2VyLmF0b21pYykgcmVDaGVja1NlbGVjdGlvbihjbSk7CiAgICAgfQpAQCAtMzcxOCw2ICszODA4
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAgIENv
ZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7CisgIGV2ZW50TWl4
aW4oU2hhcmVkVGV4dE1hcmtlcik7CiAKICAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xl
YXIgPSBmdW5jdGlvbigpIHsKICAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJu
OwpAQCAtMzgzMSw2ICszOTIyLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICB9CiAgICAgICB9CiAgICAgfQorICAgIGlmIChzYW1lTGluZSAmJiBmaXJzdCkg
eworICAgICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNw
YW5zCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQorICAgICAg
ICBpZiAoZmlyc3RbaV0uZnJvbSAhPSBudWxsICYmIGZpcnN0W2ldLmZyb20gPT0gZmlyc3RbaV0u
dG8gJiYgZmlyc3RbaV0ubWFya2VyLnR5cGUgIT0gImJvb2ttYXJrIikKKyAgICAgICAgICBmaXJz
dC5zcGxpY2UoaS0tLCAxKTsKKyAgICAgIGlmICghZmlyc3QubGVuZ3RoKSBmaXJzdCA9IG51bGw7
CisgICAgfQogCiAgICAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdOwogICAgIGlmICghc2FtZUxp
bmUpIHsKQEAgLTM5MjUsNiArNDAyMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgc3AgPSBzcHNbaV07CiAgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQp
IGNvbnRpbnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAg
ICBpZiAoc3AubWFya2VyLnJlcGxhY2VkV2l0aCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJv
bSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRv
YywgbGluZSwgc3ApKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zOTM4LDcgKzQw
MzcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB0
cnVlOwogICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3Ro
OyArK2kpIHsKICAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5t
YXJrZXIuY29sbGFwc2VkICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgorICAgICAgaWYgKHNwLm1h
cmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtlci5yZXBsYWNlZFdpdGggJiYgc3AuZnJvbSA9PSBz
cGFuLnRvICYmCiAgICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFy
a2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgogICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywg
bGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zOTYyLDExICs0MDYxLDEyIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBMSU5FIFdJREdFVFMKIAogICB2
YXIgTGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2Rl
LCBvcHRpb25zKSB7Ci0gICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhh
c093blByb3BlcnR5KG9wdCkpCisgICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRp
b25zKSBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0g
b3B0aW9uc1tvcHRdOwogICAgIHRoaXMuY20gPSBjbTsKICAgICB0aGlzLm5vZGUgPSBub2RlOwog
ICB9OworICBldmVudE1peGluKExpbmVXaWRnZXQpOwogICBmdW5jdGlvbiB3aWRnZXRPcGVyYXRp
b24oZikgewogICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgIHZhciB3aXRoT3AgPSAhdGhp
cy5jbS5jdXJPcDsKQEAgLTM5ODEsNyArNDA4MSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIGlmIChubyA9PSBudWxsIHx8ICF3cykgcmV0dXJuOwogICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxp
Y2UoaS0tLCAxKTsKICAgICBpZiAoIXdzLmxlbmd0aCkgdGhpcy5saW5lLndpZGdldHMgPSBudWxs
OworICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUodGhpcy5jbSwgdGhpcy5saW5l
KSA8IHRoaXMuY20uZG9jLnNjcm9sbFRvcDsKICAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGlu
ZSwgTWF0aC5tYXgoMCwgdGhpcy5saW5lLmhlaWdodCAtIHdpZGdldEhlaWdodCh0aGlzKSkpOwor
ICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKHRoaXMuY20sIDAsIC10aGlzLmhl
aWdodCk7CiAgICAgcmVnQ2hhbmdlKHRoaXMuY20sIG5vLCBubyArIDEpOwogICB9KTsKICAgTGlu
ZVdpZGdldC5wcm90b3R5cGUuY2hhbmdlZCA9IHdpZGdldE9wZXJhdGlvbihmdW5jdGlvbigpIHsK
QEAgLTQwMDUsMTAgKzQxMDcsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHdpZGdldCA9IG5ldyBMaW5lV2lkZ2V0KGNtLCBub2RlLCBvcHRpb25zKTsKICAg
ICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOwog
ICAgIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewotICAgICAgKGxpbmUu
d2lkZ2V0cyB8fCAobGluZS53aWRnZXRzID0gW10pKS5wdXNoKHdpZGdldCk7CisgICAgICB2YXIg
d2lkZ2V0cyA9IGxpbmUud2lkZ2V0cyB8fCAobGluZS53aWRnZXRzID0gW10pOworICAgICAgaWYg
KHdpZGdldC5pbnNlcnRBdCA9PSBudWxsKSB3aWRnZXRzLnB1c2god2lkZ2V0KTsKKyAgICAgIGVs
c2Ugd2lkZ2V0cy5zcGxpY2UoTWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgw
LCB3aWRnZXQuaW5zZXJ0QXQpKSwgMCwgd2lkZ2V0KTsKICAgICAgIHdpZGdldC5saW5lID0gbGlu
ZTsKICAgICAgIGlmICghbGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkgfHwgd2lkZ2V0LnNob3dJ
ZkhpZGRlbikgewotICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBs
aW5lKSA8IGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOworICAgICAgICB2YXIgYWJvdmVW
aXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lKSA8IGNtLmRvYy5zY3JvbGxUb3A7CiAgICAg
ICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lk
Z2V0KSk7CiAgICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKGNtLCAwLCB3
aWRnZXQuaGVpZ2h0KTsKICAgICAgIH0KQEAgLTQwMjEsMTIgKzQxMjUsMTIgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xk
IHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKICAgLy8gaGlnaGxpZ2h0aW5nIGlu
Zm8gKHRoZSBzdHlsZXMgYXJyYXkpLgotICBmdW5jdGlvbiBtYWtlTGluZSh0ZXh0LCBtYXJrZWRT
cGFucywgZXN0aW1hdGVIZWlnaHQpIHsKLSAgICB2YXIgbGluZSA9IHt0ZXh0OiB0ZXh0fTsKLSAg
ICBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBtYXJrZWRTcGFucyk7Ci0gICAgbGluZS5oZWlnaHQg
PSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KGxpbmUpIDogMTsKLSAgICByZXR1cm4g
bGluZTsKLSAgfQorICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9uKHRleHQs
IG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgeworICAgIHRoaXMudGV4dCA9IHRleHQ7Cisg
ICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpOworICAgIHRoaXMuaGVpZ2h0
ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7CisgIH07CisgIGV2
ZW50TWl4aW4oTGluZSk7CiAKICAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJr
ZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsKICAgICBsaW5lLnRleHQgPSB0ZXh0OwpAQCAtNDA1
MCw3ICs0MTU0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0
aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmKSB7CiAgICAgdmFyIGZsYXR0ZW5T
cGFucyA9IG1vZGUuZmxhdHRlblNwYW5zOwogICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkg
ZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7Ci0gICAgdmFyIGN1clRleHQg
PSAiIiwgY3VyU3R5bGUgPSBudWxsOworICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0g
bnVsbDsKICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25z
LnRhYlNpemUpLCBzdHlsZTsKICAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkg
bW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CkBAIC00
MDYyLDE0ICs0MTY2LDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgfSBlbHNlIHsKICAgICAgICAgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwog
ICAgICAgfQotICAgICAgdmFyIHN1YnN0ciA9IHN0cmVhbS5jdXJyZW50KCk7Ci0gICAgICBzdHJl
YW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5
bGUgIT0gc3R5bGUpIHsKLSAgICAgICAgaWYgKGN1clRleHQpIGYoY3VyVGV4dCwgY3VyU3R5bGUp
OwotICAgICAgICBjdXJUZXh0ID0gc3Vic3RyOyBjdXJTdHlsZSA9IHN0eWxlOwotICAgICAgfSBl
bHNlIGN1clRleHQgPSBjdXJUZXh0ICsgc3Vic3RyOworICAgICAgICBpZiAoY3VyU3RhcnQgPCBz
dHJlYW0uc3RhcnQpIGYoc3RyZWFtLnN0YXJ0LCBjdXJTdHlsZSk7CisgICAgICAgIGN1clN0YXJ0
ID0gc3RyZWFtLnN0YXJ0OyBjdXJTdHlsZSA9IHN0eWxlOworICAgICAgfQorICAgICAgc3RyZWFt
LnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICB9Ci0gICAgaWYgKGN1clRleHQpIGYoY3VyVGV4dCwg
Y3VyU3R5bGUpOworICAgIGlmIChjdXJTdGFydCA8IHN0cmVhbS5wb3MpIGYoc3RyZWFtLnBvcywg
Y3VyU3R5bGUpOwogICB9CiAKICAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3Rh
dGUpIHsKQEAgLTQwNzcsMjcgKzQxODAsMjQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJhc2VkIG9uIChmb3IgZWFz
eSBpbnZhbGlkYXRpb24pLgogICAgIHZhciBzdCA9IFtjbS5zdGF0ZS5tb2RlR2VuXTsKICAgICAv
LyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxlcwotICAgIHJ1bk1vZGUoY20sIGxpbmUu
dGV4dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBmdW5jdGlvbih0eHQsIHN0eWxlKSB7c3QucHVzaCh0
eHQsIHN0eWxlKTt9KTsKKyAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBz
dGF0ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkge3N0LnB1c2goZW5kLCBzdHlsZSk7fSk7CiAKICAg
ICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJheS4KICAgICBmb3IgKHZhciBvID0g
MDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsgKytvKSB7Ci0gICAgICB2YXIgb3Zlcmxh
eSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMTsKLSAgICAgIHJ1bk1vZGUoY20sIGxpbmUu
dGV4dCwgb3ZlcmxheS5tb2RlLCB0cnVlLCBmdW5jdGlvbih0eHQsIHN0eWxlKSB7Ci0gICAgICAg
IHZhciBzdGFydCA9IGksIGxlbiA9IHR4dC5sZW5ndGg7CisgICAgICB2YXIgb3ZlcmxheSA9IGNt
LnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwgYXQgPSAwOworICAgICAgcnVuTW9kZShjbSwgbGlu
ZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKKyAgICAg
ICAgdmFyIHN0YXJ0ID0gaTsKICAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQg
YXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAgICAg
IHdoaWxlIChsZW4pIHsKLSAgICAgICAgICB2YXIgY3VyID0gc3RbaV0sIGxlbl8gPSBjdXIubGVu
Z3RoOwotICAgICAgICAgIGlmIChsZW5fIDw9IGxlbikgewotICAgICAgICAgICAgbGVuIC09IGxl
bl87Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBjdXIu
c2xpY2UoMCwgbGVuKSwgc3RbaSsxXSwgY3VyLnNsaWNlKGxlbikpOwotICAgICAgICAgICAgbGVu
ID0gMDsKLSAgICAgICAgICB9CisgICAgICAgIHdoaWxlIChhdCA8IGVuZCkgeworICAgICAgICAg
IHZhciBpX2VuZCA9IHN0W2ldOworICAgICAgICAgIGlmIChpX2VuZCA+IGVuZCkKKyAgICAgICAg
ICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0W2krMV0sIGlfZW5kKTsKICAgICAgICAgICBpICs9
IDI7CisgICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIXN0eWxlKSByZXR1cm47CiAgICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkgewot
ICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCB0eHQsIHN0eWxlKTsKKyAgICAg
ICAgICBzdC5zcGxpY2Uoc3RhcnQsIGkgLSBzdGFydCwgZW5kLCBzdHlsZSk7CiAgICAgICAgICAg
aSA9IHN0YXJ0ICsgMjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBmb3IgKDsgc3RhcnQg
PCBpOyBzdGFydCArPSAyKSB7CkBAIC00MTM3LDM3ICs0MjM3LDMxIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAKICAgZnVuY3Rpb24gbGluZUNvbnRlbnQoY20sIHJl
YWxMaW5lLCBtZWFzdXJlKSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZSA9IHJlYWxMaW5lLCBsaW5l
QmVmb3JlLCBzYXdCZWZvcmUsIHNpbXBsZSA9IHRydWU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNv
bGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpKSB7Ci0gICAgICBzaW1wbGUgPSBmYWxzZTsKKyAgICB2
YXIgbWVyZ2VkLCBsaW5lID0gcmVhbExpbmUsIGVtcHR5ID0gdHJ1ZTsKKyAgICB3aGlsZSAobWVy
Z2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpCiAgICAgICBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIG1lcmdlZC5maW5kKCkuZnJvbS5saW5lKTsKLSAgICAgIGlmICghbGluZUJlZm9yZSkg
bGluZUJlZm9yZSA9IGxpbmU7Ci0gICAgfQogCiAgICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQo
InByZSIpLCBjb2w6IDAsIHBvczogMCwgZGlzcGxheTogIW1lYXN1cmUsCi0gICAgICAgICAgICAg
ICAgICAgbWVhc3VyZTogbnVsbCwgYWRkZWRPbmU6IGZhbHNlLCBjbTogY219OworICAgICAgICAg
ICAgICAgICAgIG1lYXN1cmU6IG51bGwsIG1lYXN1cmVkU29tZXRoaW5nOiBmYWxzZSwgY206IGNt
fTsKICAgICBpZiAobGluZS50ZXh0Q2xhc3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9IGxpbmUu
dGV4dENsYXNzOwogCiAgICAgZG8geworICAgICAgaWYgKGxpbmUudGV4dCkgZW1wdHkgPSBmYWxz
ZTsKICAgICAgIGJ1aWxkZXIubWVhc3VyZSA9IGxpbmUgPT0gcmVhbExpbmUgJiYgbWVhc3VyZTsK
ICAgICAgIGJ1aWxkZXIucG9zID0gMDsKICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZGVy
Lm1lYXN1cmUgPyBidWlsZFRva2VuTWVhc3VyZSA6IGJ1aWxkVG9rZW47CiAgICAgICBpZiAoKGll
IHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSkKICAgICAgICAgYnVp
bGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWlsZGVyLmFkZFRva2VuKTsK
LSAgICAgIGlmIChtZWFzdXJlICYmIHNhd0JlZm9yZSAmJiBsaW5lICE9IHJlYWxMaW5lICYmICFi
dWlsZGVyLmFkZGVkT25lKSB7Ci0gICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwotICAgICAgICBi
dWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKLSAgICAgIH0KICAgICAgIHZhciBuZXh0ID0gaW5zZXJ0
TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAg
ICAgc2F3QmVmb3JlID0gbGluZSA9PSBsaW5lQmVmb3JlOwotICAgICAgaWYgKG5leHQpIHsKLSAg
ICAgICAgbGluZSA9IGdldExpbmUoY20uZG9jLCBuZXh0LnRvLmxpbmUpOwotICAgICAgICBzaW1w
bGUgPSBmYWxzZTsKKyAgICAgIGlmIChtZWFzdXJlICYmIGxpbmUgPT0gcmVhbExpbmUgJiYgIWJ1
aWxkZXIubWVhc3VyZWRTb21ldGhpbmcpIHsKKyAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIu
cHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Cisg
ICAgICAgIGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgfQorICAgICAg
aWYgKG5leHQpIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbmV4dC50by5saW5lKTsKICAgICB9IHdo
aWxlIChuZXh0KTsKIAotICAgIGlmIChtZWFzdXJlICYmICFidWlsZGVyLmFkZGVkT25lKQotICAg
ICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHNpbXBsZSA/IGVsdCgic3Bh
biIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Cisg
ICAgaWYgKG1lYXN1cmUgJiYgIWJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgJiYgIW1lYXN1cmVb
MF0pCisgICAgICBtZWFzdXJlWzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZW1wdHkgPyBl
bHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3Vy
ZSkpOwogICAgIGlmICghYnVpbGRlci5wcmUuZmlyc3RDaGlsZCAmJiAhbGluZUlzSGlkZGVuKGNt
LmRvYywgcmVhbExpbmUpKQogICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIlx1MDBhMCIpKTsKIApAQCAtNDE5MSw3ICs0Mjg1LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICB2YXIgdG9rZW5TcGVjaWFsQ2hh
cnMgPSAvW1x0XHUwMDAwLVx1MDAxOVx1MDBhZFx1MjAwYlx1MjAyOFx1MjAyOVx1RkVGRl0vZzsK
LSAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwg
ZW5kU3R5bGUpIHsKKyAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwg
c3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7CiAgICAgaWYgKCF0ZXh0KSByZXR1cm47CiAg
ICAgaWYgKCF0b2tlblNwZWNpYWxDaGFycy50ZXN0KHRleHQpKSB7CiAgICAgICBidWlsZGVyLmNv
bCArPSB0ZXh0Lmxlbmd0aDsKQEAgLTQyMjQsNyArNDMxOCw5IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIiOwogICAg
ICAgaWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOwogICAgICAgaWYgKGVu
ZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5wcmUu
YXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUpKTsKKyAgICAgIHZh
ciB0b2tlbiA9IGVsdCgic3BhbiIsIFtjb250ZW50XSwgZnVsbFN0eWxlKTsKKyAgICAgIGlmICh0
aXRsZSkgdG9rZW4udGl0bGUgPSB0aXRsZTsKKyAgICAgIHJldHVybiBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZCh0b2tlbik7CiAgICAgfQogICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGNvbnRl
bnQpOwogICB9CkBAIC00MjM5LDkgKzQzMzUsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICB9IGVsc2UgaWYgKGkgJiYgd3JhcHBpbmcgJiYgc3BhbkFmZmVjdHNX
cmFwcGluZyh0ZXh0LCBpKSkgewogICAgICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQo
IndiciIpKTsKICAgICAgIH0KKyAgICAgIHZhciBvbGQgPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRl
ci5wb3NdOwogICAgICAgdmFyIHNwYW4gPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0K
ICAgICAgICAgYnVpbGRUb2tlbihidWlsZGVyLCBjaCwgc3R5bGUsCiAgICAgICAgICAgICAgICAg
ICAgc3RhcnQgJiYgc3RhcnRTdHlsZSwgaSA9PSB0ZXh0Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUp
OworICAgICAgaWYgKG9sZCkgc3Bhbi5sZWZ0U2lkZSA9IG9sZC5sZWZ0U2lkZSB8fCBvbGQ7CiAg
ICAgICAvLyBJbiBJRSBzaW5nbGUtc3BhY2Ugbm9kZXMgd3JhcCBkaWZmZXJlbnRseSB0aGFuIHNw
YWNlcwogICAgICAgLy8gZW1iZWRkZWQgaW4gbGFyZ2VyIHRleHQgbm9kZXMsIGV4Y2VwdCB3aGVu
IHNldCB0bwogICAgICAgLy8gd2hpdGUtc3BhY2U6IG5vcm1hbCAoaXNzdWUgIzEyNjgpLgpAQCAt
NDI1MCw3ICs0MzQ4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICJub3JtYWwiOwogICAgICAgYnVpbGRlci5wb3Mg
Kz0gY2gubGVuZ3RoOwogICAgIH0KLSAgICBpZiAodGV4dC5sZW5ndGgpIGJ1aWxkZXIuYWRkZWRP
bmUgPSB0cnVlOworICAgIGlmICh0ZXh0Lmxlbmd0aCkgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGlu
ZyA9IHRydWU7CiAgIH0KIAogICBmdW5jdGlvbiBidWlsZFRva2VuU3BsaXRTcGFjZXMoaW5uZXIp
IHsKQEAgLTQyNjAsMTggKzQzNTgsMjcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICBvdXQgKz0gIiAiOwogICAgICAgcmV0dXJuIG91dDsKICAgICB9Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSkg
ewotICAgICAgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQucmVwbGFjZSgvIHszLH0vLCBzcGxp
dCksIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGJ1
aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpIHsKKyAgICAg
IHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9Lywgc3BsaXQpLCBzdHls
ZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKTsKICAgICB9OwogICB9CiAKLSAgZnVuY3Rp
b24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIHdpZGdldCkgeworICBmdW5jdGlv
biBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgc2l6ZSwgbWFya2VyLCBpZ25vcmVXaWRnZXQp
IHsKKyAgICB2YXIgd2lkZ2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIucmVwbGFjZWRXaXRo
OwogICAgIGlmICh3aWRnZXQpIHsKICAgICAgIGlmICghYnVpbGRlci5kaXNwbGF5KSB3aWRnZXQg
PSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOwogICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQo
d2lkZ2V0KTsKLSAgICAgIGlmIChidWlsZGVyLm1lYXN1cmUgJiYgc2l6ZSkgewotICAgICAgICBi
dWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gd2lkZ2V0OwotICAgICAgICBidWlsZGVyLmFk
ZGVkT25lID0gdHJ1ZTsKKyAgICAgIGlmIChidWlsZGVyLm1lYXN1cmUpIHsKKyAgICAgICAgaWYg
KHNpemUpIHsKKyAgICAgICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gd2lkZ2V0
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBlbHQgPSBidWlsZGVyLm1lYXN1cmVb
YnVpbGRlci5wb3NdID0gemVyb1dpZHRoRWxlbWVudChidWlsZGVyLmNtLmRpc3BsYXkubWVhc3Vy
ZSk7CisgICAgICAgICAgaWYgKG1hcmtlci50eXBlICE9ICJib29rbWFyayIgfHwgbWFya2VyLmlu
c2VydExlZnQpCisgICAgICAgICAgICBidWlsZGVyLnByZS5pbnNlcnRCZWZvcmUoZWx0LCB3aWRn
ZXQpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxk
KGVsdCk7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRy
dWU7CiAgICAgICB9CiAgICAgfQogICAgIGJ1aWxkZXIucG9zICs9IHNpemU7CkBAIC00MjgwLDE5
ICs0Mzg3LDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBPdXRw
dXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0
aW5nCiAgIC8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291bnQuCiAgIGZ1bmN0aW9uIGluc2Vy
dExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIHN0eWxlcykgewotICAgIHZhciBzcGFucyA9IGxp
bmUubWFya2VkU3BhbnM7CisgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4
dCA9IGxpbmUudGV4dCwgYXQgPSAwOwogICAgIGlmICghc3BhbnMpIHsKICAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9MikKLSAgICAgICAgYnVpbGRlci5hZGRUb2tl
bihidWlsZGVyLCBzdHlsZXNbaV0sIHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsxXSkpOworICAgICAg
ICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVz
W2ldKSwgc3R5bGVUb0NsYXNzKHN0eWxlc1tpKzFdKSk7CiAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgdmFyIGFsbFRleHQgPSBsaW5lLnRleHQsIGxlbiA9IGFsbFRleHQubGVuZ3RoOwotICAg
IHZhciBwb3MgPSAwLCBpID0gMSwgdGV4dCA9ICIiLCBzdHlsZTsKLSAgICB2YXIgbmV4dENoYW5n
ZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgY29sbGFwc2Vk
OworICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aCwgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAi
Iiwgc3R5bGU7CisgICAgdmFyIG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRTdHls
ZSwgc3BhblN0YXJ0U3R5bGUsIHRpdGxlLCBjb2xsYXBzZWQ7CiAgICAgZm9yICg7OykgewogICAg
ICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSB7IC8vIFVwZGF0ZSBjdXJyZW50IG1hcmtlciBzZXQK
LSAgICAgICAgc3BhblN0eWxlID0gc3BhbkVuZFN0eWxlID0gc3BhblN0YXJ0U3R5bGUgPSAiIjsK
KyAgICAgICAgc3BhblN0eWxlID0gc3BhbkVuZFN0eWxlID0gc3BhblN0YXJ0U3R5bGUgPSB0aXRs
ZSA9ICIiOwogICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7
CiAgICAgICAgIHZhciBmb3VuZEJvb2ttYXJrID0gbnVsbDsKICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewpAQCAtNDMwMiwxNyArNDQwOCwxNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmIChtLmNsYXNzTmFt
ZSkgc3BhblN0eWxlICs9ICIgIiArIG0uY2xhc3NOYW1lOwogICAgICAgICAgICAgaWYgKG0uc3Rh
cnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFy
dFN0eWxlOwogICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5n
ZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7Ci0gICAgICAgICAgICBpZiAobS5j
b2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLm1hcmtlci53aWR0aCA8IG0ud2lk
dGgpKQorICAgICAgICAgICAgaWYgKG0udGl0bGUgJiYgIXRpdGxlKSB0aXRsZSA9IG0udGl0bGU7
CisgICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2Vk
Lm1hcmtlci5zaXplIDwgbS5zaXplKSkKICAgICAgICAgICAgICAgY29sbGFwc2VkID0gc3A7CiAg
ICAgICAgICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9t
KSB7CiAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKICAgICAgICAgICB9Ci0gICAg
ICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ucmVw
bGFjZWRXaXRoKQotICAgICAgICAgICAgZm91bmRCb29rbWFyayA9IG0ucmVwbGFjZWRXaXRoOwor
ICAgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2ttYXJrIiAmJiBzcC5mcm9tID09IHBvcyAmJiBt
LnJlcGxhY2VkV2l0aCkgZm91bmRCb29rbWFyayA9IG07CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9zKSB7CiAgICAgICAgICAg
YnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/IGxlbiA6
IGNvbGxhcHNlZC50bykgLSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxh
cHNlZC5mcm9tICE9IG51bGwgJiYgY29sbGFwc2VkLm1hcmtlci5yZXBsYWNlZFdpdGgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQubWFya2VyLCBjb2xsYXBzZWQuZnJv
bSA9PSBudWxsKTsKICAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IG51bGwpIHJldHVybiBj
b2xsYXBzZWQubWFya2VyLmZpbmQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZm91bmRCb29r
bWFyayAmJiAhY29sbGFwc2VkKSBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRC
b29rbWFyayk7CkBAIC00MzI2LDEzICs0NDMyLDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7CiAgICAgICAgICAgICB2YXIg
dG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0
OwogICAgICAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCB0b2tlblRleHQsIHN0eWxl
ID8gc3R5bGUgKyBzcGFuU3R5bGUgOiBzcGFuU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFu
Z2UgPyBzcGFuRW5kU3R5bGUgOiAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNw
YW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFuZ2UgPyBzcGFu
RW5kU3R5bGUgOiAiIiwgdGl0bGUpOwogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoZW5kID49
IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7
fQogICAgICAgICAgIHBvcyA9IGVuZDsKICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSA9ICIiOwog
ICAgICAgICB9Ci0gICAgICAgIHRleHQgPSBzdHlsZXNbaSsrXTsgc3R5bGUgPSBzdHlsZVRvQ2xh
c3Moc3R5bGVzW2krK10pOworICAgICAgICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQgPSBz
dHlsZXNbaSsrXSk7CisgICAgICAgIHN0eWxlID0gc3R5bGVUb0NsYXNzKHN0eWxlc1tpKytdKTsK
ICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQzNTUsNyArNDQ2Miw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVwbGFj
ZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAgLy8gc3VyZSBsaW5lIG9iamVjdHMg
bW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgogICAgICAgZm9yICh2YXIgaSA9IDAs
IGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCi0gICAgICAgIGFk
ZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
CisgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGlt
YXRlSGVpZ2h0KSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RT
cGFucyk7CiAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsK
ICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CkBA
IC00MzY0LDggKzQ0NzEsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkg
KyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAodmFyIGFkZGVkID0gW10sIGkgPSAxLCBlID0gdGV4
dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUo
dGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7Ci0gICAgICAgIGFkZGVkLnB1
c2gobWFrZUxpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RT
cGFucywgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRl
eHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOworICAgICAgICBhZGRlZC5wdXNo
KG5ldyBMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3Bh
bnMsIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGlu
ZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICAg
ICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgIH0KQEAgLTQzNzYsNyAr
NDQ4Myw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdXBkYXRl
KGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBz
cGFuc0ZvcigwKSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUu
dGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9
IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7ICsraSkKLSAgICAgICAgYWRkZWQu
cHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAg
ICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVI
ZWlnaHQpKTsKICAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEs
IG5saW5lcyAtIDEpOwogICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAg
ICAgfQpAQCAtNDUxOSwxMSArNDYyNiwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgcmV0dXJuIG5ldyBEb2ModGV4
dCwgbW9kZSwgZmlyc3RMaW5lKTsKICAgICBpZiAoZmlyc3RMaW5lID09IG51bGwpIGZpcnN0TGlu
ZSA9IDA7CiAKLSAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5rKFttYWtl
TGluZSgiIiwgbnVsbCldKV0pOworICAgIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFm
Q2h1bmsoW25ldyBMaW5lKCIiLCBudWxsKV0pXSk7CiAgICAgdGhpcy5maXJzdCA9IGZpcnN0TGlu
ZTsKICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDA7CiAgICAgdGhpcy5j
YW50RWRpdCA9IGZhbHNlOwogICAgIHRoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7CisgICAg
dGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxOwogICAgIHRoaXMuZnJvbnRpZXIgPSBmaXJzdExpbmU7
CiAgICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7CiAgICAgdGhpcy5zZWwgPSB7ZnJv
bTogc3RhcnQsIHRvOiBzdGFydCwgaGVhZDogc3RhcnQsIGFuY2hvcjogc3RhcnQsIHNoaWZ0OiBm
YWxzZSwgZXh0ZW5kOiBmYWxzZSwgZ29hbENvbHVtbjogbnVsbH07CkBAIC00NTgzLDYgKzQ2OTEs
MTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZ2V0TGluZUhhbmRs
ZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhpcywgbGluZSkpIHJldHVybiBnZXRMaW5l
KHRoaXMsIGxpbmUpO30sCiAgICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24obGluZSkge3JldHVy
biBsaW5lTm8obGluZSk7fSwKIAorICAgIGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDogZnVuY3Rp
b24obGluZSkgeworICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gZ2V0
TGluZSh0aGlzLCBsaW5lKTsKKyAgICAgIHJldHVybiB2aXN1YWxMaW5lKHRoaXMsIGxpbmUpOwor
ICAgIH0sCisKICAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNpemU7fSwK
ICAgICBmaXJzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0O30sCiAgICAgbGFz
dExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTt9LApA
QCAtNDYyNCwyMCArNDczNywyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5OwogICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0
LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0LnVuZG9uZS5sZW5ndGh9OwogICAgIH0sCi0gICAgY2xl
YXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCisg
ICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSh0
aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7fSwKIAogICAgIG1hcmtDbGVhbjogZnVuY3Rpb24o
KSB7Ci0gICAgICB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVyID0gMDsKKyAgICAgIHRoaXMuY2xl
YW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCk7CisgICAgfSwKKyAgICBjaGFu
Z2VHZW5lcmF0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgIHRoaXMuaGlzdG9yeS5sYXN0T3AgPSB0
aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7CisgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5
LmdlbmVyYXRpb247CisgICAgfSwKKyAgICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7CisgICAg
ICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0gKGdlbiB8fCB0aGlzLmNsZWFuR2Vu
ZXJhdGlvbik7CiAgICAgfSwKLSAgICBpc0NsZWFuOiBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMu
aGlzdG9yeS5kaXJ0eUNvdW50ZXIgPT0gMDt9LAogCiAgICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24o
KSB7CiAgICAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRv
bmUpLAogICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5
LnVuZG9uZSl9OwogICAgIH0sCiAgICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsK
LSAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKKyAgICAgIHZh
ciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVy
YXRpb24pOwogICAgICAgaGlzdC5kb25lID0gaGlzdERhdGEuZG9uZS5zbGljZSgwKTsKICAgICAg
IGhpc3QudW5kb25lID0gaGlzdERhdGEudW5kb25lLnNsaWNlKDApOwogICAgIH0sCkBAIC00NzQ4
LDYgKzQ4NjYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMp
O307CiAgICAgfSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7CiAKKyAgZXZlbnRNaXhpbihEb2MpOwor
CiAgIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewogICAgIGZ1
bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHsKICAgICAgIGlmIChkb2Mu
bGlua2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kpIHsKQEAg
LTQ4NjcsNyArNDk4Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IC8vIEhJU1RPUlkKIAotICBmdW5jdGlvbiBtYWtlSGlzdG9yeSgpIHsKKyAgZnVuY3Rpb24gbWFr
ZUhpc3Rvcnkoc3RhcnRHZW4pIHsKICAgICByZXR1cm4gewogICAgICAgLy8gQXJyYXlzIG9mIGhp
c3RvcnkgZXZlbnRzLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhbiBldmVudCB0bwogICAgICAgLy8g
ZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZSB0bwpA
QCAtNDg3Nyw3ICs0OTk3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAvLyBldmVudAogICAgICAgbGFzdFRpbWU6IDAsIGxhc3RPcDogbnVsbCwgbGFzdE9yaWdp
bjogbnVsbCwKICAgICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKLSAgICAgIGRp
cnR5Q291bnRlcjogMAorICAgICAgZ2VuZXJhdGlvbjogc3RhcnRHZW4gfHwgMSwgbWF4R2VuZXJh
dGlvbjogc3RhcnRHZW4gfHwgMQogICAgIH07CiAgIH0KIApAQCAtNDg5MSw3ICs1MDExLDggQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBoaXN0
b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkgewotICAgIHZhciBoaXN0Q2hhbmdlID0g
e2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdl
ZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07CisgICAgdmFyIGZyb20gPSB7IGxpbmU6
IGNoYW5nZS5mcm9tLmxpbmUsIGNoOiBjaGFuZ2UuZnJvbS5jaCB9OworICAgIHZhciBoaXN0Q2hh
bmdlID0ge2Zyb206IGZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vl
bihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTsKICAgICBhdHRhY2hMb2NhbFNwYW5zKGRv
YywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTsKICAg
ICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24oZG9jKSB7YXR0YWNoTG9jYWxTcGFucyhkb2MsIGhp
c3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7fSwgdHJ1ZSk7
CiAgICAgcmV0dXJuIGhpc3RDaGFuZ2U7CkBAIC00OTIxLDE3ICs1MDQyLDEzIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0gZWxzZSB7CiAgICAgICAvLyBDYW4gbm90
IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuCiAgICAgICBjdXIgPSB7Y2hhbmdlczogW2hp
c3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0sCisgICAgICAgICAgICAgZ2VuZXJh
dGlvbjogaGlzdC5nZW5lcmF0aW9uLAogICAgICAgICAgICAgIGFuY2hvckJlZm9yZTogZG9jLnNl
bC5hbmNob3IsIGhlYWRCZWZvcmU6IGRvYy5zZWwuaGVhZCwKICAgICAgICAgICAgICBhbmNob3JB
ZnRlcjogc2VsQWZ0ZXIuYW5jaG9yLCBoZWFkQWZ0ZXI6IHNlbEFmdGVyLmhlYWR9OwogICAgICAg
aGlzdC5kb25lLnB1c2goY3VyKTsKKyAgICAgIGhpc3QuZ2VuZXJhdGlvbiA9ICsraGlzdC5tYXhH
ZW5lcmF0aW9uOwogICAgICAgd2hpbGUgKGhpc3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0
aCkKICAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7Ci0gICAgICBpZiAoaGlzdC5kaXJ0eUNvdW50
ZXIgPCAwKQotICAgICAgICAvLyBUaGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1bmRv
aW5nIHBhc3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuCi0gICAgICAgIC8vIFdlIGNhbiBuZXZlciBn
ZXQgYmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBtYXJrQ2xlYW4oKSBpcyBjYWxsZWQu
Ci0gICAgICAgIGhpc3QuZGlydHlDb3VudGVyID0gTmFOOwotICAgICAgZWxzZQotICAgICAgICBo
aXN0LmRpcnR5Q291bnRlcisrOwogICAgIH0KICAgICBoaXN0Lmxhc3RUaW1lID0gdGltZTsKICAg
ICBoaXN0Lmxhc3RPcCA9IG9wSWQ7CkBAIC01MDQ2LDYgKzUxNjMsOSBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgZWxzZSBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7CiAgIH0KKyAgZnVu
Y3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKKyAgICByZXR1cm4gZS5kZWZhdWx0UHJldmVu
dGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNl
OworICB9CiAgIGZ1bmN0aW9uIGVfc3RvcChlKSB7ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9w
UHJvcGFnYXRpb24oZSk7fQogICBDb2RlTWlycm9yLmVfc3RvcCA9IGVfc3RvcDsKICAgQ29kZU1p
cnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVmYXVsdDsKQEAgLTUxMTIsNiArNTIz
MiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGRlbGF5ZWRD
YWxsYmFja3MucHVzaChibmQoYXJyW2ldKSk7CiAgIH0KIAorICBmdW5jdGlvbiBzaWduYWxET01F
dmVudChjbSwgZSkgeworICAgIHNpZ25hbChjbSwgZS50eXBlLCBjbSwgZSk7CisgICAgcmV0dXJu
IGVfZGVmYXVsdFByZXZlbnRlZChlKTsKKyAgfQorCiAgIGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkg
ewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAgICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVk
Q2FsbGJhY2tzOwpAQCAtNTEyNiw2ICs1MjUxLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogCiAgIENvZGVNaXJyb3Iub24gPSBvbjsgQ29kZU1pcnJvci5vZmYgPSBvZmY7
IENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsOwogCisgIGZ1bmN0aW9uIGV2ZW50TWl4aW4oY3Rv
cikgeworICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlwZSwgZikge29uKHRoaXMs
IHR5cGUsIGYpO307CisgICAgY3Rvci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24odHlwZSwgZikg
e29mZih0aGlzLCB0eXBlLCBmKTt9OworICB9CisKICAgLy8gTUlTQyBVVElMSVRJRVMKIAogICAv
LyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9sbGVyIGFuZCBzaXplciB0byBoaWRlIHNj
cm9sbGJhcgpAQCAtNTE2Niw3ICs1Mjk2LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIGlmIChpb3MpIHsgLy8gTW9iaWxlIFNhZmFyaSBhcHBhcmVudGx5IGhhcyBh
IGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCiAgICAgICBub2RlLnNlbGVjdGlvblN0YXJ0
ID0gMDsKICAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7Ci0gICAg
fSBlbHNlIG5vZGUuc2VsZWN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFN1cHByZXNzIG15
c3RlcmlvdXMgSUUxMCBlcnJvcnMKKyAgICAgIHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0KKyAgICAg
IGNhdGNoKF9lKSB7fQorICAgIH0KICAgfQogCiAgIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlv
biwgZWx0KSB7CkBAIC01MjcxLDE1ICs1NDA1LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIH07CiAgIGVsc2UgaWYgKHNhZmFyaSAmJiAhL1ZlcnNpb25cLyhbNi05
XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQogICAgIHNwYW5BZmZlY3RzV3Jh
cHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIHZhciByZXN1bHQgPSAvXC1bXiBcLT9d
fFw/W14gIVwnXCJcKSwuXC1cLzo7XD9cXVx9XS8udGVzdChzdHIuc2xpY2UoaSAtIDEsIGkgKyAx
KSk7Ci0gICAgICByZXR1cm4gcmVzdWx0OworICAgICAgcmV0dXJuIC9cLVteIFwtP118XD9bXiAh
XCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKICAg
ICB9OwotICBlbHNlIGlmICh3ZWJraXQpCisgIGVsc2UgaWYgKHdlYmtpdCAmJiAhL0Nocm9tZVwv
KD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCiAgICAg
c3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgaWYgKGkgPiAx
ICYmIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSA0NSAmJiAvXHcvLnRlc3Qoc3RyLmNoYXJBdChp
IC0gMikpICYmIC9bXlwtP1wuXS8udGVzdChzdHIuY2hhckF0KGkpKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB2YXIgcmVzdWx0ID0gL1t+ISMlJiopPSt9XF18XCJcLj4sOjtdWyh7Wzxd
fFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAxLCBpICsgMSkp
OwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGlmIChpID4gMSAmJiBzdHIuY2hhckNvZGVB
dChpIC0gMSkgPT0gNDUpIHsKKyAgICAgICAgaWYgKC9cdy8udGVzdChzdHIuY2hhckF0KGkgLSAy
KSkgJiYgL1teXC0/XC5dLy50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGkgPiAyICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW1xk
XC4sXS8udGVzdChzdHIuY2hhckF0KGkpKSkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAg
cmV0dXJuIC9bfiEjJSYqKT0rfVxdfFwiXC4+LDo7XVsoe1s8XXwtW15cLT9cLlx1MjAxMC1cdTIw
MWZcdTIwMjZdfFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF184oCmW1x3fmBAIyQlXF4mKihfPSt7
Wz48XS8udGVzdChzdHIuc2xpY2UoaSAtIDEsIGkgKyAxKSk7CiAgICAgfTsKIAogICB2YXIga25v
d25TY3JvbGxiYXJXaWR0aDsKQEAgLTUzNjUsMTEgKzU0OTksMTUgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRl
ciwgZnJvbSwgdG8sIGYpIHsKICAgICBpZiAoIW9yZGVyKSByZXR1cm4gZihmcm9tLCB0bywgImx0
ciIpOworICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3Jk
ZXIubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV07Ci0gICAgICBpZiAo
cGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwgZnJvbSA9PSB0byAmJiBwYXJ0LnRv
ID09IGZyb20pCisgICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwg
ZnJvbSA9PSB0byAmJiBwYXJ0LnRvID09IGZyb20pIHsKICAgICAgICAgZihNYXRoLm1heChwYXJ0
LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byksIHBhcnQubGV2ZWwgPT0gMSA/ICJy
dGwiIDogImx0ciIpOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICB9CiAgICAgfQorICAg
IGlmICghZm91bmQpIGYoZnJvbSwgdG8sICJsdHIiKTsKICAgfQogCiAgIGZ1bmN0aW9uIGJpZGlM
ZWZ0KHBhcnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8gcGFydC50byA6IHBhcnQuZnJvbTsg
fQpAQCAtNTYzMSw3ICs1NzY5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjEzIjsKKyAgQ29k
ZU1pcnJvci52ZXJzaW9uID0gIjMuMTQuMSI7CiAKICAgcmV0dXJuIENvZGVNaXJyb3I7CiB9KSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcwppbmRleCA1MDlk
OTIwN2JiNzA3NzU0MGJkYzg5MGYwNjE2MDJlZWI2M2RmNjFiLi40ZjU0YjBjNjkwZWMyZmM4OWJj
NmVkYWRmOTVmZWNlMWRkNGE5MzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
ZmZlZXNjcmlwdC5qcwpAQCAtMzM5LDcgKzMzOSw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgn
Y29mZmVlc2NyaXB0JywgZnVuY3Rpb24oY29uZikgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRl
LnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgIH0sCiAKLSAgICAgICAgbGluZUNvbW1lbnQ6ICIj
IgorICAgICAgICBsaW5lQ29tbWVudDogIiMiLAorICAgICAgICBmb2xkOiAiaW5kZW50IgogICAg
IH07CiAgICAgcmV0dXJuIGV4dGVybmFsOwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
bW1lbnQuanMKaW5kZXggNGY1OTBmMjg3MDA1MzIxMzk1YTZhNTI4YmU0YmFjN2E2NzBjNGRkZC4u
Y2QyMTIzZTE3NTU1NTJlOTM1MWYxZDIzZTg1N2I5OGE4YmU2Mjc3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21t
ZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMTcsNyArMTcsNyBAQAogCiAgIENvZGVNaXJyb3Iu
ZGVmaW5lRXh0ZW5zaW9uKCJsaW5lQ29tbWVudCIsIGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25z
KSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9PcHRpb25zOwotICAgIHZhciBzZWxm
ID0gdGhpcywgbW9kZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKHNlbGYuZ2V0TW9kZSgpLCBzZWxm
LmdldFRva2VuQXQoZnJvbSkuc3RhdGUpLm1vZGU7CisgICAgdmFyIHNlbGYgPSB0aGlzLCBtb2Rl
ID0gc2VsZi5nZXRNb2RlQXQoZnJvbSk7CiAgICAgdmFyIGNvbW1lbnRTdHJpbmcgPSBvcHRpb25z
LmxpbmVDb21tZW50IHx8IG1vZGUubGluZUNvbW1lbnQ7CiAgICAgaWYgKCFjb21tZW50U3RyaW5n
KSB7CiAgICAgICBpZiAob3B0aW9ucy5ibG9ja0NvbW1lbnRTdGFydCB8fCBtb2RlLmJsb2NrQ29t
bWVudFN0YXJ0KSB7CkBAIC0zMCw3ICszMCw3IEBACiAgICAgaWYgKGZpcnN0TGluZSA9PSBudWxs
KSByZXR1cm47CiAgICAgdmFyIGVuZCA9IE1hdGgubWluKHRvLmNoICE9IDAgfHwgdG8ubGluZSA9
PSBmcm9tLmxpbmUgPyB0by5saW5lICsgMSA6IHRvLmxpbmUsIHNlbGYubGFzdExpbmUoKSArIDEp
OwogICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVsbCA/ICIgIiA6IG9wdGlvbnMu
cGFkZGluZzsKLSAgICB2YXIgYmxhbmtMaW5lcyA9IG9wdGlvbnMuY29tbWVudEJsYW5rTGluZXM7
CisgICAgdmFyIGJsYW5rTGluZXMgPSBvcHRpb25zLmNvbW1lbnRCbGFua0xpbmVzIHx8IGZyb20u
bGluZSA9PSB0by5saW5lOwogCiAgICAgc2VsZi5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAg
ICBpZiAob3B0aW9ucy5pbmRlbnQpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICBDb2RlTWlycm9y
LmRlZmluZUV4dGVuc2lvbigiYmxvY2tDb21tZW50IiwgZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlv
bnMpIHsKICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSBub09wdGlvbnM7Ci0gICAgdmFyIHNl
bGYgPSB0aGlzLCBtb2RlID0gQ29kZU1pcnJvci5pbm5lck1vZGUoc2VsZi5nZXRNb2RlKCksIHNl
bGYuZ2V0VG9rZW5BdChmcm9tKS5zdGF0ZSkubW9kZTsKKyAgICB2YXIgc2VsZiA9IHRoaXMsIG1v
ZGUgPSBzZWxmLmdldE1vZGVBdChmcm9tKTsKICAgICB2YXIgc3RhcnRTdHJpbmcgPSBvcHRpb25z
LmJsb2NrQ29tbWVudFN0YXJ0IHx8IG1vZGUuYmxvY2tDb21tZW50U3RhcnQ7CiAgICAgdmFyIGVu
ZFN0cmluZyA9IG9wdGlvbnMuYmxvY2tDb21tZW50RW5kIHx8IG1vZGUuYmxvY2tDb21tZW50RW5k
OwogICAgIGlmICghc3RhcnRTdHJpbmcgfHwgIWVuZFN0cmluZykgewpAQCAtODUsMTkgKzg1LDE5
IEBACiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oInVuY29tbWVudCIsIGZ1bmN0aW9u
KGZyb20sIHRvLCBvcHRpb25zKSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9PcHRp
b25zOwotICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKHNl
bGYuZ2V0TW9kZSgpLCBzZWxmLmdldFRva2VuQXQoZnJvbSkuc3RhdGUpLm1vZGU7CisgICAgdmFy
IHNlbGYgPSB0aGlzLCBtb2RlID0gc2VsZi5nZXRNb2RlQXQoZnJvbSk7CiAgICAgdmFyIGVuZCA9
IE1hdGgubWluKHRvLmxpbmUsIHNlbGYubGFzdExpbmUoKSksIHN0YXJ0ID0gTWF0aC5taW4oZnJv
bS5saW5lLCBlbmQpOwogCiAgICAgLy8gVHJ5IGZpbmRpbmcgbGluZSBjb21tZW50cwogICAgIHZh
ciBsaW5lU3RyaW5nID0gb3B0aW9ucy5saW5lQ29tbWVudCB8fCBtb2RlLmxpbmVDb21tZW50LCBs
aW5lcyA9IFtdOwotICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVsbCA/ICIgIiA6
IG9wdGlvbnMucGFkZGluZzsKLSAgICBsaW5lQ29tbWVudDogZm9yKDs7KSB7Ci0gICAgICBpZiAo
IWxpbmVTdHJpbmcpIGJyZWFrOworICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVs
bCA/ICIgIiA6IG9wdGlvbnMucGFkZGluZywgZGlkU29tZXRoaW5nOworICAgIGxpbmVDb21tZW50
OiB7CisgICAgICBpZiAoIWxpbmVTdHJpbmcpIGJyZWFrIGxpbmVDb21tZW50OwogICAgICAgZm9y
ICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7CiAgICAgICAgIHZhciBsaW5lID0gc2Vs
Zi5nZXRMaW5lKGkpOwogICAgICAgICB2YXIgZm91bmQgPSBsaW5lLmluZGV4T2YobGluZVN0cmlu
Zyk7CiAgICAgICAgIGlmIChmb3VuZCA9PSAtMSAmJiAoaSAhPSBlbmQgfHwgaSA9PSBzdGFydCkg
JiYgbm9uV1MudGVzdChsaW5lKSkgYnJlYWsgbGluZUNvbW1lbnQ7Ci0gICAgICAgIGlmIChpICE9
IHN0YXJ0ICYmIG5vbldTLnRlc3QobGluZS5zbGljZSgwLCBmb3VuZCkpKSBicmVhayBsaW5lQ29t
bWVudDsKKyAgICAgICAgaWYgKGkgIT0gc3RhcnQgJiYgZm91bmQgPiAtMSAmJiBub25XUy50ZXN0
KGxpbmUuc2xpY2UoMCwgZm91bmQpKSkgYnJlYWsgbGluZUNvbW1lbnQ7CiAgICAgICAgIGxpbmVz
LnB1c2gobGluZSk7CiAgICAgICB9CiAgICAgICBzZWxmLm9wZXJhdGlvbihmdW5jdGlvbigpIHsK
QEAgLTEwNiwxMCArMTA2LDExIEBACiAgICAgICAgICAgdmFyIHBvcyA9IGxpbmUuaW5kZXhPZihs
aW5lU3RyaW5nKSwgZW5kUG9zID0gcG9zICsgbGluZVN0cmluZy5sZW5ndGg7CiAgICAgICAgICAg
aWYgKHBvcyA8IDApIGNvbnRpbnVlOwogICAgICAgICAgIGlmIChsaW5lLnNsaWNlKGVuZFBvcywg
ZW5kUG9zICsgcGFkLmxlbmd0aCkgPT0gcGFkKSBlbmRQb3MgKz0gcGFkLmxlbmd0aDsKKyAgICAg
ICAgICBkaWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgIHNlbGYucmVwbGFjZVJhbmdlKCIi
LCBQb3MoaSwgcG9zKSwgUG9zKGksIGVuZFBvcykpOwogICAgICAgICB9CiAgICAgICB9KTsKLSAg
ICAgIHJldHVybiB0cnVlOworICAgICAgaWYgKGRpZFNvbWV0aGluZykgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgLy8gVHJ5IGJsb2NrIGNvbW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3Nz
LmpzCmluZGV4IDI3Yzk3ZjM3ZWI4YjRlYzdlMjRmNjg5MmNmYjMyZGRjOGYxYTEyYWUuLmI1MmU3
ODdhNzBhYjA3NjhjZThhYTMzZGNmMDRlYTEzZDEyY2Q1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvY3NzLmpzCkBAIC0xMDMsNyArMTAzLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mt
YmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgc3RhcnRTdGF0ZTog
ZnVuY3Rpb24oYmFzZSkgewogICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAg
ICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAgICAgIHN0YWNrOiBb
XX07CisgICAgICAgICAgICAgIHN0YWNrOiBbXSwKKyAgICAgICAgICAgICAgbGFzdFRva2VuOiBu
dWxsfTsKICAgICB9LAogCiAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKQEAg
LTE2Myw3ICsxNjQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuc3Rh
Y2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwogICAgICAgaWYgKHN0eWxlID09ICJ2YXJpYWJsZSIp
IHsKICAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlLWRlZmluaXRpb24iKSBzdGF0ZS5zdGFj
ay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICAgIHJldHVybiAidmFyaWFibGUtMiI7Cisg
ICAgICAgIHJldHVybiBzdGF0ZS5sYXN0VG9rZW4gPSAidmFyaWFibGUtMiI7CiAgICAgICB9IGVs
c2UgaWYgKHN0eWxlID09ICJwcm9wZXJ0eSIpIHsKICAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0u
Y3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0
eVZhbHVlIikgewpAQCAtMjczLDEwICsyNzQsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBlbHNlIGlm
IChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICIsIikgc3Rh
dGUuc3RhY2sucG9wKCk7CiAgICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAm
JiB0eXBlID09ICIoIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhVHlwZSgiKTsKICAgICAgIGVs
c2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIiAmJiB0eXBlID09ICIpIikgc3RhdGUuc3Rh
Y2sucG9wKCk7Ci0gICAgICBlbHNlIGlmICgoY29udGV4dCA9PSAicnVsZSIgfHwgY29udGV4dCA9
PSAiYmxvY2siKSAmJiB0eXBlID09ICI6Iikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1
ZSIpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSAiOiIgJiYgc3RhdGUubGFzdFRva2VuID09ICJw
cm9wZXJ0eSIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKICAgICAgIGVsc2Ug
aWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFj
ay5wb3AoKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiICYmIHR5cGUgPT0g
IjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgIHJldHVybiBzdHlsZTsKKyAgICAgIHJldHVy
biBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlv
bihzdGF0ZSwgdGV4dEFmdGVyKSB7CkBAIC0yODgsNyArMjg5LDggQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAg
ICBlbGVjdHJpY0NoYXJzOiAifSIsCiAgICAgYmxvY2tDb21tZW50U3RhcnQ6ICIvKiIsCi0gICAg
YmxvY2tDb21tZW50RW5kOiAiKi8iCisgICAgYmxvY2tDb21tZW50RW5kOiAiKi8iLAorICAgIGZv
bGQ6ICJicmFjZSIKICAgfTsKIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFz
Y3JpcHQuanMKaW5kZXggZmFiZTFjNDJiOWE2YjMwZDM2ZDdlMzc2MWViNjg4ZWRkNjM3ZDZhZS4u
M2QwNDYwM2MyODVmZWU1Y2EzM2M4NjNlYTY3ODgwNzY1MjM0ZmQ1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZh
c2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMiw2ICsyLDcgQEAKIAogQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKKyAgdmFyIHN0YXRlbWVu
dEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7CiAgIHZhciBqc29uTW9kZSA9
IHBhcnNlckNvbmZpZy5qc29uOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0
OwogCkBAIC0yMjYsOCArMjI3LDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBwdXNo
bGV4KHR5cGUsIGluZm8pIHsKICAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgc3RhdGUgPSBjeC5zdGF0ZTsKLSAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2Fs
KHN0YXRlLmluZGVudGVkLCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxl
eGljYWwsIGluZm8pOworICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGUsIGluZGVudCA9IHN0YXRl
LmluZGVudGVkOworICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAic3RhdCIpIGluZGVu
dCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CisgICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpT
TGV4aWNhbChpbmRlbnQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4
aWNhbCwgaW5mbyk7CiAgICAgfTsKICAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjU2LDMxICsyNTgsMzIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9
PSAia2V5d29yZCBiIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBv
cGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJs
b2NrLCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKLSAgICBp
ZiAodHlwZSA9PSAiaWYiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UoY3guc3RhdGUuaW5kZW50ZWQpKTsKKyAgICBp
ZiAodHlwZSA9PSAiaWYiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpOwogICAgIGlmICh0eXBlID09ICJmdW5jdGlv
biIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHBlY3QoIigiKSwgcHVzaGxleCgiKSIpLCBmb3Jz
cGVjMSwgZXhwZWN0KCIpIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAidmFy
aWFibGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwogICAgIGlm
ICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Np
b24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwog
ICAgIGlmICh0eXBlID09ICJjYXNlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6
IikpOwogICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6Iikp
OwogICAgIGlmICh0eXBlID09ICJjYXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwg
cHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4cGVjdCgiKSIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBv
cGxleCwgcG9wY29udGV4dCk7CiAgICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHBy
ZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICAgfQogICBmdW5jdGlvbiBleHByZXNzaW9u
KHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3BlcmF0b3JD
b21tYSk7CisgICAgcmV0dXJuIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBmYWxzZSk7CiAgIH0KICAg
ZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSkgewotICAgIHJldHVybiBleHByZXNzaW9u
SW5uZXIodHlwZSwgbWF5YmVvcGVyYXRvck5vQ29tbWEpOworICAgIHJldHVybiBleHByZXNzaW9u
SW5uZXIodHlwZSwgdHJ1ZSk7CiAgIH0KLSAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUs
IG1heWJlb3ApIHsKKyAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG5vQ29tbWEpIHsK
KyAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJl
b3BlcmF0b3JDb21tYTsKICAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkp
IHJldHVybiBjb250KG1heWJlb3ApOwogICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVy
biBjb250KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJu
IGNvbnQobWF5YmVleHByZXNzaW9uKTsKKyAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0
dXJuIGNvbnQobm9Db21tYSA/IG1heWJlZXhwcmVzc2lvbk5vQ29tbWEgOiBtYXliZWV4cHJlc3Np
b24pOwogICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXli
ZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3ApOwotICAgIGlmICh0eXBl
ID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09
ICJvcGVyYXRvciIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4
cHJlc3Npb24pOwogICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIp
LCBjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSwgcG9wbGV4LCBtYXliZW9wKTsKICAg
ICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgY29tbWFzZXAob2Jq
cHJvcCwgIn0iKSwgcG9wbGV4LCBtYXliZW9wKTsKICAgICByZXR1cm4gY29udCgpOwpAQCAtMjg5
LDkgKzI5MiwxMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxd
LykpIHJldHVybiBwYXNzKCk7CiAgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7CiAgIH0KKyAg
ZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uTm9Db21tYSh0eXBlKSB7CisgICAgaWYgKHR5cGUubWF0
Y2goL1s7XH1cKVxdLF0vKSkgcmV0dXJuIHBhc3MoKTsKKyAgICByZXR1cm4gcGFzcyhleHByZXNz
aW9uTm9Db21tYSk7CisgIH0KIAogICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yQ29tbWEodHlwZSwg
dmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBwYXNzKCk7CisgICAgaWYgKHR5
cGUgPT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgICByZXR1cm4gbWF5YmVvcGVy
YXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG1heWJlb3BlcmF0b3JDb21tYSk7CiAgIH0KICAgZnVu
Y3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG1lKSB7CkBAIC0zMDQsNyAr
MzExLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybjsKICAgICBp
ZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiLCAiY2FsbCIpLCBjb21tYXNl
cChleHByZXNzaW9uTm9Db21tYSwgIikiKSwgcG9wbGV4LCBtZSk7CiAgICAgaWYgKHR5cGUgPT0g
Ii4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpOwotICAgIGlmICh0eXBlID09ICJbIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBt
ZSk7CisgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIG1heWJl
ZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwogICB9CiAgIGZ1bmN0aW9uIG1h
eWJlbGFiZWwodHlwZSkgewogICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4
LCBzdGF0ZW1lbnQpOwpAQCAtMzY2LDE0ICszNzMsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh2
YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hLCB2YXJkZWYyKTsKICAg
ICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwogICB9Ci0gIGZ1bmN0aW9u
IG1heWJlZWxzZShpbmRlbnQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHsK
LSAgICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiICYmIHZhbHVlID09ICJlbHNlIikgewotICAg
ICAgICBjeC5zdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIDAsICJmb3JtIiwg
bnVsbCwgY3guc3RhdGUubGV4aWNhbCk7Ci0gICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudCwg
cG9wbGV4KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXNzKCk7Ci0gICAgfTsKKyAgZnVuY3Rp
b24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIg
JiYgdmFsdWUgPT0gImVsc2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVu
dCwgcG9wbGV4KTsKICAgfQogICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7CiAgICAgaWYgKHR5
cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBmb3JzcGVjMik7
CkBAIC00MzQsMTkgKzQzNSwyMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgaWYgKHN0YXRlLnRva2Vu
aXplID09IGpzVG9rZW5Db21tZW50KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwogICAgICAgaWYg
KHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgIHZhciBmaXJz
dENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRl
LmxleGljYWw7CisgICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20gYmxv
Y2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCisgICAgICBmb3IgKHZhciBpID0gc3RhdGUuY2MubGVu
Z3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgdmFyIGMgPSBzdGF0ZS5jY1tpXTsKKyAg
ICAgICAgaWYgKGMgPT0gcG9wbGV4KSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OworICAgICAgICBl
bHNlIGlmIChjICE9IG1heWJlZWxzZSB8fCAvXmVsc2VcYi8udGVzdCh0ZXh0QWZ0ZXIpKSBicmVh
azsKKyAgICAgIH0KICAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiICYmIGZpcnN0Q2hh
ciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CisgICAgICBpZiAoc3RhdGVtZW50SW5k
ZW50ICYmIGxleGljYWwudHlwZSA9PSAiKSIgJiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gInN0YXQi
KQorICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwogICAgICAgdmFyIHR5cGUgPSBsZXhp
Y2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKLSAgICAgIGlmIChwYXJzZXJD
b25maWcuc3RhdGVtZW50SW5kZW50ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gIiki
ICYmIGxleGljYWwucHJldiAmJiBsZXhpY2FsLnByZXYudHlwZSA9PSAic3RhdCIpIGxleGljYWwg
PSBsZXhpY2FsLnByZXY7Ci0gICAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiKSByZXR1
cm4gbGV4aWNhbC5pbmRlbnRlZCArIHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7Ci0gICAg
ICB9CiAKICAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRl
ZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIs
IiA/IDQgOiAwKTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9
PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
Zm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsKICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gInN0YXQiKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChz
dGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IGlu
ZGVudFVuaXQgOiAwKTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAm
JiAhY2xvc2luZykKKyAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFz
dFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyBzdGF0ZW1lbnRJ
bmRlbnQgfHwgaW5kZW50VW5pdCA6IDApOworICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09
ICJzd2l0Y2giICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2gg
IT0gZmFsc2UpCiAgICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxk
ZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQp
OwogICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGlnbikgcmV0dXJuIGxleGljYWwuY29sdW1uICsg
KGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsg
KGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CkBAIC00NTYsNyArNDYxLDkgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKICAgICBi
bG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCiAgICAgbGluZUNvbW1lbnQ6
IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCisgICAgZm9sZDogImJyYWNlIiwKIAorICAgIGhlbHBl
clR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAogICAgIGpzb25Nb2RlOiBq
c29uTW9kZQogICB9OwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJh
Y2tldHMuanMKaW5kZXggZTRmZjkxNGM2YmJlMmUyNjc1ZTQ4MzM0YzJjMThiZjYyNzFhZGFjYy4u
MTMxZmU4MzFmZGM3NjYyYmI2ZjI1OWQ0MzY3NWRlZmIxOWZlNzZlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRj
aGJyYWNrZXRzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwpAQCAtNSwyNSArNSwyNiBAQAogICB2
YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7CiAKICAgdmFyIG1hdGNoaW5nID0geyIoIjogIik+Iiwg
IikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsiOiAifT4iLCAifSI6ICJ7PCJ9Owot
ICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdCcmFja2V0KGNtKSB7Ci0gICAgdmFyIG1heFNjYW5MZW4g
PSBjbS5zdGF0ZS5fbWF0Y2hCcmFja2V0cy5tYXhTY2FuTGluZUxlbmd0aCB8fCAxMDAwMDsKKyAg
ZnVuY3Rpb24gZmluZE1hdGNoaW5nQnJhY2tldChjbSwgd2hlcmUsIHN0cmljdCkgeworICAgIHZh
ciBzdGF0ZSA9IGNtLnN0YXRlLm1hdGNoQnJhY2tldHM7CisgICAgdmFyIG1heFNjYW5MZW4gPSAo
c3RhdGUgJiYgc3RhdGUubWF4U2NhbkxpbmVMZW5ndGgpIHx8IDEwMDAwOwogCi0gICAgdmFyIGN1
ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBv
cyA9IGN1ci5jaCAtIDE7CisgICAgdmFyIGN1ciA9IHdoZXJlIHx8IGNtLmdldEN1cnNvcigpLCBs
aW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBvcyA9IGN1ci5jaCAtIDE7CiAgICAg
dmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0p
IHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICBpZiAoIW1hdGNoKSBy
ZXR1cm4gbnVsbDsKICAgICB2YXIgZm9yd2FyZCA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIsIGQg
PSBmb3J3YXJkID8gMSA6IC0xOwotICAgIHZhciBzdHlsZSA9IGNtLmdldFRva2VuQXQoUG9zKGN1
ci5saW5lLCBwb3MgKyAxKSkudHlwZTsKKyAgICBpZiAoc3RyaWN0ICYmIGZvcndhcmQgIT0gKHBv
cyA9PSBjdXIuY2gpKSByZXR1cm4gbnVsbDsKKyAgICB2YXIgc3R5bGUgPSBjbS5nZXRUb2tlblR5
cGVBdChQb3MoY3VyLmxpbmUsIHBvcyArIDEpKTsKIAogICAgIHZhciBzdGFjayA9IFtsaW5lLnRl
eHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgIGZ1bmN0aW9uIHNjYW4obGlu
ZSwgbGluZU5vLCBzdGFydCkgewogICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAg
IHZhciBwb3MgPSBmb3J3YXJkID8gMCA6IGxpbmUudGV4dC5sZW5ndGggLSAxLCBlbmQgPSBmb3J3
YXJkID8gbGluZS50ZXh0Lmxlbmd0aCA6IC0xOwogICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGgg
PiBtYXhTY2FuTGVuKSByZXR1cm4gbnVsbDsKLSAgICAgIHZhciBjaGVja1Rva2VuU3R5bGVzID0g
bGluZS50ZXh0Lmxlbmd0aCA8IDEwMDA7CiAgICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgcG9zID0g
c3RhcnQgKyBkOwogICAgICAgZm9yICg7IHBvcyAhPSBlbmQ7IHBvcyArPSBkKSB7CiAgICAgICAg
IHZhciBjaCA9IGxpbmUudGV4dC5jaGFyQXQocG9zKTsKLSAgICAgICAgaWYgKHJlLnRlc3QoY2gp
ICYmICghY2hlY2tUb2tlblN0eWxlcyB8fCBjbS5nZXRUb2tlbkF0KFBvcyhsaW5lTm8sIHBvcyAr
IDEpKS50eXBlID09IHN0eWxlKSkgeworICAgICAgICBpZiAocmUudGVzdChjaCkgJiYgY20uZ2V0
VG9rZW5UeXBlQXQoUG9zKGxpbmVObywgcG9zICsgMSkpID09IHN0eWxlKSB7CiAgICAgICAgICAg
dmFyIG1hdGNoID0gbWF0Y2hpbmdbY2hdOwogICAgICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkg
PT0gIj4iID09IGZvcndhcmQpIHN0YWNrLnB1c2goY2gpOwogICAgICAgICAgIGVsc2UgaWYgKHN0
YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZh
bHNlfTsKQEAgLTM2LDEyICszNywxMyBAQAogICAgICAgZWxzZSBmb3VuZCA9IHNjYW4oY20uZ2V0
TGluZUhhbmRsZShpKSwgaSk7CiAgICAgICBpZiAoZm91bmQpIGJyZWFrOwogICAgIH0KLSAgICBy
ZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwgdG86IGZvdW5kICYmIFBvcyhpLCBmb3Vu
ZC5wb3MpLCBtYXRjaDogZm91bmQgJiYgZm91bmQubWF0Y2h9OworICAgIHJldHVybiB7ZnJvbTog
UG9zKGN1ci5saW5lLCBwb3MpLCB0bzogZm91bmQgJiYgUG9zKGksIGZvdW5kLnBvcyksCisgICAg
ICAgICAgICBtYXRjaDogZm91bmQgJiYgZm91bmQubWF0Y2gsIGZvcndhcmQ6IGZvcndhcmR9Owog
ICB9CiAKICAgZnVuY3Rpb24gbWF0Y2hCcmFja2V0cyhjbSwgYXV0b2NsZWFyKSB7CiAgICAgLy8g
RGlzYWJsZSBicmFjZSBtYXRjaGluZyBpbiBsb25nIGxpbmVzLCBzaW5jZSBpdCdsbCBjYXVzZSBo
dWdlbHkgc2xvdyB1cGRhdGVzCi0gICAgdmFyIG1heEhpZ2hsaWdodExlbiA9IGNtLnN0YXRlLl9t
YXRjaEJyYWNrZXRzLm1heEhpZ2hsaWdodExpbmVMZW5ndGggfHwgMTAwMDsKKyAgICB2YXIgbWF4
SGlnaGxpZ2h0TGVuID0gY20uc3RhdGUubWF0Y2hCcmFja2V0cy5tYXhIaWdobGlnaHRMaW5lTGVu
Z3RoIHx8IDEwMDA7CiAgICAgdmFyIGZvdW5kID0gZmluZE1hdGNoaW5nQnJhY2tldChjbSk7CiAg
ICAgaWYgKCFmb3VuZCB8fCBjbS5nZXRMaW5lKGZvdW5kLmZyb20ubGluZSkubGVuZ3RoID4gbWF4
SGlnaGxpZ2h0TGVuIHx8CiAgICAgICAgZm91bmQudG8gJiYgY20uZ2V0TGluZShmb3VuZC50by5s
aW5lKS5sZW5ndGggPiBtYXhIaWdobGlnaHRMZW4pCkBAIC03MiwxMSArNzQsMTMgQEAKICAgICBp
ZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpCiAgICAgICBjbS5vZmYoImN1cnNvckFj
dGl2aXR5IiwgZG9NYXRjaEJyYWNrZXRzKTsKICAgICBpZiAodmFsKSB7Ci0gICAgICBjbS5zdGF0
ZS5fbWF0Y2hCcmFja2V0cyA9IHR5cGVvZiB2YWwgPT0gIm9iamVjdCIgPyB2YWwgOiB7fTsKKyAg
ICAgIGNtLnN0YXRlLm1hdGNoQnJhY2tldHMgPSB0eXBlb2YgdmFsID09ICJvYmplY3QiID8gdmFs
IDoge307CiAgICAgICBjbS5vbigiY3Vyc29yQWN0aXZpdHkiLCBkb01hdGNoQnJhY2tldHMpOwog
ICAgIH0KICAgfSk7CiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oIm1hdGNoQnJhY2tl
dHMiLCBmdW5jdGlvbigpIHttYXRjaEJyYWNrZXRzKHRoaXMsIHRydWUpO30pOwotICBDb2RlTWly
cm9yLmRlZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsIGZ1bmN0aW9uKCl7cmV0
dXJuIGZpbmRNYXRjaGluZ0JyYWNrZXQodGhpcyk7fSk7CisgIENvZGVNaXJyb3IuZGVmaW5lRXh0
ZW5zaW9uKCJmaW5kTWF0Y2hpbmdCcmFja2V0IiwgZnVuY3Rpb24ocG9zLCBzdHJpY3QpeworICAg
IHJldHVybiBmaW5kTWF0Y2hpbmdCcmFja2V0KHRoaXMsIHBvcywgc3RyaWN0KTsKKyAgfSk7CiB9
KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwppbmRleCAwNjZkYjk3YTgyYTYyODBkYTlh
ZThiYTJkOTMyNWY1ZDFjNDY0OWJjLi45MDE2Y2M3YWFlOGJmNTkyNTI4ZTZmYjNmMTk0YTk4NWYz
YjhkYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwpAQCAtMTksNDMgKzE5LDY0IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAotICAgIGlmICgoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsv
KSkKLSAgICAgIHx8IChjaCA9PSAieCIgfHwgY2ggPT0gIlgiKSAmJiBzdHJlYW0ubWF0Y2goL14n
WzAtOWEtZkEtRl0rJy8pKSB7CisgICAgaWYgKHN1cHBvcnQuaGV4TnVtYmVyID09IHRydWUgJiYK
KyAgICAgICgoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsvKSkK
KyAgICAgIHx8IChjaCA9PSAieCIgfHwgY2ggPT0gIlgiKSAmJiBzdHJlYW0ubWF0Y2goL14nWzAt
OWEtZkEtRl0rJy8pKSkgewogICAgICAgLy8gaGV4CisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYu
bXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2hleGFkZWNpbWFsLWxpdGVyYWxzLmh0bWwKICAg
ICAgIHJldHVybiAibnVtYmVyIjsKLSAgICB9IGVsc2UgaWYgKCgoY2ggPT0gImIiIHx8IGNoID09
ICJCIikgJiYgc3RyZWFtLm1hdGNoKC9eJ1swMV0rJy8pKQotICAgICAgfHwgKGNoID09ICIwIiAm
JiBzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkpIHsKKyAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmlu
YXJ5TnVtYmVyID09IHRydWUgJiYKKyAgICAgICgoKGNoID09ICJiIiB8fCBjaCA9PSAiQiIpICYm
IHN0cmVhbS5tYXRjaCgvXidbMDFdKycvKSkKKyAgICAgIHx8IChjaCA9PSAiMCIgJiYgc3RyZWFt
Lm1hdGNoKC9eYlswMV0rLykpKSkgewogICAgICAgLy8gYml0c3RyaW5nCisgICAgICAvLyByZWY6
IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2JpdC1maWVsZC1saXRlcmFs
cy5odG1sCiAgICAgICByZXR1cm4gIm51bWJlciI7CiAgICAgfSBlbHNlIGlmIChjaC5jaGFyQ29k
ZUF0KDApID4gNDcgJiYgY2guY2hhckNvZGVBdCgwKSA8IDU4KSB7CiAgICAgICAvLyBudW1iZXJz
Ci0gICAgICBzdHJlYW0ubWF0Y2goL15bMC05XSpcLj9bMC05XSsoW2VFXVstK10/WzAtOV0rKT8v
KTsKKyAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4v
bnVtYmVyLWxpdGVyYWxzLmh0bWwKKyAgICAgICAgICBzdHJlYW0ubWF0Y2goL15bMC05XSpcLj9b
MC05XSsoW2VFXVstK10/WzAtOV0rKT8vKTsKKyAgICAgIHN1cHBvcnQuZGVjaW1hbGxlc3NGbG9h
dCA9PSB0cnVlICYmIHN0cmVhbS5lYXQoJy4nKTsKICAgICAgIHJldHVybiAibnVtYmVyIjsKICAg
ICB9IGVsc2UgaWYgKGNoID09ICI/IiAmJiAoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVv
bCgpIHx8IHN0cmVhbS5lYXQoIjsiKSkpIHsKICAgICAgIC8vIHBsYWNlaG9sZGVycwogICAgICAg
cmV0dXJuICJ2YXJpYWJsZS0zIjsKLSAgICB9IGVsc2UgaWYgKGNoID09ICciJyB8fCBjaCA9PSAi
JyIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCAoY2ggPT0gJyInICYmIHN1cHBvcnQu
ZG91YmxlUXVvdGUpKSB7CiAgICAgICAvLyBzdHJpbmdzCisgICAgICAvLyByZWY6IGh0dHA6Ly9k
ZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sCiAgICAg
ICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7CiAgICAgICByZXR1cm4gc3RhdGUu
dG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CisgICAgfSBlbHNlIGlmICgoKChzdXBwb3J0Lm5DaGFy
Q2FzdCA9PSB0cnVlICYmIChjaCA9PSAibiIgfHwgY2ggPT0gIk4iKSkKKyAgICAgICAgfHwgKHN1
cHBvcnQuY2hhcnNldENhc3QgPT0gdHJ1ZSAmJiBjaCA9PSAiXyIgJiYgc3RyZWFtLm1hdGNoKC9b
YS16XVthLXowLTldKi9pKSkpCisgICAgICAgICYmIChzdHJlYW0ucGVlaygpID09ICInIiB8fCBz
dHJlYW0ucGVlaygpID09ICciJykpKSB7CisgICAgICAvLyBjaGFyc2V0IGNhc3Rpbmc6IF91dGY4
J3N0cicsIE4nc3RyJywgbidzdHInCisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29t
L2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sCisgICAgICByZXR1cm4gImtl
eXdvcmQiOwogICAgIH0gZWxzZSBpZiAoL15bXChcKSxcO1xbXF1dLy50ZXN0KGNoKSkgewogICAg
ICAgLy8gbm8gaGlnaGxpZ2h0bmluZwogICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBlbHNlIGlm
IChjaCA9PSAiIyIgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikgJiYgc3RyZWFtLmVh
dCgiICIpKSkgeworICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5jb21tZW50U2xhc2hTbGFzaCAmJiBj
aCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiLyIpKSB7CisgICAgICAvLyAxLWxpbmUgY29tbWVudAor
ICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOworICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICB9
IGVsc2UgaWYgKChzdXBwb3J0LmNvbW1lbnRIYXNoICYmIGNoID09ICIjIikKKyAgICAgICAgfHwg
KGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikgJiYgKCFzdXBwb3J0LmNvbW1lbnRTcGFjZVJl
cXVpcmVkIHx8IHN0cmVhbS5lYXQoIiAiKSkpKSB7CiAgICAgICAvLyAxLWxpbmUgY29tbWVudHMK
KyAgICAgIC8vIHJlZjogaHR0cHM6Ly9rYi5hc2ttb250eS5vcmcvZW4vY29tbWVudC1zeW50YXgv
CiAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAg
IH0gZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgLy8gbXVs
dGktbGluZSBjb21tZW50cworICAgICAgLy8gcmVmOiBodHRwczovL2tiLmFza21vbnR5Lm9yZy9l
bi9jb21tZW50LXN5bnRheC8KICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50Owog
ICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgIH0gZWxzZSBp
ZiAoY2ggPT0gIi4iKSB7CiAgICAgICAvLyAuMSBmb3IgMC4xCi0gICAgICBpZiAoc3VwcG9ydC56
ZXJvbGVzc0Zsb2F0ID09IHRydWUgJiYgc3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVxkKik/fFxk
KmVcZCspL2kpKSB7CisgICAgICBpZiAoc3VwcG9ydC56ZXJvbGVzc0Zsb2F0ID09IHRydWUgJiYg
c3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVsrLV0/XGQrKT8pL2kpKSB7CiAgICAgICAgIHJldHVy
biAibnVtYmVyIjsKICAgICAgIH0KICAgICAgIC8vIC50YWJsZV9uYW1lIChPREJDKQotICAgICAg
aWYgKHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfXSsvKSAmJiBzdXBwb3J0Lk9EQkNkb3RUYWJsZSA9
PSB0cnVlKSB7CisgICAgICAvLyAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZt
YW4vNS42L2VuL2lkZW50aWZpZXItcXVhbGlmaWVycy5odG1sCisgICAgICBpZiAoc3VwcG9ydC5P
REJDZG90VGFibGUgPT0gdHJ1ZSAmJiBzdHJlYW0ubWF0Y2goL15bYS16QS1aX10rLykpIHsKICAg
ICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG9wZXJh
dG9yQ2hhcnMudGVzdChjaCkpIHsKQEAgLTY1LDExICs4NiwxMyBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfSBlbHNl
IGlmIChjaCA9PSAneycgJiYKICAgICAgICAgKHN0cmVhbS5tYXRjaCgvXiggKSooZHxEfHR8VHx0
c3xUUykoICkqJ1teJ10qJyggKSp9LykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKihkfER8dHxUfHRz
fFRTKSggKSoiW14iXSoiKCApKn0vKSkpIHsKICAgICAgIC8vIGRhdGVzICh3ZWlyZCBPREJDIHN5
bnRheCkKKyAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUv
ZW4vZGF0ZS1hbmQtdGltZS1saXRlcmFscy5odG1sCiAgICAgICByZXR1cm4gIm51bWJlciI7CiAg
ICAgfSBlbHNlIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXltfXHdcZF0vKTsKICAgICAgIHZh
ciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgLy8gZGF0ZXMg
KHN0YW5kYXJkIFNRTCBzeW50YXgpCisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29t
L2RvYy9yZWZtYW4vNS41L2VuL2RhdGUtYW5kLXRpbWUtbGl0ZXJhbHMuaHRtbAogICAgICAgaWYg
KGRhdGVTUUwuaGFzT3duUHJvcGVydHkod29yZCkgJiYgKHN0cmVhbS5tYXRjaCgvXiggKSsnW14n
XSonLykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKyJbXiJdKiIvKSkpCiAgICAgICAgIHJldHVybiAi
bnVtYmVyIjsKICAgICAgIGlmIChhdG9tcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgcmV0dXJuICJh
dG9tIjsKQEAgLTE2Niw2ICsxODksOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgLy8gYGlkZW50aWZpZXJgCiAgIGZ1
bmN0aW9uIGhvb2tJZGVudGlmaWVyKHN0cmVhbSkgeworICAgIC8vIE15U1FML01hcmlhREIgaWRl
bnRpZmllcnMKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS42
L2VuL2lkZW50aWZpZXItcXVhbGlmaWVycy5odG1sCiAgICAgdmFyIGNoOwogICAgIHdoaWxlICgo
Y2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICBpZiAoY2ggPT0gImAiICYmICFz
dHJlYW0uZWF0KCJgIikpIHJldHVybiAidmFyaWFibGUtMiI7CkBAIC0xNzYsNyArMjAxLDkgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICAvLyB2YXJpYWJsZSB0b2tlbgogICBmdW5jdGlvbiBob29rVmFyKHN0cmVhbSkgewog
ICAgIC8vIHZhcmlhYmxlcwotICAgIC8vIEBAIGFuZCBwcmVmaXgKKyAgICAvLyBAQHByZWZpeC52
YXJOYW1lIEB2YXJOYW1lCisgICAgLy8gdmFyTmFtZSBjYW4gYmUgcXVvdGVkIHdpdGggYCBvciAn
IG9yICIKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2Vu
L3VzZXItdmFyaWFibGVzLmh0bWwKICAgICBpZiAoc3RyZWFtLmVhdCgiQCIpKSB7CiAgICAgICBz
dHJlYW0ubWF0Y2goL15zZXNzaW9uXC4vKTsKICAgICAgIHN0cmVhbS5tYXRjaCgvXmxvY2FsXC4v
KTsKQEAgLTIwMCwxOCArMjI3LDI3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAvLyBzaG9ydCBjbGllbnQga2V5d29y
ZCB0b2tlbgogICBmdW5jdGlvbiBob29rQ2xpZW50KHN0cmVhbSkgeworICAgIC8vIFxOIG1lYW5z
IE5VTEwKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2Vu
L251bGwtdmFsdWVzLmh0bWwKKyAgICBpZiAoc3RyZWFtLmVhdCgiTiIpKSB7CisgICAgICAgIHJl
dHVybiAiYXRvbSI7CisgICAgfQogICAgIC8vIFxnLCBldGMKLSAgICByZXR1cm4gc3RyZWFtLm1h
dGNoKC9eW2EtekEtWl1cYi8pID8gInZhcmlhYmxlLTIiIDogbnVsbDsKKyAgICAvLyByZWY6IGh0
dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL215c3FsLWNvbW1hbmRzLmh0bWwK
KyAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW2EtekEtWi4jIT9dLykgPyAidmFyaWFibGUtMiIg
OiBudWxsOwogICB9CiAKKyAgLy8gdGhlc2Uga2V5d29yZHMgYXJlIHVzZWQgYnkgYWxsIFNRTCBk
aWFsZWN0cyAoaG93ZXZlciwgYSBtb2RlIGNhbiBzdGlsbCBvdmVyd3JpdGUgaXQpCiAgIHZhciBz
cWxLZXl3b3JkcyA9ICJhbHRlciBhbmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRl
bGV0ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMgam9p
biBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2YWx1
ZXMgd2hlcmUgIjsKIAorICAvLyB0dXJuIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3QgaW50byBhbiBh
cnJheQogICBmdW5jdGlvbiBzZXQoc3RyKSB7CiAgICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0
ci5zcGxpdCgiICIpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kp
IG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgIHJldHVybiBvYmo7CiAgIH0KIAorICAvLyBBIGdl
bmVyaWMgU1FMIE1vZGUuIEl0J3Mgbm90IGEgc3RhbmRhcmQsIGl0IGp1c3QgdHJ5IHRvIHN1cHBv
cnQgd2hhdCBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkCiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
dGV4dC94LXNxbCIsIHsKICAgICBuYW1lOiAic3FsIiwKICAgICBrZXl3b3Jkczogc2V0KHNxbEtl
eXdvcmRzICsgImJlZ2luIiksCkBAIC0yMTksNyArMjU1LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGF0b21zOiBz
ZXQoImZhbHNlIHRydWUgbnVsbCB1bmtub3duIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitc
LSU8PiE9XS8sCiAgICAgZGF0ZVNRTDogc2V0KCJkYXRlIHRpbWUgdGltZXN0YW1wIiksCi0gICAg
c3VwcG9ydDogc2V0KCJPREJDZG90VGFibGUiKQorICAgIHN1cHBvcnQ6IHNldCgiT0RCQ2RvdFRh
YmxlIGRvdWJsZVF1b3RlIGJpbmFyeU51bWJlciBoZXhOdW1iZXIiKQogICB9KTsKIAogICBDb2Rl
TWlycm9yLmRlZmluZU1JTUUoInRleHQveC1teXNxbCIsIHsKQEAgLTIzMCw3ICsyNjYsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxsIHVua25vd24iKSwKICAgICBvcGVy
YXRvckNoYXJzOiAvXlsqK1wtJTw+IT0mfF5dLywKICAgICBkYXRlU1FMOiBzZXQoImRhdGUgdGlt
ZSB0aW1lc3RhbXAiKSwKLSAgICBzdXBwb3J0OiBzZXQoIk9EQkNkb3RUYWJsZSB6ZXJvbGVzc0Zs
b2F0IiksCisgICAgc3VwcG9ydDogc2V0KCJPREJDZG90VGFibGUgZGVjaW1hbGxlc3NGbG9hdCB6
ZXJvbGVzc0Zsb2F0IGJpbmFyeU51bWJlciBoZXhOdW1iZXIgZG91YmxlUXVvdGUgbkNoYXJDYXN0
IGNoYXJzZXRDYXN0IGNvbW1lbnRIYXNoIGNvbW1lbnRTcGFjZVJlcXVpcmVkIiksCiAgICAgaG9v
a3M6IHsKICAgICAgICJAIjogICBob29rVmFyLAogICAgICAgImAiOiAgIGhvb2tJZGVudGlmaWVy
LApAQCAtMjQ2LDcgKzI4Miw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBhdG9tczogc2V0KCJmYWxzZSB0cnVlIG51
bGwgdW5rbm93biIpLAogICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyorXC0lPD4hPSZ8Xl0vLAogICAg
IGRhdGVTUUw6IHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpLAotICAgIHN1cHBvcnQ6IHNldCgi
T0RCQ2RvdFRhYmxlIHplcm9sZXNzRmxvYXQiKSwKKyAgICBzdXBwb3J0OiBzZXQoIk9EQkNkb3RU
YWJsZSBkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJl
ciBkb3VibGVRdW90ZSBuQ2hhckNhc3QgY2hhcnNldENhc3QgY29tbWVudEhhc2ggY29tbWVudFNw
YWNlUmVxdWlyZWQiKSwKICAgICBob29rczogewogICAgICAgIkAiOiAgIGhvb2tWYXIsCiAgICAg
ICAiYCI6ICAgaG9va0lkZW50aWZpZXIsCkBAIC0yNTQsNiArMjkwLDIwIEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9
CiAgIH0pOwogCisgIC8vIHRoZSBxdWVyeSBsYW5ndWFnZSB1c2VkIGJ5IEFwYWNoZSBDYXNzYW5k
cmEgaXMgY2FsbGVkIENRTCwgYnV0IHRoaXMgbWltZSB0eXBlCisgIC8vIGlzIGNhbGxlZCBDYXNz
YW5kcmEgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggQ29udGV4dHVhbCBRdWVyeSBMYW5ndWFnZQor
ICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jYXNzYW5kcmEiLCB7CisgICAgbmFtZTog
InNxbCIsCisgICAgY2xpZW50OiB7IH0sCisgICAga2V5d29yZHM6IHNldCgidXNlIHNlbGVjdCBm
cm9tIHVzaW5nIGNvbnNpc3RlbmN5IHdoZXJlIGxpbWl0IGZpcnN0IHJldmVyc2VkIGZpcnN0IGFu
ZCBpbiBpbnNlcnQgaW50byB2YWx1ZXMgdXNpbmcgY29uc2lzdGVuY3kgdHRsIHVwZGF0ZSBzZXQg
ZGVsZXRlIHRydW5jYXRlIGJlZ2luIGJhdGNoIGFwcGx5IGNyZWF0ZSBrZXlzcGFjZSB3aXRoIGNv
bHVtbmZhbWlseSBwcmltYXJ5IGtleSBpbmRleCBvbiBkcm9wIGFsdGVyIHR5cGUgYWRkIGFueSBv
bmUgcXVvcnVtIGFsbCBsb2NhbF9xdW9ydW0gZWFjaF9xdW9ydW0iKSwKKyAgICBidWlsdGluOiBz
ZXQoImFzY2lpIGJpZ2ludCBibG9iIGJvb2xlYW4gY291bnRlciBkZWNpbWFsIGRvdWJsZSBmbG9h
dCBpbnQgdGV4dCB0aW1lc3RhbXAgdXVpZCB2YXJjaGFyIHZhcmludCIpLAorICAgIGF0b21zOiBz
ZXQoImZhbHNlIHRydWUiKSwKKyAgICBvcGVyYXRvckNoYXJzOiAvXls8Pj1dLywKKyAgICBkYXRl
U1FMOiB7IH0sCisgICAgc3VwcG9ydDogc2V0KCJjb21tZW50U2xhc2hTbGFzaCBkZWNpbWFsbGVz
c0Zsb2F0IiksCisgICAgaG9va3M6IHsgfQorICB9KTsKKwogICAvLyB0aGlzIGlzIGJhc2VkIG9u
IFBldGVyIFJhZ2FuaXRzY2gncyAncGxzcWwnIG1vZGUKICAgQ29kZU1pcnJvci5kZWZpbmVNSU1F
KCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICAgbmFtZTogICAgICAgInNxbCIsCkBAIC0yNjIsNiArMzEy
LDM4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICBmdW5jdGlvbnM6ICBzZXQoImFicyBhY29zIGFkZF9tb250aHMgYXNj
aWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgYmZpbGVuYW1lIGNlaWwgY2hhcnRvcm93aWQgY2hy
IGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50IGRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVw
X3ZhbF9vbl9pbmRleCBlbXB0eSBlcnJvciBleHAgZmFsc2UgZmxvb3IgZm91bmQgZ2xiIGdyZWF0
ZXN0IGhleHRvcmF3IGluaXRjYXAgaW5zdHIgaW5zdHJiIGlzb3BlbiBsYXN0X2RheSBsZWFzdCBs
ZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiBtYWtlX3JlZiBtYXggbWluIG1v
ZCBtb250aHNfYmV0d2VlbiBuZXdfdGltZSBuZXh0X2RheSBuZXh0dmFsIG5sc19jaGFyc2V0X2Rl
Y2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0X25hbWUgbmxzX2luaXRjYXAgbmxzX2xv
d2VyIG5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVs
bCBudmwgb3RoZXJzIHBvd2VyIHJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lk
dG9jaGFyIHJwYWQgcnRyaW0gc2lnbiBzaW4gc2luaCBzb3VuZGV4IHNxbGNvZGUgc3FsZXJybSBz
cXJ0IHN0ZGRldiBzdWJzdHIgc3Vic3RyYiBzdW0gc3lzZGF0ZSB0YW4gdGFuaCB0b19jaGFyIHRv
X2RhdGUgdG9fbGFiZWwgdG9fbXVsdGlfYnl0ZSB0b19udW1iZXIgdG9fc2luZ2xlX2J5dGUgdHJh
bnNsYXRlIHRydWUgdHJ1bmMgdWlkIHVwcGVyIHVzZXIgdXNlcmVudiB2YXJpYW5jZSB2c2l6ZSIp
LAogICAgIGJ1aWx0aW46ICAgIHNldCgiYmZpbGUgYmxvYiBjaGFyYWN0ZXIgY2xvYiBkZWMgZmxv
YXQgaW50IGludGVnZXIgbWxzbGFiZWwgbmF0dXJhbCBuYXR1cmFsbiBuY2hhciBuY2xvYiBudW1i
ZXIgbnVtZXJpYyBudmFyY2hhcjIgcmVhbCByb3d0eXBlIHNpZ250eXBlIHNtYWxsaW50IHN0cmlu
ZyB2YXJjaGFyIHZhcmNoYXIyIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9fl0v
LAotICAgIGRhdGVTUUw6ICAgIHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpCisgICAgZGF0ZVNR
TDogICAgc2V0KCJkYXRlIHRpbWUgdGltZXN0YW1wIiksCisgICAgc3VwcG9ydDogICAgc2V0KCJk
b3VibGVRdW90ZSBuQ2hhckNhc3QgemVyb2xlc3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVy
IikKICAgfSk7CiB9KCkpOworCisvKgorICBIb3cgUHJvcGVydGllcyBvZiBNaW1lIFR5cGVzIGFy
ZSB1c2VkIGJ5IFNRTCBNb2RlCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworICBrZXl3b3JkczoKKyAgICBBIGxpc3Qgb2Yga2V5d29yZHMgeW91
IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgIGZ1bmN0aW9uczoKKyAgICBBIGxpc3Qgb2YgZnVu
Y3Rpb24gbmFtZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgIGJ1aWx0aW46CisgICAg
QSBsaXN0IG9mIGJ1aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQgKGlmIHlv
dSB3YW50IHR5cGVzIHRvIGJlIG9mIGNsYXNzICJidWlsdGluIiBpbnN0ZWFkIG9mICJrZXl3b3Jk
IikuCisgIG9wZXJhdG9yQ2hhcnM6CisgICAgQWxsIGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGhh
bmRsZWQgYXMgb3BlcmF0b3JzLgorICBjbGllbnQ6CisgICAgQ29tbWFuZHMgcGFyc2VkIGFuZCBl
eGVjdXRlZCBieSB0aGUgY2xpZW50IChub3QgdGhlIHNlcnZlcikuCisgIHN1cHBvcnQ6CisgICAg
QSBsaXN0IG9mIHN1cHBvcnRlZCBzeW50YXhlcyB3aGljaCBhcmUgbm90IGNvbW1vbiwgYnV0IGFy
ZSBzdXBwb3J0ZWQgYnkgbW9yZSB0aGFuIDEgREJNUy4KKyAgICAqIE9EQkNkb3RUYWJsZTogLnRh
YmxlTmFtZQorICAgICogemVyb2xlc3NGbG9hdDogLjEKKyAgICAqIGRvdWJsZVF1b3RlCisgICAg
KiBuQ2hhckNhc3Q6IE4nc3RyaW5nJworICAgICogY2hhcnNldENhc3Q6IF91dGY4J3N0cmluZycK
KyAgICAqIGNvbW1lbnRIYXNoOiB1c2UgIyBjaGFyIGZvciBjb21tZW50cworICAgICogY29tbWVu
dFNsYXNoU2xhc2g6IHVzZSAvLyBmb3IgY29tbWVudHMKKyAgICAqIGNvbW1lbnRTcGFjZVJlcXVp
cmVkOiByZXF1aXJlIGEgc3BhY2UgYWZ0ZXIgLS0gZm9yIGNvbW1lbnRzCisgIGF0b21zOgorICAg
IEtleXdvcmRzIHRoYXQgbXVzdCBiZSBoaWdobGlnaHRlZCBhcyBhdG9tcywuIFNvbWUgREJNUydz
IHN1cHBvcnQgbW9yZSBhdG9tcyB0aGFuIG90aGVyczoKKyAgICBVTktOT1dOLCBJTkZJTklUWSwg
VU5ERVJGTE9XLCBOYU4uLi4KKyAgZGF0ZVNRTDoKKyAgICBVc2VkIGZvciBkYXRlL3RpbWUgU1FM
IHN0YW5kYXJkIHN5bnRheCwgYmVjYXVzZSBub3QgYWxsIERCTVMncyBzdXBwb3J0IHNhbWUgdGVt
cG9yYWwgdHlwZXMuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwppbmRleCBiMDQyNDhj
NmM2ODlhM2Y5MzAwYTczMDA3OGU4OTc1NmY0M2IyYTAyLi4wN2RiMjk5MDM5MGU5Y2NhZTZkMTI2
YmZjN2JiOWRjNmU4NDdjMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwpAQCAtNTgs
MjAgKzU4LDE5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkgewogICAgICAg
ICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRv
bSIsICJdXT4iKSk7CiAgICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJj
b21tZW50IiwgIi0tPiIpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBF
IiwgdHJ1ZSwgdHJ1ZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikp
IHsKKyAgICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICItLT4iKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsK
ICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgICAgIHJldHVy
biBjaGFpbihkb2N0eXBlKDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CisgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5l
YXQoIj8iKSkgewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAg
ICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICAgcmV0dXJu
ICJtZXRhIjsKLSAgICAgIH0KLSAgICAgIGVsc2UgeworICAgICAgfSBlbHNlIHsKICAgICAgICAg
dmFyIGlzQ2xvc2UgPSBzdHJlYW0uZWF0KCIvIik7CiAgICAgICAgIHRhZ05hbWUgPSAiIjsKICAg
ICAgICAgdmFyIGM7CkBAIC04MSw4ICs4MCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1s
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgc3RhdGUudG9rZW5p
emUgPSBpblRhZzsKICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgfQotICAgIH0KLSAgICBl
bHNlIGlmIChjaCA9PSAiJiIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICImIikgewogICAgICAg
dmFyIG9rOwogICAgICAgaWYgKHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICBpZiAoc3RyZWFt
LmVhdCgieCIpKSB7CkBAIC05NCw4ICs5Miw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1s
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgb2sgPSBzdHJlYW0u
ZWF0V2hpbGUoL1tcd1wuXC06XS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgIH0KICAgICAg
IHJldHVybiBvayA/ICJhdG9tIiA6ICJlcnJvciI7Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0g
ZWxzZSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7CiAgICAgICByZXR1cm4gbnVs
bDsKICAgICB9CkBAIC0xMDcsMTYgKzEwNCwxNSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInht
bCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IGluVGV4dDsKICAgICAgIHR5cGUgPSBjaCA9PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xv
c2VUYWciOwogICAgICAgcmV0dXJuICJ0YWciOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PSAi
PSIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICI9IikgewogICAgICAgdHlwZSA9ICJlcXVhbHMi
OwogICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9bXCdcIl0vLnRlc3Qo
Y2gpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiPCIpIHsKKyAgICAgIHJldHVybiAiZXJyb3Ii
OworICAgIH0gZWxzZSBpZiAoL1tcJ1wiXS8udGVzdChjaCkpIHsKICAgICAgIHN0YXRlLnRva2Vu
aXplID0gaW5BdHRyaWJ1dGUoY2gpOwogICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVh
bSwgc3RhdGUpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgc3RyZWFt
LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKTsKICAgICAgIHJldHVybiAid29yZCI7CiAg
ICAgfQpAQCAtMzIwLDcgKzMxNiw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBibG9ja0NvbW1lbnRTdGFydDogIjwh
LS0iLAogICAgIGJsb2NrQ29tbWVudEVuZDogIi0tPiIsCiAKLSAgICBjb25maWd1cmF0aW9uOiBw
YXJzZXJDb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIgorICAgIGNvbmZpZ3VyYXRpb246
IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiLAorICAgIGhlbHBlclR5cGU6
IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiCiAgIH07CiB9KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206694</attachid>
            <date>2013-07-15 15:35:46 -0700</date>
            <delta_ts>2013-07-15 16:30:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118605-20130715183501.patch</filename>
            <type>text/plain</type>
            <size>243443</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAw
NzQxNzNjODk0MzM0ZmU0NTQzMmRkMTdjZTg4Y2M3MGFmNTFhYTVjLi41M2IzMzY5OWFiOGJhMDU2
OWE0MGEyNWMxMzI1NzliZTVmMDgyOWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxMy0wNy0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gMy4xNC4xLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLWNv
ZGVtaXJyb3ItcmVzb3VyY2VzLnJiOiBVcGRhdGVkIHRoZSBsaXN0IHRvIGFkZCBjbG9zZWJyYWNr
ZXRzLmpzIGFuZCBzb3J0ZWQgdGhlIGZpbGVzLgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50
aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50
aW5nL0Zvcm1hdHRlci5qczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5qczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2Rl
bWlycm9yLmNzczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpz
OgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qczoKKyAgICAgICAgKiBUb29s
cy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJyYWNrZXRzLmpzOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzOgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzOgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOgorCiAyMDEzLTA3
LTEyICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBQYXNzIG51bGwgZm9yIHNpZGViYXJQYW5lbHMgYW5kIHJvbGUgaW4gV2ViSW5z
cGVjdG9yLlNpZGViYXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Njcmlw
dHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2VzLnJiIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1NjcmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2VzLnJiCmluZGV4IGNiOWRlZDcwNzc1
Zjg5OTU3MTU0OWUyM2JmYTQxMzAzNTVlMDhhMGUuLjYwODYwMzAyNDljMjRmMzNlMTM4MmRmZGVk
OWFiYTFmMDU1ZDgxM2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRz
L3VwZGF0ZS1jb2RlbWlycm9yLXJlc291cmNlcy5yYgorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvU2NyaXB0cy91cGRhdGUtY29kZW1pcnJvci1yZXNvdXJjZXMucmIKQEAgLTI5LDE0ICsyOSwx
NSBAQCB3ZWJfaW5zcGVjdG9yX3VzZXJfaW50ZXJmYWNlX3BhdGggPSBGaWxlLmV4cGFuZF9wYXRo
IEZpbGUuam9pbihGaWxlLmRpcm5hbWUoX19GSQogd2ViX2luc3BlY3Rvcl9jb2RlX21pcnJvcl9y
ZXNvdXJjZXNfcGF0aCA9IEZpbGUuam9pbiB3ZWJfaW5zcGVjdG9yX3VzZXJfaW50ZXJmYWNlX3Bh
dGgsICIvRXh0ZXJuYWwvQ29kZU1pcnJvciIKIAogQ09ERV9NSVJST1JfRklMRVNfVE9fQ09QWSA9
ICV3KAotICBsaWIvY29kZW1pcnJvci5qcwotICBsaWIvY29kZW1pcnJvci5jc3MKICAgYWRkb24v
Y29tbWVudC9jb21tZW50LmpzCisgIGFkZG9uL2Rpc3BsYXkvcGxhY2Vob2xkZXIuanMKKyAgYWRk
b24vZWRpdC9jbG9zZWJyYWNrZXRzLmpzCiAgIGFkZG9uL2VkaXQvbWF0Y2hicmFja2V0cy5qcwog
ICBhZGRvbi9tb2RlL292ZXJsYXkuanMKLSAgYWRkb24vZGlzcGxheS9wbGFjZWhvbGRlci5qcwog
ICBhZGRvbi9ydW5tb2RlL3J1bm1vZGUuanMKICAgYWRkb24vc2VhcmNoL3NlYXJjaGN1cnNvci5q
cworICBsaWIvY29kZW1pcnJvci5jc3MKKyAgbGliL2NvZGVtaXJyb3IuanMKICAgbW9kZS9jbG9q
dXJlL2Nsb2p1cmUuanMKICAgbW9kZS9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0LmpzCiAgIG1v
ZGUvY3NzL2Nzcy5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1By
ZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCmluZGV4IGQ1
ZmE5NDFhNDY5NDZhZWJlMWU0NWM2YWFhNjNlNTk2NzRhN2IyMTQuLjgxYzgxNTVlNzEyNzVjYzk5
MDJhNjA2MzljZDQ2MzI0ZGJhMDc5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Ub29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRl
cnMuanMKQEAgLTEsMyArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKIC8vIEluIHRoZSBpbnNwZWN0b3Ig
dG9rZW4gdHlwZXMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgZXh0cmEgbW9kZSBpbmZv
cm1hdGlvbgogLy8gYWZ0ZXIgdGhlIGFjdHVhbCB0b2tlbiB0eXBlLiBTbyB3ZSBjYW4ndCBkbyB0
b2tlbiA9PT0gImZvbyIuIFNvIGluc3RlYWQgd2UgZG8KIC8vIC9cYmZvb1xiLy50ZXN0KHRva2Vu
KS4KQEAgLTQyLDYgKzY3LDggQEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJqYXZhc2NyaXB0Iiwg
ewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgaWYgKGxhc3RDb250
ZW50ID09PSAiZmluYWxseSIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAobGFzdENvbnRlbnQgPT09ICJkbyIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMK
aW5kZXggNmZkNjU4ZWY5NGM2MDY3NjVhZmFmOTVmYjVlOGZhMDdjZGZkYjFmMy4uNTI0ZTUwZDVh
YjM4N2UzYzFhNzY4OWQxMjIwZjVmM2MwYzM0NDI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzCkBAIC0xLDMg
KzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCiBmdW5jdGlvbiBGb3JtYXR0ZXIoY29kZU1pcnJvciwgYnVp
bGRlcikKIHsKICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50
QnVpbGRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9G
b3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcwppbmRleCBlOTRkZWNhNWZiMDExNzVkZGQ1NDk1YjMz
NGU2MGYwZDhhYTMyM2IyLi40NTk2ODgwY2JhMTlhMmMwZDhhMjM5NjE3N2EwZmVhNGU1ZDEwYjE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Rm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rv
b2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCkBAIC0xLDMgKzEs
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCiBmdW5jdGlvbiBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBw
aW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxP
ZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQogewogICAgIHRoaXMuX29yaWdp
bmFsQ29udGVudCA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9v
bHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MKaW5kZXggMGI1MzcwNDUwNjczNTU0
Y2NmOTIzMjAwMjJmODMwN2JhNzM4MDY2Yi4uNTI4ODFmN2RmZDA5ZjgzY2M1Y2Q1NmY5MWZkM2Nh
NmI4NDYwYzAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29s
cy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcwpAQCAtMTksNyArMTksNyBAQAogICBwYWRk
aW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KIH0KIAotLkNv
ZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciB7CisuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVy
LCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
IC8qIFRoZSBsaXR0bGUgc3F1YXJlIGJldHdlZW4gSCBhbmQgViBzY3JvbGxiYXJzICovCiB9CiAK
QEAgLTI4LDYgKzI4LDcgQEAKIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICBib3JkZXItcmlnaHQ6
IDFweCBzb2xpZCAjZGRkOwogICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OworICB3aGl0ZS1z
cGFjZTogbm93cmFwOwogfQogLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge30KIC5Db2RlTWlycm9y
LWxpbmVudW1iZXIgewpAQCAtMTI0LDcgKzEyNSw3IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29k
ZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIC8qIFRoZSBmYWtlLCB2
aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcK
ICAgIGJlZm9yZSBhY3R1YWxsIHNjcm9sbGluZyBoYXBwZW5zLCB0aHVzIHByZXZlbnRpbmcgc2hh
a2luZyBhbmQKICAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwotLkNvZGVNaXJyb3ItdnNjcm9s
bGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxl
ciB7CisuQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29k
ZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAg
cG9zaXRpb246IGFic29sdXRlOwogICB6LWluZGV4OiA2OwogICBkaXNwbGF5OiBub25lOwpAQCAt
MTQxLDE2ICsxNDIsMTggQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNo
aW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogfQogLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxl
ciB7CiAgIHJpZ2h0OiAwOyBib3R0b206IDA7Ci0gIHotaW5kZXg6IDY7Cit9CisuQ29kZU1pcnJv
ci1ndXR0ZXItZmlsbGVyIHsKKyAgbGVmdDogMDsgYm90dG9tOiAwOwogfQogCiAuQ29kZU1pcnJv
ci1ndXR0ZXJzIHsKICAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7Ci0gIGhl
aWdodDogMTAwJTsKICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgIHotaW5kZXg6IDM7CiB9CiAu
Q29kZU1pcnJvci1ndXR0ZXIgeworICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICBoZWlnaHQ6IDEw
MCU7CiAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICBtYXJnaW4tYm90dG9tOiAtMzJweDsKQEAg
LTIwMiw3ICsyMDUsNiBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hp
bmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiB9CiAKIC5Db2RlTWlycm9yLXdpZGdldCB7Ci0gIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKIH0KIAogLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1z
Y3JvbGwgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVBy
aW50aW5nL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvY29kZW1pcnJvci5qcwppbmRleCA5YTk2Y2Q2OTg2M2ZjZTE5ZjM1MmM4ZmUzZGEy
Zjk4OGZjZTJmOGNmLi5hZWQ3ZTgzYjEzYTVkYTJhNzEwNDk1NjJhODMyNTA2MjRlOGI2OTNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29k
ZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvY29kZW1pcnJvci5qcwpAQCAtOTcsNyArOTcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICBlbHNlIGlucHV0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJvZmYiKTsK
ICAgICAvLyBpZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1
ZSAjMTI4NykKICAgICBpZiAoaW9zKSBpbnB1dC5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlkIGJs
YWNrIjsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0IiwgIm9mZiIpOyBpbnB1
dC5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOworICAgIGlucHV0LnNldEF0
dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2Nh
cGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsICJmYWxz
ZSIpOwogCiAgICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCiAgICAgZC5pbnB1
dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0
aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CkBAIC0xMDUsOCArMTA1
LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZC5zY3JvbGxiYXJI
ID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxcHgiKV0sICJD
b2RlTWlycm9yLWhzY3JvbGxiYXIiKTsKICAgICBkLnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtl
bHQoImRpdiIsIG51bGwsIG51bGwsICJ3aWR0aDogMXB4IildLCAiQ29kZU1pcnJvci12c2Nyb2xs
YmFyIik7CiAgICAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWly
cm9yLXNjcm9sbGJhci1maWxsZXIiKTsKKyAgICBkLmd1dHRlckZpbGxlciA9IGVsdCgiZGl2Iiwg
bnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpOwogICAgIC8vIERJVnMgY29udGFpbmlu
ZyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgYWN0dWFsIGNvZGUKLSAgICBkLmxpbmVEaXYgPSBlbHQo
ImRpdiIpOworICAgIGQubGluZURpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItY29k
ZSIpOwogICAgIGQuc2VsZWN0aW9uRGl2ID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRp
b246IHJlbGF0aXZlOyB6LWluZGV4OiAxIik7CiAgICAgLy8gQmxpbmt5IGN1cnNvciwgYW5kIGVs
ZW1lbnQgdXNlZCB0byBlbnN1cmUgY3Vyc29yIGZpdHMgYXQgdGhlIGVuZCBvZiBhIGxpbmUKICAg
ICBkLmN1cnNvciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpOwpA
QCAtMTI2LDE0ICsxMjcsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkKICAgICBkLmd1dHRlcnMgPSBl
bHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlcnMiKTsKICAgICBkLmxpbmVHdXR0ZXIg
PSBudWxsOwotICAgIC8vIEhlbHBlciBlbGVtZW50IHRvIHByb3Blcmx5IHNpemUgdGhlIGd1dHRl
ciBiYWNrZ3JvdW5kcwotICAgIHZhciBzY3JvbGxlcklubmVyID0gZWx0KCJkaXYiLCBbZC5zaXpl
ciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7
IG1pbi1oZWlnaHQ6IDEwMCUiKTsKICAgICAvLyBQcm92aWRlcyBzY3JvbGxpbmcKLSAgICBkLnNj
cm9sbGVyID0gZWx0KCJkaXYiLCBbc2Nyb2xsZXJJbm5lcl0sICJDb2RlTWlycm9yLXNjcm9sbCIp
OworICAgIGQuc2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwg
ZC5ndXR0ZXJzXSwgIkNvZGVNaXJyb3Itc2Nyb2xsIik7CiAgICAgZC5zY3JvbGxlci5zZXRBdHRy
aWJ1dGUoInRhYkluZGV4IiwgIi0xIik7CiAgICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhl
IGVkaXRvciBsaXZlcy4KICAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLmlucHV0RGl2LCBk
LnNjcm9sbGJhckgsIGQuc2Nyb2xsYmFyViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
LnNjcm9sbGJhckZpbGxlciwgZC5zY3JvbGxlcl0sICJDb2RlTWlycm9yIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNj
cm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKICAgICAvLyBXb3JrIGFyb3VuZCBJRTcgei1pbmRleCBi
dWcKICAgICBpZiAoaWVfbHQ4KSB7IGQuZ3V0dGVycy5zdHlsZS56SW5kZXggPSAtMTsgZC5zY3Jv
bGxlci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAwOyB9CiAgICAgaWYgKHBsYWNlLmFwcGVuZENoaWxk
KSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyBlbHNlIHBsYWNlKGQud3JhcHBlcik7CkBA
IC0xNjQsOCArMTYzLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ZC5wb2xsaW5nRmFzdCA9IGZhbHNlOwogICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9y
IHRoZSBwb2xsZXIKICAgICBkLnBvbGwgPSBuZXcgRGVsYXllZCgpOwotICAgIC8vIFRydWUgd2hl
biBhIGRyYWcgZnJvbSB0aGUgZWRpdG9yIGlzIGFjdGl2ZQotICAgIGQuZHJhZ2dpbmdUZXh0ID0g
ZmFsc2U7CiAKICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IG51
bGw7CiAgICAgZC5tZWFzdXJlTGluZUNhY2hlID0gW107CkBAIC0yMTQsNyArMjExLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhj
bSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKICAgICBjbGVhckNhY2hlcyhjbSk7Ci0gICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpe3VwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20uZG9jLmhlaWdo
dCk7fSwgMTAwKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhj
bSk7fSwgMTAwKTsKICAgfQogCiAgIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7CkBAIC0y
MzksOSArMjM2LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAK
ICAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChjbSkgewotICAgIHZhciBzdHlsZSA9IGtleU1hcFtj
bS5vcHRpb25zLmtleU1hcF0uc3R5bGU7CisgICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25z
LmtleU1hcF0sIHN0eWxlID0gbWFwLnN0eWxlOwogICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFz
c05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1h
cC1cUysvZywgIiIpICsKICAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFwLSIgKyBzdHlsZSA6ICIi
KTsKKyAgICBjbS5zdGF0ZS5kaXNhYmxlSW5wdXQgPSBtYXAuZGlzYWJsZUlucHV0OwogICB9CiAK
ICAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKGNtKSB7CkBAIC0yNTMsNiArMjUxLDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGd1dHRlcnNDaGFuZ2VkKGNt
KSB7CiAgICAgdXBkYXRlR3V0dGVycyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIwKTsKICAgfQogCiAg
IGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcnMoY20pIHsKQEAgLTMxOSwxMiArMzE4LDE0IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFJlLXN5bmNocm9uaXplIHRoZSBm
YWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgIC8vIGNvbnRlbnQu
IE9wdGlvbmFsbHkgZm9yY2UgYSBzY3JvbGxUb3AuCi0gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJh
cnMoZCAvKiBkaXNwbGF5ICovLCBkb2NIZWlnaHQpIHsKKyAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xs
YmFycyhjbSkgeworICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jSGVpZ2h0ID0gY20uZG9jLmhl
aWdodDsKICAgICB2YXIgdG90YWxIZWlnaHQgPSBkb2NIZWlnaHQgKyBwYWRkaW5nVmVydChkKTsK
ICAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9
IHRvdGFsSGVpZ2h0ICsgInB4IjsKKyAgICBkLmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5t
YXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYp
ICsgInB4IjsKICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQu
c2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KTsKLSAgICB2YXIgbmVlZHNIID0gZC5zY3JvbGxlci5zY3Jv
bGxXaWR0aCA+IGQuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgdmFyIG5lZWRzViA9IHNjcm9s
bEhlaWdodCA+IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0OworICAgIHZhciBuZWVkc0ggPSBkLnNj
cm9sbGVyLnNjcm9sbFdpZHRoID4gKGQuc2Nyb2xsZXIuY2xpZW50V2lkdGggKyAxKTsKKyAgICB2
YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgMSk7
CiAgICAgaWYgKG5lZWRzVikgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNjcm9s
bGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOwpAQCAtMzQxLDYgKzM0MiwxMSBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGQuc2Nyb2xsYmFyRmlsbGVy
LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUu
aGVpZ2h0ID0gZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGggPSBzY3JvbGxiYXJXaWR0aChk
Lm1lYXN1cmUpICsgInB4IjsKICAgICB9IGVsc2UgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlz
cGxheSA9ICIiOworICAgIGlmIChuZWVkc0ggJiYgY20ub3B0aW9ucy5jb3Zlckd1dHRlck5leHRU
b1Njcm9sbGJhciAmJiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7CisgICAgICBkLmd1dHRlckZp
bGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxl
LmhlaWdodCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOworICAgICAgZC5ndXR0
ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgiOworICAg
IH0gZWxzZSBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAKICAgICBpZiAobWFj
X2dlTGlvbiAmJiBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpID09PSAwKQogICAgICAgZC5zY3Jv
bGxiYXJWLnN0eWxlLm1pbldpZHRoID0gZC5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodCA9IG1h
Y19nZU1vdW50YWluTGlvbiA/ICIxOHB4IiA6ICIxMnB4IjsKQEAgLTM5OSwxNCArNDA1LDEwIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBvbGRGcm9tID0gY20u
ZGlzcGxheS5zaG93aW5nRnJvbSwgb2xkVG8gPSBjbS5kaXNwbGF5LnNob3dpbmdUbywgdXBkYXRl
ZDsKICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZp
ZXdQb3J0KTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICBpZiAodXBkYXRlRGlzcGxheUlubmVyKGNt
LCBjaGFuZ2VzLCB2aXNpYmxlKSkgewotICAgICAgICB1cGRhdGVkID0gdHJ1ZTsKLSAgICAgICAg
c2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICAgIGlmIChjbS5kaXNwbGF5LnNo
b3dpbmdGcm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0gb2xkVG8pCi0g
ICAgICAgICAgc2lnbmFsTGF0ZXIoY20sICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5
LnNob3dpbmdGcm9tLCBjbS5kaXNwbGF5LnNob3dpbmdUbyk7Ci0gICAgICB9IGVsc2UgYnJlYWs7
CisgICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywgdmlzaWJsZSkpIGJy
ZWFrOworICAgICAgdXBkYXRlZCA9IHRydWU7CiAgICAgICB1cGRhdGVTZWxlY3Rpb24oY20pOwot
ICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNwbGF5LCBjbS5kb2MuaGVpZ2h0KTsKKyAgICAg
IHVwZGF0ZVNjcm9sbGJhcnMoY20pOwogCiAgICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0
byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhCiAgICAgICBpZiAodmlld1BvcnQpCkBAIC00MTgsNiAr
NDIwLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgY2hhbmdl
cyA9IFtdOwogICAgIH0KIAorICAgIGlmICh1cGRhdGVkKSB7CisgICAgICBzaWduYWxMYXRlcihj
bSwgInVwZGF0ZSIsIGNtKTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnNob3dpbmdGcm9tICE9IG9s
ZEZyb20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0gb2xkVG8pCisgICAgICAgIHNpZ25hbExh
dGVyKGNtLCAidmlld3BvcnRDaGFuZ2UiLCBjbSwgY20uZGlzcGxheS5zaG93aW5nRnJvbSwgY20u
ZGlzcGxheS5zaG93aW5nVG8pOworICAgIH0KICAgICByZXR1cm4gdXBkYXRlZDsKICAgfQogCkBA
IC01MDUsOSArNTEyLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgZGlzcGxheS5sYXN0U2l6ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAg
ICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0cyB3aGVuIHRoZSBl
ZGl0b3IgaXMKICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdlcy4KLSAgICBp
ZiAoZGlmZmVyZW50KSBkaXNwbGF5Lmxhc3RTaXplQyA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRI
ZWlnaHQ7CisgICAgaWYgKGRpZmZlcmVudCkgeworICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgPSBk
aXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7
CisgICAgfQogICAgIGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBmcm9tOyBkaXNwbGF5LnNob3dpbmdU
byA9IHRvOwotICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogCiAgICAgdmFyIHByZXZCb3R0b20g
PSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wOwogICAgIGZvciAodmFyIG5vZGUgPSBkaXNwbGF5
LmxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0OyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGlu
ZykgaWYgKG5vZGUubGluZU9iaikgewpAQCAtNTk2LDggKzYwNSw5IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG5leHRJbnRhY3QgJiYgbmV4dEludGFjdC50
byA9PSBsaW5lTikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwogICAgICAgaWYgKGxpbmVJ
c0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7CiAgICAgICAgIGlmIChsaW5lLmhlaWdodCAhPSAwKSB1
cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgICBpZiAobGluZS53aWRnZXRzICYmIGN1
ci5wcmV2aW91c1NpYmxpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0
aDsgKytpKQotICAgICAgICAgIGlmIChsaW5lLndpZGdldHNbaV0uc2hvd0lmSGlkZGVuKSB7Cisg
ICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyLnByZXZpb3VzU2libGluZykgZm9yICh2YXIg
aSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICB2YXIgdyA9
IGxpbmUud2lkZ2V0c1tpXTsKKyAgICAgICAgICBpZiAody5zaG93SWZIaWRkZW4pIHsKICAgICAg
ICAgICAgIHZhciBwcmV2ID0gY3VyLnByZXZpb3VzU2libGluZzsKICAgICAgICAgICAgIGlmICgv
cHJlL2kudGVzdChwcmV2Lm5vZGVOYW1lKSkgewogICAgICAgICAgICAgICB2YXIgd3JhcCA9IGVs
dCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwpAQCAtNjA1LDkgKzYx
NSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
d3JhcC5hcHBlbmRDaGlsZChwcmV2KTsKICAgICAgICAgICAgICAgcHJldiA9IHdyYXA7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgd25vZGUgPSBwcmV2LmFwcGVuZENoaWxkKGVsdCgi
ZGl2IiwgW2xpbmUud2lkZ2V0c1tpXS5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsK
LSAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldChsaW5lLndpZGdldHNbaV0sIHdub2RlLCBw
cmV2LCBkaW1zKTsKKyAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBwZW5kQ2hpbGQoZWx0
KCJkaXYiLCBbdy5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsKKyAgICAgICAgICAg
IGlmICghdy5oYW5kbGVNb3VzZUV2ZW50cykgd25vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3LCB3bm9kZSwgcHJldiwgZGltcyk7CiAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKG5leHRJbnRhY3QgJiYgbmV4dElu
dGFjdC5mcm9tIDw9IGxpbmVOICYmIG5leHRJbnRhY3QudG8gPiBsaW5lTikgewogICAgICAgICAv
LyBUaGlzIGxpbmUgaXMgaW50YWN0LiBTa2lwIHRvIHRoZSBhY3R1YWwgbm9kZS4gVXBkYXRlIGl0
cwogICAgICAgICAvLyBsaW5lIG51bWJlciBpZiBuZWVkZWQuCkBAIC02NTAsMjUgKzY2MiwyNSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGlmIChyZXVzZSkgewog
ICAgICAgcmV1c2UuYWxpZ25hYmxlID0gbnVsbDsKLSAgICAgIHZhciBpc09rID0gdHJ1ZSwgd2lk
Z2V0c1NlZW4gPSAwOworICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3aWRnZXRzU2VlbiA9IDAsIGlu
c2VydEJlZm9yZSA9IG51bGw7CiAgICAgICBmb3IgKHZhciBuID0gcmV1c2UuZmlyc3RDaGlsZCwg
bmV4dDsgbjsgbiA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IG4ubmV4dFNpYmxpbmc7CiAgICAg
ICAgIGlmICghL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIvLnRlc3Qobi5jbGFzc05hbWUpKSB7
CiAgICAgICAgICAgcmV1c2UucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGZpcnN0ID0gdHJ1ZTsgaSA8IGxpbmUud2lkZ2V0cy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHdpZGdldCA9IGxpbmUud2lkZ2V0c1tpXSwgaXNG
aXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCF3aWRnZXQuYWJvdmUpIHsgaXNGaXJzdCA9
IGZpcnN0OyBmaXJzdCA9IGZhbHNlOyB9CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
aW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB3aWRnZXQgPSBsaW5l
LndpZGdldHNbaV07CiAgICAgICAgICAgICBpZiAod2lkZ2V0Lm5vZGUgPT0gbi5maXJzdENoaWxk
KSB7CisgICAgICAgICAgICAgIGlmICghd2lkZ2V0LmFib3ZlICYmICFpbnNlcnRCZWZvcmUpIGlu
c2VydEJlZm9yZSA9IG47CiAgICAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQs
IG4sIHJldXNlLCBkaW1zKTsKICAgICAgICAgICAgICAgKyt3aWRnZXRzU2VlbjsKLSAgICAgICAg
ICAgICAgaWYgKGlzRmlyc3QpIHJldXNlLmluc2VydEJlZm9yZShsaW5lRWxlbWVudCwgbik7CiAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAg
ICBpZiAoaSA9PSBsaW5lLndpZGdldHMubGVuZ3RoKSB7IGlzT2sgPSBmYWxzZTsgYnJlYWs7IH0K
ICAgICAgICAgfQogICAgICAgfQorICAgICAgcmV1c2UuaW5zZXJ0QmVmb3JlKGxpbmVFbGVtZW50
LCBpbnNlcnRCZWZvcmUpOwogICAgICAgaWYgKGlzT2sgJiYgd2lkZ2V0c1NlZW4gPT0gbGluZS53
aWRnZXRzLmxlbmd0aCkgewogICAgICAgICB3cmFwID0gcmV1c2U7CiAgICAgICAgIHJldXNlLmNs
YXNzTmFtZSA9IGxpbmUud3JhcENsYXNzIHx8ICIiOwpAQCAtNzAzLDYgKzcxNSw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpZV9sdDgpIHdyYXAuc3R5bGUu
ekluZGV4ID0gMjsKICAgICBpZiAobGluZS53aWRnZXRzICYmIHdyYXAgIT0gcmV1c2UpIGZvciAo
dmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7CiAgICAg
ICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sICJD
b2RlTWlycm9yLWxpbmV3aWRnZXQiKTsKKyAgICAgIGlmICghd2lkZ2V0LmhhbmRsZU1vdXNlRXZl
bnRzKSBub2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7CiAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQo
d2lkZ2V0LCBub2RlLCB3cmFwLCBkaW1zKTsKICAgICAgIGlmICh3aWRnZXQuYWJvdmUpCiAgICAg
ICAgIHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgbGlu
ZS5oZWlnaHQgIT0gMCA/IGd1dHRlcldyYXAgOiBsaW5lRWxlbWVudCk7CkBAIC03ODUsNjcgKzc5
OCw1OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0b3ApICsgInB4Iikp
OwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJn
LCByZXRUb3ApIHsKKyAgICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0Fy
ZykgewogICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7Ci0gICAgICB2YXIg
bGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIHJWYWwgPSByZXRUb3AgPyBJbmZpbml0eSA6
IC1JbmZpbml0eTsKLSAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCkgewotICAgICAgICByZXR1cm4g
Y2hhckNvb3JkcyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxpbmVPYmopOworICAgICAgdmFy
IGxpbmVMZW4gPSBsaW5lT2JqLnRleHQubGVuZ3RoOworICAgICAgdmFyIHN0YXJ0LCBlbmQ7Cisg
ICAgICBmdW5jdGlvbiBjb29yZHMoY2gsIGJpYXMpIHsKKyAgICAgICAgcmV0dXJuIGNoYXJDb29y
ZHMoY20sIFBvcyhsaW5lLCBjaCksICJkaXYiLCBsaW5lT2JqLCBiaWFzKTsKICAgICAgIH0KIAog
ICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhnZXRPcmRlcihsaW5lT2JqKSwgZnJvbUFyZyB8fCAw
LCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbihmcm9tLCB0bywgZGly
KSB7Ci0gICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGRpciA9PSAicnRsIiA/IHRvIC0gMSA6
IGZyb20pOwotICAgICAgICB2YXIgcmlnaHRQb3MgPSBjb29yZHMoZGlyID09ICJydGwiID8gZnJv
bSA6IHRvIC0gMSk7Ci0gICAgICAgIHZhciBsZWZ0ID0gbGVmdFBvcy5sZWZ0LCByaWdodCA9IHJp
Z2h0UG9zLnJpZ2h0OworICAgICAgICB2YXIgbGVmdFBvcyA9IGNvb3Jkcyhmcm9tLCAibGVmdCIp
LCByaWdodFBvcywgbGVmdCwgcmlnaHQ7CisgICAgICAgIGlmIChmcm9tID09IHRvKSB7CisgICAg
ICAgICAgcmlnaHRQb3MgPSBsZWZ0UG9zOworICAgICAgICAgIGxlZnQgPSByaWdodCA9IGxlZnRQ
b3MubGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0
byAtIDEsICJyaWdodCIpOworICAgICAgICAgIGlmIChkaXIgPT0gInJ0bCIpIHsgdmFyIHRtcCA9
IGxlZnRQb3M7IGxlZnRQb3MgPSByaWdodFBvczsgcmlnaHRQb3MgPSB0bXA7IH0KKyAgICAgICAg
ICBsZWZ0ID0gbGVmdFBvcy5sZWZ0OworICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxl
ZnQgPSBwbDsKICAgICAgICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAv
LyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9wIHBhcnQKICAgICAgICAgICBhZGQobGVmdCwgbGVm
dFBvcy50b3AsIG51bGwsIGxlZnRQb3MuYm90dG9tKTsKICAgICAgICAgICBsZWZ0ID0gcGw7CiAg
ICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVmdCwgbGVm
dFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSBjbGllbnRXaWR0aDsKLSAg
ICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKLSAgICAg
ICAgclZhbCA9IHJldFRvcCA/IE1hdGgubWluKHJpZ2h0UG9zLnRvcCwgclZhbCkgOiBNYXRoLm1h
eChyaWdodFBvcy5ib3R0b20sIHJWYWwpOworICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3Mu
dG9wIDwgc3RhcnQudG9wIHx8IGxlZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxl
ZnQgPCBzdGFydC5sZWZ0KQorICAgICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKKyAgICAgICAgaWYg
KCFlbmQgfHwgcmlnaHRQb3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20g
PT0gZW5kLmJvdHRvbSAmJiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKKyAgICAgICAgICBl
bmQgPSByaWdodFBvczsKICAgICAgICAgaWYgKGxlZnQgPCBwbCArIDEpIGxlZnQgPSBwbDsKICAg
ICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0
b20pOwogICAgICAgfSk7Ci0gICAgICByZXR1cm4gclZhbDsKKyAgICAgIHJldHVybiB7c3RhcnQ6
IHN0YXJ0LCBlbmQ6IGVuZH07CiAgICAgfQogCiAgICAgaWYgKHNlbC5mcm9tLmxpbmUgPT0gc2Vs
LnRvLmxpbmUpIHsKICAgICAgIGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNo
LCBzZWwudG8uY2gpOwogICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgZnJvbU9iaiA9IGdldExpbmUo
ZG9jLCBzZWwuZnJvbS5saW5lKTsKLSAgICAgIHZhciBjdXIgPSBmcm9tT2JqLCBtZXJnZWQsIHBh
dGggPSBbc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2hdLCBzaW5nbGVMaW5lOwotICAgICAgd2hp
bGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChjdXIpKSB7Ci0gICAgICAgIHZhciBmb3Vu
ZCA9IG1lcmdlZC5maW5kKCk7Ci0gICAgICAgIHBhdGgucHVzaChmb3VuZC5mcm9tLmNoLCBmb3Vu
ZC50by5saW5lLCBmb3VuZC50by5jaCk7Ci0gICAgICAgIGlmIChmb3VuZC50by5saW5lID09IHNl
bC50by5saW5lKSB7Ci0gICAgICAgICAgcGF0aC5wdXNoKHNlbC50by5jaCk7Ci0gICAgICAgICAg
c2luZ2xlTGluZSA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7CisgICAgICB2YXIgZnJvbUxpbmUg
PSBnZXRMaW5lKGRvYywgc2VsLmZyb20ubGluZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzZWwu
dG8ubGluZSk7CisgICAgICB2YXIgc2luZ2xlVkxpbmUgPSB2aXN1YWxMaW5lKGRvYywgZnJvbUxp
bmUpID09IHZpc3VhbExpbmUoZG9jLCB0b0xpbmUpOworICAgICAgdmFyIGxlZnRFbmQgPSBkcmF3
Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgc2luZ2xlVkxpbmUgPyBmcm9tTGlu
ZS50ZXh0Lmxlbmd0aCA6IG51bGwpLmVuZDsKKyAgICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0Zv
ckxpbmUoc2VsLnRvLmxpbmUsIHNpbmdsZVZMaW5lID8gMCA6IG51bGwsIHNlbC50by5jaCkuc3Rh
cnQ7CisgICAgICBpZiAoc2luZ2xlVkxpbmUpIHsKKyAgICAgICAgaWYgKGxlZnRFbmQudG9wIDwg
cmlnaHRTdGFydC50b3AgLSAyKSB7CisgICAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRF
bmQudG9wLCBudWxsLCBsZWZ0RW5kLmJvdHRvbSk7CisgICAgICAgICAgYWRkKHBsLCByaWdodFN0
YXJ0LnRvcCwgcmlnaHRTdGFydC5sZWZ0LCByaWdodFN0YXJ0LmJvdHRvbSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCByaWdodFN0
YXJ0LmxlZnQgLSBsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLmJvdHRvbSk7CiAgICAgICAgIH0KLSAg
ICAgICAgY3VyID0gZ2V0TGluZShkb2MsIGZvdW5kLnRvLmxpbmUpOwotICAgICAgfQotCi0gICAg
ICAvLyBUaGlzIGlzIGEgc2luZ2xlLCBtZXJnZWQgbGluZQotICAgICAgaWYgKHNpbmdsZUxpbmUp
IHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSArPSAzKQotICAg
ICAgICAgIGRyYXdGb3JMaW5lKHBhdGhbaV0sIHBhdGhbaSsxXSwgcGF0aFtpKzJdKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZhciBtaWRkbGVUb3AsIG1pZGRsZUJvdCwgdG9PYmogPSBnZXRM
aW5lKGRvYywgc2VsLnRvLmxpbmUpOwotICAgICAgICBpZiAoc2VsLmZyb20uY2gpCi0gICAgICAg
ICAgLy8gRHJhdyB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3Rpb24uCi0gICAgICAgICAgbWlkZGxl
VG9wID0gZHJhd0ZvckxpbmUoc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2gsIG51bGwsIGZhbHNl
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIC8vIFNpbXBseSBpbmNsdWRlIGl0IGluIHRoZSBt
aWRkbGUgYmxvY2suCi0gICAgICAgICAgbWlkZGxlVG9wID0gaGVpZ2h0QXRMaW5lKGNtLCBmcm9t
T2JqKSAtIGRpc3BsYXkudmlld09mZnNldDsKLQotICAgICAgICBpZiAoIXNlbC50by5jaCkKLSAg
ICAgICAgICBtaWRkbGVCb3QgPSBoZWlnaHRBdExpbmUoY20sIHRvT2JqKSAtIGRpc3BsYXkudmll
d09mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG1pZGRsZUJvdCA9IGRyYXdGb3JMaW5l
KHNlbC50by5saW5lLCBjb2xsYXBzZWRTcGFuQXRTdGFydCh0b09iaikgPyBudWxsIDogMCwgc2Vs
LnRvLmNoLCB0cnVlKTsKLQotICAgICAgICBpZiAobWlkZGxlVG9wIDwgbWlkZGxlQm90KSBhZGQo
cGwsIG1pZGRsZVRvcCwgbnVsbCwgbWlkZGxlQm90KTsKICAgICAgIH0KKyAgICAgIGlmIChsZWZ0
RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9wKQorICAgICAgICBhZGQocGwsIGxlZnRFbmQuYm90
dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7CiAgICAgfQogCiAgICAgcmVtb3ZlQ2hpbGRyZW5B
bmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGZyYWdtZW50KTsKQEAgLTkxMSwxMiArOTE2LDEy
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyB2YWxpZCBzdGF0ZS4g
SWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZQogICAvLyBzbWFsbGVz
dCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwog
ICAvLyBwYXJzZSBjb3JyZWN0bHkuCi0gIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4pIHsK
KyAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSkgewogICAgIHZhciBtaW5p
bmRlbnQsIG1pbmxpbmUsIGRvYyA9IGNtLmRvYzsKICAgICBmb3IgKHZhciBzZWFyY2ggPSBuLCBs
aW0gPSBuIC0gMTAwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7CiAgICAgICBpZiAoc2VhcmNo
IDw9IGRvYy5maXJzdCkgcmV0dXJuIGRvYy5maXJzdDsKICAgICAgIHZhciBsaW5lID0gZ2V0TGlu
ZShkb2MsIHNlYXJjaCAtIDEpOwotICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgcmV0dXJuIHNl
YXJjaDsKKyAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIgJiYgKCFwcmVjaXNlIHx8IHNlYXJjaCA8
PSBkb2MuZnJvbnRpZXIpKSByZXR1cm4gc2VhcmNoOwogICAgICAgdmFyIGluZGVudGVkID0gY291
bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpOwogICAgICAgaWYg
KG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkgewogICAgICAgICBtaW5s
aW5lID0gc2VhcmNoIC0gMTsKQEAgLTkyNiwxMCArOTMxLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBtaW5saW5lOwogICB9CiAKLSAgZnVuY3Rpb24g
Z2V0U3RhdGVCZWZvcmUoY20sIG4pIHsKKyAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4s
IHByZWNpc2UpIHsKICAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsK
ICAgICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRydWU7Ci0gICAgdmFyIHBv
cyA9IGZpbmRTdGFydExpbmUoY20sIG4pLCBzdGF0ZSA9IHBvcyA+IGRvYy5maXJzdCAmJiBnZXRM
aW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7CisgICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUo
Y20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9IHBvcyA+IGRvYy5maXJzdCAmJiBnZXRMaW5lKGRvYywg
cG9zLTEpLnN0YXRlQWZ0ZXI7CiAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRlKGRv
Yy5tb2RlKTsKICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAg
ICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7CkBAIC05NTAsNyArOTU1LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIGUub2Zmc2V0TGVm
dDsKICAgfQogCi0gIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwgZGF0YSkgewor
ICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGRhdGEsIGJpYXMpIHsKICAgICB2
YXIgZGlyID0gLTE7CiAgICAgZGF0YSA9IGRhdGEgfHwgbWVhc3VyZUxpbmUoY20sIGxpbmUpOwog
CkBAIC05NTksOSArOTY0LDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgaWYgKHIpIGJyZWFrOwogICAgICAgaWYgKGRpciA8IDAgJiYgcG9zID09IDApIGRpciA9
IDE7CiAgICAgfQorICAgIGJpYXMgPSBwb3MgPiBjaCA/ICJsZWZ0IiA6IHBvcyA8IGNoID8gInJp
Z2h0IiA6IGJpYXM7CisgICAgaWYgKGJpYXMgPT0gImxlZnQiICYmIHIubGVmdFNpZGUpIHIgPSBy
LmxlZnRTaWRlOworICAgIGVsc2UgaWYgKGJpYXMgPT0gInJpZ2h0IiAmJiByLnJpZ2h0U2lkZSkg
ciA9IHIucmlnaHRTaWRlOwogICAgIHJldHVybiB7bGVmdDogcG9zIDwgY2ggPyByLnJpZ2h0IDog
ci5sZWZ0LAogICAgICAgICAgICAgcmlnaHQ6IHBvcyA+IGNoID8gci5sZWZ0IDogci5yaWdodCwK
LSAgICAgICAgICAgIHRvcDogci50b3AsIGJvdHRvbTogci5ib3R0b219OworICAgICAgICAgICAg
dG9wOiByLnRvcCwKKyAgICAgICAgICAgIGJvdHRvbTogci5ib3R0b219OwogICB9CiAKICAgZnVu
Y3Rpb24gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CkBAIC05NzEsMjMgKzk4MCwy
OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChtZW1vLnRl
eHQgPT0gbGluZS50ZXh0ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAm
JgogICAgICAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0
aCAmJgogICAgICAgICAgIG1lbW8uY2xhc3NlcyA9PSBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxp
bmUuYmdDbGFzcyArICJ8IiArIGxpbmUud3JhcENsYXNzKQotICAgICAgICByZXR1cm4gbWVtby5t
ZWFzdXJlOworICAgICAgICByZXR1cm4gbWVtbzsKICAgICB9CiAgIH0KIAorICBmdW5jdGlvbiBj
bGVhckNhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CisgICAgdmFyIGV4aXN0cyA9IGZpbmRD
YWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7CisgICAgaWYgKGV4aXN0cykgZXhpc3RzLnRleHQg
PSBleGlzdHMubWVhc3VyZSA9IGV4aXN0cy5tYXJrZWRTcGFucyA9IG51bGw7CisgIH0KKwogICBm
dW5jdGlvbiBtZWFzdXJlTGluZShjbSwgbGluZSkgewogICAgIC8vIEZpcnN0IGxvb2sgaW4gdGhl
IGNhY2hlCi0gICAgdmFyIG1lYXN1cmUgPSBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUp
OwotICAgIGlmICghbWVhc3VyZSkgewotICAgICAgLy8gRmFpbGluZyB0aGF0LCByZWNvbXB1dGUg
YW5kIHN0b3JlIHJlc3VsdCBpbiBjYWNoZQotICAgICAgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5u
ZXIoY20sIGxpbmUpOwotICAgICAgdmFyIGNhY2hlID0gY20uZGlzcGxheS5tZWFzdXJlTGluZUNh
Y2hlOwotICAgICAgdmFyIG1lbW8gPSB7dGV4dDogbGluZS50ZXh0LCB3aWR0aDogY20uZGlzcGxh
eS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAgICAgICAgICAgIG1hcmtlZFNwYW5zOiBs
aW5lLm1hcmtlZFNwYW5zLCBtZWFzdXJlOiBtZWFzdXJlLAotICAgICAgICAgICAgICAgICAgY2xh
c3NlczogbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLmJnQ2xhc3MgKyAifCIgKyBsaW5lLndy
YXBDbGFzc307Ci0gICAgICBpZiAoY2FjaGUubGVuZ3RoID09IDE2KSBjYWNoZVsrK2NtLmRpc3Bs
YXkubWVhc3VyZUxpbmVDYWNoZVBvcyAlIDE2XSA9IG1lbW87Ci0gICAgICBlbHNlIGNhY2hlLnB1
c2gobWVtbyk7Ci0gICAgfQorICAgIHZhciBjYWNoZWQgPSBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQo
Y20sIGxpbmUpOworICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQubWVhc3VyZTsKKworICAg
IC8vIEZhaWxpbmcgdGhhdCwgcmVjb21wdXRlIGFuZCBzdG9yZSByZXN1bHQgaW4gY2FjaGUKKyAg
ICB2YXIgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5uZXIoY20sIGxpbmUpOworICAgIHZhciBjYWNo
ZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZTsKKyAgICB2YXIgbWVtbyA9IHt0ZXh0OiBs
aW5lLnRleHQsIHdpZHRoOiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLAorICAgICAg
ICAgICAgICAgIG1hcmtlZFNwYW5zOiBsaW5lLm1hcmtlZFNwYW5zLCBtZWFzdXJlOiBtZWFzdXJl
LAorICAgICAgICAgICAgICAgIGNsYXNzZXM6IGxpbmUudGV4dENsYXNzICsgInwiICsgbGluZS5i
Z0NsYXNzICsgInwiICsgbGluZS53cmFwQ2xhc3N9OworICAgIGlmIChjYWNoZS5sZW5ndGggPT0g
MTYpIGNhY2hlWysrY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zICUgMTZdID0gbWVtbzsK
KyAgICBlbHNlIGNhY2hlLnB1c2gobWVtbyk7CiAgICAgcmV0dXJuIG1lYXN1cmU7CiAgIH0KIApA
QCAtMTAyOSwzMCArMTA0Myw1MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICBpZiAoaWVfbHQ5ICYmIGRpc3BsYXkubWVhc3VyZS5maXJzdCAhPSBwcmUpCiAgICAgICBy
ZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7CiAKLSAgICBmb3IgKHZh
ciBpID0gMCwgY3VyOyBpIDwgbWVhc3VyZS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IG1lYXN1cmVb
aV0pIHsKLSAgICAgIHZhciBzaXplID0gZ2V0UmVjdChjdXIpOwotICAgICAgdmFyIHRvcCA9IE1h
dGgubWF4KDAsIHNpemUudG9wIC0gb3V0ZXIudG9wKSwgYm90ID0gTWF0aC5taW4oc2l6ZS5ib3R0
b20gLSBvdXRlci50b3AsIG1heEJvdCk7Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZyYW5n
ZXMubGVuZ3RoOyBqICs9IDIpIHsKLSAgICAgICAgdmFyIHJ0b3AgPSB2cmFuZ2VzW2pdLCByYm90
ID0gdnJhbmdlc1tqKzFdOworICAgIGZ1bmN0aW9uIG1lYXN1cmVSZWN0KHJlY3QpIHsKKyAgICAg
IHZhciB0b3AgPSByZWN0LnRvcCAtIG91dGVyLnRvcCwgYm90ID0gcmVjdC5ib3R0b20gLSBvdXRl
ci50b3A7CisgICAgICBpZiAoYm90ID4gbWF4Qm90KSBib3QgPSBtYXhCb3Q7CisgICAgICBpZiAo
dG9wIDwgMCkgdG9wID0gMDsKKyAgICAgIGZvciAodmFyIGkgPSB2cmFuZ2VzLmxlbmd0aCAtIDI7
IGkgPj0gMDsgaSAtPSAyKSB7CisgICAgICAgIHZhciBydG9wID0gdnJhbmdlc1tpXSwgcmJvdCA9
IHZyYW5nZXNbaSsxXTsKICAgICAgICAgaWYgKHJ0b3AgPiBib3QgfHwgcmJvdCA8IHRvcCkgY29u
dGludWU7CiAgICAgICAgIGlmIChydG9wIDw9IHRvcCAmJiByYm90ID49IGJvdCB8fAogICAgICAg
ICAgICAgdG9wIDw9IHJ0b3AgJiYgYm90ID49IHJib3QgfHwKICAgICAgICAgICAgIE1hdGgubWlu
KGJvdCwgcmJvdCkgLSBNYXRoLm1heCh0b3AsIHJ0b3ApID49IChib3QgLSB0b3ApID4+IDEpIHsK
LSAgICAgICAgICB2cmFuZ2VzW2pdID0gTWF0aC5taW4odG9wLCBydG9wKTsKLSAgICAgICAgICB2
cmFuZ2VzW2orMV0gPSBNYXRoLm1heChib3QsIHJib3QpOworICAgICAgICAgIHZyYW5nZXNbaV0g
PSBNYXRoLm1pbih0b3AsIHJ0b3ApOworICAgICAgICAgIHZyYW5nZXNbaSsxXSA9IE1hdGgubWF4
KGJvdCwgcmJvdCk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAg
IGlmIChqID09IHZyYW5nZXMubGVuZ3RoKSB2cmFuZ2VzLnB1c2godG9wLCBib3QpOwotICAgICAg
dmFyIHJpZ2h0ID0gc2l6ZS5yaWdodDsKLSAgICAgIGlmIChjdXIubWVhc3VyZVJpZ2h0KSByaWdo
dCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCkubGVmdDsKLSAgICAgIGRhdGFbaV0gPSB7bGVm
dDogc2l6ZS5sZWZ0IC0gb3V0ZXIubGVmdCwgcmlnaHQ6IHJpZ2h0IC0gb3V0ZXIubGVmdCwgdG9w
OiBqfTsKKyAgICAgIGlmIChpIDwgMCkgeyBpID0gdnJhbmdlcy5sZW5ndGg7IHZyYW5nZXMucHVz
aCh0b3AsIGJvdCk7IH0KKyAgICAgIHJldHVybiB7bGVmdDogcmVjdC5sZWZ0IC0gb3V0ZXIubGVm
dCwKKyAgICAgICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgLSBvdXRlci5sZWZ0LAorICAgICAg
ICAgICAgICB0b3A6IGksIGJvdHRvbTogbnVsbH07CiAgICAgfQotICAgIGZvciAodmFyIGkgPSAw
LCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgewotICAgICAg
dmFyIHZyID0gY3VyLnRvcDsKLSAgICAgIGN1ci50b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJvdHRv
bSA9IHZyYW5nZXNbdnIrMV07CisgICAgZnVuY3Rpb24gZmluaXNoUmVjdChyZWN0KSB7CisgICAg
ICByZWN0LmJvdHRvbSA9IHZyYW5nZXNbcmVjdC50b3ArMV07CisgICAgICByZWN0LnRvcCA9IHZy
YW5nZXNbcmVjdC50b3BdOwogICAgIH0KIAorICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBt
ZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gbWVhc3VyZVtpXSkgeworICAgICAgdmFyIG5v
ZGUgPSBjdXIsIHJlY3QgPSBudWxsOworICAgICAgLy8gQSB3aWRnZXQgbWlnaHQgd3JhcCwgbmVl
ZHMgc3BlY2lhbCBjYXJlCisgICAgICBpZiAoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdChj
dXIuY2xhc3NOYW1lKSAmJiBjdXIuZ2V0Q2xpZW50UmVjdHMpIHsKKyAgICAgICAgaWYgKGN1ci5m
aXJzdENoaWxkLm5vZGVUeXBlID09IDEpIG5vZGUgPSBjdXIuZmlyc3RDaGlsZDsKKyAgICAgICAg
dmFyIHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpOworICAgICAgICBpZiAocmVjdHMubGVu
Z3RoID4gMSkgeworICAgICAgICAgIHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QocmVjdHNb
MF0pOworICAgICAgICAgIHJlY3QucmlnaHRTaWRlID0gbWVhc3VyZVJlY3QocmVjdHNbcmVjdHMu
bGVuZ3RoIC0gMV0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIXJlY3QpIHJlY3Qg
PSBkYXRhW2ldID0gbWVhc3VyZVJlY3QoZ2V0UmVjdChub2RlKSk7CisgICAgICBpZiAoY3VyLm1l
YXN1cmVSaWdodCkgcmVjdC5yaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCkubGVmdDsK
KyAgICAgIGlmIChjdXIubGVmdFNpZGUpIHJlY3QubGVmdFNpZGUgPSBtZWFzdXJlUmVjdChnZXRS
ZWN0KGN1ci5sZWZ0U2lkZSkpOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMCwgY3VyOyBpIDwg
ZGF0YS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IGRhdGFbaV0pIHsKKyAgICAgIGZpbmlzaFJlY3Qo
Y3VyKTsKKyAgICAgIGlmIChjdXIubGVmdFNpZGUpIGZpbmlzaFJlY3QoY3VyLmxlZnRTaWRlKTsK
KyAgICAgIGlmIChjdXIucmlnaHRTaWRlKSBmaW5pc2hSZWN0KGN1ci5yaWdodFNpZGUpOworICAg
IH0KICAgICByZXR1cm4gZGF0YTsKICAgfQogCkBAIC0xMDYzLDcgKzEwOTgsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNw
LnRvID09IG51bGwgfHwgc3AudG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0
cnVlOwogICAgIH0KICAgICB2YXIgY2FjaGVkID0gIWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1l
YXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAoY2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIo
Y20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgsIGNhY2hlZCkucmlnaHQ7CisgICAgaWYgKGNhY2hl
ZCkgcmV0dXJuIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBsaW5lLnRleHQubGVuZ3RoLCBjYWNoZWQu
bWVhc3VyZSwgInJpZ2h0IikucmlnaHQ7CiAKICAgICB2YXIgcHJlID0gbGluZUNvbnRlbnQoY20s
IGxpbmUpOwogICAgIHZhciBlbmQgPSBwcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChj
bS5kaXNwbGF5Lm1lYXN1cmUpKTsKQEAgLTEwNzgsNiArMTExMyw5IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVsbDsK
ICAgfQogCisgIGZ1bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93LnBhZ2VYT2Zm
c2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xs
TGVmdDsgfQorICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRvdy5wYWdlWU9m
ZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9s
bFRvcDsgfQorCiAgIC8vIENvbnRleHQgaXMgb25lIG9mICJsaW5lIiwgImRpdiIgKGRpc3BsYXku
bGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiCiAgIGZ1bmN0aW9uIGlu
dG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAgIGlmIChsaW5l
T2JqLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsg
KytpKSBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CkBAIC0xMDg3LDExICsxMTI1LDEy
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChjb250ZXh0ID09
ICJsaW5lIikgcmV0dXJuIHJlY3Q7CiAgICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gImxvY2Fs
IjsKICAgICB2YXIgeU9mZiA9IGhlaWdodEF0TGluZShjbSwgbGluZU9iaik7Ci0gICAgaWYgKGNv
bnRleHQgIT0gImxvY2FsIikgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7Ci0gICAgaWYg
KGNvbnRleHQgPT0gInBhZ2UiKSB7CisgICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIikgeU9mZiAr
PSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOworICAgIGVsc2UgeU9mZiAtPSBjbS5kaXNwbGF5LnZp
ZXdPZmZzZXQ7CisgICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiIHx8IGNvbnRleHQgPT0gIndpbmRv
dyIpIHsKICAgICAgIHZhciBsT2ZmID0gZ2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7Ci0g
ICAgICB5T2ZmICs9IGxPZmYudG9wICsgKHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcCk7Ci0gICAgICB2YXIg
eE9mZiA9IGxPZmYubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0KTsKKyAgICAgIHlPZmYgKz0g
bE9mZi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTsKKyAg
ICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAwIDogcGFn
ZVNjcm9sbFgoKSk7CiAgICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVjdC5yaWdodCArPSB4T2Zm
OwogICAgIH0KICAgICByZWN0LnRvcCArPSB5T2ZmOyByZWN0LmJvdHRvbSArPSB5T2ZmOwpAQCAt
MTEwMyw2NCArMTE0Miw1OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ZnVuY3Rpb24gZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMsIGNvbnRleHQpIHsKICAgICBpZiAo
Y29udGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKICAgICB2YXIgbGVmdCA9IGNvb3Jkcy5s
ZWZ0LCB0b3AgPSBjb29yZHMudG9wOworICAgIC8vIEZpcnN0IG1vdmUgaW50byAicGFnZSIgY29v
cmRpbmF0ZSBzeXN0ZW0KICAgICBpZiAoY29udGV4dCA9PSAicGFnZSIpIHsKLSAgICAgIGxlZnQg
LT0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9j
dW1lbnQuYm9keSkuc2Nyb2xsTGVmdDsKLSAgICAgIHRvcCAtPSB3aW5kb3cucGFnZVlPZmZzZXQg
fHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3A7
CisgICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7CisgICAgICB0b3AgLT0gcGFnZVNjcm9sbFko
KTsKKyAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkgeworICAg
ICAgdmFyIGxvY2FsQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LnNpemVyKTsKKyAgICAgIGxlZnQg
Kz0gbG9jYWxCb3gubGVmdDsKKyAgICAgIHRvcCArPSBsb2NhbEJveC50b3A7CiAgICAgfQorCiAg
ICAgdmFyIGxpbmVTcGFjZUJveCA9IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOwotICAg
IGxlZnQgLT0gbGluZVNwYWNlQm94LmxlZnQ7Ci0gICAgdG9wIC09IGxpbmVTcGFjZUJveC50b3A7
Ci0gICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkgewotICAgICAgdmFyIGVk
aXRvckJveCA9IGdldFJlY3QoY20uZGlzcGxheS53cmFwcGVyKTsKLSAgICAgIGxlZnQgKz0gZWRp
dG9yQm94LmxlZnQ7Ci0gICAgICB0b3AgKz0gZWRpdG9yQm94LnRvcDsKLSAgICB9Ci0gICAgcmV0
dXJuIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcH07CisgICAgcmV0dXJuIHtsZWZ0OiBsZWZ0IC0gbGlu
ZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNlQm94LnRvcH07CiAgIH0KIAotICBm
dW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmopIHsKKyAgZnVuY3Rp
b24gY2hhckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7CiAgICAgaWYg
KCFsaW5lT2JqKSBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKLSAgICByZXR1
cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwg
cG9zLmNoKSwgY29udGV4dCk7CisgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9i
aiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgbnVsbCwgYmlhcyksIGNvbnRleHQp
OwogICB9CiAKICAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVP
YmosIG1lYXN1cmVtZW50KSB7CiAgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5k
b2MsIHBvcy5saW5lKTsKICAgICBpZiAoIW1lYXN1cmVtZW50KSBtZWFzdXJlbWVudCA9IG1lYXN1
cmVMaW5lKGNtLCBsaW5lT2JqKTsKICAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0KSB7Ci0gICAg
ICB2YXIgbSA9IG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBjaCwgbWVhc3VyZW1lbnQpOworICAg
ICAgdmFyIG0gPSBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgY2gsIG1lYXN1cmVtZW50LCByaWdo
dCA/ICJyaWdodCIgOiAibGVmdCIpOwogICAgICAgaWYgKHJpZ2h0KSBtLmxlZnQgPSBtLnJpZ2h0
OyBlbHNlIG0ucmlnaHQgPSBtLmxlZnQ7CiAgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNt
LCBsaW5lT2JqLCBtLCBjb250ZXh0KTsKICAgICB9Ci0gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIo
bGluZU9iaiksIGNoID0gcG9zLmNoOwotICAgIGlmICghb3JkZXIpIHJldHVybiBnZXQoY2gpOwot
ICAgIHZhciBtYWluLCBvdGhlciwgbGluZWRpciA9IG9yZGVyWzBdLmxldmVsOwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBwYXJ0ID0gb3Jk
ZXJbaV0sIHJ0bCA9IHBhcnQubGV2ZWwgJSAyLCBuYiwgaGVyZTsKLSAgICAgIGlmIChwYXJ0LmZy
b20gPCBjaCAmJiBwYXJ0LnRvID4gY2gpIHJldHVybiBnZXQoY2gsIHJ0bCk7Ci0gICAgICB2YXIg
bGVmdCA9IHJ0bCA/IHBhcnQudG8gOiBwYXJ0LmZyb20sIHJpZ2h0ID0gcnRsID8gcGFydC5mcm9t
IDogcGFydC50bzsKLSAgICAgIGlmIChsZWZ0ID09IGNoKSB7Ci0gICAgICAgIC8vIElFIHJldHVy
bnMgYm9ndXMgb2Zmc2V0cyBhbmQgd2lkdGhzIGZvciBlZGdlcyB3aGVyZSB0aGUKLSAgICAgICAg
Ly8gZGlyZWN0aW9uIGZsaXBzLCBidXQgb25seSBmb3IgdGhlIHNpZGUgd2l0aCB0aGUgbG93ZXIK
LSAgICAgICAgLy8gbGV2ZWwuIFNvIHdlIHRyeSB0byB1c2UgdGhlIHNpZGUgd2l0aCB0aGUgaGln
aGVyIGxldmVsLgotICAgICAgICBpZiAoaSAmJiBwYXJ0LmxldmVsIDwgKG5iID0gb3JkZXJbaS0x
XSkubGV2ZWwpIGhlcmUgPSBnZXQobmIubGV2ZWwgJSAyID8gbmIuZnJvbSA6IG5iLnRvIC0gMSwg
dHJ1ZSk7Ci0gICAgICAgIGVsc2UgaGVyZSA9IGdldChydGwgJiYgcGFydC5mcm9tICE9IHBhcnQu
dG8gPyBjaCAtIDEgOiBjaCk7Ci0gICAgICAgIGlmIChydGwgPT0gbGluZWRpcikgbWFpbiA9IGhl
cmU7IGVsc2Ugb3RoZXIgPSBoZXJlOwotICAgICAgfSBlbHNlIGlmIChyaWdodCA9PSBjaCkgewot
ICAgICAgICB2YXIgbmIgPSBpIDwgb3JkZXIubGVuZ3RoIC0gMSAmJiBvcmRlcltpKzFdOwotICAg
ICAgICBpZiAoIXJ0bCAmJiBuYiAmJiBuYi5mcm9tID09IG5iLnRvKSBjb250aW51ZTsKLSAgICAg
ICAgaWYgKG5iICYmIHBhcnQubGV2ZWwgPCBuYi5sZXZlbCkgaGVyZSA9IGdldChuYi5sZXZlbCAl
IDIgPyBuYi50byAtIDEgOiBuYi5mcm9tKTsKLSAgICAgICAgZWxzZSBoZXJlID0gZ2V0KHJ0bCA/
IGNoIDogY2ggLSAxLCB0cnVlKTsKLSAgICAgICAgaWYgKHJ0bCA9PSBsaW5lZGlyKSBtYWluID0g
aGVyZTsgZWxzZSBvdGhlciA9IGhlcmU7CisgICAgZnVuY3Rpb24gZ2V0QmlkaShjaCwgcGFydFBv
cykgeworICAgICAgdmFyIHBhcnQgPSBvcmRlcltwYXJ0UG9zXSwgcmlnaHQgPSBwYXJ0LmxldmVs
ICUgMjsKKyAgICAgIGlmIChjaCA9PSBiaWRpTGVmdChwYXJ0KSAmJiBwYXJ0UG9zICYmIHBhcnQu
bGV2ZWwgPCBvcmRlcltwYXJ0UG9zIC0gMV0ubGV2ZWwpIHsKKyAgICAgICAgcGFydCA9IG9yZGVy
Wy0tcGFydFBvc107CisgICAgICAgIGNoID0gYmlkaVJpZ2h0KHBhcnQpIC0gKHBhcnQubGV2ZWwg
JSAyID8gMCA6IDEpOworICAgICAgICByaWdodCA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKGNo
ID09IGJpZGlSaWdodChwYXJ0KSAmJiBwYXJ0UG9zIDwgb3JkZXIubGVuZ3RoIC0gMSAmJiBwYXJ0
LmxldmVsIDwgb3JkZXJbcGFydFBvcyArIDFdLmxldmVsKSB7CisgICAgICAgIHBhcnQgPSBvcmRl
clsrK3BhcnRQb3NdOworICAgICAgICBjaCA9IGJpZGlMZWZ0KHBhcnQpIC0gcGFydC5sZXZlbCAl
IDI7CisgICAgICAgIHJpZ2h0ID0gZmFsc2U7CiAgICAgICB9CisgICAgICBpZiAocmlnaHQgJiYg
Y2ggPT0gcGFydC50byAmJiBjaCA+IHBhcnQuZnJvbSkgcmV0dXJuIGdldChjaCAtIDEpOworICAg
ICAgcmV0dXJuIGdldChjaCwgcmlnaHQpOwogICAgIH0KLSAgICBpZiAobGluZWRpciAmJiAhY2gp
IG90aGVyID0gZ2V0KG9yZGVyWzBdLnRvIC0gMSk7Ci0gICAgaWYgKCFtYWluKSByZXR1cm4gb3Ro
ZXI7Ci0gICAgaWYgKG90aGVyKSBtYWluLm90aGVyID0gb3RoZXI7Ci0gICAgcmV0dXJuIG1haW47
CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiksIGNoID0gcG9zLmNoOworICAgIGlm
ICghb3JkZXIpIHJldHVybiBnZXQoY2gpOworICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRB
dChvcmRlciwgY2gpOworICAgIHZhciB2YWwgPSBnZXRCaWRpKGNoLCBwYXJ0UG9zKTsKKyAgICBp
ZiAoYmlkaU90aGVyICE9IG51bGwpIHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIGJpZGlPdGhlcik7
CisgICAgcmV0dXJuIHZhbDsKICAgfQogCi0gIGZ1bmN0aW9uIFBvc01heWJlT3V0c2lkZShsaW5l
LCBjaCwgb3V0c2lkZSkgeworICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lk
ZSwgeFJlbCkgewogICAgIHZhciBwb3MgPSBuZXcgUG9zKGxpbmUsIGNoKTsKKyAgICBwb3MueFJl
bCA9IHhSZWw7CiAgICAgaWYgKG91dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKICAgICByZXR1
cm4gcG9zOwogICB9CkBAIC0xMTY5LDEwICsxMjAyLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBjb29yZHNDaGFyKGNtLCB4LCB5KSB7CiAgICAgdmFy
IGRvYyA9IGNtLmRvYzsKICAgICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAo
eSA8IDApIHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0LCAwLCB0cnVlKTsKKyAgICBp
ZiAoeSA8IDApIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIHRydWUsIC0xKTsKICAg
ICB2YXIgbGluZU5vID0gbGluZUF0SGVpZ2h0KGRvYywgeSksIGxhc3QgPSBkb2MuZmlyc3QgKyBk
b2Muc2l6ZSAtIDE7CiAgICAgaWYgKGxpbmVObyA+IGxhc3QpCi0gICAgICByZXR1cm4gUG9zTWF5
YmVPdXRzaWRlKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRl
eHQubGVuZ3RoLCB0cnVlKTsKKyAgICAgIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBk
b2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgdHJ1ZSwgMSk7CiAg
ICAgaWYgKHggPCAwKSB4ID0gMDsKIAogICAgIGZvciAoOzspIHsKQEAgLTExODAsNyArMTIxMyw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGZvdW5kID0g
Y29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpOwogICAgICAgdmFyIG1l
cmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lT2JqKTsKICAgICAgIHZhciBtZXJnZWRQb3Mg
PSBtZXJnZWQgJiYgbWVyZ2VkLmZpbmQoKTsKLSAgICAgIGlmIChtZXJnZWQgJiYgZm91bmQuY2gg
Pj0gbWVyZ2VkUG9zLmZyb20uY2gpCisgICAgICBpZiAobWVyZ2VkICYmIChmb3VuZC5jaCA+IG1l
cmdlZFBvcy5mcm9tLmNoIHx8IGZvdW5kLmNoID09IG1lcmdlZFBvcy5mcm9tLmNoICYmIGZvdW5k
LnhSZWwgPiAwKSkKICAgICAgICAgbGluZU5vID0gbWVyZ2VkUG9zLnRvLmxpbmU7CiAgICAgICBl
bHNlCiAgICAgICAgIHJldHVybiBmb3VuZDsKQEAgLTEyMDYsMTQgKzEyMzksMTUgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZyb20gPSBsaW5lTGVmdChsaW5l
T2JqKSwgdG8gPSBsaW5lUmlnaHQobGluZU9iaik7CiAgICAgdmFyIGZyb21YID0gZ2V0WChmcm9t
KSwgZnJvbU91dHNpZGUgPSB3cm9uZ0xpbmUsIHRvWCA9IGdldFgodG8pLCB0b091dHNpZGUgPSB3
cm9uZ0xpbmU7CiAKLSAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIFBvc01heWJlT3V0c2lkZShsaW5l
Tm8sIHRvLCB0b091dHNpZGUpOworICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9zV2l0aEluZm8o
bGluZU5vLCB0bywgdG9PdXRzaWRlLCAxKTsKICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0
d2VlbiB0aGVzZSBib3VuZHMuCiAgICAgZm9yICg7OykgewogICAgICAgaWYgKGJpZGkgPyB0byA9
PSBmcm9tIHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6IHRvIC0gZnJv
bSA8PSAxKSB7Ci0gICAgICAgIHZhciBhZnRlciA9IHggLSBmcm9tWCA8IHRvWCAtIHgsIGNoID0g
YWZ0ZXIgPyBmcm9tIDogdG87CisgICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJv
bVggPD0gdG9YIC0geCA/IGZyb20gOiB0bzsKKyAgICAgICAgdmFyIHhEaWZmID0geCAtIChjaCA9
PSBmcm9tID8gZnJvbVggOiB0b1gpOwogICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyLnRl
c3QobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2NoOwotICAgICAgICB2YXIgcG9zID0gUG9z
TWF5YmVPdXRzaWRlKGxpbmVObywgY2gsIGFmdGVyID8gZnJvbU91dHNpZGUgOiB0b091dHNpZGUp
OwotICAgICAgICBwb3MuYWZ0ZXIgPSBhZnRlcjsKKyAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJ
bmZvKGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgMCA/IC0xIDogeERpZmYgPyAxIDog
MCk7CiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgICB9CiAgICAgICB2YXIgc3RlcCA9IE1hdGgu
Y2VpbChkaXN0IC8gMiksIG1pZGRsZSA9IGZyb20gKyBzdGVwOwpAQCAtMTIyMiw4ICsxMjU2LDgg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3RlcDsgKytpKSBtaWRkbGUgPSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgbWlkZGxl
LCAxKTsKICAgICAgIH0KICAgICAgIHZhciBtaWRkbGVYID0gZ2V0WChtaWRkbGUpOwotICAgICAg
aWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7IGlmICh0b091dHNp
ZGUgPSB3cm9uZ0xpbmUpIHRvWCArPSAxMDAwOyBkaXN0IC09IHN0ZXA7fQotICAgICAgZWxzZSB7
ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsg
ZGlzdCA9IHN0ZXA7fQorICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9
IG1pZGRsZVg7IGlmICh0b091dHNpZGUgPSB3cm9uZ0xpbmUpIHRvWCArPSAxMDAwOyBkaXN0ID0g
c3RlcDt9CisgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRsZVg7IGZyb21P
dXRzaWRlID0gd3JvbmdMaW5lOyBkaXN0IC09IHN0ZXA7fQogICAgIH0KICAgfQogCkBAIC0xMzk5
LDMxICsxNDMzLDMyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBz
dXBwb3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQogICBmdW5jdGlv
biByZWFkSW5wdXQoY20pIHsKICAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0LCBwcmV2
SW5wdXQgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jLCBzZWwgPSBkb2Muc2Vs
OwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5wdXQpIHx8IGlz
UmVhZE9ubHkoY20pKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8
IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20uc3RhdGUuZGlzYWJs
ZUlucHV0KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKICAgICBp
ZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBm
YWxzZTsKLSAgICAvLyBJRSBlbmpveXMgcmFuZG9tbHkgZGVzZWxlY3Rpbmcgb3VyIGlucHV0J3Mg
dGV4dCB3aGVuCi0gICAgLy8gcmUtZm9jdXNpbmcuIElmIHRoZSBzZWxlY3Rpb24gaXMgZ29uZSBi
dXQgdGhlIGN1cnNvciBpcyBhdCB0aGUKLSAgICAvLyBzdGFydCBvZiB0aGUgaW5wdXQsIHRoYXQn
cyBwcm9iYWJseSB3aGF0IGhhcHBlbmVkLgotICAgIGlmIChpZSAmJiB0ZXh0ICYmIGlucHV0LnNl
bGVjdGlvblN0YXJ0ID09PSAwKSB7CisgICAgaWYgKGllICYmICFpZV9sdDkgJiYgY20uZGlzcGxh
eS5pbnB1dEhhc1NlbGVjdGlvbiA9PT0gdGV4dCkgewogICAgICAgcmVzZXRJbnB1dChjbSwgdHJ1
ZSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCiAgICAgdmFyIHdpdGhPcCA9ICFjbS5j
dXJPcDsKICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7CiAgICAgc2VsLnNoaWZ0
ID0gZmFsc2U7CiAgICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0
aCwgdGV4dC5sZW5ndGgpOwotICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXRbc2FtZV0g
PT0gdGV4dFtzYW1lXSkgKytzYW1lOworICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXQu
Y2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpICsrc2FtZTsKICAgICB2
YXIgZnJvbSA9IHNlbC5mcm9tLCB0byA9IHNlbC50bzsKICAgICBpZiAoc2FtZSA8IHByZXZJbnB1
dC5sZW5ndGgpCiAgICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIChwcmV2SW5w
dXQubGVuZ3RoIC0gc2FtZSkpOwogICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiBw
b3NFcShmcm9tLCB0bykgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcpCiAgICAgICB0byA9IFBv
cyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgsIHRv
LmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpKTsKLSAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5j
dXJPcC51cGRhdGVJbnB1dDsKLSAgICBtYWtlQ2hhbmdlKGNtLmRvYywge2Zyb206IGZyb20sIHRv
OiB0bywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LnNsaWNlKHNhbWUpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lu
cHV0In0sICJlbmQiKTsKIAorICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlu
cHV0OworICAgIHZhciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IHNw
bGl0TGluZXModGV4dC5zbGljZShzYW1lKSksCisgICAgICAgICAgICAgICAgICAgICAgIG9yaWdp
bjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lucHV0In07CisgICAgbWFr
ZUNoYW5nZShjbS5kb2MsIGNoYW5nZUV2ZW50LCAiZW5kIik7CiAgICAgY20uY3VyT3AudXBkYXRl
SW5wdXQgPSB1cGRhdGVJbnB1dDsKKyAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIsIGNt
LCBjaGFuZ2VFdmVudCk7CisKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5k
ZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7
CiAgICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAgICAgaWYgKHdpdGhPcCkg
ZW5kT3BlcmF0aW9uKGNtKTsKQEAgLTE0MzcsMTAgKzE0NzIsMTQgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOwogICAg
ICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAmJgogICAgICAgICAoZG9jLnNlbC50by5saW5lIC0g
ZG9jLnNlbC5mcm9tLmxpbmUgPiAxMDAgfHwgKHNlbGVjdGVkID0gY20uZ2V0U2VsZWN0aW9uKCkp
Lmxlbmd0aCA+IDEwMDApOwotICAgICAgaWYgKG1pbmltYWwpIGNtLmRpc3BsYXkuaW5wdXQudmFs
dWUgPSAiLSI7Ci0gICAgICBlbHNlIGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSBzZWxlY3RlZCB8
fCBjbS5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6
IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOworICAgICAgY20uZGlzcGxheS5pbnB1dC52
YWx1ZSA9IGNvbnRlbnQ7CiAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQo
Y20uZGlzcGxheS5pbnB1dCk7Ci0gICAgfSBlbHNlIGlmICh1c2VyKSBjbS5kaXNwbGF5LnByZXZJ
bnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKKyAgICAgIGlmIChpZSAmJiAhaWVf
bHQ5KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29udGVudDsKKyAgICB9IGVsc2Ug
aWYgKHVzZXIpIHsKKyAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gY20uZGlzcGxheS5pbnB1
dC52YWx1ZSA9ICIiOworICAgICAgaWYgKGllICYmICFpZV9sdDkpIGNtLmRpc3BsYXkuaW5wdXRI
YXNTZWxlY3Rpb24gPSBudWxsOworICAgIH0KICAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxl
Y3Rpb24gPSBtaW5pbWFsOwogICB9CiAKQEAgLTE0NTgsNyArMTQ5NywxNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJz
KGNtKSB7CiAgICAgdmFyIGQgPSBjbS5kaXNwbGF5OwogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3Vz
ZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7Ci0gICAgb24oZC5zY3JvbGxlciwg
ImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBlX3ByZXZlbnREZWZhdWx0KSk7CisgICAgaWYgKGll
KQorICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlv
bihlKSB7CisgICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKKyAgICAg
ICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CisgICAgICAgIGlmICghcG9zIHx8IGNs
aWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVy
bjsKKyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgdmFyIHdvcmQgPSBmaW5k
V29yZEF0KGdldExpbmUoY20uZG9jLCBwb3MubGluZSkudGV4dCwgcG9zKTsKKyAgICAgICAgZXh0
ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3JkLnRvKTsKKyAgICAgIH0pKTsKKyAg
ICBlbHNlCisgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBmdW5jdGlvbihlKSB7IHNp
Z25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUpOyB9KTsKICAgICBvbihk
LmxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZnVuY3Rpb24oZSkgewogICAgICAgaWYgKCFldmVu
dEluV2lkZ2V0KGQsIGUpKSBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgIH0pOwpAQCAtMTQ5MCwx
MSArMTUzOSwxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBQ
cmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZwogICAgIG9uKGQud3JhcHBlciwgInNj
cm9sbCIsIGZ1bmN0aW9uKCkgeyBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9s
bExlZnQgPSAwOyB9KTsKIAorICAgIHZhciByZXNpemVUaW1lcjsKICAgICBmdW5jdGlvbiBvblJl
c2l6ZSgpIHsKLSAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlvbiwgY2xl
YXIgc2l6ZSBjYWNoZXMuCi0gICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhl
aWdodCA9IG51bGw7Ci0gICAgICBjbGVhckNhY2hlcyhjbSk7Ci0gICAgICBydW5Jbk9wKGNtLCBi
aW5kKHJlZ0NoYW5nZSwgY20pKTsKKyAgICAgIGlmIChyZXNpemVUaW1lciA9PSBudWxsKSByZXNp
emVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc2l6ZVRpbWVyID0g
bnVsbDsKKyAgICAgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVh
ciBzaXplIGNhY2hlcy4KKyAgICAgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRI
ZWlnaHQgPSBrbm93blNjcm9sbGJhcldpZHRoID0gbnVsbDsKKyAgICAgICAgY2xlYXJDYWNoZXMo
Y20pOworICAgICAgICBydW5Jbk9wKGNtLCBiaW5kKHJlZ0NoYW5nZSwgY20pKTsKKyAgICAgIH0s
IDEwMCk7CiAgICAgfQogICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIG9uUmVzaXplKTsKICAgICAv
LyBBYm92ZSBoYW5kbGVyIGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0cyBkYXRhIHN0cnVj
dHVyZXMuCkBAIC0xNTA4LDcgKzE1NjEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBzZXRUaW1lb3V0KHVucmVnaXN0ZXIsIDUwMDApOwogCiAgICAgb24oZC5pbnB1
dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoY20ub3B0
aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkp
IHJldHVybjsKKyAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5v
bktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVy
bjsKICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIGNtLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsK
ICAgICB9KSk7CiAgICAgb24oZC5pbnB1dCwgImlucHV0IiwgYmluZChmYXN0UG9sbCwgY20pKTsK
QEAgLTE1MTgsNyArMTU3MSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIG9uKGQuaW5wdXQsICJibHVyIiwgYmluZChvbkJsdXIsIGNtKSk7CiAKICAgICBmdW5jdGlv
biBkcmFnXyhlKSB7Ci0gICAgICBpZiAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRp
b25zLm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAgaWYgKHNpZ25h
bERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMu
b25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgICBlX3N0b3AoZSk7CiAg
ICAgfQogICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wKSB7CkBAIC0xNTU3LDkgKzE2MTAsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBldmVudElu
V2lkZ2V0KGRpc3BsYXksIGUpIHsKICAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0g
ZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7Ci0gICAgICBpZiAoIW4pIHJldHVy
biB0cnVlOwotICAgICAgaWYgKC9cYkNvZGVNaXJyb3ItKD86bGluZSk/d2lkZ2V0XGIvLnRlc3Qo
bi5jbGFzc05hbWUpIHx8Ci0gICAgICAgICAgbi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6ZXIg
JiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKKyAgICAgIGlmICghbiB8fCBuLmln
bm9yZUV2ZW50cyB8fCBuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3Bs
YXkubW92ZXIpIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogCkBAIC0xNTY5LDcgKzE2MjAsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciB0YXJnZXQgPSBl
X3RhcmdldChlKTsKICAgICAgIGlmICh0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJIIHx8IHRh
cmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckguZmlyc3RDaGlsZCB8fAogICAgICAgICAgIHRhcmdl
dCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyVi5m
aXJzdENoaWxkIHx8Ci0gICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVy
KSByZXR1cm4gbnVsbDsKKyAgICAgICAgICB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJGaWxs
ZXIgfHwgdGFyZ2V0ID09IGRpc3BsYXkuZ3V0dGVyRmlsbGVyKSByZXR1cm4gbnVsbDsKICAgICB9
CiAgICAgdmFyIHgsIHksIHNwYWNlID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVTcGFjZSk7CiAgICAg
Ly8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFy
b3VuZCBxdWlja2x5LgpAQCAtMTU3OSw2ICsxNjMwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAKICAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOwogICBmdW5j
dGlvbiBvbk1vdXNlRG93bihlKSB7CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpKSBy
ZXR1cm47CiAgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNt
LmRvYywgc2VsID0gZG9jLnNlbDsKICAgICBzZWwuc2hpZnQgPSBlLnNoaWZ0S2V5OwogCkBAIC0x
NjQ5LDkgKzE3MDEsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgZXh0ZW5kU2Vs
ZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSk7CiAKLSAgICB2YXIgc3RhcnRzdGFy
dCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bzsKKyAgICB2YXIgc3RhcnRzdGFydCA9IHNl
bC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bywgbGFzdFBvcyA9IHN0YXJ0OwogCiAgICAgZnVuY3Rp
b24gZG9TZWxlY3QoY3VyKSB7CisgICAgICBpZiAocG9zRXEobGFzdFBvcywgY3VyKSkgcmV0dXJu
OworICAgICAgbGFzdFBvcyA9IGN1cjsKKwogICAgICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIHsK
ICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSwgY3Vy
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5OSw4ICsxNzU0LDYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBmdW5jdGlvbiBkb25lKGUpIHsKICAgICAgIGNvdW50
ZXIgPSBJbmZpbml0eTsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUpOwotICAg
ICAgaWYgKGN1cikgZG9TZWxlY3QoY3VyKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAg
ICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlbW92ZSIsIG1v
dmUpOwpAQCAtMTcxNiwxMSArMTc2OSw0MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CiAgIH0KIAorICBmdW5jdGlv
biBjbGlja0luR3V0dGVyKGNtLCBlKSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owor
ICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0KKyAgICBjYXRj
aChlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaWYgKG1YID49IE1hdGguZmxvb3IoZ2V0UmVj
dChkaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOworICAgIGVfcHJldmVudERl
ZmF1bHQoZSk7CisgICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ2xpY2siKSkgcmV0dXJu
IHRydWU7CisKKyAgICB2YXIgbGluZUJveCA9IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsKKyAg
ICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7CisgICAgbVkgLT0gbGluZUJv
eC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNt
Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1
dHRlcnMuY2hpbGROb2Rlc1tpXTsKKyAgICAgIGlmIChnICYmIGdldFJlY3QoZykucmlnaHQgPj0g
bVgpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7CisgICAg
ICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07CisgICAgICAgIHNpZ25hbExh
dGVyKGNtLCAiZ3V0dGVyQ2xpY2siLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8gS2x1ZGdl
IHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVz
CisgIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2YgZHJhZy1yZWxhdGVkIGV2ZW50cyByaWdodCBhZnRl
ciB0aGUgZHJvcCAoIzE1NTEpCisgIHZhciBsYXN0RHJvcCA9IDA7CisKICAgZnVuY3Rpb24gb25E
cm9wKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRp
c3BsYXksIGUpIHx8IChjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFn
RXZlbnQoY20sIGFkZFN0b3AoZSkpKSkKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8
IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQg
JiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpKQogICAgICAgcmV0dXJu
OwogICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKGllKSBsYXN0RHJvcCA9ICtuZXcg
RGF0ZTsKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlKSwgZmlsZXMgPSBl
LmRhdGFUcmFuc2Zlci5maWxlczsKICAgICBpZiAoIXBvcyB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0
dXJuOwogICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIg
JiYgd2luZG93LkZpbGUpIHsKQEAgLTE3NjAsNDAgKzE4NDMsMTYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gY2xpY2tJbkd1dHRl
cihjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB0cnkgeyB2YXIg
bVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9Ci0gICAgY2F0Y2goZSkgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGdldFJlY3QoZGlzcGxheS5ndXR0
ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsKLSAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAg
IGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNsaWNrIikpIHJldHVybiB0cnVlOwotCi0gICAg
dmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0gICAgaWYgKG1ZID4gbGlu
ZUJveC5ib3R0b20pIHJldHVybiB0cnVlOwotICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxh
eS52aWV3T2Zmc2V0OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRl
cnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9k
ZXNbaV07Ci0gICAgICBpZiAoZyAmJiBnZXRSZWN0KGcpLnJpZ2h0ID49IG1YKSB7Ci0gICAgICAg
IHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpOwotICAgICAgICB2YXIgZ3V0dGVy
ID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwotICAgICAgICBzaWduYWxMYXRlcihjbSwgImd1dHRl
ckNsaWNrIiwgY20sIGxpbmUsIGd1dHRlciwgZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCiAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNt
LCBlKSB7Ci0gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKKyAg
ICBpZiAoaWUgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERy
b3AgPCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuOyB9CisgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47CiAKICAgICB2
YXIgdHh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7CiAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgi
VGV4dCIsIHR4dCk7CiAKICAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0
IGJyb3dzZXJzIGltYWdlLgogICAgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRl
bmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0
aGVyZS4KLSAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKSB7CisgICAgaWYgKGUu
ZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7CiAgICAgICB2YXIgaW1nID0g
ZWx0KCJpbWciLCBudWxsLCBudWxsLCAicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7
Iik7CiAgICAgICBpZiAob3BlcmEpIHsKICAgICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdodCA9
IDE7CkBAIC0xODAxLDE1ICsxODYwLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQsIG9yIE9wZXJhIHdvbid0IHVzZSBvdXIg
aW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24KICAgICAgICAgaW1nLl90b3AgPSBpbWcub2Zm
c2V0VG9wOwogICAgICAgfQotICAgICAgaWYgKHNhZmFyaSkgewotICAgICAgICBpZiAoY20uZGlz
cGxheS5kcmFnSW1nKSB7Ci0gICAgICAgICAgaW1nID0gY20uZGlzcGxheS5kcmFnSW1nOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGNtLmRpc3BsYXkuZHJhZ0ltZyA9IGltZzsKLSAgICAg
ICAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNI
NUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09IjsKLSAgICAgICAgICBjbS5kaXNwbGF5
LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsKLSAgICAgICAgfQotICAgICAgfQogICAgICAgZS5k
YXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7CiAgICAgICBpZiAob3BlcmEpIGlt
Zy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7CiAgICAgfQpAQCAtMTgyMiw2ICsxODcyLDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGNtLmRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3Ag
PSB2YWw7CiAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgIT0gdmFsKSBj
bS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gdmFsOwogICAgIGlmIChnZWNrbykgdXBk
YXRlRGlzcGxheShjbSwgW10pOworICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogICB9CiAgIGZ1
bmN0aW9uIHNldFNjcm9sbExlZnQoY20sIHZhbCwgaXNTY3JvbGxlcikgewogICAgIGlmIChpc1Nj
cm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9s
bExlZnQgLSB2YWwpIDwgMikgcmV0dXJuOwpAQCAtMTk1NCw4ICsyMDA1LDEwIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBzdGFydE1hcCA9IGdldEtleU1hcChj
bS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwogICAgIGNsZWFyVGltZW91
dChtYXliZVRyYW5zaXRpb24pOwogICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBt
YXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGdldEtl
eU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApCisgICAgICBpZiAoZ2V0S2V5TWFw
KGNtLm9wdGlvbnMua2V5TWFwKSA9PSBzdGFydE1hcCkgewogICAgICAgICBjbS5vcHRpb25zLmtl
eU1hcCA9IChuZXh0LmNhbGwgPyBuZXh0LmNhbGwobnVsbCwgY20pIDogbmV4dCk7CisgICAgICAg
IGtleU1hcENoYW5nZWQoY20pOworICAgICAgfQogICAgIH0sIDUwKTsKIAogICAgIHZhciBuYW1l
ID0ga2V5TmFtZShlLCB0cnVlKSwgaGFuZGxlZCA9IGZhbHNlOwpAQCAtMTk2OCwxNyArMjAyMSwx
OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIC8vICdnbycpIGJv
dW5kIHRvIHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCiAgICAgICBoYW5kbGVkID0gbG9v
a3VwS2V5KCJTaGlmdC0iICsgbmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikge3JldHVybiBkb0hh
bmRsZUJpbmRpbmcoY20sIGIsIHRydWUpO30pCiAgICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5h
bWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
YiA9PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hhbmRsZUJpbmRp
bmcoY20sIGIpOworICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJzdHJpbmciID8g
L15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOwogICAgICAgICAgICAgICAgIH0pOwogICAgIH0gZWxz
ZSB7CiAgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIp
IHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwogICAgIH0KLSAgICBpZiAoaGFu
ZGxlZCA9PSAic3RvcCIpIGhhbmRsZWQgPSBmYWxzZTsKIAogICAgIGlmIChoYW5kbGVkKSB7CiAg
ICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgcmVzdGFydEJsaW5rKGNtKTsKICAgICAg
IGlmIChpZV9sdDkpIHsgZS5vbGRLZXlDb2RlID0gZS5rZXlDb2RlOyBlLmtleUNvZGUgPSAwOyB9
CisgICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7CiAgICAg
fQogICAgIHJldHVybiBoYW5kbGVkOwogICB9CkBAIC0xOTg5LDYgKzIwNDMsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgZV9w
cmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHJlc3RhcnRCbGluayhjbSk7CisgICAgICBzaWduYWxM
YXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgIiciICsgY2ggKyAiJyIsIGUpOwogICAgIH0KICAg
ICByZXR1cm4gaGFuZGxlZDsKICAgfQpAQCAtMTk5OCw3ICsyMDUzLDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNtID0gdGhpczsKICAgICBpZiAoIWNtLnN0
YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwogICAgIGlmIChpZSAmJiBlLmtleUNvZGUgPT0gMjcp
IHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9Ci0gICAgaWYgKGNtLm9wdGlvbnMub25LZXlFdmVu
dCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CisgICAg
aWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20u
b3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgIHZhciBjb2Rl
ID0gZS5rZXlDb2RlOwogICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUu
CiAgICAgY20uZG9jLnNlbC5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsKQEAgLTIw
MTQsNyArMjA2OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1
bmN0aW9uIG9uS2V5UHJlc3MoZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKGNtLm9w
dGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkp
KSByZXR1cm47CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9u
S2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJu
OwogICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7CiAg
ICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtl
eSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CiAgICAgaWYgKCgob3BlcmEg
JiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5kbGVLZXlCaW5k
aW5nKGNtLCBlKSkgcmV0dXJuOwpAQCAtMjAyNCw2ICsyMDc5LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5p
bmRleE9mKGNoKSA+IC0xKQogICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9u
KCkge2luZGVudExpbmUoY20sIGNtLmRvYy5zZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDc1KTsK
ICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOworICAgIGlmIChp
ZSAmJiAhaWVfbHQ5KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKICAgICBm
YXN0UG9sbChjbSk7CiAgIH0KIApAQCAtMjA1MSw2ICsyMTA3LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgdmFyIGRldGVjdGluZ1NlbGVjdEFsbDsKICAgZnVuY3Rp
b24gb25Db250ZXh0TWVudShjbSwgZSkgeworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSwg
ImNvbnRleHRtZW51IikpIHJldHVybjsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNl
bCA9IGNtLmRvYy5zZWw7CiAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHJldHVy
bjsKIApAQCAtMjA2OSw2ICsyMTI2LDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIC8vIEFkZHMgIlNlbGVjdCBhbGwiIHRvIGNvbnRleHQgbWVudSBpbiBGRgogICAg
IGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgZGlzcGxheS5pbnB1dC52YWx1ZSA9IGRpc3Bs
YXkucHJldklucHV0ID0gIiAiOwogCisgICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2so
KSB7CisgICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Cisg
ICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0VxKHNl
bC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVlKTsKKyAgICAgICAgZGlz
cGxheS5wcmV2SW5wdXQgPSAiICI7CisgICAgICAgIGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3Rh
cnQgPSAxOyBkaXNwbGF5LmlucHV0LnNlbGVjdGlvbkVuZCA9IGV4dHZhbC5sZW5ndGg7CisgICAg
ICB9CisgICAgfQogICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAgIGRpc3BsYXkuaW5wdXRE
aXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgZGlzcGxheS5pbnB1dC5zdHls
ZS5jc3NUZXh0ID0gb2xkQ1NTOwpAQCAtMjA3NiwxMiArMjE0MCwxMCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHNsb3dQb2xsKGNtKTsKIAogICAgICAgLy8gVHJ5
IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsCi0gICAgICBpZiAoZGlzcGxh
eS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsICYmICghaWUgfHwgaWVfbHQ5KSkgeworICAg
ICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkgeworICAgICAgICBp
ZiAoIWllIHx8IGllX2x0OSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKICAgICAgICAgY2xlYXJU
aW1lb3V0KGRldGVjdGluZ1NlbGVjdEFsbCk7Ci0gICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5
LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNw
bGF5LmlucHV0LnZhbHVlKSwgaSA9IDA7Ci0gICAgICAgIGRpc3BsYXkucHJldklucHV0ID0gIiAi
OwotICAgICAgICBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1
dC5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOwotICAgICAgICB2YXIgcG9sbCA9IGZ1bmN0
aW9uKCl7CisgICAgICAgIHZhciBpID0gMCwgcG9sbCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAg
aWYgKGRpc3BsYXkucHJldklucHV0ID09ICIgIiAmJiBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0
YXJ0ID09IDApCiAgICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRzLnNlbGVjdEFsbCko
Y20pOwogICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkZXRlY3RpbmdTZWxlY3RBbGwgPSBz
ZXRUaW1lb3V0KHBvbGwsIDUwMCk7CkBAIC0yMDkxLDYgKzIxNTMsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoaWUgJiYgIWll
X2x0OSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKICAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNr
KSB7CiAgICAgICBlX3N0b3AoZSk7CiAgICAgICB2YXIgbW91c2V1cCA9IGZ1bmN0aW9uKCkgewpA
QCAtMjEwNSwxMSArMjE2OCwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICAvLyBVUERBVElORwogCi0gIGZ1bmN0aW9uIGNoYW5nZUVuZChjaGFuZ2UpIHsKKyAgdmFy
IGNoYW5nZUVuZCA9IENvZGVNaXJyb3IuY2hhbmdlRW5kID0gZnVuY3Rpb24oY2hhbmdlKSB7CiAg
ICAgaWYgKCFjaGFuZ2UudGV4dCkgcmV0dXJuIGNoYW5nZS50bzsKICAgICByZXR1cm4gUG9zKGNo
YW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAg
bHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFu
Z2UuZnJvbS5jaCA6IDApKTsKLSAgfQorICB9OwogCiAgIC8vIE1ha2Ugc3VyZSBhIHBvc2l0aW9u
IHdpbGwgYmUgdmFsaWQgYWZ0ZXIgdGhlIGdpdmVuIGNoYW5nZS4KICAgZnVuY3Rpb24gY2xpcFBv
c3RDaGFuZ2UoZG9jLCBjaGFuZ2UsIHBvcykgewpAQCAtMjE1MSwyMSArMjIxNCwyMSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4ge2FuY2hvcjogYWRqdXN0
UG9zKGRvYy5zZWwuYW5jaG9yKSwgaGVhZDogYWRqdXN0UG9zKGRvYy5zZWwuaGVhZCl9OwogICB9
CiAKLSAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7CisgIGZ1bmN0aW9uIGZp
bHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7CiAgICAgdmFyIG9iaiA9IHsKICAgICAg
IGNhbmNlbGVkOiBmYWxzZSwKICAgICAgIGZyb206IGNoYW5nZS5mcm9tLAogICAgICAgdG86IGNo
YW5nZS50bywKICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LAogICAgICAgb3JpZ2luOiBjaGFuZ2Uu
b3JpZ2luLAotICAgICAgdXBkYXRlOiBmdW5jdGlvbihmcm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7
Ci0gICAgICAgIGlmIChmcm9tKSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7Ci0gICAg
ICAgIGlmICh0bykgdGhpcy50byA9IGNsaXBQb3MoZG9jLCB0byk7Ci0gICAgICAgIGlmICh0ZXh0
KSB0aGlzLnRleHQgPSB0ZXh0OwotICAgICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRo
aXMub3JpZ2luID0gb3JpZ2luOwotICAgICAgfSwKICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7
IHRoaXMuY2FuY2VsZWQgPSB0cnVlOyB9CiAgICAgfTsKKyAgICBpZiAodXBkYXRlKSBvYmoudXBk
YXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIHRleHQsIG9yaWdpbikgeworICAgICAgaWYgKGZyb20p
IHRoaXMuZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKTsKKyAgICAgIGlmICh0bykgdGhpcy50byA9
IGNsaXBQb3MoZG9jLCB0byk7CisgICAgICBpZiAodGV4dCkgdGhpcy50ZXh0ID0gdGV4dDsKKyAg
ICAgIGlmIChvcmlnaW4gIT09IHVuZGVmaW5lZCkgdGhpcy5vcmlnaW4gPSBvcmlnaW47CisgICAg
fTsKICAgICBzaWduYWwoZG9jLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLCBvYmopOwogICAgIGlmIChk
b2MuY20pIHNpZ25hbChkb2MuY20sICJiZWZvcmVDaGFuZ2UiLCBkb2MuY20sIG9iaik7CiAKQEAg
LTIxODIsNyArMjI0NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IH0KIAogICAgIGlmIChoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAm
JiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpKSB7Ci0gICAgICBjaGFuZ2UgPSBm
aWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOworICAgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRv
YywgY2hhbmdlLCB0cnVlKTsKICAgICAgIGlmICghY2hhbmdlKSByZXR1cm47CiAgICAgfQogCkBA
IC0yMjIxLDE1ICsyMjg0LDIzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7CiAgICAgdmFyIGV2ZW50ID0gKHR5cGUgPT0gInVu
ZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUpLnBvcCgpOwogICAgIGlmICghZXZlbnQpIHJl
dHVybjsKLSAgICBoaXN0LmRpcnR5Q291bnRlciArPSB0eXBlID09ICJ1bmRvIiA/IC0xIDogMTsK
IAogICAgIHZhciBhbnRpID0ge2NoYW5nZXM6IFtdLCBhbmNob3JCZWZvcmU6IGV2ZW50LmFuY2hv
ckFmdGVyLCBoZWFkQmVmb3JlOiBldmVudC5oZWFkQWZ0ZXIsCi0gICAgICAgICAgICAgICAgYW5j
aG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVhZEFmdGVyOiBldmVudC5oZWFkQmVmb3Jl
fTsKKyAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFk
QWZ0ZXI6IGV2ZW50LmhlYWRCZWZvcmUsCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlz
dC5nZW5lcmF0aW9ufTsKICAgICAodHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3Qu
ZG9uZSkucHVzaChhbnRpKTsKKyAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9u
IHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uOworCisgICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIo
ZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVm
b3JlQ2hhbmdlIik7CiAKICAgICBmb3IgKHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAx
OyBpID49IDA7IC0taSkgewogICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07CiAg
ICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKKyAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlckNo
YW5nZShkb2MsIGNoYW5nZSwgZmFsc2UpKSB7CisgICAgICAgICh0eXBlID09ICJ1bmRvIiA/IGhp
c3QuZG9uZSA6IGhpc3QudW5kb25lKS5sZW5ndGggPSAwOworICAgICAgICByZXR1cm47CisgICAg
ICB9CisKICAgICAgIGFudGkuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRv
YywgY2hhbmdlKSk7CiAKICAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFu
Z2UoZG9jLCBjaGFuZ2UsIG51bGwpCkBAIC0yNDkxLDExICsyNTYyLDExIEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBTQ1JPTExJTkcKIAogICBmdW5jdGlvbiBzY3Jv
bGxDdXJzb3JJbnRvVmlldyhjbSkgewotICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmll
dyhjbSwgY20uZG9jLnNlbC5oZWFkKTsKKyAgICB2YXIgY29vcmRzID0gc2Nyb2xsUG9zSW50b1Zp
ZXcoY20sIGNtLmRvYy5zZWwuaGVhZCwgY20ub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pOwog
ICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBudWxsLCBw
VG9wID0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKLSAgICBpZiAoY29vcmRzLnRvcCArIHBUb3Ag
KyBib3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOwotICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0
b20gKyBwVG9wICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CisgICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIpLCBkb1Njcm9s
bCA9IG51bGw7CisgICAgaWYgKGNvb3Jkcy50b3AgKyBib3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0
cnVlOworICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0b20gKyBib3gudG9wID4gKHdpbmRvdy5pbm5l
ckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgZG9TY3Jv
bGwgPSBmYWxzZTsKICAgICBpZiAoZG9TY3JvbGwgIT0gbnVsbCAmJiAhcGhhbnRvbSkgewogICAg
ICAgdmFyIGhpZGRlbiA9IGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiOwog
ICAgICAgaWYgKGhpZGRlbikgewpAQCAtMjUzMywxMiArMjYwNCwxMSBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBv
cyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0
ID0gcGFkZGluZ1RvcChkaXNwbGF5KTsKLSAgICB5MSArPSBwdDsgeTIgKz0gcHQ7CisgICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChjbS5kaXNwbGF5
KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7CiAgICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Ny
b2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVlbnRvcCA9IGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKICAgICB2YXIgZG9jQm90dG9tID0gY20u
ZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpOwotICAgIHZhciBhdFRvcCA9IHkxIDwg
cHQgKyAxMCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9tIC0gMTA7CisgICAgdmFyIGF0
VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25hcE1h
cmdpbjsKICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsKICAgICAgIHJlc3VsdC5zY3JvbGxUb3Ag
PSBhdFRvcCA/IDAgOiB5MTsKICAgICB9IGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVu
KSB7CkBAIC0yNTc1LDcgKzI2NDUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKIAogICBmdW5jdGlvbiBpbmRlbnRMaW5lKGNtLCBuLCBob3csIGFnZ3Jlc3NpdmUpIHsKICAg
ICB2YXIgZG9jID0gY20uZG9jOwotICAgIGlmICghaG93KSBob3cgPSAiYWRkIjsKKyAgICBpZiAo
aG93ID09IG51bGwpIGhvdyA9ICJhZGQiOwogICAgIGlmIChob3cgPT0gInNtYXJ0IikgewogICAg
ICAgaWYgKCFjbS5kb2MubW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKICAgICAgIGVsc2UgdmFy
IHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOwpAQCAtMjU5OCw2ICsyNjY4LDggQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpbmRlbnRhdGlvbiA9IGN1clNw
YWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OwogICAgIH0gZWxzZSBpZiAoaG93ID09ICJzdWJ0
cmFjdCIpIHsKICAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5vcHRpb25zLmluZGVu
dFVuaXQ7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgaG93ID09ICJudW1iZXIiKSB7CisgICAgICBp
bmRlbnRhdGlvbiA9IGN1clNwYWNlICsgaG93OwogICAgIH0KICAgICBpbmRlbnRhdGlvbiA9IE1h
dGgubWF4KDAsIGluZGVudGF0aW9uKTsKIApAQCAtMjYyMiw3ICsyNjk0LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBmaW5kUG9zSChkb2Ms
IHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkgewotICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGNo
ID0gcG9zLmNoOworICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGNoID0gcG9zLmNoLCBvcmlnRGly
ID0gZGlyOwogICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUpOwogICAgIHZhciBw
b3NzaWJsZSA9IHRydWU7CiAgICAgZnVuY3Rpb24gZmluZE5leHRMaW5lKCkgewpAQCAtMjY2MSw3
ICsyNzMzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlm
IChkaXIgPiAwICYmICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgIH0KICAgICB9Ci0g
ICAgdmFyIHJlc3VsdCA9IHNraXBBdG9taWMoZG9jLCBQb3MobGluZSwgY2gpLCBkaXIsIHRydWUp
OworICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWljKGRvYywgUG9zKGxpbmUsIGNoKSwgb3JpZ0Rp
ciwgdHJ1ZSk7CiAgICAgaWYgKCFwb3NzaWJsZSkgcmVzdWx0LmhpdFNpZGUgPSB0cnVlOwogICAg
IHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTI2ODYsNyArMjc1OCw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBvcykgewog
ICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgIGlmIChsaW5lKSB7Ci0g
ICAgICBpZiAocG9zLmFmdGVyID09PSBmYWxzZSB8fCBlbmQgPT0gbGluZS5sZW5ndGgpIC0tc3Rh
cnQ7IGVsc2UgKytlbmQ7CisgICAgICBpZiAoKHBvcy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5s
ZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwogICAgICAgdmFyIHN0YXJ0Q2hh
ciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3Rh
cnRDaGFyKSA/IGlzV29yZENoYXIKICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1
bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQpAQCAtMjcwNyw2ICsyNzc5LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vICd3cmFwIGYgaW4gYW4gb3Bl
cmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInCiAKICAgQ29kZU1pcnJv
ci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IENvZGVNaXJyb3IsCiAgICAgZm9jdXM6
IGZ1bmN0aW9uKCl7d2luZG93LmZvY3VzKCk7IGZvY3VzSW5wdXQodGhpcyk7IG9uRm9jdXModGhp
cyk7IGZhc3RQb2xsKHRoaXMpO30sCiAKICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwg
dmFsdWUpIHsKQEAgLTI3MjYsNyArMjc5OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7CiAgICAgICB2YXIgbWFw
cyA9IHRoaXMuc3RhdGUua2V5TWFwczsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKCh0eXBlb2YgbWFwID09ICJzdHJpbmciID8gbWFwc1tp
XS5uYW1lIDogbWFwc1tpXSkgPT0gbWFwKSB7CisgICAgICAgIGlmIChtYXBzW2ldID09IG1hcCB8
fCAodHlwZW9mIG1hcHNbaV0gIT0gInN0cmluZyIgJiYgbWFwc1tpXS5uYW1lID09IG1hcCkpIHsK
ICAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtMjc0Miw3ICsyODE1LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgcmVtb3ZlT3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMp
IHsKICAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7CiAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdmVy
bGF5c1tpXS5tb2RlU3BlYyA9PSBzcGVjKSB7CisgICAgICAgIHZhciBjdXIgPSBvdmVybGF5c1tp
XS5tb2RlU3BlYzsKKyAgICAgICAgaWYgKGN1ciA9PSBzcGVjIHx8IHR5cGVvZiBzcGVjID09ICJz
dHJpbmciICYmIGN1ci5uYW1lID09IHNwZWMpIHsKICAgICAgICAgICBvdmVybGF5cy5zcGxpY2Uo
aSwgMSk7CiAgICAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7CiAgICAgICAgICAgcmVnQ2hh
bmdlKHRoaXMpOwpAQCAtMjc1Miw3ICsyODI2LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgfSksCiAKICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24obnVsbCwgZnVu
Y3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7Ci0gICAgICBpZiAodHlwZW9mIGRpciAhPSAic3Ry
aW5nIikgeworICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIgJiYgdHlwZW9mIGRpciAh
PSAibnVtYmVyIikgewogICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IHRoaXMub3B0aW9u
cy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAgIGVsc2UgZGlyID0gZGly
ID8gImFkZCIgOiAic3VidHJhY3QiOwogICAgICAgfQpAQCAtMjc2NywxMCArMjg0MSwxMCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIC8vIEZldGNoIHRoZSBwYXJz
ZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAgLy8g
dGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24p
LgotICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykgeworICAgIGdldFRva2VuQXQ6IGZ1bmN0
aW9uKHBvcywgcHJlY2lzZSkgewogICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwogICAgICAgcG9z
ID0gY2xpcFBvcyhkb2MsIHBvcyk7Ci0gICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0
aGlzLCBwb3MubGluZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOworICAgICAgdmFyIHN0YXRlID0g
Z2V0U3RhdGVCZWZvcmUodGhpcywgcG9zLmxpbmUsIHByZWNpc2UpLCBtb2RlID0gdGhpcy5kb2Mu
bW9kZTsKICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTsKICAgICAgIHZh
ciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRhYlNp
emUpOwogICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2woKSkg
ewpAQCAtMjc4NSwxMCArMjg1OSwzNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsKICAgICB9LAogCi0gICAgZ2V0U3RhdGVB
ZnRlcjogZnVuY3Rpb24obGluZSkgeworICAgIGdldFRva2VuVHlwZUF0OiBmdW5jdGlvbihwb3Mp
IHsKKyAgICAgIHBvcyA9IGNsaXBQb3ModGhpcy5kb2MsIHBvcyk7CisgICAgICB2YXIgc3R5bGVz
ID0gZ2V0TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSkpOworICAg
ICAgdmFyIGJlZm9yZSA9IDAsIGFmdGVyID0gKHN0eWxlcy5sZW5ndGggLSAxKSAvIDIsIGNoID0g
cG9zLmNoOworICAgICAgaWYgKGNoID09IDApIHJldHVybiBzdHlsZXNbMl07CisgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7CisgICAgICAg
IGlmICgobWlkID8gc3R5bGVzW21pZCAqIDIgLSAxXSA6IDApID49IGNoKSBhZnRlciA9IG1pZDsK
KyAgICAgICAgZWxzZSBpZiAoc3R5bGVzW21pZCAqIDIgKyAxXSA8IGNoKSBiZWZvcmUgPSBtaWQg
KyAxOworICAgICAgICBlbHNlIHJldHVybiBzdHlsZXNbbWlkICogMiArIDJdOworICAgICAgfQor
ICAgIH0sCisKKyAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykgeworICAgICAgdmFyIG1vZGUg
PSB0aGlzLmRvYy5tb2RlOworICAgICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgcmV0dXJuIG1vZGU7
CisgICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0
KHBvcykuc3RhdGUpLm1vZGU7CisgICAgfSwKKworICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9z
LCB0eXBlKSB7CisgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVy
bjsKKyAgICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwgbW9kZSA9IHRoaXMuZ2V0TW9kZUF0
KHBvcyk7CisgICAgICByZXR1cm4gbW9kZVt0eXBlXSAmJiBoZWxwW21vZGVbdHlwZV1dIHx8Cisg
ICAgICAgIG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVyVHlwZV0gfHwKKyAgICAg
ICAgaGVscFttb2RlLm5hbWVdOworICAgIH0sCisKKyAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlv
bihsaW5lLCBwcmVjaXNlKSB7CiAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CiAgICAgICBsaW5l
ID0gY2xpcExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6
IGxpbmUpOwotICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxpbmUgKyAxKTsKKyAg
ICAgIHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSk7CiAgICAg
fSwKIAogICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKQEAgLTI4MDgs
NiArMjkwOSwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJl
dHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTsKICAgICB9LAog
CisgICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1vZGUpIHsKKyAgICAgIGhlaWdo
dCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7dG9wOiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8
ICJwYWdlIikudG9wOworICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0
ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpOworICAgIH0sCisgICAgaGVpZ2h0QXRMaW5lOiBm
dW5jdGlvbihsaW5lLCBtb2RlKSB7CisgICAgICB2YXIgZW5kID0gZmFsc2UsIGxhc3QgPSB0aGlz
LmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOworICAgICAgaWYgKGxpbmUgPCB0aGlzLmRv
Yy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OworICAgICAgZWxzZSBpZiAobGluZSA+IGxh
c3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KKyAgICAgIHZhciBsaW5lT2JqID0gZ2V0
TGluZSh0aGlzLmRvYywgbGluZSk7CisgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMs
IGdldExpbmUodGhpcy5kb2MsIGxpbmUpLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFn
ZSIpLnRvcCArCisgICAgICAgIChlbmQgPyBsaW5lT2JqLmhlaWdodCA6IDApOworICAgIH0sCisK
ICAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRo
aXMuZGlzcGxheSk7IH0sCiAgICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVy
biBjaGFyV2lkdGgodGhpcy5kaXNwbGF5KTsgfSwKIApAQCAtMjgzNiw3ICsyOTUwLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gY2hhbmdlTGluZSh0
aGlzLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9
PSAidGV4dCIgPyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNz
IiA6ICJ3cmFwQ2xhc3MiOwogICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBj
bHM7Ci0gICAgICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiIikudGVz
dChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhw
KCIoPzpefFxccykiICsgY2xzICsgIig/OiR8XFxzKSIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVy
biBmYWxzZTsKICAgICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICB9KTsKQEAgLTI4NDksOSArMjk2MywxMCBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsK
ICAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIGxpbmVbcHJvcF0gPSBudWxsOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICB2YXIgdXBkID0gY3VyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIg
KyBjbHMgKyAiXFxiXFxzKnxcXHMqXFxiIiArIGNscyArICJcXGIiKSwgIiIpOwotICAgICAgICAg
IGlmICh1cGQgPT0gY3VyKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgbGluZVtwcm9wXSA9IHVw
ZCB8fCBudWxsOworICAgICAgICAgIHZhciBmb3VuZCA9IGN1ci5tYXRjaChuZXcgUmVnRXhwKCIo
PzpefFxccyspIiArIGNscyArICIoPzokfFxccyspIikpOworICAgICAgICAgIGlmICghZm91bmQp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBmb3VuZFsw
XS5sZW5ndGg7CisgICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRl
eCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gIiIgOiAiICIpICsgY3Vy
LnNsaWNlKGVuZCkgfHwgbnVsbDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgIH0pOwpAQCAtMjg5OSw3ICszMDE0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAg
ICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgIH0KLSAgICAg
IG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdUb3AoZGlzcGxheSkpICsgInB4IjsKKyAg
ICAgIG5vZGUuc3R5bGUudG9wID0gdG9wICsgInB4IjsKICAgICAgIG5vZGUuc3R5bGUubGVmdCA9
IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAg
ICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0
aDsKQEAgLTI5NjcsNyArMzA4Miw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgc2VsLmdvYWxDb2x1bW4gPSBwb3MubGVmdDsKICAgICB9KSwKIAotICAgIHRvZ2ds
ZU92ZXJ3cml0ZTogZnVuY3Rpb24oKSB7CisgICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbih2
YWx1ZSkgeworICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gdGhpcy5zdGF0ZS5v
dmVyd3JpdGUpIHJldHVybjsKICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlz
LnN0YXRlLm92ZXJ3cml0ZSkKICAgICAgICAgdGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUg
Kz0gIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI7CiAgICAgICBlbHNlCkBAIC0zMDA4LDkgKzMxMjQs
NiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHRoaXMucmVmcmVz
aCgpOwogICAgIH0sCiAKLSAgICBvbjogZnVuY3Rpb24odHlwZSwgZikge29uKHRoaXMsIHR5cGUs
IGYpO30sCi0gICAgb2ZmOiBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5cGUsIGYpO30s
Ci0KICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30s
CiAKICAgICByZWZyZXNoOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7CkBAIC0zMDM0LDYg
KzMxNDcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBnZXRTY3Jv
bGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcjt9LAog
ICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0
ZXJzO30KICAgfTsKKyAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTsKIAogICAvLyBPUFRJT04gREVG
QVVMVFMKIApAQCAtMzA5MCw2ICszMjA0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSB2YWwgPyBjb21wZW5z
YXRlRm9ySFNjcm9sbChjbS5kaXNwbGF5KSArICJweCIgOiAiMCI7CiAgICAgY20ucmVmcmVzaCgp
OwogICB9LCB0cnVlKTsKKyAgb3B0aW9uKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsIGZh
bHNlLCB1cGRhdGVTY3JvbGxiYXJzLCB0cnVlKTsKICAgb3B0aW9uKCJsaW5lTnVtYmVycyIsIGZh
bHNlLCBmdW5jdGlvbihjbSkgewogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRp
b25zKTsKICAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CkBAIC0zMTA1LDEyICszMjIwLDE0IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1
ZSk7CiAKICAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOworICBvcHRpb24oImN1cnNv
clNjcm9sbE1hcmdpbiIsIDApOwogICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwogICBvcHRp
b24oIndvcmtUaW1lIiwgMTAwKTsKICAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwogICBvcHRp
b24oImZsYXR0ZW5TcGFucyIsIHRydWUpOwogICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7
CiAgIG9wdGlvbigidW5kb0RlcHRoIiwgNDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0
b3J5LnVuZG9EZXB0aCA9IHZhbDt9KTsKKyAgb3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDUw
MCk7CiAgIG9wdGlvbigidmlld3BvcnRNYXJnaW4iLCAxMCwgZnVuY3Rpb24oY20pe2NtLnJlZnJl
c2goKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgZnVu
Y3Rpb24oY20pe2xvYWRNb2RlKGNtKTsgY20ucmVmcmVzaCgpO30sIHRydWUpOwogICBvcHRpb24o
Im1vdmVJbnB1dFdpdGhDdXJzb3IiLCB0cnVlLCBmdW5jdGlvbihjbSwgdmFsKSB7CkBAIC0zMTQx
LDE2ICszMjU4LDIxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9Owog
CiAgIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSBmdW5jdGlvbihzcGVjKSB7Ci0gICAgaWYgKHR5
cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkK
KyAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgbWltZU1vZGVzLmhhc093blByb3Bl
cnR5KHNwZWMpKSB7CiAgICAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNdOwotICAgIGVsc2UgaWYg
KHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVz
dChzcGVjKSkKKyAgICB9IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSAic3Ry
aW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkgeworICAgICAgdmFy
IGZvdW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV07CisgICAgICBzcGVjID0gY3JlYXRlT2JqKGZv
dW5kLCBzcGVjKTsKKyAgICAgIHNwZWMubmFtZSA9IGZvdW5kLm5hbWU7CisgICAgfSBlbHNlIGlm
ICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRl
c3Qoc3BlYykpIHsKICAgICAgIHJldHVybiBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNh
dGlvbi94bWwiKTsKKyAgICB9CiAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKSByZXR1
cm4ge25hbWU6IHNwZWN9OwogICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07
CiAgIH07CiAKICAgQ29kZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykg
ewotICAgIHNwZWMgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKHNwZWMpOworICAgIHZhciBzcGVj
ID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKICAgICB2YXIgbWZhY3RvcnkgPSBtb2Rl
c1tzcGVjLm5hbWVdOwogICAgIGlmICghbWZhY3RvcnkpIHJldHVybiBDb2RlTWlycm9yLmdldE1v
ZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9w
dGlvbnMsIHNwZWMpOwpAQCAtMzE2Myw2ICszMjg1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogICAgIG1vZGVPYmoubmFtZSA9IHNwZWMubmFt
ZTsKKwogICAgIHJldHVybiBtb2RlT2JqOwogICB9OwogCkBAIC0zMTgyLDEyICszMzA1LDI0IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBDb2RlTWlycm9yLmRlZmluZUV4
dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsKICAgICBDb2RlTWlycm9yLnByb3RvdHlw
ZVtuYW1lXSA9IGZ1bmM7CiAgIH07Ci0KKyAgQ29kZU1pcnJvci5kZWZpbmVEb2NFeHRlbnNpb24g
PSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7CisgICAgRG9jLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7
CisgIH07CiAgIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uID0gb3B0aW9uOwogCiAgIHZhciBpbml0
SG9va3MgPSBbXTsKICAgQ29kZU1pcnJvci5kZWZpbmVJbml0SG9vayA9IGZ1bmN0aW9uKGYpIHtp
bml0SG9va3MucHVzaChmKTt9OwogCisgIHZhciBoZWxwZXJzID0gQ29kZU1pcnJvci5oZWxwZXJz
ID0ge307CisgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1l
LCB2YWx1ZSkgeworICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVy
c1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7fTsKKyAgICBoZWxwZXJzW3R5cGVdW25hbWVd
ID0gdmFsdWU7CisgIH07CisKKyAgLy8gVVRJTElUSUVTCisKKyAgQ29kZU1pcnJvci5pc1dvcmRD
aGFyID0gaXNXb3JkQ2hhcjsKKwogICAvLyBNT0RFIFNUQVRFIEhBTkRMSU5HCiAKICAgLy8gVXRp
bGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBt
b2RlcwpAQCAtMzIzMyw2ICszMzY4LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgdmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwogICAgICAgY20ucmVwbGFj
ZVJhbmdlKCIiLCBQb3MobCwgMCksIFBvcyhsKSwgIitkZWxldGUiKTsKICAgICB9LAorICAgIGRl
bExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigp
OworICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIDApLCBjdXIsICIrZGVs
ZXRlIik7CisgICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAg
IHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCiAgICAgZ29Eb2NTdGFydDogZnVuY3Rp
b24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7fSwKQEAg
LTMzMjgsNyArMzQ2Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICJBbHQtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkNtZC1MZWZ0IjogImdvTGluZVN0YXJ0Iiwg
IkNtZC1SaWdodCI6ICJnb0xpbmVFbmQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9y
ZSIsCiAgICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEFmdGVyIiwgIkFsdC1EZWxl
dGUiOiAiZGVsR3JvdXBBZnRlciIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAog
ICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQt
QWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCi0gICAg
IkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsCisgICAgIkNtZC1b
IjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3NwYWNlIjog
ImRlbExpbmVMZWZ0IiwKICAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQogICB9
OwogICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFw
LnBjRGVmYXVsdDsKQEAgLTMzNjcsNyArMzUwNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKSB7
CiAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChtYXBzW2ldKTsKLSAgICAgIGlmIChkb25lKSByZXR1
cm4gZG9uZTsKKyAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZSAhPSAic3RvcCI7CiAgICAgfQog
ICB9CiAgIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkoZXZlbnQpIHsKQEAgLTM1MjEsNiArMzY2MCw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHRoaXMuZG9jID0gZG9j
OwogICB9CiAgIENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IFRleHRNYXJrZXI7CisgIGV2ZW50TWl4
aW4oVGV4dE1hcmtlcik7CiAKICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlv
bigpIHsKICAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwpAQCAtMzU0OSw3
ICszNjg5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKG1p
biAhPSBudWxsICYmIGNtKSByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7CiAgICAgdGhpcy5s
aW5lcy5sZW5ndGggPSAwOwogICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlOwotICAg
IGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmRvYy5jYW50RWRpdCkgeworICAgIGlmICh0aGlz
LmF0b21pYyAmJiB0aGlzLmRvYy5jYW50RWRpdCkgewogICAgICAgdGhpcy5kb2MuY2FudEVkaXQg
PSBmYWxzZTsKICAgICAgIGlmIChjbSkgcmVDaGVja1NlbGVjdGlvbihjbSk7CiAgICAgfQpAQCAt
MzU3MiwxNSArMzcxMiwxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICByZXR1cm4gZnJvbSAmJiB7ZnJvbTogZnJvbSwgdG86IHRvfTsKICAgfTsKIAotICBUZXh0TWFy
a2VyLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oY29weVdpZGdldCkgewotICAgIHZh
ciByZXBsID0gdGhpcy5yZXBsYWNlZFdpdGg7Ci0gICAgcmV0dXJuIHtjbGFzc05hbWU6IHRoaXMu
Y2xhc3NOYW1lLAotICAgICAgICAgICAgaW5jbHVzaXZlTGVmdDogdGhpcy5pbmNsdXNpdmVMZWZ0
LCBpbmNsdXNpdmVSaWdodDogdGhpcy5pbmNsdXNpdmVSaWdodCwKLSAgICAgICAgICAgIGF0b21p
YzogdGhpcy5hdG9taWMsCi0gICAgICAgICAgICBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkLAot
ICAgICAgICAgICAgcmVwbGFjZWRXaXRoOiBjb3B5V2lkZ2V0ID8gcmVwbCAmJiByZXBsLmNsb25l
Tm9kZSh0cnVlKSA6IHJlcGwsCi0gICAgICAgICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSwK
LSAgICAgICAgICAgIHN0YXJ0U3R5bGU6IHRoaXMuc3RhcnRTdHlsZSwgZW5kU3R5bGU6IHRoaXMu
ZW5kU3R5bGV9OworICBUZXh0TWFya2VyLnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHBvcyA9IHRoaXMuZmluZCgpLCBjbSA9IHRoaXMuZG9jLmNtOworICAgIGlmICgh
cG9zIHx8ICFjbSkgcmV0dXJuOworICAgIHZhciBsaW5lID0gZ2V0TGluZSh0aGlzLmRvYywgcG9z
LmZyb20ubGluZSk7CisgICAgY2xlYXJDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7CisgICAg
aWYgKHBvcy5mcm9tLmxpbmUgPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSAmJiBwb3MuZnJvbS5s
aW5lIDwgY20uZGlzcGxheS5zaG93aW5nVG8pIHsKKyAgICAgIGZvciAodmFyIG5vZGUgPSBjbS5k
aXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcp
IGlmIChub2RlLmxpbmVPYmogPT0gbGluZSkgeworICAgICAgICBpZiAobm9kZS5vZmZzZXRIZWln
aHQgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbm9kZS5vZmZzZXRIZWln
aHQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9u
KCkgeyBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7CisgICAgfQogICB9Owog
CiAgIFRleHRNYXJrZXIucHJvdG90eXBlLmF0dGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7CkBA
IC0zNjA5LDYgKzM3NTIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkgewogICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRy
dWU7CiAgICAgICBtYXJrZXIucmVwbGFjZWRXaXRoID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBs
YWNlZFdpdGhdLCAiQ29kZU1pcnJvci13aWRnZXQiKTsKKyAgICAgIGlmICghb3B0aW9ucy5oYW5k
bGVNb3VzZUV2ZW50cykgbWFya2VyLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHMgPSB0cnVlOwog
ICAgIH0KICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgc2F3Q29sbGFwc2VkU3BhbnMgPSB0cnVl
OwogCkBAIC0zNjUxLDcgKzM3OTUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB9CiAgICAgaWYgKGNtKSB7CiAgICAgICBpZiAodXBkYXRlTWF4TGluZSkgY20uY3Vy
T3AudXBkYXRlTWF4TGluZSA9IHRydWU7Ci0gICAgICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBt
YXJrZXIuc3RhcnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNvbGxhcHNlZCkK
KyAgICAgIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci50aXRsZSB8fCBtYXJrZXIuc3Rh
cnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNvbGxhcHNlZCkKICAgICAgICAg
cmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxKTsKICAgICAgIGlmIChtYXJrZXIu
YXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtKTsKICAgICB9CkBAIC0zNjY5LDYgKzM4MTMsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KICAgQ29kZU1p
cnJvci5TaGFyZWRUZXh0TWFya2VyID0gU2hhcmVkVGV4dE1hcmtlcjsKKyAgZXZlbnRNaXhpbihT
aGFyZWRUZXh0TWFya2VyKTsKIAogICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9
IGZ1bmN0aW9uKCkgewogICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47CkBA
IC0zNjgwLDExICszODI1LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gdGhpcy5wcmltYXJ5LmZpbmQoKTsKICAgfTsKLSAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5
cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKGNvcHlXaWRnZXQpIHsKLSAgICB2YXIgaW5uZXIgPSB0
aGlzLnByaW1hcnkuZ2V0T3B0aW9ucyhjb3B5V2lkZ2V0KTsKLSAgICBpbm5lci5zaGFyZWQgPSB0
cnVlOwotICAgIHJldHVybiBpbm5lcjsKLSAgfTsKIAogICBmdW5jdGlvbiBtYXJrVGV4dFNoYXJl
ZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CiAgICAgb3B0aW9ucyA9IGNvcHlPYmoo
b3B0aW9ucyk7CkBAIC0zNzg3LDYgKzM5MjcsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisgICAgaWYgKHNhbWVMaW5lICYm
IGZpcnN0KSB7CisgICAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1s
ZW5ndGggc3BhbnMKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kp
CisgICAgICAgIGlmIChmaXJzdFtpXS5mcm9tICE9IG51bGwgJiYgZmlyc3RbaV0uZnJvbSA9PSBm
aXJzdFtpXS50byAmJiBmaXJzdFtpXS5tYXJrZXIudHlwZSAhPSAiYm9va21hcmsiKQorICAgICAg
ICAgIGZpcnN0LnNwbGljZShpLS0sIDEpOworICAgICAgaWYgKCFmaXJzdC5sZW5ndGgpIGZpcnN0
ID0gbnVsbDsKKyAgICB9CiAKICAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07CiAgICAgaWYg
KCFzYW1lTGluZSkgewpAQCAtMzg4MSw2ICs0MDI4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICBzcCA9IHNwc1tpXTsKICAgICAgIGlmICghc3AubWFya2VyLmNv
bGxhcHNlZCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSByZXR1cm4gdHJ1
ZTsKKyAgICAgIGlmIChzcC5tYXJrZXIucmVwbGFjZWRXaXRoKSBjb250aW51ZTsKICAgICAgIGlm
IChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVu
SW5uZXIoZG9jLCBsaW5lLCBzcCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM4
OTQsNyArNDA0Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
cmV0dXJuIHRydWU7CiAgICAgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFu
cy5sZW5ndGg7ICsraSkgewogICAgICAgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldOwotICAgICAg
aWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgc3AuZnJvbSA9PSBzcGFuLnRvICYmCisgICAgICBp
ZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAhc3AubWFya2VyLnJlcGxhY2VkV2l0aCAmJiBzcC5m
cm9tID09IHNwYW4udG8gJiYKICAgICAgICAgICAoc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgfHwg
c3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmCiAgICAgICAgICAgbGluZUlzSGlkZGVuSW5u
ZXIoZG9jLCBsaW5lLCBzcCkpIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM5MTgsMTEgKzQwNjYs
MTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIExJTkUgV0lER0VU
UwogCiAgIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVuY3Rpb24o
Y20sIG5vZGUsIG9wdGlvbnMpIHsKLSAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgaWYgKG9w
dGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSkKKyAgICBpZiAob3B0aW9ucykgZm9yICh2YXIgb3B0
IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCiAgICAgICB0aGlz
W29wdF0gPSBvcHRpb25zW29wdF07CiAgICAgdGhpcy5jbSA9IGNtOwogICAgIHRoaXMubm9kZSA9
IG5vZGU7CiAgIH07CisgIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7CiAgIGZ1bmN0aW9uIHdpZGdl
dE9wZXJhdGlvbihmKSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHdpdGhP
cCA9ICF0aGlzLmNtLmN1ck9wOwpAQCAtMzkzNyw3ICs0MDg2LDkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKG5vID09IG51bGwgfHwgIXdzKSByZXR1cm47CiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgaWYgKHdzW2ldID09IHRoaXMp
IHdzLnNwbGljZShpLS0sIDEpOwogICAgIGlmICghd3MubGVuZ3RoKSB0aGlzLmxpbmUud2lkZ2V0
cyA9IG51bGw7CisgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZSh0aGlzLmNtLCB0
aGlzLmxpbmUpIDwgdGhpcy5jbS5kb2Muc2Nyb2xsVG9wOwogICAgIHVwZGF0ZUxpbmVIZWlnaHQo
dGhpcy5saW5lLCBNYXRoLm1heCgwLCB0aGlzLmxpbmUuaGVpZ2h0IC0gd2lkZ2V0SGVpZ2h0KHRo
aXMpKSk7CisgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQb3ModGhpcy5jbSwgMCwg
LXRoaXMuaGVpZ2h0KTsKICAgICByZWdDaGFuZ2UodGhpcy5jbSwgbm8sIG5vICsgMSk7CiAgIH0p
OwogICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gd2lkZ2V0T3BlcmF0aW9uKGZ1bmN0
aW9uKCkgewpAQCAtMzk2MSwxMCArNDExMiwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRnZXQoY20sIG5vZGUsIG9wdGlv
bnMpOwogICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSBjbS5kaXNwbGF5LmFsaWduV2lkZ2V0cyA9
IHRydWU7CiAgICAgY2hhbmdlTGluZShjbSwgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAg
ICAobGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSkpLnB1c2god2lkZ2V0KTsKKyAg
ICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7Cisg
ICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHdpZGdldHMucHVzaCh3aWRnZXQpOwor
ICAgICAgZWxzZSB3aWRnZXRzLnNwbGljZShNYXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1h
dGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkpLCAwLCB3aWRnZXQpOwogICAgICAgd2lkZ2V0Lmxp
bmUgPSBsaW5lOwogICAgICAgaWYgKCFsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSB8fCB3aWRn
ZXQuc2hvd0lmSGlkZGVuKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExp
bmUoY20sIGxpbmUpIDwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CisgICAgICAgIHZh
ciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZG9jLnNjcm9sbFRv
cDsKICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIHdpZGdldEhl
aWdodCh3aWRnZXQpKTsKICAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQb3Mo
Y20sIDAsIHdpZGdldC5oZWlnaHQpOwogICAgICAgfQpAQCAtMzk3NywxMiArNDEzMCwxMiBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBMaW5lIG9iamVjdHMuIFRo
ZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogICAvLyBoaWdobGln
aHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuCi0gIGZ1bmN0aW9uIG1ha2VMaW5lKHRleHQs
IG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAgIHZhciBsaW5lID0ge3RleHQ6IHRl
eHR9OwotICAgIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKTsKLSAgICBsaW5l
LmhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1hdGVIZWlnaHQobGluZSkgOiAxOwotICAg
IHJldHVybiBsaW5lOwotICB9CisgIHZhciBMaW5lID0gQ29kZU1pcnJvci5MaW5lID0gZnVuY3Rp
b24odGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7CisgICAgdGhpcy50ZXh0ID0g
dGV4dDsKKyAgICBhdHRhY2hNYXJrZWRTcGFucyh0aGlzLCBtYXJrZWRTcGFucyk7CisgICAgdGhp
cy5oZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KHRoaXMpIDogMTsKKyAg
fTsKKyAgZXZlbnRNaXhpbihMaW5lKTsKIAogICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRl
eHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgIGxpbmUudGV4dCA9IHRleHQ7
CkBAIC00MDA2LDcgKzQxNTksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYpIHsKICAgICB2YXIg
ZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0dGVuU3BhbnM7CiAgICAgaWYgKGZsYXR0ZW5TcGFucyA9
PSBudWxsKSBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKLSAgICB2YXIg
Y3VyVGV4dCA9ICIiLCBjdXJTdHlsZSA9IG51bGw7CisgICAgdmFyIGN1clN0YXJ0ID0gMCwgY3Vy
U3R5bGUgPSBudWxsOwogICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNt
Lm9wdGlvbnMudGFiU2l6ZSksIHN0eWxlOwogICAgIGlmICh0ZXh0ID09ICIiICYmIG1vZGUuYmxh
bmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CiAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkp
IHsKQEAgLTQwMTgsMTQgKzQxNzEsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBz
dGF0ZSk7CiAgICAgICB9Ci0gICAgICB2YXIgc3Vic3RyID0gc3RyZWFtLmN1cnJlbnQoKTsKLSAg
ICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8
fCBjdXJTdHlsZSAhPSBzdHlsZSkgewotICAgICAgICBpZiAoY3VyVGV4dCkgZihjdXJUZXh0LCBj
dXJTdHlsZSk7Ci0gICAgICAgIGN1clRleHQgPSBzdWJzdHI7IGN1clN0eWxlID0gc3R5bGU7Ci0g
ICAgICB9IGVsc2UgY3VyVGV4dCA9IGN1clRleHQgKyBzdWJzdHI7CisgICAgICAgIGlmIChjdXJT
dGFydCA8IHN0cmVhbS5zdGFydCkgZihzdHJlYW0uc3RhcnQsIGN1clN0eWxlKTsKKyAgICAgICAg
Y3VyU3RhcnQgPSBzdHJlYW0uc3RhcnQ7IGN1clN0eWxlID0gc3R5bGU7CisgICAgICB9CisgICAg
ICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgIH0KLSAgICBpZiAoY3VyVGV4dCkgZihj
dXJUZXh0LCBjdXJTdHlsZSk7CisgICAgaWYgKGN1clN0YXJ0IDwgc3RyZWFtLnBvcykgZihzdHJl
YW0ucG9zLCBjdXJTdHlsZSk7CiAgIH0KIAogICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBs
aW5lLCBzdGF0ZSkgewpAQCAtNDAzMywyNyArNDE4NSwyNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAvLyBtb2RlL292ZXJsYXlzIHRoYXQgaXQgaXMgYmFzZWQgb24g
KGZvciBlYXN5IGludmFsaWRhdGlvbikuCiAgICAgdmFyIHN0ID0gW2NtLnN0YXRlLm1vZGVHZW5d
OwogICAgIC8vIENvbXB1dGUgdGhlIGJhc2UgYXJyYXkgb2Ygc3R5bGVzCi0gICAgcnVuTW9kZShj
bSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1bmN0aW9uKHR4dCwgc3R5bGUpIHtz
dC5wdXNoKHR4dCwgc3R5bGUpO30pOworICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgY20uZG9j
Lm1vZGUsIHN0YXRlLCBmdW5jdGlvbihlbmQsIHN0eWxlKSB7c3QucHVzaChlbmQsIHN0eWxlKTt9
KTsKIAogICAgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0eWxlIGFycmF5LgogICAgIGZvciAo
dmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIHsKLSAgICAgIHZh
ciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkgPSAxOwotICAgICAgcnVuTW9kZShj
bSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKHR4dCwgc3R5bGUpIHsK
LSAgICAgICAgdmFyIHN0YXJ0ID0gaSwgbGVuID0gdHh0Lmxlbmd0aDsKKyAgICAgIHZhciBvdmVy
bGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkgPSAxLCBhdCA9IDA7CisgICAgICBydW5Nb2Rl
KGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgdHJ1ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkg
eworICAgICAgICB2YXIgc3RhcnQgPSBpOwogICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRv
a2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXQK
LSAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgIHZhciBjdXIgPSBzdFtpXSwgbGVuXyA9
IGN1ci5sZW5ndGg7Ci0gICAgICAgICAgaWYgKGxlbl8gPD0gbGVuKSB7Ci0gICAgICAgICAgICBs
ZW4gLT0gbGVuXzsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3Quc3BsaWNlKGks
IDEsIGN1ci5zbGljZSgwLCBsZW4pLCBzdFtpKzFdLCBjdXIuc2xpY2UobGVuKSk7Ci0gICAgICAg
ICAgICBsZW4gPSAwOwotICAgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGF0IDwgZW5kKSB7Cisg
ICAgICAgICAgdmFyIGlfZW5kID0gc3RbaV07CisgICAgICAgICAgaWYgKGlfZW5kID4gZW5kKQor
ICAgICAgICAgICAgc3Quc3BsaWNlKGksIDEsIGVuZCwgc3RbaSsxXSwgaV9lbmQpOwogICAgICAg
ICAgIGkgKz0gMjsKKyAgICAgICAgICBhdCA9IE1hdGgubWluKGVuZCwgaV9lbmQpOwogICAgICAg
ICB9CiAgICAgICAgIGlmICghc3R5bGUpIHJldHVybjsKICAgICAgICAgaWYgKG92ZXJsYXkub3Bh
cXVlKSB7Ci0gICAgICAgICAgc3Quc3BsaWNlKHN0YXJ0LCBpIC0gc3RhcnQsIHR4dCwgc3R5bGUp
OworICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsIHN0eWxlKTsKICAg
ICAgICAgICBpID0gc3RhcnQgKyAyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGZvciAo
OyBzdGFydCA8IGk7IHN0YXJ0ICs9IDIpIHsKQEAgLTQwOTMsMzcgKzQyNDIsMzEgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBsaW5lQ29udGVu
dChjbSwgcmVhbExpbmUsIG1lYXN1cmUpIHsKLSAgICB2YXIgbWVyZ2VkLCBsaW5lID0gcmVhbExp
bmUsIGxpbmVCZWZvcmUsIHNhd0JlZm9yZSwgc2ltcGxlID0gdHJ1ZTsKLSAgICB3aGlsZSAobWVy
Z2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpIHsKLSAgICAgIHNpbXBsZSA9IGZhbHNl
OworICAgIHZhciBtZXJnZWQsIGxpbmUgPSByZWFsTGluZSwgZW1wdHkgPSB0cnVlOworICAgIHdo
aWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkKICAgICAgIGxpbmUgPSBn
ZXRMaW5lKGNtLmRvYywgbWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmUpOwotICAgICAgaWYgKCFsaW5l
QmVmb3JlKSBsaW5lQmVmb3JlID0gbGluZTsKLSAgICB9CiAKICAgICB2YXIgYnVpbGRlciA9IHtw
cmU6IGVsdCgicHJlIiksIGNvbDogMCwgcG9zOiAwLCBkaXNwbGF5OiAhbWVhc3VyZSwKLSAgICAg
ICAgICAgICAgICAgICBtZWFzdXJlOiBudWxsLCBhZGRlZE9uZTogZmFsc2UsIGNtOiBjbX07Cisg
ICAgICAgICAgICAgICAgICAgbWVhc3VyZTogbnVsbCwgbWVhc3VyZWRTb21ldGhpbmc6IGZhbHNl
LCBjbTogY219OwogICAgIGlmIChsaW5lLnRleHRDbGFzcykgYnVpbGRlci5wcmUuY2xhc3NOYW1l
ID0gbGluZS50ZXh0Q2xhc3M7CiAKICAgICBkbyB7CisgICAgICBpZiAobGluZS50ZXh0KSBlbXB0
eSA9IGZhbHNlOwogICAgICAgYnVpbGRlci5tZWFzdXJlID0gbGluZSA9PSByZWFsTGluZSAmJiBt
ZWFzdXJlOwogICAgICAgYnVpbGRlci5wb3MgPSAwOwogICAgICAgYnVpbGRlci5hZGRUb2tlbiA9
IGJ1aWxkZXIubWVhc3VyZSA/IGJ1aWxkVG9rZW5NZWFzdXJlIDogYnVpbGRUb2tlbjsKICAgICAg
IGlmICgoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpKQogICAg
ICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGJ1aWxkZXIuYWRk
VG9rZW4pOwotICAgICAgaWYgKG1lYXN1cmUgJiYgc2F3QmVmb3JlICYmIGxpbmUgIT0gcmVhbExp
bmUgJiYgIWJ1aWxkZXIuYWRkZWRPbmUpIHsKLSAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIu
cHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Ci0g
ICAgICAgIGJ1aWxkZXIuYWRkZWRPbmUgPSB0cnVlOwotICAgICAgfQogICAgICAgdmFyIG5leHQg
PSBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5l
KSk7Ci0gICAgICBzYXdCZWZvcmUgPSBsaW5lID09IGxpbmVCZWZvcmU7Ci0gICAgICBpZiAobmV4
dCkgewotICAgICAgICBsaW5lID0gZ2V0TGluZShjbS5kb2MsIG5leHQudG8ubGluZSk7Ci0gICAg
ICAgIHNpbXBsZSA9IGZhbHNlOworICAgICAgaWYgKG1lYXN1cmUgJiYgbGluZSA9PSByZWFsTGlu
ZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZykgeworICAgICAgICBtZWFzdXJlWzBdID0g
YnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1
cmUpKTsKKyAgICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7CiAgICAgICB9
CisgICAgICBpZiAobmV4dCkgbGluZSA9IGdldExpbmUoY20uZG9jLCBuZXh0LnRvLmxpbmUpOwog
ICAgIH0gd2hpbGUgKG5leHQpOwogCi0gICAgaWYgKG1lYXN1cmUgJiYgIWJ1aWxkZXIuYWRkZWRP
bmUpCi0gICAgICBtZWFzdXJlWzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoc2ltcGxlID8g
ZWx0KCJzcGFuIiwgIlx1MDBhMCIpIDogemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1
cmUpKTsKKyAgICBpZiAobWVhc3VyZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyAmJiAh
bWVhc3VyZVswXSkKKyAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChl
bXB0eSA/IGVsdCgic3BhbiIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxh
eS5tZWFzdXJlKSk7CiAgICAgaWYgKCFidWlsZGVyLnByZS5maXJzdENoaWxkICYmICFsaW5lSXNI
aWRkZW4oY20uZG9jLCByZWFsTGluZSkpCiAgICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUwMGEwIikpOwogCkBAIC00MTQ3LDcgKzQyOTAsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIHZhciB0b2tlblNw
ZWNpYWxDaGFycyA9IC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVG
RUZGXS9nOwotICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFy
dFN0eWxlLCBlbmRTdHlsZSkgeworICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQs
IHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpIHsKICAgICBpZiAoIXRleHQpIHJl
dHVybjsKICAgICBpZiAoIXRva2VuU3BlY2lhbENoYXJzLnRlc3QodGV4dCkpIHsKICAgICAgIGJ1
aWxkZXIuY29sICs9IHRleHQubGVuZ3RoOwpAQCAtNDE4MCw3ICs0MzIzLDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwg
IiI7CiAgICAgICBpZiAoc3RhcnRTdHlsZSkgZnVsbFN0eWxlICs9IHN0YXJ0U3R5bGU7CiAgICAg
ICBpZiAoZW5kU3R5bGUpIGZ1bGxTdHlsZSArPSBlbmRTdHlsZTsKLSAgICAgIHJldHVybiBidWls
ZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSkpOwor
ICAgICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUpOworICAg
ICAgaWYgKHRpdGxlKSB0b2tlbi50aXRsZSA9IHRpdGxlOworICAgICAgcmV0dXJuIGJ1aWxkZXIu
cHJlLmFwcGVuZENoaWxkKHRva2VuKTsKICAgICB9CiAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hp
bGQoY29udGVudCk7CiAgIH0KQEAgLTQxOTIsMTMgKzQzMzcsMTQgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoY2ggPj0gIlx1ZDgwMCIgJiYgY2ggPCAiXHVk
YmZmIiAmJiBpIDwgdGV4dC5sZW5ndGggLSAxKSB7CiAgICAgICAgIGNoID0gdGV4dC5zbGljZShp
LCBpICsgMik7CiAgICAgICAgICsraTsKLSAgICAgIH0gZWxzZSBpZiAoaSAmJiB3cmFwcGluZyAm
JgotICAgICAgICAgICAgICAgICBzcGFuQWZmZWN0c1dyYXBwaW5nLnRlc3QodGV4dC5zbGljZShp
IC0gMSwgaSArIDEpKSkgeworICAgICAgfSBlbHNlIGlmIChpICYmIHdyYXBwaW5nICYmIHNwYW5B
ZmZlY3RzV3JhcHBpbmcodGV4dCwgaSkpIHsKICAgICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hp
bGQoZWx0KCJ3YnIiKSk7CiAgICAgICB9CisgICAgICB2YXIgb2xkID0gYnVpbGRlci5tZWFzdXJl
W2J1aWxkZXIucG9zXTsKICAgICAgIHZhciBzcGFuID0gYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIu
cG9zXSA9CiAgICAgICAgIGJ1aWxkVG9rZW4oYnVpbGRlciwgY2gsIHN0eWxlLAogICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ICYmIHN0YXJ0U3R5bGUsIGkgPT0gdGV4dC5sZW5ndGggLSAxICYmIGVu
ZFN0eWxlKTsKKyAgICAgIGlmIChvbGQpIHNwYW4ubGVmdFNpZGUgPSBvbGQubGVmdFNpZGUgfHwg
b2xkOwogICAgICAgLy8gSW4gSUUgc2luZ2xlLXNwYWNlIG5vZGVzIHdyYXAgZGlmZmVyZW50bHkg
dGhhbiBzcGFjZXMKICAgICAgIC8vIGVtYmVkZGVkIGluIGxhcmdlciB0ZXh0IG5vZGVzLCBleGNl
cHQgd2hlbiBzZXQgdG8KICAgICAgIC8vIHdoaXRlLXNwYWNlOiBub3JtYWwgKGlzc3VlICMxMjY4
KS4KQEAgLTQyMDcsNyArNDM1Myw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAibm9ybWFsIjsKICAgICAgIGJ1aWxk
ZXIucG9zICs9IGNoLmxlbmd0aDsKICAgICB9Ci0gICAgaWYgKHRleHQubGVuZ3RoKSBidWlsZGVy
LmFkZGVkT25lID0gdHJ1ZTsKKyAgICBpZiAodGV4dC5sZW5ndGgpIGJ1aWxkZXIubWVhc3VyZWRT
b21ldGhpbmcgPSB0cnVlOwogICB9CiAKICAgZnVuY3Rpb24gYnVpbGRUb2tlblNwbGl0U3BhY2Vz
KGlubmVyKSB7CkBAIC00MjE3LDE4ICs0MzYzLDI3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgb3V0ICs9ICIgIjsKICAgICAgIHJldHVybiBvdXQ7CiAgICAgfQot
ICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5k
U3R5bGUpIHsKLSAgICAgIHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9
Lywgc3BsaXQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpOworICAgIHJldHVybiBmdW5j
dGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7
CisgICAgICByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS8sIHNwbGl0
KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7CiAgICAgfTsKICAgfQogCi0g
IGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXplLCB3aWRnZXQpIHsKKyAg
ZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3Jl
V2lkZ2V0KSB7CisgICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLnJlcGxh
Y2VkV2l0aDsKICAgICBpZiAod2lkZ2V0KSB7CiAgICAgICBpZiAoIWJ1aWxkZXIuZGlzcGxheSkg
d2lkZ2V0ID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsKICAgICAgIGJ1aWxkZXIucHJlLmFwcGVu
ZENoaWxkKHdpZGdldCk7Ci0gICAgICBpZiAoYnVpbGRlci5tZWFzdXJlICYmIHNpemUpIHsKLSAg
ICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IHdpZGdldDsKLSAgICAgICAgYnVp
bGRlci5hZGRlZE9uZSA9IHRydWU7CisgICAgICBpZiAoYnVpbGRlci5tZWFzdXJlKSB7CisgICAg
ICAgIGlmIChzaXplKSB7CisgICAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9
IHdpZGdldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgZWx0ID0gYnVpbGRlci5t
ZWFzdXJlW2J1aWxkZXIucG9zXSA9IHplcm9XaWR0aEVsZW1lbnQoYnVpbGRlci5jbS5kaXNwbGF5
Lm1lYXN1cmUpOworICAgICAgICAgIGlmIChtYXJrZXIudHlwZSAhPSAiYm9va21hcmsiIHx8IG1h
cmtlci5pbnNlcnRMZWZ0KQorICAgICAgICAgICAgYnVpbGRlci5wcmUuaW5zZXJ0QmVmb3JlKGVs
dCwgd2lkZ2V0KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZChlbHQpOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIubWVhc3VyZWRTb21ldGhp
bmcgPSB0cnVlOwogICAgICAgfQogICAgIH0KICAgICBidWlsZGVyLnBvcyArPSBzaXplOwpAQCAt
NDIzNywxOSArNDM5MiwxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
Ly8gT3V0cHV0cyBhIG51bWJlciBvZiBzcGFucyB0byBtYWtlIHVwIGEgbGluZSwgdGFraW5nIGhp
Z2hsaWdodGluZwogICAvLyBhbmQgbWFya2VkIHRleHQgaW50byBhY2NvdW50LgogICBmdW5jdGlv
biBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBzdHlsZXMpIHsKLSAgICB2YXIgc3Bh
bnMgPSBsaW5lLm1hcmtlZFNwYW5zOworICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMs
IGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKICAgICBpZiAoIXNwYW5zKSB7CiAgICAgICBm
b3IgKHZhciBpID0gMTsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrPTIpCi0gICAgICAgIGJ1aWxkZXIu
YWRkVG9rZW4oYnVpbGRlciwgc3R5bGVzW2ldLCBzdHlsZVRvQ2xhc3Moc3R5bGVzW2krMV0pKTsK
KyAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9
IHN0eWxlc1tpXSksIHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsxXSkpOwogICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHZhciBhbGxUZXh0ID0gbGluZS50ZXh0LCBsZW4gPSBhbGxUZXh0Lmxlbmd0
aDsKLSAgICB2YXIgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwgc3R5bGU7Ci0gICAgdmFyIG5l
eHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRTdHlsZSwgc3BhblN0YXJ0U3R5bGUsIGNv
bGxhcHNlZDsKKyAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0
ZXh0ID0gIiIsIHN0eWxlOworICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBzcGFu
RW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFwc2VkOwogICAgIGZvciAoOzsp
IHsKICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBtYXJr
ZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxl
ID0gIiI7CisgICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxl
ID0gdGl0bGUgPSAiIjsKICAgICAgICAgY29sbGFwc2VkID0gbnVsbDsgbmV4dENoYW5nZSA9IElu
ZmluaXR5OwogICAgICAgICB2YXIgZm91bmRCb29rbWFyayA9IG51bGw7CiAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2opIHsKQEAgLTQyNTksMTcgKzQ0MTMsMTcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBpZiAobS5j
bGFzc05hbWUpIHNwYW5TdHlsZSArPSAiICIgKyBtLmNsYXNzTmFtZTsKICAgICAgICAgICAgIGlm
IChtLnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiAr
IG0uc3RhcnRTdHlsZTsKICAgICAgICAgICAgIGlmIChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5l
eHRDaGFuZ2UpIHNwYW5FbmRTdHlsZSArPSAiICIgKyBtLmVuZFN0eWxlOwotICAgICAgICAgICAg
aWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5tYXJrZXIud2lkdGgg
PCBtLndpZHRoKSkKKyAgICAgICAgICAgIGlmIChtLnRpdGxlICYmICF0aXRsZSkgdGl0bGUgPSBt
LnRpdGxlOworICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNv
bGxhcHNlZC5tYXJrZXIuc2l6ZSA8IG0uc2l6ZSkpCiAgICAgICAgICAgICAgIGNvbGxhcHNlZCA9
IHNwOwogICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4g
c3AuZnJvbSkgewogICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb207CiAgICAgICAgICAg
fQotICAgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2ttYXJrIiAmJiBzcC5mcm9tID09IHBvcyAm
JiBtLnJlcGxhY2VkV2l0aCkKLSAgICAgICAgICAgIGZvdW5kQm9va21hcmsgPSBtLnJlcGxhY2Vk
V2l0aDsKKyAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBw
b3MgJiYgbS5yZXBsYWNlZFdpdGgpIGZvdW5kQm9va21hcmsgPSBtOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5mcm9tIHx8IDApID09IHBvcykgewogICAg
ICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAoY29sbGFwc2VkLnRvID09IG51bGwg
PyBsZW4gOiBjb2xsYXBzZWQudG8pIC0gcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xsYXBzZWQuZnJvbSAhPSBudWxsICYmIGNvbGxhcHNlZC5tYXJrZXIucmVwbGFjZWRXaXRo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLm1hcmtlciwgY29sbGFw
c2VkLmZyb20gPT0gbnVsbCk7CiAgICAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBudWxsKSBy
ZXR1cm4gY29sbGFwc2VkLm1hcmtlci5maW5kKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZv
dW5kQm9va21hcmsgJiYgIWNvbGxhcHNlZCkgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIDAs
IGZvdW5kQm9va21hcmspOwpAQCAtNDI4MywxMyArNDQzNywxNCBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBpZiAoIWNvbGxhcHNlZCkgewogICAgICAgICAg
ICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3Mp
IDogdGV4dDsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0
LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBu
ZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hhbmdl
ID8gc3BhbkVuZFN0eWxlIDogIiIsIHRpdGxlKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYg
KGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2UodXB0byAtIHBvcyk7IHBvcyA9IHVwdG87
IGJyZWFrO30KICAgICAgICAgICBwb3MgPSBlbmQ7CiAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUg
PSAiIjsKICAgICAgICAgfQotICAgICAgICB0ZXh0ID0gc3R5bGVzW2krK107IHN0eWxlID0gc3R5
bGVUb0NsYXNzKHN0eWxlc1tpKytdKTsKKyAgICAgICAgdGV4dCA9IGFsbFRleHQuc2xpY2UoYXQs
IGF0ID0gc3R5bGVzW2krK10pOworICAgICAgICBzdHlsZSA9IHN0eWxlVG9DbGFzcyhzdHlsZXNb
aSsrXSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC00MzEyLDcgKzQ0NjcsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5l
IHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAgIC8vIHN1cmUgbGluZSBv
YmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by4KICAgICAgIGZvciAodmFy
IGkgPSAwLCBlID0gdGV4dC5sZW5ndGggLSAxLCBhZGRlZCA9IFtdOyBpIDwgZTsgKytpKQotICAg
ICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhl
aWdodCkpOworICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkp
LCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0
LCBsYXN0U3BhbnMpOwogICAgICAgaWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5s
aW5lcyk7CiAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRk
ZWQpOwpAQCAtNDMyMSw4ICs0NDc2LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZy
b20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFu
cyk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHZhciBhZGRlZCA9IFtdLCBpID0gMSwg
ZSA9IHRleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKLSAgICAgICAgICBhZGRlZC5wdXNoKG1h
a2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwotICAgICAgICBh
ZGRlZC5wdXNoKG1ha2VMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICAgICAgYWRkZWQucHVzaChuZXcg
TGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgYWRk
ZWQucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwg
bGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBm
aXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsK
ICAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgICB9CkBAIC00
MzMzLDcgKzQ0ODgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4
dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxh
c3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpOwogICAgICAgZm9yICh2YXIgaSA9
IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCi0gICAgICAg
IGFkZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0
KSk7CisgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVz
dGltYXRlSGVpZ2h0KSk7CiAgICAgICBpZiAobmxpbmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxp
bmUgKyAxLCBubGluZXMgLSAxKTsKICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRk
ZWQpOwogICAgIH0KQEAgLTQ0NzYsMTEgKzQ2MzEsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvYykpIHJldHVybiBuZXcg
RG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSk7CiAgICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSBm
aXJzdExpbmUgPSAwOwogCi0gICAgQnJhbmNoQ2h1bmsuY2FsbCh0aGlzLCBbbmV3IExlYWZDaHVu
ayhbbWFrZUxpbmUoIiIsIG51bGwpXSldKTsKKyAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtu
ZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIiwgbnVsbCldKV0pOwogICAgIHRoaXMuZmlyc3QgPSBm
aXJzdExpbmU7CiAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbExlZnQgPSAwOwogICAg
IHRoaXMuY2FudEVkaXQgPSBmYWxzZTsKICAgICB0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgp
OworICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTsKICAgICB0aGlzLmZyb250aWVyID0gZmly
c3RMaW5lOwogICAgIHZhciBzdGFydCA9IFBvcyhmaXJzdExpbmUsIDApOwogICAgIHRoaXMuc2Vs
ID0ge2Zyb206IHN0YXJ0LCB0bzogc3RhcnQsIGhlYWQ6IHN0YXJ0LCBhbmNob3I6IHN0YXJ0LCBz
aGlmdDogZmFsc2UsIGV4dGVuZDogZmFsc2UsIGdvYWxDb2x1bW46IG51bGx9OwpAQCAtNDQ5Miw2
ICs0NjQ4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH07CiAKICAg
RG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHsKKyAgICBj
b25zdHJ1Y3RvcjogRG9jLAogICAgIGl0ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkgewogICAg
ICAgaWYgKG9wKSB0aGlzLml0ZXJOKGZyb20gLSB0aGlzLmZpcnN0LCB0byAtIGZyb20sIG9wKTsK
ICAgICAgIGVsc2UgdGhpcy5pdGVyTih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXpl
LCBmcm9tKTsKQEAgLTQ1MzksNiArNDY5NiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZSh0
aGlzLCBsaW5lKSkgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSk7fSwKICAgICBnZXRMaW5lTnVt
YmVyOiBmdW5jdGlvbihsaW5lKSB7cmV0dXJuIGxpbmVObyhsaW5lKTt9LAogCisgICAgZ2V0TGlu
ZUhhbmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlvbihsaW5lKSB7CisgICAgICBpZiAodHlwZW9mIGxp
bmUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKHRoaXMsIGxpbmUpOworICAgICAgcmV0dXJu
IHZpc3VhbExpbmUodGhpcywgbGluZSk7CisgICAgfSwKKwogICAgIGxpbmVDb3VudDogZnVuY3Rp
b24oKSB7cmV0dXJuIHRoaXMuc2l6ZTt9LAogICAgIGZpcnN0TGluZTogZnVuY3Rpb24oKSB7cmV0
dXJuIHRoaXMuZmlyc3Q7fSwKICAgICBsYXN0TGluZTogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMu
Zmlyc3QgKyB0aGlzLnNpemUgLSAxO30sCkBAIC00NTgwLDIwICs0NzQyLDI1IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3Rvcnk7
CiAgICAgICByZXR1cm4ge3VuZG86IGhpc3QuZG9uZS5sZW5ndGgsIHJlZG86IGhpc3QudW5kb25l
Lmxlbmd0aH07CiAgICAgfSwKLSAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlz
dG9yeSA9IG1ha2VIaXN0b3J5KCk7fSwKKyAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3Ro
aXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTt9LAog
CiAgICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuaGlzdG9yeS5kaXJ0eUNv
dW50ZXIgPSAwOworICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVy
YXRpb24oKTsKKyAgICB9LAorICAgIGNoYW5nZUdlbmVyYXRpb246IGZ1bmN0aW9uKCkgewogICAg
ICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsK
KyAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbjsKKyAgICB9LAorICAgIGlzQ2xl
YW46IGZ1bmN0aW9uIChnZW4pIHsKKyAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlv
biA9PSAoZ2VuIHx8IHRoaXMuY2xlYW5HZW5lcmF0aW9uKTsKICAgICB9LAotICAgIGlzQ2xlYW46
IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5oaXN0b3J5LmRpcnR5Q291bnRlciA9PSAwO30sCiAK
ICAgICBnZXRIaXN0b3J5OiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7ZG9uZTogY29weUhp
c3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSksCiAgICAgICAgICAgICAgIHVuZG9uZTogY29w
eUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lKX07CiAgICAgfSwKICAgICBzZXRIaXN0
b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkgewotICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3Rvcnkg
PSBtYWtlSGlzdG9yeSgpOworICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBtYWtlSGlz
dG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7CiAgICAgICBoaXN0LmRvbmUgPSBoaXN0
RGF0YS5kb25lLnNsaWNlKDApOwogICAgICAgaGlzdC51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmUu
c2xpY2UoMCk7CiAgICAgfSwKQEAgLTQ3MDQsNiArNDg3MSw4IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiBtZXRob2Qu
YXBwbHkodGhpcy5kb2MsIGFyZ3VtZW50cyk7fTsKICAgICB9KShEb2MucHJvdG90eXBlW3Byb3Bd
KTsKIAorICBldmVudE1peGluKERvYyk7CisKICAgZnVuY3Rpb24gbGlua2VkRG9jcyhkb2MsIGYs
IHNoYXJlZEhpc3RPbmx5KSB7CiAgICAgZnVuY3Rpb24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hh
cmVkSGlzdCkgewogICAgICAgaWYgKGRvYy5saW5rZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgZG9j
LmxpbmtlZC5sZW5ndGg7ICsraSkgewpAQCAtNDgyMyw3ICs0OTkyLDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gSElTVE9SWQogCi0gIGZ1bmN0aW9uIG1ha2VI
aXN0b3J5KCkgeworICBmdW5jdGlvbiBtYWtlSGlzdG9yeShzdGFydEdlbikgewogICAgIHJldHVy
biB7CiAgICAgICAvLyBBcnJheXMgb2YgaGlzdG9yeSBldmVudHMuIERvaW5nIHNvbWV0aGluZyBh
ZGRzIGFuIGV2ZW50IHRvCiAgICAgICAvLyBkb25lIGFuZCBjbGVhcnMgdW5kby4gVW5kb2luZyBt
b3ZlcyBldmVudHMgZnJvbSBkb25lIHRvCkBAIC00ODMzLDcgKzUwMDIsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIC8vIGV2ZW50CiAgICAgICBsYXN0VGltZTog
MCwgbGFzdE9wOiBudWxsLCBsYXN0T3JpZ2luOiBudWxsLAogICAgICAgLy8gVXNlZCBieSB0aGUg
aXNDbGVhbigpIG1ldGhvZAotICAgICAgZGlydHlDb3VudGVyOiAwCisgICAgICBnZW5lcmF0aW9u
OiBzdGFydEdlbiB8fCAxLCBtYXhHZW5lcmF0aW9uOiBzdGFydEdlbiB8fCAxCiAgICAgfTsKICAg
fQogCkBAIC00ODQ3LDcgKzUwMTYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgfQogCiAgIGZ1bmN0aW9uIGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdl
KSB7Ci0gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VF
bmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8p
fTsKKyAgICB2YXIgZnJvbSA9IHsgbGluZTogY2hhbmdlLmZyb20ubGluZSwgY2g6IGNoYW5nZS5m
cm9tLmNoIH07CisgICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogZnJvbSwgdG86IGNoYW5nZUVu
ZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9
OwogICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5l
LCBjaGFuZ2UudG8ubGluZSArIDEpOwogICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2Mp
IHthdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hh
bmdlLnRvLmxpbmUgKyAxKTt9LCB0cnVlKTsKICAgICByZXR1cm4gaGlzdENoYW5nZTsKQEAgLTQ4
NjEsNyArNTAzMSw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlm
IChjdXIgJiYKICAgICAgICAgKGhpc3QubGFzdE9wID09IG9wSWQgfHwKICAgICAgICAgIGhpc3Qu
bGFzdE9yaWdpbiA9PSBjaGFuZ2Uub3JpZ2luICYmIGNoYW5nZS5vcmlnaW4gJiYKLSAgICAgICAg
ICgoY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIisiICYmIGhpc3QubGFzdFRpbWUgPiB0aW1l
IC0gNjAwKSB8fCBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSkgeworICAgICAgICAg
KChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdFRp
bWUgPiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8CisgICAgICAg
ICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIioiKSkpIHsKICAgICAgIC8vIE1lcmdlIHRo
aXMgY2hhbmdlIGludG8gdGhlIGxhc3QgZXZlbnQKICAgICAgIHZhciBsYXN0ID0gbHN0KGN1ci5j
aGFuZ2VzKTsKICAgICAgIGlmIChwb3NFcShjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSAmJiBwb3NF
cShjaGFuZ2UuZnJvbSwgbGFzdC50bykpIHsKQEAgLTQ4NzYsMTcgKzUwNDcsMTMgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIENhbiBu
b3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBldmVudC4KICAgICAgIGN1ciA9IHtjaGFuZ2VzOiBb
aGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpXSwKKyAgICAgICAgICAgICBnZW5l
cmF0aW9uOiBoaXN0LmdlbmVyYXRpb24sCiAgICAgICAgICAgICAgYW5jaG9yQmVmb3JlOiBkb2Mu
c2VsLmFuY2hvciwgaGVhZEJlZm9yZTogZG9jLnNlbC5oZWFkLAogICAgICAgICAgICAgIGFuY2hv
ckFmdGVyOiBzZWxBZnRlci5hbmNob3IsIGhlYWRBZnRlcjogc2VsQWZ0ZXIuaGVhZH07CiAgICAg
ICBoaXN0LmRvbmUucHVzaChjdXIpOworICAgICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1h
eEdlbmVyYXRpb247CiAgICAgICB3aGlsZSAoaGlzdC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0Rl
cHRoKQogICAgICAgICBoaXN0LmRvbmUuc2hpZnQoKTsKLSAgICAgIGlmIChoaXN0LmRpcnR5Q291
bnRlciA8IDApCi0gICAgICAgIC8vIFRoZSB1c2VyIGhhcyBtYWRlIGEgY2hhbmdlIGFmdGVyIHVu
ZG9pbmcgcGFzdCB0aGUgbGFzdCBjbGVhbiBzdGF0ZS4KLSAgICAgICAgLy8gV2UgY2FuIG5ldmVy
IGdldCBiYWNrIHRvIGEgY2xlYW4gc3RhdGUgbm93IHVudGlsIG1hcmtDbGVhbigpIGlzIGNhbGxl
ZC4KLSAgICAgICAgaGlzdC5kaXJ0eUNvdW50ZXIgPSBOYU47Ci0gICAgICBlbHNlCi0gICAgICAg
IGhpc3QuZGlydHlDb3VudGVyKys7CiAgICAgfQogICAgIGhpc3QubGFzdFRpbWUgPSB0aW1lOwog
ICAgIGhpc3QubGFzdE9wID0gb3BJZDsKQEAgLTUwMDEsNiArNTE2OCw5IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9w
UHJvcGFnYXRpb24oKTsKICAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICAgfQorICBm
dW5jdGlvbiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkgeworICAgIHJldHVybiBlLmRlZmF1bHRQcmV2
ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFs
c2U7CisgIH0KICAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0
b3BQcm9wYWdhdGlvbihlKTt9CiAgIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wOwogICBDb2Rl
TWlycm9yLmVfcHJldmVudERlZmF1bHQgPSBlX3ByZXZlbnREZWZhdWx0OwpAQCAtNTA2Nyw2ICs1
MjM3LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGVsYXll
ZENhbGxiYWNrcy5wdXNoKGJuZChhcnJbaV0pKTsKICAgfQogCisgIGZ1bmN0aW9uIHNpZ25hbERP
TUV2ZW50KGNtLCBlLCBvdmVycmlkZSkgeworICAgIHNpZ25hbChjbSwgb3ZlcnJpZGUgfHwgZS50
eXBlLCBjbSwgZSk7CisgICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsKKyAgfQorCiAg
IGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkgewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAg
ICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwpAQCAtNTA4MSw2ICs1MjU2LDExIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIENvZGVNaXJyb3Iub24gPSBv
bjsgQ29kZU1pcnJvci5vZmYgPSBvZmY7IENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsOwogCisg
IGZ1bmN0aW9uIGV2ZW50TWl4aW4oY3RvcikgeworICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVu
Y3Rpb24odHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO307CisgICAgY3Rvci5wcm90b3R5cGUu
b2ZmID0gZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9OworICB9CisKICAg
Ly8gTUlTQyBVVElMSVRJRVMKIAogICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9s
bGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgpAQCAtNTEyMSw3ICs1MzAxLDExIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpb3MpIHsgLy8gTW9iaWxl
IFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCiAg
ICAgICBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0g
bm9kZS52YWx1ZS5sZW5ndGg7Ci0gICAgfSBlbHNlIG5vZGUuc2VsZWN0KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnMKKyAgICAgIHRyeSB7
IG5vZGUuc2VsZWN0KCk7IH0KKyAgICAgIGNhdGNoKF9lKSB7fQorICAgIH0KICAgfQogCiAgIGZ1
bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7CkBAIC01MTU1LDcgKzUzMzksNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oKXty
ZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTt9OwogICB9CiAKLSAgdmFyIG5vbkFTQ0lJU2luZ2xl
Q2FzZVdvcmRDaGFyID0gL1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVc
dTRlMDAtXHU5ZmNjXS87CisgIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUz
MDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1c
dWQ3YWZdLzsKICAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCkgewogICAgIHJldHVybiAvXHcvLnRl
c3QoY2gpIHx8IGNoID4gIlx4ODAiICYmCiAgICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50
b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKTsKQEAg
LTUyMTYsMTMgKzU0MDAsMjYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IC8vIHdvcmQgd3JhcHBpbmcgYmV0d2VlbiBjZXJ0YWluIGNoYXJhY3RlcnMgKm9ubHkqIGlmIGEg
bmV3IGlubGluZQogICAvLyBlbGVtZW50IGlzIHN0YXJ0ZWQgYmV0d2VlbiB0aGVtLiBUaGlzIG1h
a2VzIGl0IGhhcmQgdG8gcmVsaWFibHkKICAgLy8gbWVhc3VyZSB0aGUgcG9zaXRpb24gb2YgdGhp
bmdzLCBzaW5jZSB0aGF0IHJlcXVpcmVzIGluc2VydGluZyBhbgotICAvLyBleHRyYSBzcGFuLiBU
aGlzIHRlcnJpYmx5IGZyYWdpbGUgc2V0IG9mIHJlZ2V4cHMgbWF0Y2hlcyB0aGUKKyAgLy8gZXh0
cmEgc3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiB0ZXN0cyBtYXRjaGVzIHRoZQog
ICAvLyBjaGFyYWN0ZXIgY29tYmluYXRpb25zIHRoYXQgc3VmZmVyIGZyb20gdGhpcyBwaGVub21l
bm9uIG9uIHRoZQogICAvLyB2YXJpb3VzIGJyb3dzZXJzLgotICB2YXIgc3BhbkFmZmVjdHNXcmFw
cGluZyA9IC9eJC87IC8vIFdvbid0IG1hdGNoIGFueSB0d28tY2hhcmFjdGVyIHN0cmluZwotICBp
ZiAoZ2Vja28pIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvJCcvOwotICBlbHNlIGlmIChzYWZhcmkg
JiYgIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkg
c3BhbkFmZmVjdHNXcmFwcGluZyA9IC9cLVteIFwtP118XD9bXiAhJ1wiXCksLlwtXC86O1w/XF1c
fV0vOwotICBlbHNlIGlmICh3ZWJraXQpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvW34hIyUmKik9
K31cXXxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5dfFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF0v
OworICBmdW5jdGlvbiBzcGFuQWZmZWN0c1dyYXBwaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
aWYgKGdlY2tvKSAvLyBPbmx5IGZvciAiJCciCisgICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1
bmN0aW9uKHN0ciwgaSkgeworICAgICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSAz
NiAmJiBzdHIuY2hhckNvZGVBdChpKSA9PSAzOTsKKyAgICB9OworICBlbHNlIGlmIChzYWZhcmkg
JiYgIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkK
KyAgICBzcGFuQWZmZWN0c1dyYXBwaW5nID0gZnVuY3Rpb24oc3RyLCBpKSB7CisgICAgICByZXR1
cm4gL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3Qoc3RyLnNsaWNl
KGkgLSAxLCBpICsgMSkpOworICAgIH07CisgIGVsc2UgaWYgKHdlYmtpdCAmJiAhL0Nocm9tZVwv
KD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCisgICAg
c3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgeworICAgICAgaWYgKGkgPiAx
ICYmIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSA0NSkgeworICAgICAgICBpZiAoL1x3Ly50ZXN0
KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW15cLT9cLl0vLnRlc3Qoc3RyLmNoYXJBdChpKSkpIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoaSA+IDIgJiYgL1tcZFwuLF0vLnRlc3Qoc3RyLmNoYXJB
dChpIC0gMikpICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gZmFsc2U7
CisgICAgICB9CisgICAgICByZXR1cm4gL1t+ISMlJiopPSt9XF18XCJcLj4sOjtdWyh7WzxdfC1b
XlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZb
XHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKKyAg
ICB9OwogCiAgIHZhciBrbm93blNjcm9sbGJhcldpZHRoOwogICBmdW5jdGlvbiBzY3JvbGxiYXJX
aWR0aChtZWFzdXJlKSB7CkBAIC01MzA3LDExICs1NTA0LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGl0ZXJhdGVCaWRpU2VjdGlvbnMob3JkZXIs
IGZyb20sIHRvLCBmKSB7CiAgICAgaWYgKCFvcmRlcikgcmV0dXJuIGYoZnJvbSwgdG8sICJsdHIi
KTsKKyAgICB2YXIgZm91bmQgPSBmYWxzZTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVy
Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOwotICAgICAgaWYgKHBh
cnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9
PSBmcm9tKQorICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZy
b20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKSB7CiAgICAgICAgIGYoTWF0aC5tYXgocGFydC5m
cm9tLCBmcm9tKSwgTWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyAicnRs
IiA6ICJsdHIiKTsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgfQogICAgIH0KKyAgICBp
ZiAoIWZvdW5kKSBmKGZyb20sIHRvLCAibHRyIik7CiAgIH0KIAogICBmdW5jdGlvbiBiaWRpTGVm
dChwYXJ0KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH0K
QEAgLTUzNDEsNiArNTU0Miw0MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7CiAgIH0KIAorICBmdW5jdGlvbiBjb21wYXJlQmlk
aUxldmVsKG9yZGVyLCBhLCBiKSB7CisgICAgdmFyIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsK
KyAgICBpZiAoYSA9PSBsaW5lZGlyKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYiA9PSBsaW5lZGly
KSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEgPCBiOworICB9CisgIHZhciBiaWRpT3RoZXI7
CisgIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgeworICAgIGZvciAodmFyIGkg
PSAwLCBmb3VuZDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgY3VyID0gb3Jk
ZXJbaV07CisgICAgICBpZiAoY3VyLmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSB7IGJpZGlP
dGhlciA9IG51bGw7IHJldHVybiBpOyB9CisgICAgICBpZiAoY3VyLmZyb20gPT0gcG9zIHx8IGN1
ci50byA9PSBwb3MpIHsKKyAgICAgICAgaWYgKGZvdW5kID09IG51bGwpIHsKKyAgICAgICAgICBm
b3VuZCA9IGk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZlbChvcmRlciwgY3Vy
LmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7CisgICAgICAgICAgYmlkaU90aGVyID0gZm91
bmQ7CisgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYmlk
aU90aGVyID0gaTsKKyAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisgICAgYmlkaU90aGVyID0gbnVsbDsKKyAgICByZXR1cm4gZm91bmQ7CisgIH0KKwor
ICBmdW5jdGlvbiBtb3ZlSW5MaW5lKGxpbmUsIHBvcywgZGlyLCBieVVuaXQpIHsKKyAgICBpZiAo
IWJ5VW5pdCkgcmV0dXJuIHBvcyArIGRpcjsKKyAgICBkbyBwb3MgKz0gZGlyOworICAgIHdoaWxl
IChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQocG9zKSkp
OworICAgIHJldHVybiBwb3M7CisgIH0KKwogICAvLyBUaGlzIGlzIHNvbWV3aGF0IGludm9sdmVk
LiBJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbW92ZQogICAvLyAndmlzdWFsbHknIHRocm91Z2gg
YmktZGlyZWN0aW9uYWwgdGV4dCAtLSBpLmUuLCBwcmVzc2luZyBsZWZ0CiAgIC8vIHNob3VsZCBt
YWtlIHRoZSBjdXJzb3IgZ28gbGVmdCwgZXZlbiB3aGVuIGluIFJUTCB0ZXh0LiBUaGUKQEAgLTUz
NTAsMzcgKzU1ODUsMjQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1
bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKICAgICB2YXIg
YmlkaSA9IGdldE9yZGVyKGxpbmUpOwogICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVMb2dpY2Fs
bHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKLSAgICB2YXIgbW92ZU9uZVVuaXQgPSBieVVu
aXQgPyBmdW5jdGlvbihwb3MsIGRpcikgewotICAgICAgZG8gcG9zICs9IGRpcjsKLSAgICAgIHdo
aWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQocG9z
KSkpOwotICAgICAgcmV0dXJuIHBvczsKLSAgICB9IDogZnVuY3Rpb24ocG9zLCBkaXIpIHsgcmV0
dXJuIHBvcyArIGRpcjsgfTsKLSAgICB2YXIgbGluZWRpciA9IGJpZGlbMF0ubGV2ZWw7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBiaWRpLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgcGFydCA9
IGJpZGlbaV0sIHN0aWNreSA9IHBhcnQubGV2ZWwgJSAyID09IGxpbmVkaXI7Ci0gICAgICBpZiAo
KHBhcnQuZnJvbSA8IHN0YXJ0ICYmIHBhcnQudG8gPiBzdGFydCkgfHwKLSAgICAgICAgICAoc3Rp
Y2t5ICYmIChwYXJ0LmZyb20gPT0gc3RhcnQgfHwgcGFydC50byA9PSBzdGFydCkpKSBicmVhazsK
LSAgICB9Ci0gICAgdmFyIHRhcmdldCA9IG1vdmVPbmVVbml0KHN0YXJ0LCBwYXJ0LmxldmVsICUg
MiA/IC1kaXIgOiBkaXIpOwotCi0gICAgd2hpbGUgKHRhcmdldCAhPSBudWxsKSB7Ci0gICAgICBp
ZiAocGFydC5sZXZlbCAlIDIgPT0gbGluZWRpcikgewotICAgICAgICBpZiAodGFyZ2V0IDwgcGFy
dC5mcm9tIHx8IHRhcmdldCA+IHBhcnQudG8pIHsKLSAgICAgICAgICBwYXJ0ID0gYmlkaVtpICs9
IGRpcl07Ci0gICAgICAgICAgdGFyZ2V0ID0gcGFydCAmJiAoZGlyID4gMCA9PSBwYXJ0LmxldmVs
ICUgMiA/IG1vdmVPbmVVbml0KHBhcnQudG8sIC0xKSA6IG1vdmVPbmVVbml0KHBhcnQuZnJvbSwg
MSkpOwotICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgdmFyIHBvcyA9IGdldEJpZGlQYXJ0QXQo
YmlkaSwgc3RhcnQpLCBwYXJ0ID0gYmlkaVtwb3NdOworICAgIHZhciB0YXJnZXQgPSBtb3ZlSW5M
aW5lKGxpbmUsIHN0YXJ0LCBwYXJ0LmxldmVsICUgMiA/IC1kaXIgOiBkaXIsIGJ5VW5pdCk7CisK
KyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAodGFyZ2V0ID4gcGFydC5mcm9tICYmIHRhcmdldCA8
IHBhcnQudG8pIHJldHVybiB0YXJnZXQ7CisgICAgICBpZiAodGFyZ2V0ID09IHBhcnQuZnJvbSB8
fCB0YXJnZXQgPT0gcGFydC50bykgeworICAgICAgICBpZiAoZ2V0QmlkaVBhcnRBdChiaWRpLCB0
YXJnZXQpID09IHBvcykgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgcGFydCA9IGJpZGlbcG9zICs9
IGRpcl07CisgICAgICAgIHJldHVybiAoZGlyID4gMCkgPT0gcGFydC5sZXZlbCAlIDIgPyBwYXJ0
LnRvIDogcGFydC5mcm9tOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBi
aWRpTGVmdChwYXJ0KSkgewotICAgICAgICAgIHBhcnQgPSBiaWRpWy0taV07Ci0gICAgICAgICAg
dGFyZ2V0ID0gcGFydCAmJiBiaWRpUmlnaHQocGFydCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IGJpZGlSaWdodChwYXJ0KSkgewotICAgICAgICAgIHBhcnQgPSBiaWRpWysraV07Ci0g
ICAgICAgICAgdGFyZ2V0ID0gcGFydCAmJiBiaWRpTGVmdChwYXJ0KTsKLSAgICAgICAgfSBlbHNl
IGJyZWFrOworICAgICAgICBwYXJ0ID0gYmlkaVtwb3MgKz0gZGlyXTsKKyAgICAgICAgaWYgKCFw
YXJ0KSByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUg
MikKKyAgICAgICAgICB0YXJnZXQgPSBtb3ZlSW5MaW5lKGxpbmUsIHBhcnQudG8sIC0xLCBieVVu
aXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBw
YXJ0LmZyb20sIDEsIGJ5VW5pdCk7CiAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIHRhcmdl
dCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7CiAgIH0K
IAogICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewpA
QCAtNTU1Miw3ICs1Nzc0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjExICsiOworICBDb2Rl
TWlycm9yLnZlcnNpb24gPSAiMy4xNC4xIjsKIAogICByZXR1cm4gQ29kZU1pcnJvcjsKIH0pKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Y3NzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5q
cwppbmRleCAxZWY3MmI1MTdkZTQ1OTNlNDcwOWQwMjRmZTFhM2U3M2Y5ZTJlYTg0Li5iNTJlNzg3
YTcwYWIwNzY4Y2U4YWEzM2RjZjA0ZWExM2QxMmNkNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jc3MuanMKQEAgLTEwMyw3ICsxMDMsOCBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgICByZXR1
cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgIGJhc2VJbmRlbnQ6IGJhc2Ug
fHwgMCwKLSAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKKyAgICAgICAgICAgICAgc3RhY2s6IFtd
LAorICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGx9OwogICAgIH0sCiAKICAgICB0b2tlbjog
ZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewpAQCAtMTYzLDI4ICsxNjQsMjkgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsK
ICAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgIGlmICh0eXBlID09ICJ2
YXJpYWJsZS1kZWZpbml0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIpOwot
ICAgICAgICByZXR1cm4gInZhcmlhYmxlLTIiOworICAgICAgICByZXR1cm4gc3RhdGUubGFzdFRv
a2VuID0gInZhcmlhYmxlLTIiOwogICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PSAicHJvcGVydHki
KSB7Ci0gICAgICAgIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIil7Ci0gICAgICAgICAg
aWYgKHZhbHVlS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgdmFyIHdvcmQg
PSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGlmIChjb250ZXh0ID09
ICJwcm9wZXJ0eVZhbHVlIikgeworICAgICAgICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blBy
b3BlcnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJzdHJpbmctMiI7Ci0gICAgICAg
ICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAg
ICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7CiAgICAg
ICAgICAgICBzdHlsZSA9ICJrZXl3b3JkIjsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KGNvbnRleHQgPT0gInJ1bGUiKSB7Ci0gICAgICAgICAgaWYgKCFwcm9wZXJ0eUtleXdvcmRzW3N0
cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgaWYgKCFwcm9wZXJ0eUtleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSArPSAiIGVycm9yIjsKICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiYmxvY2siKSB7CiAgICAgICAg
ICAgLy8gaWYgYSB2YWx1ZSBpcyBwcmVzZW50IGluIGJvdGggcHJvcGVydHksIHZhbHVlLCBvciBj
b2xvciwgdGhlIG9yZGVyCiAgICAgICAgICAgLy8gb2YgcHJlZmVyZW5jZSBpcyBwcm9wZXJ0eSAt
PiBjb2xvciAtPiB2YWx1ZQotICAgICAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5j
dXJyZW50KCldKSB7CisgICAgICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVy
dHkod29yZCkpIHsKICAgICAgICAgICAgIHN0eWxlID0gInByb3BlcnR5IjsKLSAgICAgICAgICB9
IGVsc2UgaWYgKGNvbG9yS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICB9
IGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAg
ICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jk
c1tzdHJlYW0uY3VycmVudCgpXSkgeworICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jk
cy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAic3RyaW5nLTIi
OwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJ0YWciOwpAQCAtMTk0
LDQyICsxOTYsNDIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAi
QG1lZGlhIikgewogICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFtLmN1cnJlbnQoKV0p
IHsKICAgICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3duIGF0dHJpYnV0ZQot
ICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC9pLnRlc3Qoc3RyZWFtLmN1cnJlbnQo
KSkpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8bm90KSQvLnRlc3Qod29yZCkpIHsK
ICAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAoc3Ry
ZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7CisgICAgICAgICAgfSBlbHNl
IGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJh
bmQiIGlzIG9ubHkgYWxsb3dlZCBpbiBAbWVkaWFUeXBlCi0gICAgICAgICAgfSBlbHNlIGlmIChh
dE1lZGlhRmVhdHVyZXNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICB9IGVsc2UgaWYg
KGF0TWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewogICAgICAgICAgICAgc3R5
bGUgPSAiZXJyb3IiOyAvLyBLbm93biBwcm9wZXJ0eSwgc2hvdWxkIGJlIGluIEBtZWRpYVR5cGUo
CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFVua25vd24sIGV4cGVjdGluZyBr
ZXl3b3JkIG9yIGF0dHJpYnV0ZSwgYXNzdW1pbmcgYXR0cmlidXRlCiAgICAgICAgICAgICBzdHls
ZSA9ICJhdHRyaWJ1dGUgZXJyb3IiOwogICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChj
b250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3Ry
ZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3Bl
cnR5KHdvcmQpKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgICAg
IH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7Cisg
ICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHlsZSA9
ICJvcGVyYXRvciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVzdChz
dHJlYW0uY3VycmVudCgpKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC8u
dGVzdCh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFsbG93
ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwogICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSwgYnV0IGV4cGVjdGluZyBw
cm9wZXJ0eSAocHJlY2VkZWQKICAgICAgICAgICAgIC8vIGJ5ICJhbmQiKS4gU2hvdWxkIGJlIGlu
IHBhcmVudGhlc2VzCiAgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7CiAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIikgewotICAgICAgICAg
IGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgaWYg
KHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAgICAgIC8v
IGRvIG5vdGhpbmcsIHJlbWFpbnMgInByb3BlcnR5IgotICAgICAgICAgIH0gZWxzZSBpZiAoYXRN
ZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChhdE1l
ZGlhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKICAgICAgICAgICAgIHN0eWxlID0gImVy
cm9yIjsgLy8gS25vd24gcHJvcGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwotICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7
CisgICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7CiAgICAgICAgICAgICBzdHls
ZSA9ICJvcGVyYXRvciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVz
dChzdHJlYW0uY3VycmVudCgpKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3Qp
JC8udGVzdCh3b3JkKSkgewogICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFs
bG93ZWQgaW4gQG1lZGlhCiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0eWxlICs9
ICIgZXJyb3IiOwogICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJA
aW1wb3J0IikgeworICAgICAgICAgIHN0eWxlID0gInRhZyI7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwogICAgICAgICB9CkBAIC0yNjYsMTQgKzI2OCwxNiBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRp
b24iKSBzdGF0ZS5zdGFjay5wdXNoKCJpbnRlcnBvbGF0aW9uIik7CiAgICAgICBlbHNlIGlmICh0
eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKKyAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gIkBpbXBvcnQiKSBzdGF0ZS5zdGFjay5wdXNoKCJAaW1wb3J0Iik7CiAgICAg
ICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWEiICYmIC9cYihrZXl3b3JkfGF0dHJpYnV0ZSlc
Yi8udGVzdChzdHlsZSkpCiAgICAgICAgIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYVR5cGUiKTsK
ICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiICYmIHN0cmVhbS5jdXJyZW50
KCkgPT0gIiwiKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0g
IkBtZWRpYVR5cGUiICYmIHR5cGUgPT0gIigiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWFUeXBl
KCIpOwogICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSgiICYmIHR5cGUgPT0g
IikiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgIGVsc2UgaWYgKChjb250ZXh0ID09ICJydWxl
IiB8fCBjb250ZXh0ID09ICJibG9jayIpICYmIHR5cGUgPT0gIjoiKSBzdGF0ZS5zdGFjay5wdXNo
KCJwcm9wZXJ0eVZhbHVlIik7CisgICAgICBlbHNlIGlmICh0eXBlID09ICI6IiAmJiBzdGF0ZS5s
YXN0VG9rZW4gPT0gInByb3BlcnR5Iikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIp
OwogICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIgJiYgdHlwZSA9PSAi
OyIpIHN0YXRlLnN0YWNrLnBvcCgpOwotICAgICAgcmV0dXJuIHN0eWxlOworICAgICAgZWxzZSBp
ZiAoY29udGV4dCA9PSAiQGltcG9ydCIgJiYgdHlwZSA9PSAiOyIpIHN0YXRlLnN0YWNrLnBvcCgp
OworICAgICAgcmV0dXJuIHN0YXRlLmxhc3RUb2tlbiA9IHN0eWxlOwogICAgIH0sCiAKICAgICBp
bmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKQEAgLTI4Myw3ICsyODcsMTAgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0
OwogICAgIH0sCiAKLSAgICBlbGVjdHJpY0NoYXJzOiAifSIKKyAgICBlbGVjdHJpY0NoYXJzOiAi
fSIsCisgICAgYmxvY2tDb21tZW50U3RhcnQ6ICIvKiIsCisgICAgYmxvY2tDb21tZW50RW5kOiAi
Ki8iLAorICAgIGZvbGQ6ICJicmFjZSIKICAgfTsKIH0pOwogCkBAIC0zODcsMTIgKzM5NCw0NiBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICAidmVydGljYWwtYWxpZ24iLCAidmlzaWJpbGl0eSIsICJ2b2ljZS1i
YWxhbmNlIiwgInZvaWNlLWR1cmF0aW9uIiwKICAgICAidm9pY2UtZmFtaWx5IiwgInZvaWNlLXBp
dGNoIiwgInZvaWNlLXJhbmdlIiwgInZvaWNlLXJhdGUiLCAidm9pY2Utc3RyZXNzIiwKICAgICAi
dm9pY2Utdm9sdW1lIiwgInZvbHVtZSIsICJ3aGl0ZS1zcGFjZSIsICJ3aWRvd3MiLCAid2lkdGgi
LCAid29yZC1icmVhayIsCi0gICAgIndvcmQtc3BhY2luZyIsICJ3b3JkLXdyYXAiLCAiei1pbmRl
eCIKKyAgICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwKKyAgICAvLyBT
Vkctc3BlY2lmaWMKKyAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIsICJtYXNrIiwgImVuYWJs
ZS1iYWNrZ3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCisgICAgImZsb29kLW9wYWNp
dHkiLCAibGlnaHRpbmctY29sb3IiLCAic3RvcC1jb2xvciIsICJzdG9wLW9wYWNpdHkiLCAicG9p
bnRlci1ldmVudHMiLAorICAgICJjb2xvci1pbnRlcnBvbGF0aW9uIiwgImNvbG9yLWludGVycG9s
YXRpb24tZmlsdGVycyIsICJjb2xvci1wcm9maWxlIiwKKyAgICAiY29sb3ItcmVuZGVyaW5nIiwg
ImZpbGwiLCAiZmlsbC1vcGFjaXR5IiwgImZpbGwtcnVsZSIsICJpbWFnZS1yZW5kZXJpbmciLAor
ICAgICJtYXJrZXIiLCAibWFya2VyLWVuZCIsICJtYXJrZXItbWlkIiwgIm1hcmtlci1zdGFydCIs
ICJzaGFwZS1yZW5kZXJpbmciLCAic3Ryb2tlIiwKKyAgICAic3Ryb2tlLWRhc2hhcnJheSIsICJz
dHJva2UtZGFzaG9mZnNldCIsICJzdHJva2UtbGluZWNhcCIsICJzdHJva2UtbGluZWpvaW4iLAor
ICAgICJzdHJva2UtbWl0ZXJsaW1pdCIsICJzdHJva2Utb3BhY2l0eSIsICJzdHJva2Utd2lkdGgi
LCAidGV4dC1yZW5kZXJpbmciLAorICAgICJiYXNlbGluZS1zaGlmdCIsICJkb21pbmFudC1iYXNl
bGluZSIsICJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKKyAgICAiZ2x5cGgtb3JpZW50
YXRpb24tdmVydGljYWwiLCAia2VybmluZyIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUi
CiAgIF0pOwogCiAgIHZhciBjb2xvcktleXdvcmRzID0ga2V5U2V0KFsKLSAgICAiYmxhY2siLCAi
c2lsdmVyIiwgImdyYXkiLCAid2hpdGUiLCAibWFyb29uIiwgInJlZCIsICJwdXJwbGUiLCAiZnVj
aHNpYSIsCi0gICAgImdyZWVuIiwgImxpbWUiLCAib2xpdmUiLCAieWVsbG93IiwgIm5hdnkiLCAi
Ymx1ZSIsICJ0ZWFsIiwgImFxdWEiCisgICAgImFsaWNlYmx1ZSIsICJhbnRpcXVld2hpdGUiLCAi
YXF1YSIsICJhcXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKKyAgICAiYmlzcXVlIiwgImJs
YWNrIiwgImJsYW5jaGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJicm93biIsCisg
ICAgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9jb2xhdGUiLCAi
Y29yYWwiLCAiY29ybmZsb3dlcmJsdWUiLAorICAgICJjb3Juc2lsayIsICJjcmltc29uIiwgImN5
YW4iLCAiZGFya2JsdWUiLCAiZGFya2N5YW4iLCAiZGFya2dvbGRlbnJvZCIsCisgICAgImRhcmtn
cmF5IiwgImRhcmtncmVlbiIsICJkYXJra2hha2kiLCAiZGFya21hZ2VudGEiLCAiZGFya29saXZl
Z3JlZW4iLAorICAgICJkYXJrb3JhbmdlIiwgImRhcmtvcmNoaWQiLCAiZGFya3JlZCIsICJkYXJr
c2FsbW9uIiwgImRhcmtzZWFncmVlbiIsCisgICAgImRhcmtzbGF0ZWJsdWUiLCAiZGFya3NsYXRl
Z3JheSIsICJkYXJrdHVycXVvaXNlIiwgImRhcmt2aW9sZXQiLAorICAgICJkZWVwcGluayIsICJk
ZWVwc2t5Ymx1ZSIsICJkaW1ncmF5IiwgImRvZGdlcmJsdWUiLCAiZmlyZWJyaWNrIiwKKyAgICAi
ZmxvcmFsd2hpdGUiLCAiZm9yZXN0Z3JlZW4iLCAiZnVjaHNpYSIsICJnYWluc2Jvcm8iLCAiZ2hv
c3R3aGl0ZSIsCisgICAgImdvbGQiLCAiZ29sZGVucm9kIiwgImdyYXkiLCAiZ3JlZW4iLCAiZ3Jl
ZW55ZWxsb3ciLCAiaG9uZXlkZXciLAorICAgICJob3RwaW5rIiwgImluZGlhbnJlZCIsICJpbmRp
Z28iLCAiaXZvcnkiLCAia2hha2kiLCAibGF2ZW5kZXIiLAorICAgICJsYXZlbmRlcmJsdXNoIiwg
Imxhd25ncmVlbiIsICJsZW1vbmNoaWZmb24iLCAibGlnaHRibHVlIiwgImxpZ2h0Y29yYWwiLAor
ICAgICJsaWdodGN5YW4iLCAibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCAibGlnaHRncmF5IiwgImxp
Z2h0Z3JlZW4iLCAibGlnaHRwaW5rIiwKKyAgICAibGlnaHRzYWxtb24iLCAibGlnaHRzZWFncmVl
biIsICJsaWdodHNreWJsdWUiLCAibGlnaHRzbGF0ZWdyYXkiLAorICAgICJsaWdodHN0ZWVsYmx1
ZSIsICJsaWdodHllbGxvdyIsICJsaW1lIiwgImxpbWVncmVlbiIsICJsaW5lbiIsICJtYWdlbnRh
IiwKKyAgICAibWFyb29uIiwgIm1lZGl1bWFxdWFtYXJpbmUiLCAibWVkaXVtYmx1ZSIsICJtZWRp
dW1vcmNoaWQiLCAibWVkaXVtcHVycGxlIiwKKyAgICAibWVkaXVtc2VhZ3JlZW4iLCAibWVkaXVt
c2xhdGVibHVlIiwgIm1lZGl1bXNwcmluZ2dyZWVuIiwgIm1lZGl1bXR1cnF1b2lzZSIsCisgICAg
Im1lZGl1bXZpb2xldHJlZCIsICJtaWRuaWdodGJsdWUiLCAibWludGNyZWFtIiwgIm1pc3R5cm9z
ZSIsICJtb2NjYXNpbiIsCisgICAgIm5hdmFqb3doaXRlIiwgIm5hdnkiLCAib2xkbGFjZSIsICJv
bGl2ZSIsICJvbGl2ZWRyYWIiLCAib3JhbmdlIiwgIm9yYW5nZXJlZCIsCisgICAgIm9yY2hpZCIs
ICJwYWxlZ29sZGVucm9kIiwgInBhbGVncmVlbiIsICJwYWxldHVycXVvaXNlIiwgInBhbGV2aW9s
ZXRyZWQiLAorICAgICJwYXBheWF3aGlwIiwgInBlYWNocHVmZiIsICJwZXJ1IiwgInBpbmsiLCAi
cGx1bSIsICJwb3dkZXJibHVlIiwKKyAgICAicHVycGxlIiwgInJlZCIsICJyb3N5YnJvd24iLCAi
cm95YWxibHVlIiwgInNhZGRsZWJyb3duIiwgInNhbG1vbiIsCisgICAgInNhbmR5YnJvd24iLCAi
c2VhZ3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwKKyAg
ICAic2xhdGVibHVlIiwgInNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwgInN0ZWVs
Ymx1ZSIsICJ0YW4iLAorICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1cnF1b2lz
ZSIsICJ2aW9sZXQiLCAid2hlYXQiLCAid2hpdGUiLAorICAgICJ3aGl0ZXNtb2tlIiwgInllbGxv
dyIsICJ5ZWxsb3dncmVlbiIKICAgXSk7CiAKICAgdmFyIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQo
WwpAQCAtNDc1LDcgKzUxNiw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzLWJhc2UiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJ1cHBlci1hbHBoYSIsICJ1cHBl
ci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVjaW1hbCIsCiAgICAgInVw
cGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1cHBlci1yb21hbiIsICJ1cHBlcmNhc2Ui
LCAidXJkdSIsICJ1cmwiLAogICAgICJ2ZXJ0aWNhbCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2li
bGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJsZVBhaW50ZWQiLAotICAgICJ2aXNpYmxlU3Ryb2tl
IiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2hpdGUiLCAid2lkZXIi
LAorICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndh
dmUiLCAid2lkZXIiLAogICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIs
ICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKICAgICAieHgtbGFyZ2UiLCAieHgtc21hbGwi
CiAgIF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVBy
aW50aW5nL2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvamF2YXNjcmlwdC5qcwppbmRleCAyMjlmYjJkYzBhNjdlZDUyMzkwYmY4ZDczOTU5
NDhlOTJiMzZlMzYwLi4zZDA0NjAzYzI4NWZlZTVjYTMzYzg2M2VhNjc4ODA3NjUyMzRmZDU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvamF2
YXNjcmlwdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvamF2YXNjcmlwdC5qcwpAQCAtMiw2ICsyLDcgQEAKIAogQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgdmFyIGlu
ZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKKyAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBh
cnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7CiAgIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZp
Zy5qc29uOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0OwogCkBAIC0xMyw3
ICsxNCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiks
IGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKIAogICAgIHZhciBqc0tleXdv
cmRzID0gewotICAgICAgImlmIjogQSwgIndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIs
ICJkbyI6IEIsICJ0cnkiOiBCLCAiZmluYWxseSI6IEIsCisgICAgICAiaWYiOiBrdygiaWYiKSwg
IndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIsICJkbyI6IEIsICJ0cnkiOiBCLCAiZmlu
YWxseSI6IEIsCiAgICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywg
Im5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAgInZhciI6IGt3KCJ2YXIi
KSwgImNvbnN0Ijoga3coInZhciIpLCAibGV0Ijoga3coInZhciIpLAogICAgICAgImZ1bmN0aW9u
Ijoga3coImZ1bmN0aW9uIiksICJjYXRjaCI6IGt3KCJjYXRjaCIpLApAQCAtMjI2LDggKzIyNyw5
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7CiAg
ICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7
Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChzdGF0ZS5pbmRlbnRlZCwgY3gu
c3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKKyAgICAg
IHZhciBzdGF0ZSA9IGN4LnN0YXRlLCBpbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDsKKyAgICAgIGlm
IChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gInN0YXQiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmlu
ZGVudGVkOworICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoaW5kZW50LCBjeC5z
dHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pOwogICAgIH07
CiAgICAgcmVzdWx0LmxleCA9IHRydWU7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI1NiwzMCAr
MjU4LDMyIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIpIHJldHVy
biBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgIGlmICh0eXBl
ID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgICBp
ZiAodHlwZSA9PSAiOyIpIHJldHVybiBjb250KCk7CisgICAgaWYgKHR5cGUgPT0gImlmIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleCwg
bWF5YmVlbHNlKTsKICAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5j
dGlvbmRlZik7CiAgICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hsZXgoImZv
cm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwg
cG9wbGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wbGV4LCBzdGF0
ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQo
cHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgICBpZiAodHlwZSA9PSAic3dpdGNoIikg
cmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3
aXRjaCIpLCBleHBlY3QoInsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAiY2Fz
ZSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKICAgICBpZiAodHlwZSA9
PSAiZGVmYXVsdCIpIHJldHVybiBjb250KGV4cGVjdCgiOiIpKTsKICAgICBpZiAodHlwZSA9PSAi
Y2F0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBleHBlY3Qo
IigiKSwgZnVuYXJnLCBleHBlY3QoIikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOwog
ICAgIHJldHVybiBwYXNzKHB1c2hsZXgoInN0YXQiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCI7Iiks
IHBvcGxleCk7CiAgIH0KICAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7Ci0gICAgcmV0dXJu
IGV4cHJlc3Npb25Jbm5lcih0eXBlLCBtYXliZW9wZXJhdG9yQ29tbWEpOworICAgIHJldHVybiBl
eHByZXNzaW9uSW5uZXIodHlwZSwgZmFsc2UpOwogICB9CiAgIGZ1bmN0aW9uIGV4cHJlc3Npb25O
b0NvbW1hKHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3Bl
cmF0b3JOb0NvbW1hKTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHRydWUpOwog
ICB9Ci0gIGZ1bmN0aW9uIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBtYXliZW9wKSB7CisgIGZ1bmN0
aW9uIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBub0NvbW1hKSB7CisgICAgdmFyIG1heWJlb3AgPSBu
b0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWE7CiAgICAg
aWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9w
KTsKICAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7
Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lv
bik7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG5vQ29tbWEgPyBt
YXliZWV4cHJlc3Npb25Ob0NvbW1hIDogbWF5YmVleHByZXNzaW9uKTsKICAgICBpZiAodHlwZSA9
PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3Qo
IikiKSwgcG9wbGV4LCBtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1
cm4gY29udChleHByZXNzaW9uKTsKKyAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1cm4g
Y29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTsKICAgICBpZiAo
dHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lv
bk5vQ29tbWEsICJdIiksIHBvcGxleCwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSBy
ZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGNvbW1hc2VwKG9ianByb3AsICJ9IiksIHBvcGxleCwg
bWF5YmVvcCk7CiAgICAgcmV0dXJuIGNvbnQoKTsKQEAgLTI4OCw2ICsyOTIsMTAgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICBpZiAodHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4gcGFzcygpOwog
ICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogICB9CisgIGZ1bmN0aW9uIG1heWJlZXhwcmVz
c2lvbk5vQ29tbWEodHlwZSkgeworICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJl
dHVybiBwYXNzKCk7CisgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEpOworICB9CiAK
ICAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5
cGUgPT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKQEAgLTMwMyw3ICszMTEsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwogICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIsICJjYWxsIiksIGNvbW1hc2VwKGV4cHJlc3Np
b25Ob0NvbW1hLCAiKSIpLCBwb3BsZXgsIG1lKTsKICAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVy
biBjb250KHByb3BlcnR5LCBtZSk7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChw
dXNobGV4KCJdIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1lKTsKKyAgICBp
ZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgbWF5YmVleHByZXNzaW9u
LCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtZSk7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0
eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVu
dCk7CkBAIC0zNjUsNiArMzczLDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodmFsdWUgPT0gIj0i
KSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSwgdmFyZGVmMik7CiAgICAgaWYgKHR5cGUg
PT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYxKTsKICAgfQorICBmdW5jdGlvbiBtYXliZWVsc2Uo
dHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIiAmJiB2YWx1ZSA9PSAi
ZWxzZSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwor
ICB9CiAgIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAidmFyIikg
cmV0dXJuIGNvbnQodmFyZGVmMSwgZXhwZWN0KCI7IiksIGZvcnNwZWMyKTsKICAgICBpZiAodHlw
ZSA9PSAiOyIpIHJldHVybiBjb250KGZvcnNwZWMyKTsKQEAgLTQxNiw3ICs0MjcsNyBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5Db21tZW50ICYmIHN0
cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRv
a2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgaWYgKHR5cGUgPT0gImNvbW1lbnQiKSByZXR1
cm4gc3R5bGU7Ci0gICAgICBzdGF0ZS5sYXN0VHlwZSA9IHR5cGU7CisgICAgICBzdGF0ZS5sYXN0
VHlwZSA9IHR5cGUgPT0gIm9wZXJhdG9yIiAmJiAoY29udGVudCA9PSAiKysiIHx8IGNvbnRlbnQg
PT0gIi0tIikgPyAiaW5jZGVjIiA6IHR5cGU7CiAgICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwg
c3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7CiAgICAgfSwKIApAQCAtNDI0LDI2ICs0MzUs
MzUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSBqc1Rva2VuQ29t
bWVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAh
PSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVy
ICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsOworICAgICAg
Ly8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2Nv
cGUgcG9wcworICAgICAgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07CisgICAgICAgIGlmIChjID09IHBv
cGxleCkgbGV4aWNhbCA9IGxleGljYWwucHJldjsKKyAgICAgICAgZWxzZSBpZiAoYyAhPSBtYXli
ZWVsc2UgfHwgL15lbHNlXGIvLnRlc3QodGV4dEFmdGVyKSkgYnJlYWs7CisgICAgICB9CiAgICAg
ICBpZiAobGV4aWNhbC50eXBlID09ICJzdGF0IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBsZXhpY2Fs
ID0gbGV4aWNhbC5wcmV2OworICAgICAgaWYgKHN0YXRlbWVudEluZGVudCAmJiBsZXhpY2FsLnR5
cGUgPT0gIikiICYmIGxleGljYWwucHJldi50eXBlID09ICJzdGF0IikKKyAgICAgICAgbGV4aWNh
bCA9IGxleGljYWwucHJldjsKICAgICAgIHZhciB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5n
ID0gZmlyc3RDaGFyID09IHR5cGU7Ci0gICAgICBpZiAocGFyc2VyQ29uZmlnLnN0YXRlbWVudElu
ZGVudCAhPSBudWxsKSB7Ci0gICAgICAgIGlmICh0eXBlID09ICIpIiAmJiBsZXhpY2FsLnByZXYg
JiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gInN0YXQiKSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2Owot
ICAgICAgICBpZiAobGV4aWNhbC50eXBlID09ICJzdGF0IikgcmV0dXJuIGxleGljYWwuaW5kZW50
ZWQgKyBwYXJzZXJDb25maWcuc3RhdGVtZW50SW5kZW50OwotICAgICAgfQogCiAgICAgICBpZiAo
dHlwZSA9PSAidmFyZGVmIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5
cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyA0IDogMCk7CiAgICAg
ICBlbHNlIGlmICh0eXBlID09ICJmb3JtIiAmJiBmaXJzdENoYXIgPT0gInsiKSByZXR1cm4gbGV4
aWNhbC5pbmRlbnRlZDsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iKSByZXR1cm4gbGV4
aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0
IikKLSAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0g
Im9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyBpbmRlbnRVbml0IDogMCk7Ci0g
ICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCisgICAg
ICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRv
ciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVu
aXQgOiAwKTsKKyAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xv
c2luZyAmJiBwYXJzZXJDb25maWcuZG91YmxlSW5kZW50U3dpdGNoICE9IGZhbHNlKQogICAgICAg
ICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0
ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTsKICAgICAgIGVsc2UgaWYg
KGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEp
OwogICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGlu
ZGVudFVuaXQpOwogICAgIH0sCiAKICAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IiwKKyAgICBibG9j
a0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKKyAgICBibG9ja0NvbW1lbnRF
bmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCisgICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8g
bnVsbCA6ICIvLyIsCisgICAgZm9sZDogImJyYWNlIiwKIAorICAgIGhlbHBlclR5cGU6IGpzb25N
b2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAogICAgIGpzb25Nb2RlOiBqc29uTW9kZQogICB9
OwogfSk7CkBAIC00NTMsNSArNDczLDYgQEAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2Vj
bWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
YXBwbGljYXRpb24vZWNtYXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRlZmlu
ZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVl
fSk7CitDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtanNvbiIsIHtuYW1lOiAi
amF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC90
eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7CiBD
b2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7IG5hbWU6ICJq
YXZhc2NyaXB0IiwgdHlwZXNjcmlwdDogdHJ1ZSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0
cy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY2xvc2VicmFja2V0cy5qcwppbmRleCBiNDZjYWNhMDJhNjA3MzIxZmU1ZWYwYzM4OTFj
ZTYyZDU5ODg4YjViLi44ODcxOGI3NzI5MmVkZGEwZGVlYTJkOGQxNzY3NGVmNTk2M2RiYzVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJyYWNrZXRzLmpzCkBAIC0xLDM0
ICsxLDQ3IEBACiAoZnVuY3Rpb24oKSB7CiAgIHZhciBERUZBVUxUX0JSQUNLRVRTID0gIigpW117
fScnXCJcIiI7CisgIHZhciBERUZBVUxUX0VYUExPREVfT05fRU5URVIgPSAiW117fSI7CiAgIHZh
ciBTUEFDRV9DSEFSX1JFR0VYID0gL1xzLzsKIAogICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbigi
YXV0b0Nsb3NlQnJhY2tldHMiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7Ci0gICAg
dmFyIHdhc09uID0gb2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQ7Ci0gICAgaWYgKHZhbCAm
JiAhd2FzT24pCi0gICAgICBjbS5hZGRLZXlNYXAoYnVpbGRLZXltYXAodHlwZW9mIHZhbCA9PSAi
c3RyaW5nIiA/IHZhbCA6IERFRkFVTFRfQlJBQ0tFVFMpKTsKLSAgICBlbHNlIGlmICghdmFsICYm
IHdhc09uKQorICAgIGlmIChvbGQgIT0gQ29kZU1pcnJvci5Jbml0ICYmIG9sZCkKICAgICAgIGNt
LnJlbW92ZUtleU1hcCgiYXV0b0Nsb3NlQnJhY2tldHMiKTsKKyAgICBpZiAoIXZhbCkgcmV0dXJu
OworICAgIHZhciBwYWlycyA9IERFRkFVTFRfQlJBQ0tFVFMsIGV4cGxvZGUgPSBERUZBVUxUX0VY
UExPREVfT05fRU5URVI7CisgICAgaWYgKHR5cGVvZiB2YWwgPT0gInN0cmluZyIpIHBhaXJzID0g
dmFsOworICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT0gIm9iamVjdCIpIHsKKyAgICAgIGlmICh2
YWwucGFpcnMgIT0gbnVsbCkgcGFpcnMgPSB2YWwucGFpcnM7CisgICAgICBpZiAodmFsLmV4cGxv
ZGUgIT0gbnVsbCkgZXhwbG9kZSA9IHZhbC5leHBsb2RlOworICAgIH0KKyAgICB2YXIgbWFwID0g
YnVpbGRLZXltYXAocGFpcnMpOworICAgIGlmIChleHBsb2RlKSBtYXAuRW50ZXIgPSBidWlsZEV4
cGxvZGVIYW5kbGVyKGV4cGxvZGUpOworICAgIGNtLmFkZEtleU1hcChtYXApOwogICB9KTsKIAor
ICBmdW5jdGlvbiBjaGFyc0Fyb3VuZChjbSwgcG9zKSB7CisgICAgdmFyIHN0ciA9IGNtLmdldFJh
bmdlKENvZGVNaXJyb3IuUG9zKHBvcy5saW5lLCBwb3MuY2ggLSAxKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpKTsKKyAgICBy
ZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8gc3RyIDogbnVsbDsKKyAgfQorCiAgIGZ1bmN0aW9uIGJ1
aWxkS2V5bWFwKHBhaXJzKSB7CiAgICAgdmFyIG1hcCA9IHsKICAgICAgIG5hbWUgOiAiYXV0b0Ns
b3NlQnJhY2tldHMiLAogICAgICAgQmFja3NwYWNlOiBmdW5jdGlvbihjbSkgewogICAgICAgICBp
ZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAg
ICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7
Ci0gICAgICAgIGlmIChjdXIuY2ggJiYgY3VyLmNoIDwgbGluZS5sZW5ndGggJiYKLSAgICAgICAg
ICAgIHBhaXJzLmluZGV4T2YobGluZS5zbGljZShjdXIuY2ggLSAxLCBjdXIuY2ggKyAxKSkgJSAy
ID09IDApCisgICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgYXJvdW5kID0gY2hhcnNB
cm91bmQoY20sIGN1cik7CisgICAgICAgIGlmIChhcm91bmQgJiYgcGFpcnMuaW5kZXhPZihhcm91
bmQpICUgMiA9PSAwKQogICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgQ29kZU1pcnJvci5Q
b3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNo
ICsgMSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
ICAgICAgIH0KICAgICB9OwotICAgIHZhciBjbG9zaW5nQnJhY2tldHMgPSBbXTsKKyAgICB2YXIg
Y2xvc2luZ0JyYWNrZXRzID0gIiI7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5n
dGg7IGkgKz0gMikgKGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICBpZiAobGVmdCAhPSBy
aWdodCkgY2xvc2luZ0JyYWNrZXRzLnB1c2gocmlnaHQpOworICAgICAgaWYgKGxlZnQgIT0gcmln
aHQpIGNsb3NpbmdCcmFja2V0cyArPSByaWdodDsKICAgICAgIGZ1bmN0aW9uIHN1cnJvdW5kKGNt
KSB7Ci0gICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGNtLmdldFNlbGVjdGlvbigpOwotICAgICAg
ICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIHNlbGVjdGlvbiArIHJpZ2h0KTsKKyAgICAg
ICAgdmFyIHNlbGVjdGlvbiA9IGNtLmdldFNlbGVjdGlvbigpOworICAgICAgICBjbS5yZXBsYWNl
U2VsZWN0aW9uKGxlZnQgKyBzZWxlY3Rpb24gKyByaWdodCk7CiAgICAgICB9CiAgICAgICBmdW5j
dGlvbiBtYXliZU92ZXJ3cml0ZShjbSkgewogICAgICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29y
KCksIGFoZWFkID0gY20uZ2V0UmFuZ2UoY3VyLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3Vy
LmNoICsgMSkpOwpAQCAtMzYsMTAgKzQ5LDE0IEBACiAgICAgICAgIGVsc2UgY20uZXhlY0NvbW1h
bmQoImdvQ2hhclJpZ2h0Iik7CiAgICAgICB9CiAgICAgICBtYXBbIiciICsgbGVmdCArICInIl0g
PSBmdW5jdGlvbihjbSkgeworICAgICAgICBpZiAobGVmdCA9PSAiJyIgJiYgY20uZ2V0VG9rZW5B
dChjbS5nZXRDdXJzb3IoKSkudHlwZSA9PSAiY29tbWVudCIpCisgICAgICAgICAgcmV0dXJuIENv
ZGVNaXJyb3IuUGFzczsKICAgICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVy
biBzdXJyb3VuZChjbSk7CiAgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0ICYmIG1heWJlT3Zlcndy
aXRlKGNtKSAhPSBDb2RlTWlycm9yLlBhc3MpIHJldHVybjsKICAgICAgICAgdmFyIGN1ciA9IGNt
LmdldEN1cnNvcigpLCBhaGVhZCA9IENvZGVNaXJyb3IuUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAx
KTsKLSAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgbmV4dENoYXIgPSBs
aW5lLmNoYXJBdChjdXIuY2gpOworICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUoY3VyLmxp
bmUpLCBuZXh0Q2hhciA9IGxpbmUuY2hhckF0KGN1ci5jaCksIGN1ckNoYXIgPSBjdXIuY2ggPiAw
ID8gbGluZS5jaGFyQXQoY3VyLmNoIC0gMSkgOiAiIjsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmln
aHQgJiYgQ29kZU1pcnJvci5pc1dvcmRDaGFyKGN1ckNoYXIpKQorICAgICAgICAgIHJldHVybiBD
b2RlTWlycm9yLlBhc3M7CiAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PSBjdXIuY2ggfHwgY2xv
c2luZ0JyYWNrZXRzLmluZGV4T2YobmV4dENoYXIpID49IDAgfHwgU1BBQ0VfQ0hBUl9SRUdFWC50
ZXN0KG5leHRDaGFyKSkKICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyByaWdo
dCwge2hlYWQ6IGFoZWFkLCBhbmNob3I6IGFoZWFkfSk7CiAgICAgICAgIGVsc2UKQEAgLTQ5LDQg
KzY2LDE3IEBACiAgICAgfSkocGFpcnMuY2hhckF0KGkpLCBwYWlycy5jaGFyQXQoaSArIDEpKTsK
ICAgICByZXR1cm4gbWFwOwogICB9CisKKyAgZnVuY3Rpb24gYnVpbGRFeHBsb2RlSGFuZGxlcihw
YWlycykgeworICAgIHJldHVybiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGN1ciA9IGNtLmdl
dEN1cnNvcigpLCBhcm91bmQgPSBjaGFyc0Fyb3VuZChjbSwgY3VyKTsKKyAgICAgIGlmICghYXJv
dW5kIHx8IHBhaXJzLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3Iu
UGFzczsKKyAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG5ld1Bv
cyA9IENvZGVNaXJyb3IuUG9zKGN1ci5saW5lICsgMSwgMCk7CisgICAgICAgIGNtLnJlcGxhY2VT
ZWxlY3Rpb24oIlxuXG4iLCB7YW5jaG9yOiBuZXdQb3MsIGhlYWQ6IG5ld1Bvc30sICIraW5wdXQi
KTsKKyAgICAgICAgY20uaW5kZW50TGluZShjdXIubGluZSArIDEsIG51bGwsIHRydWUpOworICAg
ICAgICBjbS5pbmRlbnRMaW5lKGN1ci5saW5lICsgMiwgbnVsbCwgdHJ1ZSk7CisgICAgICB9KTsK
KyAgICB9OworICB9CiB9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJv
ci5jc3MKaW5kZXggZjUzNzlkOTY3Yzk4MDBmNmYwZDQ0ZGQ4ZjhhOTlmMjRlOTA2YTdkMy4uNTI4
ODFmN2RmZDA5ZjgzY2M1Y2Q1NmY5MWZkM2NhNmI4NDYwYzAyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWly
cm9yLmNzcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCkBAIC0yMDUsNyArMjA1LDYgQEAgZGl2LkNvZGVN
aXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQog
fQogCiAuQ29kZU1pcnJvci13aWRnZXQgewotICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiB9CiAK
IC5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1p
cnJvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY29kZW1pcnJvci5qcwppbmRleCAzYTU5MWIyMThiZGE3N2VhZGUwMjkxM2U5OTM4
Y2U1YTFjMGYyZWFkLi5mZmY0MzQ0YWUxOTM1NzFhODYzMTRiMzdkNzlmNDI3MTFmMDZkNjE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2NvZGVtaXJyb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCkBAIC0yMzYsOSArMjM2
LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAKICAgZnVuY3Rp
b24ga2V5TWFwQ2hhbmdlZChjbSkgewotICAgIHZhciBzdHlsZSA9IGtleU1hcFtjbS5vcHRpb25z
LmtleU1hcF0uc3R5bGU7CisgICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0s
IHN0eWxlID0gbWFwLnN0eWxlOwogICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBj
bS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysvZywg
IiIpICsKICAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFwLSIgKyBzdHlsZSA6ICIiKTsKKyAgICBj
bS5zdGF0ZS5kaXNhYmxlSW5wdXQgPSBtYXAuZGlzYWJsZUlucHV0OwogICB9CiAKICAgZnVuY3Rp
b24gdGhlbWVDaGFuZ2VkKGNtKSB7CkBAIC0zMjMsOCArMzI0LDggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZC5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBkLmhlaWdo
dEZvcmNlci5zdHlsZS50b3AgPSB0b3RhbEhlaWdodCArICJweCI7CiAgICAgZC5ndXR0ZXJzLnN0
eWxlLmhlaWdodCA9IE1hdGgubWF4KHRvdGFsSGVpZ2h0LCBkLnNjcm9sbGVyLmNsaWVudEhlaWdo
dCAtIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7CiAgICAgdmFyIHNjcm9sbEhlaWdodCA9IE1hdGgu
bWF4KHRvdGFsSGVpZ2h0LCBkLnNjcm9sbGVyLnNjcm9sbEhlaWdodCk7Ci0gICAgdmFyIG5lZWRz
SCA9IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPiBkLnNjcm9sbGVyLmNsaWVudFdpZHRoOwotICAg
IHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQgPiBkLnNjcm9sbGVyLmNsaWVudEhlaWdodDsKKyAg
ICB2YXIgbmVlZHNIID0gZC5zY3JvbGxlci5zY3JvbGxXaWR0aCA+IChkLnNjcm9sbGVyLmNsaWVu
dFdpZHRoICsgMSk7CisgICAgdmFyIG5lZWRzViA9IHNjcm9sbEhlaWdodCA+IChkLnNjcm9sbGVy
LmNsaWVudEhlaWdodCArIDEpOwogICAgIGlmIChuZWVkc1YpIHsKICAgICAgIGQuc2Nyb2xsYmFy
Vi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0
b20gPSBuZWVkc0ggPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsKQEAg
LTUxMSw5ICs1MTIsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICBkaXNwbGF5Lmxhc3RTaXplQyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwogICAg
IC8vIFRoaXMgaXMganVzdCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVk
aXRvciBpcwogICAgIC8vIHJlc2l6ZWQgb3IgdGhlIGZvbnQgc2l6ZSBjaGFuZ2VzLgotICAgIGlm
IChkaWZmZXJlbnQpIGRpc3BsYXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhl
aWdodDsKKyAgICBpZiAoZGlmZmVyZW50KSB7CisgICAgICBkaXNwbGF5Lmxhc3RTaXplQyA9IGRp
c3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisgICAgICBzdGFydFdvcmtlcihjbSwgNDAwKTsK
KyAgICB9CiAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGZyb207IGRpc3BsYXkuc2hvd2luZ1Rv
ID0gdG87Ci0gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7CiAKICAgICB2YXIgcHJldkJvdHRvbSA9
IGRpc3BsYXkubGluZURpdi5vZmZzZXRUb3A7CiAgICAgZm9yICh2YXIgbm9kZSA9IGRpc3BsYXku
bGluZURpdi5maXJzdENoaWxkLCBoZWlnaHQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
KSBpZiAobm9kZS5saW5lT2JqKSB7CkBAIC02MDIsOCArNjA1LDkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRv
ID09IGxpbmVOKSBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCk7CiAgICAgICBpZiAobGluZUlz
SGlkZGVuKGNtLmRvYywgbGluZSkpIHsKICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDApIHVw
ZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3Vy
LnByZXZpb3VzU2libGluZykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5zaG93SWZIaWRkZW4pIHsKKyAg
ICAgICAgaWYgKGxpbmUud2lkZ2V0cyAmJiBjdXIucHJldmlvdXNTaWJsaW5nKSBmb3IgKHZhciBp
ID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgIHZhciB3ID0g
bGluZS53aWRnZXRzW2ldOworICAgICAgICAgIGlmICh3LnNob3dJZkhpZGRlbikgewogICAgICAg
ICAgICAgdmFyIHByZXYgPSBjdXIucHJldmlvdXNTaWJsaW5nOwogICAgICAgICAgICAgaWYgKC9w
cmUvaS50ZXN0KHByZXYubm9kZU5hbWUpKSB7CiAgICAgICAgICAgICAgIHZhciB3cmFwID0gZWx0
KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7CkBAIC02MTEsOSArNjE1
LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICB3
cmFwLmFwcGVuZENoaWxkKHByZXYpOwogICAgICAgICAgICAgICBwcmV2ID0gd3JhcDsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBwZW5kQ2hpbGQoZWx0KCJk
aXYiLCBbbGluZS53aWRnZXRzW2ldLm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikpOwot
ICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KGxpbmUud2lkZ2V0c1tpXSwgd25vZGUsIHBy
ZXYsIGRpbXMpOworICAgICAgICAgICAgdmFyIHdub2RlID0gcHJldi5hcHBlbmRDaGlsZChlbHQo
ImRpdiIsIFt3Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikpOworICAgICAgICAgICAg
aWYgKCF3LmhhbmRsZU1vdXNlRXZlbnRzKSB3bm9kZS5pZ25vcmVFdmVudHMgPSB0cnVlOworICAg
ICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHcsIHdub2RlLCBwcmV2LCBkaW1zKTsKICAgICAg
ICAgICB9CisgICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50
YWN0LmZyb20gPD0gbGluZU4gJiYgbmV4dEludGFjdC50byA+IGxpbmVOKSB7CiAgICAgICAgIC8v
IFRoaXMgbGluZSBpcyBpbnRhY3QuIFNraXAgdG8gdGhlIGFjdHVhbCBub2RlLiBVcGRhdGUgaXRz
CiAgICAgICAgIC8vIGxpbmUgbnVtYmVyIGlmIG5lZWRlZC4KQEAgLTY1NiwyNSArNjYyLDI1IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgaWYgKHJldXNlKSB7CiAg
ICAgICByZXVzZS5hbGlnbmFibGUgPSBudWxsOwotICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3aWRn
ZXRzU2VlbiA9IDA7CisgICAgICB2YXIgaXNPayA9IHRydWUsIHdpZGdldHNTZWVuID0gMCwgaW5z
ZXJ0QmVmb3JlID0gbnVsbDsKICAgICAgIGZvciAodmFyIG4gPSByZXVzZS5maXJzdENoaWxkLCBu
ZXh0OyBuOyBuID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gbi5uZXh0U2libGluZzsKICAgICAg
ICAgaWYgKCEvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChuLmNsYXNzTmFtZSkpIHsK
ICAgICAgICAgICByZXVzZS5yZW1vdmVDaGlsZChuKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBmb3IgKHZhciBpID0gMCwgZmlyc3QgPSB0cnVlOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgd2lkZ2V0ID0gbGluZS53aWRnZXRzW2ldLCBpc0Zp
cnN0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIXdpZGdldC5hYm92ZSkgeyBpc0ZpcnN0ID0g
Zmlyc3Q7IGZpcnN0ID0gZmFsc2U7IH0KKyAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxp
bmUud2lkZ2V0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHdpZGdldCA9IGxpbmUu
d2lkZ2V0c1tpXTsKICAgICAgICAgICAgIGlmICh3aWRnZXQubm9kZSA9PSBuLmZpcnN0Q2hpbGQp
IHsKKyAgICAgICAgICAgICAgaWYgKCF3aWRnZXQuYWJvdmUgJiYgIWluc2VydEJlZm9yZSkgaW5z
ZXJ0QmVmb3JlID0gbjsKICAgICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwg
biwgcmV1c2UsIGRpbXMpOwogICAgICAgICAgICAgICArK3dpZGdldHNTZWVuOwotICAgICAgICAg
ICAgICBpZiAoaXNGaXJzdCkgcmV1c2UuaW5zZXJ0QmVmb3JlKGxpbmVFbGVtZW50LCBuKTsKICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAg
IGlmIChpID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsgaXNPayA9IGZhbHNlOyBicmVhazsgfQog
ICAgICAgICB9CiAgICAgICB9CisgICAgICByZXVzZS5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQs
IGluc2VydEJlZm9yZSk7CiAgICAgICBpZiAoaXNPayAmJiB3aWRnZXRzU2VlbiA9PSBsaW5lLndp
ZGdldHMubGVuZ3RoKSB7CiAgICAgICAgIHdyYXAgPSByZXVzZTsKICAgICAgICAgcmV1c2UuY2xh
c3NOYW1lID0gbGluZS53cmFwQ2xhc3MgfHwgIiI7CkBAIC03MDksNiArNzE1LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGllX2x0OCkgd3JhcC5zdHlsZS56
SW5kZXggPSAyOwogICAgIGlmIChsaW5lLndpZGdldHMgJiYgd3JhcCAhPSByZXVzZSkgZm9yICh2
YXIgaSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kpIHsKICAgICAg
IHZhciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNv
ZGVNaXJyb3ItbGluZXdpZGdldCIpOworICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVu
dHMpIG5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3
aWRnZXQsIG5vZGUsIHdyYXAsIGRpbXMpOwogICAgICAgaWYgKHdpZGdldC5hYm92ZSkKICAgICAg
ICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5l
LmhlaWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKQEAgLTc5MSw3NCArNzk4
LDU5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJweDsgaGVpZ2h0OiAiICsgKGJvdHRvbSAtIHRvcCkgKyAicHgiKSk7
CiAgICAgfQogCi0gICAgZnVuY3Rpb24gZHJhd0ZvckxpbmUobGluZSwgZnJvbUFyZywgdG9Bcmcs
IHJldFRvcCkgeworICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJn
KSB7CiAgICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICAgIHZhciBs
aW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aCwgclZhbCA9IHJldFRvcCA/IEluZmluaXR5IDog
LUluZmluaXR5OwotICAgICAgZnVuY3Rpb24gY29vcmRzKGNoKSB7Ci0gICAgICAgIHJldHVybiBj
aGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaik7CisgICAgICB2YXIg
bGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGg7CisgICAgICB2YXIgc3RhcnQsIGVuZDsKKyAg
ICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCwgYmlhcykgeworICAgICAgICByZXR1cm4gY2hhckNvb3Jk
cyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxpbmVPYmosIGJpYXMpOwogICAgICAgfQogCiAg
ICAgICBpdGVyYXRlQmlkaVNlY3Rpb25zKGdldE9yZGVyKGxpbmVPYmopLCBmcm9tQXJnIHx8IDAs
IHRvQXJnID09IG51bGwgPyBsaW5lTGVuIDogdG9BcmcsIGZ1bmN0aW9uKGZyb20sIHRvLCBkaXIp
IHsKLSAgICAgICAgdmFyIGxlZnRQb3MgPSBjb29yZHMoZnJvbSksIHJpZ2h0UG9zLCBsZWZ0LCBy
aWdodDsKKyAgICAgICAgdmFyIGxlZnRQb3MgPSBjb29yZHMoZnJvbSwgImxlZnQiKSwgcmlnaHRQ
b3MsIGxlZnQsIHJpZ2h0OwogICAgICAgICBpZiAoZnJvbSA9PSB0bykgewogICAgICAgICAgIHJp
Z2h0UG9zID0gbGVmdFBvczsKICAgICAgICAgICBsZWZ0ID0gcmlnaHQgPSBsZWZ0UG9zLmxlZnQ7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmlnaHRQb3MgPSBjb29yZHModG8gLSAxKTsK
KyAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0byAtIDEsICJyaWdodCIpOwogICAgICAgICAg
IGlmIChkaXIgPT0gInJ0bCIpIHsgdmFyIHRtcCA9IGxlZnRQb3M7IGxlZnRQb3MgPSByaWdodFBv
czsgcmlnaHRQb3MgPSB0bXA7IH0KICAgICAgICAgICBsZWZ0ID0gbGVmdFBvcy5sZWZ0OwogICAg
ICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGZy
b21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKICAgICAgICAgaWYgKHJpZ2h0
UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9w
IHBhcnQKICAgICAgICAgICBhZGQobGVmdCwgbGVmdFBvcy50b3AsIG51bGwsIGxlZnRQb3MuYm90
dG9tKTsKICAgICAgICAgICBsZWZ0ID0gcGw7CiAgICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9t
IDwgcmlnaHRQb3MudG9wKSBhZGQobGVmdCwgbGVmdFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9z
LnRvcCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGlu
ZUxlbikgcmlnaHQgPSBjbGllbnRXaWR0aDsKLSAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAm
JiBmcm9tID09IDApIGxlZnQgPSBwbDsKLSAgICAgICAgclZhbCA9IHJldFRvcCA/IE1hdGgubWlu
KHJpZ2h0UG9zLnRvcCwgclZhbCkgOiBNYXRoLm1heChyaWdodFBvcy5ib3R0b20sIHJWYWwpOwor
ICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9wIDwgc3RhcnQudG9wIHx8IGxlZnRQb3Mu
dG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQgPCBzdGFydC5sZWZ0KQorICAgICAgICAg
IHN0YXJ0ID0gbGVmdFBvczsKKyAgICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQb3MuYm90dG9tID4g
ZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJvdHRvbSAmJiByaWdodFBvcy5y
aWdodCA+IGVuZC5yaWdodCkKKyAgICAgICAgICBlbmQgPSByaWdodFBvczsKICAgICAgICAgaWYg
KGxlZnQgPCBwbCArIDEpIGxlZnQgPSBwbDsKICAgICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRv
cCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0b20pOwogICAgICAgfSk7Ci0gICAgICByZXR1
cm4gclZhbDsKKyAgICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07CiAgICAgfQog
CiAgICAgaWYgKHNlbC5mcm9tLmxpbmUgPT0gc2VsLnRvLmxpbmUpIHsKICAgICAgIGRyYXdGb3JM
aW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBzZWwudG8uY2gpOwogICAgIH0gZWxzZSB7
Ci0gICAgICB2YXIgZnJvbU9iaiA9IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKTsKLSAgICAg
IHZhciBjdXIgPSBmcm9tT2JqLCBtZXJnZWQsIHBhdGggPSBbc2VsLmZyb20ubGluZSwgc2VsLmZy
b20uY2hdLCBzaW5nbGVMaW5lOwotICAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5B
dEVuZChjdXIpKSB7Ci0gICAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKCk7Ci0gICAgICAg
IHBhdGgucHVzaChmb3VuZC5mcm9tLmNoLCBmb3VuZC50by5saW5lLCBmb3VuZC50by5jaCk7Ci0g
ICAgICAgIGlmIChmb3VuZC50by5saW5lID09IHNlbC50by5saW5lKSB7Ci0gICAgICAgICAgcGF0
aC5wdXNoKHNlbC50by5jaCk7Ci0gICAgICAgICAgc2luZ2xlTGluZSA9IHRydWU7Ci0gICAgICAg
ICAgYnJlYWs7CisgICAgICB2YXIgZnJvbUxpbmUgPSBnZXRMaW5lKGRvYywgc2VsLmZyb20ubGlu
ZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzZWwudG8ubGluZSk7CisgICAgICB2YXIgc2luZ2xl
VkxpbmUgPSB2aXN1YWxMaW5lKGRvYywgZnJvbUxpbmUpID09IHZpc3VhbExpbmUoZG9jLCB0b0xp
bmUpOworICAgICAgdmFyIGxlZnRFbmQgPSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwu
ZnJvbS5jaCwgc2luZ2xlVkxpbmUgPyBmcm9tTGluZS50ZXh0Lmxlbmd0aCA6IG51bGwpLmVuZDsK
KyAgICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc2VsLnRvLmxpbmUsIHNpbmdsZVZM
aW5lID8gMCA6IG51bGwsIHNlbC50by5jaCkuc3RhcnQ7CisgICAgICBpZiAoc2luZ2xlVkxpbmUp
IHsKKyAgICAgICAgaWYgKGxlZnRFbmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7CisgICAg
ICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCBudWxsLCBsZWZ0RW5kLmJvdHRv
bSk7CisgICAgICAgICAgYWRkKHBsLCByaWdodFN0YXJ0LnRvcCwgcmlnaHRTdGFydC5sZWZ0LCBy
aWdodFN0YXJ0LmJvdHRvbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYWRkKGxlZnRF
bmQucmlnaHQsIGxlZnRFbmQudG9wLCByaWdodFN0YXJ0LmxlZnQgLSBsZWZ0RW5kLnJpZ2h0LCBs
ZWZ0RW5kLmJvdHRvbSk7CiAgICAgICAgIH0KLSAgICAgICAgY3VyID0gZ2V0TGluZShkb2MsIGZv
dW5kLnRvLmxpbmUpOwotICAgICAgfQotCi0gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlLCBtZXJn
ZWQgbGluZQotICAgICAgaWYgKHNpbmdsZUxpbmUpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwYXRoLmxlbmd0aDsgaSArPSAzKQotICAgICAgICAgIGRyYXdGb3JMaW5lKHBhdGhbaV0s
IHBhdGhbaSsxXSwgcGF0aFtpKzJdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBtaWRk
bGVUb3AsIG1pZGRsZUJvdCwgdG9PYmogPSBnZXRMaW5lKGRvYywgc2VsLnRvLmxpbmUpOwotICAg
ICAgICBpZiAoc2VsLmZyb20uY2gpCi0gICAgICAgICAgLy8gRHJhdyB0aGUgZmlyc3QgbGluZSBv
ZiBzZWxlY3Rpb24uCi0gICAgICAgICAgbWlkZGxlVG9wID0gZHJhd0ZvckxpbmUoc2VsLmZyb20u
bGluZSwgc2VsLmZyb20uY2gsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
IC8vIFNpbXBseSBpbmNsdWRlIGl0IGluIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgICAgICAgbWlk
ZGxlVG9wID0gaGVpZ2h0QXRMaW5lKGNtLCBmcm9tT2JqKSAtIGRpc3BsYXkudmlld09mZnNldDsK
LQotICAgICAgICBpZiAoIXNlbC50by5jaCkKLSAgICAgICAgICBtaWRkbGVCb3QgPSBoZWlnaHRB
dExpbmUoY20sIHRvT2JqKSAtIGRpc3BsYXkudmlld09mZnNldDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgIG1pZGRsZUJvdCA9IGRyYXdGb3JMaW5lKHNlbC50by5saW5lLCBjb2xsYXBzZWRTcGFu
QXRTdGFydCh0b09iaikgPyBudWxsIDogMCwgc2VsLnRvLmNoLCB0cnVlKTsKLQotICAgICAgICBp
ZiAobWlkZGxlVG9wIDwgbWlkZGxlQm90KSBhZGQocGwsIG1pZGRsZVRvcCwgbnVsbCwgbWlkZGxl
Qm90KTsKICAgICAgIH0KKyAgICAgIGlmIChsZWZ0RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9w
KQorICAgICAgICBhZGQocGwsIGxlZnRFbmQuYm90dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7
CiAgICAgfQogCiAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYs
IGZyYWdtZW50KTsKQEAgLTkyNCwxMiArOTE2LDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0
aGUgbGluZSB3aXRoIHRoZQogICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMg
dG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwogICAvLyBwYXJzZSBjb3JyZWN0bHkuCi0gIGZ1
bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4pIHsKKyAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShj
bSwgbiwgcHJlY2lzZSkgewogICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9IGNtLmRv
YzsKICAgICBmb3IgKHZhciBzZWFyY2ggPSBuLCBsaW0gPSBuIC0gMTAwOyBzZWFyY2ggPiBsaW07
IC0tc2VhcmNoKSB7CiAgICAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgcmV0dXJuIGRvYy5m
aXJzdDsKICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpOwotICAgICAg
aWYgKGxpbmUuc3RhdGVBZnRlcikgcmV0dXJuIHNlYXJjaDsKKyAgICAgIGlmIChsaW5lLnN0YXRl
QWZ0ZXIgJiYgKCFwcmVjaXNlIHx8IHNlYXJjaCA8PSBkb2MuZnJvbnRpZXIpKSByZXR1cm4gc2Vh
cmNoOwogICAgICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBj
bS5vcHRpb25zLnRhYlNpemUpOwogICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRl
bnQgPiBpbmRlbnRlZCkgewogICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTsKQEAgLTkzOSwx
MCArOTMxLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVy
biBtaW5saW5lOwogICB9CiAKLSAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4pIHsKKyAg
ZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4sIHByZWNpc2UpIHsKICAgICB2YXIgZG9jID0g
Y20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICAgIGlmICghZG9jLm1vZGUuc3RhcnRT
dGF0ZSkgcmV0dXJuIHRydWU7Ci0gICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4pLCBz
dGF0ZSA9IHBvcyA+IGRvYy5maXJzdCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7
CisgICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9IHBv
cyA+IGRvYy5maXJzdCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7CiAgICAgaWYg
KCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRlKGRvYy5tb2RlKTsKICAgICBlbHNlIHN0YXRlID0g
Y29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAgICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlv
bihsaW5lKSB7CkBAIC05NjMsNyArOTU1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgcmV0dXJuIGUub2Zmc2V0TGVmdDsKICAgfQogCi0gIGZ1bmN0aW9uIG1lYXN1
cmVDaGFyKGNtLCBsaW5lLCBjaCwgZGF0YSkgeworICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwg
bGluZSwgY2gsIGRhdGEsIGJpYXMpIHsKICAgICB2YXIgZGlyID0gLTE7CiAgICAgZGF0YSA9IGRh
dGEgfHwgbWVhc3VyZUxpbmUoY20sIGxpbmUpOwogCkBAIC05NzIsOSArOTY0LDEzIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHIpIGJyZWFrOwogICAgICAg
aWYgKGRpciA8IDAgJiYgcG9zID09IDApIGRpciA9IDE7CiAgICAgfQorICAgIGJpYXMgPSBwb3Mg
PiBjaCA/ICJsZWZ0IiA6IHBvcyA8IGNoID8gInJpZ2h0IiA6IGJpYXM7CisgICAgaWYgKGJpYXMg
PT0gImxlZnQiICYmIHIubGVmdFNpZGUpIHIgPSByLmxlZnRTaWRlOworICAgIGVsc2UgaWYgKGJp
YXMgPT0gInJpZ2h0IiAmJiByLnJpZ2h0U2lkZSkgciA9IHIucmlnaHRTaWRlOwogICAgIHJldHVy
biB7bGVmdDogcG9zIDwgY2ggPyByLnJpZ2h0IDogci5sZWZ0LAogICAgICAgICAgICAgcmlnaHQ6
IHBvcyA+IGNoID8gci5sZWZ0IDogci5yaWdodCwKLSAgICAgICAgICAgIHRvcDogci50b3AsIGJv
dHRvbTogci5ib3R0b219OworICAgICAgICAgICAgdG9wOiByLnRvcCwKKyAgICAgICAgICAgIGJv
dHRvbTogci5ib3R0b219OwogICB9CiAKICAgZnVuY3Rpb24gZmluZENhY2hlZE1lYXN1cmVtZW50
KGNtLCBsaW5lKSB7CkBAIC0xMDQ3LDMwICsxMDQzLDUxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIGlmIChpZV9sdDkgJiYgZGlzcGxheS5tZWFzdXJlLmZpcnN0ICE9
IHByZSkKICAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsK
IAotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAo
Y3VyID0gbWVhc3VyZVtpXSkgewotICAgICAgdmFyIHNpemUgPSBnZXRSZWN0KGN1cik7Ci0gICAg
ICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgc2l6ZS50b3AgLSBvdXRlci50b3ApLCBib3QgPSBNYXRo
Lm1pbihzaXplLmJvdHRvbSAtIG91dGVyLnRvcCwgbWF4Qm90KTsKLSAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgdnJhbmdlcy5sZW5ndGg7IGogKz0gMikgewotICAgICAgICB2YXIgcnRvcCA9IHZy
YW5nZXNbal0sIHJib3QgPSB2cmFuZ2VzW2orMV07CisgICAgZnVuY3Rpb24gbWVhc3VyZVJlY3Qo
cmVjdCkgeworICAgICAgdmFyIHRvcCA9IHJlY3QudG9wIC0gb3V0ZXIudG9wLCBib3QgPSByZWN0
LmJvdHRvbSAtIG91dGVyLnRvcDsKKyAgICAgIGlmIChib3QgPiBtYXhCb3QpIGJvdCA9IG1heEJv
dDsKKyAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOworICAgICAgZm9yICh2YXIgaSA9IHZyYW5n
ZXMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAgICAgICAgdmFyIHJ0b3AgPSB2cmFu
Z2VzW2ldLCByYm90ID0gdnJhbmdlc1tpKzFdOwogICAgICAgICBpZiAocnRvcCA+IGJvdCB8fCBy
Ym90IDwgdG9wKSBjb250aW51ZTsKICAgICAgICAgaWYgKHJ0b3AgPD0gdG9wICYmIHJib3QgPj0g
Ym90IHx8CiAgICAgICAgICAgICB0b3AgPD0gcnRvcCAmJiBib3QgPj0gcmJvdCB8fAogICAgICAg
ICAgICAgTWF0aC5taW4oYm90LCByYm90KSAtIE1hdGgubWF4KHRvcCwgcnRvcCkgPj0gKGJvdCAt
IHRvcCkgPj4gMSkgewotICAgICAgICAgIHZyYW5nZXNbal0gPSBNYXRoLm1pbih0b3AsIHJ0b3Ap
OwotICAgICAgICAgIHZyYW5nZXNbaisxXSA9IE1hdGgubWF4KGJvdCwgcmJvdCk7CisgICAgICAg
ICAgdnJhbmdlc1tpXSA9IE1hdGgubWluKHRvcCwgcnRvcCk7CisgICAgICAgICAgdnJhbmdlc1tp
KzFdID0gTWF0aC5tYXgoYm90LCByYm90KTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgfQotICAgICAgaWYgKGogPT0gdnJhbmdlcy5sZW5ndGgpIHZyYW5nZXMucHVzaCh0b3As
IGJvdCk7Ci0gICAgICB2YXIgcmlnaHQgPSBzaXplLnJpZ2h0OwotICAgICAgaWYgKGN1ci5tZWFz
dXJlUmlnaHQpIHJpZ2h0ID0gZ2V0UmVjdChjdXIubWVhc3VyZVJpZ2h0KS5sZWZ0OwotICAgICAg
ZGF0YVtpXSA9IHtsZWZ0OiBzaXplLmxlZnQgLSBvdXRlci5sZWZ0LCByaWdodDogcmlnaHQgLSBv
dXRlci5sZWZ0LCB0b3A6IGp9OworICAgICAgaWYgKGkgPCAwKSB7IGkgPSB2cmFuZ2VzLmxlbmd0
aDsgdnJhbmdlcy5wdXNoKHRvcCwgYm90KTsgfQorICAgICAgcmV0dXJuIHtsZWZ0OiByZWN0Lmxl
ZnQgLSBvdXRlci5sZWZ0LAorICAgICAgICAgICAgICByaWdodDogcmVjdC5yaWdodCAtIG91dGVy
LmxlZnQsCisgICAgICAgICAgICAgIHRvcDogaSwgYm90dG9tOiBudWxsfTsKICAgICB9Ci0gICAg
Zm9yICh2YXIgaSA9IDAsIGN1cjsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIGlmIChjdXIgPSBkYXRh
W2ldKSB7Ci0gICAgICB2YXIgdnIgPSBjdXIudG9wOwotICAgICAgY3VyLnRvcCA9IHZyYW5nZXNb
dnJdOyBjdXIuYm90dG9tID0gdnJhbmdlc1t2cisxXTsKKyAgICBmdW5jdGlvbiBmaW5pc2hSZWN0
KHJlY3QpIHsKKyAgICAgIHJlY3QuYm90dG9tID0gdnJhbmdlc1tyZWN0LnRvcCsxXTsKKyAgICAg
IHJlY3QudG9wID0gdnJhbmdlc1tyZWN0LnRvcF07CiAgICAgfQogCisgICAgZm9yICh2YXIgaSA9
IDAsIGN1cjsgaSA8IG1lYXN1cmUubGVuZ3RoOyArK2kpIGlmIChjdXIgPSBtZWFzdXJlW2ldKSB7
CisgICAgICB2YXIgbm9kZSA9IGN1ciwgcmVjdCA9IG51bGw7CisgICAgICAvLyBBIHdpZGdldCBt
aWdodCB3cmFwLCBuZWVkcyBzcGVjaWFsIGNhcmUKKyAgICAgIGlmICgvXGJDb2RlTWlycm9yLXdp
ZGdldFxiLy50ZXN0KGN1ci5jbGFzc05hbWUpICYmIGN1ci5nZXRDbGllbnRSZWN0cykgeworICAg
ICAgICBpZiAoY3VyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMSkgbm9kZSA9IGN1ci5maXJzdENo
aWxkOworICAgICAgICB2YXIgcmVjdHMgPSBub2RlLmdldENsaWVudFJlY3RzKCk7CisgICAgICAg
IGlmIChyZWN0cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgcmVjdCA9IGRhdGFbaV0gPSBtZWFz
dXJlUmVjdChyZWN0c1swXSk7CisgICAgICAgICAgcmVjdC5yaWdodFNpZGUgPSBtZWFzdXJlUmVj
dChyZWN0c1tyZWN0cy5sZW5ndGggLSAxXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlm
ICghcmVjdCkgcmVjdCA9IGRhdGFbaV0gPSBtZWFzdXJlUmVjdChnZXRSZWN0KG5vZGUpKTsKKyAg
ICAgIGlmIChjdXIubWVhc3VyZVJpZ2h0KSByZWN0LnJpZ2h0ID0gZ2V0UmVjdChjdXIubWVhc3Vy
ZVJpZ2h0KS5sZWZ0OworICAgICAgaWYgKGN1ci5sZWZ0U2lkZSkgcmVjdC5sZWZ0U2lkZSA9IG1l
YXN1cmVSZWN0KGdldFJlY3QoY3VyLmxlZnRTaWRlKSk7CisgICAgfQorICAgIGZvciAodmFyIGkg
PSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgeworICAg
ICAgZmluaXNoUmVjdChjdXIpOworICAgICAgaWYgKGN1ci5sZWZ0U2lkZSkgZmluaXNoUmVjdChj
dXIubGVmdFNpZGUpOworICAgICAgaWYgKGN1ci5yaWdodFNpZGUpIGZpbmlzaFJlY3QoY3VyLnJp
Z2h0U2lkZSk7CisgICAgfQogICAgIHJldHVybiBkYXRhOwogICB9CiAKQEAgLTEwODEsNyArMTA5
OCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHNwLmNv
bGxhcHNlZCAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA9PSBsaW5lLnRleHQubGVuZ3RoKSkg
aGFzQmFkU3BhbiA9IHRydWU7CiAgICAgfQogICAgIHZhciBjYWNoZWQgPSAhaGFzQmFkU3BhbiAm
JiBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpOwotICAgIGlmIChjYWNoZWQpIHJldHVy
biBtZWFzdXJlQ2hhcihjbSwgbGluZSwgbGluZS50ZXh0Lmxlbmd0aCwgY2FjaGVkLm1lYXN1cmUp
LnJpZ2h0OworICAgIGlmIChjYWNoZWQpIHJldHVybiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgbGlu
ZS50ZXh0Lmxlbmd0aCwgY2FjaGVkLm1lYXN1cmUsICJyaWdodCIpLnJpZ2h0OwogCiAgICAgdmFy
IHByZSA9IGxpbmVDb250ZW50KGNtLCBsaW5lKTsKICAgICB2YXIgZW5kID0gcHJlLmFwcGVuZENo
aWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7CkBAIC0xMDk2LDYgKzEx
MTMsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBjbS5kaXNwbGF5
LmxpbmVOdW1DaGFycyA9IG51bGw7CiAgIH0KIAorICBmdW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHsg
cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8
IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQ7IH0KKyAgZnVuY3Rpb24gcGFnZVNjcm9sbFkoKSB7
IHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8
fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3A7IH0KKwogICAvLyBDb250ZXh0IGlzIG9uZSBvZiAi
bGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciksIG9y
ICJwYWdlIgogICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHJlY3QsIGNv
bnRleHQpIHsKICAgICBpZiAobGluZU9iai53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8IGxp
bmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSkg
ewpAQCAtMTEwNSwxMSArMTEyNSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJldHVybiByZWN0OwogICAgIGlmICghY29u
dGV4dCkgY29udGV4dCA9ICJsb2NhbCI7CiAgICAgdmFyIHlPZmYgPSBoZWlnaHRBdExpbmUoY20s
IGxpbmVPYmopOwotICAgIGlmIChjb250ZXh0ICE9ICJsb2NhbCIpIHlPZmYgLT0gY20uZGlzcGxh
eS52aWV3T2Zmc2V0OwotICAgIGlmIChjb250ZXh0ID09ICJwYWdlIikgeworICAgIGlmIChjb250
ZXh0ID09ICJsb2NhbCIpIHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKKyAgICBlbHNl
IHlPZmYgLT0gY20uZGlzcGxheS52aWV3T2Zmc2V0OworICAgIGlmIChjb250ZXh0ID09ICJwYWdl
IiB8fCBjb250ZXh0ID09ICJ3aW5kb3ciKSB7CiAgICAgICB2YXIgbE9mZiA9IGdldFJlY3QoY20u
ZGlzcGxheS5saW5lU3BhY2UpOwotICAgICAgeU9mZiArPSBsT2ZmLnRvcCArICh3aW5kb3cucGFn
ZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5z
Y3JvbGxUb3ApOwotICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAod2luZG93LnBhZ2VYT2Zm
c2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xs
TGVmdCk7CisgICAgICB5T2ZmICs9IGxPZmYudG9wICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAw
IDogcGFnZVNjcm9sbFkoKSk7CisgICAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArIChjb250ZXh0
ID09ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxYKCkpOwogICAgICAgcmVjdC5sZWZ0ICs9IHhP
ZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKICAgICB9CiAgICAgcmVjdC50b3AgKz0geU9mZjsgcmVj
dC5ib3R0b20gKz0geU9mZjsKQEAgLTExMjEsMzEgKzExNDIsMzAgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRz
LCBjb250ZXh0KSB7CiAgICAgaWYgKGNvbnRleHQgPT0gImRpdiIpIHJldHVybiBjb29yZHM7CiAg
ICAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0gY29vcmRzLnRvcDsKKyAgICAvLyBGaXJz
dCBtb3ZlIGludG8gInBhZ2UiIGNvb3JkaW5hdGUgc3lzdGVtCiAgICAgaWYgKGNvbnRleHQgPT0g
InBhZ2UiKSB7Ci0gICAgICBsZWZ0IC09IHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQ7Ci0gICAgICB0b3Ag
LT0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9j
dW1lbnQuYm9keSkuc2Nyb2xsVG9wOworICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpOworICAg
ICAgdG9wIC09IHBhZ2VTY3JvbGxZKCk7CisgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJsb2Nh
bCIgfHwgIWNvbnRleHQpIHsKKyAgICAgIHZhciBsb2NhbEJveCA9IGdldFJlY3QoY20uZGlzcGxh
eS5zaXplcik7CisgICAgICBsZWZ0ICs9IGxvY2FsQm94LmxlZnQ7CisgICAgICB0b3AgKz0gbG9j
YWxCb3gudG9wOwogICAgIH0KKwogICAgIHZhciBsaW5lU3BhY2VCb3ggPSBnZXRSZWN0KGNtLmRp
c3BsYXkubGluZVNwYWNlKTsKLSAgICBsZWZ0IC09IGxpbmVTcGFjZUJveC5sZWZ0OwotICAgIHRv
cCAtPSBsaW5lU3BhY2VCb3gudG9wOwotICAgIGlmIChjb250ZXh0ID09ICJsb2NhbCIgfHwgIWNv
bnRleHQpIHsKLSAgICAgIHZhciBlZGl0b3JCb3ggPSBnZXRSZWN0KGNtLmRpc3BsYXkud3JhcHBl
cik7Ci0gICAgICBsZWZ0ICs9IGVkaXRvckJveC5sZWZ0OwotICAgICAgdG9wICs9IGVkaXRvckJv
eC50b3A7Ci0gICAgfQotICAgIHJldHVybiB7bGVmdDogbGVmdCwgdG9wOiB0b3B9OworICAgIHJl
dHVybiB7bGVmdDogbGVmdCAtIGxpbmVTcGFjZUJveC5sZWZ0LCB0b3A6IHRvcCAtIGxpbmVTcGFj
ZUJveC50b3B9OwogICB9CiAKLSAgZnVuY3Rpb24gY2hhckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0
LCBsaW5lT2JqKSB7CisgIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGlu
ZU9iaiwgYmlhcykgewogICAgIGlmICghbGluZU9iaikgbGluZU9iaiA9IGdldExpbmUoY20uZG9j
LCBwb3MubGluZSk7Ci0gICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVh
c3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCksIGNvbnRleHQpOworICAgIHJldHVybiBpbnRv
Q29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gs
IG51bGwsIGJpYXMpLCBjb250ZXh0KTsKICAgfQogCiAgIGZ1bmN0aW9uIGN1cnNvckNvb3Jkcyhj
bSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVudCkgewogICAgIGxpbmVPYmogPSBs
aW5lT2JqIHx8IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7CiAgICAgaWYgKCFtZWFzdXJlbWVu
dCkgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShjbSwgbGluZU9iaik7CiAgICAgZnVuY3Rpb24g
Z2V0KGNoLCByaWdodCkgewotICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwg
Y2gsIG1lYXN1cmVtZW50KTsKKyAgICAgIHZhciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmos
IGNoLCBtZWFzdXJlbWVudCwgcmlnaHQgPyAicmlnaHQiIDogImxlZnQiKTsKICAgICAgIGlmIChy
aWdodCkgbS5sZWZ0ID0gbS5yaWdodDsgZWxzZSBtLnJpZ2h0ID0gbS5sZWZ0OwogICAgICAgcmV0
dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwgY29udGV4dCk7CiAgICAgfQpAQCAt
MTE3MSw4ICsxMTkxLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
cmV0dXJuIHZhbDsKICAgfQogCi0gIGZ1bmN0aW9uIFBvc01heWJlT3V0c2lkZShsaW5lLCBjaCwg
b3V0c2lkZSkgeworICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJl
bCkgewogICAgIHZhciBwb3MgPSBuZXcgUG9zKGxpbmUsIGNoKTsKKyAgICBwb3MueFJlbCA9IHhS
ZWw7CiAgICAgaWYgKG91dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKICAgICByZXR1cm4gcG9z
OwogICB9CkBAIC0xMTgxLDEwICsxMjAyLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICBmdW5jdGlvbiBjb29yZHNDaGFyKGNtLCB4LCB5KSB7CiAgICAgdmFyIGRvYyA9
IGNtLmRvYzsKICAgICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoeSA8IDAp
IHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0LCAwLCB0cnVlKTsKKyAgICBpZiAoeSA8
IDApIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIHRydWUsIC0xKTsKICAgICB2YXIg
bGluZU5vID0gbGluZUF0SGVpZ2h0KGRvYywgeSksIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6
ZSAtIDE7CiAgICAgaWYgKGxpbmVObyA+IGxhc3QpCi0gICAgICByZXR1cm4gUG9zTWF5YmVPdXRz
aWRlKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVu
Z3RoLCB0cnVlKTsKKyAgICAgIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBkb2Muc2l6
ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgdHJ1ZSwgMSk7CiAgICAgaWYg
KHggPCAwKSB4ID0gMDsKIAogICAgIGZvciAoOzspIHsKQEAgLTExOTIsNyArMTIxMyw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGZvdW5kID0gY29vcmRz
Q2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpOwogICAgICAgdmFyIG1lcmdlZCA9
IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lT2JqKTsKICAgICAgIHZhciBtZXJnZWRQb3MgPSBtZXJn
ZWQgJiYgbWVyZ2VkLmZpbmQoKTsKLSAgICAgIGlmIChtZXJnZWQgJiYgZm91bmQuY2ggPj0gbWVy
Z2VkUG9zLmZyb20uY2gpCisgICAgICBpZiAobWVyZ2VkICYmIChmb3VuZC5jaCA+IG1lcmdlZFBv
cy5mcm9tLmNoIHx8IGZvdW5kLmNoID09IG1lcmdlZFBvcy5mcm9tLmNoICYmIGZvdW5kLnhSZWwg
PiAwKSkKICAgICAgICAgbGluZU5vID0gbWVyZ2VkUG9zLnRvLmxpbmU7CiAgICAgICBlbHNlCiAg
ICAgICAgIHJldHVybiBmb3VuZDsKQEAgLTEyMTgsMTQgKzEyMzksMTUgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZyb20gPSBsaW5lTGVmdChsaW5lT2JqKSwg
dG8gPSBsaW5lUmlnaHQobGluZU9iaik7CiAgICAgdmFyIGZyb21YID0gZ2V0WChmcm9tKSwgZnJv
bU91dHNpZGUgPSB3cm9uZ0xpbmUsIHRvWCA9IGdldFgodG8pLCB0b091dHNpZGUgPSB3cm9uZ0xp
bmU7CiAKLSAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIFBvc01heWJlT3V0c2lkZShsaW5lTm8sIHRv
LCB0b091dHNpZGUpOworICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9zV2l0aEluZm8obGluZU5v
LCB0bywgdG9PdXRzaWRlLCAxKTsKICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0
aGVzZSBib3VuZHMuCiAgICAgZm9yICg7OykgewogICAgICAgaWYgKGJpZGkgPyB0byA9PSBmcm9t
IHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6IHRvIC0gZnJvbSA8PSAx
KSB7Ci0gICAgICAgIHZhciBhZnRlciA9IHggLSBmcm9tWCA8IHRvWCAtIHgsIGNoID0gYWZ0ZXIg
PyBmcm9tIDogdG87CisgICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVggPD0g
dG9YIC0geCA/IGZyb20gOiB0bzsKKyAgICAgICAgdmFyIHhEaWZmID0geCAtIChjaCA9PSBmcm9t
ID8gZnJvbVggOiB0b1gpOwogICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyLnRlc3QobGlu
ZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2NoOwotICAgICAgICB2YXIgcG9zID0gUG9zTWF5YmVP
dXRzaWRlKGxpbmVObywgY2gsIGFmdGVyID8gZnJvbU91dHNpZGUgOiB0b091dHNpZGUpOwotICAg
ICAgICBwb3MuYWZ0ZXIgPSBhZnRlcjsKKyAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZvKGxp
bmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgMCA/IC0xIDogeERpZmYgPyAxIDogMCk7CiAg
ICAgICAgIHJldHVybiBwb3M7CiAgICAgICB9CiAgICAgICB2YXIgc3RlcCA9IE1hdGguY2VpbChk
aXN0IC8gMiksIG1pZGRsZSA9IGZyb20gKyBzdGVwOwpAQCAtMTQxMSw3ICsxNDMzLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIHN1cHBvcnRlZCBvciBjb21wYXRp
YmxlIGVub3VnaCB5ZXQgdG8gcmVseSBvbi4pCiAgIGZ1bmN0aW9uIHJlYWRJbnB1dChjbSkgewog
ICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3BsYXku
cHJldklucHV0LCBkb2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5zZWw7Ci0gICAgaWYgKCFjbS5zdGF0
ZS5mb2N1c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkpIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQgfHwgaGFzU2VsZWN0aW9uKGlucHV0
KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5zdGF0ZS5kaXNhYmxlSW5wdXQpIHJldHVybiBmYWxz
ZTsKICAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlOwogICAgIGlmICh0ZXh0ID09IHByZXZJbnB1
dCAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChpZSAm
JiAhaWVfbHQ5ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPT09IHRleHQpIHsKQEAg
LTE0MjksMTEgKzE0NTEsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0g
c2FtZSkpOwogICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiBwb3NFcShmcm9tLCB0
bykgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcpCiAgICAgICB0byA9IFBvcyh0by5saW5lLCBN
YXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgKHRleHQu
bGVuZ3RoIC0gc2FtZSkpKTsKLSAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJ
bnB1dDsKLSAgICBtYWtlQ2hhbmdlKGNtLmRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDog
c3BsaXRMaW5lcyh0ZXh0LnNsaWNlKHNhbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9y
aWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lucHV0In0sICJlbmQi
KTsKIAorICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0OworICAgIHZh
ciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IHNwbGl0TGluZXModGV4
dC5zbGljZShzYW1lKSksCisgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUu
cGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lucHV0In07CisgICAgbWFrZUNoYW5nZShjbS5k
b2MsIGNoYW5nZUV2ZW50LCAiZW5kIik7CiAgICAgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRh
dGVJbnB1dDsKKyAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIsIGNtLCBjaGFuZ2VFdmVu
dCk7CisKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+
IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7CiAgICAgZWxzZSBj
bS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAgICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9u
KGNtKTsKQEAgLTE0NzQsNiArMTQ5OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91
c2VEb3duKSk7CiAgICAgaWYgKGllKQogICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwg
b3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChzaWduYWxET01FdmVudChj
bSwgZSkpIHJldHVybjsKICAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CiAg
ICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQo
Y20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKQEAg
LTE0ODEsNyArMTUwNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHdvcmQudG8pOwogICAgICAg
fSkpOwogICAgIGVsc2UKLSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIGVfcHJldmVu
dERlZmF1bHQpOworICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkg
eyBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7CiAgICAg
b24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgIGlmICgh
ZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICB9KTsKQEAgLTE1
MTMsMTEgKzE1MzksMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
Ly8gUHJldmVudCB3cmFwcGVyIGZyb20gZXZlciBzY3JvbGxpbmcKICAgICBvbihkLndyYXBwZXIs
ICJzY3JvbGwiLCBmdW5jdGlvbigpIHsgZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5z
Y3JvbGxMZWZ0ID0gMDsgfSk7CiAKKyAgICB2YXIgcmVzaXplVGltZXI7CiAgICAgZnVuY3Rpb24g
b25SZXNpemUoKSB7Ci0gICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24s
IGNsZWFyIHNpemUgY2FjaGVzLgotICAgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRl
eHRIZWlnaHQgPSBudWxsOwotICAgICAgY2xlYXJDYWNoZXMoY20pOwotICAgICAgcnVuSW5PcChj
bSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7CisgICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkg
cmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICByZXNpemVUaW1l
ciA9IG51bGw7CisgICAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlvbiwg
Y2xlYXIgc2l6ZSBjYWNoZXMuCisgICAgICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRU
ZXh0SGVpZ2h0ID0ga25vd25TY3JvbGxiYXJXaWR0aCA9IG51bGw7CisgICAgICAgIGNsZWFyQ2Fj
aGVzKGNtKTsKKyAgICAgICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7CisgICAg
ICB9LCAxMDApOwogICAgIH0KICAgICBvbih3aW5kb3csICJyZXNpemUiLCBvblJlc2l6ZSk7CiAg
ICAgLy8gQWJvdmUgaGFuZGxlciBob2xkcyBvbiB0byB0aGUgZWRpdG9yIGFuZCBpdHMgZGF0YSBz
dHJ1Y3R1cmVzLgpAQCAtMTUzMSw3ICsxNTYxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKIAogICAgIG9uKGQu
aW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGNt
Lm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3Ao
ZSkpKSByZXR1cm47CisgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlv
bnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSBy
ZXR1cm47CiAgICAgICBpZiAoZS5rZXlDb2RlID09IDE2KSBjbS5kb2Muc2VsLnNoaWZ0ID0gZmFs
c2U7CiAgICAgfSkpOwogICAgIG9uKGQuaW5wdXQsICJpbnB1dCIsIGJpbmQoZmFzdFBvbGwsIGNt
KSk7CkBAIC0xNTQxLDcgKzE1NzEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBvbihkLmlucHV0LCAiYmx1ciIsIGJpbmQob25CbHVyLCBjbSkpOwogCiAgICAgZnVu
Y3Rpb24gZHJhZ18oZSkgewotICAgICAgaWYgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20u
b3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICAgIGlmIChz
aWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRp
b25zLm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICAgZV9zdG9wKGUp
OwogICAgIH0KICAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCkgewpAQCAtMTU4MCw5ICsxNjEw
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gZXZl
bnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBu
ICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkgewotICAgICAgaWYgKCFuKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGlmICgvXGJDb2RlTWlycm9yLSg/OmxpbmUpP3dpZGdldFxiLy50
ZXN0KG4uY2xhc3NOYW1lKSB8fAotICAgICAgICAgIG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNp
emVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7CisgICAgICBpZiAoIW4gfHwg
bi5pZ25vcmVFdmVudHMgfHwgbi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAhPSBk
aXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KIApAQCAtMTYwMiw2ICsxNjMw
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgdmFyIGxhc3RDbGlj
aywgbGFzdERvdWJsZUNsaWNrOwogICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CisgICAgaWYg
KHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpKSByZXR1cm47CiAgICAgdmFyIGNtID0gdGhpcywgZGlz
cGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKICAgICBzZWwu
c2hpZnQgPSBlLnNoaWZ0S2V5OwogCkBAIC0xNzI1LDggKzE3NTQsNiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGZ1bmN0aW9uIGRvbmUoZSkgewogICAgICAgY291
bnRlciA9IEluZmluaXR5OwotICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Ci0g
ICAgICBpZiAoY3VyKSBkb1NlbGVjdChjdXIpOwogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
ICAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwg
bW92ZSk7CkBAIC0xNzQyLDExICsxNzY5LDQxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIG9uKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKICAgfQogCisgIGZ1bmN0
aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7
CisgICAgdHJ5IHsgdmFyIG1YID0gZS5jbGllbnRYLCBtWSA9IGUuY2xpZW50WTsgfQorICAgIGNh
dGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpZiAobVggPj0gTWF0aC5mbG9vcihnZXRS
ZWN0KGRpc3BsYXkuZ3V0dGVycykucmlnaHQpKSByZXR1cm4gZmFsc2U7CisgICAgZV9wcmV2ZW50
RGVmYXVsdChlKTsKKyAgICBpZiAoIWhhc0hhbmRsZXIoY20sICJndXR0ZXJDbGljayIpKSByZXR1
cm4gdHJ1ZTsKKworICAgIHZhciBsaW5lQm94ID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwor
ICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9tKSByZXR1cm4gdHJ1ZTsKKyAgICBtWSAtPSBsaW5l
Qm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgZyA9IGRpc3BsYXku
Z3V0dGVycy5jaGlsZE5vZGVzW2ldOworICAgICAgaWYgKGcgJiYgZ2V0UmVjdChnKS5yaWdodCA+
PSBtWCkgeworICAgICAgICB2YXIgbGluZSA9IGxpbmVBdEhlaWdodChjbS5kb2MsIG1ZKTsKKyAg
ICAgICAgdmFyIGd1dHRlciA9IGNtLm9wdGlvbnMuZ3V0dGVyc1tpXTsKKyAgICAgICAgc2lnbmFs
TGF0ZXIoY20sICJndXR0ZXJDbGljayIsIGNtLCBsaW5lLCBndXR0ZXIsIGUpOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvLyBLbHVk
Z2UgdG8gd29yayBhcm91bmQgc3RyYW5nZSBJRSBiZWhhdmlvciB3aGVyZSBpdCdsbCBzb21ldGlt
ZXMKKyAgLy8gcmUtZmlyZSBhIHNlcmllcyBvZiBkcmFnLXJlbGF0ZWQgZXZlbnRzIHJpZ2h0IGFm
dGVyIHRoZSBkcm9wICgjMTU1MSkKKyAgdmFyIGxhc3REcm9wID0gMDsKKwogICBmdW5jdGlvbiBv
bkRyb3AoZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20u
ZGlzcGxheSwgZSkgfHwgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRy
YWdFdmVudChjbSwgYWRkU3RvcChlKSkpKQorICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkg
fHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCAoY20ub3B0aW9ucy5vbkRyYWdFdmVu
dCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUpKSkpCiAgICAgICByZXR1
cm47CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICBpZiAoaWUpIGxhc3REcm9wID0gK25l
dyBEYXRlOwogICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9
IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgIGlmICghcG9zIHx8IGlzUmVhZE9ubHkoY20pKSBy
ZXR1cm47CiAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRl
ciAmJiB3aW5kb3cuRmlsZSkgewpAQCAtMTc4Niw0MSArMTg0MywxNiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KIAotICBmdW5jdGlvbiBjbGlja0luR3V0
dGVyKGNtLCBlKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHRyeSB7IHZh
ciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0KLSAgICBjYXRjaChlKSB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgaWYgKG1YID49IE1hdGguZmxvb3IoZ2V0UmVjdChkaXNwbGF5Lmd1
dHRlcnMpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwotICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0g
ICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ2xpY2siKSkgcmV0dXJuIHRydWU7Ci0KLSAg
ICB2YXIgbGluZUJveCA9IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsKLSAgICBpZiAobVkgPiBs
aW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7Ci0gICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNw
bGF5LnZpZXdPZmZzZXQ7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0
dGVycy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGRO
b2Rlc1tpXTsKLSAgICAgIGlmIChnICYmIGdldFJlY3QoZykucmlnaHQgPj0gbVgpIHsKLSAgICAg
ICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7Ci0gICAgICAgIHZhciBndXR0
ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07Ci0gICAgICAgIHNpZ25hbExhdGVyKGNtLCAiZ3V0
dGVyQ2xpY2siLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KICAgZnVuY3Rpb24gb25EcmFnU3RhcnQo
Y20sIGUpIHsKLSAgICBpZiAoaWUgJiYgIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCkgeyBlX3N0b3Ao
ZSk7IHJldHVybjsgfQotICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1
cm47CisgICAgaWYgKGllICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAt
IGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybjsgfQorICAgIGlmIChzaWduYWxE
T01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwog
CiAgICAgdmFyIHR4dCA9IGNtLmdldFNlbGVjdGlvbigpOwogICAgIGUuZGF0YVRyYW5zZmVyLnNl
dERhdGEoIlRleHQiLCB0eHQpOwogCiAgICAgLy8gVXNlIGR1bW15IGltYWdlIGluc3RlYWQgb2Yg
ZGVmYXVsdCBicm93c2VycyBpbWFnZS4KICAgICAvLyBSZWNlbnQgU2FmYXJpICh+Ni4wLjIpIGhh
dmUgYSB0ZW5kZW5jeSB0byBzZWdmYXVsdCB3aGVuIHRoaXMgaGFwcGVucywgc28gd2UgZG9uJ3Qg
ZG8gaXQgdGhlcmUuCi0gICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSkgeworICAg
IGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgJiYgIXNhZmFyaSkgewogICAgICAgdmFy
IGltZyA9IGVsdCgiaW1nIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsg
dG9wOiAwOyIpOwogICAgICAgaWYgKG9wZXJhKSB7CiAgICAgICAgIGltZy53aWR0aCA9IGltZy5o
ZWlnaHQgPSAxOwpAQCAtMTgyOCwxNSArMTg2MCw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1
c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVhc29uCiAgICAgICAgIGltZy5fdG9wID0g
aW1nLm9mZnNldFRvcDsKICAgICAgIH0KLSAgICAgIGlmIChzYWZhcmkpIHsKLSAgICAgICAgaWYg
KGNtLmRpc3BsYXkuZHJhZ0ltZykgewotICAgICAgICAgIGltZyA9IGNtLmRpc3BsYXkuZHJhZ0lt
ZzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjbS5kaXNwbGF5LmRyYWdJbWcgPSBpbWc7
Ci0gICAgICAgICAgaW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFC
QUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSI7Ci0gICAgICAgICAgY20u
ZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KICAg
ICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOwogICAgICAgaWYgKG9w
ZXJhKSBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOwogICAgIH0KQEAgLTE4NDksNiAr
MTg3Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChjbS5k
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Ny
b2xsVG9wID0gdmFsOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wICE9
IHZhbCkgY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IHZhbDsKICAgICBpZiAoZ2Vj
a28pIHVwZGF0ZURpc3BsYXkoY20sIFtdKTsKKyAgICBzdGFydFdvcmtlcihjbSwgMTAwKTsKICAg
fQogICBmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGNtLCB2YWwsIGlzU2Nyb2xsZXIpIHsKICAgICBp
ZiAoaXNTY3JvbGxlciA/IHZhbCA9PSBjbS5kb2Muc2Nyb2xsTGVmdCA6IE1hdGguYWJzKGNtLmRv
Yy5zY3JvbGxMZWZ0IC0gdmFsKSA8IDIpIHJldHVybjsKQEAgLTE5ODEsOCArMjAwNSwxMCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgc3RhcnRNYXAgPSBnZXRL
ZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApLCBuZXh0ID0gc3RhcnRNYXAuYXV0bzsKICAgICBjbGVh
clRpbWVvdXQobWF5YmVUcmFuc2l0aW9uKTsKICAgICBpZiAobmV4dCAmJiAhaXNNb2RpZmllcktl
eShlKSkgbWF5YmVUcmFuc2l0aW9uID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgIGlm
IChnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApID09IHN0YXJ0TWFwKQorICAgICAgaWYgKGdl
dEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApIHsKICAgICAgICAgY20ub3B0
aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGNtKSA6IG5leHQpOwor
ICAgICAgICBrZXlNYXBDaGFuZ2VkKGNtKTsKKyAgICAgIH0KICAgICB9LCA1MCk7CiAKICAgICB2
YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKQEAgLTE5OTUsMTcg
KzIwMjEsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAvLyAn
Z28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLgogICAgICAgaGFuZGxl
ZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHtyZXR1
cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9KQogICAgICAgICAgICAgIHx8IGxvb2t1
cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIGIgPT0gInN0cmluZyIgJiYgL15nb1tBLVpdLy50ZXN0KGIpKSByZXR1cm4gZG9IYW5k
bGVCaW5kaW5nKGNtLCBiKTsKKyAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3Ry
aW5nIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICB9IGVsc2UgewogICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5j
dGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KTsKICAgICB9Ci0gICAg
aWYgKGhhbmRsZWQgPT0gInN0b3AiKSBoYW5kbGVkID0gZmFsc2U7CiAKICAgICBpZiAoaGFuZGxl
ZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHJlc3RhcnRCbGluayhjbSk7
CiAgICAgICBpZiAoaWVfbHQ5KSB7IGUub2xkS2V5Q29kZSA9IGUua2V5Q29kZTsgZS5rZXlDb2Rl
ID0gMDsgfQorICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sIG5hbWUsIGUp
OwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKICAgfQpAQCAtMjAxNiw2ICsyMDQzLDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGhhbmRsZWQpIHsKICAg
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgICByZXN0YXJ0QmxpbmsoY20pOworICAgICAg
c2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sICInIiArIGNoICsgIiciLCBlKTsKICAg
ICB9CiAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgIH0KQEAgLTIwMjUsNyArMjA1Myw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBjbSA9IHRoaXM7CiAgICAgaWYg
KCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZvY3VzKGNtKTsKICAgICBpZiAoaWUgJiYgZS5rZXlDb2Rl
ID09IDI3KSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfQotICAgIGlmIChjbS5vcHRpb25zLm9u
S2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJu
OworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktleUV2ZW50
ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICB2
YXIgY29kZSA9IGUua2V5Q29kZTsKICAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGgg
ZXNjYXBlLgogICAgIGNtLmRvYy5zZWwuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUuc2hpZnRLZXk7
CkBAIC0yMDQxLDcgKzIwNjksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlm
IChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRT
dG9wKGUpKSkgcmV0dXJuOworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0
aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkp
IHJldHVybjsKICAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZSwgY2hhckNvZGUgPSBlLmNoYXJD
b2RlOwogICAgIGlmIChvcGVyYSAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0
b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQogICAgIGlmICgo
KG9wZXJhICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSB8fCBraHRtbCkgJiYgaGFuZGxl
S2V5QmluZGluZyhjbSwgZSkpIHJldHVybjsKQEAgLTIwNzksNiArMjEwNyw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIHZhciBkZXRlY3RpbmdTZWxlY3RBbGw7CiAg
IGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQo
Y20sIGUsICJjb250ZXh0bWVudSIpKSByZXR1cm47CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBzZWwgPSBjbS5kb2Muc2VsOwogICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUp
KSByZXR1cm47CiAKQEAgLTIxMzksMTEgKzIxNjgsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAKICAgLy8gVVBEQVRJTkcKIAotICBmdW5jdGlvbiBjaGFuZ2VFbmQoY2hh
bmdlKSB7CisgIHZhciBjaGFuZ2VFbmQgPSBDb2RlTWlycm9yLmNoYW5nZUVuZCA9IGZ1bmN0aW9u
KGNoYW5nZSkgewogICAgIGlmICghY2hhbmdlLnRleHQpIHJldHVybiBjaGFuZ2UudG87CiAgICAg
cmV0dXJuIFBvcyhjaGFuZ2UuZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSwKICAg
ICAgICAgICAgICAgIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0
aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSk7Ci0gIH0KKyAgfTsKIAogICAvLyBNYWtlIHN1
cmUgYSBwb3NpdGlvbiB3aWxsIGJlIHZhbGlkIGFmdGVyIHRoZSBnaXZlbiBjaGFuZ2UuCiAgIGZ1
bmN0aW9uIGNsaXBQb3N0Q2hhbmdlKGRvYywgY2hhbmdlLCBwb3MpIHsKQEAgLTIxODUsMjEgKzIy
MTQsMjEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHth
bmNob3I6IGFkanVzdFBvcyhkb2Muc2VsLmFuY2hvciksIGhlYWQ6IGFkanVzdFBvcyhkb2Muc2Vs
LmhlYWQpfTsKICAgfQogCi0gIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSkgewor
ICBmdW5jdGlvbiBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHVwZGF0ZSkgewogICAgIHZhciBv
YmogPSB7CiAgICAgICBjYW5jZWxlZDogZmFsc2UsCiAgICAgICBmcm9tOiBjaGFuZ2UuZnJvbSwK
ICAgICAgIHRvOiBjaGFuZ2UudG8sCiAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKICAgICAgIG9y
aWdpbjogY2hhbmdlLm9yaWdpbiwKLSAgICAgIHVwZGF0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIHRl
eHQsIG9yaWdpbikgewotICAgICAgICBpZiAoZnJvbSkgdGhpcy5mcm9tID0gY2xpcFBvcyhkb2Ms
IGZyb20pOwotICAgICAgICBpZiAodG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOwotICAg
ICAgICBpZiAodGV4dCkgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgaWYgKG9yaWdpbiAhPT0g
dW5kZWZpbmVkKSB0aGlzLm9yaWdpbiA9IG9yaWdpbjsKLSAgICAgIH0sCiAgICAgICBjYW5jZWw6
IGZ1bmN0aW9uKCkgeyB0aGlzLmNhbmNlbGVkID0gdHJ1ZTsgfQogICAgIH07CisgICAgaWYgKHVw
ZGF0ZSkgb2JqLnVwZGF0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCB0ZXh0LCBvcmlnaW4pIHsKKyAg
ICAgIGlmIChmcm9tKSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7CisgICAgICBpZiAo
dG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOworICAgICAgaWYgKHRleHQpIHRoaXMudGV4
dCA9IHRleHQ7CisgICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3JpZ2luID0g
b3JpZ2luOworICAgIH07CiAgICAgc2lnbmFsKGRvYywgImJlZm9yZUNoYW5nZSIsIGRvYywgb2Jq
KTsKICAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLmNt
LCBvYmopOwogCkBAIC0yMjE2LDcgKzIyNDUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICB9CiAKICAgICBpZiAoaGFzSGFuZGxlcihkb2MsICJiZWZvcmVDaGFuZ2Ui
KSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVDaGFuZ2UiKSkgewotICAg
ICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKKyAgICAgIGNoYW5nZSA9IGZp
bHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7CiAgICAgICBpZiAoIWNoYW5nZSkgcmV0dXJu
OwogICAgIH0KIApAQCAtMjI1NSwxNSArMjI4NCwyMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwogICAgIHZhciBldmVudCA9
ICh0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5wb3AoKTsKICAgICBp
ZiAoIWV2ZW50KSByZXR1cm47Ci0gICAgaGlzdC5kaXJ0eUNvdW50ZXIgKz0gdHlwZSA9PSAidW5k
byIgPyAtMSA6IDE7CiAKICAgICB2YXIgYW50aSA9IHtjaGFuZ2VzOiBbXSwgYW5jaG9yQmVmb3Jl
OiBldmVudC5hbmNob3JBZnRlciwgaGVhZEJlZm9yZTogZXZlbnQuaGVhZEFmdGVyLAotICAgICAg
ICAgICAgICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZl
bnQuaGVhZEJlZm9yZX07CisgICAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hv
ckJlZm9yZSwgaGVhZEFmdGVyOiBldmVudC5oZWFkQmVmb3JlLAorICAgICAgICAgICAgICAgIGdl
bmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn07CiAgICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC51
bmRvbmUgOiBoaXN0LmRvbmUpLnB1c2goYW50aSk7CisgICAgaGlzdC5nZW5lcmF0aW9uID0gZXZl
bnQuZ2VuZXJhdGlvbiB8fCArK2hpc3QubWF4R2VuZXJhdGlvbjsKKworICAgIHZhciBmaWx0ZXIg
PSBoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVy
KGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpOwogCiAgICAgZm9yICh2YXIgaSA9IGV2ZW50LmNoYW5n
ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgIHZhciBjaGFuZ2UgPSBldmVudC5j
aGFuZ2VzW2ldOwogICAgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7CisgICAgICBpZiAoZmlsdGVy
ICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkgeworICAgICAgICAodHlwZSA9
PSAidW5kbyIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSkubGVuZ3RoID0gMDsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorCiAgICAgICBhbnRpLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdl
RnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpOwogCiAgICAgICB2YXIgYWZ0ZXIgPSBpID8gY29tcHV0
ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBudWxsKQpAQCAtMjUyNyw5ICsyNTY0LDkgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNv
ckludG9WaWV3KGNtKSB7CiAgICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBj
bS5kb2Muc2VsLmhlYWQsIGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luKTsKICAgICBpZiAo
IWNtLnN0YXRlLmZvY3VzZWQpIHJldHVybjsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXks
IGJveCA9IGdldFJlY3QoZGlzcGxheS5zaXplciksIGRvU2Nyb2xsID0gbnVsbCwgcFRvcCA9IHBh
ZGRpbmdUb3AoY20uZGlzcGxheSk7Ci0gICAgaWYgKGNvb3Jkcy50b3AgKyBwVG9wICsgYm94LnRv
cCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgcFRv
cCArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOworICAgIHZhciBkaXNwbGF5ID0g
Y20uZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBudWxs
OworICAgIGlmIChjb29yZHMudG9wICsgYm94LnRvcCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsKKyAg
ICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQg
fHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFs
c2U7CiAgICAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHsKICAgICAgIHZhciBo
aWRkZW4gPSBkaXNwbGF5LmN1cnNvci5zdHlsZS5kaXNwbGF5ID09ICJub25lIjsKICAgICAgIGlm
IChoaWRkZW4pIHsKQEAgLTI1NjcsMTIgKzI2MDQsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgx
LCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBwdCA9IHBhZGRp
bmdUb3AoZGlzcGxheSk7Ci0gICAgeTEgKz0gcHQ7IHkyICs9IHB0OworICAgIHZhciBkaXNwbGF5
ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7CiAgICAg
aWYgKHkxIDwgMCkgeTEgPSAwOwogICAgIHZhciBzY3JlZW4gPSBkaXNwbGF5LnNjcm9sbGVyLmNs
aWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmLCBzY3JlZW50b3AgPSBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcCwgcmVzdWx0ID0ge307CiAgICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWln
aHQgKyBwYWRkaW5nVmVydChkaXNwbGF5KTsKLSAgICB2YXIgYXRUb3AgPSB5MSA8IHB0ICsgMTAs
IGF0Qm90dG9tID0geTIgKyBwdCA+IGRvY0JvdHRvbSAtIDEwOworICAgIHZhciBhdFRvcCA9IHkx
IDwgc25hcE1hcmdpbiwgYXRCb3R0b20gPSB5MiA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47CiAg
ICAgaWYgKHkxIDwgc2NyZWVudG9wKSB7CiAgICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3Ag
PyAwIDogeTE7CiAgICAgfSBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNjcmVlbikgewpAQCAt
MjYwOSw3ICsyNjQ1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAg
ZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7CiAgICAgdmFyIGRv
YyA9IGNtLmRvYzsKLSAgICBpZiAoIWhvdykgaG93ID0gImFkZCI7CisgICAgaWYgKGhvdyA9PSBu
dWxsKSBob3cgPSAiYWRkIjsKICAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgIGlmICgh
Y20uZG9jLm1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CiAgICAgICBlbHNlIHZhciBzdGF0ZSA9
IGdldFN0YXRlQmVmb3JlKGNtLCBuKTsKQEAgLTI2MzIsNiArMjY2OCw4IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNt
Lm9wdGlvbnMuaW5kZW50VW5pdDsKICAgICB9IGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSB7
CiAgICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gY20ub3B0aW9ucy5pbmRlbnRVbml0Owor
ICAgIH0gZWxzZSBpZiAodHlwZW9mIGhvdyA9PSAibnVtYmVyIikgeworICAgICAgaW5kZW50YXRp
b24gPSBjdXJTcGFjZSArIGhvdzsKICAgICB9CiAgICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgw
LCBpbmRlbnRhdGlvbik7CiAKQEAgLTI3MjAsNyArMjc1OCw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBvcykgewogICAg
IHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgIGlmIChsaW5lKSB7Ci0gICAg
ICBpZiAocG9zLmFmdGVyID09PSBmYWxzZSB8fCBlbmQgPT0gbGluZS5sZW5ndGgpIC0tc3RhcnQ7
IGVsc2UgKytlbmQ7CisgICAgICBpZiAoKHBvcy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5n
dGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwogICAgICAgdmFyIHN0YXJ0Q2hhciA9
IGxpbmUuY2hhckF0KHN0YXJ0KTsKICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRD
aGFyKSA/IGlzV29yZENoYXIKICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0
aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQpAQCAtMjc2MSw3ICsyNzk5LDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlv
bihtYXApIHsKICAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwogICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAoKHR5cGVvZiBt
YXAgPT0gInN0cmluZyIgPyBtYXBzW2ldLm5hbWUgOiBtYXBzW2ldKSA9PSBtYXApIHsKKyAgICAg
ICAgaWYgKG1hcHNbaV0gPT0gbWFwIHx8ICh0eXBlb2YgbWFwc1tpXSAhPSAic3RyaW5nIiAmJiBt
YXBzW2ldLm5hbWUgPT0gbWFwKSkgewogICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOwogICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNzc3LDcgKzI4MTUsOCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZW1vdmVPdmVybGF5OiBvcGVyYXRp
b24obnVsbCwgZnVuY3Rpb24oc3BlYykgewogICAgICAgdmFyIG92ZXJsYXlzID0gdGhpcy5zdGF0
ZS5vdmVybGF5czsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKG92ZXJsYXlzW2ldLm1vZGVTcGVjID09IHNwZWMpIHsKKyAgICAg
ICAgdmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVjOworICAgICAgICBpZiAoY3VyID09IHNw
ZWMgfHwgdHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgY3VyLm5hbWUgPT0gc3BlYykgewogICAg
ICAgICAgIG92ZXJsYXlzLnNwbGljZShpLCAxKTsKICAgICAgICAgICB0aGlzLnN0YXRlLm1vZGVH
ZW4rKzsKICAgICAgICAgICByZWdDaGFuZ2UodGhpcyk7CkBAIC0yNzg3LDcgKzI4MjYsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9KSwKIAogICAgIGluZGVudExp
bmU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKLSAgICAg
IGlmICh0eXBlb2YgZGlyICE9ICJzdHJpbmciKSB7CisgICAgICBpZiAodHlwZW9mIGRpciAhPSAi
c3RyaW5nIiAmJiB0eXBlb2YgZGlyICE9ICJudW1iZXIiKSB7CiAgICAgICAgIGlmIChkaXIgPT0g
bnVsbCkgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50ID8gInNtYXJ0IiA6ICJwcmV2IjsK
ICAgICAgICAgZWxzZSBkaXIgPSBkaXIgPyAiYWRkIiA6ICJzdWJ0cmFjdCI7CiAgICAgICB9CkBA
IC0yODAyLDEwICsyODQxLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
CiAgICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuIFVz
ZWZ1bCBmb3IgaGFja3MKICAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0
ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCi0gICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zKSB7
CisgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVjaXNlKSB7CiAgICAgICB2YXIgZG9j
ID0gdGhpcy5kb2M7CiAgICAgICBwb3MgPSBjbGlwUG9zKGRvYywgcG9zKTsKLSAgICAgIHZhciBz
dGF0ZSA9IGdldFN0YXRlQmVmb3JlKHRoaXMsIHBvcy5saW5lKSwgbW9kZSA9IHRoaXMuZG9jLm1v
ZGU7CisgICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGluZSwgcHJl
Y2lzZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOwogICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRv
YywgcG9zLmxpbmUpOwogICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50
ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBv
cy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7CkBAIC0yODIwLDEwICsyODU5LDM3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9Owog
ICAgIH0sCiAKLSAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7CisgICAgZ2V0VG9r
ZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykgeworICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywg
cG9zKTsKKyAgICAgIHZhciBzdHlsZXMgPSBnZXRMaW5lU3R5bGVzKHRoaXMsIGdldExpbmUodGhp
cy5kb2MsIHBvcy5saW5lKSk7CisgICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVz
Lmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7CisgICAgICBpZiAoY2ggPT0gMCkgcmV0dXJu
IHN0eWxlc1syXTsKKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgdmFyIG1pZCA9IChiZWZvcmUg
KyBhZnRlcikgPj4gMTsKKyAgICAgICAgaWYgKChtaWQgPyBzdHlsZXNbbWlkICogMiAtIDFdIDog
MCkgPj0gY2gpIGFmdGVyID0gbWlkOworICAgICAgICBlbHNlIGlmIChzdHlsZXNbbWlkICogMiAr
IDFdIDwgY2gpIGJlZm9yZSA9IG1pZCArIDE7CisgICAgICAgIGVsc2UgcmV0dXJuIHN0eWxlc1tt
aWQgKiAyICsgMl07CisgICAgICB9CisgICAgfSwKKworICAgIGdldE1vZGVBdDogZnVuY3Rpb24o
cG9zKSB7CisgICAgICB2YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7CisgICAgICBpZiAoIW1vZGUu
aW5uZXJNb2RlKSByZXR1cm4gbW9kZTsKKyAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9k
ZShtb2RlLCB0aGlzLmdldFRva2VuQXQocG9zKS5zdGF0ZSkubW9kZTsKKyAgICB9LAorCisgICAg
Z2V0SGVscGVyOiBmdW5jdGlvbihwb3MsIHR5cGUpIHsKKyAgICAgIGlmICghaGVscGVycy5oYXNP
d25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuOworICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVd
LCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKTsKKyAgICAgIHJldHVybiBtb2RlW3R5cGVdICYm
IGhlbHBbbW9kZVt0eXBlXV0gfHwKKyAgICAgICAgbW9kZS5oZWxwZXJUeXBlICYmIGhlbHBbbW9k
ZS5oZWxwZXJUeXBlXSB8fAorICAgICAgICBoZWxwW21vZGUubmFtZV07CisgICAgfSwKKworICAg
IGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHsKICAgICAgIHZhciBkb2Mg
PSB0aGlzLmRvYzsKICAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRv
Yy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSk7Ci0gICAgICByZXR1cm4gZ2V0U3RhdGVCZWZv
cmUodGhpcywgbGluZSArIDEpOworICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxp
bmUgKyAxLCBwcmVjaXNlKTsKICAgICB9LAogCiAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihz
dGFydCwgbW9kZSkgewpAQCAtMjg0Myw2ICsyOTA5LDE5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQs
IGNvb3Jkcy50b3ApOwogICAgIH0sCiAKKyAgICBsaW5lQXRIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdo
dCwgbW9kZSkgeworICAgICAgaGVpZ2h0ID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIHt0b3A6IGhl
aWdodCwgbGVmdDogMH0sIG1vZGUgfHwgInBhZ2UiKS50b3A7CisgICAgICByZXR1cm4gbGluZUF0
SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7CisgICAg
fSwKKyAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUpIHsKKyAgICAgIHZhciBl
bmQgPSBmYWxzZSwgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7Cisg
ICAgICBpZiAobGluZSA8IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7Cisg
ICAgICBlbHNlIGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQor
ICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKKyAgICAgIHJldHVy
biBpbnRvQ29vcmRTeXN0ZW0odGhpcywgZ2V0TGluZSh0aGlzLmRvYywgbGluZSksIHt0b3A6IDAs
IGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wICsKKyAgICAgICAgKGVuZCA/IGxpbmVPYmou
aGVpZ2h0IDogMCk7CisgICAgfSwKKwogICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KTsgfSwKICAgICBkZWZhdWx0Q2hhcldp
ZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkpOyB9LAogCkBA
IC0yODcxLDcgKzI5NTAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewogICAg
ICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0g
ImJhY2tncm91bmQiID8gImJnQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAgICAgIGlmICghbGlu
ZVtwcm9wXSkgbGluZVtwcm9wXSA9IGNsczsKLSAgICAgICAgZWxzZSBpZiAobmV3IFJlZ0V4cCgi
XFxiIiArIGNscyArICJcXGIiKS50ZXN0KGxpbmVbcHJvcF0pKSByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpIiku
dGVzdChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlIGxpbmVbcHJvcF0g
Kz0gIiAiICsgY2xzOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0pOwpAQCAtMjg4NCw5
ICsyOTYzLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBp
ZiAoIWN1cikgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgbGlu
ZVtwcm9wXSA9IG51bGw7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgIHZhciB1cGQgPSBjdXIu
cmVwbGFjZShuZXcgUmVnRXhwKCJeIiArIGNscyArICJcXGJcXHMqfFxccypcXGIiICsgY2xzICsg
IlxcYiIpLCAiIik7Ci0gICAgICAgICAgaWYgKHVwZCA9PSBjdXIpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBsaW5lW3Byb3BdID0gdXBkIHx8IG51bGw7CisgICAgICAgICAgdmFyIGZvdW5kID0g
Y3VyLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiICsgY2xzICsgIig/OiR8XFxzKykiKSk7
CisgICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHZhciBlbmQg
PSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDsKKyAgICAgICAgICBsaW5lW3Byb3BdID0g
Y3VyLnNsaWNlKDAsIGZvdW5kLmluZGV4KSArICghZm91bmQuaW5kZXggfHwgZW5kID09IGN1ci5s
ZW5ndGggPyAiIiA6ICIgIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxsOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfSk7CkBAIC0yOTM0LDcgKzMwMTQsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9m
ZnNldFdpZHRoID4gaHNwYWNlKQogICAgICAgICAgIGxlZnQgPSBoc3BhY2UgLSBub2RlLm9mZnNl
dFdpZHRoOwogICAgICAgfQotICAgICAgbm9kZS5zdHlsZS50b3AgPSAodG9wICsgcGFkZGluZ1Rv
cChkaXNwbGF5KSkgKyAicHgiOworICAgICAgbm9kZS5zdHlsZS50b3AgPSB0b3AgKyAicHgiOwog
ICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgaWYg
KGhvcml6ID09ICJyaWdodCIpIHsKICAgICAgICAgbGVmdCA9IGRpc3BsYXkuc2l6ZXIuY2xpZW50
V2lkdGggLSBub2RlLm9mZnNldFdpZHRoOwpAQCAtMzA0NCw5ICszMTI0LDYgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICB9LAog
Ci0gICAgb246IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9LAotICAgIG9m
ZjogZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9LAotCiAgICAgb3BlcmF0
aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKTt9LAogCiAgICAgcmVmcmVz
aDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKCkgewpAQCAtMzA3MCw2ICszMTQ3LDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBm
dW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7fSwKICAgICBnZXRHdXR0ZXJF
bGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyczt9CiAgIH07Cisg
IGV2ZW50TWl4aW4oQ29kZU1pcnJvcik7CiAKICAgLy8gT1BUSU9OIERFRkFVTFRTCiAKQEAgLTMx
OTQsNyArMzI3Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9Owog
CiAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKLSAgICBz
cGVjID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKKyAgICB2YXIgc3BlYyA9IENvZGVN
aXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7CiAgICAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5u
YW1lXTsKICAgICBpZiAoIW1mYWN0b3J5KSByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlv
bnMsICJ0ZXh0L3BsYWluIik7CiAgICAgdmFyIG1vZGVPYmogPSBtZmFjdG9yeShvcHRpb25zLCBz
cGVjKTsKQEAgLTMyMDcsNiArMzI4NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgfQogICAgIH0KICAgICBtb2RlT2JqLm5hbWUgPSBzcGVjLm5hbWU7CisKICAg
ICByZXR1cm4gbW9kZU9iajsKICAgfTsKIApAQCAtMzIzNCw2ICszMzEzLDE2IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB2YXIgaW5pdEhvb2tzID0gW107CiAgIENvZGVN
aXJyb3IuZGVmaW5lSW5pdEhvb2sgPSBmdW5jdGlvbihmKSB7aW5pdEhvb2tzLnB1c2goZik7fTsK
IAorICB2YXIgaGVscGVycyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9OworICBDb2RlTWlycm9y
LnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFsdWUpIHsKKyAgICBpZiAo
IWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIGhlbHBlcnNbdHlwZV0gPSBDb2RlTWlycm9y
W3R5cGVdID0ge307CisgICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOworICB9OworCisg
IC8vIFVUSUxJVElFUworCisgIENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9IGlzV29yZENoYXI7CisK
ICAgLy8gTU9ERSBTVEFURSBIQU5ETElORwogCiAgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3
b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKQEAgLTMyNzksNiArMzM2
OCwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBsID0g
Y20uZ2V0Q3Vyc29yKCkubGluZTsKICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGwsIDAp
LCBQb3MobCksICIrZGVsZXRlIik7CiAgICAgfSwKKyAgICBkZWxMaW5lTGVmdDogZnVuY3Rpb24o
Y20pIHsKKyAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKKyAgICAgIGNtLnJlcGxhY2VS
YW5nZSgiIiwgUG9zKGN1ci5saW5lLCAwKSwgY3VyLCAiK2RlbGV0ZSIpOworICAgIH0sCiAgICAg
dW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKICAgICByZWRvOiBmdW5jdGlvbihjbSkg
e2NtLnJlZG8oKTt9LAogICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0ZW5kU2Vs
ZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpO30sCkBAIC0zMzc0LDcgKzM0NjcsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAiQWx0LVJpZ2h0IjogImdvR3Jv
dXBSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5l
RW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAogICAgICJDdHJsLUFsdC1C
YWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIi
LCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUciOiAiZmluZE5l
eHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAi
U2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAotICAgICJDbWQtWyI6ICJpbmRlbnRMZXNz
IiwgIkNtZC1dIjogImluZGVudE1vcmUiLAorICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNt
ZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJhY2tzcGFjZSI6ICJkZWxMaW5lTGVmdCIsCiAgICAg
ZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KICAgfTsKICAga2V5TWFwWyJkZWZhdWx0
Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CkBAIC0zNDEz
LDcgKzM1MDYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGRvbmUgPSBs
b29rdXAobWFwc1tpXSk7Ci0gICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmU7CisgICAgICBpZiAo
ZG9uZSkgcmV0dXJuIGRvbmUgIT0gInN0b3AiOwogICAgIH0KICAgfQogICBmdW5jdGlvbiBpc01v
ZGlmaWVyS2V5KGV2ZW50KSB7CkBAIC0zNTY3LDYgKzM2NjAsNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICB0aGlzLmRvYyA9IGRvYzsKICAgfQogICBDb2RlTWlycm9y
LlRleHRNYXJrZXIgPSBUZXh0TWFya2VyOworICBldmVudE1peGluKFRleHRNYXJrZXIpOwogCiAg
IFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgaWYgKHRoaXMu
ZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKQEAgLTM1OTUsNyArMzY4OSw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSkgcmVn
Q2hhbmdlKGNtLCBtaW4sIG1heCArIDEpOwogICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDsKICAg
ICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTsKLSAgICBpZiAodGhpcy5jb2xsYXBzZWQg
JiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKKyAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2Mu
Y2FudEVkaXQpIHsKICAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7CiAgICAgICBpZiAo
Y20pIHJlQ2hlY2tTZWxlY3Rpb24oY20pOwogICAgIH0KQEAgLTM2NTgsNiArMzc1Miw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChtYXJrZXIucmVwbGFjZWRX
aXRoKSB7CiAgICAgICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTsKICAgICAgIG1hcmtlci5yZXBs
YWNlZFdpdGggPSBlbHQoInNwYW4iLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0sICJDb2RlTWlycm9y
LXdpZGdldCIpOworICAgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzKSBtYXJrZXIu
cmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cyA9IHRydWU7CiAgICAgfQogICAgIGlmIChtYXJrZXIu
Y29sbGFwc2VkKSBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7CiAKQEAgLTM3MDAsNyArMzc5NSw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgICBpZiAoY20p
IHsKICAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1
ZTsKLSAgICAgIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1h
cmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY29sbGFwc2VkKQorICAgICAgaWYgKG1hcmtlci5jbGFz
c05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRT
dHlsZSB8fCBtYXJrZXIuY29sbGFwc2VkKQogICAgICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGlu
ZSwgdG8ubGluZSArIDEpOwogICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rp
b24oY20pOwogICAgIH0KQEAgLTM3MTgsNiArMzgxMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQogICBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIg
PSBTaGFyZWRUZXh0TWFya2VyOworICBldmVudE1peGluKFNoYXJlZFRleHRNYXJrZXIpOwogCiAg
IFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgaWYg
KHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKQEAgLTM4MzEsNiArMzkyNywxMyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgfQogICAgICAgfQogICAg
IH0KKyAgICBpZiAoc2FtZUxpbmUgJiYgZmlyc3QpIHsKKyAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBk
aWRuJ3QgY3JlYXRlIGFueSB6ZXJvLWxlbmd0aCBzcGFucworICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBmaXJzdC5sZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKGZpcnN0W2ldLmZyb20gIT0gbnVs
bCAmJiBmaXJzdFtpXS5mcm9tID09IGZpcnN0W2ldLnRvICYmIGZpcnN0W2ldLm1hcmtlci50eXBl
ICE9ICJib29rbWFyayIpCisgICAgICAgICAgZmlyc3Quc3BsaWNlKGktLSwgMSk7CisgICAgICBp
ZiAoIWZpcnN0Lmxlbmd0aCkgZmlyc3QgPSBudWxsOworICAgIH0KIAogICAgIHZhciBuZXdNYXJr
ZXJzID0gW2ZpcnN0XTsKICAgICBpZiAoIXNhbWVMaW5lKSB7CkBAIC0zOTI1LDYgKzQwMjgsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHNwID0gc3BzW2ldOwog
ICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250aW51ZTsKICAgICAgIGlmIChzcC5m
cm9tID09IG51bGwpIHJldHVybiB0cnVlOworICAgICAgaWYgKHNwLm1hcmtlci5yZXBsYWNlZFdp
dGgpIGNvbnRpbnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5tYXJrZXIuaW5jbHVz
aXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzkzOCw3ICs0MDQyLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBmb3IgKHZhciBzcCwgaSA9
IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CiAgICAgICBzcCA9IGxpbmUu
bWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiBzcC5mcm9t
ID09IHNwYW4udG8gJiYKKyAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJr
ZXIucmVwbGFjZWRXaXRoICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgogICAgICAgICAgIChzcC5t
YXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCkgJiYKICAg
ICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMzk2MiwxMSArNDA2NiwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgLy8gTElORSBXSURHRVRTCiAKICAgdmFyIExpbmVXaWRnZXQgPSBDb2RlTWlycm9y
LkxpbmVXaWRnZXQgPSBmdW5jdGlvbihjbSwgbm9kZSwgb3B0aW9ucykgewotICAgIGZvciAodmFy
IG9wdCBpbiBvcHRpb25zKSBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQorICAgIGlm
IChvcHRpb25zKSBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgaWYgKG9wdGlvbnMuaGFzT3duUHJv
cGVydHkob3B0KSkKICAgICAgIHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTsKICAgICB0aGlzLmNt
ID0gY207CiAgICAgdGhpcy5ub2RlID0gbm9kZTsKICAgfTsKKyAgZXZlbnRNaXhpbihMaW5lV2lk
Z2V0KTsKICAgZnVuY3Rpb24gd2lkZ2V0T3BlcmF0aW9uKGYpIHsKICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7CiAgICAgICB2YXIgd2l0aE9wID0gIXRoaXMuY20uY3VyT3A7CkBAIC0zOTgxLDcgKzQw
ODYsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAobm8gPT0g
bnVsbCB8fCAhd3MpIHJldHVybjsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsg
KytpKSBpZiAod3NbaV0gPT0gdGhpcykgd3Muc3BsaWNlKGktLSwgMSk7CiAgICAgaWYgKCF3cy5s
ZW5ndGgpIHRoaXMubGluZS53aWRnZXRzID0gbnVsbDsKKyAgICB2YXIgYWJvdmVWaXNpYmxlID0g
aGVpZ2h0QXRMaW5lKHRoaXMuY20sIHRoaXMubGluZSkgPCB0aGlzLmNtLmRvYy5zY3JvbGxUb3A7
CiAgICAgdXBkYXRlTGluZUhlaWdodCh0aGlzLmxpbmUsIE1hdGgubWF4KDAsIHRoaXMubGluZS5o
ZWlnaHQgLSB3aWRnZXRIZWlnaHQodGhpcykpKTsKKyAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRU
b1Njcm9sbFBvcyh0aGlzLmNtLCAwLCAtdGhpcy5oZWlnaHQpOwogICAgIHJlZ0NoYW5nZSh0aGlz
LmNtLCBubywgbm8gKyAxKTsKICAgfSk7CiAgIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQg
PSB3aWRnZXRPcGVyYXRpb24oZnVuY3Rpb24oKSB7CkBAIC00MDA1LDEwICs0MTEyLDEyIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciB3aWRnZXQgPSBuZXcgTGlu
ZVdpZGdldChjbSwgbm9kZSwgb3B0aW9ucyk7CiAgICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpIGNt
LmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKICAgICBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUs
IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIChsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9
IFtdKSkucHVzaCh3aWRnZXQpOworICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwg
KGxpbmUud2lkZ2V0cyA9IFtdKTsKKyAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkg
d2lkZ2V0cy5wdXNoKHdpZGdldCk7CisgICAgICBlbHNlIHdpZGdldHMuc3BsaWNlKE1hdGgubWlu
KHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdp
ZGdldCk7CiAgICAgICB3aWRnZXQubGluZSA9IGxpbmU7CiAgICAgICBpZiAoIWxpbmVJc0hpZGRl
bihjbS5kb2MsIGxpbmUpIHx8IHdpZGdldC5zaG93SWZIaWRkZW4pIHsKLSAgICAgICAgdmFyIGFi
b3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShjbSwgbGluZSkgPCBjbS5kaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcDsKKyAgICAgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShjbSwg
bGluZSkgPCBjbS5kb2Muc2Nyb2xsVG9wOwogICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUs
IGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpOwogICAgICAgICBpZiAoYWJvdmVW
aXNpYmxlKSBhZGRUb1Njcm9sbFBvcyhjbSwgMCwgd2lkZ2V0LmhlaWdodCk7CiAgICAgICB9CkBA
IC00MDIxLDEyICs0MTMwLDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
CiAgIC8vIExpbmUgb2JqZWN0cy4gVGhlc2UgaG9sZCBzdGF0ZSByZWxhdGVkIHRvIGEgbGluZSwg
aW5jbHVkaW5nCiAgIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KLSAg
ZnVuY3Rpb24gbWFrZUxpbmUodGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7Ci0g
ICAgdmFyIGxpbmUgPSB7dGV4dDogdGV4dH07Ci0gICAgYXR0YWNoTWFya2VkU3BhbnMobGluZSwg
bWFya2VkU3BhbnMpOwotICAgIGxpbmUuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0
ZUhlaWdodChsaW5lKSA6IDE7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KKyAgdmFyIExpbmUgPSBD
b2RlTWlycm9yLkxpbmUgPSBmdW5jdGlvbih0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWln
aHQpIHsKKyAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgIGF0dGFjaE1hcmtlZFNwYW5zKHRoaXMs
IG1hcmtlZFNwYW5zKTsKKyAgICB0aGlzLmhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1h
dGVIZWlnaHQodGhpcykgOiAxOworICB9OworICBldmVudE1peGluKExpbmUpOwogCiAgIGZ1bmN0
aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7
CiAgICAgbGluZS50ZXh0ID0gdGV4dDsKQEAgLTQwNTAsNyArNDE1OSw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2Rl
LCBzdGF0ZSwgZikgewogICAgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2RlLmZsYXR0ZW5TcGFuczsK
ICAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFucyA9IGNtLm9wdGlvbnMu
ZmxhdHRlblNwYW5zOwotICAgIHZhciBjdXJUZXh0ID0gIiIsIGN1clN0eWxlID0gbnVsbDsKKyAg
ICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHlsZSA9IG51bGw7CiAgICAgdmFyIHN0cmVhbSA9IG5l
dyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgc3R5bGU7CiAgICAgaWYg
KHRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKICAg
ICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewpAQCAtNDA2MiwxNCArNDE3MSwxMyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHN0eWxl
ID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgIH0KLSAgICAgIHZhciBzdWJzdHIg
PSBzdHJlYW0uY3VycmVudCgpOwotICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAg
ICAgIGlmICghZmxhdHRlblNwYW5zIHx8IGN1clN0eWxlICE9IHN0eWxlKSB7Ci0gICAgICAgIGlm
IChjdXJUZXh0KSBmKGN1clRleHQsIGN1clN0eWxlKTsKLSAgICAgICAgY3VyVGV4dCA9IHN1YnN0
cjsgY3VyU3R5bGUgPSBzdHlsZTsKLSAgICAgIH0gZWxzZSBjdXJUZXh0ID0gY3VyVGV4dCArIHN1
YnN0cjsKKyAgICAgICAgaWYgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSBmKHN0cmVhbS5zdGFy
dCwgY3VyU3R5bGUpOworICAgICAgICBjdXJTdGFydCA9IHN0cmVhbS5zdGFydDsgY3VyU3R5bGUg
PSBzdHlsZTsKKyAgICAgIH0KKyAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAg
fQotICAgIGlmIChjdXJUZXh0KSBmKGN1clRleHQsIGN1clN0eWxlKTsKKyAgICBpZiAoY3VyU3Rh
cnQgPCBzdHJlYW0ucG9zKSBmKHN0cmVhbS5wb3MsIGN1clN0eWxlKTsKICAgfQogCiAgIGZ1bmN0
aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlKSB7CkBAIC00MDc3LDI3ICs0MTg1LDI0
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIG1vZGUvb3Zlcmxh
eXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS4KICAgICB2YXIg
c3QgPSBbY20uc3RhdGUubW9kZUdlbl07CiAgICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBv
ZiBzdHlsZXMKLSAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBzdGF0ZSwg
ZnVuY3Rpb24odHh0LCBzdHlsZSkge3N0LnB1c2godHh0LCBzdHlsZSk7fSk7CisgICAgcnVuTW9k
ZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUp
IHtzdC5wdXNoKGVuZCwgc3R5bGUpO30pOwogCiAgICAgLy8gUnVuIG92ZXJsYXlzLCBhZGp1c3Qg
c3R5bGUgYXJyYXkuCiAgICAgZm9yICh2YXIgbyA9IDA7IG8gPCBjbS5zdGF0ZS5vdmVybGF5cy5s
ZW5ndGg7ICsrbykgewotICAgICAgdmFyIG92ZXJsYXkgPSBjbS5zdGF0ZS5vdmVybGF5c1tvXSwg
aSA9IDE7Ci0gICAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgdHJ1ZSwg
ZnVuY3Rpb24odHh0LCBzdHlsZSkgewotICAgICAgICB2YXIgc3RhcnQgPSBpLCBsZW4gPSB0eHQu
bGVuZ3RoOworICAgICAgdmFyIG92ZXJsYXkgPSBjbS5zdGF0ZS5vdmVybGF5c1tvXSwgaSA9IDEs
IGF0ID0gMDsKKyAgICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgb3ZlcmxheS5tb2RlLCB0cnVl
LCBmdW5jdGlvbihlbmQsIHN0eWxlKSB7CisgICAgICAgIHZhciBzdGFydCA9IGk7CiAgICAgICAg
IC8vIEVuc3VyZSB0aGVyZSdzIGEgdG9rZW4gZW5kIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBh
bmQgdGhhdCBpIHBvaW50cyBhdCBpdAotICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAg
dmFyIGN1ciA9IHN0W2ldLCBsZW5fID0gY3VyLmxlbmd0aDsKLSAgICAgICAgICBpZiAobGVuXyA8
PSBsZW4pIHsKLSAgICAgICAgICAgIGxlbiAtPSBsZW5fOwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzdC5zcGxpY2UoaSwgMSwgY3VyLnNsaWNlKDAsIGxlbiksIHN0W2krMV0sIGN1
ci5zbGljZShsZW4pKTsKLSAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgfQorICAgICAg
ICB3aGlsZSAoYXQgPCBlbmQpIHsKKyAgICAgICAgICB2YXIgaV9lbmQgPSBzdFtpXTsKKyAgICAg
ICAgICBpZiAoaV9lbmQgPiBlbmQpCisgICAgICAgICAgICBzdC5zcGxpY2UoaSwgMSwgZW5kLCBz
dFtpKzFdLCBpX2VuZCk7CiAgICAgICAgICAgaSArPSAyOworICAgICAgICAgIGF0ID0gTWF0aC5t
aW4oZW5kLCBpX2VuZCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFzdHlsZSkgcmV0dXJuOwog
ICAgICAgICBpZiAob3ZlcmxheS5vcGFxdWUpIHsKLSAgICAgICAgICBzdC5zcGxpY2Uoc3RhcnQs
IGkgLSBzdGFydCwgdHh0LCBzdHlsZSk7CisgICAgICAgICAgc3Quc3BsaWNlKHN0YXJ0LCBpIC0g
c3RhcnQsIGVuZCwgc3R5bGUpOwogICAgICAgICAgIGkgPSBzdGFydCArIDI7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgaTsgc3RhcnQgKz0gMikgewpAQCAtNDEz
NywzNyArNDI0MiwzMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQog
CiAgIGZ1bmN0aW9uIGxpbmVDb250ZW50KGNtLCByZWFsTGluZSwgbWVhc3VyZSkgewotICAgIHZh
ciBtZXJnZWQsIGxpbmUgPSByZWFsTGluZSwgbGluZUJlZm9yZSwgc2F3QmVmb3JlLCBzaW1wbGUg
PSB0cnVlOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkg
ewotICAgICAgc2ltcGxlID0gZmFsc2U7CisgICAgdmFyIG1lcmdlZCwgbGluZSA9IHJlYWxMaW5l
LCBlbXB0eSA9IHRydWU7CisgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0
KGxpbmUpKQogICAgICAgbGluZSA9IGdldExpbmUoY20uZG9jLCBtZXJnZWQuZmluZCgpLmZyb20u
bGluZSk7Ci0gICAgICBpZiAoIWxpbmVCZWZvcmUpIGxpbmVCZWZvcmUgPSBsaW5lOwotICAgIH0K
IAogICAgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiKSwgY29sOiAwLCBwb3M6IDAsIGRp
c3BsYXk6ICFtZWFzdXJlLAotICAgICAgICAgICAgICAgICAgIG1lYXN1cmU6IG51bGwsIGFkZGVk
T25lOiBmYWxzZSwgY206IGNtfTsKKyAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiBudWxsLCBt
ZWFzdXJlZFNvbWV0aGluZzogZmFsc2UsIGNtOiBjbX07CiAgICAgaWYgKGxpbmUudGV4dENsYXNz
KSBidWlsZGVyLnByZS5jbGFzc05hbWUgPSBsaW5lLnRleHRDbGFzczsKIAogICAgIGRvIHsKKyAg
ICAgIGlmIChsaW5lLnRleHQpIGVtcHR5ID0gZmFsc2U7CiAgICAgICBidWlsZGVyLm1lYXN1cmUg
PSBsaW5lID09IHJlYWxMaW5lICYmIG1lYXN1cmU7CiAgICAgICBidWlsZGVyLnBvcyA9IDA7CiAg
ICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRlci5tZWFzdXJlID8gYnVpbGRUb2tlbk1lYXN1
cmUgOiBidWlsZFRva2VuOwogICAgICAgaWYgKChpZSB8fCB3ZWJraXQpICYmIGNtLmdldE9wdGlv
bigibGluZVdyYXBwaW5nIikpCiAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2Vu
U3BsaXRTcGFjZXMoYnVpbGRlci5hZGRUb2tlbik7Ci0gICAgICBpZiAobWVhc3VyZSAmJiBzYXdC
ZWZvcmUgJiYgbGluZSAhPSByZWFsTGluZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkgewotICAgICAg
ICBtZWFzdXJlWzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChj
bS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAgICAgICAgYnVpbGRlci5hZGRlZE9uZSA9IHRydWU7Ci0g
ICAgICB9CiAgICAgICB2YXIgbmV4dCA9IGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIs
IGdldExpbmVTdHlsZXMoY20sIGxpbmUpKTsKLSAgICAgIHNhd0JlZm9yZSA9IGxpbmUgPT0gbGlu
ZUJlZm9yZTsKLSAgICAgIGlmIChuZXh0KSB7Ci0gICAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLmRv
YywgbmV4dC50by5saW5lKTsKLSAgICAgICAgc2ltcGxlID0gZmFsc2U7CisgICAgICBpZiAobWVh
c3VyZSAmJiBsaW5lID09IHJlYWxMaW5lICYmICFidWlsZGVyLm1lYXN1cmVkU29tZXRoaW5nKSB7
CisgICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhF
bGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOworICAgICAgICBidWlsZGVyLm1lYXN1cmVkU29t
ZXRoaW5nID0gdHJ1ZTsKICAgICAgIH0KKyAgICAgIGlmIChuZXh0KSBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIG5leHQudG8ubGluZSk7CiAgICAgfSB3aGlsZSAobmV4dCk7CiAKLSAgICBpZiAobWVh
c3VyZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkKLSAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnBy
ZS5hcHBlbmRDaGlsZChzaW1wbGUgPyBlbHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJvV2lkdGhF
bGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOworICAgIGlmIChtZWFzdXJlICYmICFidWlsZGVy
Lm1lYXN1cmVkU29tZXRoaW5nICYmICFtZWFzdXJlWzBdKQorICAgICAgbWVhc3VyZVswXSA9IGJ1
aWxkZXIucHJlLmFwcGVuZENoaWxkKGVtcHR5ID8gZWx0KCJzcGFuIiwgIlx1MDBhMCIpIDogemVy
b1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKICAgICBpZiAoIWJ1aWxkZXIucHJl
LmZpcnN0Q2hpbGQgJiYgIWxpbmVJc0hpZGRlbihjbS5kb2MsIHJlYWxMaW5lKSkKICAgICAgIGJ1
aWxkZXIucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTAwYTAiKSk7
CiAKQEAgLTQxOTEsNyArNDI5MCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB9CiAKICAgdmFyIHRva2VuU3BlY2lhbENoYXJzID0gL1tcdFx1MDAwMC1cdTAwMTlcdTAw
YWRcdTIwMGJcdTIwMjhcdTIwMjlcdUZFRkZdL2c7Ci0gIGZ1bmN0aW9uIGJ1aWxkVG9rZW4oYnVp
bGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7CisgIGZ1bmN0aW9uIGJ1
aWxkVG9rZW4oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRs
ZSkgewogICAgIGlmICghdGV4dCkgcmV0dXJuOwogICAgIGlmICghdG9rZW5TcGVjaWFsQ2hhcnMu
dGVzdCh0ZXh0KSkgewogICAgICAgYnVpbGRlci5jb2wgKz0gdGV4dC5sZW5ndGg7CkBAIC00MjI0
LDcgKzQzMjMsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZh
ciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsKICAgICAgIGlmIChzdGFydFN0eWxlKSBmdWxsU3R5
bGUgKz0gc3RhcnRTdHlsZTsKICAgICAgIGlmIChlbmRTdHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0
eWxlOwotICAgICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFtj
b250ZW50XSwgZnVsbFN0eWxlKSk7CisgICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCBbY29u
dGVudF0sIGZ1bGxTdHlsZSk7CisgICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0gdGl0bGU7
CisgICAgICByZXR1cm4gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQodG9rZW4pOwogICAgIH0KICAg
ICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChjb250ZW50KTsKICAgfQpAQCAtNDIzOSw5ICs0MzQw
LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfSBlbHNlIGlm
IChpICYmIHdyYXBwaW5nICYmIHNwYW5BZmZlY3RzV3JhcHBpbmcodGV4dCwgaSkpIHsKICAgICAg
ICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KCJ3YnIiKSk7CiAgICAgICB9CisgICAgICB2
YXIgb2xkID0gYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXTsKICAgICAgIHZhciBzcGFuID0g
YnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9CiAgICAgICAgIGJ1aWxkVG9rZW4oYnVpbGRl
ciwgY2gsIHN0eWxlLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0ICYmIHN0YXJ0U3R5bGUsIGkg
PT0gdGV4dC5sZW5ndGggLSAxICYmIGVuZFN0eWxlKTsKKyAgICAgIGlmIChvbGQpIHNwYW4ubGVm
dFNpZGUgPSBvbGQubGVmdFNpZGUgfHwgb2xkOwogICAgICAgLy8gSW4gSUUgc2luZ2xlLXNwYWNl
IG5vZGVzIHdyYXAgZGlmZmVyZW50bHkgdGhhbiBzcGFjZXMKICAgICAgIC8vIGVtYmVkZGVkIGlu
IGxhcmdlciB0ZXh0IG5vZGVzLCBleGNlcHQgd2hlbiBzZXQgdG8KICAgICAgIC8vIHdoaXRlLXNw
YWNlOiBub3JtYWwgKGlzc3VlICMxMjY4KS4KQEAgLTQyNTAsNyArNDM1Myw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2Ug
PSAibm9ybWFsIjsKICAgICAgIGJ1aWxkZXIucG9zICs9IGNoLmxlbmd0aDsKICAgICB9Ci0gICAg
aWYgKHRleHQubGVuZ3RoKSBidWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKKyAgICBpZiAodGV4dC5s
ZW5ndGgpIGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOwogICB9CiAKICAgZnVuY3Rp
b24gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGlubmVyKSB7CkBAIC00MjYwLDE4ICs0MzYzLDI3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgb3V0ICs9ICIgIjsKICAg
ICAgIHJldHVybiBvdXQ7CiAgICAgfQotICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0
LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpIHsKLSAgICAgIHJldHVybiBpbm5lcihidWls
ZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9Lywgc3BsaXQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5k
U3R5bGUpOworICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRT
dHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7CisgICAgICByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4
dC5yZXBsYWNlKC8gezMsfS8sIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0
aXRsZSk7CiAgICAgfTsKICAgfQogCi0gIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWls
ZGVyLCBzaXplLCB3aWRnZXQpIHsKKyAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxk
ZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7CisgICAgdmFyIHdpZGdldCA9ICFpZ25v
cmVXaWRnZXQgJiYgbWFya2VyLnJlcGxhY2VkV2l0aDsKICAgICBpZiAod2lkZ2V0KSB7CiAgICAg
ICBpZiAoIWJ1aWxkZXIuZGlzcGxheSkgd2lkZ2V0ID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsK
ICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHdpZGdldCk7Ci0gICAgICBpZiAoYnVpbGRl
ci5tZWFzdXJlICYmIHNpemUpIHsKLSAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9z
XSA9IHdpZGdldDsKLSAgICAgICAgYnVpbGRlci5hZGRlZE9uZSA9IHRydWU7CisgICAgICBpZiAo
YnVpbGRlci5tZWFzdXJlKSB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgYnVpbGRl
ci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IHdpZGdldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICB2YXIgZWx0ID0gYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IHplcm9XaWR0aEVs
ZW1lbnQoYnVpbGRlci5jbS5kaXNwbGF5Lm1lYXN1cmUpOworICAgICAgICAgIGlmIChtYXJrZXIu
dHlwZSAhPSAiYm9va21hcmsiIHx8IG1hcmtlci5pbnNlcnRMZWZ0KQorICAgICAgICAgICAgYnVp
bGRlci5wcmUuaW5zZXJ0QmVmb3JlKGVsdCwgd2lkZ2V0KTsKKyAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQpOworICAgICAgICB9CisgICAgICAg
IGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgfQogICAgIH0KICAgICBi
dWlsZGVyLnBvcyArPSBzaXplOwpAQCAtNDI4MCwxOSArNDM5MiwxOCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gT3V0cHV0cyBhIG51bWJlciBvZiBzcGFucyB0byBt
YWtlIHVwIGEgbGluZSwgdGFraW5nIGhpZ2hsaWdodGluZwogICAvLyBhbmQgbWFya2VkIHRleHQg
aW50byBhY2NvdW50LgogICBmdW5jdGlvbiBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVy
LCBzdHlsZXMpIHsKLSAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOworICAgIHZhciBz
cGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKICAg
ICBpZiAoIXNwYW5zKSB7CiAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0eWxlcy5sZW5ndGg7
IGkrPTIpCi0gICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgc3R5bGVzW2ldLCBzdHls
ZVRvQ2xhc3Moc3R5bGVzW2krMV0pKTsKKyAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVy
LCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpXSksIHN0eWxlVG9DbGFzcyhzdHlsZXNb
aSsxXSkpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHZhciBhbGxUZXh0ID0gbGluZS50
ZXh0LCBsZW4gPSBhbGxUZXh0Lmxlbmd0aDsKLSAgICB2YXIgcG9zID0gMCwgaSA9IDEsIHRleHQg
PSAiIiwgc3R5bGU7Ci0gICAgdmFyIG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRT
dHlsZSwgc3BhblN0YXJ0U3R5bGUsIGNvbGxhcHNlZDsKKyAgICB2YXIgbGVuID0gYWxsVGV4dC5s
ZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gIiIsIHN0eWxlOworICAgIHZhciBuZXh0Q2hh
bmdlID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwg
Y29sbGFwc2VkOwogICAgIGZvciAoOzspIHsKICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykg
eyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5F
bmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gIiI7CisgICAgICAgIHNwYW5TdHlsZSA9IHNwYW5F
bmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSAiIjsKICAgICAgICAgY29sbGFwc2Vk
ID0gbnVsbDsgbmV4dENoYW5nZSA9IEluZmluaXR5OwogICAgICAgICB2YXIgZm91bmRCb29rbWFy
ayA9IG51bGw7CiAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2op
IHsKQEAgLTQzMDIsMTcgKzQ0MTMsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHNwYW5TdHlsZSArPSAiICIgKyBtLmNs
YXNzTmFtZTsKICAgICAgICAgICAgIGlmIChtLnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3Mp
IHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0uc3RhcnRTdHlsZTsKICAgICAgICAgICAgIGlmICht
LmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRDaGFuZ2UpIHNwYW5FbmRTdHlsZSArPSAiICIgKyBt
LmVuZFN0eWxlOwotICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8
IGNvbGxhcHNlZC5tYXJrZXIud2lkdGggPCBtLndpZHRoKSkKKyAgICAgICAgICAgIGlmIChtLnRp
dGxlICYmICF0aXRsZSkgdGl0bGUgPSBtLnRpdGxlOworICAgICAgICAgICAgaWYgKG0uY29sbGFw
c2VkICYmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5tYXJrZXIuc2l6ZSA8IG0uc2l6ZSkpCiAg
ICAgICAgICAgICAgIGNvbGxhcHNlZCA9IHNwOwogICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJv
bSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkgewogICAgICAgICAgICAgbmV4dENoYW5n
ZSA9IHNwLmZyb207CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2tt
YXJrIiAmJiBzcC5mcm9tID09IHBvcyAmJiBtLnJlcGxhY2VkV2l0aCkKLSAgICAgICAgICAgIGZv
dW5kQm9va21hcmsgPSBtLnJlcGxhY2VkV2l0aDsKKyAgICAgICAgICBpZiAobS50eXBlID09ICJi
b29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS5yZXBsYWNlZFdpdGgpIGZvdW5kQm9va21h
cmsgPSBtOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5m
cm9tIHx8IDApID09IHBvcykgewogICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVy
LCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gOiBjb2xsYXBzZWQudG8pIC0gcG9zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQuZnJvbSAhPSBudWxsICYmIGNvbGxh
cHNlZC5tYXJrZXIucmVwbGFjZWRXaXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sbGFwc2VkLm1hcmtlciwgY29sbGFwc2VkLmZyb20gPT0gbnVsbCk7CiAgICAgICAgICAgaWYg
KGNvbGxhcHNlZC50byA9PSBudWxsKSByZXR1cm4gY29sbGFwc2VkLm1hcmtlci5maW5kKCk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGZvdW5kQm9va21hcmsgJiYgIWNvbGxhcHNlZCkgYnVpbGRD
b2xsYXBzZWRTcGFuKGJ1aWxkZXIsIDAsIGZvdW5kQm9va21hcmspOwpAQCAtNDMyNiwxMyArNDQz
NywxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBpZiAo
IWNvbGxhcHNlZCkgewogICAgICAgICAgICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0
ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dDsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRk
VG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3Bh
blN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9z
ICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5U
ZXh0Lmxlbmd0aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIsIHRpdGxlKTsKICAg
ICAgICAgICB9CiAgICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2Uo
dXB0byAtIHBvcyk7IHBvcyA9IHVwdG87IGJyZWFrO30KICAgICAgICAgICBwb3MgPSBlbmQ7CiAg
ICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSAiIjsKICAgICAgICAgfQotICAgICAgICB0ZXh0ID0g
c3R5bGVzW2krK107IHN0eWxlID0gc3R5bGVUb0NsYXNzKHN0eWxlc1tpKytdKTsKKyAgICAgICAg
dGV4dCA9IGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2krK10pOworICAgICAgICBzdHls
ZSA9IHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsrXSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC00
MzU1LDcgKzQ0NjcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1h
a2UKICAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBw
b3NlZCB0by4KICAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGV4dC5sZW5ndGggLSAxLCBhZGRl
ZCA9IFtdOyBpIDwgZTsgKytpKQotICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0s
IHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOworICAgICAgICBhZGRlZC5wdXNoKG5ldyBM
aW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgdXBkYXRl
KGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMpOwogICAgICAgaWYgKG5saW5lcykg
ZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcyk7CiAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSBk
b2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwpAQCAtNDM2NCw4ICs0NDc2LDggQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZp
cnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4
dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBmb3Ig
KHZhciBhZGRlZCA9IFtdLCBpID0gMSwgZSA9IHRleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkK
LSAgICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3Rp
bWF0ZUhlaWdodCkpOwotICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKGxhc3RUZXh0ICsgZmly
c3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7Cisg
ICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1h
dGVIZWlnaHQpKTsKKyAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0
TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOwogICAg
ICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSAr
IHRleHRbMF0sIHNwYW5zRm9yKDApKTsKICAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAx
LCBhZGRlZCk7CiAgICAgICB9CkBAIC00Mzc2LDcgKzQ0ODgsNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0
LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICAgdXBkYXRl
KGxhc3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3Bh
bnMpOwogICAgICAgZm9yICh2YXIgaSA9IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0g
W107IGkgPCBlOyArK2kpCi0gICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3Bh
bnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUo
dGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICBpZiAobmxpbmVz
ID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxKTsKICAgICAgIGRvYy5p
bnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwogICAgIH0KQEAgLTQ1MTksMTEgKzQ2MzEsMTIg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKCEodGhpcyBpbnN0
YW5jZW9mIERvYykpIHJldHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSk7CiAgICAg
aWYgKGZpcnN0TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAwOwogCi0gICAgQnJhbmNoQ2h1bmsu
Y2FsbCh0aGlzLCBbbmV3IExlYWZDaHVuayhbbWFrZUxpbmUoIiIsIG51bGwpXSldKTsKKyAgICBC
cmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIiwgbnVsbCld
KV0pOwogICAgIHRoaXMuZmlyc3QgPSBmaXJzdExpbmU7CiAgICAgdGhpcy5zY3JvbGxUb3AgPSB0
aGlzLnNjcm9sbExlZnQgPSAwOwogICAgIHRoaXMuY2FudEVkaXQgPSBmYWxzZTsKICAgICB0aGlz
Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpOworICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTsK
ICAgICB0aGlzLmZyb250aWVyID0gZmlyc3RMaW5lOwogICAgIHZhciBzdGFydCA9IFBvcyhmaXJz
dExpbmUsIDApOwogICAgIHRoaXMuc2VsID0ge2Zyb206IHN0YXJ0LCB0bzogc3RhcnQsIGhlYWQ6
IHN0YXJ0LCBhbmNob3I6IHN0YXJ0LCBzaGlmdDogZmFsc2UsIGV4dGVuZDogZmFsc2UsIGdvYWxD
b2x1bW46IG51bGx9OwpAQCAtNDU4Myw2ICs0Njk2LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNM
aW5lKHRoaXMsIGxpbmUpKSByZXR1cm4gZ2V0TGluZSh0aGlzLCBsaW5lKTt9LAogICAgIGdldExp
bmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpO30sCiAKKyAgICBn
ZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGlmICh0eXBl
b2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7CisgICAgICBy
ZXR1cm4gdmlzdWFsTGluZSh0aGlzLCBsaW5lKTsKKyAgICB9LAorCiAgICAgbGluZUNvdW50OiBm
dW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30sCiAgICAgZmlyc3RMaW5lOiBmdW5jdGlvbigp
IHtyZXR1cm4gdGhpcy5maXJzdDt9LAogICAgIGxhc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4g
dGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwKQEAgLTQ2MjQsMjAgKzQ3NDIsMjUgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlz
dG9yeTsKICAgICAgIHJldHVybiB7dW5kbzogaGlzdC5kb25lLmxlbmd0aCwgcmVkbzogaGlzdC51
bmRvbmUubGVuZ3RofTsKICAgICB9LAotICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhp
cy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTt9LAorICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24o
KSB7dGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24p
O30sCiAKICAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5oaXN0b3J5LmRp
cnR5Q291bnRlciA9IDA7CisgICAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRoaXMuY2hhbmdl
R2VuZXJhdGlvbigpOworICAgIH0sCisgICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oKSB7
CiAgICAgICB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBu
dWxsOworICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uOworICAgIH0sCisgICAg
aXNDbGVhbjogZnVuY3Rpb24gKGdlbikgeworICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5l
cmF0aW9uID09IChnZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pOwogICAgIH0sCi0gICAgaXND
bGVhbjogZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVyID09IDA7
fSwKIAogICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHtkb25lOiBj
b3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKICAgICAgICAgICAgICAgdW5kb25l
OiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKICAgICB9LAogICAgIHNl
dEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMuaGlz
dG9yeSA9IG1ha2VIaXN0b3J5KCk7CisgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSA9IG1h
a2VIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTsKICAgICAgIGhpc3QuZG9uZSA9
IGhpc3REYXRhLmRvbmUuc2xpY2UoMCk7CiAgICAgICBoaXN0LnVuZG9uZSA9IGhpc3REYXRhLnVu
ZG9uZS5zbGljZSgwKTsKICAgICB9LApAQCAtNDc0OCw2ICs0ODcxLDggQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7cmV0dXJuIG1l
dGhvZC5hcHBseSh0aGlzLmRvYywgYXJndW1lbnRzKTt9OwogICAgIH0pKERvYy5wcm90b3R5cGVb
cHJvcF0pOwogCisgIGV2ZW50TWl4aW4oRG9jKTsKKwogICBmdW5jdGlvbiBsaW5rZWREb2NzKGRv
YywgZiwgc2hhcmVkSGlzdE9ubHkpIHsKICAgICBmdW5jdGlvbiBwcm9wYWdhdGUoZG9jLCBza2lw
LCBzaGFyZWRIaXN0KSB7CiAgICAgICBpZiAoZG9jLmxpbmtlZCkgZm9yICh2YXIgaSA9IDA7IGkg
PCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7CkBAIC00ODY3LDcgKzQ5OTIsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBISVNUT1JZCiAKLSAgZnVuY3Rpb24g
bWFrZUhpc3RvcnkoKSB7CisgIGZ1bmN0aW9uIG1ha2VIaXN0b3J5KHN0YXJ0R2VuKSB7CiAgICAg
cmV0dXJuIHsKICAgICAgIC8vIEFycmF5cyBvZiBoaXN0b3J5IGV2ZW50cy4gRG9pbmcgc29tZXRo
aW5nIGFkZHMgYW4gZXZlbnQgdG8KICAgICAgIC8vIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRv
aW5nIG1vdmVzIGV2ZW50cyBmcm9tIGRvbmUgdG8KQEAgLTQ4NzcsNyArNTAwMiw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgLy8gZXZlbnQKICAgICAgIGxhc3RU
aW1lOiAwLCBsYXN0T3A6IG51bGwsIGxhc3RPcmlnaW46IG51bGwsCiAgICAgICAvLyBVc2VkIGJ5
IHRoZSBpc0NsZWFuKCkgbWV0aG9kCi0gICAgICBkaXJ0eUNvdW50ZXI6IDAKKyAgICAgIGdlbmVy
YXRpb246IHN0YXJ0R2VuIHx8IDEsIG1heEdlbmVyYXRpb246IHN0YXJ0R2VuIHx8IDEKICAgICB9
OwogICB9CiAKQEAgLTQ4OTEsNyArNTAxNiw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICB9CiAKICAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBj
aGFuZ2UpIHsKLSAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNo
YW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5n
ZS50byl9OworICAgIHZhciBmcm9tID0geyBsaW5lOiBjaGFuZ2UuZnJvbS5saW5lLCBjaDogY2hh
bmdlLmZyb20uY2ggfTsKKyAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBmcm9tLCB0bzogY2hh
bmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdl
LnRvKX07CiAgICAgYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9t
LmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7CiAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9u
KGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5l
LCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwogICAgIHJldHVybiBoaXN0Q2hhbmdlOwpA
QCAtNDkyMSwxNyArNTA0NywxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICB9IGVsc2UgewogICAgICAgLy8gQ2FuIG5vdCBiZSBtZXJnZWQsIHN0YXJ0IGEgbmV3IGV2
ZW50LgogICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2Ms
IGNoYW5nZSldLAorICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbiwKICAg
ICAgICAgICAgICBhbmNob3JCZWZvcmU6IGRvYy5zZWwuYW5jaG9yLCBoZWFkQmVmb3JlOiBkb2Mu
c2VsLmhlYWQsCiAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IHNlbEFmdGVyLmFuY2hvciwgaGVh
ZEFmdGVyOiBzZWxBZnRlci5oZWFkfTsKICAgICAgIGhpc3QuZG9uZS5wdXNoKGN1cik7CisgICAg
ICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjsKICAgICAgIHdoaWxlICho
aXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpCiAgICAgICAgIGhpc3QuZG9uZS5zaGlm
dCgpOwotICAgICAgaWYgKGhpc3QuZGlydHlDb3VudGVyIDwgMCkKLSAgICAgICAgLy8gVGhlIHVz
ZXIgaGFzIG1hZGUgYSBjaGFuZ2UgYWZ0ZXIgdW5kb2luZyBwYXN0IHRoZSBsYXN0IGNsZWFuIHN0
YXRlLgotICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgZ2V0IGJhY2sgdG8gYSBjbGVhbiBzdGF0ZSBu
b3cgdW50aWwgbWFya0NsZWFuKCkgaXMgY2FsbGVkLgotICAgICAgICBoaXN0LmRpcnR5Q291bnRl
ciA9IE5hTjsKLSAgICAgIGVsc2UKLSAgICAgICAgaGlzdC5kaXJ0eUNvdW50ZXIrKzsKICAgICB9
CiAgICAgaGlzdC5sYXN0VGltZSA9IHRpbWU7CiAgICAgaGlzdC5sYXN0T3AgPSBvcElkOwpAQCAt
NTA0Niw2ICs1MTY4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
aWYgKGUuc3RvcFByb3BhZ2F0aW9uKSBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgIGVsc2UgZS5j
YW5jZWxCdWJibGUgPSB0cnVlOwogICB9CisgIGZ1bmN0aW9uIGVfZGVmYXVsdFByZXZlbnRlZChl
KSB7CisgICAgcmV0dXJuIGUuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gZS5kZWZhdWx0UHJl
dmVudGVkIDogZS5yZXR1cm5WYWx1ZSA9PSBmYWxzZTsKKyAgfQogICBmdW5jdGlvbiBlX3N0b3Ao
ZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO30KICAgQ29kZU1p
cnJvci5lX3N0b3AgPSBlX3N0b3A7CiAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVf
cHJldmVudERlZmF1bHQ7CkBAIC01MTEyLDYgKzUyMzcsMTEgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICBkZWxheWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFycltpXSkp
OwogICB9CiAKKyAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7Cisg
ICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKKyAgICByZXR1cm4gZV9k
ZWZhdWx0UHJldmVudGVkKGUpOworICB9CisKICAgZnVuY3Rpb24gZmlyZURlbGF5ZWQoKSB7CiAg
ICAgLS1kZWxheWVkQ2FsbGJhY2tEZXB0aDsKICAgICB2YXIgZGVsYXllZCA9IGRlbGF5ZWRDYWxs
YmFja3M7CkBAIC01MTI2LDYgKzUyNTYsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAKICAgQ29kZU1pcnJvci5vbiA9IG9uOyBDb2RlTWlycm9yLm9mZiA9IG9mZjsgQ29k
ZU1pcnJvci5zaWduYWwgPSBzaWduYWw7CiAKKyAgZnVuY3Rpb24gZXZlbnRNaXhpbihjdG9yKSB7
CisgICAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywgdHlw
ZSwgZik7fTsKKyAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7b2Zm
KHRoaXMsIHR5cGUsIGYpO307CisgIH0KKwogICAvLyBNSVNDIFVUSUxJVElFUwogCiAgIC8vIE51
bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xsZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xs
YmFyCkBAIC01MTY2LDcgKzUzMDEsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgaWYgKGlvcykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVn
IHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KICAgICAgIG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAw
OwogICAgICAgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsKLSAgICB9IGVs
c2Ugbm9kZS5zZWxlY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gU3VwcHJlc3MgbXlzdGVy
aW91cyBJRTEwIGVycm9ycworICAgICAgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfQorICAgICAgY2F0
Y2goX2UpIHt9CisgICAgfQogICB9CiAKICAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBl
bHQpIHsKQEAgLTUyNzEsMTUgKzU0MTAsMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgfTsKICAgZWxzZSBpZiAoc2FmYXJpICYmICEvVmVyc2lvblwvKFs2LTldfFxk
XGQpXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCiAgICAgc3BhbkFmZmVjdHNXcmFwcGlu
ZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgdmFyIHJlc3VsdCA9IC9cLVteIFwtP118XD9b
XiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsK
LSAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICByZXR1cm4gKC9cLVteIFwtP118XD9bXiAhXCdc
IlwpLC5cLVwvOjtcP1xdXH1dLykudGVzdChzdHIuc2xpY2UoaSAtIDEsIGkgKyAxKSk7CiAgICAg
fTsKLSAgZWxzZSBpZiAod2Via2l0KQorICBlbHNlIGlmICh3ZWJraXQgJiYgIS9DaHJvbWVcLyg/
OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQogICAgIHNw
YW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIGlmIChpID4gMSAm
JiBzdHIuY2hhckNvZGVBdChpIC0gMSkgPT0gNDUgJiYgL1x3Ly50ZXN0KHN0ci5jaGFyQXQoaSAt
IDIpKSAmJiAvW15cLT9cLl0vLnRlc3Qoc3RyLmNoYXJBdChpKSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgdmFyIHJlc3VsdCA9IC9bfiEjJSYqKT0rfVxdfFwiXC4+LDo7XVsoe1s8XXxc
P1tcd35gQCMkJVxeJiooXz0re1t8PjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsK
LSAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBpZiAoaSA+IDEgJiYgc3RyLmNoYXJDb2RlQXQo
aSAtIDEpID09IDQ1KSB7CisgICAgICAgIGlmICgvXHcvLnRlc3Qoc3RyLmNoYXJBdChpIC0gMikp
ICYmIC9bXlwtP1wuXS8udGVzdChzdHIuY2hhckF0KGkpKSkgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChpID4gMiAmJiAvW1xkXC4sXS8udGVzdChzdHIuY2hhckF0KGkgLSAyKSkgJiYgL1tcZFwu
LF0vLnRlc3Qoc3RyLmNoYXJBdChpKSkpIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiAoL1t+ISMlJiopPSt9XF18XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAx
Zlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tb
PjxdLykudGVzdChzdHIuc2xpY2UoaSAtIDEsIGkgKyAxKSk7CiAgICAgfTsKIAogICB2YXIga25v
d25TY3JvbGxiYXJXaWR0aDsKQEAgLTUzNjUsMTEgKzU1MDQsMTUgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRl
ciwgZnJvbSwgdG8sIGYpIHsKICAgICBpZiAoIW9yZGVyKSByZXR1cm4gZihmcm9tLCB0bywgImx0
ciIpOworICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3Jk
ZXIubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV07Ci0gICAgICBpZiAo
cGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwgZnJvbSA9PSB0byAmJiBwYXJ0LnRv
ID09IGZyb20pCisgICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwg
ZnJvbSA9PSB0byAmJiBwYXJ0LnRvID09IGZyb20pIHsKICAgICAgICAgZihNYXRoLm1heChwYXJ0
LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byksIHBhcnQubGV2ZWwgPT0gMSA/ICJy
dGwiIDogImx0ciIpOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICB9CiAgICAgfQorICAg
IGlmICghZm91bmQpIGYoZnJvbSwgdG8sICJsdHIiKTsKICAgfQogCiAgIGZ1bmN0aW9uIGJpZGlM
ZWZ0KHBhcnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8gcGFydC50byA6IHBhcnQuZnJvbTsg
fQpAQCAtNTYzMSw3ICs1Nzc0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjEzIjsKKyAgQ29k
ZU1pcnJvci52ZXJzaW9uID0gIjMuMTQuMSI7CiAKICAgcmV0dXJuIENvZGVNaXJyb3I7CiB9KSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcwppbmRleCA1MDlk
OTIwN2JiNzA3NzU0MGJkYzg5MGYwNjE2MDJlZWI2M2RmNjFiLi40ZjU0YjBjNjkwZWMyZmM4OWJj
NmVkYWRmOTVmZWNlMWRkNGE5MzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
ZmZlZXNjcmlwdC5qcwpAQCAtMzM5LDcgKzMzOSw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgn
Y29mZmVlc2NyaXB0JywgZnVuY3Rpb24oY29uZikgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRl
LnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgIH0sCiAKLSAgICAgICAgbGluZUNvbW1lbnQ6ICIj
IgorICAgICAgICBsaW5lQ29tbWVudDogIiMiLAorICAgICAgICBmb2xkOiAiaW5kZW50IgogICAg
IH07CiAgICAgcmV0dXJuIGV4dGVybmFsOwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
bW1lbnQuanMKaW5kZXggNGY1OTBmMjg3MDA1MzIxMzk1YTZhNTI4YmU0YmFjN2E2NzBjNGRkZC4u
Y2QyMTIzZTE3NTU1NTJlOTM1MWYxZDIzZTg1N2I5OGE4YmU2Mjc3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21t
ZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMTcsNyArMTcsNyBAQAogCiAgIENvZGVNaXJyb3Iu
ZGVmaW5lRXh0ZW5zaW9uKCJsaW5lQ29tbWVudCIsIGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25z
KSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9PcHRpb25zOwotICAgIHZhciBzZWxm
ID0gdGhpcywgbW9kZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKHNlbGYuZ2V0TW9kZSgpLCBzZWxm
LmdldFRva2VuQXQoZnJvbSkuc3RhdGUpLm1vZGU7CisgICAgdmFyIHNlbGYgPSB0aGlzLCBtb2Rl
ID0gc2VsZi5nZXRNb2RlQXQoZnJvbSk7CiAgICAgdmFyIGNvbW1lbnRTdHJpbmcgPSBvcHRpb25z
LmxpbmVDb21tZW50IHx8IG1vZGUubGluZUNvbW1lbnQ7CiAgICAgaWYgKCFjb21tZW50U3RyaW5n
KSB7CiAgICAgICBpZiAob3B0aW9ucy5ibG9ja0NvbW1lbnRTdGFydCB8fCBtb2RlLmJsb2NrQ29t
bWVudFN0YXJ0KSB7CkBAIC0zMCw3ICszMCw3IEBACiAgICAgaWYgKGZpcnN0TGluZSA9PSBudWxs
KSByZXR1cm47CiAgICAgdmFyIGVuZCA9IE1hdGgubWluKHRvLmNoICE9IDAgfHwgdG8ubGluZSA9
PSBmcm9tLmxpbmUgPyB0by5saW5lICsgMSA6IHRvLmxpbmUsIHNlbGYubGFzdExpbmUoKSArIDEp
OwogICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVsbCA/ICIgIiA6IG9wdGlvbnMu
cGFkZGluZzsKLSAgICB2YXIgYmxhbmtMaW5lcyA9IG9wdGlvbnMuY29tbWVudEJsYW5rTGluZXM7
CisgICAgdmFyIGJsYW5rTGluZXMgPSBvcHRpb25zLmNvbW1lbnRCbGFua0xpbmVzIHx8IGZyb20u
bGluZSA9PSB0by5saW5lOwogCiAgICAgc2VsZi5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAg
ICBpZiAob3B0aW9ucy5pbmRlbnQpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICBDb2RlTWlycm9y
LmRlZmluZUV4dGVuc2lvbigiYmxvY2tDb21tZW50IiwgZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlv
bnMpIHsKICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSBub09wdGlvbnM7Ci0gICAgdmFyIHNl
bGYgPSB0aGlzLCBtb2RlID0gQ29kZU1pcnJvci5pbm5lck1vZGUoc2VsZi5nZXRNb2RlKCksIHNl
bGYuZ2V0VG9rZW5BdChmcm9tKS5zdGF0ZSkubW9kZTsKKyAgICB2YXIgc2VsZiA9IHRoaXMsIG1v
ZGUgPSBzZWxmLmdldE1vZGVBdChmcm9tKTsKICAgICB2YXIgc3RhcnRTdHJpbmcgPSBvcHRpb25z
LmJsb2NrQ29tbWVudFN0YXJ0IHx8IG1vZGUuYmxvY2tDb21tZW50U3RhcnQ7CiAgICAgdmFyIGVu
ZFN0cmluZyA9IG9wdGlvbnMuYmxvY2tDb21tZW50RW5kIHx8IG1vZGUuYmxvY2tDb21tZW50RW5k
OwogICAgIGlmICghc3RhcnRTdHJpbmcgfHwgIWVuZFN0cmluZykgewpAQCAtODUsMTkgKzg1LDE5
IEBACiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oInVuY29tbWVudCIsIGZ1bmN0aW9u
KGZyb20sIHRvLCBvcHRpb25zKSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9PcHRp
b25zOwotICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKHNl
bGYuZ2V0TW9kZSgpLCBzZWxmLmdldFRva2VuQXQoZnJvbSkuc3RhdGUpLm1vZGU7CisgICAgdmFy
IHNlbGYgPSB0aGlzLCBtb2RlID0gc2VsZi5nZXRNb2RlQXQoZnJvbSk7CiAgICAgdmFyIGVuZCA9
IE1hdGgubWluKHRvLmxpbmUsIHNlbGYubGFzdExpbmUoKSksIHN0YXJ0ID0gTWF0aC5taW4oZnJv
bS5saW5lLCBlbmQpOwogCiAgICAgLy8gVHJ5IGZpbmRpbmcgbGluZSBjb21tZW50cwogICAgIHZh
ciBsaW5lU3RyaW5nID0gb3B0aW9ucy5saW5lQ29tbWVudCB8fCBtb2RlLmxpbmVDb21tZW50LCBs
aW5lcyA9IFtdOwotICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVsbCA/ICIgIiA6
IG9wdGlvbnMucGFkZGluZzsKLSAgICBsaW5lQ29tbWVudDogZm9yKDs7KSB7Ci0gICAgICBpZiAo
IWxpbmVTdHJpbmcpIGJyZWFrOworICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVs
bCA/ICIgIiA6IG9wdGlvbnMucGFkZGluZywgZGlkU29tZXRoaW5nOworICAgIGxpbmVDb21tZW50
OiB7CisgICAgICBpZiAoIWxpbmVTdHJpbmcpIGJyZWFrIGxpbmVDb21tZW50OwogICAgICAgZm9y
ICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7CiAgICAgICAgIHZhciBsaW5lID0gc2Vs
Zi5nZXRMaW5lKGkpOwogICAgICAgICB2YXIgZm91bmQgPSBsaW5lLmluZGV4T2YobGluZVN0cmlu
Zyk7CiAgICAgICAgIGlmIChmb3VuZCA9PSAtMSAmJiAoaSAhPSBlbmQgfHwgaSA9PSBzdGFydCkg
JiYgbm9uV1MudGVzdChsaW5lKSkgYnJlYWsgbGluZUNvbW1lbnQ7Ci0gICAgICAgIGlmIChpICE9
IHN0YXJ0ICYmIG5vbldTLnRlc3QobGluZS5zbGljZSgwLCBmb3VuZCkpKSBicmVhayBsaW5lQ29t
bWVudDsKKyAgICAgICAgaWYgKGkgIT0gc3RhcnQgJiYgZm91bmQgPiAtMSAmJiBub25XUy50ZXN0
KGxpbmUuc2xpY2UoMCwgZm91bmQpKSkgYnJlYWsgbGluZUNvbW1lbnQ7CiAgICAgICAgIGxpbmVz
LnB1c2gobGluZSk7CiAgICAgICB9CiAgICAgICBzZWxmLm9wZXJhdGlvbihmdW5jdGlvbigpIHsK
QEAgLTEwNiwxMCArMTA2LDExIEBACiAgICAgICAgICAgdmFyIHBvcyA9IGxpbmUuaW5kZXhPZihs
aW5lU3RyaW5nKSwgZW5kUG9zID0gcG9zICsgbGluZVN0cmluZy5sZW5ndGg7CiAgICAgICAgICAg
aWYgKHBvcyA8IDApIGNvbnRpbnVlOwogICAgICAgICAgIGlmIChsaW5lLnNsaWNlKGVuZFBvcywg
ZW5kUG9zICsgcGFkLmxlbmd0aCkgPT0gcGFkKSBlbmRQb3MgKz0gcGFkLmxlbmd0aDsKKyAgICAg
ICAgICBkaWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgIHNlbGYucmVwbGFjZVJhbmdlKCIi
LCBQb3MoaSwgcG9zKSwgUG9zKGksIGVuZFBvcykpOwogICAgICAgICB9CiAgICAgICB9KTsKLSAg
ICAgIHJldHVybiB0cnVlOworICAgICAgaWYgKGRpZFNvbWV0aGluZykgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgLy8gVHJ5IGJsb2NrIGNvbW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3Nz
LmpzCmluZGV4IDI3Yzk3ZjM3ZWI4YjRlYzdlMjRmNjg5MmNmYjMyZGRjOGYxYTEyYWUuLmI1MmU3
ODdhNzBhYjA3NjhjZThhYTMzZGNmMDRlYTEzZDEyY2Q1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvY3NzLmpzCkBAIC0xMDMsNyArMTAzLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mt
YmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgc3RhcnRTdGF0ZTog
ZnVuY3Rpb24oYmFzZSkgewogICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAg
ICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAgICAgIHN0YWNrOiBb
XX07CisgICAgICAgICAgICAgIHN0YWNrOiBbXSwKKyAgICAgICAgICAgICAgbGFzdFRva2VuOiBu
dWxsfTsKICAgICB9LAogCiAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKQEAg
LTE2Myw3ICsxNjQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuc3Rh
Y2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwogICAgICAgaWYgKHN0eWxlID09ICJ2YXJpYWJsZSIp
IHsKICAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlLWRlZmluaXRpb24iKSBzdGF0ZS5zdGFj
ay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICAgIHJldHVybiAidmFyaWFibGUtMiI7Cisg
ICAgICAgIHJldHVybiBzdGF0ZS5sYXN0VG9rZW4gPSAidmFyaWFibGUtMiI7CiAgICAgICB9IGVs
c2UgaWYgKHN0eWxlID09ICJwcm9wZXJ0eSIpIHsKICAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0u
Y3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0
eVZhbHVlIikgewpAQCAtMjczLDEwICsyNzQsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBlbHNlIGlm
IChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICIsIikgc3Rh
dGUuc3RhY2sucG9wKCk7CiAgICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAm
JiB0eXBlID09ICIoIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhVHlwZSgiKTsKICAgICAgIGVs
c2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIiAmJiB0eXBlID09ICIpIikgc3RhdGUuc3Rh
Y2sucG9wKCk7Ci0gICAgICBlbHNlIGlmICgoY29udGV4dCA9PSAicnVsZSIgfHwgY29udGV4dCA9
PSAiYmxvY2siKSAmJiB0eXBlID09ICI6Iikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1
ZSIpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSAiOiIgJiYgc3RhdGUubGFzdFRva2VuID09ICJw
cm9wZXJ0eSIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKICAgICAgIGVsc2Ug
aWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFj
ay5wb3AoKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiICYmIHR5cGUgPT0g
IjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgIHJldHVybiBzdHlsZTsKKyAgICAgIHJldHVy
biBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlv
bihzdGF0ZSwgdGV4dEFmdGVyKSB7CkBAIC0yODgsNyArMjg5LDggQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAg
ICBlbGVjdHJpY0NoYXJzOiAifSIsCiAgICAgYmxvY2tDb21tZW50U3RhcnQ6ICIvKiIsCi0gICAg
YmxvY2tDb21tZW50RW5kOiAiKi8iCisgICAgYmxvY2tDb21tZW50RW5kOiAiKi8iLAorICAgIGZv
bGQ6ICJicmFjZSIKICAgfTsKIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFz
Y3JpcHQuanMKaW5kZXggZmFiZTFjNDJiOWE2YjMwZDM2ZDdlMzc2MWViNjg4ZWRkNjM3ZDZhZS4u
M2QwNDYwM2MyODVmZWU1Y2EzM2M4NjNlYTY3ODgwNzY1MjM0ZmQ1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZh
c2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMiw2ICsyLDcgQEAKIAogQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKKyAgdmFyIHN0YXRlbWVu
dEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7CiAgIHZhciBqc29uTW9kZSA9
IHBhcnNlckNvbmZpZy5qc29uOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0
OwogCkBAIC0yMjYsOCArMjI3LDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBwdXNo
bGV4KHR5cGUsIGluZm8pIHsKICAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgc3RhdGUgPSBjeC5zdGF0ZTsKLSAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2Fs
KHN0YXRlLmluZGVudGVkLCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxl
eGljYWwsIGluZm8pOworICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGUsIGluZGVudCA9IHN0YXRl
LmluZGVudGVkOworICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAic3RhdCIpIGluZGVu
dCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CisgICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpT
TGV4aWNhbChpbmRlbnQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4
aWNhbCwgaW5mbyk7CiAgICAgfTsKICAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjU2LDMxICsyNTgsMzIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9
PSAia2V5d29yZCBiIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBv
cGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJs
b2NrLCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKLSAgICBp
ZiAodHlwZSA9PSAiaWYiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UoY3guc3RhdGUuaW5kZW50ZWQpKTsKKyAgICBp
ZiAodHlwZSA9PSAiaWYiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpOwogICAgIGlmICh0eXBlID09ICJmdW5jdGlv
biIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHBlY3QoIigiKSwgcHVzaGxleCgiKSIpLCBmb3Jz
cGVjMSwgZXhwZWN0KCIpIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAidmFy
aWFibGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwogICAgIGlm
ICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Np
b24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwog
ICAgIGlmICh0eXBlID09ICJjYXNlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6
IikpOwogICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6Iikp
OwogICAgIGlmICh0eXBlID09ICJjYXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwg
cHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4cGVjdCgiKSIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBv
cGxleCwgcG9wY29udGV4dCk7CiAgICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHBy
ZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICAgfQogICBmdW5jdGlvbiBleHByZXNzaW9u
KHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3BlcmF0b3JD
b21tYSk7CisgICAgcmV0dXJuIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBmYWxzZSk7CiAgIH0KICAg
ZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSkgewotICAgIHJldHVybiBleHByZXNzaW9u
SW5uZXIodHlwZSwgbWF5YmVvcGVyYXRvck5vQ29tbWEpOworICAgIHJldHVybiBleHByZXNzaW9u
SW5uZXIodHlwZSwgdHJ1ZSk7CiAgIH0KLSAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUs
IG1heWJlb3ApIHsKKyAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG5vQ29tbWEpIHsK
KyAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJl
b3BlcmF0b3JDb21tYTsKICAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkp
IHJldHVybiBjb250KG1heWJlb3ApOwogICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVy
biBjb250KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJu
IGNvbnQobWF5YmVleHByZXNzaW9uKTsKKyAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0
dXJuIGNvbnQobm9Db21tYSA/IG1heWJlZXhwcmVzc2lvbk5vQ29tbWEgOiBtYXliZWV4cHJlc3Np
b24pOwogICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXli
ZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3ApOwotICAgIGlmICh0eXBl
ID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09
ICJvcGVyYXRvciIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4
cHJlc3Npb24pOwogICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIp
LCBjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSwgcG9wbGV4LCBtYXliZW9wKTsKICAg
ICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgY29tbWFzZXAob2Jq
cHJvcCwgIn0iKSwgcG9wbGV4LCBtYXliZW9wKTsKICAgICByZXR1cm4gY29udCgpOwpAQCAtMjg5
LDkgKzI5MiwxMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxd
LykpIHJldHVybiBwYXNzKCk7CiAgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7CiAgIH0KKyAg
ZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uTm9Db21tYSh0eXBlKSB7CisgICAgaWYgKHR5cGUubWF0
Y2goL1s7XH1cKVxdLF0vKSkgcmV0dXJuIHBhc3MoKTsKKyAgICByZXR1cm4gcGFzcyhleHByZXNz
aW9uTm9Db21tYSk7CisgIH0KIAogICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yQ29tbWEodHlwZSwg
dmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBwYXNzKCk7CisgICAgaWYgKHR5
cGUgPT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgICByZXR1cm4gbWF5YmVvcGVy
YXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG1heWJlb3BlcmF0b3JDb21tYSk7CiAgIH0KICAgZnVu
Y3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG1lKSB7CkBAIC0zMDQsNyAr
MzExLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybjsKICAgICBp
ZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiLCAiY2FsbCIpLCBjb21tYXNl
cChleHByZXNzaW9uTm9Db21tYSwgIikiKSwgcG9wbGV4LCBtZSk7CiAgICAgaWYgKHR5cGUgPT0g
Ii4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpOwotICAgIGlmICh0eXBlID09ICJbIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBt
ZSk7CisgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIG1heWJl
ZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwogICB9CiAgIGZ1bmN0aW9uIG1h
eWJlbGFiZWwodHlwZSkgewogICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4
LCBzdGF0ZW1lbnQpOwpAQCAtMzY2LDE0ICszNzMsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh2
YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hLCB2YXJkZWYyKTsKICAg
ICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwogICB9Ci0gIGZ1bmN0aW9u
IG1heWJlZWxzZShpbmRlbnQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHsK
LSAgICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiICYmIHZhbHVlID09ICJlbHNlIikgewotICAg
ICAgICBjeC5zdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIDAsICJmb3JtIiwg
bnVsbCwgY3guc3RhdGUubGV4aWNhbCk7Ci0gICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudCwg
cG9wbGV4KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXNzKCk7Ci0gICAgfTsKKyAgZnVuY3Rp
b24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIg
JiYgdmFsdWUgPT0gImVsc2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVu
dCwgcG9wbGV4KTsKICAgfQogICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7CiAgICAgaWYgKHR5
cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBmb3JzcGVjMik7
CkBAIC00MzQsMTkgKzQzNSwyMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgaWYgKHN0YXRlLnRva2Vu
aXplID09IGpzVG9rZW5Db21tZW50KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwogICAgICAgaWYg
KHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgIHZhciBmaXJz
dENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRl
LmxleGljYWw7CisgICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20gYmxv
Y2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCisgICAgICBmb3IgKHZhciBpID0gc3RhdGUuY2MubGVu
Z3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgdmFyIGMgPSBzdGF0ZS5jY1tpXTsKKyAg
ICAgICAgaWYgKGMgPT0gcG9wbGV4KSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OworICAgICAgICBl
bHNlIGlmIChjICE9IG1heWJlZWxzZSB8fCAvXmVsc2VcYi8udGVzdCh0ZXh0QWZ0ZXIpKSBicmVh
azsKKyAgICAgIH0KICAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiICYmIGZpcnN0Q2hh
ciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CisgICAgICBpZiAoc3RhdGVtZW50SW5k
ZW50ICYmIGxleGljYWwudHlwZSA9PSAiKSIgJiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gInN0YXQi
KQorICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwogICAgICAgdmFyIHR5cGUgPSBsZXhp
Y2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKLSAgICAgIGlmIChwYXJzZXJD
b25maWcuc3RhdGVtZW50SW5kZW50ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gIiki
ICYmIGxleGljYWwucHJldiAmJiBsZXhpY2FsLnByZXYudHlwZSA9PSAic3RhdCIpIGxleGljYWwg
PSBsZXhpY2FsLnByZXY7Ci0gICAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiKSByZXR1
cm4gbGV4aWNhbC5pbmRlbnRlZCArIHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7Ci0gICAg
ICB9CiAKICAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRl
ZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIs
IiA/IDQgOiAwKTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9
PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
Zm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsKICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gInN0YXQiKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChz
dGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IGlu
ZGVudFVuaXQgOiAwKTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAm
JiAhY2xvc2luZykKKyAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFz
dFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyBzdGF0ZW1lbnRJ
bmRlbnQgfHwgaW5kZW50VW5pdCA6IDApOworICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09
ICJzd2l0Y2giICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2gg
IT0gZmFsc2UpCiAgICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxk
ZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQp
OwogICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGlnbikgcmV0dXJuIGxleGljYWwuY29sdW1uICsg
KGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsg
KGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CkBAIC00NTYsNyArNDYxLDkgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKICAgICBi
bG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCiAgICAgbGluZUNvbW1lbnQ6
IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCisgICAgZm9sZDogImJyYWNlIiwKIAorICAgIGhlbHBl
clR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAogICAgIGpzb25Nb2RlOiBq
c29uTW9kZQogICB9OwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJh
Y2tldHMuanMKaW5kZXggZTRmZjkxNGM2YmJlMmUyNjc1ZTQ4MzM0YzJjMThiZjYyNzFhZGFjYy4u
MTMxZmU4MzFmZGM3NjYyYmI2ZjI1OWQ0MzY3NWRlZmIxOWZlNzZlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRj
aGJyYWNrZXRzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwpAQCAtNSwyNSArNSwyNiBAQAogICB2
YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7CiAKICAgdmFyIG1hdGNoaW5nID0geyIoIjogIik+Iiwg
IikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsiOiAifT4iLCAifSI6ICJ7PCJ9Owot
ICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdCcmFja2V0KGNtKSB7Ci0gICAgdmFyIG1heFNjYW5MZW4g
PSBjbS5zdGF0ZS5fbWF0Y2hCcmFja2V0cy5tYXhTY2FuTGluZUxlbmd0aCB8fCAxMDAwMDsKKyAg
ZnVuY3Rpb24gZmluZE1hdGNoaW5nQnJhY2tldChjbSwgd2hlcmUsIHN0cmljdCkgeworICAgIHZh
ciBzdGF0ZSA9IGNtLnN0YXRlLm1hdGNoQnJhY2tldHM7CisgICAgdmFyIG1heFNjYW5MZW4gPSAo
c3RhdGUgJiYgc3RhdGUubWF4U2NhbkxpbmVMZW5ndGgpIHx8IDEwMDAwOwogCi0gICAgdmFyIGN1
ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBv
cyA9IGN1ci5jaCAtIDE7CisgICAgdmFyIGN1ciA9IHdoZXJlIHx8IGNtLmdldEN1cnNvcigpLCBs
aW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBvcyA9IGN1ci5jaCAtIDE7CiAgICAg
dmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0p
IHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICBpZiAoIW1hdGNoKSBy
ZXR1cm4gbnVsbDsKICAgICB2YXIgZm9yd2FyZCA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIsIGQg
PSBmb3J3YXJkID8gMSA6IC0xOwotICAgIHZhciBzdHlsZSA9IGNtLmdldFRva2VuQXQoUG9zKGN1
ci5saW5lLCBwb3MgKyAxKSkudHlwZTsKKyAgICBpZiAoc3RyaWN0ICYmIGZvcndhcmQgIT0gKHBv
cyA9PSBjdXIuY2gpKSByZXR1cm4gbnVsbDsKKyAgICB2YXIgc3R5bGUgPSBjbS5nZXRUb2tlblR5
cGVBdChQb3MoY3VyLmxpbmUsIHBvcyArIDEpKTsKIAogICAgIHZhciBzdGFjayA9IFtsaW5lLnRl
eHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgIGZ1bmN0aW9uIHNjYW4obGlu
ZSwgbGluZU5vLCBzdGFydCkgewogICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAg
IHZhciBwb3MgPSBmb3J3YXJkID8gMCA6IGxpbmUudGV4dC5sZW5ndGggLSAxLCBlbmQgPSBmb3J3
YXJkID8gbGluZS50ZXh0Lmxlbmd0aCA6IC0xOwogICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGgg
PiBtYXhTY2FuTGVuKSByZXR1cm4gbnVsbDsKLSAgICAgIHZhciBjaGVja1Rva2VuU3R5bGVzID0g
bGluZS50ZXh0Lmxlbmd0aCA8IDEwMDA7CiAgICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgcG9zID0g
c3RhcnQgKyBkOwogICAgICAgZm9yICg7IHBvcyAhPSBlbmQ7IHBvcyArPSBkKSB7CiAgICAgICAg
IHZhciBjaCA9IGxpbmUudGV4dC5jaGFyQXQocG9zKTsKLSAgICAgICAgaWYgKHJlLnRlc3QoY2gp
ICYmICghY2hlY2tUb2tlblN0eWxlcyB8fCBjbS5nZXRUb2tlbkF0KFBvcyhsaW5lTm8sIHBvcyAr
IDEpKS50eXBlID09IHN0eWxlKSkgeworICAgICAgICBpZiAocmUudGVzdChjaCkgJiYgY20uZ2V0
VG9rZW5UeXBlQXQoUG9zKGxpbmVObywgcG9zICsgMSkpID09IHN0eWxlKSB7CiAgICAgICAgICAg
dmFyIG1hdGNoID0gbWF0Y2hpbmdbY2hdOwogICAgICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkg
PT0gIj4iID09IGZvcndhcmQpIHN0YWNrLnB1c2goY2gpOwogICAgICAgICAgIGVsc2UgaWYgKHN0
YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZh
bHNlfTsKQEAgLTM2LDEyICszNywxMyBAQAogICAgICAgZWxzZSBmb3VuZCA9IHNjYW4oY20uZ2V0
TGluZUhhbmRsZShpKSwgaSk7CiAgICAgICBpZiAoZm91bmQpIGJyZWFrOwogICAgIH0KLSAgICBy
ZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwgdG86IGZvdW5kICYmIFBvcyhpLCBmb3Vu
ZC5wb3MpLCBtYXRjaDogZm91bmQgJiYgZm91bmQubWF0Y2h9OworICAgIHJldHVybiB7ZnJvbTog
UG9zKGN1ci5saW5lLCBwb3MpLCB0bzogZm91bmQgJiYgUG9zKGksIGZvdW5kLnBvcyksCisgICAg
ICAgICAgICBtYXRjaDogZm91bmQgJiYgZm91bmQubWF0Y2gsIGZvcndhcmQ6IGZvcndhcmR9Owog
ICB9CiAKICAgZnVuY3Rpb24gbWF0Y2hCcmFja2V0cyhjbSwgYXV0b2NsZWFyKSB7CiAgICAgLy8g
RGlzYWJsZSBicmFjZSBtYXRjaGluZyBpbiBsb25nIGxpbmVzLCBzaW5jZSBpdCdsbCBjYXVzZSBo
dWdlbHkgc2xvdyB1cGRhdGVzCi0gICAgdmFyIG1heEhpZ2hsaWdodExlbiA9IGNtLnN0YXRlLl9t
YXRjaEJyYWNrZXRzLm1heEhpZ2hsaWdodExpbmVMZW5ndGggfHwgMTAwMDsKKyAgICB2YXIgbWF4
SGlnaGxpZ2h0TGVuID0gY20uc3RhdGUubWF0Y2hCcmFja2V0cy5tYXhIaWdobGlnaHRMaW5lTGVu
Z3RoIHx8IDEwMDA7CiAgICAgdmFyIGZvdW5kID0gZmluZE1hdGNoaW5nQnJhY2tldChjbSk7CiAg
ICAgaWYgKCFmb3VuZCB8fCBjbS5nZXRMaW5lKGZvdW5kLmZyb20ubGluZSkubGVuZ3RoID4gbWF4
SGlnaGxpZ2h0TGVuIHx8CiAgICAgICAgZm91bmQudG8gJiYgY20uZ2V0TGluZShmb3VuZC50by5s
aW5lKS5sZW5ndGggPiBtYXhIaWdobGlnaHRMZW4pCkBAIC03MiwxMSArNzQsMTMgQEAKICAgICBp
ZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpCiAgICAgICBjbS5vZmYoImN1cnNvckFj
dGl2aXR5IiwgZG9NYXRjaEJyYWNrZXRzKTsKICAgICBpZiAodmFsKSB7Ci0gICAgICBjbS5zdGF0
ZS5fbWF0Y2hCcmFja2V0cyA9IHR5cGVvZiB2YWwgPT0gIm9iamVjdCIgPyB2YWwgOiB7fTsKKyAg
ICAgIGNtLnN0YXRlLm1hdGNoQnJhY2tldHMgPSB0eXBlb2YgdmFsID09ICJvYmplY3QiID8gdmFs
IDoge307CiAgICAgICBjbS5vbigiY3Vyc29yQWN0aXZpdHkiLCBkb01hdGNoQnJhY2tldHMpOwog
ICAgIH0KICAgfSk7CiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oIm1hdGNoQnJhY2tl
dHMiLCBmdW5jdGlvbigpIHttYXRjaEJyYWNrZXRzKHRoaXMsIHRydWUpO30pOwotICBDb2RlTWly
cm9yLmRlZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsIGZ1bmN0aW9uKCl7cmV0
dXJuIGZpbmRNYXRjaGluZ0JyYWNrZXQodGhpcyk7fSk7CisgIENvZGVNaXJyb3IuZGVmaW5lRXh0
ZW5zaW9uKCJmaW5kTWF0Y2hpbmdCcmFja2V0IiwgZnVuY3Rpb24ocG9zLCBzdHJpY3QpeworICAg
IHJldHVybiBmaW5kTWF0Y2hpbmdCcmFja2V0KHRoaXMsIHBvcywgc3RyaWN0KTsKKyAgfSk7CiB9
KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwppbmRleCAwNjZkYjk3YTgyYTYyODBkYTlh
ZThiYTJkOTMyNWY1ZDFjNDY0OWJjLi45MDE2Y2M3YWFlOGJmNTkyNTI4ZTZmYjNmMTk0YTk4NWYz
YjhkYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwpAQCAtMTksNDMgKzE5LDY0IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAotICAgIGlmICgoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsv
KSkKLSAgICAgIHx8IChjaCA9PSAieCIgfHwgY2ggPT0gIlgiKSAmJiBzdHJlYW0ubWF0Y2goL14n
WzAtOWEtZkEtRl0rJy8pKSB7CisgICAgaWYgKHN1cHBvcnQuaGV4TnVtYmVyID09IHRydWUgJiYK
KyAgICAgICgoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsvKSkK
KyAgICAgIHx8IChjaCA9PSAieCIgfHwgY2ggPT0gIlgiKSAmJiBzdHJlYW0ubWF0Y2goL14nWzAt
OWEtZkEtRl0rJy8pKSkgewogICAgICAgLy8gaGV4CisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYu
bXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2hleGFkZWNpbWFsLWxpdGVyYWxzLmh0bWwKICAg
ICAgIHJldHVybiAibnVtYmVyIjsKLSAgICB9IGVsc2UgaWYgKCgoY2ggPT0gImIiIHx8IGNoID09
ICJCIikgJiYgc3RyZWFtLm1hdGNoKC9eJ1swMV0rJy8pKQotICAgICAgfHwgKGNoID09ICIwIiAm
JiBzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkpIHsKKyAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmlu
YXJ5TnVtYmVyID09IHRydWUgJiYKKyAgICAgICgoKGNoID09ICJiIiB8fCBjaCA9PSAiQiIpICYm
IHN0cmVhbS5tYXRjaCgvXidbMDFdKycvKSkKKyAgICAgIHx8IChjaCA9PSAiMCIgJiYgc3RyZWFt
Lm1hdGNoKC9eYlswMV0rLykpKSkgewogICAgICAgLy8gYml0c3RyaW5nCisgICAgICAvLyByZWY6
IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2JpdC1maWVsZC1saXRlcmFs
cy5odG1sCiAgICAgICByZXR1cm4gIm51bWJlciI7CiAgICAgfSBlbHNlIGlmIChjaC5jaGFyQ29k
ZUF0KDApID4gNDcgJiYgY2guY2hhckNvZGVBdCgwKSA8IDU4KSB7CiAgICAgICAvLyBudW1iZXJz
Ci0gICAgICBzdHJlYW0ubWF0Y2goL15bMC05XSpcLj9bMC05XSsoW2VFXVstK10/WzAtOV0rKT8v
KTsKKyAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4v
bnVtYmVyLWxpdGVyYWxzLmh0bWwKKyAgICAgICAgICBzdHJlYW0ubWF0Y2goL15bMC05XSpcLj9b
MC05XSsoW2VFXVstK10/WzAtOV0rKT8vKTsKKyAgICAgIHN1cHBvcnQuZGVjaW1hbGxlc3NGbG9h
dCA9PSB0cnVlICYmIHN0cmVhbS5lYXQoJy4nKTsKICAgICAgIHJldHVybiAibnVtYmVyIjsKICAg
ICB9IGVsc2UgaWYgKGNoID09ICI/IiAmJiAoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVv
bCgpIHx8IHN0cmVhbS5lYXQoIjsiKSkpIHsKICAgICAgIC8vIHBsYWNlaG9sZGVycwogICAgICAg
cmV0dXJuICJ2YXJpYWJsZS0zIjsKLSAgICB9IGVsc2UgaWYgKGNoID09ICciJyB8fCBjaCA9PSAi
JyIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCAoY2ggPT0gJyInICYmIHN1cHBvcnQu
ZG91YmxlUXVvdGUpKSB7CiAgICAgICAvLyBzdHJpbmdzCisgICAgICAvLyByZWY6IGh0dHA6Ly9k
ZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sCiAgICAg
ICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7CiAgICAgICByZXR1cm4gc3RhdGUu
dG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CisgICAgfSBlbHNlIGlmICgoKChzdXBwb3J0Lm5DaGFy
Q2FzdCA9PSB0cnVlICYmIChjaCA9PSAibiIgfHwgY2ggPT0gIk4iKSkKKyAgICAgICAgfHwgKHN1
cHBvcnQuY2hhcnNldENhc3QgPT0gdHJ1ZSAmJiBjaCA9PSAiXyIgJiYgc3RyZWFtLm1hdGNoKC9b
YS16XVthLXowLTldKi9pKSkpCisgICAgICAgICYmIChzdHJlYW0ucGVlaygpID09ICInIiB8fCBz
dHJlYW0ucGVlaygpID09ICciJykpKSB7CisgICAgICAvLyBjaGFyc2V0IGNhc3Rpbmc6IF91dGY4
J3N0cicsIE4nc3RyJywgbidzdHInCisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29t
L2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sCisgICAgICByZXR1cm4gImtl
eXdvcmQiOwogICAgIH0gZWxzZSBpZiAoL15bXChcKSxcO1xbXF1dLy50ZXN0KGNoKSkgewogICAg
ICAgLy8gbm8gaGlnaGxpZ2h0bmluZwogICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBlbHNlIGlm
IChjaCA9PSAiIyIgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikgJiYgc3RyZWFtLmVh
dCgiICIpKSkgeworICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5jb21tZW50U2xhc2hTbGFzaCAmJiBj
aCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiLyIpKSB7CisgICAgICAvLyAxLWxpbmUgY29tbWVudAor
ICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOworICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICB9
IGVsc2UgaWYgKChzdXBwb3J0LmNvbW1lbnRIYXNoICYmIGNoID09ICIjIikKKyAgICAgICAgfHwg
KGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikgJiYgKCFzdXBwb3J0LmNvbW1lbnRTcGFjZVJl
cXVpcmVkIHx8IHN0cmVhbS5lYXQoIiAiKSkpKSB7CiAgICAgICAvLyAxLWxpbmUgY29tbWVudHMK
KyAgICAgIC8vIHJlZjogaHR0cHM6Ly9rYi5hc2ttb250eS5vcmcvZW4vY29tbWVudC1zeW50YXgv
CiAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAg
IH0gZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgLy8gbXVs
dGktbGluZSBjb21tZW50cworICAgICAgLy8gcmVmOiBodHRwczovL2tiLmFza21vbnR5Lm9yZy9l
bi9jb21tZW50LXN5bnRheC8KICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50Owog
ICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgIH0gZWxzZSBp
ZiAoY2ggPT0gIi4iKSB7CiAgICAgICAvLyAuMSBmb3IgMC4xCi0gICAgICBpZiAoc3VwcG9ydC56
ZXJvbGVzc0Zsb2F0ID09IHRydWUgJiYgc3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVxkKik/fFxk
KmVcZCspL2kpKSB7CisgICAgICBpZiAoc3VwcG9ydC56ZXJvbGVzc0Zsb2F0ID09IHRydWUgJiYg
c3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVsrLV0/XGQrKT8pL2kpKSB7CiAgICAgICAgIHJldHVy
biAibnVtYmVyIjsKICAgICAgIH0KICAgICAgIC8vIC50YWJsZV9uYW1lIChPREJDKQotICAgICAg
aWYgKHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfXSsvKSAmJiBzdXBwb3J0Lk9EQkNkb3RUYWJsZSA9
PSB0cnVlKSB7CisgICAgICAvLyAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZt
YW4vNS42L2VuL2lkZW50aWZpZXItcXVhbGlmaWVycy5odG1sCisgICAgICBpZiAoc3VwcG9ydC5P
REJDZG90VGFibGUgPT0gdHJ1ZSAmJiBzdHJlYW0ubWF0Y2goL15bYS16QS1aX10rLykpIHsKICAg
ICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG9wZXJh
dG9yQ2hhcnMudGVzdChjaCkpIHsKQEAgLTY1LDExICs4NiwxMyBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfSBlbHNl
IGlmIChjaCA9PSAneycgJiYKICAgICAgICAgKHN0cmVhbS5tYXRjaCgvXiggKSooZHxEfHR8VHx0
c3xUUykoICkqJ1teJ10qJyggKSp9LykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKihkfER8dHxUfHRz
fFRTKSggKSoiW14iXSoiKCApKn0vKSkpIHsKICAgICAgIC8vIGRhdGVzICh3ZWlyZCBPREJDIHN5
bnRheCkKKyAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUv
ZW4vZGF0ZS1hbmQtdGltZS1saXRlcmFscy5odG1sCiAgICAgICByZXR1cm4gIm51bWJlciI7CiAg
ICAgfSBlbHNlIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXltfXHdcZF0vKTsKICAgICAgIHZh
ciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgLy8gZGF0ZXMg
KHN0YW5kYXJkIFNRTCBzeW50YXgpCisgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29t
L2RvYy9yZWZtYW4vNS41L2VuL2RhdGUtYW5kLXRpbWUtbGl0ZXJhbHMuaHRtbAogICAgICAgaWYg
KGRhdGVTUUwuaGFzT3duUHJvcGVydHkod29yZCkgJiYgKHN0cmVhbS5tYXRjaCgvXiggKSsnW14n
XSonLykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKyJbXiJdKiIvKSkpCiAgICAgICAgIHJldHVybiAi
bnVtYmVyIjsKICAgICAgIGlmIChhdG9tcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgcmV0dXJuICJh
dG9tIjsKQEAgLTE2Niw2ICsxODksOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgLy8gYGlkZW50aWZpZXJgCiAgIGZ1
bmN0aW9uIGhvb2tJZGVudGlmaWVyKHN0cmVhbSkgeworICAgIC8vIE15U1FML01hcmlhREIgaWRl
bnRpZmllcnMKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS42
L2VuL2lkZW50aWZpZXItcXVhbGlmaWVycy5odG1sCiAgICAgdmFyIGNoOwogICAgIHdoaWxlICgo
Y2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICBpZiAoY2ggPT0gImAiICYmICFz
dHJlYW0uZWF0KCJgIikpIHJldHVybiAidmFyaWFibGUtMiI7CkBAIC0xNzYsNyArMjAxLDkgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICAvLyB2YXJpYWJsZSB0b2tlbgogICBmdW5jdGlvbiBob29rVmFyKHN0cmVhbSkgewog
ICAgIC8vIHZhcmlhYmxlcwotICAgIC8vIEBAIGFuZCBwcmVmaXgKKyAgICAvLyBAQHByZWZpeC52
YXJOYW1lIEB2YXJOYW1lCisgICAgLy8gdmFyTmFtZSBjYW4gYmUgcXVvdGVkIHdpdGggYCBvciAn
IG9yICIKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2Vu
L3VzZXItdmFyaWFibGVzLmh0bWwKICAgICBpZiAoc3RyZWFtLmVhdCgiQCIpKSB7CiAgICAgICBz
dHJlYW0ubWF0Y2goL15zZXNzaW9uXC4vKTsKICAgICAgIHN0cmVhbS5tYXRjaCgvXmxvY2FsXC4v
KTsKQEAgLTIwMCwxOCArMjI3LDI3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAvLyBzaG9ydCBjbGllbnQga2V5d29y
ZCB0b2tlbgogICBmdW5jdGlvbiBob29rQ2xpZW50KHN0cmVhbSkgeworICAgIC8vIFxOIG1lYW5z
IE5VTEwKKyAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2Vu
L251bGwtdmFsdWVzLmh0bWwKKyAgICBpZiAoc3RyZWFtLmVhdCgiTiIpKSB7CisgICAgICAgIHJl
dHVybiAiYXRvbSI7CisgICAgfQogICAgIC8vIFxnLCBldGMKLSAgICByZXR1cm4gc3RyZWFtLm1h
dGNoKC9eW2EtekEtWl1cYi8pID8gInZhcmlhYmxlLTIiIDogbnVsbDsKKyAgICAvLyByZWY6IGh0
dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL215c3FsLWNvbW1hbmRzLmh0bWwK
KyAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW2EtekEtWi4jIT9dLykgPyAidmFyaWFibGUtMiIg
OiBudWxsOwogICB9CiAKKyAgLy8gdGhlc2Uga2V5d29yZHMgYXJlIHVzZWQgYnkgYWxsIFNRTCBk
aWFsZWN0cyAoaG93ZXZlciwgYSBtb2RlIGNhbiBzdGlsbCBvdmVyd3JpdGUgaXQpCiAgIHZhciBz
cWxLZXl3b3JkcyA9ICJhbHRlciBhbmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRl
bGV0ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMgam9p
biBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2YWx1
ZXMgd2hlcmUgIjsKIAorICAvLyB0dXJuIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3QgaW50byBhbiBh
cnJheQogICBmdW5jdGlvbiBzZXQoc3RyKSB7CiAgICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0
ci5zcGxpdCgiICIpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kp
IG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgIHJldHVybiBvYmo7CiAgIH0KIAorICAvLyBBIGdl
bmVyaWMgU1FMIE1vZGUuIEl0J3Mgbm90IGEgc3RhbmRhcmQsIGl0IGp1c3QgdHJ5IHRvIHN1cHBv
cnQgd2hhdCBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkCiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
dGV4dC94LXNxbCIsIHsKICAgICBuYW1lOiAic3FsIiwKICAgICBrZXl3b3Jkczogc2V0KHNxbEtl
eXdvcmRzICsgImJlZ2luIiksCkBAIC0yMTksNyArMjU1LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGF0b21zOiBz
ZXQoImZhbHNlIHRydWUgbnVsbCB1bmtub3duIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitc
LSU8PiE9XS8sCiAgICAgZGF0ZVNRTDogc2V0KCJkYXRlIHRpbWUgdGltZXN0YW1wIiksCi0gICAg
c3VwcG9ydDogc2V0KCJPREJDZG90VGFibGUiKQorICAgIHN1cHBvcnQ6IHNldCgiT0RCQ2RvdFRh
YmxlIGRvdWJsZVF1b3RlIGJpbmFyeU51bWJlciBoZXhOdW1iZXIiKQogICB9KTsKIAogICBDb2Rl
TWlycm9yLmRlZmluZU1JTUUoInRleHQveC1teXNxbCIsIHsKQEAgLTIzMCw3ICsyNjYsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxsIHVua25vd24iKSwKICAgICBvcGVy
YXRvckNoYXJzOiAvXlsqK1wtJTw+IT0mfF5dLywKICAgICBkYXRlU1FMOiBzZXQoImRhdGUgdGlt
ZSB0aW1lc3RhbXAiKSwKLSAgICBzdXBwb3J0OiBzZXQoIk9EQkNkb3RUYWJsZSB6ZXJvbGVzc0Zs
b2F0IiksCisgICAgc3VwcG9ydDogc2V0KCJPREJDZG90VGFibGUgZGVjaW1hbGxlc3NGbG9hdCB6
ZXJvbGVzc0Zsb2F0IGJpbmFyeU51bWJlciBoZXhOdW1iZXIgZG91YmxlUXVvdGUgbkNoYXJDYXN0
IGNoYXJzZXRDYXN0IGNvbW1lbnRIYXNoIGNvbW1lbnRTcGFjZVJlcXVpcmVkIiksCiAgICAgaG9v
a3M6IHsKICAgICAgICJAIjogICBob29rVmFyLAogICAgICAgImAiOiAgIGhvb2tJZGVudGlmaWVy
LApAQCAtMjQ2LDcgKzI4Miw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBhdG9tczogc2V0KCJmYWxzZSB0cnVlIG51
bGwgdW5rbm93biIpLAogICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyorXC0lPD4hPSZ8Xl0vLAogICAg
IGRhdGVTUUw6IHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpLAotICAgIHN1cHBvcnQ6IHNldCgi
T0RCQ2RvdFRhYmxlIHplcm9sZXNzRmxvYXQiKSwKKyAgICBzdXBwb3J0OiBzZXQoIk9EQkNkb3RU
YWJsZSBkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJl
ciBkb3VibGVRdW90ZSBuQ2hhckNhc3QgY2hhcnNldENhc3QgY29tbWVudEhhc2ggY29tbWVudFNw
YWNlUmVxdWlyZWQiKSwKICAgICBob29rczogewogICAgICAgIkAiOiAgIGhvb2tWYXIsCiAgICAg
ICAiYCI6ICAgaG9va0lkZW50aWZpZXIsCkBAIC0yNTQsNiArMjkwLDIwIEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9
CiAgIH0pOwogCisgIC8vIHRoZSBxdWVyeSBsYW5ndWFnZSB1c2VkIGJ5IEFwYWNoZSBDYXNzYW5k
cmEgaXMgY2FsbGVkIENRTCwgYnV0IHRoaXMgbWltZSB0eXBlCisgIC8vIGlzIGNhbGxlZCBDYXNz
YW5kcmEgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggQ29udGV4dHVhbCBRdWVyeSBMYW5ndWFnZQor
ICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jYXNzYW5kcmEiLCB7CisgICAgbmFtZTog
InNxbCIsCisgICAgY2xpZW50OiB7IH0sCisgICAga2V5d29yZHM6IHNldCgidXNlIHNlbGVjdCBm
cm9tIHVzaW5nIGNvbnNpc3RlbmN5IHdoZXJlIGxpbWl0IGZpcnN0IHJldmVyc2VkIGZpcnN0IGFu
ZCBpbiBpbnNlcnQgaW50byB2YWx1ZXMgdXNpbmcgY29uc2lzdGVuY3kgdHRsIHVwZGF0ZSBzZXQg
ZGVsZXRlIHRydW5jYXRlIGJlZ2luIGJhdGNoIGFwcGx5IGNyZWF0ZSBrZXlzcGFjZSB3aXRoIGNv
bHVtbmZhbWlseSBwcmltYXJ5IGtleSBpbmRleCBvbiBkcm9wIGFsdGVyIHR5cGUgYWRkIGFueSBv
bmUgcXVvcnVtIGFsbCBsb2NhbF9xdW9ydW0gZWFjaF9xdW9ydW0iKSwKKyAgICBidWlsdGluOiBz
ZXQoImFzY2lpIGJpZ2ludCBibG9iIGJvb2xlYW4gY291bnRlciBkZWNpbWFsIGRvdWJsZSBmbG9h
dCBpbnQgdGV4dCB0aW1lc3RhbXAgdXVpZCB2YXJjaGFyIHZhcmludCIpLAorICAgIGF0b21zOiBz
ZXQoImZhbHNlIHRydWUiKSwKKyAgICBvcGVyYXRvckNoYXJzOiAvXls8Pj1dLywKKyAgICBkYXRl
U1FMOiB7IH0sCisgICAgc3VwcG9ydDogc2V0KCJjb21tZW50U2xhc2hTbGFzaCBkZWNpbWFsbGVz
c0Zsb2F0IiksCisgICAgaG9va3M6IHsgfQorICB9KTsKKwogICAvLyB0aGlzIGlzIGJhc2VkIG9u
IFBldGVyIFJhZ2FuaXRzY2gncyAncGxzcWwnIG1vZGUKICAgQ29kZU1pcnJvci5kZWZpbmVNSU1F
KCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICAgbmFtZTogICAgICAgInNxbCIsCkBAIC0yNjIsNiArMzEy
LDM4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICBmdW5jdGlvbnM6ICBzZXQoImFicyBhY29zIGFkZF9tb250aHMgYXNj
aWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgYmZpbGVuYW1lIGNlaWwgY2hhcnRvcm93aWQgY2hy
IGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50IGRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVw
X3ZhbF9vbl9pbmRleCBlbXB0eSBlcnJvciBleHAgZmFsc2UgZmxvb3IgZm91bmQgZ2xiIGdyZWF0
ZXN0IGhleHRvcmF3IGluaXRjYXAgaW5zdHIgaW5zdHJiIGlzb3BlbiBsYXN0X2RheSBsZWFzdCBs
ZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiBtYWtlX3JlZiBtYXggbWluIG1v
ZCBtb250aHNfYmV0d2VlbiBuZXdfdGltZSBuZXh0X2RheSBuZXh0dmFsIG5sc19jaGFyc2V0X2Rl
Y2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0X25hbWUgbmxzX2luaXRjYXAgbmxzX2xv
d2VyIG5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVs
bCBudmwgb3RoZXJzIHBvd2VyIHJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lk
dG9jaGFyIHJwYWQgcnRyaW0gc2lnbiBzaW4gc2luaCBzb3VuZGV4IHNxbGNvZGUgc3FsZXJybSBz
cXJ0IHN0ZGRldiBzdWJzdHIgc3Vic3RyYiBzdW0gc3lzZGF0ZSB0YW4gdGFuaCB0b19jaGFyIHRv
X2RhdGUgdG9fbGFiZWwgdG9fbXVsdGlfYnl0ZSB0b19udW1iZXIgdG9fc2luZ2xlX2J5dGUgdHJh
bnNsYXRlIHRydWUgdHJ1bmMgdWlkIHVwcGVyIHVzZXIgdXNlcmVudiB2YXJpYW5jZSB2c2l6ZSIp
LAogICAgIGJ1aWx0aW46ICAgIHNldCgiYmZpbGUgYmxvYiBjaGFyYWN0ZXIgY2xvYiBkZWMgZmxv
YXQgaW50IGludGVnZXIgbWxzbGFiZWwgbmF0dXJhbCBuYXR1cmFsbiBuY2hhciBuY2xvYiBudW1i
ZXIgbnVtZXJpYyBudmFyY2hhcjIgcmVhbCByb3d0eXBlIHNpZ250eXBlIHNtYWxsaW50IHN0cmlu
ZyB2YXJjaGFyIHZhcmNoYXIyIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9fl0v
LAotICAgIGRhdGVTUUw6ICAgIHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpCisgICAgZGF0ZVNR
TDogICAgc2V0KCJkYXRlIHRpbWUgdGltZXN0YW1wIiksCisgICAgc3VwcG9ydDogICAgc2V0KCJk
b3VibGVRdW90ZSBuQ2hhckNhc3QgemVyb2xlc3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVy
IikKICAgfSk7CiB9KCkpOworCisvKgorICBIb3cgUHJvcGVydGllcyBvZiBNaW1lIFR5cGVzIGFy
ZSB1c2VkIGJ5IFNRTCBNb2RlCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworICBrZXl3b3JkczoKKyAgICBBIGxpc3Qgb2Yga2V5d29yZHMgeW91
IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgIGZ1bmN0aW9uczoKKyAgICBBIGxpc3Qgb2YgZnVu
Y3Rpb24gbmFtZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgIGJ1aWx0aW46CisgICAg
QSBsaXN0IG9mIGJ1aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQgKGlmIHlv
dSB3YW50IHR5cGVzIHRvIGJlIG9mIGNsYXNzICJidWlsdGluIiBpbnN0ZWFkIG9mICJrZXl3b3Jk
IikuCisgIG9wZXJhdG9yQ2hhcnM6CisgICAgQWxsIGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGhh
bmRsZWQgYXMgb3BlcmF0b3JzLgorICBjbGllbnQ6CisgICAgQ29tbWFuZHMgcGFyc2VkIGFuZCBl
eGVjdXRlZCBieSB0aGUgY2xpZW50IChub3QgdGhlIHNlcnZlcikuCisgIHN1cHBvcnQ6CisgICAg
QSBsaXN0IG9mIHN1cHBvcnRlZCBzeW50YXhlcyB3aGljaCBhcmUgbm90IGNvbW1vbiwgYnV0IGFy
ZSBzdXBwb3J0ZWQgYnkgbW9yZSB0aGFuIDEgREJNUy4KKyAgICAqIE9EQkNkb3RUYWJsZTogLnRh
YmxlTmFtZQorICAgICogemVyb2xlc3NGbG9hdDogLjEKKyAgICAqIGRvdWJsZVF1b3RlCisgICAg
KiBuQ2hhckNhc3Q6IE4nc3RyaW5nJworICAgICogY2hhcnNldENhc3Q6IF91dGY4J3N0cmluZycK
KyAgICAqIGNvbW1lbnRIYXNoOiB1c2UgIyBjaGFyIGZvciBjb21tZW50cworICAgICogY29tbWVu
dFNsYXNoU2xhc2g6IHVzZSAvLyBmb3IgY29tbWVudHMKKyAgICAqIGNvbW1lbnRTcGFjZVJlcXVp
cmVkOiByZXF1aXJlIGEgc3BhY2UgYWZ0ZXIgLS0gZm9yIGNvbW1lbnRzCisgIGF0b21zOgorICAg
IEtleXdvcmRzIHRoYXQgbXVzdCBiZSBoaWdobGlnaHRlZCBhcyBhdG9tcywuIFNvbWUgREJNUydz
IHN1cHBvcnQgbW9yZSBhdG9tcyB0aGFuIG90aGVyczoKKyAgICBVTktOT1dOLCBJTkZJTklUWSwg
VU5ERVJGTE9XLCBOYU4uLi4KKyAgZGF0ZVNRTDoKKyAgICBVc2VkIGZvciBkYXRlL3RpbWUgU1FM
IHN0YW5kYXJkIHN5bnRheCwgYmVjYXVzZSBub3QgYWxsIERCTVMncyBzdXBwb3J0IHNhbWUgdGVt
cG9yYWwgdHlwZXMuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwppbmRleCBiMDQyNDhj
NmM2ODlhM2Y5MzAwYTczMDA3OGU4OTc1NmY0M2IyYTAyLi4wN2RiMjk5MDM5MGU5Y2NhZTZkMTI2
YmZjN2JiOWRjNmU4NDdjMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwpAQCAtNTgs
MjAgKzU4LDE5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkgewogICAgICAg
ICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRv
bSIsICJdXT4iKSk7CiAgICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJj
b21tZW50IiwgIi0tPiIpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBF
IiwgdHJ1ZSwgdHJ1ZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikp
IHsKKyAgICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICItLT4iKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsK
ICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgICAgIHJldHVy
biBjaGFpbihkb2N0eXBlKDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CisgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5l
YXQoIj8iKSkgewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAg
ICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICAgcmV0dXJu
ICJtZXRhIjsKLSAgICAgIH0KLSAgICAgIGVsc2UgeworICAgICAgfSBlbHNlIHsKICAgICAgICAg
dmFyIGlzQ2xvc2UgPSBzdHJlYW0uZWF0KCIvIik7CiAgICAgICAgIHRhZ05hbWUgPSAiIjsKICAg
ICAgICAgdmFyIGM7CkBAIC04MSw4ICs4MCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1s
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgc3RhdGUudG9rZW5p
emUgPSBpblRhZzsKICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgfQotICAgIH0KLSAgICBl
bHNlIGlmIChjaCA9PSAiJiIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICImIikgewogICAgICAg
dmFyIG9rOwogICAgICAgaWYgKHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICBpZiAoc3RyZWFt
LmVhdCgieCIpKSB7CkBAIC05NCw4ICs5Miw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1s
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgb2sgPSBzdHJlYW0u
ZWF0V2hpbGUoL1tcd1wuXC06XS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgIH0KICAgICAg
IHJldHVybiBvayA/ICJhdG9tIiA6ICJlcnJvciI7Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0g
ZWxzZSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7CiAgICAgICByZXR1cm4gbnVs
bDsKICAgICB9CkBAIC0xMDcsMTYgKzEwNCwxNSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInht
bCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IGluVGV4dDsKICAgICAgIHR5cGUgPSBjaCA9PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xv
c2VUYWciOwogICAgICAgcmV0dXJuICJ0YWciOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PSAi
PSIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICI9IikgewogICAgICAgdHlwZSA9ICJlcXVhbHMi
OwogICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9bXCdcIl0vLnRlc3Qo
Y2gpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiPCIpIHsKKyAgICAgIHJldHVybiAiZXJyb3Ii
OworICAgIH0gZWxzZSBpZiAoL1tcJ1wiXS8udGVzdChjaCkpIHsKICAgICAgIHN0YXRlLnRva2Vu
aXplID0gaW5BdHRyaWJ1dGUoY2gpOwogICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVh
bSwgc3RhdGUpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgc3RyZWFt
LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKTsKICAgICAgIHJldHVybiAid29yZCI7CiAg
ICAgfQpAQCAtMzIwLDcgKzMxNiw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBibG9ja0NvbW1lbnRTdGFydDogIjwh
LS0iLAogICAgIGJsb2NrQ29tbWVudEVuZDogIi0tPiIsCiAKLSAgICBjb25maWd1cmF0aW9uOiBw
YXJzZXJDb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIgorICAgIGNvbmZpZ3VyYXRpb246
IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiLAorICAgIGhlbHBlclR5cGU6
IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiCiAgIH07CiB9KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>