[Mono-docs-list] Status of documentation and docstub

Adam Treat manyoso@yahoo.com
Fri, 22 Mar 2002 21:30:12 -0800


--------------Boundary-00=_CAVEJVKUVRZ88Q8L67MY
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
Subject: 

On Friday 22 March 2002 07:23 pm, you wrote:
> Hi, I get an error saying:
>
>
> Unhandled Exception: System.NullReferenceException: Object reference not
> set to
> an instance of an object.
>    at Mono.Util.DocStub.Write()
>    at Mono.Util.DocStub.MakeXml()
>    at Mono.Util.DocStub..ctor(String[] args)
>    at Mono.Util.DocStub.Main(String[] args)
>
> When I run the docstub tool.  I compiled on windows,  I'm looking for
> any errors in the source that might cause this but don't know too much
> about C Sharp and haven't found any yet.

I think this is a product of the fact that I am still using Microsoft's Beta 
...only have win98 :-(

Anyways, I searched around and think I've found the problem.  Unfortunately, 
I am unable to reproduce your error so I can't verify that the fix is 
_the_fix_  So, can you please test it for me?  I've attached docstub with the 
fix.  Try it out and if this solves your problem, I'll commit to cvs.

Thanks,

Adam
--------------Boundary-00=_CAVEJVKUVRZ88Q8L67MY
Content-Type: text/x-c++;
  charset="iso-8859-1";
  name="docstub.cs"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="docstub.cs"

Ly8JZG9jc3R1Yi5jcwovLwovLwlBZGFtIFRyZWF0IChtYW55b3NvQHlhaG9vLmNvbSkKLy8JKEMp
IDIwMDIgQWRhbSBUcmVhdAovLwovLwlEb2NTdHViIGlzIGJhc2VkIGhlYXZpbHkgdXBvbiB0aGUg
TkRvYyBwcm9qZWN0Ci8vCW5kb2Muc291cmNlZm9yZ2UubmV0Ci8vCi8vCVRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci8v
CWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5Ci8vCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi8vCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCgoKdXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5
c3RlbS5Db2xsZWN0aW9ucy5TcGVjaWFsaXplZDsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1
c2luZyBTeXN0ZW0uSU87CnVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwp1c2luZyBTeXN0ZW0uWG1s
Owp1c2luZyBTeXN0ZW0uVGV4dDsKCm5hbWVzcGFjZSBNb25vLlV0aWwKewoJY2xhc3MgRG9jU3R1
YgoJewoJCUFzc2VtYmx5IGFzc2VtYmx5OwoJCWJvb2wgbmVzdGVkOwoJCXN0cmluZyBhc3NlbWJs
eV9maWxlLCBkaXJlY3RvcnksIGxhbmd1YWdlLCBjbGFzc25hbWUsIGN1cnJlbnROYW1lc3BhY2Us
IGRvY25hbWU7CgoJCXZvaWQgVXNhZ2UoKQoJCXsKCQkJQ29uc29sZS5Xcml0ZSAoCgkJCQkiZG9j
c3R1YiAtbCA8bGFuZz4gLWQgPGRpcmVjdG9yeT4gLWEgPGFzc2VtYmx5PlxuXG4iICsKCQkJCSIg
ICAtZCB8fCAvLWQgfHwgLS1kaXIgICAgICAgPGRpcmVjdG9yeT4gICAgICAgICAgICAgVGhlIGRp
cmVjdG9yeSB0byB3cml0ZSB0aGUgeG1sIGZpbGVzIHRvLlxuIiArCgkJCQkiICAgLWEgfHwgLy1h
IHx8IC0tYXNzZW1ibHkgIDxhc3NlbWJseT4gICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFy
Z2V0IGFzc2VtYmx5IHRvIGxvYWQgYW5kIHBhcnNlLlxuIiArCgkJCQkiICAgLWwgfHwgLy1sIHx8
IC0tbGFuZ3VhZ2UgIDx0d28tbGV0dGVyIElTTyBjb2RlPiAgIFNwZWNpZmllcyB0aGUgbGFuZ3Vh
Z2UgZW5jb2RpbmcuXG5cbiIpOwoJCX0KCgkJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5n
W10gYXJncykKCQl7CgkJCURvY1N0dWIgc3R1YiA9IG5ldyBEb2NTdHViKGFyZ3MpOwoJCX0KCgkJ
cHVibGljIERvY1N0dWIoc3RyaW5nIFtdIGFyZ3MpCgkJewoJCQlhc3NlbWJseV9maWxlID0gbnVs
bDsKCQkJZGlyZWN0b3J5ID0gbnVsbDsKCQkJaW50IGFyZ2MgPSBhcmdzLkxlbmd0aDsKCgkJCWZv
cihpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspCgkJCXsKCQkJCXN0cmluZyBhcmcgPSBhcmdzW2ld
OwoKCQkJCS8vIFRoZSAiLyIgc3dpdGNoIGlzIHRoZXJlIGZvciB3aW5lIHVzZXJzLCBsaWtlIG1l
IDstKQoJCQkJaWYoYXJnLlN0YXJ0c1dpdGgoIi0iKSB8fCBhcmcuU3RhcnRzV2l0aCgiLyIpKQoJ
CQkJewoJCQkJCXN3aXRjaChhcmcpCgkJCQkJewoKCQkJCQljYXNlICItZCI6IGNhc2UgIi8tZCI6
IGNhc2UgIi0tZGlyZWN0b3J5IjoKCQkJCQkJaWYoKGkgKyAxKSA+PSBhcmdjKQoJCQkJCQl7CgkJ
CQkJCQlVc2FnZSgpOwoJCQkJCQkJcmV0dXJuOwoJCQkJCQl9CgkJCQkJCWRpcmVjdG9yeSA9IGFy
Z3NbKytpXTsKCQkJCQkJY29udGludWU7CgoJCQkJCWNhc2UgIi1hIjogY2FzZSAiLy1hIjogY2Fz
ZSAiLS1hc3NlbWJseSI6CgkJCQkJCWlmKChpICsgMSkgPj0gYXJnYykKCQkJCQkJewoJCQkJCQkJ
VXNhZ2UoKTsKCQkJCQkJCXJldHVybjsKCQkJCQkJfQoJCQkJCQlhc3NlbWJseV9maWxlID0gYXJn
c1srK2ldOwoJCQkJCQljb250aW51ZTsKCQkJCQljYXNlICItbCI6IGNhc2UgIi8tbCI6IGNhc2Ug
Ii0tbGFuZ3VhZ2UiOgoJCQkJCQlpZigoaSArIDEpID49IGFyZ2MpCgkJCQkJCXsKCQkJCQkJCVVz
YWdlKCk7CgkJCQkJCQlyZXR1cm47CgkJCQkJCX0KCQkJCQkJbGFuZ3VhZ2UgPSBhcmdzWysraV07
CgkJCQkJCWNvbnRpbnVlOwoKCQkJCQlkZWZhdWx0OgoJCQkJCQlVc2FnZSgpOwoJCQkJCQlyZXR1
cm47CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlpZihhc3NlbWJseV9maWxlID09IG51bGwpCgkJCXsK
CQkJCVVzYWdlKCk7CgkJCQlyZXR1cm47CgkJCX0gZWxzZSBpZihkaXJlY3RvcnkgPT0gbnVsbCkK
CQkJewoJCQkJVXNhZ2UoKTsKCQkJCXJldHVybjsKCQkJfQoKCQkJaWYgKCFEaXJlY3RvcnkuRXhp
c3RzKGRpcmVjdG9yeSkgJiYgZGlyZWN0b3J5ICE9IG51bGwpCgkJCXsKICAgICAgICAgICAgICAg
IERpcmVjdG9yeS5DcmVhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTsKICAgICAgICAgICAgfQoKCQkJ
Ly8gQ2FsbCB0aGUgbWFpbiBkcml2ZXIgdG8gZ2V0IHNvbWUgdGhpbmdzIGRvbmUKCQkJTWFrZVht
bCgpOwoJCX0KCgkJLy8gQnVpbGRzIGFuIFhtbERvY3VtZW50IHdpdGggdGhlIHJlZmxlY3RlZCBt
ZXRhZGF0YQoJCXByaXZhdGUgdm9pZCBNYWtlWG1sKCkKCQl7CgkJCXRyeQoJCQl7CgkJCQlhc3Nl
bWJseSA9IExvYWRBc3NlbWJseShQYXRoLkdldEZ1bGxQYXRoKGFzc2VtYmx5X2ZpbGUpKTsKCQkJ
fQoJCQljYXRjaCAoRXhjZXB0aW9uIGUpCgkJCXsKCQkJCUNvbnNvbGUuV3JpdGVMaW5lKGUuTWVz
c2FnZSk7CgkJCX0KCQkJV3JpdGUoKTsKCQl9CgoJCXByaXZhdGUgdm9pZCBXcml0ZSgpCgkJewoJ
CQlmb3JlYWNoKE1vZHVsZSBtb2R1bGUgaW4gYXNzZW1ibHkuR2V0TW9kdWxlcygpKQoJCQl7CgkJ
CQlXcml0ZU5hbWVzcGFjZXMobW9kdWxlKTsKCQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRl
TmFtZXNwYWNlcyhNb2R1bGUgbW9kdWxlKQoJCXsKCQkJVHlwZVtdIHR5cGVzID0gbW9kdWxlLkdl
dFR5cGVzKCk7CgkJCVN0cmluZ0NvbGxlY3Rpb24gbmFtZXNwYWNlTmFtZXMgPSBHZXROYW1lc3Bh
Y2VOYW1lcyh0eXBlcyk7CgkJCVhtbFRleHRXcml0ZXIgZHVtbXkgPSBuZXcgWG1sVGV4dFdyaXRl
cigiLnRlbXAueG1sIiwgbnVsbCk7CgkJCWZvcmVhY2ggKHN0cmluZyBuYW1lc3BhY2VOYW1lIGlu
IG5hbWVzcGFjZU5hbWVzKQoJCQl7CgkJCQljdXJyZW50TmFtZXNwYWNlID0gbmFtZXNwYWNlTmFt
ZTsKICAgIAkJCVdyaXRlQ2xhc3NlcyhkdW1teSx0eXBlcyk7CgkJCQlXcml0ZUludGVyZmFjZXMo
ZHVtbXksdHlwZXMpOwoJCQkJV3JpdGVTdHJ1Y3R1cmVzKGR1bW15LHR5cGVzKTsKCQkJCVdyaXRl
RGVsZWdhdGVzKGR1bW15LHR5cGVzKTsKCQkJCVdyaXRlRW51bWVyYXRpb25zKGR1bW15LHR5cGVz
KTsKCQkJfQoJCQlGaWxlLkRlbGV0ZSgiLnRlbXAueG1sIik7CgkJfQoKCQlwcml2YXRlIHZvaWQg
U3RhcnREb2N1bWVudChYbWxUZXh0V3JpdGVyIHdyaXRlcikKCQl7CgkJCXdyaXRlci5Gb3JtYXR0
aW5nID0gRm9ybWF0dGluZy5JbmRlbnRlZDsKCQkJd3JpdGVyLkluZGVudGF0aW9uPTQ7CgkJCXdy
aXRlci5Xcml0ZVN0YXJ0RG9jdW1lbnQoKTsKCQkJd3JpdGVyLldyaXRlU3RhcnRFbGVtZW50KCJt
b25vZG9jIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygibGFuZ3VhZ2UiLGxhbmd1
YWdlKTsKCQl9CgoJCXByaXZhdGUgdm9pZCBFbmREb2N1bWVudChYbWxUZXh0V3JpdGVyIHdyaXRl
cikKCQl7CiAgIAkJCW5lc3RlZCA9IGZhbHNlOwoJCQl3cml0ZXIuV3JpdGVFbmRFbGVtZW50KCk7
CgkJCXdyaXRlci5Xcml0ZUVuZERvY3VtZW50KCk7CgkJCXdyaXRlci5DbG9zZSgpOwoJCX0KCgkJ
cHJpdmF0ZSBib29sIElzRGVsZWdhdGUoVHlwZSB0eXBlKQoJCXsKCQkJcmV0dXJuIHR5cGUuQmFz
ZVR5cGUuRnVsbE5hbWUgPT0gIlN5c3RlbS5EZWxlZ2F0ZSIgfHwKCQkJCXR5cGUuQmFzZVR5cGUu
RnVsbE5hbWUgPT0gIlN5c3RlbS5NdWx0aWNhc3REZWxlZ2F0ZSI7CgkJfQoKCQlwcml2YXRlIHN0
cmluZyBHZXRUeXBlTmFtZShUeXBlIHR5cGUpCgkJewoJCQlyZXR1cm4gdHlwZS5GdWxsTmFtZS5S
ZXBsYWNlKCcrJywgJy4nKTsKCQl9CgoJCXByaXZhdGUgU3RyaW5nQ29sbGVjdGlvbiBHZXROYW1l
c3BhY2VOYW1lcyhUeXBlW10gdHlwZXMpCgkJewoJCQlTdHJpbmdDb2xsZWN0aW9uIG5hbWVzcGFj
ZU5hbWVzID0gbmV3IFN0cmluZ0NvbGxlY3Rpb24oKTsKCgkJCWZvcmVhY2ggKFR5cGUgdHlwZSBp
biB0eXBlcykKCQkJewoJCQkJaWYgKG5hbWVzcGFjZU5hbWVzLkNvbnRhaW5zKHR5cGUuTmFtZXNw
YWNlKSA9PSBmYWxzZSkKCQkJCXsKCQkJCQluYW1lc3BhY2VOYW1lcy5BZGQodHlwZS5OYW1lc3Bh
Y2UpOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gbmFtZXNwYWNlTmFtZXM7CgkJfQoKCQlwcml2YXRl
IGJvb2wgSXNBbHNvQW5FdmVudChUeXBlIHR5cGUsIHN0cmluZyBmdWxsTmFtZSkKCQl7CgkJCWJv
b2wgaXNFdmVudCA9IGZhbHNlOwoKCQkJQmluZGluZ0ZsYWdzIGJpbmRpbmdGbGFncyA9CgkJCQlC
aW5kaW5nRmxhZ3MuSW5zdGFuY2UgfAoJCQkJQmluZGluZ0ZsYWdzLlN0YXRpYyB8CgkJCQlCaW5k
aW5nRmxhZ3MuUHVibGljIHwKCQkJCUJpbmRpbmdGbGFncy5Ob25QdWJsaWMgfAoJCQkJQmluZGlu
Z0ZsYWdzLkRlY2xhcmVkT25seTsKCgkJCWZvcmVhY2ggKEV2ZW50SW5mbyBldmVudEluZm8gaW4g
dHlwZS5HZXRFdmVudHMoYmluZGluZ0ZsYWdzKSkKCQkJewoJCQkJaWYgKGV2ZW50SW5mby5FdmVu
dEhhbmRsZXJUeXBlLkZ1bGxOYW1lID09IGZ1bGxOYW1lKQoJCQkJewoJCQkJCWlzRXZlbnQgPSB0
cnVlOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gaXNFdmVudDsKCQl9CgoJCXBy
aXZhdGUgYm9vbCBJc0Fsc29BbkV2ZW50KEZpZWxkSW5mbyBmaWVsZCkKCQl7CgkJCXJldHVybiBJ
c0Fsc29BbkV2ZW50KGZpZWxkLkRlY2xhcmluZ1R5cGUsIGZpZWxkLkZpZWxkVHlwZS5GdWxsTmFt
ZSk7CgkJfQoKCQlwcml2YXRlIGJvb2wgSXNBbHNvQW5FdmVudChQcm9wZXJ0eUluZm8gcHJvcGVy
dHkpCgkJewoJCQlyZXR1cm4gSXNBbHNvQW5FdmVudChwcm9wZXJ0eS5EZWNsYXJpbmdUeXBlLCBw
cm9wZXJ0eS5Qcm9wZXJ0eVR5cGUuRnVsbE5hbWUpOwoJCX0KCgkJLy8gTG9hZHMgYW4gYXNzZW1i
bHkuCgkJcHVibGljIHN0YXRpYyBBc3NlbWJseSBMb2FkQXNzZW1ibHkoc3RyaW5nIGZpbGVuYW1l
KQoJCXsKCQkJaWYgKCFGaWxlLkV4aXN0cyhmaWxlbmFtZSkpCgkJCXsKCQkJCXRocm93IG5ldyBB
cHBsaWNhdGlvbkV4Y2VwdGlvbigiY2FuJ3QgZmluZCBhc3NlbWJseSAiICsgZmlsZW5hbWUpOwoJ
CQl9CgoJCQlGaWxlU3RyZWFtIGZzID0gRmlsZS5PcGVuKGZpbGVuYW1lLCBGaWxlTW9kZS5PcGVu
LCBGaWxlQWNjZXNzLlJlYWQpOwoJCQlieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbZnMuTGVuZ3Ro
XTsKCQkJZnMuUmVhZChidWZmZXIsIDAsIChpbnQpZnMuTGVuZ3RoKTsKCQkJZnMuQ2xvc2UoKTsK
CgkJCXJldHVybiBBc3NlbWJseS5Mb2FkKGJ1ZmZlcik7CgkJfQoKCQlwcml2YXRlIHN0cmluZyBH
ZXRQYXJhbWV0ZXJUeXBlcyhQYXJhbWV0ZXJJbmZvW10gcGFyYW1ldGVycykKCQl7CgkJCWlmIChw
YXJhbWV0ZXJzLkxlbmd0aCAhPSAwKSB7CgkJCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmlu
Z0J1aWxkZXIoKTsKCQkJCXNiLkFwcGVuZCgiKCIpOwoJCQkJZm9yZWFjaCAoUGFyYW1ldGVySW5m
byBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykKCQkJCXsKCQkJCQlzYi5BcHBlbmQoR2V0VHlwZU5h
bWUocGFyYW1ldGVyLlBhcmFtZXRlclR5cGUpICsgIiwgIik7CgkJCQl9CgkJCQlzYi5SZW1vdmUo
c2IuTGVuZ3RoLTIsIDIpOwoJCQkJc2IuQXBwZW5kKCIpIik7CgkJCQlyZXR1cm4gc2IuVG9TdHJp
bmcoKTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiAiIjsKCQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lk
IFdyaXRlQ2xhc3NlcyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZVtdIHR5cGVzKQoJCXsKCQkJ
Zm9yZWFjaCAoVHlwZSB0eXBlIGluIHR5cGVzKQoJCQl7CgkJCQlpZiAodHlwZS5Jc0NsYXNzICYm
ICFJc0RlbGVnYXRlKHR5cGUpICYmIHR5cGUuTmFtZXNwYWNlLkVxdWFscyhjdXJyZW50TmFtZXNw
YWNlKSkKCQkJCXsKCQkJCQljbGFzc25hbWUgPSB0eXBlLkZ1bGxOYW1lOwoJCQkJCWRvY25hbWUg
PSB0eXBlLk5hbWU7CgkJCQkJaWYgKCFuZXN0ZWQpCgkJCQkJewoJCQkJCQlpZiAoIURpcmVjdG9y
eS5FeGlzdHMoZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKSAmJiBkaXJlY3RvcnkgIT0g
bnVsbCkKCQkJCQkJewogICAgICAJCQkJCQlEaXJlY3RvcnkuQ3JlYXRlRGlyZWN0b3J5KGRpcmVj
dG9yeSsiLyIrY3VycmVudE5hbWVzcGFjZSk7CiAgICAgICAgICAgIAkJCX0KCQkJCQkJc3RyaW5n
IGZpbGVuYW1lID0gZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKyIvIitkb2NuYW1lKyIu
eG1sIjsKICAgCQkJCQkJd3JpdGVyID0gbmV3IFhtbFRleHRXcml0ZXIgKGZpbGVuYW1lLCBudWxs
KTsKCQkJCQkJU3RhcnREb2N1bWVudCh3cml0ZXIpOwoJCQkJCQlXcml0ZUNsYXNzKHdyaXRlciwg
dHlwZSk7CgkJCQkJCUVuZERvY3VtZW50KHdyaXRlcik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJV3Jp
dGVDbGFzcyh3cml0ZXIsIHR5cGUpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcHJpdmF0ZSB2
b2lkIFdyaXRlSW50ZXJmYWNlcyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZVtdIHR5cGVzKQoJ
CXsKICAJCQlmb3JlYWNoIChUeXBlIHR5cGUgaW4gdHlwZXMpCgkJCXsKCQkJCWlmICh0eXBlLklz
SW50ZXJmYWNlICYmIHR5cGUuTmFtZXNwYWNlLkVxdWFscyhjdXJyZW50TmFtZXNwYWNlKSkKCQkJ
CXsKCQkJCQljbGFzc25hbWUgPSB0eXBlLkZ1bGxOYW1lOwoJCQkJCWRvY25hbWUgPSB0eXBlLk5h
bWU7CgkJCQkJaWYgKCFuZXN0ZWQpCgkJCQkJewoJCQkJCQlpZiAoIURpcmVjdG9yeS5FeGlzdHMo
ZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKSAmJiBkaXJlY3RvcnkgIT0gbnVsbCkKCQkJ
CQkJewogICAgICAJCQkJCQlEaXJlY3RvcnkuQ3JlYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSsiLyIr
Y3VycmVudE5hbWVzcGFjZSk7CiAgICAgICAgICAgIAkJCX0KCQkJCQkJc3RyaW5nIGZpbGVuYW1l
ID0gZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKyIvIitkb2NuYW1lKyIueG1sIjsKICAg
CQkJCQkJd3JpdGVyID0gbmV3IFhtbFRleHRXcml0ZXIgKGZpbGVuYW1lLCBudWxsKTsKCQkJCQkJ
U3RhcnREb2N1bWVudCh3cml0ZXIpOwoJCQkJCQlXcml0ZUludGVyZmFjZSh3cml0ZXIsIHR5cGUp
OwoJCQkJCQlFbmREb2N1bWVudCh3cml0ZXIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCVdyaXRlSW50
ZXJmYWNlKHdyaXRlciwgdHlwZSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlwcml2YXRlIHZv
aWQgV3JpdGVTdHJ1Y3R1cmVzKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBUeXBlW10gdHlwZXMpCgkJ
ewoJCQlmb3JlYWNoIChUeXBlIHR5cGUgaW4gdHlwZXMpCgkJCXsKCQkJCWlmICh0eXBlLklzVmFs
dWVUeXBlICYmICF0eXBlLklzRW51bSAmJiB0eXBlLk5hbWVzcGFjZS5FcXVhbHMoY3VycmVudE5h
bWVzcGFjZSkpCgkJCQl7CgkJCQkJY2xhc3NuYW1lID0gdHlwZS5GdWxsTmFtZTsKCQkJCQlkb2Nu
YW1lID0gdHlwZS5OYW1lOwoJCQkJCWlmICghbmVzdGVkKQoJCQkJCXsKCQkJCQkJaWYgKCFEaXJl
Y3RvcnkuRXhpc3RzKGRpcmVjdG9yeSsiLyIrY3VycmVudE5hbWVzcGFjZSkgJiYgZGlyZWN0b3J5
ICE9IG51bGwpCgkJCQkJCXsKICAgICAgCQkJCQkJRGlyZWN0b3J5LkNyZWF0ZURpcmVjdG9yeShk
aXJlY3RvcnkrIi8iK2N1cnJlbnROYW1lc3BhY2UpOwogICAgICAgICAgICAJCQl9CgkJCQkJCXN0
cmluZyBmaWxlbmFtZSA9IGRpcmVjdG9yeSsiLyIrY3VycmVudE5hbWVzcGFjZSsiLyIrZG9jbmFt
ZSsiLnhtbCI7CiAgIAkJCQkJCXdyaXRlciA9IG5ldyBYbWxUZXh0V3JpdGVyIChmaWxlbmFtZSwg
bnVsbCk7CgkJCQkJCVN0YXJ0RG9jdW1lbnQod3JpdGVyKTsKCQkJCQkJV3JpdGVDbGFzcyh3cml0
ZXIsIHR5cGUpOwoJCQkJCQlFbmREb2N1bWVudCh3cml0ZXIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJ
CVdyaXRlQ2xhc3Mod3JpdGVyLCB0eXBlKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXByaXZh
dGUgdm9pZCBXcml0ZURlbGVnYXRlcyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZVtdIHR5cGVz
KQoJCXsKCQkJZm9yZWFjaCAoVHlwZSB0eXBlIGluIHR5cGVzKQoJCQl7CgkJCQlpZiAodHlwZS5J
c0NsYXNzICYmIElzRGVsZWdhdGUodHlwZSkgJiYgdHlwZS5OYW1lc3BhY2UuRXF1YWxzKGN1cnJl
bnROYW1lc3BhY2UpKQoJCQkJewoJCQkJCWNsYXNzbmFtZSA9IHR5cGUuRnVsbE5hbWU7CgkJCQkJ
ZG9jbmFtZSA9IHR5cGUuTmFtZTsKCQkJCQlpZiAoIW5lc3RlZCkKCQkJCQl7CgkJCQkJCWlmICgh
RGlyZWN0b3J5LkV4aXN0cyhkaXJlY3RvcnkrIi8iK2N1cnJlbnROYW1lc3BhY2UpICYmIGRpcmVj
dG9yeSAhPSBudWxsKQoJCQkJCQl7CiAgICAgIAkJCQkJCURpcmVjdG9yeS5DcmVhdGVEaXJlY3Rv
cnkoZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKTsKICAgICAgICAgICAgCQkJfQoJCQkJ
CQlzdHJpbmcgZmlsZW5hbWUgPSBkaXJlY3RvcnkrIi8iK2N1cnJlbnROYW1lc3BhY2UrIi8iK2Rv
Y25hbWUrIi54bWwiOwogICAJCQkJCQl3cml0ZXIgPSBuZXcgWG1sVGV4dFdyaXRlciAoZmlsZW5h
bWUsIG51bGwpOwoJCQkJCQlTdGFydERvY3VtZW50KHdyaXRlcik7CgkJCQkJCVdyaXRlRGVsZWdh
dGUod3JpdGVyLCB0eXBlKTsKCQkJCQkJRW5kRG9jdW1lbnQod3JpdGVyKTsKCQkJCQl9IGVsc2Ug
ewoJCQkJCQlXcml0ZURlbGVnYXRlKHdyaXRlciwgdHlwZSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJ
fQoKCQlwcml2YXRlIHZvaWQgV3JpdGVFbnVtZXJhdGlvbnMoWG1sVGV4dFdyaXRlciB3cml0ZXIs
IFR5cGVbXSB0eXBlcykKCQl7CgkJCWZvcmVhY2ggKFR5cGUgdHlwZSBpbiB0eXBlcykKCQkJewoJ
CQkJaWYgKHR5cGUuSXNFbnVtICYmIHR5cGUuTmFtZXNwYWNlLkVxdWFscyhjdXJyZW50TmFtZXNw
YWNlKSkKCQkJCXsKCQkJCQljbGFzc25hbWUgPSB0eXBlLkZ1bGxOYW1lOwoJCQkJCWRvY25hbWUg
PSB0eXBlLk5hbWU7CgkJCQkJaWYgKCFuZXN0ZWQpCgkJCQkJewoJCQkJCQlpZiAoIURpcmVjdG9y
eS5FeGlzdHMoZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKSAmJiBkaXJlY3RvcnkgIT0g
bnVsbCkKCQkJCQkJewogICAgICAJCQkJCQlEaXJlY3RvcnkuQ3JlYXRlRGlyZWN0b3J5KGRpcmVj
dG9yeSsiLyIrY3VycmVudE5hbWVzcGFjZSk7CiAgICAgICAgICAgIAkJCX0KCQkJCQkJc3RyaW5n
IGZpbGVuYW1lID0gZGlyZWN0b3J5KyIvIitjdXJyZW50TmFtZXNwYWNlKyIvIitkb2NuYW1lKyIu
eG1sIjsKICAgCQkJCQkJd3JpdGVyID0gbmV3IFhtbFRleHRXcml0ZXIgKGZpbGVuYW1lLCBudWxs
KTsKCQkJCQkJU3RhcnREb2N1bWVudCh3cml0ZXIpOwoJCQkJCQlXcml0ZUVudW1lcmF0aW9uKHdy
aXRlciwgdHlwZSk7CgkJCQkJCUVuZERvY3VtZW50KHdyaXRlcik7CgkJCQkJfSBlbHNlIHsKCQkJ
CQkJV3JpdGVFbnVtZXJhdGlvbih3cml0ZXIsIHR5cGUpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0K
CgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhIGNsYXNzIG9yIHN0cnVjdC4KCQlwcml2YXRl
IHZvaWQgV3JpdGVDbGFzcyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZSB0eXBlKQoJCXsKCQkJ
VHlwZVtdIHR5cGVzID0gdHlwZS5HZXROZXN0ZWRUeXBlcygpOwoJCQlBc3NlbWJseU5hbWUgYXNz
ZW1ibHlOYW1lID0gYXNzZW1ibHkuR2V0TmFtZSgpOwoJCQlib29sIGlzU3RydWN0ID0gdHlwZS5J
c1ZhbHVlVHlwZTsKCQkJbmVzdGVkID0gdHJ1ZTsKCgkJCXdyaXRlci5Xcml0ZVN0YXJ0RWxlbWVu
dChpc1N0cnVjdCA/ICJzdHJ1Y3QiIDogImNsYXNzIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0
ZVN0cmluZygibmFtZSIsIHR5cGUuRnVsbE5hbWUpOwoJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVT
dHJpbmcoImFzc2VtYmx5IiwgYXNzZW1ibHlOYW1lLk5hbWUpOwoJCQl3cml0ZXIuV3JpdGVFbGVt
ZW50U3RyaW5nKCJzdW1tYXJ5IiwiVE9ETyIpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5n
KCJyZW1hcmtzIiwiVE9ETyIpOwoKCQkJV3JpdGVDbGFzc2VzKHdyaXRlciwgdHlwZXMpOwoJCQlX
cml0ZUludGVyZmFjZXMod3JpdGVyLCB0eXBlcyk7CgkJCVdyaXRlU3RydWN0dXJlcyh3cml0ZXIs
IHR5cGVzKTsKCQkJV3JpdGVEZWxlZ2F0ZXMod3JpdGVyLCB0eXBlcyk7CgkJCVdyaXRlRW51bWVy
YXRpb25zKHdyaXRlciwgdHlwZXMpOwoKCQkJV3JpdGVDb25zdHJ1Y3RvcnMod3JpdGVyLCB0eXBl
KTsKCQkJV3JpdGVGaWVsZHMod3JpdGVyLCB0eXBlKTsKCQkJV3JpdGVQcm9wZXJ0aWVzKHdyaXRl
ciwgdHlwZSk7CgkJCVdyaXRlTWV0aG9kcyh3cml0ZXIsIHR5cGUpOwoJCQlXcml0ZU9wZXJhdG9y
cyh3cml0ZXIsIHR5cGUpOwoJCQlXcml0ZUV2ZW50cyh3cml0ZXIsIHR5cGUpOwoKCQkJd3JpdGVy
LldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhbiBp
bnRlcmZhY2UuCgkJcHJpdmF0ZSB2b2lkIFdyaXRlSW50ZXJmYWNlKFhtbFRleHRXcml0ZXIgd3Jp
dGVyLCBUeXBlIHR5cGUpCgkJewoJCQlUeXBlW10gdHlwZXMgPSB0eXBlLkdldE5lc3RlZFR5cGVz
KCk7CgkJCUFzc2VtYmx5TmFtZSBhc3NlbWJseU5hbWUgPSBhc3NlbWJseS5HZXROYW1lKCk7CgoJ
CQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQoImludGVyZmFjZSIpOwoJCQl3cml0ZXIuV3JpdGVB
dHRyaWJ1dGVTdHJpbmcoIm5hbWUiLCB0eXBlLkZ1bGxOYW1lKTsKCQkJd3JpdGVyLldyaXRlQXR0
cmlidXRlU3RyaW5nKCJhc3NlbWJseSIsIGFzc2VtYmx5TmFtZS5OYW1lKTsKCQkJd3JpdGVyLldy
aXRlRWxlbWVudFN0cmluZygic3VtbWFyeSIsIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlRWxlbWVu
dFN0cmluZygicmVtYXJrcyIsIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlU3RhcnRFbGVtZW50KCJz
ZWVhbHNvIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygiY3JlZiIsICJUT0RPIik7
CgkJCXdyaXRlci5Xcml0ZUVuZEVsZW1lbnQoKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgp
OwoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhIGRlbGVnYXRlLgoJCXByaXZhdGUg
dm9pZCBXcml0ZURlbGVnYXRlKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBUeXBlIHR5cGUpCgkJewoJ
CQlUeXBlW10gdHlwZXMgPSB0eXBlLkdldE5lc3RlZFR5cGVzKCk7CgkJCUFzc2VtYmx5TmFtZSBh
c3NlbWJseU5hbWUgPSBhc3NlbWJseS5HZXROYW1lKCk7CgoJCQl3cml0ZXIuV3JpdGVTdGFydEVs
ZW1lbnQoImRlbGVnYXRlIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygibmFtZSIs
IHR5cGUuRnVsbE5hbWUpOwoJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcoImFzc2VtYmx5
IiwgYXNzZW1ibHlOYW1lLk5hbWUpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJzdW1t
YXJ5IiwiVE9ETyIpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZW1hcmtzIiwiVE9E
TyIpOwoJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQoInNlZWFsc28iKTsKCQkJd3JpdGVyLldy
aXRlQXR0cmlidXRlU3RyaW5nKCJjcmVmIiwgIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxl
bWVudCgpOwoKCQkJLy9wYXJhbQoKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCgkJ
Ly8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhbiBlbnVtZXJhdGlvbi4KCQlwcml2YXRlIHZvaWQg
V3JpdGVFbnVtZXJhdGlvbihYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZSB0eXBlKQoJCXsKCQkJ
VHlwZVtdIHR5cGVzID0gdHlwZS5HZXROZXN0ZWRUeXBlcygpOwoJCQlBc3NlbWJseU5hbWUgYXNz
ZW1ibHlOYW1lID0gYXNzZW1ibHkuR2V0TmFtZSgpOwoKCQkJd3JpdGVyLldyaXRlU3RhcnRFbGVt
ZW50KCJlbnVtIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygibmFtZSIsIHR5cGUu
RnVsbE5hbWUpOwoJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcoImFzc2VtYmx5IiwgYXNz
ZW1ibHlOYW1lLk5hbWUpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJzdW1tYXJ5Iiwi
VE9ETyIpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZW1hcmtzIiwiVE9ETyIpOwoK
CQkJd3JpdGVyLldyaXRlU3RhcnRFbGVtZW50KCJtZW1iZXIiKTsKCQkJd3JpdGVyLldyaXRlQXR0
cmlidXRlU3RyaW5nKCJuYW1lIiwgIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgp
OwoKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRl
Q29uc3RydWN0b3JzKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBUeXBlIHR5cGUpCgkJewoJCQlCaW5k
aW5nRmxhZ3MgYmluZGluZ0ZsYWdzID0KCQkJCUJpbmRpbmdGbGFncy5JbnN0YW5jZSB8CgkJCQlC
aW5kaW5nRmxhZ3MuUHVibGljIHwKCQkJCUJpbmRpbmdGbGFncy5Ob25QdWJsaWM7CgoJCQlDb25z
dHJ1Y3RvckluZm9bXSBjb25zdHJ1Y3RvcnMgPSB0eXBlLkdldENvbnN0cnVjdG9ycyhiaW5kaW5n
RmxhZ3MpOwoKCQkJZm9yZWFjaCAoQ29uc3RydWN0b3JJbmZvIGNvbnN0cnVjdG9yIGluIGNvbnN0
cnVjdG9ycykKCQkJewoJCQkJV3JpdGVDb25zdHJ1Y3Rvcih3cml0ZXIsIGNvbnN0cnVjdG9yKTsK
CQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRlRmllbGRzKFhtbFRleHRXcml0ZXIgd3JpdGVy
LCBUeXBlIHR5cGUpCgkJewoJCQlCaW5kaW5nRmxhZ3MgYmluZGluZ0ZsYWdzID0KCQkJCUJpbmRp
bmdGbGFncy5JbnN0YW5jZSB8CgkJCQlCaW5kaW5nRmxhZ3MuU3RhdGljIHwKCQkJCUJpbmRpbmdG
bGFncy5QdWJsaWMgfAoJCQkJQmluZGluZ0ZsYWdzLk5vblB1YmxpYzsKCgkJCWZvcmVhY2ggKEZp
ZWxkSW5mbyBmaWVsZCBpbiB0eXBlLkdldEZpZWxkcyhiaW5kaW5nRmxhZ3MpKQoJCQl7CgkJCQlp
ZiAoIUlzQWxzb0FuRXZlbnQoZmllbGQpKQoJCQkJewoJCQkJCVdyaXRlRmllbGQod3JpdGVyLCBm
aWVsZCk7CgkJCQl9CgkJCX0KCQl9CgoJCXByaXZhdGUgdm9pZCBXcml0ZVByb3BlcnRpZXMoWG1s
VGV4dFdyaXRlciB3cml0ZXIsIFR5cGUgdHlwZSkKCQl7CgkJCUJpbmRpbmdGbGFncyBiaW5kaW5n
RmxhZ3MgPQoJCQkJQmluZGluZ0ZsYWdzLkluc3RhbmNlIHwKCQkJCUJpbmRpbmdGbGFncy5TdGF0
aWMgfAoJCQkJQmluZGluZ0ZsYWdzLlB1YmxpYyB8CgkJCQlCaW5kaW5nRmxhZ3MuTm9uUHVibGlj
OwoKCQkJUHJvcGVydHlJbmZvW10gcHJvcGVydGllcyA9IHR5cGUuR2V0UHJvcGVydGllcyhiaW5k
aW5nRmxhZ3MpOwoKCQkJZm9yZWFjaCAoUHJvcGVydHlJbmZvIHByb3BlcnR5IGluIHByb3BlcnRp
ZXMpCgkJCXsKCQkJCU1ldGhvZEluZm8gZ2V0TWV0aG9kID0gcHJvcGVydHkuR2V0R2V0TWV0aG9k
KHRydWUpOwoJCQkJTWV0aG9kSW5mbyBzZXRNZXRob2QgPSBwcm9wZXJ0eS5HZXRTZXRNZXRob2Qo
dHJ1ZSk7CgoJCQkJYm9vbCBoYXNHZXR0ZXIgPSAoZ2V0TWV0aG9kICE9IG51bGwpOwoJCQkJYm9v
bCBoYXNTZXR0ZXIgPSAoc2V0TWV0aG9kICE9IG51bGwpOwoKCQkJCWlmICgoaGFzR2V0dGVyIHx8
IGhhc1NldHRlcikgJiYgIUlzQWxzb0FuRXZlbnQocHJvcGVydHkpKQoJCQkJewoJCQkJCVdyaXRl
UHJvcGVydHkod3JpdGVyLCBwcm9wZXJ0eSwgcHJvcGVydHkuRGVjbGFyaW5nVHlwZS5GdWxsTmFt
ZSAhPSB0eXBlLkZ1bGxOYW1lKTsKCQkJCX0KCQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRl
TWV0aG9kcyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZSB0eXBlKQoJCXsKCQkJQmluZGluZ0Zs
YWdzIGJpbmRpbmdGbGFncyA9CgkJCQlCaW5kaW5nRmxhZ3MuSW5zdGFuY2UgfAoJCQkJQmluZGlu
Z0ZsYWdzLlN0YXRpYyB8CgkJCQlCaW5kaW5nRmxhZ3MuUHVibGljIHwKCQkJCUJpbmRpbmdGbGFn
cy5Ob25QdWJsaWM7CgoJCQlNZXRob2RJbmZvW10gbWV0aG9kcyA9IHR5cGUuR2V0TWV0aG9kcyhi
aW5kaW5nRmxhZ3MpOwoKCQkJZm9yZWFjaCAoTWV0aG9kSW5mbyBtZXRob2QgaW4gbWV0aG9kcykK
CQkJewoJCQkJaWYgKCEobWV0aG9kLk5hbWUuU3RhcnRzV2l0aCgiZ2V0XyIpKSAmJgoJCQkJCSEo
bWV0aG9kLk5hbWUuU3RhcnRzV2l0aCgic2V0XyIpKSAmJgoJCQkJCSEobWV0aG9kLk5hbWUuU3Rh
cnRzV2l0aCgiYWRkXyIpKSAmJgoJCQkJCSEobWV0aG9kLk5hbWUuU3RhcnRzV2l0aCgicmVtb3Zl
XyIpKSAmJgoJCQkJCSEobWV0aG9kLk5hbWUuU3RhcnRzV2l0aCgib3BfIikpKQoJCQkJewoJCQkJ
CVdyaXRlTWV0aG9kKHdyaXRlciwgbWV0aG9kLCBtZXRob2QuRGVjbGFyaW5nVHlwZS5GdWxsTmFt
ZSAhPSB0eXBlLkZ1bGxOYW1lKTsKCQkJCX0KCQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRl
T3BlcmF0b3JzKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBUeXBlIHR5cGUpCgkJewoJCQlCaW5kaW5n
RmxhZ3MgYmluZGluZ0ZsYWdzID0KCQkJCUJpbmRpbmdGbGFncy5JbnN0YW5jZSB8CgkJCQlCaW5k
aW5nRmxhZ3MuU3RhdGljIHwKCQkJCUJpbmRpbmdGbGFncy5QdWJsaWMgfAoJCQkJQmluZGluZ0Zs
YWdzLk5vblB1YmxpYzsKCgkJCU1ldGhvZEluZm9bXSBtZXRob2RzID0gdHlwZS5HZXRNZXRob2Rz
KGJpbmRpbmdGbGFncyk7CgoJCQlmb3JlYWNoIChNZXRob2RJbmZvIG1ldGhvZCBpbiBtZXRob2Rz
KQoJCQl7CgkJCQlpZiAobWV0aG9kLk5hbWUuU3RhcnRzV2l0aCgib3BfIikpCgkJCQl7CgkJCQkJ
V3JpdGVPcGVyYXRvcih3cml0ZXIsIG1ldGhvZCk7CgkJCQl9CgkJCX0KCQl9CgoJCXByaXZhdGUg
dm9pZCBXcml0ZUV2ZW50cyhYbWxUZXh0V3JpdGVyIHdyaXRlciwgVHlwZSB0eXBlKQoJCXsKCQkJ
QmluZGluZ0ZsYWdzIGJpbmRpbmdGbGFncyA9CgkJCQlCaW5kaW5nRmxhZ3MuSW5zdGFuY2UgfAoJ
CQkJQmluZGluZ0ZsYWdzLlN0YXRpYyB8CgkJCQlCaW5kaW5nRmxhZ3MuUHVibGljIHwKCQkJCUJp
bmRpbmdGbGFncy5Ob25QdWJsaWMgfAoJCQkJQmluZGluZ0ZsYWdzLkRlY2xhcmVkT25seTsKCgkJ
CWZvcmVhY2ggKEV2ZW50SW5mbyBldmVudEluZm8gaW4gdHlwZS5HZXRFdmVudHMoYmluZGluZ0Zs
YWdzKSkKCQkJewoJCQkJTWV0aG9kSW5mbyBhZGRNZXRob2QgPSBldmVudEluZm8uR2V0QWRkTWV0
aG9kKHRydWUpOwoKCQkJCWlmIChhZGRNZXRob2QgIT0gbnVsbCkKCQkJCXsKCQkJCQlXcml0ZUV2
ZW50KHdyaXRlciwgZXZlbnRJbmZvKTsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gV3JpdGVzIFhNTCBk
b2N1bWVudGluZyBhIGZpZWxkLgoJCXByaXZhdGUgdm9pZCBXcml0ZUZpZWxkKFhtbFRleHRXcml0
ZXIgd3JpdGVyLCBGaWVsZEluZm8gZmllbGQpCgkJewoJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1l
bnQoImZpZWxkIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygibmFtZSIsIGZpZWxk
Lk5hbWUpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJzdW1tYXJ5IiwiVE9ETyIpOwoJ
CQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZW1hcmtzIiwiVE9ETyIpOwoJCQl3cml0ZXIu
V3JpdGVTdGFydEVsZW1lbnQoInNlZWFsc28iKTsKCQkJd3JpdGVyLldyaXRlQXR0cmlidXRlU3Ry
aW5nKCJjcmVmIiwgIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoKCQkJd3Jp
dGVyLldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBh
biBldmVudC4KCQlwcml2YXRlIHZvaWQgV3JpdGVFdmVudChYbWxUZXh0V3JpdGVyIHdyaXRlciwg
RXZlbnRJbmZvIGV2ZW50SW5mbykKCQl7CgkJCXdyaXRlci5Xcml0ZVN0YXJ0RWxlbWVudCgiZXZl
bnQiKTsKCQkJd3JpdGVyLldyaXRlQXR0cmlidXRlU3RyaW5nKCJuYW1lIiwgZXZlbnRJbmZvLk5h
bWUpOwoJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJzdW1tYXJ5IiwiVE9ETyIpOwoJCQl3
cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZW1hcmtzIiwiVE9ETyIpOwoJCQl3cml0ZXIuV3Jp
dGVFbGVtZW50U3RyaW5nKCJkYXRhIiwiVE9ETyIpOwoJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1l
bnQoInNlZWFsc28iKTsKCQkJd3JpdGVyLldyaXRlQXR0cmlidXRlU3RyaW5nKCJjcmVmIiwgIlRP
RE8iKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoKCQkJd3JpdGVyLldyaXRlRW5kRWxl
bWVudCgpOwoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhIGNvbnN0cnVjdG9yLgoJ
CXByaXZhdGUgdm9pZCBXcml0ZUNvbnN0cnVjdG9yKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBDb25z
dHJ1Y3RvckluZm8gY29uc3RydWN0b3IpCgkJewoJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQo
ImNvbnN0cnVjdG9yIik7CgkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygibmFtZSIsIGRv
Y25hbWUgKyBHZXRQYXJhbWV0ZXJUeXBlcyhjb25zdHJ1Y3Rvci5HZXRQYXJhbWV0ZXJzKCkpKTsK
CQkJd3JpdGVyLldyaXRlRWxlbWVudFN0cmluZygic3VtbWFyeSIsIlRPRE8iKTsKCQkJd3JpdGVy
LldyaXRlRWxlbWVudFN0cmluZygicmVtYXJrcyIsIlRPRE8iKTsKCgkJCWZvcmVhY2ggKFBhcmFt
ZXRlckluZm8gcGFyYW1ldGVyIGluIGNvbnN0cnVjdG9yLkdldFBhcmFtZXRlcnMoKSkKCQkJewoJ
CQkJV3JpdGVQYXJhbWV0ZXIod3JpdGVyLCBwYXJhbWV0ZXIpOwoJCQl9CgoJCQl3cml0ZXIuV3Jp
dGVTdGFydEVsZW1lbnQoInNlZWFsc28iKTsKCQkJd3JpdGVyLldyaXRlQXR0cmlidXRlU3RyaW5n
KCJjcmVmIiwgIlRPRE8iKTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoKCQkJd3JpdGVy
LldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhIHBy
b3BlcnR5LgoJCXByaXZhdGUgdm9pZCBXcml0ZVByb3BlcnR5KFhtbFRleHRXcml0ZXIgd3JpdGVy
LCBQcm9wZXJ0eUluZm8gcHJvcGVydHksIGJvb2wgaW5oZXJpdGVkICkKCQl7CgkJCWlmICghaW5o
ZXJpdGVkKQoJCQl7CgkJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQoInByb3BlcnR5Iik7CgkJ
CQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcoIm5hbWUiLCBwcm9wZXJ0eS5OYW1lKTsKCQkJ
CXdyaXRlci5Xcml0ZUVsZW1lbnRTdHJpbmcoInN1bW1hcnkiLCJUT0RPIik7CgkJCQl3cml0ZXIu
V3JpdGVFbGVtZW50U3RyaW5nKCJyZW1hcmtzIiwiVE9ETyIpOwoJCQkJd3JpdGVyLldyaXRlRWxl
bWVudFN0cmluZygidmFsdWUiLCJUT0RPIik7CgkJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQo
InNlZWFsc28iKTsKCQkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZygiY3JlZiIsICJUT0RP
Iik7CgkJCQl3cml0ZXIuV3JpdGVFbmRFbGVtZW50KCk7CgoJCQkJd3JpdGVyLldyaXRlRW5kRWxl
bWVudCgpOwoJCQl9CgkJfQoKCQkvLyBXcml0ZXMgWE1MIGRvY3VtZW50aW5nIGFuIG9wZXJhdG9y
LgoJCXByaXZhdGUgdm9pZCBXcml0ZU9wZXJhdG9yKFhtbFRleHRXcml0ZXIgd3JpdGVyLCBNZXRo
b2RJbmZvIG1ldGhvZCkKCQl7CgkJCWlmIChtZXRob2QgIT0gbnVsbCkKCQkJewoJCQkJd3JpdGVy
LldyaXRlU3RhcnRFbGVtZW50KCJvcGVyYXRvciIpOwoJCQkJd3JpdGVyLldyaXRlQXR0cmlidXRl
U3RyaW5nKCJuYW1lIiwgbWV0aG9kLk5hbWUgKyBHZXRQYXJhbWV0ZXJUeXBlcyhtZXRob2QuR2V0
UGFyYW1ldGVycygpKSk7CgkJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJzdW1tYXJ5Iiwi
VE9ETyIpOwoJCQkJd3JpdGVyLldyaXRlRWxlbWVudFN0cmluZygicmVtYXJrcyIsIlRPRE8iKTsK
CgkJCQlmb3JlYWNoIChQYXJhbWV0ZXJJbmZvIHBhcmFtZXRlciBpbiBtZXRob2QuR2V0UGFyYW1l
dGVycygpKQoJCQkJewoJCQkJCVdyaXRlUGFyYW1ldGVyKHdyaXRlciwgcGFyYW1ldGVyKTsKCQkJ
CX0KCgkJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZXR1cm5UeXBlIiwgbWV0aG9kLlJl
dHVyblR5cGUuRnVsbE5hbWUpOwoJCQkJd3JpdGVyLldyaXRlU3RhcnRFbGVtZW50KCJzZWVhbHNv
Iik7CgkJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcoImNyZWYiLCAiVE9ETyIpOwoJCQkJ
d3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoKCQkJCXdyaXRlci5Xcml0ZUVuZEVsZW1lbnQoKTsK
CQkJfQoJCX0KCgkJLy8gV3JpdGVzIFhNTCBkb2N1bWVudGluZyBhIG1ldGhvZC4KCQlwcml2YXRl
IHZvaWQgV3JpdGVNZXRob2QoWG1sVGV4dFdyaXRlciB3cml0ZXIsIE1ldGhvZEluZm8gbWV0aG9k
LCBib29sIGluaGVyaXRlZCkKCQl7CgkJCWlmICghaW5oZXJpdGVkICYmIG1ldGhvZCAhPSBudWxs
KQoJCQl7CgkJCQl3cml0ZXIuV3JpdGVTdGFydEVsZW1lbnQoIm1ldGhvZCIpOwoJCQkJd3JpdGVy
LldyaXRlQXR0cmlidXRlU3RyaW5nKCJuYW1lIiwgbWV0aG9kLk5hbWUgKyBHZXRQYXJhbWV0ZXJU
eXBlcyhtZXRob2QuR2V0UGFyYW1ldGVycygpKSk7CgkJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3Ry
aW5nKCJzdW1tYXJ5IiwiVE9ETyIpOwoJCQkJd3JpdGVyLldyaXRlRWxlbWVudFN0cmluZygicmVt
YXJrcyIsIlRPRE8iKTsKCgkJCQlmb3JlYWNoIChQYXJhbWV0ZXJJbmZvIHBhcmFtZXRlciBpbiBt
ZXRob2QuR2V0UGFyYW1ldGVycygpKQoJCQkJewoJCQkJCVdyaXRlUGFyYW1ldGVyKHdyaXRlciwg
cGFyYW1ldGVyKTsKCQkJCX0KCgkJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nKCJyZXR1cm5U
eXBlIiwgbWV0aG9kLlJldHVyblR5cGUuRnVsbE5hbWUpOwoJCQkJd3JpdGVyLldyaXRlU3RhcnRF
bGVtZW50KCJzZWVhbHNvIik7CgkJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcoImNyZWYi
LCAiVE9ETyIpOwoJCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoKCQkJCXdyaXRlci5Xcml0
ZUVuZEVsZW1lbnQoKTsKCQkJfQoJCX0KCgkJcHJpdmF0ZSB2b2lkIFdyaXRlUGFyYW1ldGVyKFht
bFRleHRXcml0ZXIgd3JpdGVyLCBQYXJhbWV0ZXJJbmZvIHBhcmFtZXRlcikKCQl7CgkJCXdyaXRl
ci5Xcml0ZVN0YXJ0RWxlbWVudCgicGFyYW0iKTsKCQkJd3JpdGVyLldyaXRlQXR0cmlidXRlU3Ry
aW5nKCJuYW1lIiwgcGFyYW1ldGVyLk5hbWUpOwoJCQl3cml0ZXIuV3JpdGVTdHJpbmcoIlRPRE8i
KTsKCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCgpOwoJCX0KCX0KfQoK

--------------Boundary-00=_CAVEJVKUVRZ88Q8L67MY--