<?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>118658</bug_id>
          
          <creation_ts>2013-07-14 23:38:16 -0700</creation_ts>
          <short_desc>REGRESSION(r152598): totally broke the web inspector (JS ERROR: SyntaxError: Expected token &apos;}&apos;) (Requested by thorton on #webkit).</short_desc>
          <delta_ts>2013-07-14 23:40:57 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>118605</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>908310</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-14 23:38:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/152598 broke the build:
totally broke the web inspector (JS ERROR: SyntaxError: Expected token &apos;}&apos;) (Requested by thorton on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908312</commentid>
    <comment_count>1</comment_count>
      <attachid>206642</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-14 23:38:30 -0700</bug_when>
    <thetext>Created attachment 206642
ROLLOUT of r152598

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908313</commentid>
    <comment_count>2</comment_count>
      <attachid>206642</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-14 23:40:55 -0700</bug_when>
    <thetext>Comment on attachment 206642
ROLLOUT of r152598

Clearing flags on attachment: 206642

Committed r152624: &lt;http://trac.webkit.org/changeset/152624&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908314</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-14 23:40:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206642</attachid>
            <date>2013-07-14 23:38:30 -0700</date>
            <delta_ts>2013-07-14 23:40:55 -0700</delta_ts>
            <desc>ROLLOUT of r152598</desc>
            <filename>bug-118658-20130714233720.patch</filename>
            <type>text/plain</type>
            <size>237593</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5
N2E4OGQwMTFlM2Y5MmQzZDBmMmRiM2M1YjZmNDNhOTcyODkyNjY1Li42NzE1OGMwMGUwOTc1MmUx
NzkzYzQwYWIxNThiZTJiMDUxOGEzN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxMy0wNy0xNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE1MjU5OC4KKyAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTUyNTk4CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NTgKKworICAgICAgICB0b3Rh
bGx5IGJyb2tlIHRoZSB3ZWIgaW5zcGVjdG9yIChKUyBFUlJPUjogU3ludGF4RXJyb3I6CisgICAg
ICAgIEV4cGVjdGVkIHRva2VuICd9JykgKFJlcXVlc3RlZCBieSB0aG9ydG9uIG9uICN3ZWJraXQp
LgorCisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMu
anM6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzOgorICAgICAg
ICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzOgorICAg
ICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzOgorICAgICAgICAoLkNv
ZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlcik6CisgICAgICAgICguQ29kZU1pcnJvci1ndXR0ZXJz
KToKKyAgICAgICAgKC5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5Db2RlTWlycm9yLWhzY3JvbGxi
YXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIpOgorICAgICAgICAoLkNvZGVNaXJyb3It
d2lkZ2V0KToKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzOgor
ICAgICAgICAod2luZG93LkNvZGVNaXJyb3IpOgorICAgICAgICAod2luZG93LkNvZGVNaXJyb3Iu
KToKKyAgICAgICAgKC5kbyk6CisgICAgICAgIChtb3ZlVmlzdWFsbHkpOgorICAgICAgICAqIFRv
b2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qczoKKyAgICAgICAgKC4pOgorICAgICAgICAoQ29kZU1p
cnJvcik6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qczoKKyAg
ICAgICAgKC4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9j
b2RlbWlycm9yLmNzczoKKyAgICAgICAgKC5Db2RlTWlycm9yLXdpZGdldCk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CisgICAgICAg
ICh3aW5kb3cuQ29kZU1pcnJvcik6CisgICAgICAgICh3aW5kb3cuQ29kZU1pcnJvci4pOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanM6
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanM6
CisgICAgICAgICguKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvY3NzLmpzOgorICAgICAgICAoLik6CisgICAgICAgIChDb2RlTWlycm9yKToKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qczoKKyAgICAg
ICAgKC4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRj
aGJyYWNrZXRzLmpzOgorICAgICAgICAoLik6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3NxbC5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IveG1sLmpzOgorCiAyMDEzLTA3LTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1v
dGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgQ29kZU1pcnJvciB0byA3ZjU2MGFmYTFj
ICgzLjE0KykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKaW5kZXggODFjODE1
NWU3MTI3NWNjOTkwMmE2MDYzOWNkNDYzMjRkYmEwNzk2Yi4uZDVmYTk0MWE0Njk0NmFlYmUxZTQ1
YzZhYWE2M2U1OTY3NGE3YjIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rv
b2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5q
cwpAQCAtMSwyOCArMSwzIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQogLy8gSW4gdGhlIGluc3BlY3RvciB0b2tl
biB0eXBlcyBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBleHRyYSBtb2RlIGluZm9ybWF0
aW9uCiAvLyBhZnRlciB0aGUgYWN0dWFsIHRva2VuIHR5cGUuIFNvIHdlIGNhbid0IGRvIHRva2Vu
ID09PSAiZm9vIi4gU28gaW5zdGVhZCB3ZSBkbwogLy8gL1xiZm9vXGIvLnRlc3QodG9rZW4pLgpA
QCAtNjcsOCArNDIsNiBAQCBDb2RlTWlycm9yLmV4dGVuZE1vZGUoImphdmFzY3JpcHQiLCB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBpZiAobGFzdENvbnRlbnQg
PT09ICJmaW5hbGx5IikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChsYXN0Q29udGVudCA9PT0gImRvIikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcwppbmRl
eCA1MjRlNTBkNWFiMzg3ZTNjMWE3Njg5ZDEyMjBmNWYzYzBjMzQ0MjhhLi42ZmQ2NThlZjk0YzYw
Njc2NWFmYWY5NWZiNWU4ZmEwN2NkZmRiMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMKQEAgLTEsMjggKzEs
MyBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KIGZ1bmN0aW9uIEZvcm1hdHRlcihjb2RlTWlycm9yLCBidWlsZGVy
KQogewogICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVNaXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWls
ZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1h
dHRlckNvbnRlbnRCdWlsZGVyLmpzCmluZGV4IDQ1OTY4ODBjYmExOWEyYzBkOGEyMzk2MTc3YTBm
ZWE0ZTVkMTBiMTYuLmU5NGRlY2E1ZmIwMTE3NWRkZDU0OTViMzM0ZTYwZjBkOGFhMzIzYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXJDb250ZW50QnVpbGRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMv
UHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMKQEAgLTEsMjggKzEsMyBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KIGZ1bmN0aW9uIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyKG1hcHBpbmcs
IG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCBvcmlnaW5hbE9mZnNl
dCwgZm9ybWF0dGVkT2Zmc2V0LCBpbmRlbnRTdHJpbmcpCiB7CiAgICAgdGhpcy5fb3JpZ2luYWxD
b250ZW50ID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29s
cy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcwppbmRleCA1Mjg4MWY3ZGZkMDlmODNjYzVj
ZDU2ZjkxZmQzY2E2Yjg0NjBjMDI1Li4wYjUzNzA0NTA2NzM1NTRjY2Y5MjMyMDAyMmY4MzA3YmE3
MzgwNjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJp
bnRpbmcvY29kZW1pcnJvci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1By
ZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzCkBAIC0xOSw3ICsxOSw3IEBACiAgIHBhZGRpbmc6
IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwogfQogCi0uQ29kZU1p
cnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKKy5Db2Rl
TWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyog
VGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KIH0KIApAQCAt
MjgsNyArMjgsNiBAQAogLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgIGJvcmRlci1yaWdodDogMXB4
IHNvbGlkICNkZGQ7CiAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7Ci0gIHdoaXRlLXNwYWNl
OiBub3dyYXA7CiB9CiAuQ29kZU1pcnJvci1saW5lbnVtYmVycyB7fQogLkNvZGVNaXJyb3ItbGlu
ZW51bWJlciB7CkBAIC0xMjUsNyArMTI0LDcgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWly
cm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogLyogVGhlIGZha2UsIHZpc2li
bGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICAg
YmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5n
IGFuZAogICAgZmxpY2tlcmluZyBhcnRpZmFjdHMuICovCi0uQ29kZU1pcnJvci12c2Nyb2xsYmFy
LCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAu
Q29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKKy5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5Db2Rl
TWlycm9yLWhzY3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICBwb3Np
dGlvbjogYWJzb2x1dGU7CiAgIHotaW5kZXg6IDY7CiAgIGRpc3BsYXk6IG5vbmU7CkBAIC0xNDIs
MTggKzE0MSwxNiBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdi
cmFja2V0IHtjb2xvcjogI2YyMjt9CiB9CiAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsK
ICAgcmlnaHQ6IDA7IGJvdHRvbTogMDsKLX0KLS5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewot
ICBsZWZ0OiAwOyBib3R0b206IDA7CisgIHotaW5kZXg6IDY7CiB9CiAKIC5Db2RlTWlycm9yLWd1
dHRlcnMgewogICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKKyAgaGVpZ2h0
OiAxMDAlOwogICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgei1pbmRleDogMzsKIH0KIC5Db2Rl
TWlycm9yLWd1dHRlciB7Ci0gIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgIGhlaWdodDogMTAwJTsK
ICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwpAQCAtMjA1
LDYgKzIwMiw3IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2Jy
YWNrZXQge2NvbG9yOiAjZjIyO30KIH0KIAogLkNvZGVNaXJyb3Itd2lkZ2V0IHsKKyAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOwogfQogCiAuQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLXNjcm9s
bCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvY29kZW1pcnJvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmlu
dGluZy9jb2RlbWlycm9yLmpzCmluZGV4IDlhNmE5MzIwMTAyNzk5YmY4YTU3YTUzZTFjNzc2Mjli
NTdhNDdhYTYuLjlhOTZjZDY5ODYzZmNlMTlmMzUyYzhmZTNkYTJmOTg4ZmNlMmY4Y2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWly
cm9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9j
b2RlbWlycm9yLmpzCkBAIC05Nyw3ICs5Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIGVsc2UgaW5wdXQuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwogICAg
IC8vIGlmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMx
Mjg3KQogICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2si
OwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNl
dEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgi
c3BlbGxjaGVjayIsICJmYWxzZSIpOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJl
Y3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCAib2ZmIik7
CiAKICAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICBkLmlucHV0RGl2
ID0gZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246
IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKQEAgLTEwNSw5ICsxMDUsOCBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBkLnNjcm9sbGJhckggPSBl
bHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDFweCIpXSwgIkNvZGVN
aXJyb3ItaHNjcm9sbGJhciIpOwogICAgIGQuc2Nyb2xsYmFyViA9IGVsdCgiZGl2IiwgW2VsdCgi
ZGl2IiwgbnVsbCwgbnVsbCwgIndpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZzY3JvbGxiYXIi
KTsKICAgICBkLnNjcm9sbGJhckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3It
c2Nyb2xsYmFyLWZpbGxlciIpOwotICAgIGQuZ3V0dGVyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxs
LCAiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIik7CiAgICAgLy8gRElWcyBjb250YWluaW5nIHRo
ZSBzZWxlY3Rpb24gYW5kIHRoZSBhY3R1YWwgY29kZQotICAgIGQubGluZURpdiA9IGVsdCgiZGl2
IiwgbnVsbCwgIkNvZGVNaXJyb3ItY29kZSIpOworICAgIGQubGluZURpdiA9IGVsdCgiZGl2Iik7
CiAgICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjog
cmVsYXRpdmU7IHotaW5kZXg6IDEiKTsKICAgICAvLyBCbGlua3kgY3Vyc29yLCBhbmQgZWxlbWVu
dCB1c2VkIHRvIGVuc3VyZSBjdXJzb3IgZml0cyBhdCB0aGUgZW5kIG9mIGEgbGluZQogICAgIGQu
Y3Vyc29yID0gZWx0KCJkaXYiLCAiXHUwMGEwIiwgIkNvZGVNaXJyb3ItY3Vyc29yIik7CkBAIC0x
MjcsMTIgKzEyNiwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAv
LyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueQogICAgIGQuZ3V0dGVycyA9IGVsdCgi
ZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVycyIpOwogICAgIGQubGluZUd1dHRlciA9IG51
bGw7CisgICAgLy8gSGVscGVyIGVsZW1lbnQgdG8gcHJvcGVybHkgc2l6ZSB0aGUgZ3V0dGVyIGJh
Y2tncm91bmRzCisgICAgdmFyIHNjcm9sbGVySW5uZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBk
LmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgbWlu
LWhlaWdodDogMTAwJSIpOwogICAgIC8vIFByb3ZpZGVzIHNjcm9sbGluZwotICAgIGQuc2Nyb2xs
ZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgIkNv
ZGVNaXJyb3Itc2Nyb2xsIik7CisgICAgZC5zY3JvbGxlciA9IGVsdCgiZGl2IiwgW3Njcm9sbGVy
SW5uZXJdLCAiQ29kZU1pcnJvci1zY3JvbGwiKTsKICAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0
ZSgidGFiSW5kZXgiLCAiLTEiKTsKICAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRp
dG9yIGxpdmVzLgogICAgIGQud3JhcHBlciA9IGVsdCgiZGl2IiwgW2QuaW5wdXREaXYsIGQuc2Ny
b2xsYmFySCwgZC5zY3JvbGxiYXJWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2Ny
b2xsYmFyRmlsbGVyLCBkLmd1dHRlckZpbGxlciwgZC5zY3JvbGxlcl0sICJDb2RlTWlycm9yIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuc2Nyb2xs
ZXJdLCAiQ29kZU1pcnJvciIpOwogICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1Zwog
ICAgIGlmIChpZV9sdDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVy
LnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0KICAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBs
YWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7IGVsc2UgcGxhY2UoZC53cmFwcGVyKTsKQEAgLTE2
Myw2ICsxNjQsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBkLnBv
bGxpbmdGYXN0ID0gZmFsc2U7CiAgICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhl
IHBvbGxlcgogICAgIGQucG9sbCA9IG5ldyBEZWxheWVkKCk7CisgICAgLy8gVHJ1ZSB3aGVuIGEg
ZHJhZyBmcm9tIHRoZSBlZGl0b3IgaXMgYWN0aXZlCisgICAgZC5kcmFnZ2luZ1RleHQgPSBmYWxz
ZTsKIAogICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsK
ICAgICBkLm1lYXN1cmVMaW5lQ2FjaGUgPSBbXTsKQEAgLTIxMSw3ICsyMTQsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsK
ICAgICByZWdDaGFuZ2UoY20pOwogICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAwKTsKKyAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNwbGF5LCBjbS5kb2MuaGVpZ2h0KTt9
LCAxMDApOwogICB9CiAKICAgZnVuY3Rpb24gZXN0aW1hdGVIZWlnaHQoY20pIHsKQEAgLTIzNiwx
MCArMjM5LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBm
dW5jdGlvbiBrZXlNYXBDaGFuZ2VkKGNtKSB7Ci0gICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRp
b25zLmtleU1hcF0sIHN0eWxlID0gbWFwLnN0eWxlOworICAgIHZhciBzdHlsZSA9IGtleU1hcFtj
bS5vcHRpb25zLmtleU1hcF0uc3R5bGU7CiAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFt
ZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxT
Ky9nLCAiIikgKwogICAgICAgKHN0eWxlID8gIiBjbS1rZXltYXAtIiArIHN0eWxlIDogIiIpOwot
ICAgIGNtLnN0YXRlLmRpc2FibGVJbnB1dCA9IG1hcC5kaXNhYmxlSW5wdXQ7CiAgIH0KIAogICBm
dW5jdGlvbiB0aGVtZUNoYW5nZWQoY20pIHsKQEAgLTI1MSw3ICsyNTMsNiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gZ3V0dGVyc0NoYW5nZWQoY20pIHsK
ICAgICB1cGRhdGVHdXR0ZXJzKGNtKTsKICAgICByZWdDaGFuZ2UoY20pOwotICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKXthbGlnbkhvcml6b250YWxseShjbSk7fSwgMjApOwogICB9CiAKICAgZnVu
Y3Rpb24gdXBkYXRlR3V0dGVycyhjbSkgewpAQCAtMzE4LDE0ICszMTksMTIgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ug
c2Nyb2xsYmFycyB3aXRoIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKICAgLy8gY29udGVudC4gT3B0
aW9uYWxseSBmb3JjZSBhIHNjcm9sbFRvcC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhj
bSkgewotICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jSGVpZ2h0ID0gY20uZG9jLmhlaWdodDsK
KyAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhkIC8qIGRpc3BsYXkgKi8sIGRvY0hlaWdodCkg
ewogICAgIHZhciB0b3RhbEhlaWdodCA9IGRvY0hlaWdodCArIHBhZGRpbmdWZXJ0KGQpOwogICAg
IGQuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gZC5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gdG90
YWxIZWlnaHQgKyAicHgiOwotICAgIGQuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCh0
b3RhbEhlaWdodCwgZC5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZikgKyAi
cHgiOwogICAgIHZhciBzY3JvbGxIZWlnaHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5zY3Jv
bGxlci5zY3JvbGxIZWlnaHQpOwotICAgIHZhciBuZWVkc0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdp
ZHRoID4gKGQuc2Nyb2xsZXIuY2xpZW50V2lkdGggKyAxKTsKLSAgICB2YXIgbmVlZHNWID0gc2Ny
b2xsSGVpZ2h0ID4gKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgMSk7CisgICAgdmFyIG5lZWRz
SCA9IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPiBkLnNjcm9sbGVyLmNsaWVudFdpZHRoOworICAg
IHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQgPiBkLnNjcm9sbGVyLmNsaWVudEhlaWdodDsKICAg
ICBpZiAobmVlZHNWKSB7CiAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICJibG9j
ayI7CiAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc2Nyb2xsYmFy
V2lkdGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7CkBAIC0zNDIsMTEgKzM0MSw2IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5
bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWln
aHQgPSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNjcm9sbGJhcldpZHRoKGQubWVh
c3VyZSkgKyAicHgiOwogICAgIH0gZWxzZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5
ID0gIiI7Ci0gICAgaWYgKG5lZWRzSCAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Ny
b2xsYmFyICYmIGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHsKLSAgICAgIGQuZ3V0dGVyRmlsbGVy
LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVp
Z2h0ID0gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCI7Ci0gICAgICBkLmd1dHRlckZp
bGxlci5zdHlsZS53aWR0aCA9IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7Ci0gICAgfSBl
bHNlIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKIAogICAgIGlmIChtYWNfZ2VM
aW9uICYmIHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgPT09IDApCiAgICAgICBkLnNjcm9sbGJh
clYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUubWluSGVpZ2h0ID0gbWFjX2dl
TW91bnRhaW5MaW9uID8gIjE4cHgiIDogIjEycHgiOwpAQCAtNDA1LDEwICszOTksMTQgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIG9sZEZyb20gPSBjbS5kaXNw
bGF5LnNob3dpbmdGcm9tLCBvbGRUbyA9IGNtLmRpc3BsYXkuc2hvd2luZ1RvLCB1cGRhdGVkOwog
ICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld1Bv
cnQpOwogICAgIGZvciAoOzspIHsKLSAgICAgIGlmICghdXBkYXRlRGlzcGxheUlubmVyKGNtLCBj
aGFuZ2VzLCB2aXNpYmxlKSkgYnJlYWs7Ci0gICAgICB1cGRhdGVkID0gdHJ1ZTsKKyAgICAgIGlm
ICh1cGRhdGVEaXNwbGF5SW5uZXIoY20sIGNoYW5nZXMsIHZpc2libGUpKSB7CisgICAgICAgIHVw
ZGF0ZWQgPSB0cnVlOworICAgICAgICBzaWduYWxMYXRlcihjbSwgInVwZGF0ZSIsIGNtKTsKKyAg
ICAgICAgaWYgKGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gIT0gb2xkRnJvbSB8fCBjbS5kaXNwbGF5
LnNob3dpbmdUbyAhPSBvbGRUbykKKyAgICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0
Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20sIGNtLmRpc3BsYXkuc2hvd2luZ1Rv
KTsKKyAgICAgIH0gZWxzZSBicmVhazsKICAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAg
ICB1cGRhdGVTY3JvbGxiYXJzKGNtKTsKKyAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxh
eSwgY20uZG9jLmhlaWdodCk7CiAKICAgICAgIC8vIENsaXAgZm9yY2VkIHZpZXdwb3J0IHRvIGFj
dHVhbCBzY3JvbGxhYmxlIGFyZWEKICAgICAgIGlmICh2aWV3UG9ydCkKQEAgLTQyMCwxMSArNDE4
LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBjaGFuZ2VzID0g
W107CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZWQpIHsKLSAgICAgIHNpZ25hbExhdGVyKGNtLCAi
dXBkYXRlIiwgY20pOwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gIT0gb2xkRnJv
bSB8fCBjbS5kaXNwbGF5LnNob3dpbmdUbyAhPSBvbGRUbykKLSAgICAgICAgc2lnbmFsTGF0ZXIo
Y20sICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5LnNob3dpbmdGcm9tLCBjbS5kaXNw
bGF5LnNob3dpbmdUbyk7Ci0gICAgfQogICAgIHJldHVybiB1cGRhdGVkOwogICB9CiAKQEAgLTUx
MiwxMSArNTA1LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBk
aXNwbGF5Lmxhc3RTaXplQyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwogICAgIC8v
IFRoaXMgaXMganVzdCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRv
ciBpcwogICAgIC8vIHJlc2l6ZWQgb3IgdGhlIGZvbnQgc2l6ZSBjaGFuZ2VzLgotICAgIGlmIChk
aWZmZXJlbnQpIHsKLSAgICAgIGRpc3BsYXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNs
aWVudEhlaWdodDsKLSAgICAgIHN0YXJ0V29ya2VyKGNtLCA0MDApOwotICAgIH0KKyAgICBpZiAo
ZGlmZmVyZW50KSBkaXNwbGF5Lmxhc3RTaXplQyA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWln
aHQ7CiAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGZyb207IGRpc3BsYXkuc2hvd2luZ1RvID0g
dG87CisgICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7CiAKICAgICB2YXIgcHJldkJvdHRvbSA9IGRp
c3BsYXkubGluZURpdi5vZmZzZXRUb3A7CiAgICAgZm9yICh2YXIgbm9kZSA9IGRpc3BsYXkubGlu
ZURpdi5maXJzdENoaWxkLCBoZWlnaHQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSBp
ZiAobm9kZS5saW5lT2JqKSB7CkBAIC02MDUsOSArNTk2LDggQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRvID09
IGxpbmVOKSBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCk7CiAgICAgICBpZiAobGluZUlzSGlk
ZGVuKGNtLmRvYywgbGluZSkpIHsKICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDApIHVwZGF0
ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyLnBy
ZXZpb3VzU2libGluZykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICB2YXIgdyA9IGxpbmUud2lkZ2V0c1tpXTsKLSAgICAgICAgICBpZiAo
dy5zaG93SWZIaWRkZW4pIHsKKyAgICAgICAgaWYgKGxpbmUud2lkZ2V0cyAmJiBjdXIucHJldmlv
dXNTaWJsaW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkK
KyAgICAgICAgICBpZiAobGluZS53aWRnZXRzW2ldLnNob3dJZkhpZGRlbikgewogICAgICAgICAg
ICAgdmFyIHByZXYgPSBjdXIucHJldmlvdXNTaWJsaW5nOwogICAgICAgICAgICAgaWYgKC9wcmUv
aS50ZXN0KHByZXYubm9kZU5hbWUpKSB7CiAgICAgICAgICAgICAgIHZhciB3cmFwID0gZWx0KCJk
aXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7CkBAIC02MTUsMTEgKzYwNSw5
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICB3cmFw
LmFwcGVuZENoaWxkKHByZXYpOwogICAgICAgICAgICAgICBwcmV2ID0gd3JhcDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBwZW5kQ2hpbGQoZWx0KCJkaXYi
LCBbdy5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsKLSAgICAgICAgICAgIGlmICgh
dy5oYW5kbGVNb3VzZUV2ZW50cykgd25vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHBvc2l0aW9uTGluZVdpZGdldCh3LCB3bm9kZSwgcHJldiwgZGltcyk7CisgICAgICAgICAg
ICB2YXIgd25vZGUgPSBwcmV2LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2xpbmUud2lkZ2V0c1tp
XS5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsKKyAgICAgICAgICAgIHBvc2l0aW9u
TGluZVdpZGdldChsaW5lLndpZGdldHNbaV0sIHdub2RlLCBwcmV2LCBkaW1zKTsKICAgICAgICAg
ICB9Ci0gICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0
LmZyb20gPD0gbGluZU4gJiYgbmV4dEludGFjdC50byA+IGxpbmVOKSB7CiAgICAgICAgIC8vIFRo
aXMgbGluZSBpcyBpbnRhY3QuIFNraXAgdG8gdGhlIGFjdHVhbCBub2RlLiBVcGRhdGUgaXRzCiAg
ICAgICAgIC8vIGxpbmUgbnVtYmVyIGlmIG5lZWRlZC4KQEAgLTY2MiwyNSArNjUwLDI1IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgaWYgKHJldXNlKSB7CiAgICAg
ICByZXVzZS5hbGlnbmFibGUgPSBudWxsOwotICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3aWRnZXRz
U2VlbiA9IDAsIGluc2VydEJlZm9yZSA9IG51bGw7CisgICAgICB2YXIgaXNPayA9IHRydWUsIHdp
ZGdldHNTZWVuID0gMDsKICAgICAgIGZvciAodmFyIG4gPSByZXVzZS5maXJzdENoaWxkLCBuZXh0
OyBuOyBuID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gbi5uZXh0U2libGluZzsKICAgICAgICAg
aWYgKCEvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChuLmNsYXNzTmFtZSkpIHsKICAg
ICAgICAgICByZXVzZS5yZW1vdmVDaGlsZChuKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgdmFyIHdpZGdldCA9IGxpbmUud2lkZ2V0c1tpXTsKKyAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgZmlyc3QgPSB0cnVlOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB2YXIgd2lkZ2V0ID0gbGluZS53aWRnZXRzW2ldLCBpc0ZpcnN0ID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIXdpZGdldC5hYm92ZSkgeyBpc0ZpcnN0ID0gZmlyc3Q7IGZpcnN0ID0g
ZmFsc2U7IH0KICAgICAgICAgICAgIGlmICh3aWRnZXQubm9kZSA9PSBuLmZpcnN0Q2hpbGQpIHsK
LSAgICAgICAgICAgICAgaWYgKCF3aWRnZXQuYWJvdmUgJiYgIWluc2VydEJlZm9yZSkgaW5zZXJ0
QmVmb3JlID0gbjsKICAgICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbiwg
cmV1c2UsIGRpbXMpOwogICAgICAgICAgICAgICArK3dpZGdldHNTZWVuOworICAgICAgICAgICAg
ICBpZiAoaXNGaXJzdCkgcmV1c2UuaW5zZXJ0QmVmb3JlKGxpbmVFbGVtZW50LCBuKTsKICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIGlm
IChpID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsgaXNPayA9IGZhbHNlOyBicmVhazsgfQogICAg
ICAgICB9CiAgICAgICB9Ci0gICAgICByZXVzZS5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQsIGlu
c2VydEJlZm9yZSk7CiAgICAgICBpZiAoaXNPayAmJiB3aWRnZXRzU2VlbiA9PSBsaW5lLndpZGdl
dHMubGVuZ3RoKSB7CiAgICAgICAgIHdyYXAgPSByZXVzZTsKICAgICAgICAgcmV1c2UuY2xhc3NO
YW1lID0gbGluZS53cmFwQ2xhc3MgfHwgIiI7CkBAIC03MTUsNyArNzAzLDYgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGllX2x0OCkgd3JhcC5zdHlsZS56SW5k
ZXggPSAyOwogICAgIGlmIChsaW5lLndpZGdldHMgJiYgd3JhcCAhPSByZXVzZSkgZm9yICh2YXIg
aSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kpIHsKICAgICAgIHZh
ciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNvZGVN
aXJyb3ItbGluZXdpZGdldCIpOwotICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMp
IG5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRn
ZXQsIG5vZGUsIHdyYXAsIGRpbXMpOwogICAgICAgaWYgKHdpZGdldC5hYm92ZSkKICAgICAgICAg
d3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5lLmhl
aWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKQEAgLTc5OCw1OSArNzg1LDY3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJweDsgaGVpZ2h0OiAiICsgKGJvdHRvbSAtIHRvcCkgKyAicHgiKSk7CiAg
ICAgfQogCi0gICAgZnVuY3Rpb24gZHJhd0ZvckxpbmUobGluZSwgZnJvbUFyZywgdG9BcmcpIHsK
KyAgICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0FyZywgcmV0VG9wKSB7
CiAgICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICAgIHZhciBsaW5l
TGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAgICAgIHZhciBzdGFydCwgZW5kOwotICAgICAg
ZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7Ci0gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNt
LCBQb3MobGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaiwgYmlhcyk7CisgICAgICB2YXIgbGluZUxl
biA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIHJWYWwgPSByZXRUb3AgPyBJbmZpbml0eSA6IC1JbmZp
bml0eTsKKyAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCkgeworICAgICAgICByZXR1cm4gY2hhckNv
b3JkcyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxpbmVPYmopOwogICAgICAgfQogCiAgICAg
ICBpdGVyYXRlQmlkaVNlY3Rpb25zKGdldE9yZGVyKGxpbmVPYmopLCBmcm9tQXJnIHx8IDAsIHRv
QXJnID09IG51bGwgPyBsaW5lTGVuIDogdG9BcmcsIGZ1bmN0aW9uKGZyb20sIHRvLCBkaXIpIHsK
LSAgICAgICAgdmFyIGxlZnRQb3MgPSBjb29yZHMoZnJvbSwgImxlZnQiKSwgcmlnaHRQb3MsIGxl
ZnQsIHJpZ2h0OwotICAgICAgICBpZiAoZnJvbSA9PSB0bykgewotICAgICAgICAgIHJpZ2h0UG9z
ID0gbGVmdFBvczsKLSAgICAgICAgICBsZWZ0ID0gcmlnaHQgPSBsZWZ0UG9zLmxlZnQ7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmlnaHRQb3MgPSBjb29yZHModG8gLSAxLCAicmlnaHQi
KTsKLSAgICAgICAgICBpZiAoZGlyID09ICJydGwiKSB7IHZhciB0bXAgPSBsZWZ0UG9zOyBsZWZ0
UG9zID0gcmlnaHRQb3M7IHJpZ2h0UG9zID0gdG1wOyB9Ci0gICAgICAgICAgbGVmdCA9IGxlZnRQ
b3MubGVmdDsKLSAgICAgICAgICByaWdodCA9IHJpZ2h0UG9zLnJpZ2h0OwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gcGw7CisgICAg
ICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGRpciA9PSAicnRsIiA/IHRvIC0gMSA6IGZyb20pOwor
ICAgICAgICB2YXIgcmlnaHRQb3MgPSBjb29yZHMoZGlyID09ICJydGwiID8gZnJvbSA6IHRvIC0g
MSk7CisgICAgICAgIHZhciBsZWZ0ID0gbGVmdFBvcy5sZWZ0LCByaWdodCA9IHJpZ2h0UG9zLnJp
Z2h0OwogICAgICAgICBpZiAocmlnaHRQb3MudG9wIC0gbGVmdFBvcy50b3AgPiAzKSB7IC8vIERp
ZmZlcmVudCBsaW5lcywgZHJhdyB0b3AgcGFydAogICAgICAgICAgIGFkZChsZWZ0LCBsZWZ0UG9z
LnRvcCwgbnVsbCwgbGVmdFBvcy5ib3R0b20pOwogICAgICAgICAgIGxlZnQgPSBwbDsKICAgICAg
ICAgICBpZiAobGVmdFBvcy5ib3R0b20gPCByaWdodFBvcy50b3ApIGFkZChsZWZ0LCBsZWZ0UG9z
LmJvdHRvbSwgbnVsbCwgcmlnaHRQb3MudG9wKTsKICAgICAgICAgfQogICAgICAgICBpZiAodG9B
cmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuKSByaWdodCA9IGNsaWVudFdpZHRoOwotICAgICAg
ICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9wIDwgc3RhcnQudG9wIHx8IGxlZnRQb3MudG9wID09
IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQgPCBzdGFydC5sZWZ0KQotICAgICAgICAgIHN0YXJ0
ID0gbGVmdFBvczsKLSAgICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQb3MuYm90dG9tID4gZW5kLmJv
dHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJvdHRvbSAmJiByaWdodFBvcy5yaWdodCA+
IGVuZC5yaWdodCkKLSAgICAgICAgICBlbmQgPSByaWdodFBvczsKKyAgICAgICAgaWYgKGZyb21B
cmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKKyAgICAgICAgclZhbCA9IHJldFRv
cCA/IE1hdGgubWluKHJpZ2h0UG9zLnRvcCwgclZhbCkgOiBNYXRoLm1heChyaWdodFBvcy5ib3R0
b20sIHJWYWwpOwogICAgICAgICBpZiAobGVmdCA8IHBsICsgMSkgbGVmdCA9IHBsOwogICAgICAg
ICBhZGQobGVmdCwgcmlnaHRQb3MudG9wLCByaWdodCAtIGxlZnQsIHJpZ2h0UG9zLmJvdHRvbSk7
CiAgICAgICB9KTsKLSAgICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07CisgICAg
ICByZXR1cm4gclZhbDsKICAgICB9CiAKICAgICBpZiAoc2VsLmZyb20ubGluZSA9PSBzZWwudG8u
bGluZSkgewogICAgICAgZHJhd0ZvckxpbmUoc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2gsIHNl
bC50by5jaCk7CiAgICAgfSBlbHNlIHsKLSAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9j
LCBzZWwuZnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNlbC50by5saW5lKTsKLSAg
ICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZG9jLCBmcm9tTGluZSkgPT0gdmlzdWFs
TGluZShkb2MsIHRvTGluZSk7Ci0gICAgICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNlbC5m
cm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBzaW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3Ro
IDogbnVsbCkuZW5kOwotICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzZWwudG8u
bGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc2VsLnRvLmNoKS5zdGFydDsKLSAgICAgIGlm
IChzaW5nbGVWTGluZSkgewotICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRv
cCAtIDIpIHsKLSAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGws
IGxlZnRFbmQuYm90dG9tKTsKLSAgICAgICAgICBhZGQocGwsIHJpZ2h0U3RhcnQudG9wLCByaWdo
dFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxl
ZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKKyAgICAgIHZhciBmcm9tT2JqID0gZ2V0TGlu
ZShkb2MsIHNlbC5mcm9tLmxpbmUpOworICAgICAgdmFyIGN1ciA9IGZyb21PYmosIG1lcmdlZCwg
cGF0aCA9IFtzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaF0sIHNpbmdsZUxpbmU7CisgICAgICB3
aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGN1cikpIHsKKyAgICAgICAgdmFyIGZv
dW5kID0gbWVyZ2VkLmZpbmQoKTsKKyAgICAgICAgcGF0aC5wdXNoKGZvdW5kLmZyb20uY2gsIGZv
dW5kLnRvLmxpbmUsIGZvdW5kLnRvLmNoKTsKKyAgICAgICAgaWYgKGZvdW5kLnRvLmxpbmUgPT0g
c2VsLnRvLmxpbmUpIHsKKyAgICAgICAgICBwYXRoLnB1c2goc2VsLnRvLmNoKTsKKyAgICAgICAg
ICBzaW5nbGVMaW5lID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjdXIgPSBnZXRMaW5lKGRvYywgZm91bmQudG8ubGluZSk7CisgICAgICB9CisKKyAgICAgIC8v
IFRoaXMgaXMgYSBzaW5nbGUsIG1lcmdlZCBsaW5lCisgICAgICBpZiAoc2luZ2xlTGluZSkgewor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpICs9IDMpCisgICAgICAg
ICAgZHJhd0ZvckxpbmUocGF0aFtpXSwgcGF0aFtpKzFdLCBwYXRoW2krMl0pOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgdmFyIG1pZGRsZVRvcCwgbWlkZGxlQm90LCB0b09iaiA9IGdldExpbmUo
ZG9jLCBzZWwudG8ubGluZSk7CisgICAgICAgIGlmIChzZWwuZnJvbS5jaCkKKyAgICAgICAgICAv
LyBEcmF3IHRoZSBmaXJzdCBsaW5lIG9mIHNlbGVjdGlvbi4KKyAgICAgICAgICBtaWRkbGVUb3Ag
PSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgbnVsbCwgZmFsc2UpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgLy8gU2ltcGx5IGluY2x1ZGUgaXQgaW4gdGhlIG1pZGRs
ZSBibG9jay4KKyAgICAgICAgICBtaWRkbGVUb3AgPSBoZWlnaHRBdExpbmUoY20sIGZyb21PYmop
IC0gZGlzcGxheS52aWV3T2Zmc2V0OworCisgICAgICAgIGlmICghc2VsLnRvLmNoKQorICAgICAg
ICAgIG1pZGRsZUJvdCA9IGhlaWdodEF0TGluZShjbSwgdG9PYmopIC0gZGlzcGxheS52aWV3T2Zm
c2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgbWlkZGxlQm90ID0gZHJhd0ZvckxpbmUoc2Vs
LnRvLmxpbmUsIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KHRvT2JqKSA/IG51bGwgOiAwLCBzZWwudG8u
Y2gsIHRydWUpOworCisgICAgICAgIGlmIChtaWRkbGVUb3AgPCBtaWRkbGVCb3QpIGFkZChwbCwg
bWlkZGxlVG9wLCBudWxsLCBtaWRkbGVCb3QpOwogICAgICAgfQotICAgICAgaWYgKGxlZnRFbmQu
Ym90dG9tIDwgcmlnaHRTdGFydC50b3ApCi0gICAgICAgIGFkZChwbCwgbGVmdEVuZC5ib3R0b20s
IG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKICAgICB9CiAKICAgICByZW1vdmVDaGlsZHJlbkFuZEFk
ZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZnJhZ21lbnQpOwpAQCAtOTE2LDEyICs5MTEsMTIgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIHZhbGlkIHN0YXRlLiBJZiB0
aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCiAgIC8vIHNtYWxsZXN0IGlu
ZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFzdCBjb250ZXh0IHRvCiAgIC8v
IHBhcnNlIGNvcnJlY3RseS4KLSAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lz
ZSkgeworICBmdW5jdGlvbiBmaW5kU3RhcnRMaW5lKGNtLCBuKSB7CiAgICAgdmFyIG1pbmluZGVu
dCwgbWlubGluZSwgZG9jID0gY20uZG9jOwogICAgIGZvciAodmFyIHNlYXJjaCA9IG4sIGxpbSA9
IG4gLSAxMDA7IHNlYXJjaCA+IGxpbTsgLS1zZWFyY2gpIHsKICAgICAgIGlmIChzZWFyY2ggPD0g
ZG9jLmZpcnN0KSByZXR1cm4gZG9jLmZpcnN0OwogICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRv
Yywgc2VhcmNoIC0gMSk7Ci0gICAgICBpZiAobGluZS5zdGF0ZUFmdGVyICYmICghcHJlY2lzZSB8
fCBzZWFyY2ggPD0gZG9jLmZyb250aWVyKSkgcmV0dXJuIHNlYXJjaDsKKyAgICAgIGlmIChsaW5l
LnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CiAgICAgICB2YXIgaW5kZW50ZWQgPSBjb3VudENv
bHVtbihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICBpZiAobWlu
bGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7CiAgICAgICAgIG1pbmxpbmUg
PSBzZWFyY2ggLSAxOwpAQCAtOTMxLDEwICs5MjYsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIG1pbmxpbmU7CiAgIH0KIAotICBmdW5jdGlvbiBnZXRT
dGF0ZUJlZm9yZShjbSwgbiwgcHJlY2lzZSkgeworICBmdW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShj
bSwgbikgewogICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAg
ICAgaWYgKCFkb2MubW9kZS5zdGFydFN0YXRlKSByZXR1cm4gdHJ1ZTsKLSAgICB2YXIgcG9zID0g
ZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSksIHN0YXRlID0gcG9zID4gZG9jLmZpcnN0ICYm
IGdldExpbmUoZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKKyAgICB2YXIgcG9zID0gZmluZFN0YXJ0
TGluZShjbSwgbiksIHN0YXRlID0gcG9zID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBwb3Mt
MSkuc3RhdGVBZnRlcjsKICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHN0YXJ0U3RhdGUoZG9jLm1v
ZGUpOwogICAgIGVsc2Ugc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKTsKICAgICBk
b2MuaXRlcihwb3MsIG4sIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTk1NSw3ICs5NTAsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gZS5vZmZzZXRMZWZ0Owog
ICB9CiAKLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBkYXRhLCBiaWFzKSB7
CisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwgZGF0YSkgewogICAgIHZhciBk
aXIgPSAtMTsKICAgICBkYXRhID0gZGF0YSB8fCBtZWFzdXJlTGluZShjbSwgbGluZSk7CiAKQEAg
LTk2NCwxMyArOTU5LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICBpZiAocikgYnJlYWs7CiAgICAgICBpZiAoZGlyIDwgMCAmJiBwb3MgPT0gMCkgZGlyID0gMTsK
ICAgICB9Ci0gICAgYmlhcyA9IHBvcyA+IGNoID8gImxlZnQiIDogcG9zIDwgY2ggPyAicmlnaHQi
IDogYmlhczsKLSAgICBpZiAoYmlhcyA9PSAibGVmdCIgJiYgci5sZWZ0U2lkZSkgciA9IHIubGVm
dFNpZGU7Ci0gICAgZWxzZSBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHIucmlnaHRTaWRlKSByID0g
ci5yaWdodFNpZGU7CiAgICAgcmV0dXJuIHtsZWZ0OiBwb3MgPCBjaCA/IHIucmlnaHQgOiByLmxl
ZnQsCiAgICAgICAgICAgICByaWdodDogcG9zID4gY2ggPyByLmxlZnQgOiByLnJpZ2h0LAotICAg
ICAgICAgICAgdG9wOiByLnRvcCwKLSAgICAgICAgICAgIGJvdHRvbTogci5ib3R0b219OworICAg
ICAgICAgICAgdG9wOiByLnRvcCwgYm90dG9tOiByLmJvdHRvbX07CiAgIH0KIAogICBmdW5jdGlv
biBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKQEAgLTk4MCwyOCArOTcxLDIzIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG1lbW8udGV4dCA9
PSBsaW5lLnRleHQgJiYgbWVtby5tYXJrZWRTcGFucyA9PSBsaW5lLm1hcmtlZFNwYW5zICYmCiAg
ICAgICAgICAgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCA9PSBtZW1vLndpZHRoICYm
CiAgICAgICAgICAgbWVtby5jbGFzc2VzID09IGxpbmUudGV4dENsYXNzICsgInwiICsgbGluZS5i
Z0NsYXNzICsgInwiICsgbGluZS53cmFwQ2xhc3MpCi0gICAgICAgIHJldHVybiBtZW1vOworICAg
ICAgICByZXR1cm4gbWVtby5tZWFzdXJlOwogICAgIH0KICAgfQogCi0gIGZ1bmN0aW9uIGNsZWFy
Q2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKLSAgICB2YXIgZXhpc3RzID0gZmluZENhY2hl
ZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAoZXhpc3RzKSBleGlzdHMudGV4dCA9IGV4
aXN0cy5tZWFzdXJlID0gZXhpc3RzLm1hcmtlZFNwYW5zID0gbnVsbDsKLSAgfQotCiAgIGZ1bmN0
aW9uIG1lYXN1cmVMaW5lKGNtLCBsaW5lKSB7CiAgICAgLy8gRmlyc3QgbG9vayBpbiB0aGUgY2Fj
aGUKLSAgICB2YXIgY2FjaGVkID0gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAg
ICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkLm1lYXN1cmU7Ci0KLSAgICAvLyBGYWlsaW5nIHRo
YXQsIHJlY29tcHV0ZSBhbmQgc3RvcmUgcmVzdWx0IGluIGNhY2hlCi0gICAgdmFyIG1lYXN1cmUg
PSBtZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKTsKLSAgICB2YXIgY2FjaGUgPSBjbS5kaXNwbGF5
Lm1lYXN1cmVMaW5lQ2FjaGU7Ci0gICAgdmFyIG1lbW8gPSB7dGV4dDogbGluZS50ZXh0LCB3aWR0
aDogY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAgICAgICAgICBtYXJr
ZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTogbWVhc3VyZSwKLSAgICAgICAgICAg
ICAgICBjbGFzc2VzOiBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUuYmdDbGFzcyArICJ8IiAr
IGxpbmUud3JhcENsYXNzfTsKLSAgICBpZiAoY2FjaGUubGVuZ3RoID09IDE2KSBjYWNoZVsrK2Nt
LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyAlIDE2XSA9IG1lbW87Ci0gICAgZWxzZSBjYWNo
ZS5wdXNoKG1lbW8pOworICAgIHZhciBtZWFzdXJlID0gZmluZENhY2hlZE1lYXN1cmVtZW50KGNt
LCBsaW5lKTsKKyAgICBpZiAoIW1lYXN1cmUpIHsKKyAgICAgIC8vIEZhaWxpbmcgdGhhdCwgcmVj
b21wdXRlIGFuZCBzdG9yZSByZXN1bHQgaW4gY2FjaGUKKyAgICAgIG1lYXN1cmUgPSBtZWFzdXJl
TGluZUlubmVyKGNtLCBsaW5lKTsKKyAgICAgIHZhciBjYWNoZSA9IGNtLmRpc3BsYXkubWVhc3Vy
ZUxpbmVDYWNoZTsKKyAgICAgIHZhciBtZW1vID0ge3RleHQ6IGxpbmUudGV4dCwgd2lkdGg6IGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsCisgICAgICAgICAgICAgICAgICBtYXJrZWRT
cGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTogbWVhc3VyZSwKKyAgICAgICAgICAgICAg
ICAgIGNsYXNzZXM6IGxpbmUudGV4dENsYXNzICsgInwiICsgbGluZS5iZ0NsYXNzICsgInwiICsg
bGluZS53cmFwQ2xhc3N9OworICAgICAgaWYgKGNhY2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytj
bS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MgJSAxNl0gPSBtZW1vOworICAgICAgZWxzZSBj
YWNoZS5wdXNoKG1lbW8pOworICAgIH0KICAgICByZXR1cm4gbWVhc3VyZTsKICAgfQogCkBAIC0x
MDQzLDUxICsxMDI5LDMwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IGlmIChpZV9sdDkgJiYgZGlzcGxheS5tZWFzdXJlLmZpcnN0ICE9IHByZSkKICAgICAgIHJlbW92
ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKIAotICAgIGZ1bmN0aW9uIG1l
YXN1cmVSZWN0KHJlY3QpIHsKLSAgICAgIHZhciB0b3AgPSByZWN0LnRvcCAtIG91dGVyLnRvcCwg
Ym90ID0gcmVjdC5ib3R0b20gLSBvdXRlci50b3A7Ci0gICAgICBpZiAoYm90ID4gbWF4Qm90KSBi
b3QgPSBtYXhCb3Q7Ci0gICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKLSAgICAgIGZvciAodmFy
IGkgPSB2cmFuZ2VzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7Ci0gICAgICAgIHZhciBy
dG9wID0gdnJhbmdlc1tpXSwgcmJvdCA9IHZyYW5nZXNbaSsxXTsKKyAgICBmb3IgKHZhciBpID0g
MCwgY3VyOyBpIDwgbWVhc3VyZS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IG1lYXN1cmVbaV0pIHsK
KyAgICAgIHZhciBzaXplID0gZ2V0UmVjdChjdXIpOworICAgICAgdmFyIHRvcCA9IE1hdGgubWF4
KDAsIHNpemUudG9wIC0gb3V0ZXIudG9wKSwgYm90ID0gTWF0aC5taW4oc2l6ZS5ib3R0b20gLSBv
dXRlci50b3AsIG1heEJvdCk7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZyYW5nZXMubGVu
Z3RoOyBqICs9IDIpIHsKKyAgICAgICAgdmFyIHJ0b3AgPSB2cmFuZ2VzW2pdLCByYm90ID0gdnJh
bmdlc1tqKzFdOwogICAgICAgICBpZiAocnRvcCA+IGJvdCB8fCByYm90IDwgdG9wKSBjb250aW51
ZTsKICAgICAgICAgaWYgKHJ0b3AgPD0gdG9wICYmIHJib3QgPj0gYm90IHx8CiAgICAgICAgICAg
ICB0b3AgPD0gcnRvcCAmJiBib3QgPj0gcmJvdCB8fAogICAgICAgICAgICAgTWF0aC5taW4oYm90
LCByYm90KSAtIE1hdGgubWF4KHRvcCwgcnRvcCkgPj0gKGJvdCAtIHRvcCkgPj4gMSkgewotICAg
ICAgICAgIHZyYW5nZXNbaV0gPSBNYXRoLm1pbih0b3AsIHJ0b3ApOwotICAgICAgICAgIHZyYW5n
ZXNbaSsxXSA9IE1hdGgubWF4KGJvdCwgcmJvdCk7CisgICAgICAgICAgdnJhbmdlc1tqXSA9IE1h
dGgubWluKHRvcCwgcnRvcCk7CisgICAgICAgICAgdnJhbmdlc1tqKzFdID0gTWF0aC5tYXgoYm90
LCByYm90KTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQotICAgICAgaWYg
KGkgPCAwKSB7IGkgPSB2cmFuZ2VzLmxlbmd0aDsgdnJhbmdlcy5wdXNoKHRvcCwgYm90KTsgfQot
ICAgICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgLSBvdXRlci5sZWZ0LAotICAgICAgICAgICAg
ICByaWdodDogcmVjdC5yaWdodCAtIG91dGVyLmxlZnQsCi0gICAgICAgICAgICAgIHRvcDogaSwg
Ym90dG9tOiBudWxsfTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZmluaXNoUmVjdChyZWN0KSB7Ci0g
ICAgICByZWN0LmJvdHRvbSA9IHZyYW5nZXNbcmVjdC50b3ArMV07Ci0gICAgICByZWN0LnRvcCA9
IHZyYW5nZXNbcmVjdC50b3BdOwotICAgIH0KLQotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkg
PCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gbWVhc3VyZVtpXSkgewotICAgICAgdmFy
IG5vZGUgPSBjdXIsIHJlY3QgPSBudWxsOwotICAgICAgLy8gQSB3aWRnZXQgbWlnaHQgd3JhcCwg
bmVlZHMgc3BlY2lhbCBjYXJlCi0gICAgICBpZiAoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVz
dChjdXIuY2xhc3NOYW1lKSAmJiBjdXIuZ2V0Q2xpZW50UmVjdHMpIHsKLSAgICAgICAgaWYgKGN1
ci5maXJzdENoaWxkLm5vZGVUeXBlID09IDEpIG5vZGUgPSBjdXIuZmlyc3RDaGlsZDsKLSAgICAg
ICAgdmFyIHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpOwotICAgICAgICBpZiAocmVjdHMu
bGVuZ3RoID4gMSkgewotICAgICAgICAgIHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QocmVj
dHNbMF0pOwotICAgICAgICAgIHJlY3QucmlnaHRTaWRlID0gbWVhc3VyZVJlY3QocmVjdHNbcmVj
dHMubGVuZ3RoIC0gMV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXJlY3QpIHJl
Y3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QoZ2V0UmVjdChub2RlKSk7Ci0gICAgICBpZiAoY3Vy
Lm1lYXN1cmVSaWdodCkgcmVjdC5yaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCkubGVm
dDsKLSAgICAgIGlmIChjdXIubGVmdFNpZGUpIHJlY3QubGVmdFNpZGUgPSBtZWFzdXJlUmVjdChn
ZXRSZWN0KGN1ci5sZWZ0U2lkZSkpOworICAgICAgaWYgKGogPT0gdnJhbmdlcy5sZW5ndGgpIHZy
YW5nZXMucHVzaCh0b3AsIGJvdCk7CisgICAgICB2YXIgcmlnaHQgPSBzaXplLnJpZ2h0OworICAg
ICAgaWYgKGN1ci5tZWFzdXJlUmlnaHQpIHJpZ2h0ID0gZ2V0UmVjdChjdXIubWVhc3VyZVJpZ2h0
KS5sZWZ0OworICAgICAgZGF0YVtpXSA9IHtsZWZ0OiBzaXplLmxlZnQgLSBvdXRlci5sZWZ0LCBy
aWdodDogcmlnaHQgLSBvdXRlci5sZWZ0LCB0b3A6IGp9OwogICAgIH0KICAgICBmb3IgKHZhciBp
ID0gMCwgY3VyOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IGRhdGFbaV0pIHsKLSAg
ICAgIGZpbmlzaFJlY3QoY3VyKTsKLSAgICAgIGlmIChjdXIubGVmdFNpZGUpIGZpbmlzaFJlY3Qo
Y3VyLmxlZnRTaWRlKTsKLSAgICAgIGlmIChjdXIucmlnaHRTaWRlKSBmaW5pc2hSZWN0KGN1ci5y
aWdodFNpZGUpOworICAgICAgdmFyIHZyID0gY3VyLnRvcDsKKyAgICAgIGN1ci50b3AgPSB2cmFu
Z2VzW3ZyXTsgY3VyLmJvdHRvbSA9IHZyYW5nZXNbdnIrMV07CiAgICAgfQorCiAgICAgcmV0dXJu
IGRhdGE7CiAgIH0KIApAQCAtMTA5OCw3ICsxMDYzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoc3AuY29sbGFwc2VkICYmIChzcC50byA9PSBudWxsIHx8
IHNwLnRvID09IGxpbmUudGV4dC5sZW5ndGgpKSBoYXNCYWRTcGFuID0gdHJ1ZTsKICAgICB9CiAg
ICAgdmFyIGNhY2hlZCA9ICFoYXNCYWRTcGFuICYmIGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwg
bGluZSk7Ci0gICAgaWYgKGNhY2hlZCkgcmV0dXJuIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBsaW5l
LnRleHQubGVuZ3RoLCBjYWNoZWQubWVhc3VyZSwgInJpZ2h0IikucmlnaHQ7CisgICAgaWYgKGNh
Y2hlZCkgcmV0dXJuIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBsaW5lLnRleHQubGVuZ3RoLCBjYWNo
ZWQpLnJpZ2h0OwogCiAgICAgdmFyIHByZSA9IGxpbmVDb250ZW50KGNtLCBsaW5lKTsKICAgICB2
YXIgZW5kID0gcHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFz
dXJlKSk7CkBAIC0xMTEzLDkgKzEwNzgsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBjbS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7CiAgIH0KIAotICBmdW5j
dGlvbiBwYWdlU2Nyb2xsWCgpIHsgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQ7IH0KLSAgZnVu
Y3Rpb24gcGFnZVNjcm9sbFkoKSB7IHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3A7IH0KLQogICAv
LyBDb250ZXh0IGlzIG9uZSBvZiAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9j
YWwiL251bGwgKGVkaXRvciksIG9yICJwYWdlIgogICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0o
Y20sIGxpbmVPYmosIHJlY3QsIGNvbnRleHQpIHsKICAgICBpZiAobGluZU9iai53aWRnZXRzKSBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgaWYgKGxpbmVP
Ymoud2lkZ2V0c1tpXS5hYm92ZSkgewpAQCAtMTEyNSwxMiArMTA4NywxMSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJldHVy
biByZWN0OwogICAgIGlmICghY29udGV4dCkgY29udGV4dCA9ICJsb2NhbCI7CiAgICAgdmFyIHlP
ZmYgPSBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmopOwotICAgIGlmIChjb250ZXh0ID09ICJsb2Nh
bCIpIHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKLSAgICBlbHNlIHlPZmYgLT0gY20u
ZGlzcGxheS52aWV3T2Zmc2V0OwotICAgIGlmIChjb250ZXh0ID09ICJwYWdlIiB8fCBjb250ZXh0
ID09ICJ3aW5kb3ciKSB7CisgICAgaWYgKGNvbnRleHQgIT0gImxvY2FsIikgeU9mZiAtPSBjbS5k
aXNwbGF5LnZpZXdPZmZzZXQ7CisgICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiKSB7CiAgICAgICB2
YXIgbE9mZiA9IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOwotICAgICAgeU9mZiArPSBs
T2ZmLnRvcCArIChjb250ZXh0ID09ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxZKCkpOwotICAg
ICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdl
U2Nyb2xsWCgpKTsKKyAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAod2luZG93LnBhZ2VZT2Zmc2V0
IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9w
KTsKKyAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9mZnNldCB8fCAo
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQpOwog
ICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKICAgICB9CiAgICAg
cmVjdC50b3AgKz0geU9mZjsgcmVjdC5ib3R0b20gKz0geU9mZjsKQEAgLTExNDIsNTggKzExMDMs
NjQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGZyb21D
b29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7CiAgICAgaWYgKGNvbnRleHQgPT0gImRp
diIpIHJldHVybiBjb29yZHM7CiAgICAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0gY29v
cmRzLnRvcDsKLSAgICAvLyBGaXJzdCBtb3ZlIGludG8gInBhZ2UiIGNvb3JkaW5hdGUgc3lzdGVt
CiAgICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiKSB7Ci0gICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxY
KCk7Ci0gICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTsKLSAgICB9IGVsc2UgaWYgKGNvbnRleHQg
PT0gImxvY2FsIiB8fCAhY29udGV4dCkgewotICAgICAgdmFyIGxvY2FsQm94ID0gZ2V0UmVjdChj
bS5kaXNwbGF5LnNpemVyKTsKLSAgICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDsKLSAgICAgIHRv
cCArPSBsb2NhbEJveC50b3A7CisgICAgICBsZWZ0IC09IHdpbmRvdy5wYWdlWE9mZnNldCB8fCAo
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQ7Cisg
ICAgICB0b3AgLT0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wOwogICAgIH0KLQogICAgIHZhciBsaW5lU3Bh
Y2VCb3ggPSBnZXRSZWN0KGNtLmRpc3BsYXkubGluZVNwYWNlKTsKLSAgICByZXR1cm4ge2xlZnQ6
IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfTsK
KyAgICBsZWZ0IC09IGxpbmVTcGFjZUJveC5sZWZ0OworICAgIHRvcCAtPSBsaW5lU3BhY2VCb3gu
dG9wOworICAgIGlmIChjb250ZXh0ID09ICJsb2NhbCIgfHwgIWNvbnRleHQpIHsKKyAgICAgIHZh
ciBlZGl0b3JCb3ggPSBnZXRSZWN0KGNtLmRpc3BsYXkud3JhcHBlcik7CisgICAgICBsZWZ0ICs9
IGVkaXRvckJveC5sZWZ0OworICAgICAgdG9wICs9IGVkaXRvckJveC50b3A7CisgICAgfQorICAg
IHJldHVybiB7bGVmdDogbGVmdCwgdG9wOiB0b3B9OwogICB9CiAKLSAgZnVuY3Rpb24gY2hhckNv
b3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7CisgIGZ1bmN0aW9uIGNoYXJD
b29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaikgewogICAgIGlmICghbGluZU9iaikgbGlu
ZU9iaiA9IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7Ci0gICAgcmV0dXJuIGludG9Db29yZFN5
c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgbnVsbCwg
YmlhcyksIGNvbnRleHQpOworICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmos
IG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gpLCBjb250ZXh0KTsKICAgfQogCiAgIGZ1
bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVu
dCkgewogICAgIGxpbmVPYmogPSBsaW5lT2JqIHx8IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7
CiAgICAgaWYgKCFtZWFzdXJlbWVudCkgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShjbSwgbGlu
ZU9iaik7CiAgICAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkgewotICAgICAgdmFyIG0gPSBtZWFz
dXJlQ2hhcihjbSwgbGluZU9iaiwgY2gsIG1lYXN1cmVtZW50LCByaWdodCA/ICJyaWdodCIgOiAi
bGVmdCIpOworICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgY2gsIG1lYXN1
cmVtZW50KTsKICAgICAgIGlmIChyaWdodCkgbS5sZWZ0ID0gbS5yaWdodDsgZWxzZSBtLnJpZ2h0
ID0gbS5sZWZ0OwogICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwg
Y29udGV4dCk7CiAgICAgfQotICAgIGZ1bmN0aW9uIGdldEJpZGkoY2gsIHBhcnRQb3MpIHsKLSAg
ICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCAlIDI7Ci0g
ICAgICBpZiAoY2ggPT0gYmlkaUxlZnQocGFydCkgJiYgcGFydFBvcyAmJiBwYXJ0LmxldmVsIDwg
b3JkZXJbcGFydFBvcyAtIDFdLmxldmVsKSB7Ci0gICAgICAgIHBhcnQgPSBvcmRlclstLXBhcnRQ
b3NdOwotICAgICAgICBjaCA9IGJpZGlSaWdodChwYXJ0KSAtIChwYXJ0LmxldmVsICUgMiA/IDAg
OiAxKTsKLSAgICAgICAgcmlnaHQgPSB0cnVlOwotICAgICAgfSBlbHNlIGlmIChjaCA9PSBiaWRp
UmlnaHQocGFydCkgJiYgcGFydFBvcyA8IG9yZGVyLmxlbmd0aCAtIDEgJiYgcGFydC5sZXZlbCA8
IG9yZGVyW3BhcnRQb3MgKyAxXS5sZXZlbCkgewotICAgICAgICBwYXJ0ID0gb3JkZXJbKytwYXJ0
UG9zXTsKLSAgICAgICAgY2ggPSBiaWRpTGVmdChwYXJ0KSAtIHBhcnQubGV2ZWwgJSAyOwotICAg
ICAgICByaWdodCA9IGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKHJpZ2h0ICYmIGNoID09IHBh
cnQudG8gJiYgY2ggPiBwYXJ0LmZyb20pIHJldHVybiBnZXQoY2ggLSAxKTsKLSAgICAgIHJldHVy
biBnZXQoY2gsIHJpZ2h0KTsKLSAgICB9CiAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9i
aiksIGNoID0gcG9zLmNoOwogICAgIGlmICghb3JkZXIpIHJldHVybiBnZXQoY2gpOwotICAgIHZh
ciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgY2gpOwotICAgIHZhciB2YWwgPSBnZXRC
aWRpKGNoLCBwYXJ0UG9zKTsKLSAgICBpZiAoYmlkaU90aGVyICE9IG51bGwpIHZhbC5vdGhlciA9
IGdldEJpZGkoY2gsIGJpZGlPdGhlcik7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICB2YXIgbWFpbiwg
b3RoZXIsIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG9yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldLCBydGwgPSBw
YXJ0LmxldmVsICUgMiwgbmIsIGhlcmU7CisgICAgICBpZiAocGFydC5mcm9tIDwgY2ggJiYgcGFy
dC50byA+IGNoKSByZXR1cm4gZ2V0KGNoLCBydGwpOworICAgICAgdmFyIGxlZnQgPSBydGwgPyBw
YXJ0LnRvIDogcGFydC5mcm9tLCByaWdodCA9IHJ0bCA/IHBhcnQuZnJvbSA6IHBhcnQudG87Cisg
ICAgICBpZiAobGVmdCA9PSBjaCkgeworICAgICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIG9mZnNl
dHMgYW5kIHdpZHRocyBmb3IgZWRnZXMgd2hlcmUgdGhlCisgICAgICAgIC8vIGRpcmVjdGlvbiBm
bGlwcywgYnV0IG9ubHkgZm9yIHRoZSBzaWRlIHdpdGggdGhlIGxvd2VyCisgICAgICAgIC8vIGxl
dmVsLiBTbyB3ZSB0cnkgdG8gdXNlIHRoZSBzaWRlIHdpdGggdGhlIGhpZ2hlciBsZXZlbC4KKyAg
ICAgICAgaWYgKGkgJiYgcGFydC5sZXZlbCA8IChuYiA9IG9yZGVyW2ktMV0pLmxldmVsKSBoZXJl
ID0gZ2V0KG5iLmxldmVsICUgMiA/IG5iLmZyb20gOiBuYi50byAtIDEsIHRydWUpOworICAgICAg
ICBlbHNlIGhlcmUgPSBnZXQocnRsICYmIHBhcnQuZnJvbSAhPSBwYXJ0LnRvID8gY2ggLSAxIDog
Y2gpOworICAgICAgICBpZiAocnRsID09IGxpbmVkaXIpIG1haW4gPSBoZXJlOyBlbHNlIG90aGVy
ID0gaGVyZTsKKyAgICAgIH0gZWxzZSBpZiAocmlnaHQgPT0gY2gpIHsKKyAgICAgICAgdmFyIG5i
ID0gaSA8IG9yZGVyLmxlbmd0aCAtIDEgJiYgb3JkZXJbaSsxXTsKKyAgICAgICAgaWYgKCFydGwg
JiYgbmIgJiYgbmIuZnJvbSA9PSBuYi50bykgY29udGludWU7CisgICAgICAgIGlmIChuYiAmJiBw
YXJ0LmxldmVsIDwgbmIubGV2ZWwpIGhlcmUgPSBnZXQobmIubGV2ZWwgJSAyID8gbmIudG8gLSAx
IDogbmIuZnJvbSk7CisgICAgICAgIGVsc2UgaGVyZSA9IGdldChydGwgPyBjaCA6IGNoIC0gMSwg
dHJ1ZSk7CisgICAgICAgIGlmIChydGwgPT0gbGluZWRpcikgbWFpbiA9IGhlcmU7IGVsc2Ugb3Ro
ZXIgPSBoZXJlOworICAgICAgfQorICAgIH0KKyAgICBpZiAobGluZWRpciAmJiAhY2gpIG90aGVy
ID0gZ2V0KG9yZGVyWzBdLnRvIC0gMSk7CisgICAgaWYgKCFtYWluKSByZXR1cm4gb3RoZXI7Cisg
ICAgaWYgKG90aGVyKSBtYWluLm90aGVyID0gb3RoZXI7CisgICAgcmV0dXJuIG1haW47CiAgIH0K
IAotICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgeworICBm
dW5jdGlvbiBQb3NNYXliZU91dHNpZGUobGluZSwgY2gsIG91dHNpZGUpIHsKICAgICB2YXIgcG9z
ID0gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgcG9zLnhSZWwgPSB4UmVsOwogICAgIGlmIChvdXRz
aWRlKSBwb3Mub3V0c2lkZSA9IHRydWU7CiAgICAgcmV0dXJuIHBvczsKICAgfQpAQCAtMTIwMiwx
MCArMTE2OSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rp
b24gY29vcmRzQ2hhcihjbSwgeCwgeSkgewogICAgIHZhciBkb2MgPSBjbS5kb2M7CiAgICAgeSAr
PSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7Ci0gICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zV2l0aElu
Zm8oZG9jLmZpcnN0LCAwLCB0cnVlLCAtMSk7CisgICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zTWF5
YmVPdXRzaWRlKGRvYy5maXJzdCwgMCwgdHJ1ZSk7CiAgICAgdmFyIGxpbmVObyA9IGxpbmVBdEhl
aWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwogICAgIGlmIChs
aW5lTm8gPiBsYXN0KQotICAgICAgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCArIGRvYy5z
aXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlLCAxKTsKKyAgICAg
IHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5l
KGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUpOwogICAgIGlmICh4IDwgMCkgeCA9IDA7CiAK
ICAgICBmb3IgKDs7KSB7CkBAIC0xMjEzLDcgKzExODAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGlu
ZU9iaiwgbGluZU5vLCB4LCB5KTsKICAgICAgIHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRF
bmQobGluZU9iaik7CiAgICAgICB2YXIgbWVyZ2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5k
KCk7Ci0gICAgICBpZiAobWVyZ2VkICYmIChmb3VuZC5jaCA+IG1lcmdlZFBvcy5mcm9tLmNoIHx8
IGZvdW5kLmNoID09IG1lcmdlZFBvcy5mcm9tLmNoICYmIGZvdW5kLnhSZWwgPiAwKSkKKyAgICAg
IGlmIChtZXJnZWQgJiYgZm91bmQuY2ggPj0gbWVyZ2VkUG9zLmZyb20uY2gpCiAgICAgICAgIGxp
bmVObyA9IG1lcmdlZFBvcy50by5saW5lOwogICAgICAgZWxzZQogICAgICAgICByZXR1cm4gZm91
bmQ7CkBAIC0xMjM5LDE1ICsxMjA2LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIHZhciBmcm9tID0gbGluZUxlZnQobGluZU9iaiksIHRvID0gbGluZVJpZ2h0KGxp
bmVPYmopOwogICAgIHZhciBmcm9tWCA9IGdldFgoZnJvbSksIGZyb21PdXRzaWRlID0gd3JvbmdM
aW5lLCB0b1ggPSBnZXRYKHRvKSwgdG9PdXRzaWRlID0gd3JvbmdMaW5lOwogCi0gICAgaWYgKHgg
PiB0b1gpIHJldHVybiBQb3NXaXRoSW5mbyhsaW5lTm8sIHRvLCB0b091dHNpZGUsIDEpOworICAg
IGlmICh4ID4gdG9YKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRlKGxpbmVObywgdG8sIHRvT3V0c2lk
ZSk7CiAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAg
IGZvciAoOzspIHsKICAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlz
dWFsbHkobGluZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewotICAgICAgICB2YXIg
Y2ggPSB4IDwgZnJvbVggfHwgeCAtIGZyb21YIDw9IHRvWCAtIHggPyBmcm9tIDogdG87Ci0gICAg
ICAgIHZhciB4RGlmZiA9IHggLSAoY2ggPT0gZnJvbSA/IGZyb21YIDogdG9YKTsKKyAgICAgICAg
dmFyIGFmdGVyID0geCAtIGZyb21YIDwgdG9YIC0geCwgY2ggPSBhZnRlciA/IGZyb20gOiB0bzsK
ICAgICAgICAgd2hpbGUgKGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmVPYmoudGV4dC5jaGFyQXQo
Y2gpKSkgKytjaDsKLSAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNo
ID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhEaWZmIDwgMCA/IC0xIDogeERpZmYgPyAxIDogMCk7CisgICAgICAgIHZhciBw
b3MgPSBQb3NNYXliZU91dHNpZGUobGluZU5vLCBjaCwgYWZ0ZXIgPyBmcm9tT3V0c2lkZSA6IHRv
T3V0c2lkZSk7CisgICAgICAgIHBvcy5hZnRlciA9IGFmdGVyOwogICAgICAgICByZXR1cm4gcG9z
OwogICAgICAgfQogICAgICAgdmFyIHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUg
PSBmcm9tICsgc3RlcDsKQEAgLTEyNTYsOCArMTIyMiw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7ICsraSkgbWlk
ZGxlID0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIG1pZGRsZSwgMSk7CiAgICAgICB9CiAgICAgICB2
YXIgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKLSAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0g
bWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRzaWRlID0gd3JvbmdMaW5lKSB0b1ggKz0g
MTAwMDsgZGlzdCA9IHN0ZXA7fQotICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBt
aWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsgZGlzdCAtPSBzdGVwO30KKyAgICAgIGlm
IChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRzaWRl
ID0gd3JvbmdMaW5lKSB0b1ggKz0gMTAwMDsgZGlzdCAtPSBzdGVwO30KKyAgICAgIGVsc2Uge2Zy
b20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDsgZnJvbU91dHNpZGUgPSB3cm9uZ0xpbmU7IGRp
c3QgPSBzdGVwO30KICAgICB9CiAgIH0KIApAQCAtMTQzMywzMiArMTM5OSwzMSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gc3VwcG9ydGVkIG9yIGNvbXBhdGlibGUg
ZW5vdWdoIHlldCB0byByZWx5IG9uLikKICAgZnVuY3Rpb24gcmVhZElucHV0KGNtKSB7CiAgICAg
dmFyIGlucHV0ID0gY20uZGlzcGxheS5pbnB1dCwgcHJldklucHV0ID0gY20uZGlzcGxheS5wcmV2
SW5wdXQsIGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKLSAgICBpZiAoIWNtLnN0YXRlLmZv
Y3VzZWQgfHwgaGFzU2VsZWN0aW9uKGlucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5zdGF0
ZS5kaXNhYmxlSW5wdXQpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQg
fHwgaGFzU2VsZWN0aW9uKGlucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuIGZhbHNlOwog
ICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7CiAgICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYm
IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGllICYmICFp
ZV9sdDkgJiYgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9PT0gdGV4dCkgeworICAgIC8v
IElFIGVuam95cyByYW5kb21seSBkZXNlbGVjdGluZyBvdXIgaW5wdXQncyB0ZXh0IHdoZW4KKyAg
ICAvLyByZS1mb2N1c2luZy4gSWYgdGhlIHNlbGVjdGlvbiBpcyBnb25lIGJ1dCB0aGUgY3Vyc29y
IGlzIGF0IHRoZQorICAgIC8vIHN0YXJ0IG9mIHRoZSBpbnB1dCwgdGhhdCdzIHByb2JhYmx5IHdo
YXQgaGFwcGVuZWQuCisgICAgaWYgKGllICYmIHRleHQgJiYgaW5wdXQuc2VsZWN0aW9uU3RhcnQg
PT09IDApIHsKICAgICAgIHJlc2V0SW5wdXQoY20sIHRydWUpOwogICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLQogICAgIHZhciB3aXRoT3AgPSAhY20uY3VyT3A7CiAgICAgaWYgKHdpdGhPcCkg
c3RhcnRPcGVyYXRpb24oY20pOwogICAgIHNlbC5zaGlmdCA9IGZhbHNlOwogICAgIHZhciBzYW1l
ID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKLSAgICB3
aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0gdGV4dC5jaGFy
Q29kZUF0KHNhbWUpKSArK3NhbWU7CisgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dFtz
YW1lXSA9PSB0ZXh0W3NhbWVdKSArK3NhbWU7CiAgICAgdmFyIGZyb20gPSBzZWwuZnJvbSwgdG8g
PSBzZWwudG87CiAgICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQogICAgICAgZnJvbSA9
IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpKTsKICAg
ICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcG9zRXEoZnJvbSwgdG8pICYmICFjbS5z
dGF0ZS5wYXN0ZUluY29taW5nKQogICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0
TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNh
bWUpKSk7Ci0KICAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKLSAg
ICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExpbmVz
KHRleHQuc2xpY2Uoc2FtZSkpLAotICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNtLnN0
YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogIitpbnB1dCJ9OwotICAgIG1ha2VDaGFuZ2Uo
Y20uZG9jLCBjaGFuZ2VFdmVudCwgImVuZCIpOwotICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0g
dXBkYXRlSW5wdXQ7Ci0gICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdl
RXZlbnQpOworICAgIG1ha2VDaGFuZ2UoY20uZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0
OiBzcGxpdExpbmVzKHRleHQuc2xpY2Uoc2FtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6ICIraW5wdXQifSwgImVu
ZCIpOwogCisgICAgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKICAgICBpZiAo
dGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1
ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7CiAgICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJ
bnB1dCA9IHRleHQ7CiAgICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKQEAgLTE0NzIs
MTQgKzE0MzcsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBj
bS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOwogICAgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAm
JgogICAgICAgICAoZG9jLnNlbC50by5saW5lIC0gZG9jLnNlbC5mcm9tLmxpbmUgPiAxMDAgfHwg
KHNlbGVjdGVkID0gY20uZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aCA+IDEwMDApOwotICAgICAgdmFy
IGNvbnRlbnQgPSBtaW5pbWFsID8gIi0iIDogc2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9uKCk7
Ci0gICAgICBjbS5kaXNwbGF5LmlucHV0LnZhbHVlID0gY29udGVudDsKKyAgICAgIGlmIChtaW5p
bWFsKSBjbS5kaXNwbGF5LmlucHV0LnZhbHVlID0gIi0iOworICAgICAgZWxzZSBjbS5kaXNwbGF5
LmlucHV0LnZhbHVlID0gc2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9uKCk7CiAgICAgICBpZiAo
Y20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7Ci0gICAgICBp
ZiAoaWUgJiYgIWllX2x0OSkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7
Ci0gICAgfSBlbHNlIGlmICh1c2VyKSB7Ci0gICAgICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IGNt
LmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKLSAgICAgIGlmIChpZSAmJiAhaWVfbHQ5KSBjbS5k
aXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKLSAgICB9CisgICAgfSBlbHNlIGlmICh1
c2VyKSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsK
ICAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwogICB9CiAKQEAg
LTE0OTcsMTcgKzE0NTgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7CiAgICAgdmFyIGQgPSBjbS5kaXNw
bGF5OwogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91
c2VEb3duKSk7Ci0gICAgaWYgKGllKQotICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwg
b3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmIChzaWduYWxET01FdmVudChj
bSwgZSkpIHJldHVybjsKLSAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Ci0g
ICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQo
Y20uZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAg
ICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExpbmUoY20uZG9jLCBwb3MubGluZSkudGV4
dCwgcG9zKTsKLSAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3Jk
LnRvKTsKLSAgICAgIH0pKTsKLSAgICBlbHNlCi0gICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xp
Y2siLCBmdW5jdGlvbihlKSB7IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZh
dWx0KGUpOyB9KTsKKyAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBvcGVyYXRpb24oY20s
IGVfcHJldmVudERlZmF1bHQpKTsKICAgICBvbihkLmxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0Iiwg
ZnVuY3Rpb24oZSkgewogICAgICAgaWYgKCFldmVudEluV2lkZ2V0KGQsIGUpKSBlX3ByZXZlbnRE
ZWZhdWx0KGUpOwogICAgIH0pOwpAQCAtMTUzOSwxNSArMTQ5MCwxMSBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNj
cm9sbGluZwogICAgIG9uKGQud3JhcHBlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeyBkLndyYXBw
ZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTsKIAotICAgIHZhciBy
ZXNpemVUaW1lcjsKICAgICBmdW5jdGlvbiBvblJlc2l6ZSgpIHsKLSAgICAgIGlmIChyZXNpemVU
aW1lciA9PSBudWxsKSByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHJlc2l6ZVRpbWVyID0gbnVsbDsKLSAgICAgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxp
bmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy4KLSAgICAgICAgZC5jYWNoZWRDaGFyV2lk
dGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBrbm93blNjcm9sbGJhcldpZHRoID0gbnVsbDsKLSAg
ICAgICAgY2xlYXJDYWNoZXMoY20pOwotICAgICAgICBydW5Jbk9wKGNtLCBiaW5kKHJlZ0NoYW5n
ZSwgY20pKTsKLSAgICAgIH0sIDEwMCk7CisgICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGlu
ZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgorICAgICAgZC5jYWNoZWRDaGFyV2lkdGgg
PSBkLmNhY2hlZFRleHRIZWlnaHQgPSBudWxsOworICAgICAgY2xlYXJDYWNoZXMoY20pOworICAg
ICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7CiAgICAgfQogICAgIG9uKHdpbmRv
dywgInJlc2l6ZSIsIG9uUmVzaXplKTsKICAgICAvLyBBYm92ZSBoYW5kbGVyIGhvbGRzIG9uIHRv
IHRoZSBlZGl0b3IgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuCkBAIC0xNTYxLDcgKzE1MDgsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KHVucmVn
aXN0ZXIsIDUwMDApOwogCiAgICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBm
dW5jdGlvbihlKSB7Ci0gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlv
bnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSBy
ZXR1cm47CisgICAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25L
ZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgIGlmIChlLmtleUNvZGUgPT0g
MTYpIGNtLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKICAgICB9KSk7CiAgICAgb24oZC5pbnB1dCwg
ImlucHV0IiwgYmluZChmYXN0UG9sbCwgY20pKTsKQEAgLTE1NzEsNyArMTUxOCw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGQuaW5wdXQsICJibHVyIiwgYmlu
ZChvbkJsdXIsIGNtKSk7CiAKICAgICBmdW5jdGlvbiBkcmFnXyhlKSB7Ci0gICAgICBpZiAoc2ln
bmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9u
cy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICAgIGlmIChjbS5vcHRp
b25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkp
KSByZXR1cm47CiAgICAgICBlX3N0b3AoZSk7CiAgICAgfQogICAgIGlmIChjbS5vcHRpb25zLmRy
YWdEcm9wKSB7CkBAIC0xNjEwLDcgKzE1NTcsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKIAogICBmdW5jdGlvbiBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKICAgICBm
b3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJl
bnROb2RlKSB7Ci0gICAgICBpZiAoIW4gfHwgbi5pZ25vcmVFdmVudHMgfHwgbi5wYXJlbnROb2Rl
ID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGlmICghbikgcmV0dXJuIHRydWU7CisgICAgICBpZiAoL1xiQ29kZU1pcnJvci0oPzpsaW5l
KT93aWRnZXRcYi8udGVzdChuLmNsYXNzTmFtZSkgfHwKKyAgICAgICAgICBuLnBhcmVudE5vZGUg
PT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOwogICAg
IH0KICAgfQogCkBAIC0xNjIwLDcgKzE1NjksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIHZhciB0YXJnZXQgPSBlX3RhcmdldChlKTsKICAgICAgIGlmICh0YXJn
ZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJIIHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckgu
Zmlyc3RDaGlsZCB8fAogICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwg
dGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyVi5maXJzdENoaWxkIHx8Ci0gICAgICAgICAgdGFy
Z2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyIHx8IHRhcmdldCA9PSBkaXNwbGF5Lmd1dHRl
ckZpbGxlcikgcmV0dXJuIG51bGw7CisgICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xs
YmFyRmlsbGVyKSByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgdmFyIHgsIHksIHNwYWNlID0gZ2V0
UmVjdChkaXNwbGF5LmxpbmVTcGFjZSk7CiAgICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJ
RVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LgpAQCAtMTYzMCw3ICsx
NTc5LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgdmFyIGxhc3RD
bGljaywgbGFzdERvdWJsZUNsaWNrOwogICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7Ci0gICAg
aWYgKHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpKSByZXR1cm47CiAgICAgdmFyIGNtID0gdGhpcywg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKICAgICBz
ZWwuc2hpZnQgPSBlLnNoaWZ0S2V5OwogCkBAIC0xNzAxLDEyICsxNjQ5LDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICBp
ZiAodHlwZSA9PSAic2luZ2xlIikgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2Ms
IHN0YXJ0KSk7CiAKLSAgICB2YXIgc3RhcnRzdGFydCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNl
bC50bywgbGFzdFBvcyA9IHN0YXJ0OworICAgIHZhciBzdGFydHN0YXJ0ID0gc2VsLmZyb20sIHN0
YXJ0ZW5kID0gc2VsLnRvOwogCiAgICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7Ci0gICAgICBp
ZiAocG9zRXEobGFzdFBvcywgY3VyKSkgcmV0dXJuOwotICAgICAgbGFzdFBvcyA9IGN1cjsKLQog
ICAgICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIHsKICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNt
LmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSwgY3VyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1
NCw2ICsxNjk5LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBm
dW5jdGlvbiBkb25lKGUpIHsKICAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTsKKyAgICAgIHZhciBj
dXIgPSBwb3NGcm9tTW91c2UoY20sIGUpOworICAgICAgaWYgKGN1cikgZG9TZWxlY3QoY3VyKTsK
ICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAg
IG9mZihkb2N1bWVudCwgIm1vdXNlbW92ZSIsIG1vdmUpOwpAQCAtMTc2OSw0MSArMTcxNiwxMSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkb2N1bWVudCwgIm1v
dXNldXAiLCB1cCk7CiAgIH0KIAotICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7Ci0g
ICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50
WCwgbVkgPSBlLmNsaWVudFk7IH0KLSAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgaWYgKG1YID49IE1hdGguZmxvb3IoZ2V0UmVjdChkaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSkg
cmV0dXJuIGZhbHNlOwotICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgaWYgKCFoYXNIYW5k
bGVyKGNtLCAiZ3V0dGVyQ2xpY2siKSkgcmV0dXJuIHRydWU7Ci0KLSAgICB2YXIgbGluZUJveCA9
IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsKLSAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkg
cmV0dXJuIHRydWU7Ci0gICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7
Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKLSAgICAg
IGlmIChnICYmIGdldFJlY3QoZykucmlnaHQgPj0gbVgpIHsKLSAgICAgICAgdmFyIGxpbmUgPSBs
aW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7Ci0gICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25z
Lmd1dHRlcnNbaV07Ci0gICAgICAgIHNpZ25hbExhdGVyKGNtLCAiZ3V0dGVyQ2xpY2siLCBjbSwg
bGluZSwgZ3V0dGVyLCBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotICB9Ci0KLSAgLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUg
YmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzCi0gIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2Yg
ZHJhZy1yZWxhdGVkIGV2ZW50cyByaWdodCBhZnRlciB0aGUgZHJvcCAoIzE1NTEpCi0gIHZhciBs
YXN0RHJvcCA9IDA7Ci0KICAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKICAgICB2YXIgY20gPSB0aGlz
OwotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNw
bGF5LCBlKSB8fCAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2
ZW50KGNtLCBhZGRTdG9wKGUpKSkpCisgICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwg
ZSkgfHwgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChj
bSwgYWRkU3RvcChlKSkpKQogICAgICAgcmV0dXJuOwogICAgIGVfcHJldmVudERlZmF1bHQoZSk7
Ci0gICAgaWYgKGllKSBsYXN0RHJvcCA9ICtuZXcgRGF0ZTsKICAgICB2YXIgcG9zID0gcG9zRnJv
bU1vdXNlKGNtLCBlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICBp
ZiAoIXBvcyB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuOwogICAgIGlmIChmaWxlcyAmJiBmaWxl
cy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHsKQEAgLTE4NDMs
MTYgKzE3NjAsNDAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQog
ICB9CiAKKyAgZnVuY3Rpb24gY2xpY2tJbkd1dHRlcihjbSwgZSkgeworICAgIHZhciBkaXNwbGF5
ID0gY20uZGlzcGxheTsKKyAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGll
bnRZOyB9CisgICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGlmIChtWCA+PSBN
YXRoLmZsb29yKGdldFJlY3QoZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsK
KyAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRl
ckNsaWNrIikpIHJldHVybiB0cnVlOworCisgICAgdmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3Bs
YXkubGluZURpdik7CisgICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20pIHJldHVybiB0cnVlOwor
ICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0OworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZh
ciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNbaV07CisgICAgICBpZiAoZyAmJiBnZXRS
ZWN0KGcpLnJpZ2h0ID49IG1YKSB7CisgICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNt
LmRvYywgbVkpOworICAgICAgICB2YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwor
ICAgICAgICBzaWduYWxMYXRlcihjbSwgImd1dHRlckNsaWNrIiwgY20sIGxpbmUsIGd1dHRlciwg
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAg
fQorCiAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7Ci0gICAgaWYgKGllICYmICghY20u
c3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0
b3AoZSk7IHJldHVybjsgfQotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJ
bldpZGdldChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOworICAgIGlmIChldmVudEluV2lkZ2V0KGNt
LmRpc3BsYXksIGUpKSByZXR1cm47CiAKICAgICB2YXIgdHh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7
CiAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAKICAgICAvLyBVc2Ug
ZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAgIC8vIFJl
Y2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhp
cyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KLSAgICBpZiAoZS5kYXRhVHJhbnNm
ZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpIHsKKyAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0
RHJhZ0ltYWdlKSB7CiAgICAgICB2YXIgaW1nID0gZWx0KCJpbWciLCBudWxsLCBudWxsLCAicG9z
aXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7CiAgICAgICBpZiAob3BlcmEpIHsKICAg
ICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdodCA9IDE7CkBAIC0xODYwLDYgKzE4MDEsMTUgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIC8vIEZvcmNlIGEgcmVs
YXlvdXQsIG9yIE9wZXJhIHdvbid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFz
b24KICAgICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wOwogICAgICAgfQorICAgICAgaWYg
KHNhZmFyaSkgeworICAgICAgICBpZiAoY20uZGlzcGxheS5kcmFnSW1nKSB7CisgICAgICAgICAg
aW1nID0gY20uZGlzcGxheS5kcmFnSW1nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNt
LmRpc3BsYXkuZHJhZ0ltZyA9IGltZzsKKyAgICAgICAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2Uv
Z2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RB
RUFPdz09IjsKKyAgICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsK
KyAgICAgICAgfQorICAgICAgfQogICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGlt
ZywgMCwgMCk7CiAgICAgICBpZiAob3BlcmEpIGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGlt
Zyk7CiAgICAgfQpAQCAtMTg3Miw3ICsxODIyLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkg
Y20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB2YWw7CiAgICAgaWYgKGNtLmRpc3BsYXku
c2Nyb2xsYmFyVi5zY3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xs
VG9wID0gdmFsOwogICAgIGlmIChnZWNrbykgdXBkYXRlRGlzcGxheShjbSwgW10pOwotICAgIHN0
YXJ0V29ya2VyKGNtLCAxMDApOwogICB9CiAgIGZ1bmN0aW9uIHNldFNjcm9sbExlZnQoY20sIHZh
bCwgaXNTY3JvbGxlcikgewogICAgIGlmIChpc1Njcm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3Jv
bGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSB2YWwpIDwgMikgcmV0dXJuOwpA
QCAtMjAwNSwxMCArMTk1NCw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBzdGFydE1hcCA9IGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBz
dGFydE1hcC5hdXRvOwogICAgIGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOwogICAgIGlm
IChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0g
c3RhcnRNYXApIHsKKyAgICAgIGlmIChnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApID09IHN0
YXJ0TWFwKQogICAgICAgICBjbS5vcHRpb25zLmtleU1hcCA9IChuZXh0LmNhbGwgPyBuZXh0LmNh
bGwobnVsbCwgY20pIDogbmV4dCk7Ci0gICAgICAgIGtleU1hcENoYW5nZWQoY20pOwotICAgICAg
fQogICAgIH0sIDUwKTsKIAogICAgIHZhciBuYW1lID0ga2V5TmFtZShlLCB0cnVlKSwgaGFuZGxl
ZCA9IGZhbHNlOwpAQCAtMjAyMSwxOCArMTk2OCwxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIC8vICdnbycpIGJvdW5kIHRvIHRoZSBrZXluYW1lIHdpdGhvdXQg
J1NoaWZ0LScuCiAgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KCJTaGlmdC0iICsgbmFtZSwga2V5
bWFwcywgZnVuY3Rpb24oYikge3JldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpO30p
CiAgICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsK
LSAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3RyaW5nIiA/IC9eZ29bQS1aXS8u
dGVzdChiKSA6IGIubW90aW9uKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9IYW5kbGVC
aW5kaW5nKGNtLCBiKTsKKyAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3RyaW5n
IiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICBoYW5kbGVkID0gbG9va3Vw
S2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhj
bSwgYik7IH0pOwogICAgIH0KKyAgICBpZiAoaGFuZGxlZCA9PSAic3RvcCIpIGhhbmRsZWQgPSBm
YWxzZTsKIAogICAgIGlmIChoYW5kbGVkKSB7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwog
ICAgICAgcmVzdGFydEJsaW5rKGNtKTsKICAgICAgIGlmIChpZV9sdDkpIHsgZS5vbGRLZXlDb2Rl
ID0gZS5rZXlDb2RlOyBlLmtleUNvZGUgPSAwOyB9Ci0gICAgICBzaWduYWxMYXRlcihjbSwgImtl
eUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7CiAgICAgfQogICAgIHJldHVybiBoYW5kbGVkOwogICB9
CkBAIC0yMDQzLDcgKzE5ODksNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHJl
c3RhcnRCbGluayhjbSk7Ci0gICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwg
IiciICsgY2ggKyAiJyIsIGUpOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKICAgfQpAQCAt
MjA1Myw3ICsxOTk4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
dmFyIGNtID0gdGhpczsKICAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwog
ICAgIGlmIChpZSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9
Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uS2V5RXZlbnQg
JiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgIGlm
IChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRT
dG9wKGUpKSkgcmV0dXJuOwogICAgIHZhciBjb2RlID0gZS5rZXlDb2RlOwogICAgIC8vIElFIGRv
ZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCiAgICAgY20uZG9jLnNlbC5zaGlmdCA9IGNv
ZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsKQEAgLTIwNjksNyArMjAxNCw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgewogICAg
IHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRp
b25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkg
cmV0dXJuOworICAgIGlmIChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktl
eUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgIHZhciBrZXlDb2RlID0gZS5rZXlD
b2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7CiAgICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0g
bGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQo
ZSk7IHJldHVybjt9CiAgICAgaWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAx
MCkpIHx8IGtodG1sKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwpAQCAtMjA3
OSw3ICsyMDI0LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
IHRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQogICAgICAgc2V0
VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkge2luZGVudExpbmUoY20sIGNtLmRvYy5z
ZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDc1KTsKICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmco
Y20sIGUsIGNoKSkgcmV0dXJuOwotICAgIGlmIChpZSAmJiAhaWVfbHQ5KSBjbS5kaXNwbGF5Lmlu
cHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKICAgICBmYXN0UG9sbChjbSk7CiAgIH0KIApAQCAtMjEy
NSwxMyArMjA2OSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8v
IEFkZHMgIlNlbGVjdCBhbGwiIHRvIGNvbnRleHQgbWVudSBpbiBGRgogICAgIGlmIChwb3NFcShz
ZWwuZnJvbSwgc2VsLnRvKSkgZGlzcGxheS5pbnB1dC52YWx1ZSA9IGRpc3BsYXkucHJldklucHV0
ID0gIiAiOwogCi0gICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7Ci0gICAgICBp
ZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Ci0gICAgICAgIHZhciBl
eHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0VxKHNlbC5mcm9tLCBzZWwu
dG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVlKTsKLSAgICAgICAgZGlzcGxheS5wcmV2SW5w
dXQgPSAiICI7Ci0gICAgICAgIGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSAxOyBkaXNw
bGF5LmlucHV0LnNlbGVjdGlvbkVuZCA9IGV4dHZhbC5sZW5ndGg7Ci0gICAgICB9Ci0gICAgfQog
ICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9z
aXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0ID0g
b2xkQ1NTOwpAQCAtMjEzOSwxMCArMjA3NiwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIHNsb3dQb2xsKGNtKTsKIAogICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0
aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsCi0gICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxl
Y3Rpb25TdGFydCAhPSBudWxsKSB7Ci0gICAgICAgIGlmICghaWUgfHwgaWVfbHQ5KSBwcmVwYXJl
U2VsZWN0QWxsSGFjaygpOworICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQg
IT0gbnVsbCAmJiAoIWllIHx8IGllX2x0OSkpIHsKICAgICAgICAgY2xlYXJUaW1lb3V0KGRldGVj
dGluZ1NlbGVjdEFsbCk7Ci0gICAgICAgIHZhciBpID0gMCwgcG9sbCA9IGZ1bmN0aW9uKCl7Cisg
ICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0VxKHNl
bC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVlKSwgaSA9IDA7CisgICAg
ICAgIGRpc3BsYXkucHJldklucHV0ID0gIiAiOworICAgICAgICBkaXNwbGF5LmlucHV0LnNlbGVj
dGlvblN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3Ro
OworICAgICAgICB2YXIgcG9sbCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgaWYgKGRpc3BsYXku
cHJldklucHV0ID09ICIgIiAmJiBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCiAg
ICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRzLnNlbGVjdEFsbCkoY20pOwogICAgICAg
ICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBv
bGwsIDUwMCk7CkBAIC0yMTUyLDcgKzIwOTEsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaWUgJiYgIWllX2x0OSkgcHJlcGFy
ZVNlbGVjdEFsbEhhY2soKTsKICAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSB7CiAgICAgICBl
X3N0b3AoZSk7CiAgICAgICB2YXIgbW91c2V1cCA9IGZ1bmN0aW9uKCkgewpAQCAtMjE2NywxMSAr
MjEwNSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBVUERB
VElORwogCi0gIHZhciBjaGFuZ2VFbmQgPSBDb2RlTWlycm9yLmNoYW5nZUVuZCA9IGZ1bmN0aW9u
KGNoYW5nZSkgeworICBmdW5jdGlvbiBjaGFuZ2VFbmQoY2hhbmdlKSB7CiAgICAgaWYgKCFjaGFu
Z2UudGV4dCkgcmV0dXJuIGNoYW5nZS50bzsKICAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxp
bmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50
ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6
IDApKTsKLSAgfTsKKyAgfQogCiAgIC8vIE1ha2Ugc3VyZSBhIHBvc2l0aW9uIHdpbGwgYmUgdmFs
aWQgYWZ0ZXIgdGhlIGdpdmVuIGNoYW5nZS4KICAgZnVuY3Rpb24gY2xpcFBvc3RDaGFuZ2UoZG9j
LCBjaGFuZ2UsIHBvcykgewpAQCAtMjIxMywyMSArMjE1MSwyMSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4ge2FuY2hvcjogYWRqdXN0UG9zKGRvYy5zZWwu
YW5jaG9yKSwgaGVhZDogYWRqdXN0UG9zKGRvYy5zZWwuaGVhZCl9OwogICB9CiAKLSAgZnVuY3Rp
b24gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHsKKyAgZnVuY3Rpb24gZmlsdGVy
Q2hhbmdlKGRvYywgY2hhbmdlKSB7CiAgICAgdmFyIG9iaiA9IHsKICAgICAgIGNhbmNlbGVkOiBm
YWxzZSwKICAgICAgIGZyb206IGNoYW5nZS5mcm9tLAogICAgICAgdG86IGNoYW5nZS50bywKICAg
ICAgIHRleHQ6IGNoYW5nZS50ZXh0LAogICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLAorICAg
ICAgdXBkYXRlOiBmdW5jdGlvbihmcm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7CisgICAgICAgIGlm
IChmcm9tKSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7CisgICAgICAgIGlmICh0bykg
dGhpcy50byA9IGNsaXBQb3MoZG9jLCB0byk7CisgICAgICAgIGlmICh0ZXh0KSB0aGlzLnRleHQg
PSB0ZXh0OworICAgICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3JpZ2luID0g
b3JpZ2luOworICAgICAgfSwKICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7IHRoaXMuY2FuY2Vs
ZWQgPSB0cnVlOyB9CiAgICAgfTsKLSAgICBpZiAodXBkYXRlKSBvYmoudXBkYXRlID0gZnVuY3Rp
b24oZnJvbSwgdG8sIHRleHQsIG9yaWdpbikgewotICAgICAgaWYgKGZyb20pIHRoaXMuZnJvbSA9
IGNsaXBQb3MoZG9jLCBmcm9tKTsKLSAgICAgIGlmICh0bykgdGhpcy50byA9IGNsaXBQb3MoZG9j
LCB0byk7Ci0gICAgICBpZiAodGV4dCkgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgIGlmIChvcmln
aW4gIT09IHVuZGVmaW5lZCkgdGhpcy5vcmlnaW4gPSBvcmlnaW47Ci0gICAgfTsKICAgICBzaWdu
YWwoZG9jLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLCBvYmopOwogICAgIGlmIChkb2MuY20pIHNpZ25h
bChkb2MuY20sICJiZWZvcmVDaGFuZ2UiLCBkb2MuY20sIG9iaik7CiAKQEAgLTIyNDQsNyArMjE4
Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KIAogICAgIGlm
IChoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVy
KGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpKSB7Ci0gICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2Uo
ZG9jLCBjaGFuZ2UsIHRydWUpOworICAgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hh
bmdlKTsKICAgICAgIGlmICghY2hhbmdlKSByZXR1cm47CiAgICAgfQogCkBAIC0yMjgzLDIzICsy
MjIxLDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBoaXN0
ID0gZG9jLmhpc3Rvcnk7CiAgICAgdmFyIGV2ZW50ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5k
b25lIDogaGlzdC51bmRvbmUpLnBvcCgpOwogICAgIGlmICghZXZlbnQpIHJldHVybjsKKyAgICBo
aXN0LmRpcnR5Q291bnRlciArPSB0eXBlID09ICJ1bmRvIiA/IC0xIDogMTsKIAogICAgIHZhciBh
bnRpID0ge2NoYW5nZXM6IFtdLCBhbmNob3JCZWZvcmU6IGV2ZW50LmFuY2hvckFmdGVyLCBoZWFk
QmVmb3JlOiBldmVudC5oZWFkQWZ0ZXIsCi0gICAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2
ZW50LmFuY2hvckJlZm9yZSwgaGVhZEFmdGVyOiBldmVudC5oZWFkQmVmb3JlLAotICAgICAgICAg
ICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn07CisgICAgICAgICAgICAgICAgYW5j
aG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVhZEFmdGVyOiBldmVudC5oZWFkQmVmb3Jl
fTsKICAgICAodHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZSkucHVzaChh
bnRpKTsKLSAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5t
YXhHZW5lcmF0aW9uOwotCi0gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3Jl
Q2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7
CiAKICAgICBmb3IgKHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgewogICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07CiAgICAgICBjaGFuZ2Uu
b3JpZ2luID0gdHlwZTsKLSAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNo
YW5nZSwgZmFsc2UpKSB7Ci0gICAgICAgICh0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhp
c3QudW5kb25lKS5sZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KICAgICAg
IGFudGkuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7
CiAKICAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UsIG51bGwpCkBAIC0yNTYxLDExICsyNDkxLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAvLyBTQ1JPTExJTkcKIAogICBmdW5jdGlvbiBzY3JvbGxDdXJzb3JJbnRv
VmlldyhjbSkgewotICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY20uZG9j
LnNlbC5oZWFkLCBjbS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7CisgICAgdmFyIGNvb3Jk
cyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbS5kb2Muc2VsLmhlYWQpOwogICAgIGlmICghY20u
c3RhdGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94
ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBudWxsOwotICAgIGlmIChjb29y
ZHMudG9wICsgYm94LnRvcCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChjb29y
ZHMuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CisgICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIpLCBkb1Njcm9s
bCA9IG51bGwsIHBUb3AgPSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOworICAgIGlmIChjb29yZHMu
dG9wICsgcFRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7CisgICAgZWxzZSBpZiAo
Y29vcmRzLmJvdHRvbSArIHBUb3AgKyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgZG9TY3JvbGwgPSBmYWxzZTsK
ICAgICBpZiAoZG9TY3JvbGwgIT0gbnVsbCAmJiAhcGhhbnRvbSkgewogICAgICAgdmFyIGhpZGRl
biA9IGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiOwogICAgICAgaWYgKGhp
ZGRlbikgewpAQCAtMjYwMywxMSArMjUzMywxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkx
LCB4MiwgeTIpIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNuYXBNYXJnaW4gPSB0
ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgcHQg
PSBwYWRkaW5nVG9wKGRpc3BsYXkpOworICAgIHkxICs9IHB0OyB5MiArPSBwdDsKICAgICBpZiAo
eTEgPCAwKSB5MSA9IDA7CiAgICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50
SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVlbnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Ny
b2xsVG9wLCByZXN1bHQgPSB7fTsKICAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCAr
IHBhZGRpbmdWZXJ0KGRpc3BsYXkpOwotICAgIHZhciBhdFRvcCA9IHkxIDwgc25hcE1hcmdpbiwg
YXRCb3R0b20gPSB5MiA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47CisgICAgdmFyIGF0VG9wID0g
eTEgPCBwdCArIDEwLCBhdEJvdHRvbSA9IHkyICsgcHQgPiBkb2NCb3R0b20gLSAxMDsKICAgICBp
ZiAoeTEgPCBzY3JlZW50b3ApIHsKICAgICAgIHJlc3VsdC5zY3JvbGxUb3AgPSBhdFRvcCA/IDAg
OiB5MTsKICAgICB9IGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7CkBAIC0yNjQ0
LDcgKzI1NzUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5j
dGlvbiBpbmRlbnRMaW5lKGNtLCBuLCBob3csIGFnZ3Jlc3NpdmUpIHsKICAgICB2YXIgZG9jID0g
Y20uZG9jOwotICAgIGlmIChob3cgPT0gbnVsbCkgaG93ID0gImFkZCI7CisgICAgaWYgKCFob3cp
IGhvdyA9ICJhZGQiOwogICAgIGlmIChob3cgPT0gInNtYXJ0IikgewogICAgICAgaWYgKCFjbS5k
b2MubW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKICAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0
U3RhdGVCZWZvcmUoY20sIG4pOwpAQCAtMjY2Nyw4ICsyNTk4LDYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0
aW9ucy5pbmRlbnRVbml0OwogICAgIH0gZWxzZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIHsKICAg
ICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5vcHRpb25zLmluZGVudFVuaXQ7Ci0gICAg
fSBlbHNlIGlmICh0eXBlb2YgaG93ID09ICJudW1iZXIiKSB7Ci0gICAgICBpbmRlbnRhdGlvbiA9
IGN1clNwYWNlICsgaG93OwogICAgIH0KICAgICBpbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIGlu
ZGVudGF0aW9uKTsKIApAQCAtMjY5Myw3ICsyNjIyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1
bml0LCB2aXN1YWxseSkgewotICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGNoID0gcG9zLmNoLCBv
cmlnRGlyID0gZGlyOworICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGNoID0gcG9zLmNoOwogICAg
IHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUpOwogICAgIHZhciBwb3NzaWJsZSA9IHRy
dWU7CiAgICAgZnVuY3Rpb24gZmluZE5leHRMaW5lKCkgewpAQCAtMjczMiw3ICsyNjYxLDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChkaXIgPiAwICYm
ICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgdmFyIHJlc3Vs
dCA9IHNraXBBdG9taWMoZG9jLCBQb3MobGluZSwgY2gpLCBvcmlnRGlyLCB0cnVlKTsKKyAgICB2
YXIgcmVzdWx0ID0gc2tpcEF0b21pYyhkb2MsIFBvcyhsaW5lLCBjaCksIGRpciwgdHJ1ZSk7CiAg
ICAgaWYgKCFwb3NzaWJsZSkgcmVzdWx0LmhpdFNpZGUgPSB0cnVlOwogICAgIHJldHVybiByZXN1
bHQ7CiAgIH0KQEAgLTI3NTcsNyArMjY4Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICBmdW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBvcykgewogICAgIHZhciBzdGFy
dCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgIGlmIChsaW5lKSB7Ci0gICAgICBpZiAoKHBv
cy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNl
ICsrZW5kOworICAgICAgaWYgKHBvcy5hZnRlciA9PT0gZmFsc2UgfHwgZW5kID09IGxpbmUubGVu
Z3RoKSAtLXN0YXJ0OyBlbHNlICsrZW5kOwogICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hh
ckF0KHN0YXJ0KTsKICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyKSA/IGlz
V29yZENoYXIKICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7
cmV0dXJuIC9ccy8udGVzdChjaCk7fQpAQCAtMjc3OCw3ICsyNzA3LDYgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJm
b3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInCiAKICAgQ29kZU1pcnJvci5wcm90b3R5cGUg
PSB7Ci0gICAgY29uc3RydWN0b3I6IENvZGVNaXJyb3IsCiAgICAgZm9jdXM6IGZ1bmN0aW9uKCl7
d2luZG93LmZvY3VzKCk7IGZvY3VzSW5wdXQodGhpcyk7IG9uRm9jdXModGhpcyk7IGZhc3RQb2xs
KHRoaXMpO30sCiAKICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKQEAg
LTI3OTgsNyArMjcyNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7CiAgICAgICB2YXIgbWFwcyA9IHRoaXMuc3Rh
dGUua2V5TWFwczsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgaWYgKG1hcHNbaV0gPT0gbWFwIHx8ICh0eXBlb2YgbWFwc1tpXSAhPSAic3RyaW5n
IiAmJiBtYXBzW2ldLm5hbWUgPT0gbWFwKSkgeworICAgICAgICBpZiAoKHR5cGVvZiBtYXAgPT0g
InN0cmluZyIgPyBtYXBzW2ldLm5hbWUgOiBtYXBzW2ldKSA9PSBtYXApIHsKICAgICAgICAgICBt
YXBzLnNwbGljZShpLCAxKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjgxNCw4ICsyNzQyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
cmVtb3ZlT3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMpIHsKICAgICAgIHZh
ciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7CiAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBjdXIgPSBvdmVybGF5c1tp
XS5tb2RlU3BlYzsKLSAgICAgICAgaWYgKGN1ciA9PSBzcGVjIHx8IHR5cGVvZiBzcGVjID09ICJz
dHJpbmciICYmIGN1ci5uYW1lID09IHNwZWMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlzW2ldLm1v
ZGVTcGVjID09IHNwZWMpIHsKICAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7CiAgICAg
ICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7CiAgICAgICAgICAgcmVnQ2hhbmdlKHRoaXMpOwpA
QCAtMjgyNSw3ICsyNzUyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgfSksCiAKICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obiwgZGly
LCBhZ2dyZXNzaXZlKSB7Ci0gICAgICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIiAmJiB0eXBl
b2YgZGlyICE9ICJudW1iZXIiKSB7CisgICAgICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIikg
ewogICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVu
dCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFkZCIgOiAi
c3VidHJhY3QiOwogICAgICAgfQpAQCAtMjg0MCwxMCArMjc2NywxMCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9y
IGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAgLy8gdGhhdCB3YW50IHRv
IGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLgotICAgIGdldFRv
a2VuQXQ6IGZ1bmN0aW9uKHBvcywgcHJlY2lzZSkgeworICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9u
KHBvcykgewogICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwogICAgICAgcG9zID0gY2xpcFBvcyhk
b2MsIHBvcyk7Ci0gICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGlu
ZSwgcHJlY2lzZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOworICAgICAgdmFyIHN0YXRlID0gZ2V0
U3RhdGVCZWZvcmUodGhpcywgcG9zLmxpbmUpLCBtb2RlID0gdGhpcy5kb2MubW9kZTsKICAgICAg
IHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTsKICAgICAgIHZhciBzdHJlYW0gPSBu
ZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwogICAgICAg
d2hpbGUgKHN0cmVhbS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewpAQCAtMjg1OCwz
NyArMjc4NSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgc3RhdGU6IHN0YXRlfTsKICAgICB9LAogCi0gICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0
aW9uKHBvcykgewotICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgcG9zKTsKLSAgICAgIHZh
ciBzdHlsZXMgPSBnZXRMaW5lU3R5bGVzKHRoaXMsIGdldExpbmUodGhpcy5kb2MsIHBvcy5saW5l
KSk7Ci0gICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8g
MiwgY2ggPSBwb3MuY2g7Ci0gICAgICBpZiAoY2ggPT0gMCkgcmV0dXJuIHN0eWxlc1syXTsKLSAg
ICAgIGZvciAoOzspIHsKLSAgICAgICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMTsK
LSAgICAgICAgaWYgKChtaWQgPyBzdHlsZXNbbWlkICogMiAtIDFdIDogMCkgPj0gY2gpIGFmdGVy
ID0gbWlkOwotICAgICAgICBlbHNlIGlmIChzdHlsZXNbbWlkICogMiArIDFdIDwgY2gpIGJlZm9y
ZSA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UgcmV0dXJuIHN0eWxlc1ttaWQgKiAyICsgMl07Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIGdldE1vZGVBdDogZnVuY3Rpb24ocG9zKSB7Ci0gICAgICB2
YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7Ci0gICAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSByZXR1
cm4gbW9kZTsKLSAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCB0aGlzLmdl
dFRva2VuQXQocG9zKS5zdGF0ZSkubW9kZTsKLSAgICB9LAotCi0gICAgZ2V0SGVscGVyOiBmdW5j
dGlvbihwb3MsIHR5cGUpIHsKLSAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBl
KSkgcmV0dXJuOwotICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5n
ZXRNb2RlQXQocG9zKTsKLSAgICAgIHJldHVybiBtb2RlW3R5cGVdICYmIGhlbHBbbW9kZVt0eXBl
XV0gfHwKLSAgICAgICAgbW9kZS5oZWxwZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSB8
fAotICAgICAgICBoZWxwW21vZGUubmFtZV07Ci0gICAgfSwKLQotICAgIGdldFN0YXRlQWZ0ZXI6
IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHsKKyAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihs
aW5lKSB7CiAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CiAgICAgICBsaW5lID0gY2xpcExpbmUo
ZG9jLCBsaW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpOwotICAg
ICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxpbmUgKyAxLCBwcmVjaXNlKTsKKyAgICAg
IHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSk7CiAgICAgfSwKIAogICAgIGN1
cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKQEAgLTI5MDgsMTkgKzI4MDgsNiBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjb29yZHND
aGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTsKICAgICB9LAogCi0gICAgbGluZUF0
SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1vZGUpIHsKLSAgICAgIGhlaWdodCA9IGZyb21Db29y
ZFN5c3RlbSh0aGlzLCB7dG9wOiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9w
OwotICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNw
bGF5LnZpZXdPZmZzZXQpOwotICAgIH0sCi0gICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5l
LCBtb2RlKSB7Ci0gICAgICB2YXIgZW5kID0gZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5maXJzdCAr
IHRoaXMuZG9jLnNpemUgLSAxOwotICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGlu
ZSA9IHRoaXMuZG9jLmZpcnN0OwotICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9
IGxhc3Q7IGVuZCA9IHRydWU7IH0KLSAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRv
YywgbGluZSk7Ci0gICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGdldExpbmUodGhp
cy5kb2MsIGxpbmUpLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRvcCArCi0g
ICAgICAgIChlbmQgPyBsaW5lT2JqLmhlaWdodCA6IDApOwotICAgIH0sCi0KICAgICBkZWZhdWx0
VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSk7
IH0sCiAgICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgo
dGhpcy5kaXNwbGF5KTsgfSwKIApAQCAtMjk0OSw3ICsyODM2LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUs
IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIgPyAi
dGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3cmFwQ2xh
c3MiOwogICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7Ci0gICAgICAg
IGVsc2UgaWYgKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpIikudGVz
dChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhw
KCJcXGIiICsgY2xzICsgIlxcYiIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICB9KTsKQEAgLTI5NjIsMTAgKzI4NDksOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxz
ZSBpZiAoY2xzID09IG51bGwpIGxpbmVbcHJvcF0gPSBudWxsOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2gobmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIgKyBj
bHMgKyAiKD86JHxcXHMrKSIpKTsKLSAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgdmFyIGVuZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoOwotICAg
ICAgICAgIGxpbmVbcHJvcF0gPSBjdXIuc2xpY2UoMCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5p
bmRleCB8fCBlbmQgPT0gY3VyLmxlbmd0aCA/ICIiIDogIiAiKSArIGN1ci5zbGljZShlbmQpIHx8
IG51bGw7CisgICAgICAgICAgdmFyIHVwZCA9IGN1ci5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iICsg
Y2xzICsgIlxcYlxccyp8XFxzKlxcYiIgKyBjbHMgKyAiXFxiIiksICIiKTsKKyAgICAgICAgICBp
ZiAodXBkID09IGN1cikgcmV0dXJuIGZhbHNlOworICAgICAgICAgIGxpbmVbcHJvcF0gPSB1cGQg
fHwgbnVsbDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0pOwpAQCAt
MzAxMyw3ICsyODk5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAgICAgICAgICBsZWZ0
ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgIH0KLSAgICAgIG5vZGUuc3R5bGUu
dG9wID0gdG9wICsgInB4IjsKKyAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdU
b3AoZGlzcGxheSkpICsgInB4IjsKICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUu
cmlnaHQgPSAiIjsKICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAgIGxlZnQg
PSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKQEAgLTMwODEs
OCArMjk2Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgc2Vs
LmdvYWxDb2x1bW4gPSBwb3MubGVmdDsKICAgICB9KSwKIAotICAgIHRvZ2dsZU92ZXJ3cml0ZTog
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRo
aXMuc3RhdGUub3ZlcndyaXRlKSByZXR1cm47CisgICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlv
bigpIHsKICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3
cml0ZSkKICAgICAgICAgdGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUgKz0gIiBDb2RlTWly
cm9yLW92ZXJ3cml0ZSI7CiAgICAgICBlbHNlCkBAIC0zMTIzLDYgKzMwMDgsOSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgIH0s
CiAKKyAgICBvbjogZnVuY3Rpb24odHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO30sCisgICAg
b2ZmOiBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5cGUsIGYpO30sCisKICAgICBvcGVy
YXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCiAKICAgICByZWZy
ZXNoOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7CkBAIC0zMTQ2LDcgKzMwMzQsNiBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6
IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcjt9LAogICAgIGdldEd1dHRl
ckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KICAgfTsK
LSAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTsKIAogICAvLyBPUFRJT04gREVGQVVMVFMKIApAQCAt
MzIwMyw3ICszMDkwLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
Y20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSB2YWwgPyBjb21wZW5zYXRlRm9ySFNjcm9s
bChjbS5kaXNwbGF5KSArICJweCIgOiAiMCI7CiAgICAgY20ucmVmcmVzaCgpOwogICB9LCB0cnVl
KTsKLSAgb3B0aW9uKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsIGZhbHNlLCB1cGRhdGVT
Y3JvbGxiYXJzLCB0cnVlKTsKICAgb3B0aW9uKCJsaW5lTnVtYmVycyIsIGZhbHNlLCBmdW5jdGlv
bihjbSkgewogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKICAgICBn
dXR0ZXJzQ2hhbmdlZChjbSk7CkBAIC0zMjE5LDE0ICszMTA1LDEyIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSk7CiAKICAgb3B0
aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwotICBvcHRpb24oImN1cnNvclNjcm9sbE1hcmdp
biIsIDApOwogICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwogICBvcHRpb24oIndvcmtUaW1l
IiwgMTAwKTsKICAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwogICBvcHRpb24oImZsYXR0ZW5T
cGFucyIsIHRydWUpOwogICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7CiAgIG9wdGlvbigi
dW5kb0RlcHRoIiwgNDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0
aCA9IHZhbDt9KTsKLSAgb3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDUwMCk7CiAgIG9wdGlv
bigidmlld3BvcnRNYXJnaW4iLCAxMCwgZnVuY3Rpb24oY20pe2NtLnJlZnJlc2goKTt9LCB0cnVl
KTsKICAgb3B0aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgZnVuY3Rpb24oY20pe2xv
YWRNb2RlKGNtKTsgY20ucmVmcmVzaCgpO30sIHRydWUpOwogICBvcHRpb24oIm1vdmVJbnB1dFdp
dGhDdXJzb3IiLCB0cnVlLCBmdW5jdGlvbihjbSwgdmFsKSB7CkBAIC0zMjU3LDIxICszMTQxLDE2
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9OwogCiAgIENvZGVNaXJy
b3IucmVzb2x2ZU1vZGUgPSBmdW5jdGlvbihzcGVjKSB7Ci0gICAgaWYgKHR5cGVvZiBzcGVjID09
ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkgeworICAgIGlmICh0
eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykp
CiAgICAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNdOwotICAgIH0gZWxzZSBpZiAoc3BlYyAmJiB0
eXBlb2Ygc3BlYy5uYW1lID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShz
cGVjLm5hbWUpKSB7Ci0gICAgICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5uYW1lXTsKLSAg
ICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQsIHNwZWMpOwotICAgICAgc3BlYy5uYW1lID0gZm91
bmQubmFtZTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3
XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkgeworICAgIGVsc2UgaWYgKHR5cGVvZiBz
cGVjID09ICJzdHJpbmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkK
ICAgICAgIHJldHVybiBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTsK
LSAgICB9CiAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKSByZXR1cm4ge25hbWU6IHNw
ZWN9OwogICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgIH07CiAKICAg
Q29kZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewotICAgIHZhciBz
cGVjID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKKyAgICBzcGVjID0gQ29kZU1pcnJv
ci5yZXNvbHZlTW9kZShzcGVjKTsKICAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVd
OwogICAgIGlmICghbWZhY3RvcnkpIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywg
InRleHQvcGxhaW4iKTsKICAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMp
OwpAQCAtMzI4NCw3ICszMTYzLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICB9CiAgICAgfQogICAgIG1vZGVPYmoubmFtZSA9IHNwZWMubmFtZTsKLQogICAgIHJl
dHVybiBtb2RlT2JqOwogICB9OwogCkBAIC0zMzA0LDIwICszMTgyLDEyIEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1
bmN0aW9uKG5hbWUsIGZ1bmMpIHsKICAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtuYW1lXSA9IGZ1
bmM7CiAgIH07Ci0gIENvZGVNaXJyb3IuZGVmaW5lRG9jRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFt
ZSwgZnVuYykgewotICAgIERvYy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jOwotICB9OworCiAgIENv
ZGVNaXJyb3IuZGVmaW5lT3B0aW9uID0gb3B0aW9uOwogCiAgIHZhciBpbml0SG9va3MgPSBbXTsK
ICAgQ29kZU1pcnJvci5kZWZpbmVJbml0SG9vayA9IGZ1bmN0aW9uKGYpIHtpbml0SG9va3MucHVz
aChmKTt9OwogCi0gIHZhciBoZWxwZXJzID0gQ29kZU1pcnJvci5oZWxwZXJzID0ge307Ci0gIENv
ZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCB2YWx1ZSkgewot
ICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENv
ZGVNaXJyb3JbdHlwZV0gPSB7fTsKLSAgICBoZWxwZXJzW3R5cGVdW25hbWVdID0gdmFsdWU7Ci0g
IH07Ci0KICAgLy8gTU9ERSBTVEFURSBIQU5ETElORwogCiAgIC8vIFV0aWxpdHkgZnVuY3Rpb25z
IGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKQEAgLTMzNjMs
MTAgKzMyMzMsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZh
ciBsID0gY20uZ2V0Q3Vyc29yKCkubGluZTsKICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9z
KGwsIDApLCBQb3MobCksICIrZGVsZXRlIik7CiAgICAgfSwKLSAgICBkZWxMaW5lTGVmdDogZnVu
Y3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKLSAgICAgIGNtLnJl
cGxhY2VSYW5nZSgiIiwgUG9zKGN1ci5saW5lLCAwKSwgY3VyLCAiK2RlbGV0ZSIpOwotICAgIH0s
CiAgICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKICAgICByZWRvOiBmdW5jdGlv
bihjbSkge2NtLnJlZG8oKTt9LAogICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0
ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpO30sCkBAIC0zNDYyLDcgKzMzMjgs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAiQWx0LVJpZ2h0Ijog
ImdvR3JvdXBSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAi
Z29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAogICAgICJDdHJs
LUFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3Vw
QWZ0ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUciOiAi
ZmluZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxh
Y2UiLCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAotICAgICJDbWQtWyI6ICJpbmRl
bnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJhY2tzcGFjZSI6ICJkZWxMaW5l
TGVmdCIsCisgICAgIkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIs
CiAgICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KICAgfTsKICAga2V5TWFwWyJk
ZWZhdWx0Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CkBA
IC0zNTAxLDcgKzMzNjcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGRv
bmUgPSBsb29rdXAobWFwc1tpXSk7Ci0gICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmUgIT0gInN0
b3AiOworICAgICAgaWYgKGRvbmUpIHJldHVybiBkb25lOwogICAgIH0KICAgfQogICBmdW5jdGlv
biBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CkBAIC0zNjU1LDcgKzM1MjEsNiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB0aGlzLmRvYyA9IGRvYzsKICAgfQogICBDb2Rl
TWlycm9yLlRleHRNYXJrZXIgPSBUZXh0TWFya2VyOwotICBldmVudE1peGluKFRleHRNYXJrZXIp
OwogCiAgIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgaWYg
KHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKQEAgLTM2ODQsNyArMzU0OSw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChtaW4gIT0gbnVsbCAmJiBj
bSkgcmVnQ2hhbmdlKGNtLCBtaW4sIG1heCArIDEpOwogICAgIHRoaXMubGluZXMubGVuZ3RoID0g
MDsKICAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTsKLSAgICBpZiAodGhpcy5hdG9t
aWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKKyAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhp
cy5kb2MuY2FudEVkaXQpIHsKICAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7CiAgICAg
ICBpZiAoY20pIHJlQ2hlY2tTZWxlY3Rpb24oY20pOwogICAgIH0KQEAgLTM3MDcsMTggKzM1NzIs
MTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIGZyb20g
JiYge2Zyb206IGZyb20sIHRvOiB0b307CiAgIH07CiAKLSAgVGV4dE1hcmtlci5wcm90b3R5cGUu
Y2hhbmdlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoKSwgY20gPSB0
aGlzLmRvYy5jbTsKLSAgICBpZiAoIXBvcyB8fCAhY20pIHJldHVybjsKLSAgICB2YXIgbGluZSA9
IGdldExpbmUodGhpcy5kb2MsIHBvcy5mcm9tLmxpbmUpOwotICAgIGNsZWFyQ2FjaGVkTWVhc3Vy
ZW1lbnQoY20sIGxpbmUpOwotICAgIGlmIChwb3MuZnJvbS5saW5lID49IGNtLmRpc3BsYXkuc2hv
d2luZ0Zyb20gJiYgcG9zLmZyb20ubGluZSA8IGNtLmRpc3BsYXkuc2hvd2luZ1RvKSB7Ci0gICAg
ICBmb3IgKHZhciBub2RlID0gY20uZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7IG5vZGU7IG5v
ZGUgPSBub2RlLm5leHRTaWJsaW5nKSBpZiAobm9kZS5saW5lT2JqID09IGxpbmUpIHsKLSAgICAg
ICAgaWYgKG5vZGUub2Zmc2V0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0
KGxpbmUsIG5vZGUub2Zmc2V0SGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAg
ICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRy
dWU7IH0pOwotICAgIH0KKyAgVGV4dE1hcmtlci5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0
aW9uKGNvcHlXaWRnZXQpIHsKKyAgICB2YXIgcmVwbCA9IHRoaXMucmVwbGFjZWRXaXRoOworICAg
IHJldHVybiB7Y2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSwKKyAgICAgICAgICAgIGluY2x1c2l2
ZUxlZnQ6IHRoaXMuaW5jbHVzaXZlTGVmdCwgaW5jbHVzaXZlUmlnaHQ6IHRoaXMuaW5jbHVzaXZl
UmlnaHQsCisgICAgICAgICAgICBhdG9taWM6IHRoaXMuYXRvbWljLAorICAgICAgICAgICAgY29s
bGFwc2VkOiB0aGlzLmNvbGxhcHNlZCwKKyAgICAgICAgICAgIHJlcGxhY2VkV2l0aDogY29weVdp
ZGdldCA/IHJlcGwgJiYgcmVwbC5jbG9uZU5vZGUodHJ1ZSkgOiByZXBsLAorICAgICAgICAgICAg
cmVhZE9ubHk6IHRoaXMucmVhZE9ubHksCisgICAgICAgICAgICBzdGFydFN0eWxlOiB0aGlzLnN0
YXJ0U3R5bGUsIGVuZFN0eWxlOiB0aGlzLmVuZFN0eWxlfTsKICAgfTsKIAogICBUZXh0TWFya2Vy
LnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkgewpAQCAtMzc0Nyw3ICszNjA5
LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKG1hcmtlci5y
ZXBsYWNlZFdpdGgpIHsKICAgICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlOwogICAgICAgbWFy
a2VyLnJlcGxhY2VkV2l0aCA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNv
ZGVNaXJyb3Itd2lkZ2V0Iik7Ci0gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMp
IG1hcmtlci5yZXBsYWNlZFdpdGguaWdub3JlRXZlbnRzID0gdHJ1ZTsKICAgICB9CiAgICAgaWYg
KG1hcmtlci5jb2xsYXBzZWQpIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTsKIApAQCAtMzc5MCw3
ICszNjUxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAg
IGlmIChjbSkgewogICAgICAgaWYgKHVwZGF0ZU1heExpbmUpIGNtLmN1ck9wLnVwZGF0ZU1heExp
bmUgPSB0cnVlOwotICAgICAgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxlIHx8
IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY29sbGFwc2Vk
KQorICAgICAgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFy
a2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCiAgICAgICAgIHJlZ0NoYW5nZShjbSwg
ZnJvbS5saW5lLCB0by5saW5lICsgMSk7CiAgICAgICBpZiAobWFya2VyLmF0b21pYykgcmVDaGVj
a1NlbGVjdGlvbihjbSk7CiAgICAgfQpAQCAtMzgwOCw3ICszNjY5LDYgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAgIENvZGVNaXJyb3IuU2hhcmVkVGV4
dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7Ci0gIGV2ZW50TWl4aW4oU2hhcmVkVGV4dE1hcmtl
cik7CiAKICAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsK
ICAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwpAQCAtMzgyMCw2ICszNjgw
LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBTaGFyZWRUZXh0TWFy
a2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHRoaXMucHJpbWFy
eS5maW5kKCk7CiAgIH07CisgIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmdldE9wdGlvbnMg
PSBmdW5jdGlvbihjb3B5V2lkZ2V0KSB7CisgICAgdmFyIGlubmVyID0gdGhpcy5wcmltYXJ5Lmdl
dE9wdGlvbnMoY29weVdpZGdldCk7CisgICAgaW5uZXIuc2hhcmVkID0gdHJ1ZTsKKyAgICByZXR1
cm4gaW5uZXI7CisgIH07CiAKICAgZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0
bywgb3B0aW9ucywgdHlwZSkgewogICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpOwpAQCAt
MzkyMiwxMyArMzc4Nyw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGlmIChzYW1lTGluZSAmJiBmaXJzdCkgewotICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNwYW5zCi0g
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQotICAgICAgICBpZiAo
Zmlyc3RbaV0uZnJvbSAhPSBudWxsICYmIGZpcnN0W2ldLmZyb20gPT0gZmlyc3RbaV0udG8gJiYg
Zmlyc3RbaV0ubWFya2VyLnR5cGUgIT0gImJvb2ttYXJrIikKLSAgICAgICAgICBmaXJzdC5zcGxp
Y2UoaS0tLCAxKTsKLSAgICAgIGlmICghZmlyc3QubGVuZ3RoKSBmaXJzdCA9IG51bGw7Ci0gICAg
fQogCiAgICAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdOwogICAgIGlmICghc2FtZUxpbmUpIHsK
QEAgLTQwMjMsNyArMzg4MSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgc3AgPSBzcHNbaV07CiAgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRp
bnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAo
c3AubWFya2VyLnJlcGxhY2VkV2l0aCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJvbSA9PSAw
ICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGlu
ZSwgc3ApKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00MDM3LDcgKzM4OTQsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kp
IHsKICAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5tYXJrZXIu
Y29sbGFwc2VkICYmICFzcC5tYXJrZXIucmVwbGFjZWRXaXRoICYmIHNwLmZyb20gPT0gc3Bhbi50
byAmJgorICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgc3AuZnJvbSA9PSBzcGFuLnRv
ICYmCiAgICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmlu
Y2x1c2l2ZVJpZ2h0KSAmJgogICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwg
c3ApKSByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00MDYxLDEyICszOTE4LDExIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBMSU5FIFdJREdFVFMKIAogICB2YXIgTGlu
ZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBvcHRp
b25zKSB7Ci0gICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSBpZiAob3B0
aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQorICAgIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSBp
ZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0gb3B0aW9u
c1tvcHRdOwogICAgIHRoaXMuY20gPSBjbTsKICAgICB0aGlzLm5vZGUgPSBub2RlOwogICB9Owot
ICBldmVudE1peGluKExpbmVXaWRnZXQpOwogICBmdW5jdGlvbiB3aWRnZXRPcGVyYXRpb24oZikg
ewogICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgIHZhciB3aXRoT3AgPSAhdGhpcy5jbS5j
dXJPcDsKQEAgLTQwODEsOSArMzkzNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIGlmIChubyA9PSBudWxsIHx8ICF3cykgcmV0dXJuOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0t
LCAxKTsKICAgICBpZiAoIXdzLmxlbmd0aCkgdGhpcy5saW5lLndpZGdldHMgPSBudWxsOwotICAg
IHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUodGhpcy5jbSwgdGhpcy5saW5lKSA8IHRo
aXMuY20uZG9jLnNjcm9sbFRvcDsKICAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGluZSwgTWF0
aC5tYXgoMCwgdGhpcy5saW5lLmhlaWdodCAtIHdpZGdldEhlaWdodCh0aGlzKSkpOwotICAgIGlm
IChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKHRoaXMuY20sIDAsIC10aGlzLmhlaWdodCk7
CiAgICAgcmVnQ2hhbmdlKHRoaXMuY20sIG5vLCBubyArIDEpOwogICB9KTsKICAgTGluZVdpZGdl
dC5wcm90b3R5cGUuY2hhbmdlZCA9IHdpZGdldE9wZXJhdGlvbihmdW5jdGlvbigpIHsKQEAgLTQx
MDcsMTIgKzM5NjEsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
dmFyIHdpZGdldCA9IG5ldyBMaW5lV2lkZ2V0KGNtLCBub2RlLCBvcHRpb25zKTsKICAgICBpZiAo
d2lkZ2V0Lm5vSFNjcm9sbCkgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOwogICAgIGNo
YW5nZUxpbmUoY20sIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewotICAgICAgdmFyIHdpZGdldHMg
PSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTsKLSAgICAgIGlmICh3aWRnZXQu
aW5zZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0cy5wdXNoKHdpZGdldCk7Ci0gICAgICBlbHNlIHdpZGdl
dHMuc3BsaWNlKE1hdGgubWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0
Lmluc2VydEF0KSksIDAsIHdpZGdldCk7CisgICAgICAobGluZS53aWRnZXRzIHx8IChsaW5lLndp
ZGdldHMgPSBbXSkpLnB1c2god2lkZ2V0KTsKICAgICAgIHdpZGdldC5saW5lID0gbGluZTsKICAg
ICAgIGlmICghbGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkgfHwgd2lkZ2V0LnNob3dJZkhpZGRl
bikgewotICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lKSA8
IGNtLmRvYy5zY3JvbGxUb3A7CisgICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExp
bmUoY20sIGxpbmUpIDwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CiAgICAgICAgIHVw
ZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7
CiAgICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKGNtLCAwLCB3aWRnZXQu
aGVpZ2h0KTsKICAgICAgIH0KQEAgLTQxMjUsMTIgKzM5NzcsMTIgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRl
IHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKICAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRo
ZSBzdHlsZXMgYXJyYXkpLgotICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9u
KHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAgIHRoaXMudGV4dCA9IHRl
eHQ7Ci0gICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpOwotICAgIHRoaXMu
aGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7Ci0gIH07
Ci0gIGV2ZW50TWl4aW4oTGluZSk7CisgIGZ1bmN0aW9uIG1ha2VMaW5lKHRleHQsIG1hcmtlZFNw
YW5zLCBlc3RpbWF0ZUhlaWdodCkgeworICAgIHZhciBsaW5lID0ge3RleHQ6IHRleHR9OworICAg
IGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKTsKKyAgICBsaW5lLmhlaWdodCA9
IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1hdGVIZWlnaHQobGluZSkgOiAxOworICAgIHJldHVybiBs
aW5lOworICB9CiAKICAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFu
cywgZXN0aW1hdGVIZWlnaHQpIHsKICAgICBsaW5lLnRleHQgPSB0ZXh0OwpAQCAtNDE1NCw3ICs0
MDA2LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHJ1
bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmKSB7CiAgICAgdmFyIGZsYXR0ZW5TcGFucyA9
IG1vZGUuZmxhdHRlblNwYW5zOwogICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgZmxhdHRl
blNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7Ci0gICAgdmFyIGN1clN0YXJ0ID0gMCwg
Y3VyU3R5bGUgPSBudWxsOworICAgIHZhciBjdXJUZXh0ID0gIiIsIGN1clN0eWxlID0gbnVsbDsK
ICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNp
emUpLCBzdHlsZTsKICAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5i
bGFua0xpbmUoc3RhdGUpOwogICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CkBAIC00MTY2LDEz
ICs0MDE4LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfSBl
bHNlIHsKICAgICAgICAgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICAg
fQotICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHsKLSAgICAg
ICAgaWYgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSBmKHN0cmVhbS5zdGFydCwgY3VyU3R5bGUp
OwotICAgICAgICBjdXJTdGFydCA9IHN0cmVhbS5zdGFydDsgY3VyU3R5bGUgPSBzdHlsZTsKLSAg
ICAgIH0KKyAgICAgIHZhciBzdWJzdHIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgc3RyZWFt
LnN0YXJ0ID0gc3RyZWFtLnBvczsKKyAgICAgIGlmICghZmxhdHRlblNwYW5zIHx8IGN1clN0eWxl
ICE9IHN0eWxlKSB7CisgICAgICAgIGlmIChjdXJUZXh0KSBmKGN1clRleHQsIGN1clN0eWxlKTsK
KyAgICAgICAgY3VyVGV4dCA9IHN1YnN0cjsgY3VyU3R5bGUgPSBzdHlsZTsKKyAgICAgIH0gZWxz
ZSBjdXJUZXh0ID0gY3VyVGV4dCArIHN1YnN0cjsKICAgICB9Ci0gICAgaWYgKGN1clN0YXJ0IDwg
c3RyZWFtLnBvcykgZihzdHJlYW0ucG9zLCBjdXJTdHlsZSk7CisgICAgaWYgKGN1clRleHQpIGYo
Y3VyVGV4dCwgY3VyU3R5bGUpOwogICB9CiAKICAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwg
bGluZSwgc3RhdGUpIHsKQEAgLTQxODAsMjQgKzQwMzMsMjcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJhc2VkIG9u
IChmb3IgZWFzeSBpbnZhbGlkYXRpb24pLgogICAgIHZhciBzdCA9IFtjbS5zdGF0ZS5tb2RlR2Vu
XTsKICAgICAvLyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxlcwotICAgIHJ1bk1vZGUo
Y20sIGxpbmUudGV4dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBmdW5jdGlvbihlbmQsIHN0eWxlKSB7
c3QucHVzaChlbmQsIHN0eWxlKTt9KTsKKyAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRv
Yy5tb2RlLCBzdGF0ZSwgZnVuY3Rpb24odHh0LCBzdHlsZSkge3N0LnB1c2godHh0LCBzdHlsZSk7
fSk7CiAKICAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJheS4KICAgICBmb3Ig
KHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsgKytvKSB7Ci0gICAgICB2
YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwgYXQgPSAwOwotICAgICAg
cnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKGVuZCwg
c3R5bGUpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gaTsKKyAgICAgIHZhciBvdmVybGF5ID0gY20u
c3RhdGUub3ZlcmxheXNbb10sIGkgPSAxOworICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBv
dmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKHR4dCwgc3R5bGUpIHsKKyAgICAgICAgdmFyIHN0
YXJ0ID0gaSwgbGVuID0gdHh0Lmxlbmd0aDsKICAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0
b2tlbiBlbmQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0
Ci0gICAgICAgIHdoaWxlIChhdCA8IGVuZCkgewotICAgICAgICAgIHZhciBpX2VuZCA9IHN0W2ld
OwotICAgICAgICAgIGlmIChpX2VuZCA+IGVuZCkKLSAgICAgICAgICAgIHN0LnNwbGljZShpLCAx
LCBlbmQsIHN0W2krMV0sIGlfZW5kKTsKKyAgICAgICAgd2hpbGUgKGxlbikgeworICAgICAgICAg
IHZhciBjdXIgPSBzdFtpXSwgbGVuXyA9IGN1ci5sZW5ndGg7CisgICAgICAgICAgaWYgKGxlbl8g
PD0gbGVuKSB7CisgICAgICAgICAgICBsZW4gLT0gbGVuXzsKKyAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc3Quc3BsaWNlKGksIDEsIGN1ci5zbGljZSgwLCBsZW4pLCBzdFtpKzFdLCBj
dXIuc2xpY2UobGVuKSk7CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgIH0KICAgICAg
ICAgICBpICs9IDI7Ci0gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm47CiAgICAgICAgIGlmIChvdmVybGF5Lm9w
YXF1ZSkgewotICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsIHN0eWxl
KTsKKyAgICAgICAgICBzdC5zcGxpY2Uoc3RhcnQsIGkgLSBzdGFydCwgdHh0LCBzdHlsZSk7CiAg
ICAgICAgICAgaSA9IHN0YXJ0ICsgMjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBmb3Ig
KDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7CkBAIC00MjM3LDMxICs0MDkzLDM3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAKICAgZnVuY3Rpb24gbGluZUNvbnRl
bnQoY20sIHJlYWxMaW5lLCBtZWFzdXJlKSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZSA9IHJlYWxM
aW5lLCBlbXB0eSA9IHRydWU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0
YXJ0KGxpbmUpKQorICAgIHZhciBtZXJnZWQsIGxpbmUgPSByZWFsTGluZSwgbGluZUJlZm9yZSwg
c2F3QmVmb3JlLCBzaW1wbGUgPSB0cnVlOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRT
cGFuQXRTdGFydChsaW5lKSkgeworICAgICAgc2ltcGxlID0gZmFsc2U7CiAgICAgICBsaW5lID0g
Z2V0TGluZShjbS5kb2MsIG1lcmdlZC5maW5kKCkuZnJvbS5saW5lKTsKKyAgICAgIGlmICghbGlu
ZUJlZm9yZSkgbGluZUJlZm9yZSA9IGxpbmU7CisgICAgfQogCiAgICAgdmFyIGJ1aWxkZXIgPSB7
cHJlOiBlbHQoInByZSIpLCBjb2w6IDAsIHBvczogMCwgZGlzcGxheTogIW1lYXN1cmUsCi0gICAg
ICAgICAgICAgICAgICAgbWVhc3VyZTogbnVsbCwgbWVhc3VyZWRTb21ldGhpbmc6IGZhbHNlLCBj
bTogY219OworICAgICAgICAgICAgICAgICAgIG1lYXN1cmU6IG51bGwsIGFkZGVkT25lOiBmYWxz
ZSwgY206IGNtfTsKICAgICBpZiAobGluZS50ZXh0Q2xhc3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFt
ZSA9IGxpbmUudGV4dENsYXNzOwogCiAgICAgZG8gewotICAgICAgaWYgKGxpbmUudGV4dCkgZW1w
dHkgPSBmYWxzZTsKICAgICAgIGJ1aWxkZXIubWVhc3VyZSA9IGxpbmUgPT0gcmVhbExpbmUgJiYg
bWVhc3VyZTsKICAgICAgIGJ1aWxkZXIucG9zID0gMDsKICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4g
PSBidWlsZGVyLm1lYXN1cmUgPyBidWlsZFRva2VuTWVhc3VyZSA6IGJ1aWxkVG9rZW47CiAgICAg
ICBpZiAoKGllIHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSkKICAg
ICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWlsZGVyLmFk
ZFRva2VuKTsKLSAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRl
ciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAgICAgaWYgKG1lYXN1cmUgJiYgbGluZSA9
PSByZWFsTGluZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZykgeworICAgICAgaWYgKG1l
YXN1cmUgJiYgc2F3QmVmb3JlICYmIGxpbmUgIT0gcmVhbExpbmUgJiYgIWJ1aWxkZXIuYWRkZWRP
bmUpIHsKICAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHplcm9X
aWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Ci0gICAgICAgIGJ1aWxkZXIubWVhc3Vy
ZWRTb21ldGhpbmcgPSB0cnVlOworICAgICAgICBidWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKKyAg
ICAgIH0KKyAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwg
Z2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOworICAgICAgc2F3QmVmb3JlID0gbGluZSA9PSBsaW5l
QmVmb3JlOworICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAgbGluZSA9IGdldExpbmUoY20uZG9j
LCBuZXh0LnRvLmxpbmUpOworICAgICAgICBzaW1wbGUgPSBmYWxzZTsKICAgICAgIH0KLSAgICAg
IGlmIChuZXh0KSBsaW5lID0gZ2V0TGluZShjbS5kb2MsIG5leHQudG8ubGluZSk7CiAgICAgfSB3
aGlsZSAobmV4dCk7CiAKLSAgICBpZiAobWVhc3VyZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0
aGluZyAmJiAhbWVhc3VyZVswXSkKLSAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZChlbXB0eSA/IGVsdCgic3BhbiIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVsZW1lbnQo
Y20uZGlzcGxheS5tZWFzdXJlKSk7CisgICAgaWYgKG1lYXN1cmUgJiYgIWJ1aWxkZXIuYWRkZWRP
bmUpCisgICAgICBtZWFzdXJlWzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoc2ltcGxlID8g
ZWx0KCJzcGFuIiwgIlx1MDBhMCIpIDogemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1
cmUpKTsKICAgICBpZiAoIWJ1aWxkZXIucHJlLmZpcnN0Q2hpbGQgJiYgIWxpbmVJc0hpZGRlbihj
bS5kb2MsIHJlYWxMaW5lKSkKICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJcdTAwYTAiKSk7CiAKQEAgLTQyODUsNyArNDE0Nyw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAKICAgdmFyIHRva2VuU3BlY2lhbENo
YXJzID0gL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdUZFRkZdL2c7
Ci0gIGZ1bmN0aW9uIGJ1aWxkVG9rZW4oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUs
IGVuZFN0eWxlLCB0aXRsZSkgeworICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQs
IHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSkgewogICAgIGlmICghdGV4dCkgcmV0dXJuOwog
ICAgIGlmICghdG9rZW5TcGVjaWFsQ2hhcnMudGVzdCh0ZXh0KSkgewogICAgICAgYnVpbGRlci5j
b2wgKz0gdGV4dC5sZW5ndGg7CkBAIC00MzE4LDkgKzQxODAsNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsKICAg
ICAgIGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKICAgICAgIGlmIChl
bmRTdHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0eWxlOwotICAgICAgdmFyIHRva2VuID0gZWx0KCJz
cGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUpOwotICAgICAgaWYgKHRpdGxlKSB0b2tlbi50aXRs
ZSA9IHRpdGxlOwotICAgICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHRva2VuKTsK
KyAgICAgIHJldHVybiBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbY29udGVu
dF0sIGZ1bGxTdHlsZSkpOwogICAgIH0KICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChjb250
ZW50KTsKICAgfQpAQCAtNDMzMiwxNCArNDE5MiwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIGlmIChjaCA+PSAiXHVkODAwIiAmJiBjaCA8ICJcdWRiZmYiICYm
IGkgPCB0ZXh0Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgY2ggPSB0ZXh0LnNsaWNlKGksIGkgKyAy
KTsKICAgICAgICAgKytpOwotICAgICAgfSBlbHNlIGlmIChpICYmIHdyYXBwaW5nICYmIHNwYW5B
ZmZlY3RzV3JhcHBpbmcodGV4dCwgaSkpIHsKKyAgICAgIH0gZWxzZSBpZiAoaSAmJiB3cmFwcGlu
ZyAmJgorICAgICAgICAgICAgICAgICBzcGFuQWZmZWN0c1dyYXBwaW5nLnRlc3QodGV4dC5zbGlj
ZShpIC0gMSwgaSArIDEpKSkgewogICAgICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQo
IndiciIpKTsKICAgICAgIH0KLSAgICAgIHZhciBvbGQgPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRl
ci5wb3NdOwogICAgICAgdmFyIHNwYW4gPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0K
ICAgICAgICAgYnVpbGRUb2tlbihidWlsZGVyLCBjaCwgc3R5bGUsCiAgICAgICAgICAgICAgICAg
ICAgc3RhcnQgJiYgc3RhcnRTdHlsZSwgaSA9PSB0ZXh0Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUp
OwotICAgICAgaWYgKG9sZCkgc3Bhbi5sZWZ0U2lkZSA9IG9sZC5sZWZ0U2lkZSB8fCBvbGQ7CiAg
ICAgICAvLyBJbiBJRSBzaW5nbGUtc3BhY2Ugbm9kZXMgd3JhcCBkaWZmZXJlbnRseSB0aGFuIHNw
YWNlcwogICAgICAgLy8gZW1iZWRkZWQgaW4gbGFyZ2VyIHRleHQgbm9kZXMsIGV4Y2VwdCB3aGVu
IHNldCB0bwogICAgICAgLy8gd2hpdGUtc3BhY2U6IG5vcm1hbCAoaXNzdWUgIzEyNjgpLgpAQCAt
NDM0OCw3ICs0MjA3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICJub3JtYWwiOwogICAgICAgYnVpbGRlci5wb3Mg
Kz0gY2gubGVuZ3RoOwogICAgIH0KLSAgICBpZiAodGV4dC5sZW5ndGgpIGJ1aWxkZXIubWVhc3Vy
ZWRTb21ldGhpbmcgPSB0cnVlOworICAgIGlmICh0ZXh0Lmxlbmd0aCkgYnVpbGRlci5hZGRlZE9u
ZSA9IHRydWU7CiAgIH0KIAogICBmdW5jdGlvbiBidWlsZFRva2VuU3BsaXRTcGFjZXMoaW5uZXIp
IHsKQEAgLTQzNTgsMjcgKzQyMTcsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICBvdXQgKz0gIiAiOwogICAgICAgcmV0dXJuIG91dDsKICAgICB9Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwg
dGl0bGUpIHsKLSAgICAgIHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9
Lywgc3BsaXQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKTsKKyAgICByZXR1
cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7
CisgICAgICByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS8sIHNwbGl0
KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKTsKICAgICB9OwogICB9CiAKLSAgZnVuY3Rp
b24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0
KSB7Ci0gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLnJlcGxhY2VkV2l0
aDsKKyAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIHdpZGdldCkg
ewogICAgIGlmICh3aWRnZXQpIHsKICAgICAgIGlmICghYnVpbGRlci5kaXNwbGF5KSB3aWRnZXQg
PSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOwogICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQo
d2lkZ2V0KTsKLSAgICAgIGlmIChidWlsZGVyLm1lYXN1cmUpIHsKLSAgICAgICAgaWYgKHNpemUp
IHsKLSAgICAgICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gd2lkZ2V0OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciBlbHQgPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRl
ci5wb3NdID0gemVyb1dpZHRoRWxlbWVudChidWlsZGVyLmNtLmRpc3BsYXkubWVhc3VyZSk7Ci0g
ICAgICAgICAgaWYgKG1hcmtlci50eXBlICE9ICJib29rbWFyayIgfHwgbWFya2VyLmluc2VydExl
ZnQpCi0gICAgICAgICAgICBidWlsZGVyLnByZS5pbnNlcnRCZWZvcmUoZWx0LCB3aWRnZXQpOwot
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVsdCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7Cisg
ICAgICBpZiAoYnVpbGRlci5tZWFzdXJlICYmIHNpemUpIHsKKyAgICAgICAgYnVpbGRlci5tZWFz
dXJlW2J1aWxkZXIucG9zXSA9IHdpZGdldDsKKyAgICAgICAgYnVpbGRlci5hZGRlZE9uZSA9IHRy
dWU7CiAgICAgICB9CiAgICAgfQogICAgIGJ1aWxkZXIucG9zICs9IHNpemU7CkBAIC00Mzg3LDE4
ICs0MjM3LDE5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBPdXRw
dXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0
aW5nCiAgIC8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291bnQuCiAgIGZ1bmN0aW9uIGluc2Vy
dExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIHN0eWxlcykgewotICAgIHZhciBzcGFucyA9IGxp
bmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKKyAgICB2YXIgc3Bh
bnMgPSBsaW5lLm1hcmtlZFNwYW5zOwogICAgIGlmICghc3BhbnMpIHsKICAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9MikKLSAgICAgICAgYnVpbGRlci5hZGRUb2tl
bihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpXSksIHN0eWxlVG9DbGFz
cyhzdHlsZXNbaSsxXSkpOworICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIHN0eWxl
c1tpXSwgc3R5bGVUb0NsYXNzKHN0eWxlc1tpKzFdKSk7CiAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBwb3MgPSAwLCBpID0gMSwgdGV4dCA9ICIi
LCBzdHlsZTsKLSAgICB2YXIgbmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxl
LCBzcGFuU3RhcnRTdHlsZSwgdGl0bGUsIGNvbGxhcHNlZDsKKyAgICB2YXIgYWxsVGV4dCA9IGxp
bmUudGV4dCwgbGVuID0gYWxsVGV4dC5sZW5ndGg7CisgICAgdmFyIHBvcyA9IDAsIGkgPSAxLCB0
ZXh0ID0gIiIsIHN0eWxlOworICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBzcGFu
RW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCBjb2xsYXBzZWQ7CiAgICAgZm9yICg7OykgewogICAg
ICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSB7IC8vIFVwZGF0ZSBjdXJyZW50IG1hcmtlciBzZXQK
LSAgICAgICAgc3BhblN0eWxlID0gc3BhbkVuZFN0eWxlID0gc3BhblN0YXJ0U3R5bGUgPSB0aXRs
ZSA9ICIiOworICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5kU3R5bGUgPSBzcGFuU3RhcnRTdHls
ZSA9ICIiOwogICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7
CiAgICAgICAgIHZhciBmb3VuZEJvb2ttYXJrID0gbnVsbDsKICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewpAQCAtNDQwOCwxNyArNDI1OSwxNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmIChtLmNsYXNzTmFt
ZSkgc3BhblN0eWxlICs9ICIgIiArIG0uY2xhc3NOYW1lOwogICAgICAgICAgICAgaWYgKG0uc3Rh
cnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFy
dFN0eWxlOwogICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5n
ZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7Ci0gICAgICAgICAgICBpZiAobS50
aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsKLSAgICAgICAgICAgIGlmIChtLmNvbGxh
cHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb2xsYXBzZWQubWFya2VyLnNpemUgPCBtLnNpemUpKQor
ICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5t
YXJrZXIud2lkdGggPCBtLndpZHRoKSkKICAgICAgICAgICAgICAgY29sbGFwc2VkID0gc3A7CiAg
ICAgICAgICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9t
KSB7CiAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKICAgICAgICAgICB9Ci0gICAg
ICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ucmVw
bGFjZWRXaXRoKSBmb3VuZEJvb2ttYXJrID0gbTsKKyAgICAgICAgICBpZiAobS50eXBlID09ICJi
b29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS5yZXBsYWNlZFdpdGgpCisgICAgICAgICAg
ICBmb3VuZEJvb2ttYXJrID0gbS5yZXBsYWNlZFdpdGg7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9zKSB7CiAgICAgICAgICAg
YnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/IGxlbiA6
IGNvbGxhcHNlZC50bykgLSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxh
cHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xsYXBzZWQuZnJvbSAhPSBudWxsICYmIGNvbGxhcHNlZC5tYXJrZXIucmVw
bGFjZWRXaXRoKTsKICAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IG51bGwpIHJldHVybiBj
b2xsYXBzZWQubWFya2VyLmZpbmQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZm91bmRCb29r
bWFyayAmJiAhY29sbGFwc2VkKSBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRC
b29rbWFyayk7CkBAIC00NDMyLDE0ICs0MjgzLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7CiAgICAgICAgICAgICB2YXIg
dG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0
OwogICAgICAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCB0b2tlblRleHQsIHN0eWxl
ID8gc3R5bGUgKyBzcGFuU3R5bGUgOiBzcGFuU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFu
Z2UgPyBzcGFuRW5kU3R5bGUgOiAiIiwgdGl0bGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hhbmdl
ID8gc3BhbkVuZFN0eWxlIDogIiIpOwogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoZW5kID49
IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7
fQogICAgICAgICAgIHBvcyA9IGVuZDsKICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSA9ICIiOwog
ICAgICAgICB9Ci0gICAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tp
KytdKTsKLSAgICAgICAgc3R5bGUgPSBzdHlsZVRvQ2xhc3Moc3R5bGVzW2krK10pOworICAgICAg
ICB0ZXh0ID0gc3R5bGVzW2krK107IHN0eWxlID0gc3R5bGVUb0NsYXNzKHN0eWxlc1tpKytdKTsK
ICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQ0NjIsNyArNDMxMiw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVwbGFj
ZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAgLy8gc3VyZSBsaW5lIG9iamVjdHMg
bW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgogICAgICAgZm9yICh2YXIgaSA9IDAs
IGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCi0gICAgICAgIGFk
ZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
CisgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGlt
YXRlSGVpZ2h0KSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RT
cGFucyk7CiAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsK
ICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CkBA
IC00NDcxLDggKzQzMjEsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkg
KyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAodmFyIGFkZGVkID0gW10sIGkgPSAxLCBlID0gdGV4
dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUo
dGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7Ci0gICAgICAgIGFkZGVkLnB1
c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RT
cGFucywgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRl
eHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOworICAgICAgICBhZGRlZC5wdXNo
KG1ha2VMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3Bh
bnMsIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGlu
ZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICAg
ICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgIH0KQEAgLTQ0ODMsNyAr
NDMzMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdXBkYXRl
KGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBz
cGFuc0ZvcigwKSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUu
dGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9
IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7ICsraSkKLSAgICAgICAgYWRkZWQu
cHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAg
ICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVI
ZWlnaHQpKTsKICAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEs
IG5saW5lcyAtIDEpOwogICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAg
ICAgfQpAQCAtNDYyNiwxMiArNDQ3NiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgcmV0dXJuIG5ldyBEb2ModGV4
dCwgbW9kZSwgZmlyc3RMaW5lKTsKICAgICBpZiAoZmlyc3RMaW5lID09IG51bGwpIGZpcnN0TGlu
ZSA9IDA7CiAKLSAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5rKFtuZXcg
TGluZSgiIiwgbnVsbCldKV0pOworICAgIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFm
Q2h1bmsoW21ha2VMaW5lKCIiLCBudWxsKV0pXSk7CiAgICAgdGhpcy5maXJzdCA9IGZpcnN0TGlu
ZTsKICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDA7CiAgICAgdGhpcy5j
YW50RWRpdCA9IGZhbHNlOwogICAgIHRoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7Ci0gICAg
dGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxOwogICAgIHRoaXMuZnJvbnRpZXIgPSBmaXJzdExpbmU7
CiAgICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7CiAgICAgdGhpcy5zZWwgPSB7ZnJv
bTogc3RhcnQsIHRvOiBzdGFydCwgaGVhZDogc3RhcnQsIGFuY2hvcjogc3RhcnQsIHNoaWZ0OiBm
YWxzZSwgZXh0ZW5kOiBmYWxzZSwgZ29hbENvbHVtbjogbnVsbH07CkBAIC00NjQzLDcgKzQ0OTIs
NiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfTsKIAogICBEb2MucHJv
dG90eXBlID0gY3JlYXRlT2JqKEJyYW5jaENodW5rLnByb3RvdHlwZSwgewotICAgIGNvbnN0cnVj
dG9yOiBEb2MsCiAgICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7CiAgICAgICBpZiAo
b3ApIHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApOwogICAgICAg
ZWxzZSB0aGlzLml0ZXJOKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUsIGZyb20p
OwpAQCAtNDY5MSwxMSArNDUzOSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxp
bmUpKSByZXR1cm4gZ2V0TGluZSh0aGlzLCBsaW5lKTt9LAogICAgIGdldExpbmVOdW1iZXI6IGZ1
bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpO30sCiAKLSAgICBnZXRMaW5lSGFuZGxl
VmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAi
bnVtYmVyIikgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlzdWFs
TGluZSh0aGlzLCBsaW5lKTsKLSAgICB9LAotCiAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHty
ZXR1cm4gdGhpcy5zaXplO30sCiAgICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhp
cy5maXJzdDt9LAogICAgIGxhc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCAr
IHRoaXMuc2l6ZSAtIDE7fSwKQEAgLTQ3MzcsMjUgKzQ1ODAsMjAgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeTsKICAgICAg
IHJldHVybiB7dW5kbzogaGlzdC5kb25lLmxlbmd0aCwgcmVkbzogaGlzdC51bmRvbmUubGVuZ3Ro
fTsKICAgICB9LAotICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0g
bWFrZUhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO30sCisgICAgY2xlYXJIaXN0
b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCiAKICAgICBt
YXJrQ2xlYW46IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlz
LmNoYW5nZUdlbmVyYXRpb24oKTsKLSAgICB9LAotICAgIGNoYW5nZUdlbmVyYXRpb246IGZ1bmN0
aW9uKCkgeworICAgICAgdGhpcy5oaXN0b3J5LmRpcnR5Q291bnRlciA9IDA7CiAgICAgICB0aGlz
Lmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOwotICAgICAg
cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uOwotICAgIH0sCi0gICAgaXNDbGVhbjogZnVu
Y3Rpb24gKGdlbikgewotICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uID09IChn
ZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pOwogICAgIH0sCisgICAgaXNDbGVhbjogZnVuY3Rp
b24gKCkge3JldHVybiB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVyID09IDA7fSwKIAogICAgIGdl
dEhpc3Rvcnk6IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHtkb25lOiBjb3B5SGlzdG9yeUFy
cmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKICAgICAgICAgICAgICAgdW5kb25lOiBjb3B5SGlzdG9y
eUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKICAgICB9LAogICAgIHNldEhpc3Rvcnk6IGZ1
bmN0aW9uKGhpc3REYXRhKSB7Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSA9IG1ha2VI
aXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTsKKyAgICAgIHZhciBoaXN0ID0gdGhp
cy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKICAgICAgIGhpc3QuZG9uZSA9IGhpc3REYXRhLmRv
bmUuc2xpY2UoMCk7CiAgICAgICBoaXN0LnVuZG9uZSA9IGhpc3REYXRhLnVuZG9uZS5zbGljZSgw
KTsKICAgICB9LApAQCAtNDg2Niw4ICs0NzA0LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7cmV0dXJuIG1ldGhvZC5hcHBseSh0
aGlzLmRvYywgYXJndW1lbnRzKTt9OwogICAgIH0pKERvYy5wcm90b3R5cGVbcHJvcF0pOwogCi0g
IGV2ZW50TWl4aW4oRG9jKTsKLQogICBmdW5jdGlvbiBsaW5rZWREb2NzKGRvYywgZiwgc2hhcmVk
SGlzdE9ubHkpIHsKICAgICBmdW5jdGlvbiBwcm9wYWdhdGUoZG9jLCBza2lwLCBzaGFyZWRIaXN0
KSB7CiAgICAgICBpZiAoZG9jLmxpbmtlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2Vk
Lmxlbmd0aDsgKytpKSB7CkBAIC00OTg3LDcgKzQ4MjMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKIAogICAvLyBISVNUT1JZCiAKLSAgZnVuY3Rpb24gbWFrZUhpc3Rvcnko
c3RhcnRHZW4pIHsKKyAgZnVuY3Rpb24gbWFrZUhpc3RvcnkoKSB7CiAgICAgcmV0dXJuIHsKICAg
ICAgIC8vIEFycmF5cyBvZiBoaXN0b3J5IGV2ZW50cy4gRG9pbmcgc29tZXRoaW5nIGFkZHMgYW4g
ZXZlbnQgdG8KICAgICAgIC8vIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVzIGV2
ZW50cyBmcm9tIGRvbmUgdG8KQEAgLTQ5OTcsNyArNDgzMyw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgLy8gZXZlbnQKICAgICAgIGxhc3RUaW1lOiAwLCBsYXN0
T3A6IG51bGwsIGxhc3RPcmlnaW46IG51bGwsCiAgICAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFu
KCkgbWV0aG9kCi0gICAgICBnZW5lcmF0aW9uOiBzdGFydEdlbiB8fCAxLCBtYXhHZW5lcmF0aW9u
OiBzdGFydEdlbiB8fCAxCisgICAgICBkaXJ0eUNvdW50ZXI6IDAKICAgICB9OwogICB9CiAKQEAg
LTUwMTEsOCArNDg0Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9
CiAKICAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKLSAg
ICB2YXIgZnJvbSA9IHsgbGluZTogY2hhbmdlLmZyb20ubGluZSwgY2g6IGNoYW5nZS5mcm9tLmNo
IH07Ci0gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogZnJvbSwgdG86IGNoYW5nZUVuZChjaGFu
Z2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9OworICAg
IHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5n
ZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07CiAgICAg
YXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5n
ZS50by5saW5lICsgMSk7CiAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYykge2F0dGFj
aExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8u
bGluZSArIDEpO30sIHRydWUpOwogICAgIHJldHVybiBoaXN0Q2hhbmdlOwpAQCAtNTAyNiw4ICs0
ODYxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGN1ciAm
JgogICAgICAgICAoaGlzdC5sYXN0T3AgPT0gb3BJZCB8fAogICAgICAgICAgaGlzdC5sYXN0T3Jp
Z2luID09IGNoYW5nZS5vcmlnaW4gJiYgY2hhbmdlLm9yaWdpbiAmJgotICAgICAgICAgKChjaGFu
Z2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdFRpbWUgPiB0
aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8Ci0gICAgICAgICAgY2hh
bmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIioiKSkpIHsKKyAgICAgICAgICgoY2hhbmdlLm9yaWdp
bi5jaGFyQXQoMCkgPT0gIisiICYmIGhpc3QubGFzdFRpbWUgPiB0aW1lIC0gNjAwKSB8fCBjaGFu
Z2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSkgewogICAgICAgLy8gTWVyZ2UgdGhpcyBjaGFu
Z2UgaW50byB0aGUgbGFzdCBldmVudAogICAgICAgdmFyIGxhc3QgPSBsc3QoY3VyLmNoYW5nZXMp
OwogICAgICAgaWYgKHBvc0VxKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pICYmIHBvc0VxKGNoYW5n
ZS5mcm9tLCBsYXN0LnRvKSkgewpAQCAtNTA0MiwxMyArNDg3NiwxNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9IGVsc2UgewogICAgICAgLy8gQ2FuIG5vdCBiZSBt
ZXJnZWQsIHN0YXJ0IGEgbmV3IGV2ZW50LgogICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5
Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSldLAotICAgICAgICAgICAgIGdlbmVyYXRpb246
IGhpc3QuZ2VuZXJhdGlvbiwKICAgICAgICAgICAgICBhbmNob3JCZWZvcmU6IGRvYy5zZWwuYW5j
aG9yLCBoZWFkQmVmb3JlOiBkb2Muc2VsLmhlYWQsCiAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6
IHNlbEFmdGVyLmFuY2hvciwgaGVhZEFmdGVyOiBzZWxBZnRlci5oZWFkfTsKICAgICAgIGhpc3Qu
ZG9uZS5wdXNoKGN1cik7Ci0gICAgICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJh
dGlvbjsKICAgICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpCiAg
ICAgICAgIGhpc3QuZG9uZS5zaGlmdCgpOworICAgICAgaWYgKGhpc3QuZGlydHlDb3VudGVyIDwg
MCkKKyAgICAgICAgLy8gVGhlIHVzZXIgaGFzIG1hZGUgYSBjaGFuZ2UgYWZ0ZXIgdW5kb2luZyBw
YXN0IHRoZSBsYXN0IGNsZWFuIHN0YXRlLgorICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgZ2V0IGJh
Y2sgdG8gYSBjbGVhbiBzdGF0ZSBub3cgdW50aWwgbWFya0NsZWFuKCkgaXMgY2FsbGVkLgorICAg
ICAgICBoaXN0LmRpcnR5Q291bnRlciA9IE5hTjsKKyAgICAgIGVsc2UKKyAgICAgICAgaGlzdC5k
aXJ0eUNvdW50ZXIrKzsKICAgICB9CiAgICAgaGlzdC5sYXN0VGltZSA9IHRpbWU7CiAgICAgaGlz
dC5sYXN0T3AgPSBvcElkOwpAQCAtNTE2Myw5ICs1MDAxLDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSBlLnN0b3BQcm9wYWdh
dGlvbigpOwogICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwogICB9Ci0gIGZ1bmN0aW9u
IGVfZGVmYXVsdFByZXZlbnRlZChlKSB7Ci0gICAgcmV0dXJuIGUuZGVmYXVsdFByZXZlbnRlZCAh
PSBudWxsID8gZS5kZWZhdWx0UHJldmVudGVkIDogZS5yZXR1cm5WYWx1ZSA9PSBmYWxzZTsKLSAg
fQogICBmdW5jdGlvbiBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3Bh
Z2F0aW9uKGUpO30KICAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7CiAgIENvZGVNaXJyb3Iu
ZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7CkBAIC01MjMyLDExICs1MDY3LDYg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkZWxheWVkQ2FsbGJh
Y2tzLnB1c2goYm5kKGFycltpXSkpOwogICB9CiAKLSAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQo
Y20sIGUpIHsKLSAgICBzaWduYWwoY20sIGUudHlwZSwgY20sIGUpOwotICAgIHJldHVybiBlX2Rl
ZmF1bHRQcmV2ZW50ZWQoZSk7Ci0gIH0KLQogICBmdW5jdGlvbiBmaXJlRGVsYXllZCgpIHsKICAg
ICAtLWRlbGF5ZWRDYWxsYmFja0RlcHRoOwogICAgIHZhciBkZWxheWVkID0gZGVsYXllZENhbGxi
YWNrczsKQEAgLTUyNTEsMTEgKzUwODEsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKIAogICBDb2RlTWlycm9yLm9uID0gb247IENvZGVNaXJyb3Iub2ZmID0gb2ZmOyBDb2Rl
TWlycm9yLnNpZ25hbCA9IHNpZ25hbDsKIAotICBmdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHsK
LSAgICBjdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBl
LCBmKTt9OwotICAgIGN0b3IucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYo
dGhpcywgdHlwZSwgZik7fTsKLSAgfQotCiAgIC8vIE1JU0MgVVRJTElUSUVTCiAKICAgLy8gTnVt
YmVyIG9mIHBpeGVscyBhZGRlZCB0byBzY3JvbGxlciBhbmQgc2l6ZXIgdG8gaGlkZSBzY3JvbGxi
YXIKQEAgLTUyOTYsMTEgKzUxMjEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBpZiAoaW9zKSB7IC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcg
d2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLgogICAgICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7
CiAgICAgICBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzCi0gICAgICB0cnkg
eyBub2RlLnNlbGVjdCgpOyB9Ci0gICAgICBjYXRjaChfZSkge30KLSAgICB9CisgICAgfSBlbHNl
IG5vZGUuc2VsZWN0KCk7CiAgIH0KIAogICBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVs
dCkgewpAQCAtNTMzNCw3ICs1MTU1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7fTsK
ICAgfQogCi0gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUzMDQwLVx1MzA5
Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLzsK
KyAgdmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcdTMwNDAtXHUzMDlmXHUzMGEw
LVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXS87CiAgIGZ1bmN0aW9uIGlzV29yZENo
YXIoY2gpIHsKICAgICByZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+ICJceDgwIiAmJgogICAg
ICAgKGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJSVNpbmds
ZUNhc2VXb3JkQ2hhci50ZXN0KGNoKSk7CkBAIC01Mzk1LDI2ICs1MjE2LDEzIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyB3b3JkIHdyYXBwaW5nIGJldHdlZW4gY2Vy
dGFpbiBjaGFyYWN0ZXJzICpvbmx5KiBpZiBhIG5ldyBpbmxpbmUKICAgLy8gZWxlbWVudCBpcyBz
dGFydGVkIGJldHdlZW4gdGhlbS4gVGhpcyBtYWtlcyBpdCBoYXJkIHRvIHJlbGlhYmx5CiAgIC8v
IG1lYXN1cmUgdGhlIHBvc2l0aW9uIG9mIHRoaW5ncywgc2luY2UgdGhhdCByZXF1aXJlcyBpbnNl
cnRpbmcgYW4KLSAgLy8gZXh0cmEgc3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiB0
ZXN0cyBtYXRjaGVzIHRoZQorICAvLyBleHRyYSBzcGFuLiBUaGlzIHRlcnJpYmx5IGZyYWdpbGUg
c2V0IG9mIHJlZ2V4cHMgbWF0Y2hlcyB0aGUKICAgLy8gY2hhcmFjdGVyIGNvbWJpbmF0aW9ucyB0
aGF0IHN1ZmZlciBmcm9tIHRoaXMgcGhlbm9tZW5vbiBvbiB0aGUKICAgLy8gdmFyaW91cyBicm93
c2Vycy4KLSAgZnVuY3Rpb24gc3BhbkFmZmVjdHNXcmFwcGluZygpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gIGlmIChnZWNrbykgLy8gT25seSBmb3IgIiQnIgotICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcg
PSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIHJldHVybiBzdHIuY2hhckNvZGVBdChpIC0gMSkg
PT0gMzYgJiYgc3RyLmNoYXJDb2RlQXQoaSkgPT0gMzk7Ci0gICAgfTsKLSAgZWxzZSBpZiAoc2Fm
YXJpICYmICEvVmVyc2lvblwvKFs2LTldfFxkXGQpXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu
dCkpCi0gICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAg
cmV0dXJuIC9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHN0ci5z
bGljZShpIC0gMSwgaSArIDEpKTsKLSAgICB9OwotICBlbHNlIGlmICh3ZWJraXQgJiYgIS9DaHJv
bWVcLyg/OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQot
ICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIGlmIChp
ID4gMSAmJiBzdHIuY2hhckNvZGVBdChpIC0gMSkgPT0gNDUpIHsKLSAgICAgICAgaWYgKC9cdy8u
dGVzdChzdHIuY2hhckF0KGkgLSAyKSkgJiYgL1teXC0/XC5dLy50ZXN0KHN0ci5jaGFyQXQoaSkp
KSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGkgPiAyICYmIC9bXGRcLixdLy50ZXN0KHN0ci5j
aGFyQXQoaSAtIDIpKSAmJiAvW1xkXC4sXS8udGVzdChzdHIuY2hhckF0KGkpKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIC9bfiEjJSYqKT0rfVxdfFwiXC4+LDo7XVsoe1s8
XXwtW15cLT9cLlx1MjAxMC1cdTIwMWZcdTIwMjZdfFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF18
4oCmW1x3fmBAIyQlXF4mKihfPSt7Wz48XS8udGVzdChzdHIuc2xpY2UoaSAtIDEsIGkgKyAxKSk7
Ci0gICAgfTsKKyAgdmFyIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXiQvOyAvLyBXb24ndCBtYXRj
aCBhbnkgdHdvLWNoYXJhY3RlciBzdHJpbmcKKyAgaWYgKGdlY2tvKSBzcGFuQWZmZWN0c1dyYXBw
aW5nID0gLyQnLzsKKyAgZWxzZSBpZiAoc2FmYXJpICYmICEvVmVyc2lvblwvKFs2LTldfFxkXGQp
XGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1b
XiBcLT9dfFw/W14gISdcIlwpLC5cLVwvOjtcP1xdXH1dLzsKKyAgZWxzZSBpZiAod2Via2l0KSBz
cGFuQWZmZWN0c1dyYXBwaW5nID0gL1t+ISMlJiopPSt9XF18XCJcLj4sOjtdWyh7WzxdfC1bXlwt
P1wuXXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdLzsKIAogICB2YXIga25vd25TY3JvbGxiYXJX
aWR0aDsKICAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgobWVhc3VyZSkgewpAQCAtNTQ5OSwxNSAr
NTMwNywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlv
biBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikgewogICAgIGlmICghb3Jk
ZXIpIHJldHVybiBmKGZyb20sIHRvLCAibHRyIik7Ci0gICAgdmFyIGZvdW5kID0gZmFsc2U7CiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHBh
cnQgPSBvcmRlcltpXTsKLSAgICAgIGlmIChwYXJ0LmZyb20gPCB0byAmJiBwYXJ0LnRvID4gZnJv
bSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkgeworICAgICAgaWYgKHBhcnQuZnJv
bSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9t
KQogICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWluKHBhcnQudG8s
IHRvKSwgcGFydC5sZXZlbCA9PSAxID8gInJ0bCIgOiAibHRyIik7Ci0gICAgICAgIGZvdW5kID0g
dHJ1ZTsKLSAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFmb3VuZCkgZihmcm9tLCB0bywgImx0ciIp
OwogICB9CiAKICAgZnVuY3Rpb24gYmlkaUxlZnQocGFydCkgeyByZXR1cm4gcGFydC5sZXZlbCAl
IDIgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9CkBAIC01NTM3LDQwICs1MzQxLDYgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIFBvcyhsaW5lTiwgY2gpOwog
ICB9CiAKLSAgZnVuY3Rpb24gY29tcGFyZUJpZGlMZXZlbChvcmRlciwgYSwgYikgewotICAgIHZh
ciBsaW5lZGlyID0gb3JkZXJbMF0ubGV2ZWw7Ci0gICAgaWYgKGEgPT0gbGluZWRpcikgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKGIgPT0gbGluZWRpcikgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBh
IDwgYjsKLSAgfQotICB2YXIgYmlkaU90aGVyOwotICBmdW5jdGlvbiBnZXRCaWRpUGFydEF0KG9y
ZGVyLCBwb3MpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgZm91bmQ7IGkgPCBvcmRlci5sZW5ndGg7
ICsraSkgewotICAgICAgdmFyIGN1ciA9IG9yZGVyW2ldOwotICAgICAgaWYgKGN1ci5mcm9tIDwg
cG9zICYmIGN1ci50byA+IHBvcykgeyBiaWRpT3RoZXIgPSBudWxsOyByZXR1cm4gaTsgfQotICAg
ICAgaWYgKGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9zKSB7Ci0gICAgICAgIGlmIChm
b3VuZCA9PSBudWxsKSB7Ci0gICAgICAgICAgZm91bmQgPSBpOwotICAgICAgICB9IGVsc2UgaWYg
KGNvbXBhcmVCaWRpTGV2ZWwob3JkZXIsIGN1ci5sZXZlbCwgb3JkZXJbZm91bmRdLmxldmVsKSkg
ewotICAgICAgICAgIGJpZGlPdGhlciA9IGZvdW5kOwotICAgICAgICAgIHJldHVybiBpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGJpZGlPdGhlciA9IGk7Ci0gICAgICAgICAgcmV0dXJu
IGZvdW5kOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJpZGlPdGhlciA9IG51bGw7
Ci0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUluTGluZShsaW5lLCBw
b3MsIGRpciwgYnlVbml0KSB7Ci0gICAgaWYgKCFieVVuaXQpIHJldHVybiBwb3MgKyBkaXI7Ci0g
ICAgZG8gcG9zICs9IGRpcjsKLSAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIu
dGVzdChsaW5lLnRleHQuY2hhckF0KHBvcykpKTsKLSAgICByZXR1cm4gcG9zOwotICB9Ci0KICAg
Ly8gVGhpcyBpcyBzb21ld2hhdCBpbnZvbHZlZC4gSXQgaXMgbmVlZGVkIGluIG9yZGVyIHRvIG1v
dmUKICAgLy8gJ3Zpc3VhbGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlvbmFsIHRleHQgLS0gaS5lLiwg
cHJlc3NpbmcgbGVmdAogICAvLyBzaG91bGQgbWFrZSB0aGUgY3Vyc29yIGdvIGxlZnQsIGV2ZW4g
d2hlbiBpbiBSVEwgdGV4dC4gVGhlCkBAIC01NTgwLDI0ICs1MzUwLDM3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBtb3ZlVmlzdWFsbHkobGluZSwgc3Rh
cnQsIGRpciwgYnlVbml0KSB7CiAgICAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lKTsKICAgICBp
ZiAoIWJpZGkpIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCk7
Ci0gICAgdmFyIHBvcyA9IGdldEJpZGlQYXJ0QXQoYmlkaSwgc3RhcnQpLCBwYXJ0ID0gYmlkaVtw
b3NdOwotICAgIHZhciB0YXJnZXQgPSBtb3ZlSW5MaW5lKGxpbmUsIHN0YXJ0LCBwYXJ0LmxldmVs
ICUgMiA/IC1kaXIgOiBkaXIsIGJ5VW5pdCk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICBpZiAo
dGFyZ2V0ID4gcGFydC5mcm9tICYmIHRhcmdldCA8IHBhcnQudG8pIHJldHVybiB0YXJnZXQ7Ci0g
ICAgICBpZiAodGFyZ2V0ID09IHBhcnQuZnJvbSB8fCB0YXJnZXQgPT0gcGFydC50bykgewotICAg
ICAgICBpZiAoZ2V0QmlkaVBhcnRBdChiaWRpLCB0YXJnZXQpID09IHBvcykgcmV0dXJuIHRhcmdl
dDsKLSAgICAgICAgcGFydCA9IGJpZGlbcG9zICs9IGRpcl07Ci0gICAgICAgIHJldHVybiAoZGly
ID4gMCkgPT0gcGFydC5sZXZlbCAlIDIgPyBwYXJ0LnRvIDogcGFydC5mcm9tOworICAgIHZhciBt
b3ZlT25lVW5pdCA9IGJ5VW5pdCA/IGZ1bmN0aW9uKHBvcywgZGlyKSB7CisgICAgICBkbyBwb3Mg
Kz0gZGlyOworICAgICAgd2hpbGUgKHBvcyA+IDAgJiYgaXNFeHRlbmRpbmdDaGFyLnRlc3QobGlu
ZS50ZXh0LmNoYXJBdChwb3MpKSk7CisgICAgICByZXR1cm4gcG9zOworICAgIH0gOiBmdW5jdGlv
bihwb3MsIGRpcikgeyByZXR1cm4gcG9zICsgZGlyOyB9OworICAgIHZhciBsaW5lZGlyID0gYmlk
aVswXS5sZXZlbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpZGkubGVuZ3RoOyArK2kpIHsK
KyAgICAgIHZhciBwYXJ0ID0gYmlkaVtpXSwgc3RpY2t5ID0gcGFydC5sZXZlbCAlIDIgPT0gbGlu
ZWRpcjsKKyAgICAgIGlmICgocGFydC5mcm9tIDwgc3RhcnQgJiYgcGFydC50byA+IHN0YXJ0KSB8
fAorICAgICAgICAgIChzdGlja3kgJiYgKHBhcnQuZnJvbSA9PSBzdGFydCB8fCBwYXJ0LnRvID09
IHN0YXJ0KSkpIGJyZWFrOworICAgIH0KKyAgICB2YXIgdGFyZ2V0ID0gbW92ZU9uZVVuaXQoc3Rh
cnQsIHBhcnQubGV2ZWwgJSAyID8gLWRpciA6IGRpcik7CisKKyAgICB3aGlsZSAodGFyZ2V0ICE9
IG51bGwpIHsKKyAgICAgIGlmIChwYXJ0LmxldmVsICUgMiA9PSBsaW5lZGlyKSB7CisgICAgICAg
IGlmICh0YXJnZXQgPCBwYXJ0LmZyb20gfHwgdGFyZ2V0ID4gcGFydC50bykgeworICAgICAgICAg
IHBhcnQgPSBiaWRpW2kgKz0gZGlyXTsKKyAgICAgICAgICB0YXJnZXQgPSBwYXJ0ICYmIChkaXIg
PiAwID09IHBhcnQubGV2ZWwgJSAyID8gbW92ZU9uZVVuaXQocGFydC50bywgLTEpIDogbW92ZU9u
ZVVuaXQocGFydC5mcm9tLCAxKSk7CisgICAgICAgIH0gZWxzZSBicmVhazsKICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHBhcnQgPSBiaWRpW3BvcyArPSBkaXJdOwotICAgICAgICBpZiAoIXBhcnQp
IHJldHVybiBudWxsOwotICAgICAgICBpZiAoKGRpciA+IDApID09IHBhcnQubGV2ZWwgJSAyKQot
ICAgICAgICAgIHRhcmdldCA9IG1vdmVJbkxpbmUobGluZSwgcGFydC50bywgLTEsIGJ5VW5pdCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0YXJnZXQgPSBtb3ZlSW5MaW5lKGxpbmUsIHBhcnQu
ZnJvbSwgMSwgYnlVbml0KTsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBiaWRpTGVmdChwYXJ0KSkg
eworICAgICAgICAgIHBhcnQgPSBiaWRpWy0taV07CisgICAgICAgICAgdGFyZ2V0ID0gcGFydCAm
JiBiaWRpUmlnaHQocGFydCk7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IGJpZGlSaWdo
dChwYXJ0KSkgeworICAgICAgICAgIHBhcnQgPSBiaWRpWysraV07CisgICAgICAgICAgdGFyZ2V0
ID0gcGFydCAmJiBiaWRpTGVmdChwYXJ0KTsKKyAgICAgICAgfSBlbHNlIGJyZWFrOwogICAgICAg
fQogICAgIH0KKworICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUudGV4dC5s
ZW5ndGggPyBudWxsIDogdGFyZ2V0OwogICB9CiAKICAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxseShs
aW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKQEAgLTU3NjksNyArNTU1Miw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFRIRSBFTkQKIAotICBDb2RlTWlycm9y
LnZlcnNpb24gPSAiMy4xNC4xIjsKKyAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjMuMTEgKyI7CiAK
ICAgcmV0dXJuIENvZGVNaXJyb3I7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Ub29scy9QcmV0dHlQcmludGluZy9jc3MuanMKaW5kZXggYjUyZTc4N2E3MGFiMDc2OGNlOGFh
MzNkY2YwNGVhMTNkMTJjZDUyYi4uMWVmNzJiNTE3ZGU0NTkzZTQ3MDlkMDI0ZmUxYTNlNzNmOWUy
ZWE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL2Nzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvY3NzLmpzCkBAIC0xMDMsOCArMTAzLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mt
YmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgc3RhcnRTdGF0ZTog
ZnVuY3Rpb24oYmFzZSkgewogICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAg
ICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAgICAgIHN0YWNrOiBb
XSwKLSAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsfTsKKyAgICAgICAgICAgICAgc3RhY2s6
IFtdfTsKICAgICB9LAogCiAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKQEAg
LTE2NCwyOSArMTYzLDI4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzLWJhc2UiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5z
dGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV07CiAgICAgICBpZiAoc3R5bGUgPT0gInZhcmlhYmxl
IikgewogICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUtZGVmaW5pdGlvbiIpIHN0YXRlLnN0
YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmxhc3RUb2tl
biA9ICJ2YXJpYWJsZS0yIjsKKyAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0g
ZWxzZSBpZiAoc3R5bGUgPT0gInByb3BlcnR5IikgewotICAgICAgICB2YXIgd29yZCA9IHN0cmVh
bS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgaWYgKGNvbnRleHQgPT0gInByb3Bl
cnR5VmFsdWUiKSB7Ci0gICAgICAgICAgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHko
d29yZCkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiKXsKKyAgICAg
ICAgICBpZiAodmFsdWVLZXl3b3Jkc1tzdHJlYW0uY3VycmVudCgpXSkgewogICAgICAgICAgICAg
c3R5bGUgPSAic3RyaW5nLTIiOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5o
YXNPd25Qcm9wZXJ0eSh3b3JkKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JLZXl3b3Jk
c1tzdHJlYW0uY3VycmVudCgpXSkgewogICAgICAgICAgICAgc3R5bGUgPSAia2V5d29yZCI7CiAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0eWxlID0gInZhcmlhYmxlLTIiOwogICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJydWxlIikgewotICAgICAg
ICAgIGlmICghcHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgeworICAgICAg
ICAgIGlmICghcHJvcGVydHlLZXl3b3Jkc1tzdHJlYW0uY3VycmVudCgpXSkgewogICAgICAgICAg
ICAgc3R5bGUgKz0gIiBlcnJvciI7CiAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGNv
bnRleHQgPT0gImJsb2NrIikgewogICAgICAgICAgIC8vIGlmIGEgdmFsdWUgaXMgcHJlc2VudCBp
biBib3RoIHByb3BlcnR5LCB2YWx1ZSwgb3IgY29sb3IsIHRoZSBvcmRlcgogICAgICAgICAgIC8v
IG9mIHByZWZlcmVuY2UgaXMgcHJvcGVydHkgLT4gY29sb3IgLT4gdmFsdWUKLSAgICAgICAgICBp
ZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgeworICAgICAgICAgIGlm
IChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CiAgICAgICAgICAgICBzdHls
ZSA9ICJwcm9wZXJ0eSI7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzW3N0
cmVhbS5jdXJyZW50KCldKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJrZXl3b3JkIjsKLSAgICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKKyAg
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKICAg
ICAgICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsKICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgc3R5bGUgPSAidGFnIjsKQEAgLTE5Niw0MiArMTk0LDQyIEBAIENvZGVNaXJyb3IuZGVm
aW5lTW9kZSgiY3NzLWJhc2UiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAg
ICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIpIHsKICAgICAgICAgICBpZiAoYXRN
ZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJhdHRy
aWJ1dGUiOyAvLyBLbm93biBhdHRyaWJ1dGUKLSAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8
bm90KSQvLnRlc3Qod29yZCkpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8bm90KSQv
aS50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJrZXl3b3Jk
IjsKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsKKyAgICAgICAgICB9IGVs
c2UgaWYgKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSA9PSAiYW5kIikgewogICAgICAg
ICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyAiYW5kIiBpcyBvbmx5IGFsbG93ZWQgaW4gQG1lZGlh
VHlwZQotICAgICAgICAgIH0gZWxzZSBpZiAoYXRNZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5
KHdvcmQpKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3RyZWFtLmN1
cnJlbnQoKV0pIHsKICAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJvcGVy
dHksIHNob3VsZCBiZSBpbiBAbWVkaWFUeXBlKAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBVbmtub3duLCBleHBlY3Rpbmcga2V5d29yZCBvciBhdHRyaWJ1dGUsIGFzc3VtaW5n
IGF0dHJpYnV0ZQogICAgICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIGVycm9yIjsKICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsKLSAg
ICAgICAgICBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7CisgICAgICAg
ICAgaWYgKGF0TWVkaWFUeXBlc1tzdHJlYW0uY3VycmVudCgpXSkgewogICAgICAgICAgICAgc3R5
bGUgPSAiYXR0cmlidXRlIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsK
KyAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSA9PSAi
YW5kIikgewogICAgICAgICAgICAgc3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAgIH0gZWxz
ZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAo
L14ob25seXxub3QpJC9pLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgIHN0
eWxlID0gImVycm9yIjsgLy8gT25seSBhbGxvd2VkIGluIEBtZWRpYQorICAgICAgICAgIH0gZWxz
ZSBpZiAoYXRNZWRpYUZlYXR1cmVzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAgICBz
dHlsZSA9ICJlcnJvciI7IC8vIEtub3duIHByb3BlcnR5LCBzaG91bGQgYmUgaW4gcGFyZW50aGVz
ZXMKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGUg
b3IgcHJvcGVydHksIGJ1dCBleHBlY3RpbmcgcHJvcGVydHkgKHByZWNlZGVkCiAgICAgICAgICAg
ICAvLyBieSAiYW5kIikuIFNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwogICAgICAgICAgICAgc3R5
bGUgPSAiZXJyb3IiOwogICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09
ICJAbWVkaWFUeXBlKCIpIHsKLSAgICAgICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Q
cm9wZXJ0eSh3b3JkKSkgeworICAgICAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5j
dXJyZW50KCldKSB7CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nLCByZW1haW5zICJwcm9wZXJ0
eSIKLSAgICAgICAgICB9IGVsc2UgaWYgKGF0TWVkaWFUeXBlcy5oYXNPd25Qcm9wZXJ0eSh3b3Jk
KSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoYXRNZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCld
KSB7CiAgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vIEtub3duIHByb3BlcnR5LCBzaG91
bGQgYmUgaW4gcGFyZW50aGVzZXMKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIp
IHsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSA9
PSAiYW5kIikgewogICAgICAgICAgICAgc3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAgIH0g
ZWxzZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgeworICAgICAgICAgIH0gZWxzZSBp
ZiAoL14ob25seXxub3QpJC9pLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAg
IHN0eWxlID0gImVycm9yIjsgLy8gT25seSBhbGxvd2VkIGluIEBtZWRpYQogICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBzdHlsZSArPSAiIGVycm9yIjsKICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQGltcG9ydCIpIHsKLSAgICAgICAgICBzdHlsZSA9
ICJ0YWciOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKICAg
ICAgICAgfQpAQCAtMjY4LDE2ICsyNjYsMTQgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mt
YmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICB9CiAgICAgICBl
bHNlIGlmICh0eXBlID09ICJpbnRlcnBvbGF0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgiaW50ZXJw
b2xhdGlvbiIpOwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2su
cHVzaCgiQG1lZGlhIik7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJAaW1wb3J0Iikgc3RhdGUu
c3RhY2sucHVzaCgiQGltcG9ydCIpOwogICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlh
IiAmJiAvXGIoa2V5d29yZHxhdHRyaWJ1dGUpXGIvLnRlc3Qoc3R5bGUpKQogICAgICAgICBzdGF0
ZS5zdGFjay5wdXNoKCJAbWVkaWFUeXBlIik7CiAgICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJA
bWVkaWFUeXBlIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICIsIikgc3RhdGUuc3RhY2sucG9wKCk7
CiAgICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiB0eXBlID09ICIoIikg
c3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhVHlwZSgiKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQg
PT0gIkBtZWRpYVR5cGUoIiAmJiB0eXBlID09ICIpIikgc3RhdGUuc3RhY2sucG9wKCk7Ci0gICAg
ICBlbHNlIGlmICh0eXBlID09ICI6IiAmJiBzdGF0ZS5sYXN0VG9rZW4gPT0gInByb3BlcnR5Iikg
c3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIpOworICAgICAgZWxzZSBpZiAoKGNvbnRl
eHQgPT0gInJ1bGUiIHx8IGNvbnRleHQgPT0gImJsb2NrIikgJiYgdHlwZSA9PSAiOiIpIHN0YXRl
LnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0g
InByb3BlcnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAg
IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFj
ay5wb3AoKTsKLSAgICAgIHJldHVybiBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKKyAgICAgIHJl
dHVybiBzdHlsZTsKICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFm
dGVyKSB7CkBAIC0yODcsMTAgKzI4Myw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzLWJh
c2UiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgcmV0dXJuIHN0YXRl
LmJhc2VJbmRlbnQgKyBuICogaW5kZW50VW5pdDsKICAgICB9LAogCi0gICAgZWxlY3RyaWNDaGFy
czogIn0iLAotICAgIGJsb2NrQ29tbWVudFN0YXJ0OiAiLyoiLAotICAgIGJsb2NrQ29tbWVudEVu
ZDogIiovIiwKLSAgICBmb2xkOiAiYnJhY2UiCisgICAgZWxlY3RyaWNDaGFyczogIn0iCiAgIH07
CiB9KTsKIApAQCAtMzk0LDQ2ICszODcsMTIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mt
YmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgInZlcnRpY2FsLWFs
aWduIiwgInZpc2liaWxpdHkiLCAidm9pY2UtYmFsYW5jZSIsICJ2b2ljZS1kdXJhdGlvbiIsCiAg
ICAgInZvaWNlLWZhbWlseSIsICJ2b2ljZS1waXRjaCIsICJ2b2ljZS1yYW5nZSIsICJ2b2ljZS1y
YXRlIiwgInZvaWNlLXN0cmVzcyIsCiAgICAgInZvaWNlLXZvbHVtZSIsICJ2b2x1bWUiLCAid2hp
dGUtc3BhY2UiLCAid2lkb3dzIiwgIndpZHRoIiwgIndvcmQtYnJlYWsiLAotICAgICJ3b3JkLXNw
YWNpbmciLCAid29yZC13cmFwIiwgInotaW5kZXgiLAotICAgIC8vIFNWRy1zcGVjaWZpYwotICAg
ICJjbGlwLXBhdGgiLCAiY2xpcC1ydWxlIiwgIm1hc2siLCAiZW5hYmxlLWJhY2tncm91bmQiLCAi
ZmlsdGVyIiwgImZsb29kLWNvbG9yIiwKLSAgICAiZmxvb2Qtb3BhY2l0eSIsICJsaWdodGluZy1j
b2xvciIsICJzdG9wLWNvbG9yIiwgInN0b3Atb3BhY2l0eSIsICJwb2ludGVyLWV2ZW50cyIsCi0g
ICAgImNvbG9yLWludGVycG9sYXRpb24iLCAiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwg
ImNvbG9yLXByb2ZpbGUiLAotICAgICJjb2xvci1yZW5kZXJpbmciLCAiZmlsbCIsICJmaWxsLW9w
YWNpdHkiLCAiZmlsbC1ydWxlIiwgImltYWdlLXJlbmRlcmluZyIsCi0gICAgIm1hcmtlciIsICJt
YXJrZXItZW5kIiwgIm1hcmtlci1taWQiLCAibWFya2VyLXN0YXJ0IiwgInNoYXBlLXJlbmRlcmlu
ZyIsICJzdHJva2UiLAotICAgICJzdHJva2UtZGFzaGFycmF5IiwgInN0cm9rZS1kYXNob2Zmc2V0
IiwgInN0cm9rZS1saW5lY2FwIiwgInN0cm9rZS1saW5lam9pbiIsCi0gICAgInN0cm9rZS1taXRl
cmxpbWl0IiwgInN0cm9rZS1vcGFjaXR5IiwgInN0cm9rZS13aWR0aCIsICJ0ZXh0LXJlbmRlcmlu
ZyIsCi0gICAgImJhc2VsaW5lLXNoaWZ0IiwgImRvbWluYW50LWJhc2VsaW5lIiwgImdseXBoLW9y
aWVudGF0aW9uLWhvcml6b250YWwiLAotICAgICJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIs
ICJrZXJuaW5nIiwgInRleHQtYW5jaG9yIiwgIndyaXRpbmctbW9kZSIKKyAgICAid29yZC1zcGFj
aW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IgogICBdKTsKIAogICB2YXIgY29sb3JLZXl3b3Jk
cyA9IGtleVNldChbCi0gICAgImFsaWNlYmx1ZSIsICJhbnRpcXVld2hpdGUiLCAiYXF1YSIsICJh
cXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKLSAgICAiYmlzcXVlIiwgImJsYWNrIiwgImJs
YW5jaGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJicm93biIsCi0gICAgImJ1cmx5
d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9jb2xhdGUiLCAiY29yYWwiLCAi
Y29ybmZsb3dlcmJsdWUiLAotICAgICJjb3Juc2lsayIsICJjcmltc29uIiwgImN5YW4iLCAiZGFy
a2JsdWUiLCAiZGFya2N5YW4iLCAiZGFya2dvbGRlbnJvZCIsCi0gICAgImRhcmtncmF5IiwgImRh
cmtncmVlbiIsICJkYXJra2hha2kiLCAiZGFya21hZ2VudGEiLCAiZGFya29saXZlZ3JlZW4iLAot
ICAgICJkYXJrb3JhbmdlIiwgImRhcmtvcmNoaWQiLCAiZGFya3JlZCIsICJkYXJrc2FsbW9uIiwg
ImRhcmtzZWFncmVlbiIsCi0gICAgImRhcmtzbGF0ZWJsdWUiLCAiZGFya3NsYXRlZ3JheSIsICJk
YXJrdHVycXVvaXNlIiwgImRhcmt2aW9sZXQiLAotICAgICJkZWVwcGluayIsICJkZWVwc2t5Ymx1
ZSIsICJkaW1ncmF5IiwgImRvZGdlcmJsdWUiLCAiZmlyZWJyaWNrIiwKLSAgICAiZmxvcmFsd2hp
dGUiLCAiZm9yZXN0Z3JlZW4iLCAiZnVjaHNpYSIsICJnYWluc2Jvcm8iLCAiZ2hvc3R3aGl0ZSIs
Ci0gICAgImdvbGQiLCAiZ29sZGVucm9kIiwgImdyYXkiLCAiZ3JlZW4iLCAiZ3JlZW55ZWxsb3ci
LCAiaG9uZXlkZXciLAotICAgICJob3RwaW5rIiwgImluZGlhbnJlZCIsICJpbmRpZ28iLCAiaXZv
cnkiLCAia2hha2kiLCAibGF2ZW5kZXIiLAotICAgICJsYXZlbmRlcmJsdXNoIiwgImxhd25ncmVl
biIsICJsZW1vbmNoaWZmb24iLCAibGlnaHRibHVlIiwgImxpZ2h0Y29yYWwiLAotICAgICJsaWdo
dGN5YW4iLCAibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCAibGlnaHRncmF5IiwgImxpZ2h0Z3JlZW4i
LCAibGlnaHRwaW5rIiwKLSAgICAibGlnaHRzYWxtb24iLCAibGlnaHRzZWFncmVlbiIsICJsaWdo
dHNreWJsdWUiLCAibGlnaHRzbGF0ZWdyYXkiLAotICAgICJsaWdodHN0ZWVsYmx1ZSIsICJsaWdo
dHllbGxvdyIsICJsaW1lIiwgImxpbWVncmVlbiIsICJsaW5lbiIsICJtYWdlbnRhIiwKLSAgICAi
bWFyb29uIiwgIm1lZGl1bWFxdWFtYXJpbmUiLCAibWVkaXVtYmx1ZSIsICJtZWRpdW1vcmNoaWQi
LCAibWVkaXVtcHVycGxlIiwKLSAgICAibWVkaXVtc2VhZ3JlZW4iLCAibWVkaXVtc2xhdGVibHVl
IiwgIm1lZGl1bXNwcmluZ2dyZWVuIiwgIm1lZGl1bXR1cnF1b2lzZSIsCi0gICAgIm1lZGl1bXZp
b2xldHJlZCIsICJtaWRuaWdodGJsdWUiLCAibWludGNyZWFtIiwgIm1pc3R5cm9zZSIsICJtb2Nj
YXNpbiIsCi0gICAgIm5hdmFqb3doaXRlIiwgIm5hdnkiLCAib2xkbGFjZSIsICJvbGl2ZSIsICJv
bGl2ZWRyYWIiLCAib3JhbmdlIiwgIm9yYW5nZXJlZCIsCi0gICAgIm9yY2hpZCIsICJwYWxlZ29s
ZGVucm9kIiwgInBhbGVncmVlbiIsICJwYWxldHVycXVvaXNlIiwgInBhbGV2aW9sZXRyZWQiLAot
ICAgICJwYXBheWF3aGlwIiwgInBlYWNocHVmZiIsICJwZXJ1IiwgInBpbmsiLCAicGx1bSIsICJw
b3dkZXJibHVlIiwKLSAgICAicHVycGxlIiwgInJlZCIsICJyb3N5YnJvd24iLCAicm95YWxibHVl
IiwgInNhZGRsZWJyb3duIiwgInNhbG1vbiIsCi0gICAgInNhbmR5YnJvd24iLCAic2VhZ3JlZW4i
LCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwKLSAgICAic2xhdGVi
bHVlIiwgInNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwgInN0ZWVsYmx1ZSIsICJ0
YW4iLAotICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1cnF1b2lzZSIsICJ2aW9s
ZXQiLCAid2hlYXQiLCAid2hpdGUiLAotICAgICJ3aGl0ZXNtb2tlIiwgInllbGxvdyIsICJ5ZWxs
b3dncmVlbiIKKyAgICAiYmxhY2siLCAic2lsdmVyIiwgImdyYXkiLCAid2hpdGUiLCAibWFyb29u
IiwgInJlZCIsICJwdXJwbGUiLCAiZnVjaHNpYSIsCisgICAgImdyZWVuIiwgImxpbWUiLCAib2xp
dmUiLCAieWVsbG93IiwgIm5hdnkiLCAiYmx1ZSIsICJ0ZWFsIiwgImFxdWEiCiAgIF0pOwogCiAg
IHZhciB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KFsKQEAgLTUxNiw3ICs0NzUsNyBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICAidXBwZXItYWxwaGEiLCAidXBwZXItYXJtZW5pYW4iLCAidXBwZXItZ3JlZWsiLCAi
dXBwZXItaGV4YWRlY2ltYWwiLAogICAgICJ1cHBlci1sYXRpbiIsICJ1cHBlci1ub3J3ZWdpYW4i
LCAidXBwZXItcm9tYW4iLCAidXBwZXJjYXNlIiwgInVyZHUiLCAidXJsIiwKICAgICAidmVydGlj
YWwiLCAidmVydGljYWwtdGV4dCIsICJ2aXNpYmxlIiwgInZpc2libGVGaWxsIiwgInZpc2libGVQ
YWludGVkIiwKLSAgICAidmlzaWJsZVN0cm9rZSIsICJ2aXN1YWwiLCAidy1yZXNpemUiLCAid2Fp
dCIsICJ3YXZlIiwgIndpZGVyIiwKKyAgICAidmlzaWJsZVN0cm9rZSIsICJ2aXN1YWwiLCAidy1y
ZXNpemUiLCAid2FpdCIsICJ3YXZlIiwgIndoaXRlIiwgIndpZGVyIiwKICAgICAid2luZG93Iiwg
IndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwgInhvciIs
CiAgICAgInh4LWxhcmdlIiwgInh4LXNtYWxsIgogICBdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKaW5kZXgg
M2QwNDYwM2MyODVmZWU1Y2EzM2M4NjNlYTY3ODgwNzY1MjM0ZmQ1NC4uMjI5ZmIyZGMwYTY3ZWQ1
MjM5MGJmOGQ3Mzk1OTQ4ZTkyYjM2ZTM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKQEAgLTIsNyArMiw2
IEBACiAKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7
Ci0gIHZhciBzdGF0ZW1lbnRJbmRlbnQgPSBwYXJzZXJDb25maWcuc3RhdGVtZW50SW5kZW50Owog
ICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbjsKICAgdmFyIGlzVFMgPSBwYXJzZXJD
b25maWcudHlwZXNjcmlwdDsKIApAQCAtMTQsNyArMTMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHZh
ciBvcGVyYXRvciA9IGt3KCJvcGVyYXRvciIpLCBhdG9tID0ge3R5cGU6ICJhdG9tIiwgc3R5bGU6
ICJhdG9tIn07CiAKICAgICB2YXIganNLZXl3b3JkcyA9IHsKLSAgICAgICJpZiI6IGt3KCJpZiIp
LCAid2hpbGUiOiBBLCAid2l0aCI6IEEsICJlbHNlIjogQiwgImRvIjogQiwgInRyeSI6IEIsICJm
aW5hbGx5IjogQiwKKyAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2Ui
OiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAgInJldHVybiI6IEMs
ICJicmVhayI6IEMsICJjb250aW51ZSI6IEMsICJuZXciOiBDLCAiZGVsZXRlIjogQywgInRocm93
IjogQywKICAgICAgICJ2YXIiOiBrdygidmFyIiksICJjb25zdCI6IGt3KCJ2YXIiKSwgImxldCI6
IGt3KCJ2YXIiKSwKICAgICAgICJmdW5jdGlvbiI6IGt3KCJmdW5jdGlvbiIpLCAiY2F0Y2giOiBr
dygiY2F0Y2giKSwKQEAgLTIyNyw5ICsyMjYsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImph
dmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1bmN0
aW9uIHB1c2hsZXgodHlwZSwgaW5mbykgewogICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsK
LSAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlLCBpbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDsKLSAg
ICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gInN0YXQiKSBpbmRlbnQgPSBzdGF0ZS5sZXhp
Y2FsLmluZGVudGVkOwotICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoaW5kZW50
LCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pOwor
ICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CisgICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpT
TGV4aWNhbChzdGF0ZS5pbmRlbnRlZCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBz
dGF0ZS5sZXhpY2FsLCBpbmZvKTsKICAgICB9OwogICAgIHJlc3VsdC5sZXggPSB0cnVlOwogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0yNTgsMzIgKzI1NiwzMCBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlm
ICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRl
bWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgo
In0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgp
OwotICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhw
cmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7CiAgICAgaWYgKHR5cGUgPT0g
ImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgIGlmICh0eXBlID09ICJm
b3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cGVjdCgiKCIpLCBwdXNobGV4KCIp
IiksIGZvcnNwZWMxLCBleHBlY3QoIikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGxleCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgIGlmICh0eXBl
ID09ICJ2YXJpYWJsZSIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgbWF5YmVsYWJlbCk7
CiAgICAgaWYgKHR5cGUgPT0gInN3aXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwg
ZXhwcmVzc2lvbiwgcHVzaGxleCgifSIsICJzd2l0Y2giKSwgZXhwZWN0KCJ7IiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBv
cGxleCk7CiAgICAgaWYgKHR5cGUgPT0gImNhc2UiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBl
eHBlY3QoIjoiKSk7CiAgICAgaWYgKHR5cGUgPT0gImRlZmF1bHQiKSByZXR1cm4gY29udChleHBl
Y3QoIjoiKSk7CiAgICAgaWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgi
Zm9ybSIpLCBwdXNoY29udGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBv
cGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTsKICAgICByZXR1cm4gcGFzcyhwdXNobGV4KCJzdGF0
IiksIGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogICB9CiAgIGZ1bmN0aW9uIGV4
cHJlc3Npb24odHlwZSkgewotICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgZmFsc2Up
OworICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgbWF5YmVvcGVyYXRvckNvbW1hKTsK
ICAgfQogICBmdW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlKSB7Ci0gICAgcmV0dXJuIGV4
cHJlc3Npb25Jbm5lcih0eXBlLCB0cnVlKTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5
cGUsIG1heWJlb3BlcmF0b3JOb0NvbW1hKTsKICAgfQotICBmdW5jdGlvbiBleHByZXNzaW9uSW5u
ZXIodHlwZSwgbm9Db21tYSkgewotICAgIHZhciBtYXliZW9wID0gbm9Db21tYSA/IG1heWJlb3Bl
cmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hOworICBmdW5jdGlvbiBleHByZXNzaW9u
SW5uZXIodHlwZSwgbWF5YmVvcCkgewogICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0
eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9u
IikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwotICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGMi
KSByZXR1cm4gY29udChub0NvbW1hID8gbWF5YmVleHByZXNzaW9uTm9Db21tYSA6IG1heWJlZXhw
cmVzc2lvbik7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG1heWJl
ZXhwcmVzc2lvbik7CiAgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIp
IiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KCIpIiksIHBvcGxleCwgbWF5YmVvcCk7Ci0gICAg
aWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IGV4cHJlc3Npb25O
b0NvbW1hIDogZXhwcmVzc2lvbik7CisgICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJu
IGNvbnQoZXhwcmVzc2lvbik7CiAgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNo
bGV4KCJdIiksIGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIpLCBwb3BsZXgsIG1heWJl
b3ApOwogICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21t
YXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3ApOwogICAgIHJldHVybiBjb250KCk7
CkBAIC0yOTIsMTAgKzI4OCw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUubWF0Y2goL1s7
XH1cKVxdLF0vKSkgcmV0dXJuIHBhc3MoKTsKICAgICByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsK
ICAgfQotICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb25Ob0NvbW1hKHR5cGUpIHsKLSAgICBpZiAo
dHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4gcGFzcygpOwotICAgIHJldHVybiBwYXNz
KGV4cHJlc3Npb25Ob0NvbW1hKTsKLSAgfQogCiAgIGZ1bmN0aW9uIG1heWJlb3BlcmF0b3JDb21t
YSh0eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQoZXhwcmVz
c2lvbik7CkBAIC0zMTEsNyArMzAzLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2Ny
aXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAi
OyIpIHJldHVybjsKICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIiki
LCAiY2FsbCIpLCBjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiKSwgcG9wbGV4LCBtZSk7
CiAgICAgaWYgKHR5cGUgPT0gIi4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpOwotICAgIGlm
ICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBtYXliZWV4cHJlc3Npb24s
IGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1lKTsKKyAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBj
b250KHB1c2hsZXgoIl0iKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwog
ICB9CiAgIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkgewogICAgIGlmICh0eXBlID09ICI6Iikg
cmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwpAQCAtMzczLDkgKzM2NSw2IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgaWYgKHZhbHVlID09ICI9IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29t
bWEsIHZhcmRlZjIpOwogICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQodmFyZGVmMSk7
CiAgIH0KLSAgZnVuY3Rpb24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUg
PT0gImtleXdvcmQgYiIgJiYgdmFsdWUgPT0gImVsc2UiKSByZXR1cm4gY29udChwdXNobGV4KCJm
b3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKLSAgfQogICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBl
KSB7CiAgICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGV4cGVjdCgi
OyIpLCBmb3JzcGVjMik7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVj
Mik7CkBAIC00MjcsNyArNDE2LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIGlmIChzdGF0ZS50b2tl
bml6ZSAhPSBqc1Rva2VuQ29tbWVudCAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7
CiAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAg
IGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwotICAgICAgc3RhdGUubGFzdFR5
cGUgPSB0eXBlID09ICJvcGVyYXRvciIgJiYgKGNvbnRlbnQgPT0gIisrIiB8fCBjb250ZW50ID09
ICItLSIpID8gImluY2RlYyIgOiB0eXBlOworICAgICAgc3RhdGUubGFzdFR5cGUgPSB0eXBlOwog
ICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0p
OwogICAgIH0sCiAKQEAgLTQzNSwzNSArNDI0LDI2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
amF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBpZiAo
c3RhdGUudG9rZW5pemUgPT0ganNUb2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7
CiAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0ganNUb2tlbkJhc2UpIHJldHVybiAwOwogICAg
ICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhp
Y2FsID0gc3RhdGUubGV4aWNhbDsKLSAgICAgIC8vIEtsdWRnZSB0byBwcmV2ZW50ICdtYXliZWxz
ZScgZnJvbSBibG9ja2luZyBsZXhpY2FsIHNjb3BlIHBvcHMKLSAgICAgIGZvciAodmFyIGkgPSBz
dGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICB2YXIgYyA9IHN0YXRl
LmNjW2ldOwotICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7
Ci0gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlIHx8IC9eZWxzZVxiLy50ZXN0KHRleHRB
ZnRlcikpIGJyZWFrOwotICAgICAgfQogICAgICAgaWYgKGxleGljYWwudHlwZSA9PSAic3RhdCIg
JiYgZmlyc3RDaGFyID09ICJ9IikgbGV4aWNhbCA9IGxleGljYWwucHJldjsKLSAgICAgIGlmIChz
dGF0ZW1lbnRJbmRlbnQgJiYgbGV4aWNhbC50eXBlID09ICIpIiAmJiBsZXhpY2FsLnByZXYudHlw
ZSA9PSAic3RhdCIpCi0gICAgICAgIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CiAgICAgICB2YXIg
dHlwZSA9IGxleGljYWwudHlwZSwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSB0eXBlOworICAgICAg
aWYgKHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQgIT0gbnVsbCkgeworICAgICAgICBpZiAo
dHlwZSA9PSAiKSIgJiYgbGV4aWNhbC5wcmV2ICYmIGxleGljYWwucHJldi50eXBlID09ICJzdGF0
IikgbGV4aWNhbCA9IGxleGljYWwucHJldjsKKyAgICAgICAgaWYgKGxleGljYWwudHlwZSA9PSAi
c3RhdCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgcGFyc2VyQ29uZmlnLnN0YXRlbWVudElu
ZGVudDsKKyAgICAgIH0KIAogICAgICAgaWYgKHR5cGUgPT0gInZhcmRlZiIpIHJldHVybiBsZXhp
Y2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFz
dFR5cGUgPT0gIiwiID8gNCA6IDApOwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIgJiYg
Zmlyc3RDaGFyID09ICJ7IikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQ7CiAgICAgICBlbHNlIGlm
ICh0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0Owog
ICAgICAgZWxzZSBpZiAodHlwZSA9PSAic3RhdCIpCi0gICAgICAgIHJldHVybiBsZXhpY2FsLmlu
ZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUg
PT0gIiwiID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTsKLSAgICAgIGVsc2Ug
aWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xvc2luZyAmJiBwYXJzZXJDb25maWcu
ZG91YmxlSW5kZW50U3dpdGNoICE9IGZhbHNlKQorICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRl
bnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09
ICIsIiA/IGluZGVudFVuaXQgOiAwKTsKKyAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAi
c3dpdGNoIiAmJiAhY2xvc2luZykKICAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAo
L14oPzpjYXNlfGRlZmF1bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICog
aW5kZW50VW5pdCk7CiAgICAgICBlbHNlIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNh
bC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgIGVsc2UgcmV0dXJuIGxleGljYWwu
aW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsKICAgICB9LAogCiAgICAgZWxl
Y3RyaWNDaGFyczogIjp7fSIsCi0gICAgYmxvY2tDb21tZW50U3RhcnQ6IGpzb25Nb2RlID8gbnVs
bCA6ICIvKiIsCi0gICAgYmxvY2tDb21tZW50RW5kOiBqc29uTW9kZSA/IG51bGwgOiAiKi8iLAot
ICAgIGxpbmVDb21tZW50OiBqc29uTW9kZSA/IG51bGwgOiAiLy8iLAotICAgIGZvbGQ6ICJicmFj
ZSIsCiAKLSAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/ICJqc29uIiA6ICJqYXZhc2NyaXB0IiwK
ICAgICBqc29uTW9kZToganNvbk1vZGUKICAgfTsKIH0pOwpAQCAtNDczLDYgKzQ1Myw1IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9lY21hc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENv
ZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0
Iik7CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiLCAiamF2
YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9qc29uIiwge25h
bWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwotQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJh
cHBsaWNhdGlvbi94LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7CiBD
b2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdHlwZXNjcmlwdCIsIHsgbmFtZTogImphdmFzY3Jp
cHQiLCB0eXBlc2NyaXB0OiB0cnVlIH0pOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNh
dGlvbi90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUg
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcwppbmRleCA1Mjg4
MWY3ZGZkMDlmODNjYzVjZDU2ZjkxZmQzY2E2Yjg0NjBjMDI1Li5mNTM3OWQ5NjdjOTgwMGY2ZjBk
NDRkZDhmOGE5OWYyNGU5MDZhN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29k
ZW1pcnJvci5jc3MKQEAgLTIwNSw2ICsyMDUsNyBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVN
aXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiB9CiAKIC5Db2RlTWlycm9y
LXdpZGdldCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKIH0KIAogLkNvZGVNaXJyb3Itd3Jh
cCAuQ29kZU1pcnJvci1zY3JvbGwgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWly
cm9yLmpzCmluZGV4IDlhNmE5MzIwMTAyNzk5YmY4YTU3YTUzZTFjNzc2MjliNTdhNDdhYTYuLjNh
NTkxYjIxOGJkYTc3ZWFkZTAyOTEzZTk5MzhjZTVhMWMwZjJlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1p
cnJvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKQEAgLTIzNiwxMCArMjM2LDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2Vk
KGNtKSB7Ci0gICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0sIHN0eWxlID0g
bWFwLnN0eWxlOworICAgIHZhciBzdHlsZSA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0uc3R5
bGU7CiAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBl
ci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCAiIikgKwogICAgICAgKHN0
eWxlID8gIiBjbS1rZXltYXAtIiArIHN0eWxlIDogIiIpOwotICAgIGNtLnN0YXRlLmRpc2FibGVJ
bnB1dCA9IG1hcC5kaXNhYmxlSW5wdXQ7CiAgIH0KIAogICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQo
Y20pIHsKQEAgLTMyNCw4ICszMjMsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRv
cCA9IHRvdGFsSGVpZ2h0ICsgInB4IjsKICAgICBkLmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0
aC5tYXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRP
ZmYpICsgInB4IjsKICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgodG90YWxIZWlnaHQs
IGQuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KTsKLSAgICB2YXIgbmVlZHNIID0gZC5zY3JvbGxlci5z
Y3JvbGxXaWR0aCA+IChkLnNjcm9sbGVyLmNsaWVudFdpZHRoICsgMSk7Ci0gICAgdmFyIG5lZWRz
ViA9IHNjcm9sbEhlaWdodCA+IChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCArIDEpOworICAgIHZh
ciBuZWVkc0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoID4gZC5zY3JvbGxlci5jbGllbnRXaWR0
aDsKKyAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gZC5zY3JvbGxlci5jbGllbnRIZWln
aHQ7CiAgICAgaWYgKG5lZWRzVikgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXkg
PSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNj
cm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOwpAQCAtNTEyLDExICs1MTEsOSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGRpc3BsYXkubGFzdFNp
emVDICE9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgLy8gVGhpcyBpcyBqdXN0
IGEgYm9ndXMgZm9ybXVsYSB0aGF0IGRldGVjdHMgd2hlbiB0aGUgZWRpdG9yIGlzCiAgICAgLy8g
cmVzaXplZCBvciB0aGUgZm9udCBzaXplIGNoYW5nZXMuCi0gICAgaWYgKGRpZmZlcmVudCkgewot
ICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0Owot
ICAgICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7Ci0gICAgfQorICAgIGlmIChkaWZmZXJlbnQpIGRp
c3BsYXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICBkaXNw
bGF5LnNob3dpbmdGcm9tID0gZnJvbTsgZGlzcGxheS5zaG93aW5nVG8gPSB0bzsKKyAgICBzdGFy
dFdvcmtlcihjbSwgMTAwKTsKIAogICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2
Lm9mZnNldFRvcDsKICAgICBmb3IgKHZhciBub2RlID0gZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hp
bGQsIGhlaWdodDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIGlmIChub2RlLmxpbmVP
YmopIHsKQEAgLTYwNSw5ICs2MDIsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gbGluZU4pIG5leHRJ
bnRhY3QgPSBpbnRhY3Quc2hpZnQoKTsKICAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBs
aW5lKSkgewogICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMCkgdXBkYXRlTGluZUhlaWdodChs
aW5lLCAwKTsKLSAgICAgICAgaWYgKGxpbmUud2lkZ2V0cyAmJiBjdXIucHJldmlvdXNTaWJsaW5n
KSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldOwotICAgICAgICAgIGlmICh3LnNob3dJZkhpZGRl
bikgeworICAgICAgICBpZiAobGluZS53aWRnZXRzICYmIGN1ci5wcmV2aW91c1NpYmxpbmcpIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKQorICAgICAgICAgIGlm
IChsaW5lLndpZGdldHNbaV0uc2hvd0lmSGlkZGVuKSB7CiAgICAgICAgICAgICB2YXIgcHJldiA9
IGN1ci5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgICAgICBpZiAoL3ByZS9pLnRlc3QocHJldi5u
b2RlTmFtZSkpIHsKICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBlbHQoImRpdiIsIG51bGwsIG51
bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKQEAgLTYxNSwxMSArNjExLDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQo
cHJldik7CiAgICAgICAgICAgICAgIHByZXYgPSB3cmFwOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIHdub2RlID0gcHJldi5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFt3Lm5vZGVdLCAi
Q29kZU1pcnJvci1saW5ld2lkZ2V0IikpOwotICAgICAgICAgICAgaWYgKCF3LmhhbmRsZU1vdXNl
RXZlbnRzKSB3bm9kZS5pZ25vcmVFdmVudHMgPSB0cnVlOwotICAgICAgICAgICAgcG9zaXRpb25M
aW5lV2lkZ2V0KHcsIHdub2RlLCBwcmV2LCBkaW1zKTsKKyAgICAgICAgICAgIHZhciB3bm9kZSA9
IHByZXYuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBbbGluZS53aWRnZXRzW2ldLm5vZGVdLCAiQ29k
ZU1pcnJvci1saW5ld2lkZ2V0IikpOworICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KGxp
bmUud2lkZ2V0c1tpXSwgd25vZGUsIHByZXYsIGRpbXMpOwogICAgICAgICAgIH0KLSAgICAgICAg
fQogICAgICAgfSBlbHNlIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QuZnJvbSA8PSBsaW5l
TiAmJiBuZXh0SW50YWN0LnRvID4gbGluZU4pIHsKICAgICAgICAgLy8gVGhpcyBsaW5lIGlzIGlu
dGFjdC4gU2tpcCB0byB0aGUgYWN0dWFsIG5vZGUuIFVwZGF0ZSBpdHMKICAgICAgICAgLy8gbGlu
ZSBudW1iZXIgaWYgbmVlZGVkLgpAQCAtNjYyLDI1ICs2NTYsMjUgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBpZiAocmV1c2UpIHsKICAgICAgIHJldXNlLmFsaWdu
YWJsZSA9IG51bGw7Ci0gICAgICB2YXIgaXNPayA9IHRydWUsIHdpZGdldHNTZWVuID0gMCwgaW5z
ZXJ0QmVmb3JlID0gbnVsbDsKKyAgICAgIHZhciBpc09rID0gdHJ1ZSwgd2lkZ2V0c1NlZW4gPSAw
OwogICAgICAgZm9yICh2YXIgbiA9IHJldXNlLmZpcnN0Q2hpbGQsIG5leHQ7IG47IG4gPSBuZXh0
KSB7CiAgICAgICAgIG5leHQgPSBuLm5leHRTaWJsaW5nOwogICAgICAgICBpZiAoIS9cYkNvZGVN
aXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KG4uY2xhc3NOYW1lKSkgewogICAgICAgICAgIHJldXNl
LnJlbW92ZUNoaWxkKG4pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgd2lk
Z2V0ID0gbGluZS53aWRnZXRzW2ldOworICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBmaXJzdCA9
IHRydWU7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB3
aWRnZXQgPSBsaW5lLndpZGdldHNbaV0sIGlzRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICghd2lkZ2V0LmFib3ZlKSB7IGlzRmlyc3QgPSBmaXJzdDsgZmlyc3QgPSBmYWxzZTsgfQogICAg
ICAgICAgICAgaWYgKHdpZGdldC5ub2RlID09IG4uZmlyc3RDaGlsZCkgewotICAgICAgICAgICAg
ICBpZiAoIXdpZGdldC5hYm92ZSAmJiAhaW5zZXJ0QmVmb3JlKSBpbnNlcnRCZWZvcmUgPSBuOwog
ICAgICAgICAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBuLCByZXVzZSwgZGltcyk7
CiAgICAgICAgICAgICAgICsrd2lkZ2V0c1NlZW47CisgICAgICAgICAgICAgIGlmIChpc0ZpcnN0
KSByZXVzZS5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQsIG4pOwogICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKGkgPT0gbGluZS53
aWRnZXRzLmxlbmd0aCkgeyBpc09rID0gZmFsc2U7IGJyZWFrOyB9CiAgICAgICAgIH0KICAgICAg
IH0KLSAgICAgIHJldXNlLmluc2VydEJlZm9yZShsaW5lRWxlbWVudCwgaW5zZXJ0QmVmb3JlKTsK
ICAgICAgIGlmIChpc09rICYmIHdpZGdldHNTZWVuID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsK
ICAgICAgICAgd3JhcCA9IHJldXNlOwogICAgICAgICByZXVzZS5jbGFzc05hbWUgPSBsaW5lLndy
YXBDbGFzcyB8fCAiIjsKQEAgLTcxNSw3ICs3MDksNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICBpZiAoaWVfbHQ4KSB3cmFwLnN0eWxlLnpJbmRleCA9IDI7CiAgICAg
aWYgKGxpbmUud2lkZ2V0cyAmJiB3cmFwICE9IHJldXNlKSBmb3IgKHZhciBpID0gMCwgd3MgPSBs
aW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHdpZGdldCA9IHdz
W2ldLCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lk
Z2V0Iik7Ci0gICAgICBpZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5pZ25vcmVF
dmVudHMgPSB0cnVlOwogICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgd3Jh
cCwgZGltcyk7CiAgICAgICBpZiAod2lkZ2V0LmFib3ZlKQogICAgICAgICB3cmFwLmluc2VydEJl
Zm9yZShub2RlLCBjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmIGxpbmUuaGVpZ2h0ICE9IDAgPyBn
dXR0ZXJXcmFwIDogbGluZUVsZW1lbnQpOwpAQCAtNzk4LDU5ICs3OTEsNzQgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InB4OyBoZWlnaHQ6ICIgKyAoYm90dG9tIC0gdG9wKSArICJweCIpKTsKICAgICB9CiAKLSAgICBm
dW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0FyZykgeworICAgIGZ1bmN0aW9u
IGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnLCByZXRUb3ApIHsKICAgICAgIHZhciBs
aW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUpOwotICAgICAgdmFyIGxpbmVMZW4gPSBsaW5lT2Jq
LnRleHQubGVuZ3RoOwotICAgICAgdmFyIHN0YXJ0LCBlbmQ7Ci0gICAgICBmdW5jdGlvbiBjb29y
ZHMoY2gsIGJpYXMpIHsKLSAgICAgICAgcmV0dXJuIGNoYXJDb29yZHMoY20sIFBvcyhsaW5lLCBj
aCksICJkaXYiLCBsaW5lT2JqLCBiaWFzKTsKKyAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50
ZXh0Lmxlbmd0aCwgclZhbCA9IHJldFRvcCA/IEluZmluaXR5IDogLUluZmluaXR5OworICAgICAg
ZnVuY3Rpb24gY29vcmRzKGNoKSB7CisgICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3Mo
bGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaik7CiAgICAgICB9CiAKICAgICAgIGl0ZXJhdGVCaWRp
U2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwgMCwgdG9BcmcgPT0gbnVsbCA/
IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24oZnJvbSwgdG8sIGRpcikgewotICAgICAgICB2YXIg
bGVmdFBvcyA9IGNvb3Jkcyhmcm9tLCAibGVmdCIpLCByaWdodFBvcywgbGVmdCwgcmlnaHQ7Cisg
ICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGZyb20pLCByaWdodFBvcywgbGVmdCwgcmlnaHQ7
CiAgICAgICAgIGlmIChmcm9tID09IHRvKSB7CiAgICAgICAgICAgcmlnaHRQb3MgPSBsZWZ0UG9z
OwogICAgICAgICAgIGxlZnQgPSByaWdodCA9IGxlZnRQb3MubGVmdDsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0byAtIDEsICJyaWdodCIpOworICAgICAg
ICAgIHJpZ2h0UG9zID0gY29vcmRzKHRvIC0gMSk7CiAgICAgICAgICAgaWYgKGRpciA9PSAicnRs
IikgeyB2YXIgdG1wID0gbGVmdFBvczsgbGVmdFBvcyA9IHJpZ2h0UG9zOyByaWdodFBvcyA9IHRt
cDsgfQogICAgICAgICAgIGxlZnQgPSBsZWZ0UG9zLmxlZnQ7CiAgICAgICAgICAgcmlnaHQgPSBy
aWdodFBvcy5yaWdodDsKICAgICAgICAgfQotICAgICAgICBpZiAoZnJvbUFyZyA9PSBudWxsICYm
IGZyb20gPT0gMCkgbGVmdCA9IHBsOwogICAgICAgICBpZiAocmlnaHRQb3MudG9wIC0gbGVmdFBv
cy50b3AgPiAzKSB7IC8vIERpZmZlcmVudCBsaW5lcywgZHJhdyB0b3AgcGFydAogICAgICAgICAg
IGFkZChsZWZ0LCBsZWZ0UG9zLnRvcCwgbnVsbCwgbGVmdFBvcy5ib3R0b20pOwogICAgICAgICAg
IGxlZnQgPSBwbDsKICAgICAgICAgICBpZiAobGVmdFBvcy5ib3R0b20gPCByaWdodFBvcy50b3Ap
IGFkZChsZWZ0LCBsZWZ0UG9zLmJvdHRvbSwgbnVsbCwgcmlnaHRQb3MudG9wKTsKICAgICAgICAg
fQogICAgICAgICBpZiAodG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuKSByaWdodCA9IGNs
aWVudFdpZHRoOwotICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9wIDwgc3RhcnQudG9w
IHx8IGxlZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQgPCBzdGFydC5sZWZ0
KQotICAgICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKLSAgICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQ
b3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJvdHRvbSAm
JiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKLSAgICAgICAgICBlbmQgPSByaWdodFBvczsK
KyAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKKyAg
ICAgICAgclZhbCA9IHJldFRvcCA/IE1hdGgubWluKHJpZ2h0UG9zLnRvcCwgclZhbCkgOiBNYXRo
Lm1heChyaWdodFBvcy5ib3R0b20sIHJWYWwpOwogICAgICAgICBpZiAobGVmdCA8IHBsICsgMSkg
bGVmdCA9IHBsOwogICAgICAgICBhZGQobGVmdCwgcmlnaHRQb3MudG9wLCByaWdodCAtIGxlZnQs
IHJpZ2h0UG9zLmJvdHRvbSk7CiAgICAgICB9KTsKLSAgICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0
LCBlbmQ6IGVuZH07CisgICAgICByZXR1cm4gclZhbDsKICAgICB9CiAKICAgICBpZiAoc2VsLmZy
b20ubGluZSA9PSBzZWwudG8ubGluZSkgewogICAgICAgZHJhd0ZvckxpbmUoc2VsLmZyb20ubGlu
ZSwgc2VsLmZyb20uY2gsIHNlbC50by5jaCk7CiAgICAgfSBlbHNlIHsKLSAgICAgIHZhciBmcm9t
TGluZSA9IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2Ms
IHNlbC50by5saW5lKTsKLSAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZG9jLCBm
cm9tTGluZSkgPT0gdmlzdWFsTGluZShkb2MsIHRvTGluZSk7Ci0gICAgICB2YXIgbGVmdEVuZCA9
IGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBzaW5nbGVWTGluZSA/IGZy
b21MaW5lLnRleHQubGVuZ3RoIDogbnVsbCkuZW5kOwotICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBk
cmF3Rm9yTGluZShzZWwudG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc2VsLnRvLmNo
KS5zdGFydDsKLSAgICAgIGlmIChzaW5nbGVWTGluZSkgewotICAgICAgICBpZiAobGVmdEVuZC50
b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHsKLSAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwg
bGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTsKLSAgICAgICAgICBhZGQocGwsIHJp
Z2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJp
Z2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKKyAgICAgIHZh
ciBmcm9tT2JqID0gZ2V0TGluZShkb2MsIHNlbC5mcm9tLmxpbmUpOworICAgICAgdmFyIGN1ciA9
IGZyb21PYmosIG1lcmdlZCwgcGF0aCA9IFtzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaF0sIHNp
bmdsZUxpbmU7CisgICAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGN1cikp
IHsKKyAgICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoKTsKKyAgICAgICAgcGF0aC5wdXNo
KGZvdW5kLmZyb20uY2gsIGZvdW5kLnRvLmxpbmUsIGZvdW5kLnRvLmNoKTsKKyAgICAgICAgaWYg
KGZvdW5kLnRvLmxpbmUgPT0gc2VsLnRvLmxpbmUpIHsKKyAgICAgICAgICBwYXRoLnB1c2goc2Vs
LnRvLmNoKTsKKyAgICAgICAgICBzaW5nbGVMaW5lID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorICAgICAgICBjdXIgPSBnZXRMaW5lKGRvYywgZm91bmQudG8ubGluZSk7Cisg
ICAgICB9CisKKyAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUsIG1lcmdlZCBsaW5lCisgICAgICBp
ZiAoc2luZ2xlTGluZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3Ro
OyBpICs9IDMpCisgICAgICAgICAgZHJhd0ZvckxpbmUocGF0aFtpXSwgcGF0aFtpKzFdLCBwYXRo
W2krMl0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIG1pZGRsZVRvcCwgbWlkZGxlQm90
LCB0b09iaiA9IGdldExpbmUoZG9jLCBzZWwudG8ubGluZSk7CisgICAgICAgIGlmIChzZWwuZnJv
bS5jaCkKKyAgICAgICAgICAvLyBEcmF3IHRoZSBmaXJzdCBsaW5lIG9mIHNlbGVjdGlvbi4KKyAg
ICAgICAgICBtaWRkbGVUb3AgPSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5j
aCwgbnVsbCwgZmFsc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgLy8gU2ltcGx5IGluY2x1
ZGUgaXQgaW4gdGhlIG1pZGRsZSBibG9jay4KKyAgICAgICAgICBtaWRkbGVUb3AgPSBoZWlnaHRB
dExpbmUoY20sIGZyb21PYmopIC0gZGlzcGxheS52aWV3T2Zmc2V0OworCisgICAgICAgIGlmICgh
c2VsLnRvLmNoKQorICAgICAgICAgIG1pZGRsZUJvdCA9IGhlaWdodEF0TGluZShjbSwgdG9PYmop
IC0gZGlzcGxheS52aWV3T2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgbWlkZGxlQm90
ID0gZHJhd0ZvckxpbmUoc2VsLnRvLmxpbmUsIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KHRvT2JqKSA/
IG51bGwgOiAwLCBzZWwudG8uY2gsIHRydWUpOworCisgICAgICAgIGlmIChtaWRkbGVUb3AgPCBt
aWRkbGVCb3QpIGFkZChwbCwgbWlkZGxlVG9wLCBudWxsLCBtaWRkbGVCb3QpOwogICAgICAgfQot
ICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApCi0gICAgICAgIGFkZChw
bCwgbGVmdEVuZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKICAgICB9CiAKICAgICBy
ZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZnJhZ21lbnQpOwpAQCAt
OTE2LDEyICs5MjQsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8v
IHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhl
CiAgIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFz
dCBjb250ZXh0IHRvCiAgIC8vIHBhcnNlIGNvcnJlY3RseS4KLSAgZnVuY3Rpb24gZmluZFN0YXJ0
TGluZShjbSwgbiwgcHJlY2lzZSkgeworICBmdW5jdGlvbiBmaW5kU3RhcnRMaW5lKGNtLCBuKSB7
CiAgICAgdmFyIG1pbmluZGVudCwgbWlubGluZSwgZG9jID0gY20uZG9jOwogICAgIGZvciAodmFy
IHNlYXJjaCA9IG4sIGxpbSA9IG4gLSAxMDA7IHNlYXJjaCA+IGxpbTsgLS1zZWFyY2gpIHsKICAg
ICAgIGlmIChzZWFyY2ggPD0gZG9jLmZpcnN0KSByZXR1cm4gZG9jLmZpcnN0OwogICAgICAgdmFy
IGxpbmUgPSBnZXRMaW5lKGRvYywgc2VhcmNoIC0gMSk7Ci0gICAgICBpZiAobGluZS5zdGF0ZUFm
dGVyICYmICghcHJlY2lzZSB8fCBzZWFyY2ggPD0gZG9jLmZyb250aWVyKSkgcmV0dXJuIHNlYXJj
aDsKKyAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CiAgICAgICB2YXIg
aW5kZW50ZWQgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6
ZSk7CiAgICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7
CiAgICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOwpAQCAtOTMxLDEwICs5MzksMTAgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIG1pbmxpbmU7CiAgIH0K
IAotICBmdW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShjbSwgbiwgcHJlY2lzZSkgeworICBmdW5jdGlv
biBnZXRTdGF0ZUJlZm9yZShjbSwgbikgewogICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkg
PSBjbS5kaXNwbGF5OwogICAgICAgaWYgKCFkb2MubW9kZS5zdGFydFN0YXRlKSByZXR1cm4gdHJ1
ZTsKLSAgICB2YXIgcG9zID0gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSksIHN0YXRlID0g
cG9zID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKKyAgICB2
YXIgcG9zID0gZmluZFN0YXJ0TGluZShjbSwgbiksIHN0YXRlID0gcG9zID4gZG9jLmZpcnN0ICYm
IGdldExpbmUoZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9
IHN0YXJ0U3RhdGUoZG9jLm1vZGUpOwogICAgIGVsc2Ugc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1v
ZGUsIHN0YXRlKTsKICAgICBkb2MuaXRlcihwb3MsIG4sIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTk1
NSw3ICs5NjMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gZS5vZmZzZXRMZWZ0OwogICB9CiAKLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUs
IGNoLCBkYXRhLCBiaWFzKSB7CisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwg
ZGF0YSkgewogICAgIHZhciBkaXIgPSAtMTsKICAgICBkYXRhID0gZGF0YSB8fCBtZWFzdXJlTGlu
ZShjbSwgbGluZSk7CiAKQEAgLTk2NCwxMyArOTcyLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICBpZiAocikgYnJlYWs7CiAgICAgICBpZiAoZGlyIDwgMCAmJiBw
b3MgPT0gMCkgZGlyID0gMTsKICAgICB9Ci0gICAgYmlhcyA9IHBvcyA+IGNoID8gImxlZnQiIDog
cG9zIDwgY2ggPyAicmlnaHQiIDogYmlhczsKLSAgICBpZiAoYmlhcyA9PSAibGVmdCIgJiYgci5s
ZWZ0U2lkZSkgciA9IHIubGVmdFNpZGU7Ci0gICAgZWxzZSBpZiAoYmlhcyA9PSAicmlnaHQiICYm
IHIucmlnaHRTaWRlKSByID0gci5yaWdodFNpZGU7CiAgICAgcmV0dXJuIHtsZWZ0OiBwb3MgPCBj
aCA/IHIucmlnaHQgOiByLmxlZnQsCiAgICAgICAgICAgICByaWdodDogcG9zID4gY2ggPyByLmxl
ZnQgOiByLnJpZ2h0LAotICAgICAgICAgICAgdG9wOiByLnRvcCwKLSAgICAgICAgICAgIGJvdHRv
bTogci5ib3R0b219OworICAgICAgICAgICAgdG9wOiByLnRvcCwgYm90dG9tOiByLmJvdHRvbX07
CiAgIH0KIAogICBmdW5jdGlvbiBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKQEAg
LTEwNDMsNTEgKzEwNDcsMzAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgaWYgKGllX2x0OSAmJiBkaXNwbGF5Lm1lYXN1cmUuZmlyc3QgIT0gcHJlKQogICAgICAgcmVt
b3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpOwogCi0gICAgZnVuY3Rpb24g
bWVhc3VyZVJlY3QocmVjdCkgewotICAgICAgdmFyIHRvcCA9IHJlY3QudG9wIC0gb3V0ZXIudG9w
LCBib3QgPSByZWN0LmJvdHRvbSAtIG91dGVyLnRvcDsKLSAgICAgIGlmIChib3QgPiBtYXhCb3Qp
IGJvdCA9IG1heEJvdDsKLSAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOwotICAgICAgZm9yICh2
YXIgaSA9IHZyYW5nZXMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpIC09IDIpIHsKLSAgICAgICAgdmFy
IHJ0b3AgPSB2cmFuZ2VzW2ldLCByYm90ID0gdnJhbmdlc1tpKzFdOworICAgIGZvciAodmFyIGkg
PSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gbWVhc3VyZVtpXSkg
eworICAgICAgdmFyIHNpemUgPSBnZXRSZWN0KGN1cik7CisgICAgICB2YXIgdG9wID0gTWF0aC5t
YXgoMCwgc2l6ZS50b3AgLSBvdXRlci50b3ApLCBib3QgPSBNYXRoLm1pbihzaXplLmJvdHRvbSAt
IG91dGVyLnRvcCwgbWF4Qm90KTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdnJhbmdlcy5s
ZW5ndGg7IGogKz0gMikgeworICAgICAgICB2YXIgcnRvcCA9IHZyYW5nZXNbal0sIHJib3QgPSB2
cmFuZ2VzW2orMV07CiAgICAgICAgIGlmIChydG9wID4gYm90IHx8IHJib3QgPCB0b3ApIGNvbnRp
bnVlOwogICAgICAgICBpZiAocnRvcCA8PSB0b3AgJiYgcmJvdCA+PSBib3QgfHwKICAgICAgICAg
ICAgIHRvcCA8PSBydG9wICYmIGJvdCA+PSByYm90IHx8CiAgICAgICAgICAgICBNYXRoLm1pbihi
b3QsIHJib3QpIC0gTWF0aC5tYXgodG9wLCBydG9wKSA+PSAoYm90IC0gdG9wKSA+PiAxKSB7Ci0g
ICAgICAgICAgdnJhbmdlc1tpXSA9IE1hdGgubWluKHRvcCwgcnRvcCk7Ci0gICAgICAgICAgdnJh
bmdlc1tpKzFdID0gTWF0aC5tYXgoYm90LCByYm90KTsKKyAgICAgICAgICB2cmFuZ2VzW2pdID0g
TWF0aC5taW4odG9wLCBydG9wKTsKKyAgICAgICAgICB2cmFuZ2VzW2orMV0gPSBNYXRoLm1heChi
b3QsIHJib3QpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBp
ZiAoaSA8IDApIHsgaSA9IHZyYW5nZXMubGVuZ3RoOyB2cmFuZ2VzLnB1c2godG9wLCBib3QpOyB9
Ci0gICAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAtIG91dGVyLmxlZnQsCi0gICAgICAgICAg
ICAgIHJpZ2h0OiByZWN0LnJpZ2h0IC0gb3V0ZXIubGVmdCwKLSAgICAgICAgICAgICAgdG9wOiBp
LCBib3R0b206IG51bGx9OwotICAgIH0KLSAgICBmdW5jdGlvbiBmaW5pc2hSZWN0KHJlY3QpIHsK
LSAgICAgIHJlY3QuYm90dG9tID0gdnJhbmdlc1tyZWN0LnRvcCsxXTsKLSAgICAgIHJlY3QudG9w
ID0gdnJhbmdlc1tyZWN0LnRvcF07Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaSA9IDAsIGN1cjsg
aSA8IG1lYXN1cmUubGVuZ3RoOyArK2kpIGlmIChjdXIgPSBtZWFzdXJlW2ldKSB7Ci0gICAgICB2
YXIgbm9kZSA9IGN1ciwgcmVjdCA9IG51bGw7Ci0gICAgICAvLyBBIHdpZGdldCBtaWdodCB3cmFw
LCBuZWVkcyBzcGVjaWFsIGNhcmUKLSAgICAgIGlmICgvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50
ZXN0KGN1ci5jbGFzc05hbWUpICYmIGN1ci5nZXRDbGllbnRSZWN0cykgewotICAgICAgICBpZiAo
Y3VyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMSkgbm9kZSA9IGN1ci5maXJzdENoaWxkOwotICAg
ICAgICB2YXIgcmVjdHMgPSBub2RlLmdldENsaWVudFJlY3RzKCk7Ci0gICAgICAgIGlmIChyZWN0
cy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgcmVjdCA9IGRhdGFbaV0gPSBtZWFzdXJlUmVjdChy
ZWN0c1swXSk7Ci0gICAgICAgICAgcmVjdC5yaWdodFNpZGUgPSBtZWFzdXJlUmVjdChyZWN0c1ty
ZWN0cy5sZW5ndGggLSAxXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghcmVjdCkg
cmVjdCA9IGRhdGFbaV0gPSBtZWFzdXJlUmVjdChnZXRSZWN0KG5vZGUpKTsKLSAgICAgIGlmIChj
dXIubWVhc3VyZVJpZ2h0KSByZWN0LnJpZ2h0ID0gZ2V0UmVjdChjdXIubWVhc3VyZVJpZ2h0KS5s
ZWZ0OwotICAgICAgaWYgKGN1ci5sZWZ0U2lkZSkgcmVjdC5sZWZ0U2lkZSA9IG1lYXN1cmVSZWN0
KGdldFJlY3QoY3VyLmxlZnRTaWRlKSk7CisgICAgICBpZiAoaiA9PSB2cmFuZ2VzLmxlbmd0aCkg
dnJhbmdlcy5wdXNoKHRvcCwgYm90KTsKKyAgICAgIHZhciByaWdodCA9IHNpemUucmlnaHQ7Cisg
ICAgICBpZiAoY3VyLm1lYXN1cmVSaWdodCkgcmlnaHQgPSBnZXRSZWN0KGN1ci5tZWFzdXJlUmln
aHQpLmxlZnQ7CisgICAgICBkYXRhW2ldID0ge2xlZnQ6IHNpemUubGVmdCAtIG91dGVyLmxlZnQs
IHJpZ2h0OiByaWdodCAtIG91dGVyLmxlZnQsIHRvcDogan07CiAgICAgfQogICAgIGZvciAodmFy
IGkgPSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgewot
ICAgICAgZmluaXNoUmVjdChjdXIpOwotICAgICAgaWYgKGN1ci5sZWZ0U2lkZSkgZmluaXNoUmVj
dChjdXIubGVmdFNpZGUpOwotICAgICAgaWYgKGN1ci5yaWdodFNpZGUpIGZpbmlzaFJlY3QoY3Vy
LnJpZ2h0U2lkZSk7CisgICAgICB2YXIgdnIgPSBjdXIudG9wOworICAgICAgY3VyLnRvcCA9IHZy
YW5nZXNbdnJdOyBjdXIuYm90dG9tID0gdnJhbmdlc1t2cisxXTsKICAgICB9CisKICAgICByZXR1
cm4gZGF0YTsKICAgfQogCkBAIC0xMDk4LDcgKzEwODEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNwLnRvID09IG51bGwg
fHwgc3AudG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0cnVlOwogICAgIH0K
ICAgICB2YXIgY2FjaGVkID0gIWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1lYXN1cmVtZW50KGNt
LCBsaW5lKTsKLSAgICBpZiAoY2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxp
bmUudGV4dC5sZW5ndGgsIGNhY2hlZC5tZWFzdXJlLCAicmlnaHQiKS5yaWdodDsKKyAgICBpZiAo
Y2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgsIGNh
Y2hlZC5tZWFzdXJlKS5yaWdodDsKIAogICAgIHZhciBwcmUgPSBsaW5lQ29udGVudChjbSwgbGlu
ZSk7CiAgICAgdmFyIGVuZCA9IHByZS5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRp
c3BsYXkubWVhc3VyZSkpOwpAQCAtMTExMyw5ICsxMDk2LDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBudWxsOwogICB9
CiAKLSAgZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7IHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQg
fHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0
OyB9Ci0gIGZ1bmN0aW9uIHBhZ2VTY3JvbGxZKCkgeyByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0
IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9w
OyB9Ci0KICAgLy8gQ29udGV4dCBpcyBvbmUgb2YgImxpbmUiLCAiZGl2IiAoZGlzcGxheS5saW5l
RGl2KSwgImxvY2FsIi9udWxsIChlZGl0b3IpLCBvciAicGFnZSIKICAgZnVuY3Rpb24gaW50b0Nv
b3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0KSB7CiAgICAgaWYgKGxpbmVPYmou
d2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kp
IGlmIChsaW5lT2JqLndpZGdldHNbaV0uYWJvdmUpIHsKQEAgLTExMjUsMTIgKzExMDUsMTEgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGNvbnRleHQgPT0gImxp
bmUiKSByZXR1cm4gcmVjdDsKICAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSAibG9jYWwiOwog
ICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKTsKLSAgICBpZiAoY29udGV4
dCA9PSAibG9jYWwiKSB5T2ZmICs9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7Ci0gICAgZWxzZSB5
T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoY29udGV4dCA9PSAicGFnZSIg
fHwgY29udGV4dCA9PSAid2luZG93IikgeworICAgIGlmIChjb250ZXh0ICE9ICJsb2NhbCIpIHlP
ZmYgLT0gY20uZGlzcGxheS52aWV3T2Zmc2V0OworICAgIGlmIChjb250ZXh0ID09ICJwYWdlIikg
ewogICAgICAgdmFyIGxPZmYgPSBnZXRSZWN0KGNtLmRpc3BsYXkubGluZVNwYWNlKTsKLSAgICAg
IHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xs
WSgpKTsKLSAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIg
PyAwIDogcGFnZVNjcm9sbFgoKSk7CisgICAgICB5T2ZmICs9IGxPZmYudG9wICsgKHdpbmRvdy5w
YWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkp
LnNjcm9sbFRvcCk7CisgICAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArICh3aW5kb3cucGFnZVhP
ZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3Jv
bGxMZWZ0KTsKICAgICAgIHJlY3QubGVmdCArPSB4T2ZmOyByZWN0LnJpZ2h0ICs9IHhPZmY7CiAg
ICAgfQogICAgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmY7CkBAIC0xMTQy
LDMwICsxMTIxLDMxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5j
dGlvbiBmcm9tQ29vcmRTeXN0ZW0oY20sIGNvb3JkcywgY29udGV4dCkgewogICAgIGlmIChjb250
ZXh0ID09ICJkaXYiKSByZXR1cm4gY29vcmRzOwogICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQs
IHRvcCA9IGNvb3Jkcy50b3A7Ci0gICAgLy8gRmlyc3QgbW92ZSBpbnRvICJwYWdlIiBjb29yZGlu
YXRlIHN5c3RlbQogICAgIGlmIChjb250ZXh0ID09ICJwYWdlIikgewotICAgICAgbGVmdCAtPSBw
YWdlU2Nyb2xsWCgpOwotICAgICAgdG9wIC09IHBhZ2VTY3JvbGxZKCk7Ci0gICAgfSBlbHNlIGlm
IChjb250ZXh0ID09ICJsb2NhbCIgfHwgIWNvbnRleHQpIHsKLSAgICAgIHZhciBsb2NhbEJveCA9
IGdldFJlY3QoY20uZGlzcGxheS5zaXplcik7Ci0gICAgICBsZWZ0ICs9IGxvY2FsQm94LmxlZnQ7
Ci0gICAgICB0b3AgKz0gbG9jYWxCb3gudG9wOworICAgICAgbGVmdCAtPSB3aW5kb3cucGFnZVhP
ZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3Jv
bGxMZWZ0OworICAgICAgdG9wIC09IHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcDsKICAgICB9Ci0KICAgICB2
YXIgbGluZVNwYWNlQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7Ci0gICAgcmV0
dXJuIHtsZWZ0OiBsZWZ0IC0gbGluZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNl
Qm94LnRvcH07CisgICAgbGVmdCAtPSBsaW5lU3BhY2VCb3gubGVmdDsKKyAgICB0b3AgLT0gbGlu
ZVNwYWNlQm94LnRvcDsKKyAgICBpZiAoY29udGV4dCA9PSAibG9jYWwiIHx8ICFjb250ZXh0KSB7
CisgICAgICB2YXIgZWRpdG9yQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LndyYXBwZXIpOworICAg
ICAgbGVmdCArPSBlZGl0b3JCb3gubGVmdDsKKyAgICAgIHRvcCArPSBlZGl0b3JCb3gudG9wOwor
ICAgIH0KKyAgICByZXR1cm4ge2xlZnQ6IGxlZnQsIHRvcDogdG9wfTsKICAgfQogCi0gIGZ1bmN0
aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykgeworICBmdW5j
dGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmopIHsKICAgICBpZiAoIWxp
bmVPYmopIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHJldHVybiBp
bnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3Mu
Y2gsIG51bGwsIGJpYXMpLCBjb250ZXh0KTsKKyAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNt
LCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgcG9zLmNoKSwgY29udGV4dCk7CiAg
IH0KIAogICBmdW5jdGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwg
bWVhc3VyZW1lbnQpIHsKICAgICBsaW5lT2JqID0gbGluZU9iaiB8fCBnZXRMaW5lKGNtLmRvYywg
cG9zLmxpbmUpOwogICAgIGlmICghbWVhc3VyZW1lbnQpIG1lYXN1cmVtZW50ID0gbWVhc3VyZUxp
bmUoY20sIGxpbmVPYmopOwogICAgIGZ1bmN0aW9uIGdldChjaCwgcmlnaHQpIHsKLSAgICAgIHZh
ciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIGNoLCBtZWFzdXJlbWVudCwgcmlnaHQgPyAi
cmlnaHQiIDogImxlZnQiKTsKKyAgICAgIHZhciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmos
IGNoLCBtZWFzdXJlbWVudCk7CiAgICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVs
c2UgbS5yaWdodCA9IG0ubGVmdDsKICAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxp
bmVPYmosIG0sIGNvbnRleHQpOwogICAgIH0KQEAgLTExOTEsOSArMTE3MSw4IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB2YWw7CiAgIH0KIAotICBmdW5j
dGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgeworICBmdW5jdGlvbiBQ
b3NNYXliZU91dHNpZGUobGluZSwgY2gsIG91dHNpZGUpIHsKICAgICB2YXIgcG9zID0gbmV3IFBv
cyhsaW5lLCBjaCk7Ci0gICAgcG9zLnhSZWwgPSB4UmVsOwogICAgIGlmIChvdXRzaWRlKSBwb3Mu
b3V0c2lkZSA9IHRydWU7CiAgICAgcmV0dXJuIHBvczsKICAgfQpAQCAtMTIwMiwxMCArMTE4MSwx
MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gY29vcmRz
Q2hhcihjbSwgeCwgeSkgewogICAgIHZhciBkb2MgPSBjbS5kb2M7CiAgICAgeSArPSBjbS5kaXNw
bGF5LnZpZXdPZmZzZXQ7Ci0gICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZp
cnN0LCAwLCB0cnVlLCAtMSk7CisgICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRl
KGRvYy5maXJzdCwgMCwgdHJ1ZSk7CiAgICAgdmFyIGxpbmVObyA9IGxpbmVBdEhlaWdodChkb2Ms
IHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwogICAgIGlmIChsaW5lTm8gPiBs
YXN0KQotICAgICAgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwg
Z2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlLCAxKTsKKyAgICAgIHJldHVybiBQ
b3NNYXliZU91dHNpZGUoZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5lKGRvYywgbGFz
dCkudGV4dC5sZW5ndGgsIHRydWUpOwogICAgIGlmICh4IDwgMCkgeCA9IDA7CiAKICAgICBmb3Ig
KDs7KSB7CkBAIC0xMjEzLDcgKzExOTIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGlu
ZU5vLCB4LCB5KTsKICAgICAgIHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZU9i
aik7CiAgICAgICB2YXIgbWVyZ2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5kKCk7Ci0gICAg
ICBpZiAobWVyZ2VkICYmIChmb3VuZC5jaCA+IG1lcmdlZFBvcy5mcm9tLmNoIHx8IGZvdW5kLmNo
ID09IG1lcmdlZFBvcy5mcm9tLmNoICYmIGZvdW5kLnhSZWwgPiAwKSkKKyAgICAgIGlmIChtZXJn
ZWQgJiYgZm91bmQuY2ggPj0gbWVyZ2VkUG9zLmZyb20uY2gpCiAgICAgICAgIGxpbmVObyA9IG1l
cmdlZFBvcy50by5saW5lOwogICAgICAgZWxzZQogICAgICAgICByZXR1cm4gZm91bmQ7CkBAIC0x
MjM5LDE1ICsxMjE4LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHZhciBmcm9tID0gbGluZUxlZnQobGluZU9iaiksIHRvID0gbGluZVJpZ2h0KGxpbmVPYmopOwog
ICAgIHZhciBmcm9tWCA9IGdldFgoZnJvbSksIGZyb21PdXRzaWRlID0gd3JvbmdMaW5lLCB0b1gg
PSBnZXRYKHRvKSwgdG9PdXRzaWRlID0gd3JvbmdMaW5lOwogCi0gICAgaWYgKHggPiB0b1gpIHJl
dHVybiBQb3NXaXRoSW5mbyhsaW5lTm8sIHRvLCB0b091dHNpZGUsIDEpOworICAgIGlmICh4ID4g
dG9YKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRlKGxpbmVObywgdG8sIHRvT3V0c2lkZSk7CiAgICAg
Ly8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgIGZvciAoOzsp
IHsKICAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlzdWFsbHkobGlu
ZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewotICAgICAgICB2YXIgY2ggPSB4IDwg
ZnJvbVggfHwgeCAtIGZyb21YIDw9IHRvWCAtIHggPyBmcm9tIDogdG87Ci0gICAgICAgIHZhciB4
RGlmZiA9IHggLSAoY2ggPT0gZnJvbSA/IGZyb21YIDogdG9YKTsKKyAgICAgICAgdmFyIGFmdGVy
ID0geCAtIGZyb21YIDwgdG9YIC0geCwgY2ggPSBhZnRlciA/IGZyb20gOiB0bzsKICAgICAgICAg
d2hpbGUgKGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgKytj
aDsKLSAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNoID09IGZyb20g
PyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhEaWZmIDwgMCA/IC0xIDogeERpZmYgPyAxIDogMCk7CisgICAgICAgIHZhciBwb3MgPSBQb3NN
YXliZU91dHNpZGUobGluZU5vLCBjaCwgYWZ0ZXIgPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSk7
CisgICAgICAgIHBvcy5hZnRlciA9IGFmdGVyOwogICAgICAgICByZXR1cm4gcG9zOwogICAgICAg
fQogICAgICAgdmFyIHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUgPSBmcm9tICsg
c3RlcDsKQEAgLTE0MzMsNyArMTQxMSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAvLyBzdXBwb3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24u
KQogICBmdW5jdGlvbiByZWFkSW5wdXQoY20pIHsKICAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5
LmlucHV0LCBwcmV2SW5wdXQgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jLCBz
ZWwgPSBkb2Muc2VsOwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24o
aW5wdXQpIHx8IGlzUmVhZE9ubHkoY20pIHx8IGNtLnN0YXRlLmRpc2FibGVJbnB1dCkgcmV0dXJu
IGZhbHNlOworICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5wdXQp
IHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52
YWx1ZTsKICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50
bykpIHJldHVybiBmYWxzZTsKICAgICBpZiAoaWUgJiYgIWllX2x0OSAmJiBjbS5kaXNwbGF5Lmlu
cHV0SGFzU2VsZWN0aW9uID09PSB0ZXh0KSB7CkBAIC0xNDUxLDE0ICsxNDI5LDExIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZnJvbSA9IFBvcyhmcm9tLmxpbmUs
IGZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpKTsKICAgICBlbHNlIGlmIChjbS5z
dGF0ZS5vdmVyd3JpdGUgJiYgcG9zRXEoZnJvbSwgdG8pICYmICFjbS5zdGF0ZS5wYXN0ZUluY29t
aW5nKQogICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxp
bmUpLnRleHQubGVuZ3RoLCB0by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNhbWUpKSk7Ci0KICAgICB2
YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKLSAgICB2YXIgY2hhbmdlRXZl
bnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExpbmVzKHRleHQuc2xpY2Uoc2Ft
ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNtLnN0YXRlLnBhc3RlSW5jb21p
bmcgPyAicGFzdGUiIDogIitpbnB1dCJ9OwotICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VF
dmVudCwgImVuZCIpOwotICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7Ci0g
ICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdlRXZlbnQpOworICAgIG1h
a2VDaGFuZ2UoY20uZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExpbmVzKHRl
eHQuc2xpY2Uoc2FtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBjbS5zdGF0
ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6ICIraW5wdXQifSwgImVuZCIpOwogCisgICAgY20u
Y3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKICAgICBpZiAodGV4dC5sZW5ndGggPiAx
MDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXku
cHJldklucHV0ID0gIiI7CiAgICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAg
ICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKQEAgLTE0OTksNyArMTQ3NCw2IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3Vz
ZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7CiAgICAgaWYgKGllKQogICAgICAg
b24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICAgICAgdmFyIHBv
cyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CiAgICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0
ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAg
ICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKQEAgLTE1MDcsNyArMTQ4MSw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3
b3JkLmZyb20sIHdvcmQudG8pOwogICAgICAgfSkpOwogICAgIGVsc2UKLSAgICAgIG9uKGQuc2Ny
b2xsZXIsICJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8
IGVfcHJldmVudERlZmF1bHQoZSk7IH0pOworICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNr
IiwgZV9wcmV2ZW50RGVmYXVsdCk7CiAgICAgb24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIs
IGZ1bmN0aW9uKGUpIHsKICAgICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50
RGVmYXVsdChlKTsKICAgICB9KTsKQEAgLTE1MzksMTUgKzE1MTMsMTEgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gUHJldmVudCB3cmFwcGVyIGZyb20gZXZlciBz
Y3JvbGxpbmcKICAgICBvbihkLndyYXBwZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsgZC53cmFw
cGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5zY3JvbGxMZWZ0ID0gMDsgfSk7CiAKLSAgICB2YXIg
cmVzaXplVGltZXI7CiAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7Ci0gICAgICBpZiAocmVzaXpl
VGltZXIgPT0gbnVsbCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAg
ICAgICByZXNpemVUaW1lciA9IG51bGw7Ci0gICAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2Fs
aW5nIG9wZXJhdGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuCi0gICAgICAgIGQuY2FjaGVkQ2hhcldp
ZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0ga25vd25TY3JvbGxiYXJXaWR0aCA9IG51bGw7Ci0g
ICAgICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgICAgICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFu
Z2UsIGNtKSk7Ci0gICAgICB9LCAxMDApOworICAgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxp
bmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy4KKyAgICAgIGQuY2FjaGVkQ2hhcldpZHRo
ID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKKyAgICAgIGNsZWFyQ2FjaGVzKGNtKTsKKyAg
ICAgIHJ1bkluT3AoY20sIGJpbmQocmVnQ2hhbmdlLCBjbSkpOwogICAgIH0KICAgICBvbih3aW5k
b3csICJyZXNpemUiLCBvblJlc2l6ZSk7CiAgICAgLy8gQWJvdmUgaGFuZGxlciBob2xkcyBvbiB0
byB0aGUgZWRpdG9yIGFuZCBpdHMgZGF0YSBzdHJ1Y3R1cmVzLgpAQCAtMTU2MSw3ICsxNTMxLDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgc2V0VGltZW91dCh1bnJl
Z2lzdGVyLCA1MDAwKTsKIAogICAgIG9uKGQuaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oZSkgewotICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRp
b25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkg
cmV0dXJuOworICAgICAgaWYgKGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9u
S2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgICBpZiAoZS5rZXlDb2RlID09
IDE2KSBjbS5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7CiAgICAgfSkpOwogICAgIG9uKGQuaW5wdXQs
ICJpbnB1dCIsIGJpbmQoZmFzdFBvbGwsIGNtKSk7CkBAIC0xNTcxLDcgKzE1NDEsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkLmlucHV0LCAiYmx1ciIsIGJp
bmQob25CbHVyLCBjbSkpOwogCiAgICAgZnVuY3Rpb24gZHJhZ18oZSkgewotICAgICAgaWYgKHNp
Z25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlv
bnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CisgICAgICBpZiAoY20ub3B0
aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUp
KSkgcmV0dXJuOwogICAgICAgZV9zdG9wKGUpOwogICAgIH0KICAgICBpZiAoY20ub3B0aW9ucy5k
cmFnRHJvcCkgewpAQCAtMTYxMCw3ICsxNTgwLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAg
Zm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFy
ZW50Tm9kZSkgewotICAgICAgaWYgKCFuIHx8IG4uaWdub3JlRXZlbnRzIHx8IG4ucGFyZW50Tm9k
ZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7Cisg
ICAgICBpZiAoIW4pIHJldHVybiB0cnVlOworICAgICAgaWYgKC9cYkNvZGVNaXJyb3ItKD86bGlu
ZSk/d2lkZ2V0XGIvLnRlc3Qobi5jbGFzc05hbWUpIHx8CisgICAgICAgICAgbi5wYXJlbnROb2Rl
ID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgIH0KIApAQCAtMTYzMCw3ICsxNjAyLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOwogICBmdW5jdGlv
biBvbk1vdXNlRG93bihlKSB7Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpKSByZXR1
cm47CiAgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRv
Yywgc2VsID0gZG9jLnNlbDsKICAgICBzZWwuc2hpZnQgPSBlLnNoaWZ0S2V5OwogCkBAIC0xNzU0
LDYgKzE3MjUsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGZ1
bmN0aW9uIGRvbmUoZSkgewogICAgICAgY291bnRlciA9IEluZmluaXR5OworICAgICAgdmFyIGN1
ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CisgICAgICBpZiAoY3VyKSBkb1NlbGVjdChjdXIpOwog
ICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAg
b2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7CkBAIC0xNzY5LDQxICsxNzQyLDExIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGRvY3VtZW50LCAibW91
c2V1cCIsIHVwKTsKICAgfQogCi0gIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKLSAg
ICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgdHJ5IHsgdmFyIG1YID0gZS5jbGllbnRY
LCBtWSA9IGUuY2xpZW50WTsgfQotICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICBpZiAobVggPj0gTWF0aC5mbG9vcihnZXRSZWN0KGRpc3BsYXkuZ3V0dGVycykucmlnaHQpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBpZiAoIWhhc0hhbmRs
ZXIoY20sICJndXR0ZXJDbGljayIpKSByZXR1cm4gdHJ1ZTsKLQotICAgIHZhciBsaW5lQm94ID0g
Z2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwotICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9tKSBy
ZXR1cm4gdHJ1ZTsKLSAgICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgZyA9IGRpc3BsYXkuZ3V0dGVycy5jaGlsZE5vZGVzW2ldOwotICAgICAg
aWYgKGcgJiYgZ2V0UmVjdChnKS5yaWdodCA+PSBtWCkgewotICAgICAgICB2YXIgbGluZSA9IGxp
bmVBdEhlaWdodChjbS5kb2MsIG1ZKTsKLSAgICAgICAgdmFyIGd1dHRlciA9IGNtLm9wdGlvbnMu
Z3V0dGVyc1tpXTsKLSAgICAgICAgc2lnbmFsTGF0ZXIoY20sICJndXR0ZXJDbGljayIsIGNtLCBs
aW5lLCBndXR0ZXIsIGUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICAvLyBLbHVkZ2UgdG8gd29yayBhcm91bmQgc3RyYW5nZSBJRSBi
ZWhhdmlvciB3aGVyZSBpdCdsbCBzb21ldGltZXMKLSAgLy8gcmUtZmlyZSBhIHNlcmllcyBvZiBk
cmFnLXJlbGF0ZWQgZXZlbnRzIHJpZ2h0IGFmdGVyIHRoZSBkcm9wICgjMTU1MSkKLSAgdmFyIGxh
c3REcm9wID0gMDsKLQogICBmdW5jdGlvbiBvbkRyb3AoZSkgewogICAgIHZhciBjbSA9IHRoaXM7
Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3Bs
YXksIGUpIHx8IChjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZl
bnQoY20sIGFkZFN0b3AoZSkpKSkKKyAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBl
KSB8fCAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50KGNt
LCBhZGRTdG9wKGUpKSkpCiAgICAgICByZXR1cm47CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
LSAgICBpZiAoaWUpIGxhc3REcm9wID0gK25ldyBEYXRlOwogICAgIHZhciBwb3MgPSBwb3NGcm9t
TW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgIGlm
ICghcG9zIHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm47CiAgICAgaWYgKGZpbGVzICYmIGZpbGVz
Lmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgewpAQCAtMTg0Mywx
NiArMTc4Niw0MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAg
IH0KIAorICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7CisgICAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5OworICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVu
dFk7IH0KKyAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaWYgKG1YID49IE1h
dGguZmxvb3IoZ2V0UmVjdChkaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwor
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVy
Q2xpY2siKSkgcmV0dXJuIHRydWU7CisKKyAgICB2YXIgbGluZUJveCA9IGdldFJlY3QoZGlzcGxh
eS5saW5lRGl2KTsKKyAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7Cisg
ICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgeworICAgICAgdmFy
IGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKKyAgICAgIGlmIChnICYmIGdldFJl
Y3QoZykucmlnaHQgPj0gbVgpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20u
ZG9jLCBtWSk7CisgICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07Cisg
ICAgICAgIHNpZ25hbExhdGVyKGNtLCAiZ3V0dGVyQ2xpY2siLCBjbSwgbGluZSwgZ3V0dGVyLCBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9
CisKICAgZnVuY3Rpb24gb25EcmFnU3RhcnQoY20sIGUpIHsKLSAgICBpZiAoaWUgJiYgKCFjbS5z
dGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERyb3AgPCAxMDApKSB7IGVfc3Rv
cChlKTsgcmV0dXJuOyB9Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudElu
V2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47CisgICAgaWYgKGllICYmICFjbS5zdGF0ZS5k
cmFnZ2luZ1RleHQpIHsgZV9zdG9wKGUpOyByZXR1cm47IH0KKyAgICBpZiAoZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwogCiAgICAgdmFyIHR4dCA9IGNtLmdldFNlbGVjdGlv
bigpOwogICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCB0eHQpOwogCiAgICAgLy8g
VXNlIGR1bW15IGltYWdlIGluc3RlYWQgb2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS4KICAgICAv
LyBSZWNlbnQgU2FmYXJpICh+Ni4wLjIpIGhhdmUgYSB0ZW5kZW5jeSB0byBzZWdmYXVsdCB3aGVu
IHRoaXMgaGFwcGVucywgc28gd2UgZG9uJ3QgZG8gaXQgdGhlcmUuCi0gICAgaWYgKGUuZGF0YVRy
YW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7CisgICAgaWYgKGUuZGF0YVRyYW5zZmVy
LnNldERyYWdJbWFnZSkgewogICAgICAgdmFyIGltZyA9IGVsdCgiaW1nIiwgbnVsbCwgbnVsbCwg
InBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpOwogICAgICAgaWYgKG9wZXJhKSB7
CiAgICAgICAgIGltZy53aWR0aCA9IGltZy5oZWlnaHQgPSAxOwpAQCAtMTg2MCw2ICsxODI4LDE1
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAvLyBGb3JjZSBh
IHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUg
cmVhc29uCiAgICAgICAgIGltZy5fdG9wID0gaW1nLm9mZnNldFRvcDsKICAgICAgIH0KKyAgICAg
IGlmIChzYWZhcmkpIHsKKyAgICAgICAgaWYgKGNtLmRpc3BsYXkuZHJhZ0ltZykgeworICAgICAg
ICAgIGltZyA9IGNtLmRpc3BsYXkuZHJhZ0ltZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBjbS5kaXNwbGF5LmRyYWdJbWcgPSBpbWc7CisgICAgICAgICAgaW1nLnNyYyA9ICJkYXRhOmlt
YWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFB
SUNUQUVBT3c9PSI7CisgICAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGlt
Zyk7CisgICAgICAgIH0KKyAgICAgIH0KICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFn
ZShpbWcsIDAsIDApOwogICAgICAgaWYgKG9wZXJhKSBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChpbWcpOwogICAgIH0KQEAgLTE4NzIsNyArMTg0OSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSB2
YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdmFsOwogICAgIGlmIChjbS5kaXNw
bGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxiYXJWLnNj
cm9sbFRvcCA9IHZhbDsKICAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIFtdKTsKLSAg
ICBzdGFydFdvcmtlcihjbSwgMTAwKTsKICAgfQogICBmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGNt
LCB2YWwsIGlzU2Nyb2xsZXIpIHsKICAgICBpZiAoaXNTY3JvbGxlciA/IHZhbCA9PSBjbS5kb2Mu
c2Nyb2xsTGVmdCA6IE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gdmFsKSA8IDIpIHJldHVy
bjsKQEAgLTIwMDUsMTAgKzE5ODEsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB2YXIgc3RhcnRNYXAgPSBnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApLCBuZXh0
ID0gc3RhcnRNYXAuYXV0bzsKICAgICBjbGVhclRpbWVvdXQobWF5YmVUcmFuc2l0aW9uKTsKICAg
ICBpZiAobmV4dCAmJiAhaXNNb2RpZmllcktleShlKSkgbWF5YmVUcmFuc2l0aW9uID0gc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKLSAgICAgIGlmIChnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXAp
ID09IHN0YXJ0TWFwKSB7CisgICAgICBpZiAoZ2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5TWFwKSA9
PSBzdGFydE1hcCkKICAgICAgICAgY20ub3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4
dC5jYWxsKG51bGwsIGNtKSA6IG5leHQpOwotICAgICAgICBrZXlNYXBDaGFuZ2VkKGNtKTsKLSAg
ICAgIH0KICAgICB9LCA1MCk7CiAKICAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhh
bmRsZWQgPSBmYWxzZTsKQEAgLTIwMjEsMTggKzE5OTUsMTcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAvLyAnZ28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRo
b3V0ICdTaGlmdC0nLgogICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUs
IGtleW1hcHMsIGZ1bmN0aW9uKGIpIHtyZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVl
KTt9KQogICAgICAgICAgICAgIHx8IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihi
KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gInN0cmluZyIgPyAvXmdvW0Et
Wl0vLnRlc3QoYikgOiBiLm1vdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvSGFu
ZGxlQmluZGluZyhjbSwgYik7CisgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gInN0
cmluZyIgJiYgL15nb1tBLVpdLy50ZXN0KGIpKSByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBi
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICB9IGVsc2UgewogICAgICAgaGFuZGxlZCA9IGxv
b2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRp
bmcoY20sIGIpOyB9KTsKICAgICB9CisgICAgaWYgKGhhbmRsZWQgPT0gInN0b3AiKSBoYW5kbGVk
ID0gZmFsc2U7CiAKICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKICAgICAgIHJlc3RhcnRCbGluayhjbSk7CiAgICAgICBpZiAoaWVfbHQ5KSB7IGUub2xkS2V5
Q29kZSA9IGUua2V5Q29kZTsgZS5rZXlDb2RlID0gMDsgfQotICAgICAgc2lnbmFsTGF0ZXIoY20s
ICJrZXlIYW5kbGVkIiwgY20sIG5hbWUsIGUpOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsK
ICAgfQpAQCAtMjA0Myw3ICsyMDE2LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgaWYgKGhhbmRsZWQpIHsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAg
ICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwg
Y20sICInIiArIGNoICsgIiciLCBlKTsKICAgICB9CiAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgIH0K
QEAgLTIwNTMsNyArMjAyNSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBjbSA9IHRoaXM7CiAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZvY3VzKGNt
KTsKICAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09IDI3KSB7IGUucmV0dXJuVmFsdWUgPSBmYWxz
ZTsgfQotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktleUV2
ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAg
ICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwg
YWRkU3RvcChlKSkpIHJldHVybjsKICAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKICAgICAvLyBJ
RSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGggZXNjYXBlLgogICAgIGNtLmRvYy5zZWwuc2hpZnQg
PSBjb2RlID09IDE2IHx8IGUuc2hpZnRLZXk7CkBAIC0yMDY5LDcgKzIwNDEsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsK
ICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20u
b3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChl
KSkpIHJldHVybjsKKyAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMu
b25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICB2YXIga2V5Q29kZSA9IGUu
a2V5Q29kZSwgY2hhckNvZGUgPSBlLmNoYXJDb2RlOwogICAgIGlmIChvcGVyYSAmJiBrZXlDb2Rl
ID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZh
dWx0KGUpOyByZXR1cm47fQogICAgIGlmICgoKG9wZXJhICYmICghZS53aGljaCB8fCBlLndoaWNo
IDwgMTApKSB8fCBraHRtbCkgJiYgaGFuZGxlS2V5QmluZGluZyhjbSwgZSkpIHJldHVybjsKQEAg
LTIxNjcsMTEgKzIxMzksMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgLy8gVVBEQVRJTkcKIAotICB2YXIgY2hhbmdlRW5kID0gQ29kZU1pcnJvci5jaGFuZ2VFbmQg
PSBmdW5jdGlvbihjaGFuZ2UpIHsKKyAgZnVuY3Rpb24gY2hhbmdlRW5kKGNoYW5nZSkgewogICAg
IGlmICghY2hhbmdlLnRleHQpIHJldHVybiBjaGFuZ2UudG87CiAgICAgcmV0dXJuIFBvcyhjaGFu
Z2UuZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgIGxz
dChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdl
LmZyb20uY2ggOiAwKSk7Ci0gIH07CisgIH0KIAogICAvLyBNYWtlIHN1cmUgYSBwb3NpdGlvbiB3
aWxsIGJlIHZhbGlkIGFmdGVyIHRoZSBnaXZlbiBjaGFuZ2UuCiAgIGZ1bmN0aW9uIGNsaXBQb3N0
Q2hhbmdlKGRvYywgY2hhbmdlLCBwb3MpIHsKQEAgLTIyMTMsMjEgKzIxODUsMjEgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHthbmNob3I6IGFkanVzdFBv
cyhkb2Muc2VsLmFuY2hvciksIGhlYWQ6IGFkanVzdFBvcyhkb2Muc2VsLmhlYWQpfTsKICAgfQog
Ci0gIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7CisgIGZ1bmN0
aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSkgewogICAgIHZhciBvYmogPSB7CiAgICAgICBj
YW5jZWxlZDogZmFsc2UsCiAgICAgICBmcm9tOiBjaGFuZ2UuZnJvbSwKICAgICAgIHRvOiBjaGFu
Z2UudG8sCiAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKICAgICAgIG9yaWdpbjogY2hhbmdlLm9y
aWdpbiwKKyAgICAgIHVwZGF0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIHRleHQsIG9yaWdpbikgewor
ICAgICAgICBpZiAoZnJvbSkgdGhpcy5mcm9tID0gY2xpcFBvcyhkb2MsIGZyb20pOworICAgICAg
ICBpZiAodG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOworICAgICAgICBpZiAodGV4dCkg
dGhpcy50ZXh0ID0gdGV4dDsKKyAgICAgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB0aGlz
Lm9yaWdpbiA9IG9yaWdpbjsKKyAgICAgIH0sCiAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkgeyB0
aGlzLmNhbmNlbGVkID0gdHJ1ZTsgfQogICAgIH07Ci0gICAgaWYgKHVwZGF0ZSkgb2JqLnVwZGF0
ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCB0ZXh0LCBvcmlnaW4pIHsKLSAgICAgIGlmIChmcm9tKSB0
aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7Ci0gICAgICBpZiAodG8pIHRoaXMudG8gPSBj
bGlwUG9zKGRvYywgdG8pOwotICAgICAgaWYgKHRleHQpIHRoaXMudGV4dCA9IHRleHQ7Ci0gICAg
ICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3JpZ2luID0gb3JpZ2luOwotICAgIH07
CiAgICAgc2lnbmFsKGRvYywgImJlZm9yZUNoYW5nZSIsIGRvYywgb2JqKTsKICAgICBpZiAoZG9j
LmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLmNtLCBvYmopOwogCkBAIC0y
MjQ0LDcgKzIyMTYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9
CiAKICAgICBpZiAoaGFzSGFuZGxlcihkb2MsICJiZWZvcmVDaGFuZ2UiKSB8fCBkb2MuY20gJiYg
aGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVDaGFuZ2UiKSkgewotICAgICAgY2hhbmdlID0gZmls
dGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB0cnVlKTsKKyAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5n
ZShkb2MsIGNoYW5nZSk7CiAgICAgICBpZiAoIWNoYW5nZSkgcmV0dXJuOwogICAgIH0KIApAQCAt
MjI4MywyMyArMjI1NSwxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwogICAgIHZhciBldmVudCA9ICh0eXBlID09ICJ1bmRv
IiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5wb3AoKTsKICAgICBpZiAoIWV2ZW50KSByZXR1
cm47CisgICAgaGlzdC5kaXJ0eUNvdW50ZXIgKz0gdHlwZSA9PSAidW5kbyIgPyAtMSA6IDE7CiAK
ICAgICB2YXIgYW50aSA9IHtjaGFuZ2VzOiBbXSwgYW5jaG9yQmVmb3JlOiBldmVudC5hbmNob3JB
ZnRlciwgaGVhZEJlZm9yZTogZXZlbnQuaGVhZEFmdGVyLAotICAgICAgICAgICAgICAgIGFuY2hv
ckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZlbnQuaGVhZEJlZm9yZSwK
LSAgICAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259OworICAgICAgICAg
ICAgICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZlbnQu
aGVhZEJlZm9yZX07CiAgICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC51bmRvbmUgOiBoaXN0LmRv
bmUpLnB1c2goYW50aSk7Ci0gICAgaGlzdC5nZW5lcmF0aW9uID0gZXZlbnQuZ2VuZXJhdGlvbiB8
fCArK2hpc3QubWF4R2VuZXJhdGlvbjsKLQotICAgIHZhciBmaWx0ZXIgPSBoYXNIYW5kbGVyKGRv
YywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9y
ZUNoYW5nZSIpOwogCiAgICAgZm9yICh2YXIgaSA9IGV2ZW50LmNoYW5nZXMubGVuZ3RoIC0gMTsg
aSA+PSAwOyAtLWkpIHsKICAgICAgIHZhciBjaGFuZ2UgPSBldmVudC5jaGFuZ2VzW2ldOwogICAg
ICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7Ci0gICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXJDaGFu
Z2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkgewotICAgICAgICAodHlwZSA9PSAidW5kbyIgPyBoaXN0
LmRvbmUgOiBoaXN0LnVuZG9uZSkubGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotCiAgICAgICBhbnRpLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2Ms
IGNoYW5nZSkpOwogCiAgICAgICB2YXIgYWZ0ZXIgPSBpID8gY29tcHV0ZVNlbEFmdGVyQ2hhbmdl
KGRvYywgY2hhbmdlLCBudWxsKQpAQCAtMjU2Myw5ICsyNTI3LDkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKSB7
CiAgICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbS5kb2Muc2VsLmhlYWQs
IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luKTsKICAgICBpZiAoIWNtLnN0YXRlLmZvY3Vz
ZWQpIHJldHVybjsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGdldFJlY3Qo
ZGlzcGxheS5zaXplciksIGRvU2Nyb2xsID0gbnVsbDsKLSAgICBpZiAoY29vcmRzLnRvcCArIGJv
eC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoY29vcmRzLmJvdHRvbSAr
IGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOworICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBudWxsLCBw
VG9wID0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKKyAgICBpZiAoY29vcmRzLnRvcCArIHBUb3Ag
KyBib3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOworICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0
b20gKyBwVG9wICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CiAgICAgaWYgKGRv
U2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHsKICAgICAgIHZhciBoaWRkZW4gPSBkaXNwbGF5
LmN1cnNvci5zdHlsZS5kaXNwbGF5ID09ICJub25lIjsKICAgICAgIGlmIChoaWRkZW4pIHsKQEAg
LTI2MDMsMTEgKzI1NjcsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IH0KIAogICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKSB7
Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChj
bS5kaXNwbGF5KTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0ID0gcGFkZGluZ1Rv
cChkaXNwbGF5KTsKKyAgICB5MSArPSBwdDsgeTIgKz0gcHQ7CiAgICAgaWYgKHkxIDwgMCkgeTEg
PSAwOwogICAgIHZhciBzY3JlZW4gPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIHNj
cm9sbGVyQ3V0T2ZmLCBzY3JlZW50b3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCwgcmVz
dWx0ID0ge307CiAgICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVy
dChkaXNwbGF5KTsKLSAgICB2YXIgYXRUb3AgPSB5MSA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0g
eTIgPiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luOworICAgIHZhciBhdFRvcCA9IHkxIDwgcHQgKyAx
MCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9tIC0gMTA7CiAgICAgaWYgKHkxIDwgc2Ny
ZWVudG9wKSB7CiAgICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogeTE7CiAgICAg
fSBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNjcmVlbikgewpAQCAtMjY0NCw3ICsyNjA5LDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gaW5kZW50
TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7CiAgICAgdmFyIGRvYyA9IGNtLmRvYzsKLSAg
ICBpZiAoaG93ID09IG51bGwpIGhvdyA9ICJhZGQiOworICAgIGlmICghaG93KSBob3cgPSAiYWRk
IjsKICAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgIGlmICghY20uZG9jLm1vZGUuaW5k
ZW50KSBob3cgPSAicHJldiI7CiAgICAgICBlbHNlIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3Jl
KGNtLCBuKTsKQEAgLTI2NjcsOCArMjYzMiw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNtLm9wdGlvbnMuaW5kZW50
VW5pdDsKICAgICB9IGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSB7CiAgICAgICBpbmRlbnRh
dGlvbiA9IGN1clNwYWNlIC0gY20ub3B0aW9ucy5pbmRlbnRVbml0OwotICAgIH0gZWxzZSBpZiAo
dHlwZW9mIGhvdyA9PSAibnVtYmVyIikgewotICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAr
IGhvdzsKICAgICB9CiAgICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7
CiAKQEAgLTI3NTcsNyArMjcyMCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICBmdW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBvcykgewogICAgIHZhciBzdGFydCA9IHBv
cy5jaCwgZW5kID0gcG9zLmNoOwogICAgIGlmIChsaW5lKSB7Ci0gICAgICBpZiAoKHBvcy54UmVs
IDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5k
OworICAgICAgaWYgKHBvcy5hZnRlciA9PT0gZmFsc2UgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAt
LXN0YXJ0OyBlbHNlICsrZW5kOwogICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0
YXJ0KTsKICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyKSA/IGlzV29yZENo
YXIKICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJu
IC9ccy8udGVzdChjaCk7fQpAQCAtMjc5OCw3ICsyNzYxLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHsKICAgICAg
IHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAobWFwc1tpXSA9PSBtYXAgfHwgKHR5cGVv
ZiBtYXBzW2ldICE9ICJzdHJpbmciICYmIG1hcHNbaV0ubmFtZSA9PSBtYXApKSB7CisgICAgICAg
IGlmICgodHlwZW9mIG1hcCA9PSAic3RyaW5nIiA/IG1hcHNbaV0ubmFtZSA6IG1hcHNbaV0pID09
IG1hcCkgewogICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC0yODE0LDggKzI3NzcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICByZW1vdmVPdmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rp
b24oc3BlYykgewogICAgICAgdmFyIG92ZXJsYXlzID0gdGhpcy5zdGF0ZS5vdmVybGF5czsKICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
dmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVjOwotICAgICAgICBpZiAoY3VyID09IHNwZWMg
fHwgdHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgY3VyLm5hbWUgPT0gc3BlYykgeworICAgICAg
ICBpZiAob3ZlcmxheXNbaV0ubW9kZVNwZWMgPT0gc3BlYykgewogICAgICAgICAgIG92ZXJsYXlz
LnNwbGljZShpLCAxKTsKICAgICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKICAgICAgICAg
ICByZWdDaGFuZ2UodGhpcyk7CkBAIC0yODI1LDcgKzI3ODcsNyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICB9KSwKIAogICAgIGluZGVudExpbmU6IG9wZXJhdGlvbihu
dWxsLCBmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKLSAgICAgIGlmICh0eXBlb2YgZGly
ICE9ICJzdHJpbmciICYmIHR5cGVvZiBkaXIgIT0gIm51bWJlciIpIHsKKyAgICAgIGlmICh0eXBl
b2YgZGlyICE9ICJzdHJpbmciKSB7CiAgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gdGhp
cy5vcHRpb25zLnNtYXJ0SW5kZW50ID8gInNtYXJ0IiA6ICJwcmV2IjsKICAgICAgICAgZWxzZSBk
aXIgPSBkaXIgPyAiYWRkIiA6ICJzdWJ0cmFjdCI7CiAgICAgICB9CkBAIC0yODQwLDEwICsyODAy
LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgLy8gRmV0Y2gg
dGhlIHBhcnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MK
ICAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29t
cGxldGlvbikuCi0gICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVjaXNlKSB7CisgICAg
Z2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zKSB7CiAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CiAg
ICAgICBwb3MgPSBjbGlwUG9zKGRvYywgcG9zKTsKLSAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRl
QmVmb3JlKHRoaXMsIHBvcy5saW5lLCBwcmVjaXNlKSwgbW9kZSA9IHRoaXMuZG9jLm1vZGU7Cisg
ICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGluZSksIG1vZGUgPSB0
aGlzLmRvYy5tb2RlOwogICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpOwog
ICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50ZXh0LCB0aGlzLm9wdGlv
bnMudGFiU2l6ZSk7CiAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBvcy5jaCAmJiAhc3RyZWFt
LmVvbCgpKSB7CkBAIC0yODU4LDM3ICsyODIwLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwogICAgIH0sCiAKLSAgICBn
ZXRUb2tlblR5cGVBdDogZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMu
ZG9jLCBwb3MpOwotICAgICAgdmFyIHN0eWxlcyA9IGdldExpbmVTdHlsZXModGhpcywgZ2V0TGlu
ZSh0aGlzLmRvYywgcG9zLmxpbmUpKTsKLSAgICAgIHZhciBiZWZvcmUgPSAwLCBhZnRlciA9IChz
dHlsZXMubGVuZ3RoIC0gMSkgLyAyLCBjaCA9IHBvcy5jaDsKLSAgICAgIGlmIChjaCA9PSAwKSBy
ZXR1cm4gc3R5bGVzWzJdOwotICAgICAgZm9yICg7OykgewotICAgICAgICB2YXIgbWlkID0gKGJl
Zm9yZSArIGFmdGVyKSA+PiAxOwotICAgICAgICBpZiAoKG1pZCA/IHN0eWxlc1ttaWQgKiAyIC0g
MV0gOiAwKSA+PSBjaCkgYWZ0ZXIgPSBtaWQ7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlc1ttaWQg
KiAyICsgMV0gPCBjaCkgYmVmb3JlID0gbWlkICsgMTsKLSAgICAgICAgZWxzZSByZXR1cm4gc3R5
bGVzW21pZCAqIDIgKyAyXTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0TW9kZUF0OiBmdW5j
dGlvbihwb3MpIHsKLSAgICAgIHZhciBtb2RlID0gdGhpcy5kb2MubW9kZTsKLSAgICAgIGlmICgh
bW9kZS5pbm5lck1vZGUpIHJldHVybiBtb2RlOwotICAgICAgcmV0dXJuIENvZGVNaXJyb3IuaW5u
ZXJNb2RlKG1vZGUsIHRoaXMuZ2V0VG9rZW5BdChwb3MpLnN0YXRlKS5tb2RlOwotICAgIH0sCi0K
LSAgICBnZXRIZWxwZXI6IGZ1bmN0aW9uKHBvcywgdHlwZSkgewotICAgICAgaWYgKCFoZWxwZXJz
Lmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm47Ci0gICAgICB2YXIgaGVscCA9IGhlbHBlcnNb
dHlwZV0sIG1vZGUgPSB0aGlzLmdldE1vZGVBdChwb3MpOwotICAgICAgcmV0dXJuIG1vZGVbdHlw
ZV0gJiYgaGVscFttb2RlW3R5cGVdXSB8fAotICAgICAgICBtb2RlLmhlbHBlclR5cGUgJiYgaGVs
cFttb2RlLmhlbHBlclR5cGVdIHx8Ci0gICAgICAgIGhlbHBbbW9kZS5uYW1lXTsKLSAgICB9LAot
Ci0gICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgeworICAgIGdldFN0
YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKICAg
ICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5maXJzdCArIGRvYy5z
aXplIC0gMTogbGluZSk7Ci0gICAgICByZXR1cm4gZ2V0U3RhdGVCZWZvcmUodGhpcywgbGluZSAr
IDEsIHByZWNpc2UpOworICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxpbmUgKyAx
KTsKICAgICB9LAogCiAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkgewpA
QCAtMjkwOCwxOSArMjg0Myw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApOwog
ICAgIH0sCiAKLSAgICBsaW5lQXRIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCwgbW9kZSkgewotICAg
ICAgaGVpZ2h0ID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIHt0b3A6IGhlaWdodCwgbGVmdDogMH0s
IG1vZGUgfHwgInBhZ2UiKS50b3A7Ci0gICAgICByZXR1cm4gbGluZUF0SGVpZ2h0KHRoaXMuZG9j
LCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7Ci0gICAgfSwKLSAgICBoZWlnaHRB
dExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUpIHsKLSAgICAgIHZhciBlbmQgPSBmYWxzZSwgbGFz
dCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7Ci0gICAgICBpZiAobGluZSA8
IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7Ci0gICAgICBlbHNlIGlmIChs
aW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQotICAgICAgdmFyIGxpbmVP
YmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKLSAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0
ZW0odGhpcywgZ2V0TGluZSh0aGlzLmRvYywgbGluZSksIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2Rl
IHx8ICJwYWdlIikudG9wICsKLSAgICAgICAgKGVuZCA/IGxpbmVPYmouaGVpZ2h0IDogMCk7Ci0g
ICAgfSwKLQogICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRI
ZWlnaHQodGhpcy5kaXNwbGF5KTsgfSwKICAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigp
IHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkpOyB9LAogCkBAIC0yOTQ5LDcgKzI4NzEs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjaGFu
Z2VMaW5lKHRoaXMsIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICB2YXIgcHJvcCA9
IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8g
ImJnQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAgICAgIGlmICghbGluZVtwcm9wXSkgbGluZVtw
cm9wXSA9IGNsczsKLSAgICAgICAgZWxzZSBpZiAobmV3IFJlZ0V4cCgiKD86XnxcXHMpIiArIGNs
cyArICIoPzokfFxccykiKS50ZXN0KGxpbmVbcHJvcF0pKSByZXR1cm4gZmFsc2U7CisgICAgICAg
IGVsc2UgaWYgKG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiIikudGVzdChsaW5lW3Byb3Bd
KSkgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlIGxpbmVbcHJvcF0gKz0gIiAiICsgY2xzOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0pOwpAQCAtMjk2MiwxMCArMjg4NCw5IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoIWN1cikgcmV0dXJu
IGZhbHNlOwogICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgbGluZVtwcm9wXSA9IG51bGw7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgIHZhciBmb3VuZCA9IGN1ci5tYXRjaChuZXcgUmVn
RXhwKCIoPzpefFxccyspIiArIGNscyArICIoPzokfFxccyspIikpOwotICAgICAgICAgIGlmICgh
Zm91bmQpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBm
b3VuZFswXS5sZW5ndGg7Ci0gICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3Vu
ZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gIiIgOiAiICIp
ICsgY3VyLnNsaWNlKGVuZCkgfHwgbnVsbDsKKyAgICAgICAgICB2YXIgdXBkID0gY3VyLnJlcGxh
Y2UobmV3IFJlZ0V4cCgiXiIgKyBjbHMgKyAiXFxiXFxzKnxcXHMqXFxiIiArIGNscyArICJcXGIi
KSwgIiIpOworICAgICAgICAgIGlmICh1cGQgPT0gY3VyKSByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgbGluZVtwcm9wXSA9IHVwZCB8fCBudWxsOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgfSk7CkBAIC0zMDEzLDcgKzI5MzQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNw
YWNlKQogICAgICAgICAgIGxlZnQgPSBoc3BhY2UgLSBub2RlLm9mZnNldFdpZHRoOwogICAgICAg
fQotICAgICAgbm9kZS5zdHlsZS50b3AgPSB0b3AgKyAicHgiOworICAgICAgbm9kZS5zdHlsZS50
b3AgPSAodG9wICsgcGFkZGluZ1RvcChkaXNwbGF5KSkgKyAicHgiOwogICAgICAgbm9kZS5zdHls
ZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgaWYgKGhvcml6ID09ICJyaWdo
dCIpIHsKICAgICAgICAgbGVmdCA9IGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9m
ZnNldFdpZHRoOwpAQCAtMzEyMyw2ICszMDQ0LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICB9LAogCisgICAgb246IGZ1bmN0
aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9LAorICAgIG9mZjogZnVuY3Rpb24odHlw
ZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9LAorCiAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihm
KXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKTt9LAogCiAgICAgcmVmcmVzaDogb3BlcmF0aW9uKG51
bGwsIGZ1bmN0aW9uKCkgewpAQCAtMzE0Niw3ICszMDcwLDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVy
biB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7fSwKICAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlv
bigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyczt9CiAgIH07Ci0gIGV2ZW50TWl4aW4oQ29k
ZU1pcnJvcik7CiAKICAgLy8gT1BUSU9OIERFRkFVTFRTCiAKQEAgLTMyNzEsNyArMzE5NCw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9OwogCiAgIENvZGVNaXJyb3Iu
Z2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKLSAgICB2YXIgc3BlYyA9IENvZGVN
aXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7CisgICAgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1v
ZGUoc3BlYyk7CiAgICAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1lXTsKICAgICBpZiAo
IW1mYWN0b3J5KSByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWlu
Iik7CiAgICAgdmFyIG1vZGVPYmogPSBtZmFjdG9yeShvcHRpb25zLCBzcGVjKTsKQEAgLTMyODQs
NyArMzIwNyw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQog
ICAgIH0KICAgICBtb2RlT2JqLm5hbWUgPSBzcGVjLm5hbWU7Ci0KICAgICByZXR1cm4gbW9kZU9i
ajsKICAgfTsKIApAQCAtMzMxMiwxMiArMzIzNCw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICB2YXIgaW5pdEhvb2tzID0gW107CiAgIENvZGVNaXJyb3IuZGVmaW5lSW5p
dEhvb2sgPSBmdW5jdGlvbihmKSB7aW5pdEhvb2tzLnB1c2goZik7fTsKIAotICB2YXIgaGVscGVy
cyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9OwotICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVy
ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFsdWUpIHsKLSAgICBpZiAoIWhlbHBlcnMuaGFzT3du
UHJvcGVydHkodHlwZSkpIGhlbHBlcnNbdHlwZV0gPSBDb2RlTWlycm9yW3R5cGVdID0ge307Ci0g
ICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwotICB9OwotCiAgIC8vIE1PREUgU1RBVEUg
SEFORExJTkcKIAogICAvLyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHN0YXRl
LiBFeHBvcnRlZCBiZWNhdXNlIG1vZGVzCkBAIC0zMzYzLDEwICszMjc5LDYgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxp
bmU7CiAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhsLCAwKSwgUG9zKGwpLCAiK2RlbGV0
ZSIpOwogICAgIH0sCi0gICAgZGVsTGluZUxlZnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIg
Y3VyID0gY20uZ2V0Q3Vyc29yKCk7Ci0gICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhjdXIu
bGluZSwgMCksIGN1ciwgIitkZWxldGUiKTsKLSAgICB9LAogICAgIHVuZG86IGZ1bmN0aW9uKGNt
KSB7Y20udW5kbygpO30sCiAgICAgcmVkbzogZnVuY3Rpb24oY20pIHtjbS5yZWRvKCk7fSwKICAg
ICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20uZmly
c3RMaW5lKCksIDApKTt9LApAQCAtMzQ2Miw3ICszMzc0LDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxl
ZnQiOiAiZ29MaW5lU3RhcnQiLCAiQ21kLVJpZ2h0IjogImdvTGluZUVuZCIsICJBbHQtQmFja3Nw
YWNlIjogImRlbEdyb3VwQmVmb3JlIiwKICAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbEdy
b3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNtZC1TIjogInNhdmUi
LCAiQ21kLUYiOiAiZmluZCIsCiAgICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1H
IjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6
ICJyZXBsYWNlQWxsIiwKLSAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRl
bnRNb3JlIiwgIkNtZC1CYWNrc3BhY2UiOiAiZGVsTGluZUxlZnQiLAorICAgICJDbWQtWyI6ICJp
bmRlbnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLAogICAgIGZhbGx0aHJvdWdoOiBbImJh
c2ljIiwgImVtYWNzeSJdCiAgIH07CiAgIGtleU1hcFsiZGVmYXVsdCJdID0gbWFjID8ga2V5TWFw
Lm1hY0RlZmF1bHQgOiBrZXlNYXAucGNEZWZhdWx0OwpAQCAtMzUwMSw3ICszNDEzLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1hcHMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBkb25lID0gbG9va3VwKG1hcHNbaV0pOwot
ICAgICAgaWYgKGRvbmUpIHJldHVybiBkb25lICE9ICJzdG9wIjsKKyAgICAgIGlmIChkb25lKSBy
ZXR1cm4gZG9uZTsKICAgICB9CiAgIH0KICAgZnVuY3Rpb24gaXNNb2RpZmllcktleShldmVudCkg
ewpAQCAtMzY1NSw3ICszNTY3LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgdGhpcy5kb2MgPSBkb2M7CiAgIH0KICAgQ29kZU1pcnJvci5UZXh0TWFya2VyID0gVGV4
dE1hcmtlcjsKLSAgZXZlbnRNaXhpbihUZXh0TWFya2VyKTsKIAogICBUZXh0TWFya2VyLnByb3Rv
dHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewogICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVk
KSByZXR1cm47CkBAIC0zNjg0LDcgKzM1OTUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBpZiAobWluICE9IG51bGwgJiYgY20pIHJlZ0NoYW5nZShjbSwgbWluLCBt
YXggKyAxKTsKICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7CiAgICAgdGhpcy5leHBsaWNpdGx5
Q2xlYXJlZCA9IHRydWU7Ci0gICAgaWYgKHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0
KSB7CisgICAgaWYgKHRoaXMuY29sbGFwc2VkICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7CiAgICAg
ICB0aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlOwogICAgICAgaWYgKGNtKSByZUNoZWNrU2VsZWN0
aW9uKGNtKTsKICAgICB9CkBAIC0zNzQ3LDcgKzM2NTgsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkgewogICAgICAgbWFy
a2VyLmNvbGxhcHNlZCA9IHRydWU7CiAgICAgICBtYXJrZXIucmVwbGFjZWRXaXRoID0gZWx0KCJz
cGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1pcnJvci13aWRnZXQiKTsKLSAgICAg
IGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgbWFya2VyLnJlcGxhY2VkV2l0aC5pZ25v
cmVFdmVudHMgPSB0cnVlOwogICAgIH0KICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgc2F3Q29s
bGFwc2VkU3BhbnMgPSB0cnVlOwogCkBAIC0zNzkwLDcgKzM3MDAsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgaWYgKGNtKSB7CiAgICAgICBpZiAodXBk
YXRlTWF4TGluZSkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7Ci0gICAgICBpZiAobWFy
a2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFy
a2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCisgICAgICBpZiAobWFya2VyLmNsYXNz
TmFtZSB8fCBtYXJrZXIuc3RhcnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNv
bGxhcHNlZCkKICAgICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxKTsK
ICAgICAgIGlmIChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtKTsKICAgICB9CkBA
IC0zODA4LDcgKzM3MTgsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICB9CiAgIH0KICAgQ29kZU1pcnJvci5TaGFyZWRUZXh0TWFya2VyID0gU2hhcmVkVGV4dE1hcmtl
cjsKLSAgZXZlbnRNaXhpbihTaGFyZWRUZXh0TWFya2VyKTsKIAogICBTaGFyZWRUZXh0TWFya2Vy
LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewogICAgIGlmICh0aGlzLmV4cGxpY2l0bHlD
bGVhcmVkKSByZXR1cm47CkBAIC0zOTIyLDEzICszODMxLDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHNhbWVM
aW5lICYmIGZpcnN0KSB7Ci0gICAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkg
emVyby1sZW5ndGggc3BhbnMKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3Ro
OyArK2kpCi0gICAgICAgIGlmIChmaXJzdFtpXS5mcm9tICE9IG51bGwgJiYgZmlyc3RbaV0uZnJv
bSA9PSBmaXJzdFtpXS50byAmJiBmaXJzdFtpXS5tYXJrZXIudHlwZSAhPSAiYm9va21hcmsiKQot
ICAgICAgICAgIGZpcnN0LnNwbGljZShpLS0sIDEpOwotICAgICAgaWYgKCFmaXJzdC5sZW5ndGgp
IGZpcnN0ID0gbnVsbDsKLSAgICB9CiAKICAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07CiAg
ICAgaWYgKCFzYW1lTGluZSkgewpAQCAtNDAyMyw3ICszOTI1LDYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBzcCA9IHNwc1tpXTsKICAgICAgIGlmICghc3AubWFy
a2VyLmNvbGxhcHNlZCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSByZXR1
cm4gdHJ1ZTsKLSAgICAgIGlmIChzcC5tYXJrZXIucmVwbGFjZWRXaXRoKSBjb250aW51ZTsKICAg
ICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlz
SGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTQwMzcsNyArMzkzOCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgbGluZS5tYXJr
ZWRTcGFucy5sZW5ndGg7ICsraSkgewogICAgICAgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldOwot
ICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtlci5yZXBsYWNlZFdpdGgg
JiYgc3AuZnJvbSA9PSBzcGFuLnRvICYmCisgICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAm
JiBzcC5mcm9tID09IHNwYW4udG8gJiYKICAgICAgICAgICAoc3AubWFya2VyLmluY2x1c2l2ZUxl
ZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmCiAgICAgICAgICAgbGluZUlzSGlk
ZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQwNjEsMTIg
KzM5NjIsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIExJTkUg
V0lER0VUUwogCiAgIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVu
Y3Rpb24oY20sIG5vZGUsIG9wdGlvbnMpIHsKLSAgICBpZiAob3B0aW9ucykgZm9yICh2YXIgb3B0
IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCisgICAgZm9yICh2
YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCiAgICAg
ICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07CiAgICAgdGhpcy5jbSA9IGNtOwogICAgIHRoaXMu
bm9kZSA9IG5vZGU7CiAgIH07Ci0gIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7CiAgIGZ1bmN0aW9u
IHdpZGdldE9wZXJhdGlvbihmKSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgdmFy
IHdpdGhPcCA9ICF0aGlzLmNtLmN1ck9wOwpAQCAtNDA4MSw5ICszOTgxLDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKG5vID09IG51bGwgfHwgIXdzKSByZXR1
cm47CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgaWYgKHdzW2ldID09
IHRoaXMpIHdzLnNwbGljZShpLS0sIDEpOwogICAgIGlmICghd3MubGVuZ3RoKSB0aGlzLmxpbmUu
d2lkZ2V0cyA9IG51bGw7Ci0gICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZSh0aGlz
LmNtLCB0aGlzLmxpbmUpIDwgdGhpcy5jbS5kb2Muc2Nyb2xsVG9wOwogICAgIHVwZGF0ZUxpbmVI
ZWlnaHQodGhpcy5saW5lLCBNYXRoLm1heCgwLCB0aGlzLmxpbmUuaGVpZ2h0IC0gd2lkZ2V0SGVp
Z2h0KHRoaXMpKSk7Ci0gICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQb3ModGhpcy5j
bSwgMCwgLXRoaXMuaGVpZ2h0KTsKICAgICByZWdDaGFuZ2UodGhpcy5jbSwgbm8sIG5vICsgMSk7
CiAgIH0pOwogICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gd2lkZ2V0T3BlcmF0aW9u
KGZ1bmN0aW9uKCkgewpAQCAtNDEwNywxMiArNDAwNSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRnZXQoY20sIG5vZGUs
IG9wdGlvbnMpOwogICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSBjbS5kaXNwbGF5LmFsaWduV2lk
Z2V0cyA9IHRydWU7CiAgICAgY2hhbmdlTGluZShjbSwgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7
Ci0gICAgICB2YXIgd2lkZ2V0cyA9IGxpbmUud2lkZ2V0cyB8fCAobGluZS53aWRnZXRzID0gW10p
OwotICAgICAgaWYgKHdpZGdldC5pbnNlcnRBdCA9PSBudWxsKSB3aWRnZXRzLnB1c2god2lkZ2V0
KTsKLSAgICAgIGVsc2Ugd2lkZ2V0cy5zcGxpY2UoTWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAx
LCBNYXRoLm1heCgwLCB3aWRnZXQuaW5zZXJ0QXQpKSwgMCwgd2lkZ2V0KTsKKyAgICAgIChsaW5l
LndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKSkucHVzaCh3aWRnZXQpOwogICAgICAgd2lk
Z2V0LmxpbmUgPSBsaW5lOwogICAgICAgaWYgKCFsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSB8
fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWln
aHRBdExpbmUoY20sIGxpbmUpIDwgY20uZG9jLnNjcm9sbFRvcDsKKyAgICAgICAgdmFyIGFib3Zl
VmlzaWJsZSA9IGhlaWdodEF0TGluZShjbSwgbGluZSkgPCBjbS5kaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbFRvcDsKICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIHdp
ZGdldEhlaWdodCh3aWRnZXQpKTsKICAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3Jv
bGxQb3MoY20sIDAsIHdpZGdldC5oZWlnaHQpOwogICAgICAgfQpAQCAtNDEyNSwxMiArNDAyMSwx
MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBMaW5lIG9iamVj
dHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogICAvLyBo
aWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuCi0gIHZhciBMaW5lID0gQ29kZU1p
cnJvci5MaW5lID0gZnVuY3Rpb24odGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7
Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICBhdHRhY2hNYXJrZWRTcGFucyh0aGlzLCBtYXJr
ZWRTcGFucyk7Ci0gICAgdGhpcy5oZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVp
Z2h0KHRoaXMpIDogMTsKLSAgfTsKLSAgZXZlbnRNaXhpbihMaW5lKTsKKyAgZnVuY3Rpb24gbWFr
ZUxpbmUodGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7CisgICAgdmFyIGxpbmUg
PSB7dGV4dDogdGV4dH07CisgICAgYXR0YWNoTWFya2VkU3BhbnMobGluZSwgbWFya2VkU3BhbnMp
OworICAgIGxpbmUuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodChsaW5l
KSA6IDE7CisgICAgcmV0dXJuIGxpbmU7CisgIH0KIAogICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxp
bmUsIHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgIGxpbmUudGV4dCA9
IHRleHQ7CkBAIC00MTU0LDcgKzQwNTAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYpIHsKICAg
ICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0dGVuU3BhbnM7CiAgICAgaWYgKGZsYXR0ZW5T
cGFucyA9PSBudWxsKSBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKLSAg
ICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHlsZSA9IG51bGw7CisgICAgdmFyIGN1clRleHQgPSAi
IiwgY3VyU3R5bGUgPSBudWxsOwogICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRl
eHQsIGNtLm9wdGlvbnMudGFiU2l6ZSksIHN0eWxlOwogICAgIGlmICh0ZXh0ID09ICIiICYmIG1v
ZGUuYmxhbmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CiAgICAgd2hpbGUgKCFzdHJlYW0u
ZW9sKCkpIHsKQEAgLTQxNjYsMTMgKzQwNjIsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9IG1vZGUudG9rZW4oc3Ry
ZWFtLCBzdGF0ZSk7CiAgICAgICB9Ci0gICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHls
ZSAhPSBzdHlsZSkgewotICAgICAgICBpZiAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIGYoc3Ry
ZWFtLnN0YXJ0LCBjdXJTdHlsZSk7Ci0gICAgICAgIGN1clN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyBj
dXJTdHlsZSA9IHN0eWxlOwotICAgICAgfQorICAgICAgdmFyIHN1YnN0ciA9IHN0cmVhbS5jdXJy
ZW50KCk7CiAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOworICAgICAgaWYgKCFmbGF0
dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHsKKyAgICAgICAgaWYgKGN1clRleHQpIGYo
Y3VyVGV4dCwgY3VyU3R5bGUpOworICAgICAgICBjdXJUZXh0ID0gc3Vic3RyOyBjdXJTdHlsZSA9
IHN0eWxlOworICAgICAgfSBlbHNlIGN1clRleHQgPSBjdXJUZXh0ICsgc3Vic3RyOwogICAgIH0K
LSAgICBpZiAoY3VyU3RhcnQgPCBzdHJlYW0ucG9zKSBmKHN0cmVhbS5wb3MsIGN1clN0eWxlKTsK
KyAgICBpZiAoY3VyVGV4dCkgZihjdXJUZXh0LCBjdXJTdHlsZSk7CiAgIH0KIAogICBmdW5jdGlv
biBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSkgewpAQCAtNDE4MCwyNCArNDA3NywyNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBtb2RlL292ZXJsYXlz
IHRoYXQgaXQgaXMgYmFzZWQgb24gKGZvciBlYXN5IGludmFsaWRhdGlvbikuCiAgICAgdmFyIHN0
ID0gW2NtLnN0YXRlLm1vZGVHZW5dOwogICAgIC8vIENvbXB1dGUgdGhlIGJhc2UgYXJyYXkgb2Yg
c3R5bGVzCi0gICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1
bmN0aW9uKGVuZCwgc3R5bGUpIHtzdC5wdXNoKGVuZCwgc3R5bGUpO30pOworICAgIHJ1bk1vZGUo
Y20sIGxpbmUudGV4dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBmdW5jdGlvbih0eHQsIHN0eWxlKSB7
c3QucHVzaCh0eHQsIHN0eWxlKTt9KTsKIAogICAgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0
eWxlIGFycmF5LgogICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVu
Z3RoOyArK28pIHsKLSAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkg
PSAxLCBhdCA9IDA7Ci0gICAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwg
dHJ1ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkgewotICAgICAgICB2YXIgc3RhcnQgPSBpOworICAg
ICAgdmFyIG92ZXJsYXkgPSBjbS5zdGF0ZS5vdmVybGF5c1tvXSwgaSA9IDE7CisgICAgICBydW5N
b2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgdHJ1ZSwgZnVuY3Rpb24odHh0LCBzdHls
ZSkgeworICAgICAgICB2YXIgc3RhcnQgPSBpLCBsZW4gPSB0eHQubGVuZ3RoOwogICAgICAgICAv
LyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5k
IHRoYXQgaSBwb2ludHMgYXQgaXQKLSAgICAgICAgd2hpbGUgKGF0IDwgZW5kKSB7Ci0gICAgICAg
ICAgdmFyIGlfZW5kID0gc3RbaV07Ci0gICAgICAgICAgaWYgKGlfZW5kID4gZW5kKQotICAgICAg
ICAgICAgc3Quc3BsaWNlKGksIDEsIGVuZCwgc3RbaSsxXSwgaV9lbmQpOworICAgICAgICB3aGls
ZSAobGVuKSB7CisgICAgICAgICAgdmFyIGN1ciA9IHN0W2ldLCBsZW5fID0gY3VyLmxlbmd0aDsK
KyAgICAgICAgICBpZiAobGVuXyA8PSBsZW4pIHsKKyAgICAgICAgICAgIGxlbiAtPSBsZW5fOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdC5zcGxpY2UoaSwgMSwgY3VyLnNsaWNl
KDAsIGxlbiksIHN0W2krMV0sIGN1ci5zbGljZShsZW4pKTsKKyAgICAgICAgICAgIGxlbiA9IDA7
CisgICAgICAgICAgfQogICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICBhdCA9IE1hdGgubWlu
KGVuZCwgaV9lbmQpOwogICAgICAgICB9CiAgICAgICAgIGlmICghc3R5bGUpIHJldHVybjsKICAg
ICAgICAgaWYgKG92ZXJsYXkub3BhcXVlKSB7Ci0gICAgICAgICAgc3Quc3BsaWNlKHN0YXJ0LCBp
IC0gc3RhcnQsIGVuZCwgc3R5bGUpOworICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0
YXJ0LCB0eHQsIHN0eWxlKTsKICAgICAgICAgICBpID0gc3RhcnQgKyAyOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgIGZvciAoOyBzdGFydCA8IGk7IHN0YXJ0ICs9IDIpIHsKQEAgLTQyMzcs
MzEgKzQxMzcsMzcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAog
ICBmdW5jdGlvbiBsaW5lQ29udGVudChjbSwgcmVhbExpbmUsIG1lYXN1cmUpIHsKLSAgICB2YXIg
bWVyZ2VkLCBsaW5lID0gcmVhbExpbmUsIGVtcHR5ID0gdHJ1ZTsKLSAgICB3aGlsZSAobWVyZ2Vk
ID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpCisgICAgdmFyIG1lcmdlZCwgbGluZSA9IHJl
YWxMaW5lLCBsaW5lQmVmb3JlLCBzYXdCZWZvcmUsIHNpbXBsZSA9IHRydWU7CisgICAgd2hpbGUg
KG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpKSB7CisgICAgICBzaW1wbGUgPSBm
YWxzZTsKICAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbWVyZ2VkLmZpbmQoKS5mcm9tLmxp
bmUpOworICAgICAgaWYgKCFsaW5lQmVmb3JlKSBsaW5lQmVmb3JlID0gbGluZTsKKyAgICB9CiAK
ICAgICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdCgicHJlIiksIGNvbDogMCwgcG9zOiAwLCBkaXNw
bGF5OiAhbWVhc3VyZSwKLSAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiBudWxsLCBtZWFzdXJl
ZFNvbWV0aGluZzogZmFsc2UsIGNtOiBjbX07CisgICAgICAgICAgICAgICAgICAgbWVhc3VyZTog
bnVsbCwgYWRkZWRPbmU6IGZhbHNlLCBjbTogY219OwogICAgIGlmIChsaW5lLnRleHRDbGFzcykg
YnVpbGRlci5wcmUuY2xhc3NOYW1lID0gbGluZS50ZXh0Q2xhc3M7CiAKICAgICBkbyB7Ci0gICAg
ICBpZiAobGluZS50ZXh0KSBlbXB0eSA9IGZhbHNlOwogICAgICAgYnVpbGRlci5tZWFzdXJlID0g
bGluZSA9PSByZWFsTGluZSAmJiBtZWFzdXJlOwogICAgICAgYnVpbGRlci5wb3MgPSAwOwogICAg
ICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkZXIubWVhc3VyZSA/IGJ1aWxkVG9rZW5NZWFzdXJl
IDogYnVpbGRUb2tlbjsKICAgICAgIGlmICgoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24o
ImxpbmVXcmFwcGluZyIpKQogICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlblNw
bGl0U3BhY2VzKGJ1aWxkZXIuYWRkVG9rZW4pOwotICAgICAgdmFyIG5leHQgPSBpbnNlcnRMaW5l
Q29udGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSk7Ci0gICAgICBp
ZiAobWVhc3VyZSAmJiBsaW5lID09IHJlYWxMaW5lICYmICFidWlsZGVyLm1lYXN1cmVkU29tZXRo
aW5nKSB7CisgICAgICBpZiAobWVhc3VyZSAmJiBzYXdCZWZvcmUgJiYgbGluZSAhPSByZWFsTGlu
ZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkgewogICAgICAgICBtZWFzdXJlWzBdID0gYnVpbGRlci5w
cmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAg
ICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7CisgICAgICAgIGJ1aWxkZXIu
YWRkZWRPbmUgPSB0cnVlOworICAgICAgfQorICAgICAgdmFyIG5leHQgPSBpbnNlcnRMaW5lQ29u
dGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSk7CisgICAgICBzYXdC
ZWZvcmUgPSBsaW5lID09IGxpbmVCZWZvcmU7CisgICAgICBpZiAobmV4dCkgeworICAgICAgICBs
aW5lID0gZ2V0TGluZShjbS5kb2MsIG5leHQudG8ubGluZSk7CisgICAgICAgIHNpbXBsZSA9IGZh
bHNlOwogICAgICAgfQotICAgICAgaWYgKG5leHQpIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbmV4
dC50by5saW5lKTsKICAgICB9IHdoaWxlIChuZXh0KTsKIAotICAgIGlmIChtZWFzdXJlICYmICFi
dWlsZGVyLm1lYXN1cmVkU29tZXRoaW5nICYmICFtZWFzdXJlWzBdKQotICAgICAgbWVhc3VyZVsw
XSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVtcHR5ID8gZWx0KCJzcGFuIiwgIlx1MDBhMCIp
IDogemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKKyAgICBpZiAobWVhc3Vy
ZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkKKyAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5h
cHBlbmRDaGlsZChzaW1wbGUgPyBlbHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJvV2lkdGhFbGVt
ZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwogICAgIGlmICghYnVpbGRlci5wcmUuZmlyc3RDaGls
ZCAmJiAhbGluZUlzSGlkZGVuKGNtLmRvYywgcmVhbExpbmUpKQogICAgICAgYnVpbGRlci5wcmUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MDBhMCIpKTsKIApAQCAtNDI4
NSw3ICs0MTkxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAog
ICB2YXIgdG9rZW5TcGVjaWFsQ2hhcnMgPSAvW1x0XHUwMDAwLVx1MDAxOVx1MDBhZFx1MjAwYlx1
MjAyOFx1MjAyOVx1RkVGRl0vZzsKLSAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0
LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7CisgIGZ1bmN0aW9uIGJ1aWxk
VG9rZW4oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7CiAgICAg
aWYgKCF0ZXh0KSByZXR1cm47CiAgICAgaWYgKCF0b2tlblNwZWNpYWxDaGFycy50ZXN0KHRleHQp
KSB7CiAgICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDsKQEAgLTQzMTgsOSArNDIyNCw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGZ1bGxTdHls
ZSA9IHN0eWxlIHx8ICIiOwogICAgICAgaWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBzdGFy
dFN0eWxlOwogICAgICAgaWYgKGVuZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7Ci0gICAg
ICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSk7Ci0gICAgICBp
ZiAodGl0bGUpIHRva2VuLnRpdGxlID0gdGl0bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5wcmUu
YXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxk
KGVsdCgic3BhbiIsIFtjb250ZW50XSwgZnVsbFN0eWxlKSk7CiAgICAgfQogICAgIGJ1aWxkZXIu
cHJlLmFwcGVuZENoaWxkKGNvbnRlbnQpOwogICB9CkBAIC00MzM1LDExICs0MjM5LDkgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9IGVsc2UgaWYgKGkgJiYgd3Jh
cHBpbmcgJiYgc3BhbkFmZmVjdHNXcmFwcGluZyh0ZXh0LCBpKSkgewogICAgICAgICBidWlsZGVy
LnByZS5hcHBlbmRDaGlsZChlbHQoIndiciIpKTsKICAgICAgIH0KLSAgICAgIHZhciBvbGQgPSBi
dWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdOwogICAgICAgdmFyIHNwYW4gPSBidWlsZGVyLm1l
YXN1cmVbYnVpbGRlci5wb3NdID0KICAgICAgICAgYnVpbGRUb2tlbihidWlsZGVyLCBjaCwgc3R5
bGUsCiAgICAgICAgICAgICAgICAgICAgc3RhcnQgJiYgc3RhcnRTdHlsZSwgaSA9PSB0ZXh0Lmxl
bmd0aCAtIDEgJiYgZW5kU3R5bGUpOwotICAgICAgaWYgKG9sZCkgc3Bhbi5sZWZ0U2lkZSA9IG9s
ZC5sZWZ0U2lkZSB8fCBvbGQ7CiAgICAgICAvLyBJbiBJRSBzaW5nbGUtc3BhY2Ugbm9kZXMgd3Jh
cCBkaWZmZXJlbnRseSB0aGFuIHNwYWNlcwogICAgICAgLy8gZW1iZWRkZWQgaW4gbGFyZ2VyIHRl
eHQgbm9kZXMsIGV4Y2VwdCB3aGVuIHNldCB0bwogICAgICAgLy8gd2hpdGUtc3BhY2U6IG5vcm1h
bCAoaXNzdWUgIzEyNjgpLgpAQCAtNDM0OCw3ICs0MjUwLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICJub3JtYWwi
OwogICAgICAgYnVpbGRlci5wb3MgKz0gY2gubGVuZ3RoOwogICAgIH0KLSAgICBpZiAodGV4dC5s
ZW5ndGgpIGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOworICAgIGlmICh0ZXh0Lmxl
bmd0aCkgYnVpbGRlci5hZGRlZE9uZSA9IHRydWU7CiAgIH0KIAogICBmdW5jdGlvbiBidWlsZFRv
a2VuU3BsaXRTcGFjZXMoaW5uZXIpIHsKQEAgLTQzNTgsMjcgKzQyNjAsMTggQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBvdXQgKz0gIiAiOwogICAgICAgcmV0dXJu
IG91dDsKICAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBz
dGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpIHsKLSAgICAgIHJldHVybiBpbm5lcihidWlsZGVy
LCB0ZXh0LnJlcGxhY2UoLyB7Myx9Lywgc3BsaXQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5
bGUsIHRpdGxlKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0
YXJ0U3R5bGUsIGVuZFN0eWxlKSB7CisgICAgICByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dC5y
ZXBsYWNlKC8gezMsfS8sIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKTsKICAg
ICB9OwogICB9CiAKLSAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUs
IG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7Ci0gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQg
JiYgbWFya2VyLnJlcGxhY2VkV2l0aDsKKyAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1
aWxkZXIsIHNpemUsIHdpZGdldCkgewogICAgIGlmICh3aWRnZXQpIHsKICAgICAgIGlmICghYnVp
bGRlci5kaXNwbGF5KSB3aWRnZXQgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOwogICAgICAgYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQod2lkZ2V0KTsKLSAgICAgIGlmIChidWlsZGVyLm1lYXN1cmUp
IHsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRl
ci5wb3NdID0gd2lkZ2V0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciBlbHQgPSBi
dWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gemVyb1dpZHRoRWxlbWVudChidWlsZGVyLmNt
LmRpc3BsYXkubWVhc3VyZSk7Ci0gICAgICAgICAgaWYgKG1hcmtlci50eXBlICE9ICJib29rbWFy
ayIgfHwgbWFya2VyLmluc2VydExlZnQpCi0gICAgICAgICAgICBidWlsZGVyLnByZS5pbnNlcnRC
ZWZvcmUoZWx0LCB3aWRnZXQpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1aWxkZXIu
cHJlLmFwcGVuZENoaWxkKGVsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5tZWFzdXJl
ZFNvbWV0aGluZyA9IHRydWU7CisgICAgICBpZiAoYnVpbGRlci5tZWFzdXJlICYmIHNpemUpIHsK
KyAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IHdpZGdldDsKKyAgICAgICAg
YnVpbGRlci5hZGRlZE9uZSA9IHRydWU7CiAgICAgICB9CiAgICAgfQogICAgIGJ1aWxkZXIucG9z
ICs9IHNpemU7CkBAIC00Mzg3LDE4ICs0MjgwLDE5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAvLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBs
aW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nCiAgIC8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291
bnQuCiAgIGZ1bmN0aW9uIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIHN0eWxlcykg
ewotICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQs
IGF0ID0gMDsKKyAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOwogICAgIGlmICghc3Bh
bnMpIHsKICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9MikKLSAg
ICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0
eWxlc1tpXSksIHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsxXSkpOworICAgICAgICBidWlsZGVyLmFk
ZFRva2VuKGJ1aWxkZXIsIHN0eWxlc1tpXSwgc3R5bGVUb0NsYXNzKHN0eWxlc1tpKzFdKSk7CiAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBwb3Mg
PSAwLCBpID0gMSwgdGV4dCA9ICIiLCBzdHlsZTsKLSAgICB2YXIgbmV4dENoYW5nZSA9IDAsIHNw
YW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgdGl0bGUsIGNvbGxhcHNlZDsK
KyAgICB2YXIgYWxsVGV4dCA9IGxpbmUudGV4dCwgbGVuID0gYWxsVGV4dC5sZW5ndGg7CisgICAg
dmFyIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gIiIsIHN0eWxlOworICAgIHZhciBuZXh0Q2hhbmdl
ID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCBjb2xsYXBzZWQ7
CiAgICAgZm9yICg7OykgewogICAgICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSB7IC8vIFVwZGF0
ZSBjdXJyZW50IG1hcmtlciBzZXQKLSAgICAgICAgc3BhblN0eWxlID0gc3BhbkVuZFN0eWxlID0g
c3BhblN0YXJ0U3R5bGUgPSB0aXRsZSA9ICIiOworICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5k
U3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9ICIiOwogICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBu
ZXh0Q2hhbmdlID0gSW5maW5pdHk7CiAgICAgICAgIHZhciBmb3VuZEJvb2ttYXJrID0gbnVsbDsK
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewpAQCAtNDQw
OCwxNyArNDMwMiwxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgIGlmIChtLmNsYXNzTmFtZSkgc3BhblN0eWxlICs9ICIgIiArIG0uY2xhc3NOYW1lOwog
ICAgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0
U3R5bGUgKz0gIiAiICsgbS5zdGFydFN0eWxlOwogICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUg
JiYgc3AudG8gPT0gbmV4dENoYW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7
Ci0gICAgICAgICAgICBpZiAobS50aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsKLSAg
ICAgICAgICAgIGlmIChtLmNvbGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb2xsYXBzZWQubWFy
a2VyLnNpemUgPCBtLnNpemUpKQorICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29s
bGFwc2VkIHx8IGNvbGxhcHNlZC5tYXJrZXIud2lkdGggPCBtLndpZHRoKSkKICAgICAgICAgICAg
ICAgY29sbGFwc2VkID0gc3A7CiAgICAgICAgICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYm
IG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7CiAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJv
bTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNw
LmZyb20gPT0gcG9zICYmIG0ucmVwbGFjZWRXaXRoKSBmb3VuZEJvb2ttYXJrID0gbTsKKyAgICAg
ICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS5yZXBs
YWNlZFdpdGgpCisgICAgICAgICAgICBmb3VuZEJvb2ttYXJrID0gbS5yZXBsYWNlZFdpdGg7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkg
PT0gcG9zKSB7CiAgICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBz
ZWQudG8gPT0gbnVsbCA/IGxlbiA6IGNvbGxhcHNlZC50bykgLSBwb3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQuZnJvbSAhPSBudWxsICYm
IGNvbGxhcHNlZC5tYXJrZXIucmVwbGFjZWRXaXRoKTsKICAgICAgICAgICBpZiAoY29sbGFwc2Vk
LnRvID09IG51bGwpIHJldHVybiBjb2xsYXBzZWQubWFya2VyLmZpbmQoKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoZm91bmRCb29rbWFyayAmJiAhY29sbGFwc2VkKSBidWlsZENvbGxhcHNlZFNw
YW4oYnVpbGRlciwgMCwgZm91bmRCb29rbWFyayk7CkBAIC00NDMyLDE0ICs0MzI2LDEzIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIGlmICghY29sbGFwc2Vk
KSB7CiAgICAgICAgICAgICB2YXIgdG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2Uo
MCwgdXB0byAtIHBvcykgOiB0ZXh0OwogICAgICAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWls
ZGVyLCB0b2tlblRleHQsIHN0eWxlID8gc3R5bGUgKyBzcGFuU3R5bGUgOiBzcGFuU3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRl
eHQubGVuZ3RoID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiAiIiwgdGl0bGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0
Lmxlbmd0aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIpOwogICAgICAgICAgIH0K
ICAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9z
KTsgcG9zID0gdXB0bzsgYnJlYWs7fQogICAgICAgICAgIHBvcyA9IGVuZDsKICAgICAgICAgICBz
cGFuU3RhcnRTdHlsZSA9ICIiOwogICAgICAgICB9Ci0gICAgICAgIHRleHQgPSBhbGxUZXh0LnNs
aWNlKGF0LCBhdCA9IHN0eWxlc1tpKytdKTsKLSAgICAgICAgc3R5bGUgPSBzdHlsZVRvQ2xhc3Mo
c3R5bGVzW2krK10pOworICAgICAgICB0ZXh0ID0gc3R5bGVzW2krK107IHN0eWxlID0gc3R5bGVU
b0NsYXNzKHN0eWxlc1tpKytdKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQ0NjIsNyArNDM1
NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgLy8gVGhpcyBp
cyBhIHdob2xlLWxpbmUgcmVwbGFjZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAg
Ly8gc3VyZSBsaW5lIG9iamVjdHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgog
ICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkg
PCBlOyArK2kpCi0gICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3Io
aSksIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUodGV4dFtp
XSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUs
IGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7CiAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3Zl
KGZyb20ubGluZSwgbmxpbmVzKTsKICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQo
ZnJvbS5saW5lLCBhZGRlZCk7CkBAIC00NDcxLDggKzQzNjQsOCBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRl
eHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRv
LmNoKSwgbGFzdFNwYW5zKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAodmFyIGFkZGVk
ID0gW10sIGkgPSAxLCBlID0gdGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAg
IGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0
KSk7Ci0gICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4
dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgICBh
ZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkp
OworICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQu
c2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICAgIHVwZGF0
ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwg
c3BhbnNGb3IoMCkpOwogICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsK
ICAgICAgIH0KQEAgLTQ0ODMsNyArNDM3Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwg
ZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUs
IGxhc3RUZXh0ICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAg
ICBmb3IgKHZhciBpID0gMSwgZSA9IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7
ICsraSkKLSAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwg
ZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBz
cGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgIGlmIChubGluZXMgPiAxKSBkb2Mu
cmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOwogICAgICAgZG9jLmluc2VydChmcm9t
LmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgfQpAQCAtNDYyNiwxMiArNDUxOSwxMSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9j
KSkgcmV0dXJuIG5ldyBEb2ModGV4dCwgbW9kZSwgZmlyc3RMaW5lKTsKICAgICBpZiAoZmlyc3RM
aW5lID09IG51bGwpIGZpcnN0TGluZSA9IDA7CiAKLSAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMs
IFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIiwgbnVsbCldKV0pOworICAgIEJyYW5jaENodW5r
LmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW21ha2VMaW5lKCIiLCBudWxsKV0pXSk7CiAgICAg
dGhpcy5maXJzdCA9IGZpcnN0TGluZTsKICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xs
TGVmdCA9IDA7CiAgICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlOwogICAgIHRoaXMuaGlzdG9yeSA9
IG1ha2VIaXN0b3J5KCk7Ci0gICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxOwogICAgIHRoaXMu
ZnJvbnRpZXIgPSBmaXJzdExpbmU7CiAgICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7
CiAgICAgdGhpcy5zZWwgPSB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgaGVhZDogc3RhcnQsIGFu
Y2hvcjogc3RhcnQsIHNoaWZ0OiBmYWxzZSwgZXh0ZW5kOiBmYWxzZSwgZ29hbENvbHVtbjogbnVs
bH07CkBAIC00NjkxLDExICs0NTgzLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhpcywg
bGluZSkpIHJldHVybiBnZXRMaW5lKHRoaXMsIGxpbmUpO30sCiAgICAgZ2V0TGluZU51bWJlcjog
ZnVuY3Rpb24obGluZSkge3JldHVybiBsaW5lTm8obGluZSk7fSwKIAotICAgIGdldExpbmVIYW5k
bGVWaXN1YWxTdGFydDogZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKHR5cGVvZiBsaW5lID09
ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZSh0aGlzLCBsaW5lKTsKLSAgICAgIHJldHVybiB2aXN1
YWxMaW5lKHRoaXMsIGxpbmUpOwotICAgIH0sCi0KICAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkg
e3JldHVybiB0aGlzLnNpemU7fSwKICAgICBmaXJzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0
aGlzLmZpcnN0O30sCiAgICAgbGFzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0
ICsgdGhpcy5zaXplIC0gMTt9LApAQCAtNDczNywyNSArNDYyNCwyMCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5OwogICAg
ICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0LnVuZG9uZS5sZW5n
dGh9OwogICAgIH0sCi0gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3Rvcnkg
PSBtYWtlSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7fSwKKyAgICBjbGVhckhp
c3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7fSwKIAogICAg
IG1hcmtDbGVhbjogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRo
aXMuY2hhbmdlR2VuZXJhdGlvbigpOwotICAgIH0sCi0gICAgY2hhbmdlR2VuZXJhdGlvbjogZnVu
Y3Rpb24oKSB7CisgICAgICB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVyID0gMDsKICAgICAgIHRo
aXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7Ci0gICAg
ICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb247Ci0gICAgfSwKLSAgICBpc0NsZWFuOiBm
dW5jdGlvbiAoZ2VuKSB7Ci0gICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0g
KGdlbiB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbik7CiAgICAgfSwKKyAgICBpc0NsZWFuOiBmdW5j
dGlvbiAoKSB7cmV0dXJuIHRoaXMuaGlzdG9yeS5kaXJ0eUNvdW50ZXIgPT0gMDt9LAogCiAgICAg
Z2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5
QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLAogICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0
b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9OwogICAgIH0sCiAgICAgc2V0SGlzdG9yeTog
ZnVuY3Rpb24oaGlzdERhdGEpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbWFr
ZUhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pOworICAgICAgdmFyIGhpc3QgPSB0
aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpOwogICAgICAgaGlzdC5kb25lID0gaGlzdERhdGEu
ZG9uZS5zbGljZSgwKTsKICAgICAgIGhpc3QudW5kb25lID0gaGlzdERhdGEudW5kb25lLnNsaWNl
KDApOwogICAgIH0sCkBAIC00ODY2LDggKzQ3NDgsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5
KHRoaXMuZG9jLCBhcmd1bWVudHMpO307CiAgICAgfSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7CiAK
LSAgZXZlbnRNaXhpbihEb2MpOwotCiAgIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFy
ZWRIaXN0T25seSkgewogICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhp
c3QpIHsKICAgICAgIGlmIChkb2MubGlua2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5r
ZWQubGVuZ3RoOyArK2kpIHsKQEAgLTQ5ODcsNyArNDg2Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIEhJU1RPUlkKIAotICBmdW5jdGlvbiBtYWtlSGlzdG9y
eShzdGFydEdlbikgeworICBmdW5jdGlvbiBtYWtlSGlzdG9yeSgpIHsKICAgICByZXR1cm4gewog
ICAgICAgLy8gQXJyYXlzIG9mIGhpc3RvcnkgZXZlbnRzLiBEb2luZyBzb21ldGhpbmcgYWRkcyBh
biBldmVudCB0bwogICAgICAgLy8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMg
ZXZlbnRzIGZyb20gZG9uZSB0bwpAQCAtNDk5Nyw3ICs0ODc3LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAvLyBldmVudAogICAgICAgbGFzdFRpbWU6IDAsIGxh
c3RPcDogbnVsbCwgbGFzdE9yaWdpbjogbnVsbCwKICAgICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xl
YW4oKSBtZXRob2QKLSAgICAgIGdlbmVyYXRpb246IHN0YXJ0R2VuIHx8IDEsIG1heEdlbmVyYXRp
b246IHN0YXJ0R2VuIHx8IDEKKyAgICAgIGRpcnR5Q291bnRlcjogMAogICAgIH07CiAgIH0KIApA
QCAtNTAxMSw4ICs0ODkxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IH0KIAogICBmdW5jdGlvbiBoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkgewot
ICAgIHZhciBmcm9tID0geyBsaW5lOiBjaGFuZ2UuZnJvbS5saW5lLCBjaDogY2hhbmdlLmZyb20u
Y2ggfTsKLSAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBmcm9tLCB0bzogY2hhbmdlRW5kKGNo
YW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07Cisg
ICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hh
bmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTsKICAg
ICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hh
bmdlLnRvLmxpbmUgKyAxKTsKICAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24oZG9jKSB7YXR0
YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50
by5saW5lICsgMSk7fSwgdHJ1ZSk7CiAgICAgcmV0dXJuIGhpc3RDaGFuZ2U7CkBAIC01MDQyLDEz
ICs0OTIxLDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0gZWxz
ZSB7CiAgICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuCiAgICAg
ICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0s
Ci0gICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9uLAogICAgICAgICAgICAg
IGFuY2hvckJlZm9yZTogZG9jLnNlbC5hbmNob3IsIGhlYWRCZWZvcmU6IGRvYy5zZWwuaGVhZCwK
ICAgICAgICAgICAgICBhbmNob3JBZnRlcjogc2VsQWZ0ZXIuYW5jaG9yLCBoZWFkQWZ0ZXI6IHNl
bEFmdGVyLmhlYWR9OwogICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTsKLSAgICAgIGhpc3QuZ2Vu
ZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9uOwogICAgICAgd2hpbGUgKGhpc3QuZG9uZS5s
ZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkKICAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7CisgICAg
ICBpZiAoaGlzdC5kaXJ0eUNvdW50ZXIgPCAwKQorICAgICAgICAvLyBUaGUgdXNlciBoYXMgbWFk
ZSBhIGNoYW5nZSBhZnRlciB1bmRvaW5nIHBhc3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuCisgICAg
ICAgIC8vIFdlIGNhbiBuZXZlciBnZXQgYmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBt
YXJrQ2xlYW4oKSBpcyBjYWxsZWQuCisgICAgICAgIGhpc3QuZGlydHlDb3VudGVyID0gTmFOOwor
ICAgICAgZWxzZQorICAgICAgICBoaXN0LmRpcnR5Q291bnRlcisrOwogICAgIH0KICAgICBoaXN0
Lmxhc3RUaW1lID0gdGltZTsKICAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7CkBAIC01MTYzLDkgKzUw
NDYsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoZS5zdG9w
UHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgZWxzZSBlLmNhbmNlbEJ1YmJs
ZSA9IHRydWU7CiAgIH0KLSAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKLSAgICBy
ZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBl
LnJldHVyblZhbHVlID09IGZhbHNlOwotICB9CiAgIGZ1bmN0aW9uIGVfc3RvcChlKSB7ZV9wcmV2
ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFnYXRpb24oZSk7fQogICBDb2RlTWlycm9yLmVfc3Rv
cCA9IGVfc3RvcDsKICAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVm
YXVsdDsKQEAgLTUyMzIsMTEgKzUxMTIsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MucHVzaChibmQoYXJyW2ldKSk7CiAgIH0KIAot
ICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSkgewotICAgIHNpZ25hbChjbSwgZS50eXBl
LCBjbSwgZSk7Ci0gICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsKLSAgfQotCiAgIGZ1
bmN0aW9uIGZpcmVEZWxheWVkKCkgewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAgICAg
dmFyIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwpAQCAtNTI1MSwxMSArNTEyNiw2IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIENvZGVNaXJyb3Iub24gPSBvbjsg
Q29kZU1pcnJvci5vZmYgPSBvZmY7IENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsOwogCi0gIGZ1
bmN0aW9uIGV2ZW50TWl4aW4oY3RvcikgewotICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rp
b24odHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO307Ci0gICAgY3Rvci5wcm90b3R5cGUub2Zm
ID0gZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9OwotICB9Ci0KICAgLy8g
TUlTQyBVVElMSVRJRVMKIAogICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9sbGVy
IGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgpAQCAtNTI5NiwxMSArNTE2Niw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChpb3MpIHsgLy8gTW9iaWxlIFNh
ZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCiAgICAg
ICBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9k
ZS52YWx1ZS5sZW5ndGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFN1cHByZXNzIG15c3Rlcmlv
dXMgSUUxMCBlcnJvcnMKLSAgICAgIHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0KLSAgICAgIGNhdGNo
KF9lKSB7fQotICAgIH0KKyAgICB9IGVsc2Ugbm9kZS5zZWxlY3QoKTsKICAgfQogCiAgIGZ1bmN0
aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7CkBAIC01NDA1LDE1ICs1MjcxLDE1IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH07CiAgIGVsc2UgaWYgKHNhZmFy
aSAmJiAhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
KQogICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIHJl
dHVybiAvXC1bXiBcLT9dfFw/W14gIVwnXCJcKSwuXC1cLzo7XD9cXVx9XS8udGVzdChzdHIuc2xp
Y2UoaSAtIDEsIGkgKyAxKSk7CisgICAgICB2YXIgcmVzdWx0ID0gL1wtW14gXC0/XXxcP1teICFc
J1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAxLCBpICsgMSkpOworICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9OwotICBlbHNlIGlmICh3ZWJraXQgJiYgIS9DaHJvbWVc
Lyg/OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQorICBl
bHNlIGlmICh3ZWJraXQpCiAgICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwg
aSkgewotICAgICAgaWYgKGkgPiAxICYmIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSA0NSkgewot
ICAgICAgICBpZiAoL1x3Ly50ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW15cLT9cLl0vLnRl
c3Qoc3RyLmNoYXJBdChpKSkpIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaSA+IDIgJiYgL1tc
ZFwuLF0vLnRlc3Qoc3RyLmNoYXJBdChpIC0gMikpICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFy
QXQoaSkpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gL1t+ISMlJiopPSt9
XF18XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAj
JCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHN0ci5zbGlj
ZShpIC0gMSwgaSArIDEpKTsKKyAgICAgIGlmIChpID4gMSAmJiBzdHIuY2hhckNvZGVBdChpIC0g
MSkgPT0gNDUgJiYgL1x3Ly50ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW15cLT9cLl0vLnRl
c3Qoc3RyLmNoYXJBdChpKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgdmFyIHJlc3Vs
dCA9IC9bfiEjJSYqKT0rfVxdfFwiXC4+LDo7XVsoe1s8XXxcP1tcd35gQCMkJVxeJiooXz0re1t8
PjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKKyAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfTsKIAogICB2YXIga25vd25TY3JvbGxiYXJXaWR0aDsKQEAgLTU0OTksMTUgKzUzNjUs
MTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gaXRl
cmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbSwgdG8sIGYpIHsKICAgICBpZiAoIW9yZGVyKSBy
ZXR1cm4gZihmcm9tLCB0bywgImx0ciIpOwotICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBwYXJ0ID0g
b3JkZXJbaV07Ci0gICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwg
ZnJvbSA9PSB0byAmJiBwYXJ0LnRvID09IGZyb20pIHsKKyAgICAgIGlmIChwYXJ0LmZyb20gPCB0
byAmJiBwYXJ0LnRvID4gZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkKICAg
ICAgICAgZihNYXRoLm1heChwYXJ0LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byks
IHBhcnQubGV2ZWwgPT0gMSA/ICJydGwiIDogImx0ciIpOwotICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICB9CiAgICAgfQotICAgIGlmICghZm91bmQpIGYoZnJvbSwgdG8sICJsdHIiKTsKICAg
fQogCiAgIGZ1bmN0aW9uIGJpZGlMZWZ0KHBhcnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8g
cGFydC50byA6IHBhcnQuZnJvbTsgfQpAQCAtNTc2OSw3ICs1NjMxLDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVy
c2lvbiA9ICIzLjE0LjEiOworICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4xMyI7CiAKICAgcmV0
dXJuIENvZGVNaXJyb3I7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZl
ZXNjcmlwdC5qcwppbmRleCA0ZjU0YjBjNjkwZWMyZmM4OWJjNmVkYWRmOTVmZWNlMWRkNGE5MzBl
Li41MDlkOTIwN2JiNzA3NzU0MGJkYzg5MGYwNjE2MDJlZWI2M2RmNjFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
ZmZlZXNjcmlwdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcwpAQCAtMzM5LDggKzMzOSw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgnY29mZmVlc2NyaXB0JywgZnVuY3Rpb24oY29uZikgewogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgIH0sCiAKLSAg
ICAgICAgbGluZUNvbW1lbnQ6ICIjIiwKLSAgICAgICAgZm9sZDogImluZGVudCIKKyAgICAgICAg
bGluZUNvbW1lbnQ6ICIjIgogICAgIH07CiAgICAgcmV0dXJuIGV4dGVybmFsOwogfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2NvbW1lbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMKaW5kZXggY2QyMTIzZTE3NTU1NTJlOTM1MWYx
ZDIzZTg1N2I5OGE4YmU2Mjc3OC4uNGY1OTBmMjg3MDA1MzIxMzk1YTZhNTI4YmU0YmFjN2E2NzBj
NGRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMTcsNyArMTcs
NyBAQAogCiAgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJsaW5lQ29tbWVudCIsIGZ1bmN0
aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9P
cHRpb25zOwotICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IHNlbGYuZ2V0TW9kZUF0KGZyb20p
OworICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKHNlbGYu
Z2V0TW9kZSgpLCBzZWxmLmdldFRva2VuQXQoZnJvbSkuc3RhdGUpLm1vZGU7CiAgICAgdmFyIGNv
bW1lbnRTdHJpbmcgPSBvcHRpb25zLmxpbmVDb21tZW50IHx8IG1vZGUubGluZUNvbW1lbnQ7CiAg
ICAgaWYgKCFjb21tZW50U3RyaW5nKSB7CiAgICAgICBpZiAob3B0aW9ucy5ibG9ja0NvbW1lbnRT
dGFydCB8fCBtb2RlLmJsb2NrQ29tbWVudFN0YXJ0KSB7CkBAIC0zMCw3ICszMCw3IEBACiAgICAg
aWYgKGZpcnN0TGluZSA9PSBudWxsKSByZXR1cm47CiAgICAgdmFyIGVuZCA9IE1hdGgubWluKHRv
LmNoICE9IDAgfHwgdG8ubGluZSA9PSBmcm9tLmxpbmUgPyB0by5saW5lICsgMSA6IHRvLmxpbmUs
IHNlbGYubGFzdExpbmUoKSArIDEpOwogICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0g
bnVsbCA/ICIgIiA6IG9wdGlvbnMucGFkZGluZzsKLSAgICB2YXIgYmxhbmtMaW5lcyA9IG9wdGlv
bnMuY29tbWVudEJsYW5rTGluZXMgfHwgZnJvbS5saW5lID09IHRvLmxpbmU7CisgICAgdmFyIGJs
YW5rTGluZXMgPSBvcHRpb25zLmNvbW1lbnRCbGFua0xpbmVzOwogCiAgICAgc2VsZi5vcGVyYXRp
b24oZnVuY3Rpb24oKSB7CiAgICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHsKQEAgLTUyLDcgKzUy
LDcgQEAKIAogICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiYmxvY2tDb21tZW50IiwgZnVu
Y3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSBu
b09wdGlvbnM7Ci0gICAgdmFyIHNlbGYgPSB0aGlzLCBtb2RlID0gc2VsZi5nZXRNb2RlQXQoZnJv
bSk7CisgICAgdmFyIHNlbGYgPSB0aGlzLCBtb2RlID0gQ29kZU1pcnJvci5pbm5lck1vZGUoc2Vs
Zi5nZXRNb2RlKCksIHNlbGYuZ2V0VG9rZW5BdChmcm9tKS5zdGF0ZSkubW9kZTsKICAgICB2YXIg
c3RhcnRTdHJpbmcgPSBvcHRpb25zLmJsb2NrQ29tbWVudFN0YXJ0IHx8IG1vZGUuYmxvY2tDb21t
ZW50U3RhcnQ7CiAgICAgdmFyIGVuZFN0cmluZyA9IG9wdGlvbnMuYmxvY2tDb21tZW50RW5kIHx8
IG1vZGUuYmxvY2tDb21tZW50RW5kOwogICAgIGlmICghc3RhcnRTdHJpbmcgfHwgIWVuZFN0cmlu
ZykgewpAQCAtODUsMTkgKzg1LDE5IEBACiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24o
InVuY29tbWVudCIsIGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7CiAgICAgaWYgKCFvcHRp
b25zKSBvcHRpb25zID0gbm9PcHRpb25zOwotICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IHNl
bGYuZ2V0TW9kZUF0KGZyb20pOworICAgIHZhciBzZWxmID0gdGhpcywgbW9kZSA9IENvZGVNaXJy
b3IuaW5uZXJNb2RlKHNlbGYuZ2V0TW9kZSgpLCBzZWxmLmdldFRva2VuQXQoZnJvbSkuc3RhdGUp
Lm1vZGU7CiAgICAgdmFyIGVuZCA9IE1hdGgubWluKHRvLmxpbmUsIHNlbGYubGFzdExpbmUoKSks
IHN0YXJ0ID0gTWF0aC5taW4oZnJvbS5saW5lLCBlbmQpOwogCiAgICAgLy8gVHJ5IGZpbmRpbmcg
bGluZSBjb21tZW50cwogICAgIHZhciBsaW5lU3RyaW5nID0gb3B0aW9ucy5saW5lQ29tbWVudCB8
fCBtb2RlLmxpbmVDb21tZW50LCBsaW5lcyA9IFtdOwotICAgIHZhciBwYWQgPSBvcHRpb25zLnBh
ZGRpbmcgPT0gbnVsbCA/ICIgIiA6IG9wdGlvbnMucGFkZGluZywgZGlkU29tZXRoaW5nOwotICAg
IGxpbmVDb21tZW50OiB7Ci0gICAgICBpZiAoIWxpbmVTdHJpbmcpIGJyZWFrIGxpbmVDb21tZW50
OworICAgIHZhciBwYWQgPSBvcHRpb25zLnBhZGRpbmcgPT0gbnVsbCA/ICIgIiA6IG9wdGlvbnMu
cGFkZGluZzsKKyAgICBsaW5lQ29tbWVudDogZm9yKDs7KSB7CisgICAgICBpZiAoIWxpbmVTdHJp
bmcpIGJyZWFrOwogICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7CiAg
ICAgICAgIHZhciBsaW5lID0gc2VsZi5nZXRMaW5lKGkpOwogICAgICAgICB2YXIgZm91bmQgPSBs
aW5lLmluZGV4T2YobGluZVN0cmluZyk7CiAgICAgICAgIGlmIChmb3VuZCA9PSAtMSAmJiAoaSAh
PSBlbmQgfHwgaSA9PSBzdGFydCkgJiYgbm9uV1MudGVzdChsaW5lKSkgYnJlYWsgbGluZUNvbW1l
bnQ7Ci0gICAgICAgIGlmIChpICE9IHN0YXJ0ICYmIGZvdW5kID4gLTEgJiYgbm9uV1MudGVzdChs
aW5lLnNsaWNlKDAsIGZvdW5kKSkpIGJyZWFrIGxpbmVDb21tZW50OworICAgICAgICBpZiAoaSAh
PSBzdGFydCAmJiBub25XUy50ZXN0KGxpbmUuc2xpY2UoMCwgZm91bmQpKSkgYnJlYWsgbGluZUNv
bW1lbnQ7CiAgICAgICAgIGxpbmVzLnB1c2gobGluZSk7CiAgICAgICB9CiAgICAgICBzZWxmLm9w
ZXJhdGlvbihmdW5jdGlvbigpIHsKQEAgLTEwNiwxMSArMTA2LDEwIEBACiAgICAgICAgICAgdmFy
IHBvcyA9IGxpbmUuaW5kZXhPZihsaW5lU3RyaW5nKSwgZW5kUG9zID0gcG9zICsgbGluZVN0cmlu
Zy5sZW5ndGg7CiAgICAgICAgICAgaWYgKHBvcyA8IDApIGNvbnRpbnVlOwogICAgICAgICAgIGlm
IChsaW5lLnNsaWNlKGVuZFBvcywgZW5kUG9zICsgcGFkLmxlbmd0aCkgPT0gcGFkKSBlbmRQb3Mg
Kz0gcGFkLmxlbmd0aDsKLSAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICAg
IHNlbGYucmVwbGFjZVJhbmdlKCIiLCBQb3MoaSwgcG9zKSwgUG9zKGksIGVuZFBvcykpOwogICAg
ICAgICB9CiAgICAgICB9KTsKLSAgICAgIGlmIChkaWRTb21ldGhpbmcpIHJldHVybiB0cnVlOwor
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gVHJ5IGJsb2NrIGNvbW1lbnRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCmluZGV4IGI1MmU3ODdhNzBhYjA3NjhjZThhYTMzZGNm
MDRlYTEzZDEyY2Q1MmIuLjI3Yzk3ZjM3ZWI4YjRlYzdlMjRmNjg5MmNmYjMyZGRjOGYxYTEyYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCkBAIC0xMDMsOCArMTAzLDcgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICAgcmV0dXJuIHt0b2tl
bml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0g
ICAgICAgICAgICAgIHN0YWNrOiBbXSwKLSAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsfTsK
KyAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgICB9LAogCiAgICAgdG9rZW46IGZ1bmN0aW9u
KHN0cmVhbSwgc3RhdGUpIHsKQEAgLTE2NCw3ICsxNjMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImNzcy1iYXNlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIHZh
ciBjb250ZXh0ID0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwogICAgICAgaWYg
KHN0eWxlID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlLWRl
ZmluaXRpb24iKSBzdGF0ZS5zdGFjay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICAgIHJl
dHVybiBzdGF0ZS5sYXN0VG9rZW4gPSAidmFyaWFibGUtMiI7CisgICAgICAgIHJldHVybiAidmFy
aWFibGUtMiI7CiAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09ICJwcm9wZXJ0eSIpIHsKICAgICAg
ICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgIGlm
IChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIikgewpAQCAtMjc0LDEwICsyNzMsMTAgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiBzdHJlYW0u
Y3VycmVudCgpID09ICIsIikgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgICBlbHNlIGlmIChjb250
ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiB0eXBlID09ICIoIikgc3RhdGUuc3RhY2sucHVzaCgiQG1l
ZGlhVHlwZSgiKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIiAmJiB0
eXBlID09ICIpIikgc3RhdGUuc3RhY2sucG9wKCk7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICI6
IiAmJiBzdGF0ZS5sYXN0VG9rZW4gPT0gInByb3BlcnR5Iikgc3RhdGUuc3RhY2sucHVzaCgicHJv
cGVydHlWYWx1ZSIpOworICAgICAgZWxzZSBpZiAoKGNvbnRleHQgPT0gInJ1bGUiIHx8IGNvbnRl
eHQgPT0gImJsb2NrIikgJiYgdHlwZSA9PSAiOiIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5
VmFsdWUiKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiICYmIHR5
cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0g
IkBpbXBvcnQiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgIHJldHVy
biBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKKyAgICAgIHJldHVybiBzdHlsZTsKICAgICB9LAog
CiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CkBAIC0yODksOCArMjg4
LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MtYmFzZSIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAKICAgICBlbGVjdHJpY0NoYXJzOiAifSIsCiAgICAgYmxvY2tDb21t
ZW50U3RhcnQ6ICIvKiIsCi0gICAgYmxvY2tDb21tZW50RW5kOiAiKi8iLAotICAgIGZvbGQ6ICJi
cmFjZSIKKyAgICBibG9ja0NvbW1lbnRFbmQ6ICIqLyIKICAgfTsKIH0pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKaW5kZXggM2QwNDYwM2MyODVmZWU1Y2EzM2M4
NjNlYTY3ODgwNzY1MjM0ZmQ1NC4uZmFiZTFjNDJiOWE2YjMwZDM2ZDdlMzc2MWViNjg4ZWRkNjM3
ZDZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMiw3
ICsyLDYgQEAKIAogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50
VW5pdDsKLSAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRl
bnQ7CiAgIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwogICB2YXIgaXNUUyA9IHBh
cnNlckNvbmZpZy50eXBlc2NyaXB0OwogCkBAIC0yMjcsOSArMjI2LDggQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgfQogICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgICB2YXIgcmVzdWx0ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUu
aW5kZW50ZWQ7Ci0gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICJzdGF0IikgaW5kZW50
ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKLSAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNM
ZXhpY2FsKGluZGVudCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhp
Y2FsLCBpbmZvKTsKKyAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOworICAgICAgc3RhdGUubGV4
aWNhbCA9IG5ldyBKU0xleGljYWwoc3RhdGUuaW5kZW50ZWQsIGN4LnN0cmVhbS5jb2x1bW4oKSwg
dHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbyk7CiAgICAgfTsKICAgICByZXN1bHQubGV4
ID0gdHJ1ZTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjU4LDMyICsyNTYsMzEgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIikgcmV0dXJuIGNvbnQocHVzaGxleCgi
Zm9ybSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4g
Y29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICI7Iikg
cmV0dXJuIGNvbnQoKTsKLSAgICBpZiAodHlwZSA9PSAiaWYiKSByZXR1cm4gY29udChwdXNobGV4
KCJmb3JtIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpOworICAg
IGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lv
biwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZShjeC5zdGF0ZS5pbmRlbnRlZCkpOwogICAg
IGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgICBp
ZiAodHlwZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHBlY3QoIigi
KSwgcHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhwZWN0KCIpIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsK
ICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0Iiks
IG1heWJlbGFiZWwpOwogICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNo
bGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgi
eyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4
LCBwb3BsZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
aywgcG9wbGV4LCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICJjYXNlIikgcmV0dXJuIGNvbnQo
ZXhwcmVzc2lvbiwgZXhwZWN0KCI6IikpOwogICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0
dXJuIGNvbnQoZXhwZWN0KCI6IikpOwogICAgIGlmICh0eXBlID09ICJjYXRjaCIpIHJldHVybiBj
b250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4
cGVjdCgiKSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVu
dCwgcG9wbGV4LCBwb3Bjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CiAgICAgcmV0dXJuIHBhc3Mo
cHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICAgfQog
ICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVy
KHR5cGUsIGZhbHNlKTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3Bl
cmF0b3JDb21tYSk7CiAgIH0KICAgZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSkgewot
ICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdHJ1ZSk7CisgICAgcmV0dXJuIGV4cHJl
c3Npb25Jbm5lcih0eXBlLCBtYXliZW9wZXJhdG9yTm9Db21tYSk7CiAgIH0KLSAgZnVuY3Rpb24g
ZXhwcmVzc2lvbklubmVyKHR5cGUsIG5vQ29tbWEpIHsKLSAgICB2YXIgbWF5YmVvcCA9IG5vQ29t
bWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYTsKKyAgZnVuY3Rp
b24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG1heWJlb3ApIHsKICAgICBpZiAoYXRvbWljVHlwZXMu
aGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3ApOwogICAgIGlmICh0eXBl
ID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlwZSA9
PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IG1heWJlZXhwcmVzc2lvbk5vQ29t
bWEgOiBtYXliZWV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGMiKSByZXR1
cm4gY29udChtYXliZWV4cHJlc3Npb24pOwogICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNv
bnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1h
eWJlb3ApOwotICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KG5vQ29tbWEg
PyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09ICJvcGVy
YXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgIGlmICh0eXBlID09ICJbIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSwg
cG9wbGV4LCBtYXliZW9wKTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hs
ZXgoIn0iKSwgY29tbWFzZXAob2JqcHJvcCwgIn0iKSwgcG9wbGV4LCBtYXliZW9wKTsKICAgICBy
ZXR1cm4gY29udCgpOwpAQCAtMjkyLDEzICsyODksOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0
eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVybiBwYXNzKCk7CiAgICAgcmV0dXJuIHBhc3Mo
ZXhwcmVzc2lvbik7CiAgIH0KLSAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uTm9Db21tYSh0eXBl
KSB7Ci0gICAgaWYgKHR5cGUubWF0Y2goL1s7XH1cKVxdLF0vKSkgcmV0dXJuIHBhc3MoKTsKLSAg
ICByZXR1cm4gcGFzcyhleHByZXNzaW9uTm9Db21tYSk7Ci0gIH0KIAogICBmdW5jdGlvbiBtYXli
ZW9wZXJhdG9yQ29tbWEodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVy
biBjb250KGV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIHBhc3MoKTsK
ICAgICByZXR1cm4gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG1heWJlb3BlcmF0
b3JDb21tYSk7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFs
dWUsIG1lKSB7CkBAIC0zMTEsNyArMzA0LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9
PSAiOyIpIHJldHVybjsKICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgo
IikiLCAiY2FsbCIpLCBjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiKSwgcG9wbGV4LCBt
ZSk7CiAgICAgaWYgKHR5cGUgPT0gIi4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpOwotICAg
IGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBtYXliZWV4cHJlc3Np
b24sIGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1lKTsKKyAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVy
biBjb250KHB1c2hsZXgoIl0iKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUp
OwogICB9CiAgIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkgewogICAgIGlmICh0eXBlID09ICI6
IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwpAQCAtMzczLDggKzM2NiwxNCBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb25O
b0NvbW1hLCB2YXJkZWYyKTsKICAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRl
ZjEpOwogICB9Ci0gIGZ1bmN0aW9uIG1heWJlZWxzZSh0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0
eXBlID09ICJrZXl3b3JkIGIiICYmIHZhbHVlID09ICJlbHNlIikgcmV0dXJuIGNvbnQocHVzaGxl
eCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7CisgIGZ1bmN0aW9uIG1heWJlZWxzZShpbmRl
bnQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHsKKyAgICAgIGlmICh0eXBl
ID09ICJrZXl3b3JkIGIiICYmIHZhbHVlID09ICJlbHNlIikgeworICAgICAgICBjeC5zdGF0ZS5s
ZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIDAsICJmb3JtIiwgbnVsbCwgY3guc3RhdGUu
bGV4aWNhbCk7CisgICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudCwgcG9wbGV4KTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiBwYXNzKCk7CisgICAgfTsKICAgfQogICBmdW5jdGlvbiBmb3JzcGVj
MSh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGV4
cGVjdCgiOyIpLCBmb3JzcGVjMik7CkBAIC00MzUsMjMgKzQzNCwxOSBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IGpzVG9rZW5Db21tZW50KSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOwogICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5CYXNlKSByZXR1
cm4gMDsKICAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJB
dCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7Ci0gICAgICAvLyBLbHVkZ2UgdG8gcHJldmVu
dCAnbWF5YmVsc2UnIGZyb20gYmxvY2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCi0gICAgICBmb3Ig
KHZhciBpID0gc3RhdGUuY2MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgdmFy
IGMgPSBzdGF0ZS5jY1tpXTsKLSAgICAgICAgaWYgKGMgPT0gcG9wbGV4KSBsZXhpY2FsID0gbGV4
aWNhbC5wcmV2OwotICAgICAgICBlbHNlIGlmIChjICE9IG1heWJlZWxzZSB8fCAvXmVsc2VcYi8u
dGVzdCh0ZXh0QWZ0ZXIpKSBicmVhazsKLSAgICAgIH0KICAgICAgIGlmIChsZXhpY2FsLnR5cGUg
PT0gInN0YXQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7Ci0g
ICAgICBpZiAoc3RhdGVtZW50SW5kZW50ICYmIGxleGljYWwudHlwZSA9PSAiKSIgJiYgbGV4aWNh
bC5wcmV2LnR5cGUgPT0gInN0YXQiKQotICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2Owog
ICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlw
ZTsKKyAgICAgIGlmIChwYXJzZXJDb25maWcuc3RhdGVtZW50SW5kZW50ICE9IG51bGwpIHsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gIikiICYmIGxleGljYWwucHJldiAmJiBsZXhpY2FsLnByZXYudHlw
ZSA9PSAic3RhdCIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CisgICAgICAgIGlmIChsZXhpY2Fs
LnR5cGUgPT0gInN0YXQiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIHBhcnNlckNvbmZpZy5z
dGF0ZW1lbnRJbmRlbnQ7CisgICAgICB9CiAKICAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSBy
ZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8
IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IDQgOiAwKTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
ImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAg
ICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5k
ZW50VW5pdDsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gInN0YXQiKQotICAgICAgICByZXR1cm4g
bGV4aWNhbC5pbmRlbnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRl
Lmxhc3RUeXBlID09ICIsIiA/IHN0YXRlbWVudEluZGVudCB8fCBpbmRlbnRVbml0IDogMCk7Ci0g
ICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcgJiYgcGFy
c2VyQ29uZmlnLmRvdWJsZUluZGVudFN3aXRjaCAhPSBmYWxzZSkKKyAgICAgICAgcmV0dXJuIGxl
eGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5s
YXN0VHlwZSA9PSAiLCIgPyBpbmRlbnRVbml0IDogMCk7CisgICAgICBlbHNlIGlmIChsZXhpY2Fs
LmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgIHJldHVybiBsZXhpY2FsLmlu
ZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRV
bml0IDogMiAqIGluZGVudFVuaXQpOwogICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGlnbikgcmV0
dXJuIGxleGljYWwuY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNlIHJldHVy
biBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CkBAIC00NjEs
OSArNDU2LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUg
PyBudWxsIDogIi8qIiwKICAgICBibG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIq
LyIsCiAgICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCi0gICAgZm9sZDog
ImJyYWNlIiwKIAotICAgIGhlbHBlclR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3Jp
cHQiLAogICAgIGpzb25Nb2RlOiBqc29uTW9kZQogICB9OwogfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNo
YnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMKaW5kZXggMTMxZmU4MzFmZGM3NjYyYmI2ZjI1
OWQ0MzY3NWRlZmIxOWZlNzZlZC4uZTRmZjkxNGM2YmJlMmUyNjc1ZTQ4MzM0YzJjMThiZjYyNzFh
ZGFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwpA
QCAtNSwyNiArNSwyNSBAQAogICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7CiAKICAgdmFyIG1h
dGNoaW5nID0geyIoIjogIik+IiwgIikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsi
OiAifT4iLCAifSI6ICJ7PCJ9OwotICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdCcmFja2V0KGNtLCB3
aGVyZSwgc3RyaWN0KSB7Ci0gICAgdmFyIHN0YXRlID0gY20uc3RhdGUubWF0Y2hCcmFja2V0czsK
LSAgICB2YXIgbWF4U2NhbkxlbiA9IChzdGF0ZSAmJiBzdGF0ZS5tYXhTY2FuTGluZUxlbmd0aCkg
fHwgMTAwMDA7CisgIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ0JyYWNrZXQoY20pIHsKKyAgICB2YXIg
bWF4U2NhbkxlbiA9IGNtLnN0YXRlLl9tYXRjaEJyYWNrZXRzLm1heFNjYW5MaW5lTGVuZ3RoIHx8
IDEwMDAwOwogCi0gICAgdmFyIGN1ciA9IHdoZXJlIHx8IGNtLmdldEN1cnNvcigpLCBsaW5lID0g
Y20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBvcyA9IGN1ci5jaCAtIDE7CisgICAgdmFyIGN1
ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIubGluZSksIHBv
cyA9IGN1ci5jaCAtIDE7CiAgICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xp
bmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3Mp
XTsKICAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKICAgICB2YXIgZm9yd2FyZCA9IG1hdGNo
LmNoYXJBdCgxKSA9PSAiPiIsIGQgPSBmb3J3YXJkID8gMSA6IC0xOwotICAgIGlmIChzdHJpY3Qg
JiYgZm9yd2FyZCAhPSAocG9zID09IGN1ci5jaCkpIHJldHVybiBudWxsOwotICAgIHZhciBzdHls
ZSA9IGNtLmdldFRva2VuVHlwZUF0KFBvcyhjdXIubGluZSwgcG9zICsgMSkpOworICAgIHZhciBz
dHlsZSA9IGNtLmdldFRva2VuQXQoUG9zKGN1ci5saW5lLCBwb3MgKyAxKSkudHlwZTsKIAogICAg
IHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwog
ICAgIGZ1bmN0aW9uIHNjYW4obGluZSwgbGluZU5vLCBzdGFydCkgewogICAgICAgaWYgKCFsaW5l
LnRleHQpIHJldHVybjsKICAgICAgIHZhciBwb3MgPSBmb3J3YXJkID8gMCA6IGxpbmUudGV4dC5s
ZW5ndGggLSAxLCBlbmQgPSBmb3J3YXJkID8gbGluZS50ZXh0Lmxlbmd0aCA6IC0xOwogICAgICAg
aWYgKGxpbmUudGV4dC5sZW5ndGggPiBtYXhTY2FuTGVuKSByZXR1cm4gbnVsbDsKKyAgICAgIHZh
ciBjaGVja1Rva2VuU3R5bGVzID0gbGluZS50ZXh0Lmxlbmd0aCA8IDEwMDA7CiAgICAgICBpZiAo
c3RhcnQgIT0gbnVsbCkgcG9zID0gc3RhcnQgKyBkOwogICAgICAgZm9yICg7IHBvcyAhPSBlbmQ7
IHBvcyArPSBkKSB7CiAgICAgICAgIHZhciBjaCA9IGxpbmUudGV4dC5jaGFyQXQocG9zKTsKLSAg
ICAgICAgaWYgKHJlLnRlc3QoY2gpICYmIGNtLmdldFRva2VuVHlwZUF0KFBvcyhsaW5lTm8sIHBv
cyArIDEpKSA9PSBzdHlsZSkgeworICAgICAgICBpZiAocmUudGVzdChjaCkgJiYgKCFjaGVja1Rv
a2VuU3R5bGVzIHx8IGNtLmdldFRva2VuQXQoUG9zKGxpbmVObywgcG9zICsgMSkpLnR5cGUgPT0g
c3R5bGUpKSB7CiAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hpbmdbY2hdOwogICAgICAgICAg
IGlmIChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iID09IGZvcndhcmQpIHN0YWNrLnB1c2goY2gpOwog
ICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJu
IHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKQEAgLTM3LDEzICszNiwxMiBAQAogICAgICAgZWxz
ZSBmb3VuZCA9IHNjYW4oY20uZ2V0TGluZUhhbmRsZShpKSwgaSk7CiAgICAgICBpZiAoZm91bmQp
IGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwgdG86
IGZvdW5kICYmIFBvcyhpLCBmb3VuZC5wb3MpLAotICAgICAgICAgICAgbWF0Y2g6IGZvdW5kICYm
IGZvdW5kLm1hdGNoLCBmb3J3YXJkOiBmb3J3YXJkfTsKKyAgICByZXR1cm4ge2Zyb206IFBvcyhj
dXIubGluZSwgcG9zKSwgdG86IGZvdW5kICYmIFBvcyhpLCBmb3VuZC5wb3MpLCBtYXRjaDogZm91
bmQgJiYgZm91bmQubWF0Y2h9OwogICB9CiAKICAgZnVuY3Rpb24gbWF0Y2hCcmFja2V0cyhjbSwg
YXV0b2NsZWFyKSB7CiAgICAgLy8gRGlzYWJsZSBicmFjZSBtYXRjaGluZyBpbiBsb25nIGxpbmVz
LCBzaW5jZSBpdCdsbCBjYXVzZSBodWdlbHkgc2xvdyB1cGRhdGVzCi0gICAgdmFyIG1heEhpZ2hs
aWdodExlbiA9IGNtLnN0YXRlLm1hdGNoQnJhY2tldHMubWF4SGlnaGxpZ2h0TGluZUxlbmd0aCB8
fCAxMDAwOworICAgIHZhciBtYXhIaWdobGlnaHRMZW4gPSBjbS5zdGF0ZS5fbWF0Y2hCcmFja2V0
cy5tYXhIaWdobGlnaHRMaW5lTGVuZ3RoIHx8IDEwMDA7CiAgICAgdmFyIGZvdW5kID0gZmluZE1h
dGNoaW5nQnJhY2tldChjbSk7CiAgICAgaWYgKCFmb3VuZCB8fCBjbS5nZXRMaW5lKGZvdW5kLmZy
b20ubGluZSkubGVuZ3RoID4gbWF4SGlnaGxpZ2h0TGVuIHx8CiAgICAgICAgZm91bmQudG8gJiYg
Y20uZ2V0TGluZShmb3VuZC50by5saW5lKS5sZW5ndGggPiBtYXhIaWdobGlnaHRMZW4pCkBAIC03
NCwxMyArNzIsMTEgQEAKICAgICBpZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpCiAg
ICAgICBjbS5vZmYoImN1cnNvckFjdGl2aXR5IiwgZG9NYXRjaEJyYWNrZXRzKTsKICAgICBpZiAo
dmFsKSB7Ci0gICAgICBjbS5zdGF0ZS5tYXRjaEJyYWNrZXRzID0gdHlwZW9mIHZhbCA9PSAib2Jq
ZWN0IiA/IHZhbCA6IHt9OworICAgICAgY20uc3RhdGUuX21hdGNoQnJhY2tldHMgPSB0eXBlb2Yg
dmFsID09ICJvYmplY3QiID8gdmFsIDoge307CiAgICAgICBjbS5vbigiY3Vyc29yQWN0aXZpdHki
LCBkb01hdGNoQnJhY2tldHMpOwogICAgIH0KICAgfSk7CiAKICAgQ29kZU1pcnJvci5kZWZpbmVF
eHRlbnNpb24oIm1hdGNoQnJhY2tldHMiLCBmdW5jdGlvbigpIHttYXRjaEJyYWNrZXRzKHRoaXMs
IHRydWUpO30pOwotICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJh
Y2tldCIsIGZ1bmN0aW9uKHBvcywgc3RyaWN0KXsKLSAgICByZXR1cm4gZmluZE1hdGNoaW5nQnJh
Y2tldCh0aGlzLCBwb3MsIHN0cmljdCk7Ci0gIH0pOworICBDb2RlTWlycm9yLmRlZmluZUV4dGVu
c2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsIGZ1bmN0aW9uKCl7cmV0dXJuIGZpbmRNYXRjaGlu
Z0JyYWNrZXQodGhpcyk7fSk7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwppbmRl
eCA5MDE2Y2M3YWFlOGJmNTkyNTI4ZTZmYjNmMTk0YTk4NWYzYjhkYzhkLi4wNjZkYjk3YTgyYTYy
ODBkYTlhZThiYTJkOTMyNWY1ZDFjNDY0OWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5q
cwpAQCAtMTksNjQgKzE5LDQzIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmIChzdXBwb3J0LmhleE51bWJlciA9PSB0cnVl
ICYmCi0gICAgICAoKGNoID09ICIwIiAmJiBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0r
LykpCi0gICAgICB8fCAoY2ggPT0gIngiIHx8IGNoID09ICJYIikgJiYgc3RyZWFtLm1hdGNoKC9e
J1swLTlhLWZBLUZdKycvKSkpIHsKKyAgICBpZiAoKGNoID09ICIwIiAmJiBzdHJlYW0ubWF0Y2go
L15beFhdWzAtOWEtZkEtRl0rLykpCisgICAgICB8fCAoY2ggPT0gIngiIHx8IGNoID09ICJYIikg
JiYgc3RyZWFtLm1hdGNoKC9eJ1swLTlhLWZBLUZdKycvKSkgewogICAgICAgLy8gaGV4Ci0gICAg
ICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2hleGFkZWNp
bWFsLWxpdGVyYWxzLmh0bWwKICAgICAgIHJldHVybiAibnVtYmVyIjsKLSAgICB9IGVsc2UgaWYg
KHN1cHBvcnQuYmluYXJ5TnVtYmVyID09IHRydWUgJiYKLSAgICAgICgoKGNoID09ICJiIiB8fCBj
aCA9PSAiQiIpICYmIHN0cmVhbS5tYXRjaCgvXidbMDFdKycvKSkKLSAgICAgIHx8IChjaCA9PSAi
MCIgJiYgc3RyZWFtLm1hdGNoKC9eYlswMV0rLykpKSkgeworICAgIH0gZWxzZSBpZiAoKChjaCA9
PSAiYiIgfHwgY2ggPT0gIkIiKSAmJiBzdHJlYW0ubWF0Y2goL14nWzAxXSsnLykpCisgICAgICB8
fCAoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXmJbMDFdKy8pKSkgewogICAgICAgLy8gYml0
c3RyaW5nCi0gICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41
L2VuL2JpdC1maWVsZC1saXRlcmFscy5odG1sCiAgICAgICByZXR1cm4gIm51bWJlciI7CiAgICAg
fSBlbHNlIGlmIChjaC5jaGFyQ29kZUF0KDApID4gNDcgJiYgY2guY2hhckNvZGVBdCgwKSA8IDU4
KSB7CiAgICAgICAvLyBudW1iZXJzCi0gICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29t
L2RvYy9yZWZtYW4vNS41L2VuL251bWJlci1saXRlcmFscy5odG1sCi0gICAgICAgICAgc3RyZWFt
Lm1hdGNoKC9eWzAtOV0qXC4/WzAtOV0rKFtlRV1bLStdP1swLTldKyk/Lyk7Ci0gICAgICBzdXBw
b3J0LmRlY2ltYWxsZXNzRmxvYXQgPT0gdHJ1ZSAmJiBzdHJlYW0uZWF0KCcuJyk7CisgICAgICBz
dHJlYW0ubWF0Y2goL15bMC05XSpcLj9bMC05XSsoW2VFXVstK10/WzAtOV0rKT8vKTsKICAgICAg
IHJldHVybiAibnVtYmVyIjsKICAgICB9IGVsc2UgaWYgKGNoID09ICI/IiAmJiAoc3RyZWFtLmVh
dFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5lYXQoIjsiKSkpIHsKICAgICAgIC8v
IHBsYWNlaG9sZGVycwogICAgICAgcmV0dXJuICJ2YXJpYWJsZS0zIjsKLSAgICB9IGVsc2UgaWYg
KGNoID09ICInIiB8fCAoY2ggPT0gJyInICYmIHN1cHBvcnQuZG91YmxlUXVvdGUpKSB7CisgICAg
fSBlbHNlIGlmIChjaCA9PSAnIicgfHwgY2ggPT0gIiciKSB7CiAgICAgICAvLyBzdHJpbmdzCi0g
ICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmlu
Zy1saXRlcmFscy5odG1sCiAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7
CiAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfSBlbHNl
IGlmICgoKChzdXBwb3J0Lm5DaGFyQ2FzdCA9PSB0cnVlICYmIChjaCA9PSAibiIgfHwgY2ggPT0g
Ik4iKSkKLSAgICAgICAgfHwgKHN1cHBvcnQuY2hhcnNldENhc3QgPT0gdHJ1ZSAmJiBjaCA9PSAi
XyIgJiYgc3RyZWFtLm1hdGNoKC9bYS16XVthLXowLTldKi9pKSkpCi0gICAgICAgICYmIChzdHJl
YW0ucGVlaygpID09ICInIiB8fCBzdHJlYW0ucGVlaygpID09ICciJykpKSB7Ci0gICAgICAvLyBj
aGFyc2V0IGNhc3Rpbmc6IF91dGY4J3N0cicsIE4nc3RyJywgbidzdHInCi0gICAgICAvLyByZWY6
IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5o
dG1sCi0gICAgICByZXR1cm4gImtleXdvcmQiOwogICAgIH0gZWxzZSBpZiAoL15bXChcKSxcO1xb
XF1dLy50ZXN0KGNoKSkgewogICAgICAgLy8gbm8gaGlnaGxpZ2h0bmluZwogICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSBlbHNlIGlmIChzdXBwb3J0LmNvbW1lbnRTbGFzaFNsYXNoICYmIGNoID09
ICIvIiAmJiBzdHJlYW0uZWF0KCIvIikpIHsKLSAgICAgIC8vIDEtbGluZSBjb21tZW50Ci0gICAg
ICBzdHJlYW0uc2tpcFRvRW5kKCk7Ci0gICAgICByZXR1cm4gImNvbW1lbnQiOwotICAgIH0gZWxz
ZSBpZiAoKHN1cHBvcnQuY29tbWVudEhhc2ggJiYgY2ggPT0gIiMiKQotICAgICAgICB8fCAoY2gg
PT0gIi0iICYmIHN0cmVhbS5lYXQoIi0iKSAmJiAoIXN1cHBvcnQuY29tbWVudFNwYWNlUmVxdWly
ZWQgfHwgc3RyZWFtLmVhdCgiICIpKSkpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIjIiB8fCAo
Y2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoIi0iKSAmJiBzdHJlYW0uZWF0KCIgIikpKSB7CiAgICAg
ICAvLyAxLWxpbmUgY29tbWVudHMKLSAgICAgIC8vIHJlZjogaHR0cHM6Ly9rYi5hc2ttb250eS5v
cmcvZW4vY29tbWVudC1zeW50YXgvCiAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICBy
ZXR1cm4gImNvbW1lbnQiOwogICAgIH0gZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQo
IioiKSkgewogICAgICAgLy8gbXVsdGktbGluZSBjb21tZW50cwotICAgICAgLy8gcmVmOiBodHRw
czovL2tiLmFza21vbnR5Lm9yZy9lbi9jb21tZW50LXN5bnRheC8KICAgICAgIHN0YXRlLnRva2Vu
aXplID0gdG9rZW5Db21tZW50OwogICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwg
c3RhdGUpOwogICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iKSB7CiAgICAgICAvLyAuMSBmb3IgMC4x
Ci0gICAgICBpZiAoc3VwcG9ydC56ZXJvbGVzc0Zsb2F0ID09IHRydWUgJiYgc3RyZWFtLm1hdGNo
KC9eKD86XGQrKD86ZVsrLV0/XGQrKT8pL2kpKSB7CisgICAgICBpZiAoc3VwcG9ydC56ZXJvbGVz
c0Zsb2F0ID09IHRydWUgJiYgc3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVxkKik/fFxkKmVcZCsp
L2kpKSB7CiAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgIH0KICAgICAgIC8vIC50YWJs
ZV9uYW1lIChPREJDKQotICAgICAgLy8gLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2Mv
cmVmbWFuLzUuNi9lbi9pZGVudGlmaWVyLXF1YWxpZmllcnMuaHRtbAotICAgICAgaWYgKHN1cHBv
cnQuT0RCQ2RvdFRhYmxlID09IHRydWUgJiYgc3RyZWFtLm1hdGNoKC9eW2EtekEtWl9dKy8pKSB7
CisgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW2EtekEtWl9dKy8pICYmIHN1cHBvcnQuT0RCQ2Rv
dFRhYmxlID09IHRydWUpIHsKICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yQ2hhcnMudGVzdChjaCkpIHsKQEAgLTg2LDEzICs2NSwx
MSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAneycgJiYKICAgICAgICAgKHN0cmVhbS5t
YXRjaCgvXiggKSooZHxEfHR8VHx0c3xUUykoICkqJ1teJ10qJyggKSp9LykgfHwgc3RyZWFtLm1h
dGNoKC9eKCApKihkfER8dHxUfHRzfFRTKSggKSoiW14iXSoiKCApKn0vKSkpIHsKICAgICAgIC8v
IGRhdGVzICh3ZWlyZCBPREJDIHN5bnRheCkKLSAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNx
bC5jb20vZG9jL3JlZm1hbi81LjUvZW4vZGF0ZS1hbmQtdGltZS1saXRlcmFscy5odG1sCiAgICAg
ICByZXR1cm4gIm51bWJlciI7CiAgICAgfSBlbHNlIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZSgv
XltfXHdcZF0vKTsKICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2Fz
ZSgpOwogICAgICAgLy8gZGF0ZXMgKHN0YW5kYXJkIFNRTCBzeW50YXgpCi0gICAgICAvLyByZWY6
IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2RhdGUtYW5kLXRpbWUtbGl0
ZXJhbHMuaHRtbAogICAgICAgaWYgKGRhdGVTUUwuaGFzT3duUHJvcGVydHkod29yZCkgJiYgKHN0
cmVhbS5tYXRjaCgvXiggKSsnW14nXSonLykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKyJbXiJdKiIv
KSkpCiAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgIGlmIChhdG9tcy5oYXNPd25Qcm9w
ZXJ0eSh3b3JkKSkgcmV0dXJuICJhdG9tIjsKQEAgLTE4OSw4ICsxNjYsNiBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAg
Ly8gYGlkZW50aWZpZXJgCiAgIGZ1bmN0aW9uIGhvb2tJZGVudGlmaWVyKHN0cmVhbSkgewotICAg
IC8vIE15U1FML01hcmlhREIgaWRlbnRpZmllcnMKLSAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlz
cWwuY29tL2RvYy9yZWZtYW4vNS42L2VuL2lkZW50aWZpZXItcXVhbGlmaWVycy5odG1sCiAgICAg
dmFyIGNoOwogICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAg
ICBpZiAoY2ggPT0gImAiICYmICFzdHJlYW0uZWF0KCJgIikpIHJldHVybiAidmFyaWFibGUtMiI7
CkBAIC0yMDEsOSArMTc2LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAvLyB2YXJpYWJsZSB0b2tlbgogICBmdW5jdGlv
biBob29rVmFyKHN0cmVhbSkgewogICAgIC8vIHZhcmlhYmxlcwotICAgIC8vIEBAcHJlZml4LnZh
ck5hbWUgQHZhck5hbWUKLSAgICAvLyB2YXJOYW1lIGNhbiBiZSBxdW90ZWQgd2l0aCBgIG9yICcg
b3IgIgotICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4v
dXNlci12YXJpYWJsZXMuaHRtbAorICAgIC8vIEBAIGFuZCBwcmVmaXgKICAgICBpZiAoc3RyZWFt
LmVhdCgiQCIpKSB7CiAgICAgICBzdHJlYW0ubWF0Y2goL15zZXNzaW9uXC4vKTsKICAgICAgIHN0
cmVhbS5tYXRjaCgvXmxvY2FsXC4vKTsKQEAgLTIyNywyNyArMjAwLDE4IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAv
LyBzaG9ydCBjbGllbnQga2V5d29yZCB0b2tlbgogICBmdW5jdGlvbiBob29rQ2xpZW50KHN0cmVh
bSkgewotICAgIC8vIFxOIG1lYW5zIE5VTEwKLSAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwu
Y29tL2RvYy9yZWZtYW4vNS41L2VuL251bGwtdmFsdWVzLmh0bWwKLSAgICBpZiAoc3RyZWFtLmVh
dCgiTiIpKSB7Ci0gICAgICAgIHJldHVybiAiYXRvbSI7Ci0gICAgfQogICAgIC8vIFxnLCBldGMK
LSAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL215c3Fs
LWNvbW1hbmRzLmh0bWwKLSAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW2EtekEtWi4jIT9dLykg
PyAidmFyaWFibGUtMiIgOiBudWxsOworICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bYS16QS1a
XVxiLykgPyAidmFyaWFibGUtMiIgOiBudWxsOwogICB9CiAKLSAgLy8gdGhlc2Uga2V5d29yZHMg
YXJlIHVzZWQgYnkgYWxsIFNRTCBkaWFsZWN0cyAoaG93ZXZlciwgYSBtb2RlIGNhbiBzdGlsbCBv
dmVyd3JpdGUgaXQpCiAgIHZhciBzcWxLZXl3b3JkcyA9ICJhbHRlciBhbmQgYXMgYXNjIGJldHdl
ZW4gYnkgY291bnQgY3JlYXRlIGRlbGV0ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBoYXZpbmcg
aW4gaW5zZXJ0IGludG8gaXMgam9pbiBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRh
YmxlIHVuaW9uIHVwZGF0ZSB2YWx1ZXMgd2hlcmUgIjsKIAotICAvLyB0dXJuIGEgc3BhY2Utc2Vw
YXJhdGVkIGxpc3QgaW50byBhbiBhcnJheQogICBmdW5jdGlvbiBzZXQoc3RyKSB7CiAgICAgdmFy
IG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgIHJldHVybiBv
Ymo7CiAgIH0KIAotICAvLyBBIGdlbmVyaWMgU1FMIE1vZGUuIEl0J3Mgbm90IGEgc3RhbmRhcmQs
IGl0IGp1c3QgdHJ5IHRvIHN1cHBvcnQgd2hhdCBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkCiAgIENv
ZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNxbCIsIHsKICAgICBuYW1lOiAic3FsIiwKICAg
ICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImJlZ2luIiksCkBAIC0yNTUsNyArMjE5LDcg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgbnVsbCB1bmtub3duIiksCiAgICAg
b3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9XS8sCiAgICAgZGF0ZVNRTDogc2V0KCJkYXRlIHRp
bWUgdGltZXN0YW1wIiksCi0gICAgc3VwcG9ydDogc2V0KCJPREJDZG90VGFibGUgZG91YmxlUXVv
dGUgYmluYXJ5TnVtYmVyIGhleE51bWJlciIpCisgICAgc3VwcG9ydDogc2V0KCJPREJDZG90VGFi
bGUiKQogICB9KTsKIAogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1teXNxbCIsIHsK
QEAgLTI2Niw3ICsyMzAsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxs
IHVua25vd24iKSwKICAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT0mfF5dLywKICAgICBk
YXRlU1FMOiBzZXQoImRhdGUgdGltZSB0aW1lc3RhbXAiKSwKLSAgICBzdXBwb3J0OiBzZXQoIk9E
QkNkb3RUYWJsZSBkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhl
eE51bWJlciBkb3VibGVRdW90ZSBuQ2hhckNhc3QgY2hhcnNldENhc3QgY29tbWVudEhhc2ggY29t
bWVudFNwYWNlUmVxdWlyZWQiKSwKKyAgICBzdXBwb3J0OiBzZXQoIk9EQkNkb3RUYWJsZSB6ZXJv
bGVzc0Zsb2F0IiksCiAgICAgaG9va3M6IHsKICAgICAgICJAIjogICBob29rVmFyLAogICAgICAg
ImAiOiAgIGhvb2tJZGVudGlmaWVyLApAQCAtMjgyLDcgKzI0Niw3IEBAIENvZGVNaXJyb3IuZGVm
aW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBhdG9t
czogc2V0KCJmYWxzZSB0cnVlIG51bGwgdW5rbm93biIpLAogICAgIG9wZXJhdG9yQ2hhcnM6IC9e
WyorXC0lPD4hPSZ8Xl0vLAogICAgIGRhdGVTUUw6IHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIp
LAotICAgIHN1cHBvcnQ6IHNldCgiT0RCQ2RvdFRhYmxlIGRlY2ltYWxsZXNzRmxvYXQgemVyb2xl
c3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyIGRvdWJsZVF1b3RlIG5DaGFyQ2FzdCBjaGFy
c2V0Q2FzdCBjb21tZW50SGFzaCBjb21tZW50U3BhY2VSZXF1aXJlZCIpLAorICAgIHN1cHBvcnQ6
IHNldCgiT0RCQ2RvdFRhYmxlIHplcm9sZXNzRmxvYXQiKSwKICAgICBob29rczogewogICAgICAg
IkAiOiAgIGhvb2tWYXIsCiAgICAgICAiYCI6ICAgaG9va0lkZW50aWZpZXIsCkBAIC0yOTAsMjAg
KzI1NCw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICB9CiAgIH0pOwogCi0gIC8vIHRoZSBxdWVyeSBsYW5ndWFnZSB1
c2VkIGJ5IEFwYWNoZSBDYXNzYW5kcmEgaXMgY2FsbGVkIENRTCwgYnV0IHRoaXMgbWltZSB0eXBl
Ci0gIC8vIGlzIGNhbGxlZCBDYXNzYW5kcmEgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggQ29udGV4
dHVhbCBRdWVyeSBMYW5ndWFnZQotICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jYXNz
YW5kcmEiLCB7Ci0gICAgbmFtZTogInNxbCIsCi0gICAgY2xpZW50OiB7IH0sCi0gICAga2V5d29y
ZHM6IHNldCgidXNlIHNlbGVjdCBmcm9tIHVzaW5nIGNvbnNpc3RlbmN5IHdoZXJlIGxpbWl0IGZp
cnN0IHJldmVyc2VkIGZpcnN0IGFuZCBpbiBpbnNlcnQgaW50byB2YWx1ZXMgdXNpbmcgY29uc2lz
dGVuY3kgdHRsIHVwZGF0ZSBzZXQgZGVsZXRlIHRydW5jYXRlIGJlZ2luIGJhdGNoIGFwcGx5IGNy
ZWF0ZSBrZXlzcGFjZSB3aXRoIGNvbHVtbmZhbWlseSBwcmltYXJ5IGtleSBpbmRleCBvbiBkcm9w
IGFsdGVyIHR5cGUgYWRkIGFueSBvbmUgcXVvcnVtIGFsbCBsb2NhbF9xdW9ydW0gZWFjaF9xdW9y
dW0iKSwKLSAgICBidWlsdGluOiBzZXQoImFzY2lpIGJpZ2ludCBibG9iIGJvb2xlYW4gY291bnRl
ciBkZWNpbWFsIGRvdWJsZSBmbG9hdCBpbnQgdGV4dCB0aW1lc3RhbXAgdXVpZCB2YXJjaGFyIHZh
cmludCIpLAotICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUiKSwKLSAgICBvcGVyYXRvckNoYXJz
OiAvXls8Pj1dLywKLSAgICBkYXRlU1FMOiB7IH0sCi0gICAgc3VwcG9ydDogc2V0KCJjb21tZW50
U2xhc2hTbGFzaCBkZWNpbWFsbGVzc0Zsb2F0IiksCi0gICAgaG9va3M6IHsgfQotICB9KTsKLQog
ICAvLyB0aGlzIGlzIGJhc2VkIG9uIFBldGVyIFJhZ2FuaXRzY2gncyAncGxzcWwnIG1vZGUKICAg
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICAgbmFtZTogICAgICAg
InNxbCIsCkBAIC0zMTIsMzggKzI2Miw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwg
ZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBmdW5jdGlvbnM6ICBzZXQoImFi
cyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgYmZpbGVuYW1l
IGNlaWwgY2hhcnRvcm93aWQgY2hyIGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50IGRlY29k
ZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCBlbXB0eSBlcnJvciBleHAgZmFsc2Ug
Zmxvb3IgZm91bmQgZ2xiIGdyZWF0ZXN0IGhleHRvcmF3IGluaXRjYXAgaW5zdHIgaW5zdHJiIGlz
b3BlbiBsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1
YiBtYWtlX3JlZiBtYXggbWluIG1vZCBtb250aHNfYmV0d2VlbiBuZXdfdGltZSBuZXh0X2RheSBu
ZXh0dmFsIG5sc19jaGFyc2V0X2RlY2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0X25h
bWUgbmxzX2luaXRjYXAgbmxzX2xvd2VyIG5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2Rh
dGFfZm91bmQgbm90Zm91bmQgbnVsbCBudmwgb3RoZXJzIHBvd2VyIHJhd3RvaGV4IHJlZnRvaGV4
IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJwYWQgcnRyaW0gc2lnbiBzaW4gc2luaCBzb3Vu
ZGV4IHNxbGNvZGUgc3FsZXJybSBzcXJ0IHN0ZGRldiBzdWJzdHIgc3Vic3RyYiBzdW0gc3lzZGF0
ZSB0YW4gdGFuaCB0b19jaGFyIHRvX2RhdGUgdG9fbGFiZWwgdG9fbXVsdGlfYnl0ZSB0b19udW1i
ZXIgdG9fc2luZ2xlX2J5dGUgdHJhbnNsYXRlIHRydWUgdHJ1bmMgdWlkIHVwcGVyIHVzZXIgdXNl
cmVudiB2YXJpYW5jZSB2c2l6ZSIpLAogICAgIGJ1aWx0aW46ICAgIHNldCgiYmZpbGUgYmxvYiBj
aGFyYWN0ZXIgY2xvYiBkZWMgZmxvYXQgaW50IGludGVnZXIgbWxzbGFiZWwgbmF0dXJhbCBuYXR1
cmFsbiBuY2hhciBuY2xvYiBudW1iZXIgbnVtZXJpYyBudmFyY2hhcjIgcmVhbCByb3d0eXBlIHNp
Z250eXBlIHNtYWxsaW50IHN0cmluZyB2YXJjaGFyIHZhcmNoYXIyIiksCiAgICAgb3BlcmF0b3JD
aGFyczogL15bKitcLSU8PiE9fl0vLAotICAgIGRhdGVTUUw6ICAgIHNldCgiZGF0ZSB0aW1lIHRp
bWVzdGFtcCIpLAotICAgIHN1cHBvcnQ6ICAgIHNldCgiZG91YmxlUXVvdGUgbkNoYXJDYXN0IHpl
cm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJlciIpCisgICAgZGF0ZVNRTDogICAgc2V0
KCJkYXRlIHRpbWUgdGltZXN0YW1wIikKICAgfSk7CiB9KCkpOwotCi0vKgotICBIb3cgUHJvcGVy
dGllcyBvZiBNaW1lIFR5cGVzIGFyZSB1c2VkIGJ5IFNRTCBNb2RlCi0gID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBrZXl3b3JkczoKLSAgICBB
IGxpc3Qgb2Yga2V5d29yZHMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCi0gIGZ1bmN0aW9u
czoKLSAgICBBIGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0
ZWQuCi0gIGJ1aWx0aW46Ci0gICAgQSBsaXN0IG9mIGJ1aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8g
YmUgaGlnaGxpZ2h0ZWQgKGlmIHlvdSB3YW50IHR5cGVzIHRvIGJlIG9mIGNsYXNzICJidWlsdGlu
IiBpbnN0ZWFkIG9mICJrZXl3b3JkIikuCi0gIG9wZXJhdG9yQ2hhcnM6Ci0gICAgQWxsIGNoYXJh
Y3RlcnMgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYXMgb3BlcmF0b3JzLgotICBjbGllbnQ6Ci0gICAg
Q29tbWFuZHMgcGFyc2VkIGFuZCBleGVjdXRlZCBieSB0aGUgY2xpZW50IChub3QgdGhlIHNlcnZl
cikuCi0gIHN1cHBvcnQ6Ci0gICAgQSBsaXN0IG9mIHN1cHBvcnRlZCBzeW50YXhlcyB3aGljaCBh
cmUgbm90IGNvbW1vbiwgYnV0IGFyZSBzdXBwb3J0ZWQgYnkgbW9yZSB0aGFuIDEgREJNUy4KLSAg
ICAqIE9EQkNkb3RUYWJsZTogLnRhYmxlTmFtZQotICAgICogemVyb2xlc3NGbG9hdDogLjEKLSAg
ICAqIGRvdWJsZVF1b3RlCi0gICAgKiBuQ2hhckNhc3Q6IE4nc3RyaW5nJwotICAgICogY2hhcnNl
dENhc3Q6IF91dGY4J3N0cmluZycKLSAgICAqIGNvbW1lbnRIYXNoOiB1c2UgIyBjaGFyIGZvciBj
b21tZW50cwotICAgICogY29tbWVudFNsYXNoU2xhc2g6IHVzZSAvLyBmb3IgY29tbWVudHMKLSAg
ICAqIGNvbW1lbnRTcGFjZVJlcXVpcmVkOiByZXF1aXJlIGEgc3BhY2UgYWZ0ZXIgLS0gZm9yIGNv
bW1lbnRzCi0gIGF0b21zOgotICAgIEtleXdvcmRzIHRoYXQgbXVzdCBiZSBoaWdobGlnaHRlZCBh
cyBhdG9tcywuIFNvbWUgREJNUydzIHN1cHBvcnQgbW9yZSBhdG9tcyB0aGFuIG90aGVyczoKLSAg
ICBVTktOT1dOLCBJTkZJTklUWSwgVU5ERVJGTE9XLCBOYU4uLi4KLSAgZGF0ZVNRTDoKLSAgICBV
c2VkIGZvciBkYXRlL3RpbWUgU1FMIHN0YW5kYXJkIHN5bnRheCwgYmVjYXVzZSBub3QgYWxsIERC
TVMncyBzdXBwb3J0IHNhbWUgdGVtcG9yYWwgdHlwZXMuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L3htbC5qcwppbmRleCAwN2RiMjk5MDM5MGU5Y2NhZTZkMTI2YmZjN2JiOWRjNmU4NDdjMmM0Li5i
MDQyNDhjNmM2ODlhM2Y5MzAwYTczMDA3OGU4OTc1NmY0M2IyYTAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL3htbC5qcwpAQCAtNTgsMTkgKzU4LDIwIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
eG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgaWYgKHN0cmVh
bS5lYXQoIlsiKSkgewogICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1
cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CiAgICAgICAgICAgZWxzZSByZXR1cm4g
bnVsbDsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHsKLSAgICAgICAg
ICByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICItLT4iKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2Nr
KCJjb21tZW50IiwgIi0tPiIpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NU
WVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wt
XS8pOwogICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChz
dHJlYW0uZWF0KCI/IikpIHsKKyAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAg
ICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoIj8iKSkgewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUo
L1tcd1wuX1wtXS8pOwogICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAi
Pz4iKTsKICAgICAgICAgcmV0dXJuICJtZXRhIjsKLSAgICAgIH0gZWxzZSB7CisgICAgICB9Cisg
ICAgICBlbHNlIHsKICAgICAgICAgdmFyIGlzQ2xvc2UgPSBzdHJlYW0uZWF0KCIvIik7CiAgICAg
ICAgIHRhZ05hbWUgPSAiIjsKICAgICAgICAgdmFyIGM7CkBAIC04MCw3ICs4MSw4IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZzsKICAgICAgICAgcmV0dXJuICJ0YWciOwog
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2ggPT0gIiYiKSB7CisgICAgfQorICAgIGVsc2UgaWYg
KGNoID09ICImIikgewogICAgICAgdmFyIG9rOwogICAgICAgaWYgKHN0cmVhbS5lYXQoIiMiKSkg
ewogICAgICAgICBpZiAoc3RyZWFtLmVhdCgieCIpKSB7CkBAIC05Miw3ICs5NCw4IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXC06XS8pICYmIHN0cmVhbS5lYXQo
IjsiKTsKICAgICAgIH0KICAgICAgIHJldHVybiBvayA/ICJhdG9tIiA6ICJlcnJvciI7Ci0gICAg
fSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxd
Lyk7CiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC0xMDQsMTUgKzEwNywxNiBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgIHR5cGUgPSBjaCA9PSAiPiIg
PyAiZW5kVGFnIiA6ICJzZWxmY2xvc2VUYWciOwogICAgICAgcmV0dXJuICJ0YWciOwotICAgIH0g
ZWxzZSBpZiAoY2ggPT0gIj0iKSB7CisgICAgfQorICAgIGVsc2UgaWYgKGNoID09ICI9Iikgewog
ICAgICAgdHlwZSA9ICJlcXVhbHMiOwogICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBlbHNlIGlm
IChjaCA9PSAiPCIpIHsKLSAgICAgIHJldHVybiAiZXJyb3IiOwotICAgIH0gZWxzZSBpZiAoL1tc
J1wiXS8udGVzdChjaCkpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoL1tcJ1wiXS8udGVzdChjaCkp
IHsKICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5BdHRyaWJ1dGUoY2gpOwogICAgICAgcmV0dXJu
IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgIH0gZWxzZSB7CisgICAgfQorICAg
IGVsc2UgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKTsKICAg
ICAgIHJldHVybiAid29yZCI7CiAgICAgfQpAQCAtMzE2LDggKzMyMCw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBi
bG9ja0NvbW1lbnRTdGFydDogIjwhLS0iLAogICAgIGJsb2NrQ29tbWVudEVuZDogIi0tPiIsCiAK
LSAgICBjb25maWd1cmF0aW9uOiBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1s
IiwKLSAgICBoZWxwZXJUeXBlOiBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1s
IgorICAgIGNvbmZpZ3VyYXRpb246IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4
bWwiCiAgIH07CiB9KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>