Re: How to preserve dates when copying rows with a CellCopyPolicy value for cellStyle set to false

Andreas Reichel <[email protected]> Wed, 12 Feb 2025 04:46:39 +0700
Newsgroups gmane.comp.jakarta.poi.user
Organization manticore-projects Co. Ltd.
Message-ID <9a2197296811e7e663f12732002d145262e63ba9.camel@manticore-projects.com>
--=-OrDRrSt6U48X5+mRWVj7
Content-Type: multipart/alternative; boundary="=-ToScM56NbgKXHfLL6pIj"

--=-ToScM56NbgKXHfLL6pIj
Content-Type: text/plain; charset="ISO-8859-15"
Content-Transfer-Encoding: 7bit

Good Morning Dan,

we are using the following clumpsy code to copy/shift 100 thousands of
rows in our reporting -- with formulas and formatting.
It works for us although it is certainly not optimal and has not been
touched for years.

I attached it only in the hope that it can be helpful somehow.
Cheers and best
Andreas

--=-ToScM56NbgKXHfLL6pIj
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html><head><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style></head><body><div>Good Morning Dan,</div><div><br></div><div>we are=
 using the following clumpsy code to copy/shift 100 thousands of rows in ou=
r reporting -- with formulas and formatting.</div><div>It works for us alth=
ough it is certainly not optimal and has not been touched for years.</div><=
div><br></div><div>I attached it only in the hope that it can be helpful so=
mehow.</div><div>Cheers and best</div><div>Andreas</div><div><span></span><=
/div></body></html>

--=-ToScM56NbgKXHfLL6pIj--

--=-OrDRrSt6U48X5+mRWVj7
Content-Disposition: attachment; filename="ExcelTools.java"
Content-Transfer-Encoding: base64
Content-Type: text/x-java; name="ExcelTools.java"; charset="ISO-8859-15"

LyoqCiAqIENvcHlyaWdodCAoQykgMjAyNCBBbmRyZWFzIFJlaWNoZWwgPGFuZHJlYXNAbWFudGlj
b3JlLXByb2plY3RzLmNvbT4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZQogKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMKICogb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQKICogZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsKICogaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCiAqIDAyMTEw
LTEzMDEsIFVTQS4KICovCi8qCiAqIFRvIGNoYW5nZSB0aGlzIGxpY2Vuc2UgaGVhZGVyLCBjaG9v
c2UgTGljZW5zZSBIZWFkZXJzIGluIFByb2plY3QgUHJvcGVydGllcy4gVG8gY2hhbmdlIHRoaXMK
ICogdGVtcGxhdGUgZmlsZSwgY2hvb3NlIFRvb2xzIHwgVGVtcGxhdGVzIGFuZCBvcGVuIHRoZSB0
ZW1wbGF0ZSBpbiB0aGUgZWRpdG9yLgogKi8KcGFja2FnZSBjb20ubWFudGljb3JlLnJlcG9ydDsK
CmltcG9ydCBvcmcuYXBhY2hlLnBvaS5oc3NmLnVzZXJtb2RlbC5IU1NGRXZhbHVhdGlvbldvcmti
b29rOwppbXBvcnQgb3JnLmFwYWNoZS5wb2kuaHNzZi51c2VybW9kZWwuSFNTRldvcmtib29rOwov
LyBpbXBvcnQgb3JnLmFwYWNoZS5wb2kuaHNzZi51c2VybW9kZWwuKjsKaW1wb3J0IG9yZy5hcGFj
aGUucG9pLnNzLmZvcm11bGEuKjsKaW1wb3J0IG9yZy5hcGFjaGUucG9pLnNzLmZvcm11bGEucHRn
LkFyZWFQdGdCYXNlOwppbXBvcnQgb3JnLmFwYWNoZS5wb2kuc3MuZm9ybXVsYS5wdGcuUHRnOwpp
bXBvcnQgb3JnLmFwYWNoZS5wb2kuc3MuZm9ybXVsYS5wdGcuUmVmUHRnQmFzZTsKaW1wb3J0IG9y
Zy5hcGFjaGUucG9pLnNzLnVzZXJtb2RlbC4qOwppbXBvcnQgb3JnLmFwYWNoZS5wb2kuc3MudXRp
bC5DZWxsUmFuZ2VBZGRyZXNzOwppbXBvcnQgb3JnLmFwYWNoZS5wb2kueHNzZi5zdHJlYW1pbmcu
U1hTU0ZTaGVldDsKaW1wb3J0IG9yZy5hcGFjaGUucG9pLnhzc2Yuc3RyZWFtaW5nLlNYU1NGV29y
a2Jvb2s7CmltcG9ydCBvcmcuYXBhY2hlLnBvaS54c3NmLnVzZXJtb2RlbC5YU1NGRXZhbHVhdGlv
bldvcmtib29rOwppbXBvcnQgb3JnLmFwYWNoZS5wb2kueHNzZi51c2VybW9kZWwuWFNTRldvcmti
b29rOwoKLyoqCiAqCiAqIEBhdXRob3IgYXJlCiAqLwpwdWJsaWMgY2xhc3MgRXhjZWxUb29scyB7
CgogICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlRGF0YVRvU2hlZXQoZmluYWwgV29ya2Jvb2sg
d29ya2Jvb2ssIFN0cmluZyBzaGVldE5hbWUsIE9iamVjdFtdW10gZGF0YSwKICAgICAgICAgICAg
Rm9ybXVsYVBhcnNpbmdXb3JrYm9vayBwYXJzaW5nV29ya2Jvb2ssIEZvcm11bGFSZW5kZXJpbmdX
b3JrYm9vayByZW5kZXJpbmdXb3JrYm9vaywKICAgICAgICAgICAgaW50IHJvd09mZnNldCwgaW50
IGNvbE9mZnNldCkgewogICAgICAgIFNoZWV0IHNoZWV0ID0gd29ya2Jvb2suZ2V0U2hlZXQoc2hl
ZXROYW1lKTsKICAgICAgICBmb3IgKGludCByID0gMDsgciA8IGRhdGEubGVuZ3RoOyByKyspIHsK
ICAgICAgICAgICAgLy8gaWYgKHIgPiAwKSB7CiAgICAgICAgICAgIHNoaWZ0Um93cyh3b3JrYm9v
aywgc2hlZXQsIHBhcnNpbmdXb3JrYm9vaywgcmVuZGVyaW5nV29ya2Jvb2ssIHJvd09mZnNldCAr
IHIpOwogICAgICAgICAgICAvLyB9CgogICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGRh
dGFbcl0ubGVuZ3RoOyBjKyspIHsKICAgICAgICAgICAgICAgIFJvdyByb3cgPSBzaGVldC5nZXRS
b3cocm93T2Zmc2V0ICsgcik7CiAgICAgICAgICAgICAgICBpZiAocm93ID09IG51bGwpIHsKICAg
ICAgICAgICAgICAgICAgICByb3cgPSBzaGVldC5jcmVhdGVSb3cocm93T2Zmc2V0ICsgcik7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQ2VsbCBjZWxsID0gcm93LmdldENlbGwo
Y29sT2Zmc2V0ICsgYyk7CiAgICAgICAgICAgICAgICBpZiAoY2VsbCA9PSBudWxsKSB7CiAgICAg
ICAgICAgICAgICAgICAgY2VsbCA9IHJvdy5jcmVhdGVDZWxsKGNvbE9mZnNldCArIGMpOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGRhdGFbcl1bY107
CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHsKICAgICAgICAg
ICAgICAgICAgICBjZWxsLnNldENlbGxWYWx1ZSgoKE51bWJlcikgdmFsdWUpLmRvdWJsZVZhbHVl
KCkpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIGphdmEuc3Fs
LkRhdGUpIHsKICAgICAgICAgICAgICAgICAgICBqYXZhLnNxbC5EYXRlIHNxbERhdGUgPSAoamF2
YS5zcWwuRGF0ZSkgdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkRhdGUgZGF0
ZSA9IG5ldyBqYXZhLnV0aWwuRGF0ZShzcWxEYXRlLmdldFRpbWUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgY2VsbC5zZXRDZWxsVmFsdWUoZGF0ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlIGluc3RhbmNlb2YgamF2YS5zcWwuVGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAg
ICAgamF2YS5zcWwuVGltZXN0YW1wIHRpbWVzdGFtcCA9IChqYXZhLnNxbC5UaW1lc3RhbXApIHZh
bHVlOwogICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5EYXRlIGRhdGUgPSBuZXcgamF2YS51
dGlsLkRhdGUodGltZXN0YW1wLmdldFRpbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5z
ZXRDZWxsVmFsdWUoZGF0ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3Rh
bmNlb2YgamF2YS51dGlsLkRhdGUpIHsKICAgICAgICAgICAgICAgICAgICBjZWxsLnNldENlbGxW
YWx1ZSgoamF2YS51dGlsLkRhdGUpIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0gIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgIGNlbGwuc2V0Q2VsbFZhbHVlKHZhbHVlICE9IG51bGwgPyB2YWx1
ZS50b1N0cmluZygpIDogIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaGlmdFJvd3MoV29ya2Jvb2sgd29y
a2Jvb2ssIFNoZWV0IHdvcmtzaGVldCwKICAgICAgICAgICAgRm9ybXVsYVBhcnNpbmdXb3JrYm9v
ayBwYXJzaW5nV29ya2Jvb2ssIEZvcm11bGFSZW5kZXJpbmdXb3JrYm9vayByZW5kZXJpbmdXb3Jr
Ym9vaywKICAgICAgICAgICAgaW50IHJvd051bSkgewogICAgICAgIGZvciAoaW50IHIgPSB3b3Jr
c2hlZXQuZ2V0TGFzdFJvd051bSgpOyByID49IHJvd051bTsgci0tKSB7CiAgICAgICAgICAgIFJv
dyBzb3VyY2VSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHIpOwogICAgICAgICAgICBpZiAoc291cmNl
Um93ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIFJvdyBuZXdSb3cgPSB3b3Jrc2hlZXQuY3Jl
YXRlUm93KHIgKyAxKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgc291cmNl
Um93LmdldExhc3RDZWxsTnVtKCk7IGMrKykgewogICAgICAgICAgICAgICAgICAgIENlbGwgb2xk
Q2VsbCA9IHNvdXJjZVJvdy5nZXRDZWxsKGMpOwogICAgICAgICAgICAgICAgICAgIGlmIChvbGRD
ZWxsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbCBuZXdDZWxsID0gbmV3
Um93LmNyZWF0ZUNlbGwoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2Vs
bFN0eWxlKG9sZENlbGwuZ2V0Q2VsbFN0eWxlKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChvbGRDZWxsLmdldENlbGxUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQkxBTks6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5z
ZXRCbGFuaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBCT09MRUFOOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0Qm9vbGVhbkNlbGxWYWx1
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q2VsbC5zZXRDZWxsRXJyb3JWYWx1ZShvbGRDZWxsLmdldEVycm9yQ2VsbFZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBGT1JNVUxBOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRGb3Jt
dWxhID0gb2xkQ2VsbC5nZXRDZWxsRm9ybXVsYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQdGdbXSBwdGdzID0gRm9ybXVsYVBhcnNlci5wYXJzZShvbGRGb3JtdWxhLCBw
YXJzaW5nV29ya2Jvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRm9ybXVsYVR5cGUuQ0VMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrYm9vay5nZXRTaGVldEluZGV4KHdvcmtzaGVldCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgUFRHJ3MKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChQdGcgcHRnIDogcHRncykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0ZyBpbnN0YW5jZW9m
IFJlZlB0Z0Jhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWZQdGdCYXNlIHJlZlB0Z0Jhc2UgPSAoUmVmUHRnQmFzZSkgcHRnOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHJvdyBpcyByZWxhdGl2ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQdGdCYXNlLmlz
Um93UmVsYXRpdmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWZQdGdCYXNlLnNldFJvdygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmdldFJvd0luZGV4KCkgLSAob2xkQ2Vs
bC5nZXRSb3dJbmRleCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHJlZlB0Z0Jhc2UuZ2V0Um93KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgY29sIGlzIHJlbGF0aXZlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZlB0Z0Jhc2UuaXNDb2xSZWxh
dGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZlB0Z0Jhc2Uuc2V0Q29sdW1uKG5ld0NlbGwuZ2V0Q29sdW1uSW5kZXgoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKG9sZENlbGwu
Z2V0Q29sdW1uSW5kZXgoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0gcmVmUHRnQmFzZS5nZXRDb2x1bW4oKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwdGcgaW5zdGFuY2VvZiBBcmVhUHRnQmFzZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZWFQdGdCYXNlIGFyZWFQdGdCYXNlID0gKEFyZWFQdGdC
YXNlKSBwdGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgZmlyc3Qgcm93IGlzIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZWFQdGdCYXNlLmlzRmlyc3RSb3dSZWxhdGl2ZSgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmVhUHRnQmFz
ZS5nZXRGaXJzdFJvdygpID4gb2xkQ2VsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmdldFJvd0luZGV4KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYVB0Z0Jhc2Uuc2V0Rmlyc3RSb3cobmV3
Q2VsbC5nZXRSb3dJbmRleCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLSAob2xkQ2VsbC5nZXRSb3dJbmRleCgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhcmVhUHRnQmFzZS5n
ZXRGaXJzdFJvdygpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGxh
c3Qgcm93IGlzIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZWFQdGdCYXNlLmlzTGFzdFJvd1JlbGF0aXZlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYVB0Z0Jhc2Uuc2V0TGFzdFJv
dyhuZXdDZWxsLmdldFJvd0luZGV4KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIChvbGRDZWxsLmdldFJvd0luZGV4KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFyZWFQdGdC
YXNlLmdldExhc3RSb3coKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
ZiBmaXJzdCBjb2x1bW4gaXMgcmVsYXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJlYVB0Z0Jhc2UuaXNGaXJzdENvbFJlbGF0aXZlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYVB0Z0Jhc2Uu
c2V0Rmlyc3RDb2x1bW4obmV3Q2VsbC5nZXRDb2x1bW5JbmRleCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAob2xkQ2VsbC5nZXRDb2x1
bW5JbmRleCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLSBhcmVhUHRnQmFzZS5nZXRGaXJzdENvbHVtbigpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGlmIGxhc3QgY29sdW1uIGlzIHJlbGF0aXZlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZWFQdGdCYXNlLmlzTGFz
dENvbFJlbGF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJlYVB0Z0Jhc2Uuc2V0TGFzdENvbHVtbihuZXdDZWxsLmdldENvbHVtbkluZGV4
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIChvbGRDZWxsLmdldENvbHVtbkluZGV4KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFyZWFQdGdCYXNlLmdldExhc3RDb2x1bW4o
KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgbmV3Rm9ybXVsYSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRm9ybXVsYVJlbmRlcmVyLnRvRm9ybXVsYVN0cmluZyhyZW5kZXJpbmdXb3JrYm9vaywgcHRn
cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbEZv
cm11bGEobmV3Rm9ybXVsYSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCAoRXhjZXB0aW9uIGlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBmYWlsIHNpbGVudGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBOVU1FUklDOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nl
bGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0TnVtZXJpY0NlbGxWYWx1ZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0
Q2VsbFZhbHVlKG9sZENlbGwuZ2V0UmljaFN0cmluZ0NlbGxWYWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IG1lcmdlZCByZWdpb25zIGluIHRoZSBzb3VyY2Ugcm93LCBjb3B5IHRv
IG5ldyByb3cKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29ya3NoZWV0Lmdl
dE51bU1lcmdlZFJlZ2lvbnMoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgQ2VsbFJhbmdl
QWRkcmVzcyBjZWxsUmFuZ2VBZGRyZXNzID0gd29ya3NoZWV0LmdldE1lcmdlZFJlZ2lvbihpKTsK
ICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbFJhbmdlQWRkcmVzcy5nZXRGaXJzdFJvdygpID09
IHNvdXJjZVJvdy5nZXRSb3dOdW0oKSkgewogICAgICAgICAgICAgICAgICAgICAgICBDZWxsUmFu
Z2VBZGRyZXNzIG5ld0NlbGxSYW5nZUFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ldyBDZWxsUmFuZ2VBZGRyZXNzKG5ld1Jvdy5nZXRSb3dOdW0oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5nZXRSb3dOdW0oKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjZWxsUmFuZ2VBZGRy
ZXNzLmdldExhc3RSb3coKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0gY2VsbFJhbmdlQWRkcmVzcy5nZXRGaXJzdFJvdygpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZUFkZHJlc3MuZ2V0Rmly
c3RDb2x1bW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxS
YW5nZUFkZHJlc3MuZ2V0TGFzdENvbHVtbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgd29y
a3NoZWV0LmFkZE1lcmdlZFJlZ2lvbihuZXdDZWxsUmFuZ2VBZGRyZXNzKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICBSb3cgcm93ID0gd29ya3NoZWV0LmdldFJvdyhyICsgMSk7CiAgICAgICAgICAgICAg
ICBpZiAocm93ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXQucmVtb3Zl
Um93KHJvdyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogICAgcHVibGljIHN0YXRpYyB2b2lkIHNoaWZ0Um93cyhTWFNTRldvcmtib29rIHdvcmtib29r
LCBTWFNTRlNoZWV0IHdvcmtzaGVldCwgaW50IHJvd051bSkgewogICAgICAgIGZvciAoaW50IHIg
PSB3b3Jrc2hlZXQuZ2V0TGFzdFJvd051bSgpOyByID49IHJvd051bTsgci0tKSB7CiAgICAgICAg
ICAgIFJvdyBzb3VyY2VSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHIpOwogICAgICAgICAgICBpZiAo
c291cmNlUm93ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIFJvdyBuZXdSb3cgPSB3b3Jrc2hl
ZXQuY3JlYXRlUm93KHIgKyAxKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwg
c291cmNlUm93LmdldExhc3RDZWxsTnVtKCk7IGMrKykgewogICAgICAgICAgICAgICAgICAgIENl
bGwgb2xkQ2VsbCA9IHNvdXJjZVJvdy5nZXRDZWxsKGMpOwogICAgICAgICAgICAgICAgICAgIGlm
IChvbGRDZWxsICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbCBuZXdDZWxs
ID0gbmV3Um93LmNyZWF0ZUNlbGwoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwu
c2V0Q2VsbFN0eWxlKG9sZENlbGwuZ2V0Q2VsbFN0eWxlKCkpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChvbGRDZWxsLmdldENlbGxUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQkxBTks6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
Q2VsbC5zZXRCbGFuaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCT09MRUFOOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0Qm9vbGVhbkNl
bGxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3Q2VsbC5zZXRDZWxsRXJyb3JWYWx1ZShvbGRDZWxsLmdldEVycm9yQ2VsbFZh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGT1JNVUxBOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOVU1FUklDOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENl
bGwuZ2V0TnVtZXJpY0NlbGxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0
UmljaFN0cmluZ0NlbGxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IG1lcmdl
ZCByZWdpb25zIGluIHRoZSBzb3VyY2Ugcm93LCBjb3B5IHRvIG5ldyByb3cKICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29ya3NoZWV0LmdldE51bU1lcmdlZFJlZ2lvbnMoKTsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgQ2VsbFJhbmdlQWRkcmVzcyBjZWxsUmFuZ2VBZGRy
ZXNzID0gd29ya3NoZWV0LmdldE1lcmdlZFJlZ2lvbihpKTsKICAgICAgICAgICAgICAgICAgICBp
ZiAoY2VsbFJhbmdlQWRkcmVzcy5nZXRGaXJzdFJvdygpID09IHNvdXJjZVJvdy5nZXRSb3dOdW0o
KSkgewogICAgICAgICAgICAgICAgICAgICAgICBDZWxsUmFuZ2VBZGRyZXNzIG5ld0NlbGxSYW5n
ZUFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDZWxsUmFuZ2VB
ZGRyZXNzKG5ld1Jvdy5nZXRSb3dOdW0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1Jvdy5nZXRSb3dOdW0oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArIChjZWxsUmFuZ2VBZGRyZXNzLmdldExhc3RSb3coKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2Vs
bFJhbmdlQWRkcmVzcy5nZXRGaXJzdFJvdygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNlbGxSYW5nZUFkZHJlc3MuZ2V0Rmlyc3RDb2x1bW4oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZUFkZHJlc3MuZ2V0TGFzdENv
bHVtbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0LmFkZE1lcmdlZFJlZ2lv
bihuZXdDZWxsUmFuZ2VBZGRyZXNzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBSb3cgcm93ID0gd29y
a3NoZWV0LmdldFJvdyhyICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocm93ICE9IG51bGwpIHsK
ICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXQucmVtb3ZlUm93KHJvdyk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2
b2lkIGNvcHlSb3coV29ya2Jvb2sgd29ya2Jvb2ssIFNoZWV0IHdvcmtzaGVldCwgaW50IHNvdXJj
ZVJvd051bSwKICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uUm93TnVtKSB7CiAgICAgICAgLy8g
R2V0IHRoZSBzb3VyY2UgLyBuZXcgcm93CiAgICAgICAgUm93IG5ld1JvdyA9IG51bGw7IC8vIHdv
cmtzaGVldC5nZXRSb3coZGVzdGluYXRpb25Sb3dOdW0pOwogICAgICAgIFJvdyBzb3VyY2VSb3cg
PSB3b3Jrc2hlZXQuZ2V0Um93KHNvdXJjZVJvd051bSk7CiAgICAgICAgaWYgKHNvdXJjZVJvdyA9
PSBudWxsKSB7CiAgICAgICAgICAgIHNvdXJjZVJvdyA9IHdvcmtzaGVldC5jcmVhdGVSb3coc291
cmNlUm93TnVtKTsKICAgICAgICB9CiAgICAgICAgLy8gdHJ5IHsKICAgICAgICAvLyB3b3Jrc2hl
ZXQuc2hpZnRSb3dzKHNvdXJjZVJvd051bSwgc291cmNlUm93TnVtKzEsIDEpOwogICAgICAgIC8v
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgIC8vIEZpeEZvcm1hdFJlcG9ydC5MT0dH
RVIubG9nKExldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgIC8vIH0KICAgICAgICAvLyBJ
ZiB0aGUgcm93IGV4aXN0IGluIGRlc3RpbmF0aW9uLCBwdXNoIGRvd24gYWxsIHJvd3MgYnkgMSBl
bHNlIGNyZWF0ZSBhIG5ldyByb3cKICAgICAgICBuZXdSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHNv
dXJjZVJvd051bSArIDEpOwogICAgICAgIGlmIChuZXdSb3cgPT0gbnVsbCkgewogICAgICAgICAg
ICBuZXdSb3cgPSB3b3Jrc2hlZXQuY3JlYXRlUm93KHNvdXJjZVJvd051bSArIDEpOwogICAgICAg
IH0KICAgICAgICAvLyBMb29wIHRocm91Z2ggc291cmNlIGNvbHVtbnMgdG8gYWRkIHRvIG5ldyBy
b3cKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZVJvdy5nZXRMYXN0Q2VsbE51bSgp
OyBpKyspIHsKICAgICAgICAgICAgLy8gR3JhYiBhIGNvcHkgb2YgdGhlIG9sZC9uZXcgY2VsbAog
ICAgICAgICAgICBDZWxsIG9sZENlbGwgPSBzb3VyY2VSb3cuZ2V0Q2VsbChpKTsKICAgICAgICAg
ICAgQ2VsbCBuZXdDZWxsID0gbmV3Um93LmNyZWF0ZUNlbGwoaSk7CiAgICAgICAgICAgIC8vIElm
IHRoZSBvbGQgY2VsbCBpcyBudWxsIGp1bXAgdG8gbmV4dCBjZWxsCiAgICAgICAgICAgIGlmIChv
bGRDZWxsID09IG51bGwpIHsKICAgICAgICAgICAgICAgIG5ld0NlbGwgPSBudWxsOwogICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQ29weSBzdHls
ZSBmcm9tIG9sZCBjZWxsIGFuZCBhcHBseSB0byBuZXcgY2VsbAogICAgICAgICAgICAvLyBIU1NG
Q2VsbFN0eWxlIG5ld0NlbGxTdHlsZSA9IHdvcmtib29rLmNyZWF0ZUNlbGxTdHlsZSgpOwogICAg
ICAgICAgICAvLyBuZXdDZWxsU3R5bGUuY2xvbmVTdHlsZUZyb20oKTs7CiAgICAgICAgICAgIG5l
d0NlbGwuc2V0Q2VsbFN0eWxlKG9sZENlbGwuZ2V0Q2VsbFN0eWxlKCkpOwoKICAgICAgICAgICAg
Ly8gU2V0IHRoZSBjZWxsIGRhdGEgdmFsdWUKICAgICAgICAgICAgc3dpdGNoIChvbGRDZWxsLmdl
dENlbGxUeXBlKCkpIHsKICAgICAgICAgICAgICAgIGNhc2UgQkxBTks6CiAgICAgICAgICAgICAg
ICAgICAgbmV3Q2VsbC5zZXRCbGFuaygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSBCT09MRUFOOgogICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0
Q2VsbFZhbHVlKG9sZENlbGwuZ2V0Qm9vbGVhbkNlbGxWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgRVJST1I6CiAgICAgICAgICAgICAgICAg
ICAgbmV3Q2VsbC5zZXRDZWxsRXJyb3JWYWx1ZShvbGRDZWxsLmdldEVycm9yQ2VsbFZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBGT1JNVUxB
OgogICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbEZvcm11bGEoZ2V0Q29weUZvcm11
bGEod29ya2Jvb2ssIHdvcmtzaGVldCwgb2xkQ2VsbCwgbmV3Q2VsbCkpOwogICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBOVU1FUklDOgogICAgICAgICAgICAg
ICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0TnVtZXJpY0NlbGxWYWx1ZSgp
KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5H
OgogICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuc2V0Q2VsbFZhbHVlKG9sZENlbGwuZ2V0Umlj
aFN0cmluZ0NlbGxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IG1lcmdlZCByZWdpb25z
IGluIHRoZSBzb3VyY2Ugcm93LCBjb3B5IHRvIG5ldyByb3cKICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHdvcmtzaGVldC5nZXROdW1NZXJnZWRSZWdpb25zKCk7IGkrKykgewogICAgICAgICAg
ICBDZWxsUmFuZ2VBZGRyZXNzIGNlbGxSYW5nZUFkZHJlc3MgPSB3b3Jrc2hlZXQuZ2V0TWVyZ2Vk
UmVnaW9uKGkpOwogICAgICAgICAgICBpZiAoY2VsbFJhbmdlQWRkcmVzcy5nZXRGaXJzdFJvdygp
ID09IHNvdXJjZVJvdy5nZXRSb3dOdW0oKSkgewogICAgICAgICAgICAgICAgQ2VsbFJhbmdlQWRk
cmVzcyBuZXdDZWxsUmFuZ2VBZGRyZXNzID0gbmV3IENlbGxSYW5nZUFkZHJlc3MobmV3Um93Lmdl
dFJvd051bSgpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXdSb3cuZ2V0Um93TnVtKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjZWxsUmFuZ2VBZGRyZXNzLmdldExhc3RS
b3coKSAtIGNlbGxSYW5nZUFkZHJlc3MuZ2V0Rmlyc3RSb3coKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGxSYW5nZUFkZHJlc3MuZ2V0Rmlyc3RDb2x1bW4oKSwgY2VsbFJhbmdlQWRkcmVz
cy5nZXRMYXN0Q29sdW1uKCkpOwogICAgICAgICAgICAgICAgd29ya3NoZWV0LmFkZE1lcmdlZFJl
Z2lvbihuZXdDZWxsUmFuZ2VBZGRyZXNzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
CiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb3B5Rm9ybXVsYShXb3JrYm9vayB3b3JrYm9v
aywgU2hlZXQgc2hlZXQsIENlbGwgb2xkQ2VsbCwKICAgICAgICAgICAgQ2VsbCBuZXdDZWxsKSB7
CiAgICAgICAgU3RyaW5nIG9sZEZvcm11bGEgPSBvbGRDZWxsLmdldENlbGxGb3JtdWxhKCk7CiAg
ICAgICAgU3RyaW5nIG5ld0Zvcm11bGEgPSAiIjsKICAgICAgICBpZiAob2xkRm9ybXVsYSAhPSBu
dWxsKSB7CiAgICAgICAgICAgIEZvcm11bGFQYXJzaW5nV29ya2Jvb2sgcGFyc2luZ1dvcmtib29r
ID0gbnVsbDsKICAgICAgICAgICAgRm9ybXVsYVJlbmRlcmluZ1dvcmtib29rIHJlbmRlcmluZ1dv
cmtib29rID0gbnVsbDsKICAgICAgICAgICAgaWYgKHdvcmtib29rIGluc3RhbmNlb2YgSFNTRldv
cmtib29rKSB7CiAgICAgICAgICAgICAgICBwYXJzaW5nV29ya2Jvb2sgPSBIU1NGRXZhbHVhdGlv
bldvcmtib29rLmNyZWF0ZSgoSFNTRldvcmtib29rKSB3b3JrYm9vayk7CiAgICAgICAgICAgICAg
ICByZW5kZXJpbmdXb3JrYm9vayA9IEhTU0ZFdmFsdWF0aW9uV29ya2Jvb2suY3JlYXRlKChIU1NG
V29ya2Jvb2spIHdvcmtib29rKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh3b3JrYm9vayBpbnN0
YW5jZW9mIFhTU0ZXb3JrYm9vaykgewogICAgICAgICAgICAgICAgcGFyc2luZ1dvcmtib29rID0g
WFNTRkV2YWx1YXRpb25Xb3JrYm9vay5jcmVhdGUoKFhTU0ZXb3JrYm9vaykgd29ya2Jvb2spOwog
ICAgICAgICAgICAgICAgcmVuZGVyaW5nV29ya2Jvb2sgPSBYU1NGRXZhbHVhdGlvbldvcmtib29r
LmNyZWF0ZSgoWFNTRldvcmtib29rKSB3b3JrYm9vayk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIC8vIGdldCBQVEcncyBpbiB0aGUgZm9ybXVsYQogICAgICAgICAgICBQdGdbXSBwdGdzID0g
Rm9ybXVsYVBhcnNlci5wYXJzZShvbGRGb3JtdWxhLCBwYXJzaW5nV29ya2Jvb2ssIEZvcm11bGFU
eXBlLkNFTEwsCiAgICAgICAgICAgICAgICAgICAgd29ya2Jvb2suZ2V0U2hlZXRJbmRleChzaGVl
dCkpOwogICAgICAgICAgICAvLyBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgUFRHJ3MKICAgICAgICAg
ICAgZm9yIChQdGcgcHRnIDogcHRncykgewogICAgICAgICAgICAgICAgaWYgKHB0ZyBpbnN0YW5j
ZW9mIFJlZlB0Z0Jhc2UpIHsKICAgICAgICAgICAgICAgICAgICBSZWZQdGdCYXNlIHJlZlB0Z0Jh
c2UgPSAoUmVmUHRnQmFzZSkgcHRnOwogICAgICAgICAgICAgICAgICAgIC8vIGlmIHJvdyBpcyBy
ZWxhdGl2ZQogICAgICAgICAgICAgICAgICAgIGlmIChyZWZQdGdCYXNlLmlzUm93UmVsYXRpdmUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICByZWZQdGdCYXNlLnNldFJvdygKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpIChuZXdDZWxsLmdldFJvd0luZGV4KCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKG9sZENlbGwuZ2V0Um93SW5k
ZXgoKSAtIHJlZlB0Z0Jhc2UuZ2V0Um93KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIC8vIGlmIGNvbCBpcyByZWxhdGl2ZQogICAgICAgICAgICAgICAgICAg
IGlmIChyZWZQdGdCYXNlLmlzQ29sUmVsYXRpdmUoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZWZQdGdCYXNlLnNldENvbHVtbigoc2hvcnQpIChuZXdDZWxsLmdldENvbHVtbkluZGV4KCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIChvbGRDZWxsLmdldENvbHVtbkluZGV4
KCkgLSByZWZQdGdCYXNlLmdldENvbHVtbigpKSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChwdGcgaW5zdGFuY2VvZiBBcmVhUHRn
QmFzZSkgewogICAgICAgICAgICAgICAgICAgIEFyZWFQdGdCYXNlIGFyZWFQdGdCYXNlID0gKEFy
ZWFQdGdCYXNlKSBwdGc7CiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZmlyc3Qgcm93IGlzIHJl
bGF0aXZlCiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZWFQdGdCYXNlLmlzRmlyc3RSb3dSZWxh
dGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFQdGdCYXNlLnNldEZpcnN0Um93
KChzaG9ydCkgKG5ld0NlbGwuZ2V0Um93SW5kZXgoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gKG9sZENlbGwuZ2V0Um93SW5kZXgoKSAtIGFyZWFQdGdCYXNlLmdldEZpcnN0Um93
KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIGlmIGxh
c3Qgcm93IGlzIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZWFQdGdCYXNlLmlz
TGFzdFJvd1JlbGF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJlYVB0Z0Jhc2Uu
c2V0TGFzdFJvdygoc2hvcnQpIChuZXdDZWxsLmdldFJvd0luZGV4KCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtIChvbGRDZWxsLmdldFJvd0luZGV4KCkgLSBhcmVhUHRnQmFzZS5n
ZXRMYXN0Um93KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IC8vIGlmIGZpcnN0IGNvbHVtbiBpcyByZWxhdGl2ZQogICAgICAgICAgICAgICAgICAgIGlmIChh
cmVhUHRnQmFzZS5pc0ZpcnN0Q29sUmVsYXRpdmUoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICBhcmVhUHRnQmFzZS5zZXRGaXJzdENvbHVtbigoc2hvcnQpIChuZXdDZWxsLmdldENvbHVtbklu
ZGV4KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIChvbGRDZWxsLmdldENvbHVt
bkluZGV4KCkgLSBhcmVhUHRnQmFzZS5nZXRGaXJzdENvbHVtbigpKSkpOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IGNvbHVtbiBpcyByZWxhdGl2
ZQogICAgICAgICAgICAgICAgICAgIGlmIChhcmVhUHRnQmFzZS5pc0xhc3RDb2xSZWxhdGl2ZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFQdGdCYXNlLnNldExhc3RDb2x1bW4oKHNo
b3J0KSAobmV3Q2VsbC5nZXRDb2x1bW5JbmRleCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSAob2xkQ2VsbC5nZXRDb2x1bW5JbmRleCgpIC0gYXJlYVB0Z0Jhc2UuZ2V0TGFzdENv
bHVtbigpKSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgICBuZXdGb3JtdWxhID0gRm9ybXVsYVJlbmRlcmVyLnRvRm9ybXVs
YVN0cmluZyhyZW5kZXJpbmdXb3JrYm9vaywgcHRncyk7CiAgICAgICAgfQogICAgICAgIHJldHVy
biBuZXdGb3JtdWxhOwogICAgfQoKfQo=



--=-OrDRrSt6U48X5+mRWVj7
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--=-OrDRrSt6U48X5+mRWVj7--