18-Oct-99  1:48:00-GMT,19168;000000000011
Received: from cs.columbia.edu (cs.columbia.edu [128.59.16.20])
	by opus.cs.columbia.edu (8.9.1/8.9.1) with ESMTP id TAA04053
	for <evs@opus.cs.columbia.edu>; Sun, 17 Oct 1999 19:48:31 -0400 (EDT)
Received: from aloha.cc.columbia.edu (IDENT:cu16253@aloha.cc.columbia.edu [128.59.59.134])
	by cs.columbia.edu (8.9.1/8.9.1) with ESMTP id TAA18679;
	Sun, 17 Oct 1999 19:48:30 -0400 (EDT)
Received: from localhost by aloha.cc.columbia.edu (8.9.3/8.9.3) with ESMTP id TAA17816;
	Sun, 17 Oct 1999 19:48:28 -0400 (EDT)
Date: Sun, 17 Oct 1999 19:48:28 -0400 (EDT)
From: Lalitha  Agnihotri <la198@columbia.edu>
Sender: la198@columbia.edu
To: Eric Siegel <evs@cs.columbia.edu>
cc: Grace Junxin Zhang <jzhang@ober.cs.columbia.edu>,
        Chris Vaill <cvaill@liberty.psl.cs.columbia.edu>,
        Jeff Commando Sherwin <jeff@iPrivacy.com>
Subject: Re: bug fixes?
In-Reply-To: <CMM-RU.1.5.940184032.evs@disco.cs.columbia.edu>
Message-ID: <Pine.GSO.4.10.9910171946380.11170-200000@aloha.cc.columbia.edu>
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-851401618-940204108=:11170"
Content-Length: 18054

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-940204108=:11170
Content-Type: TEXT/PLAIN; charset=US-ASCII


This bug fix, indeed fixes all the bugs reported so far. The inverse
relation is now all right. Also the relation not showing up problem has
been resolved too.

The new AdjMatrix.java is included with this message.

Lalitha

On Sun, 17 Oct 1999, Eric Siegel wrote:

> Folks,
> 
> Pending Lalitha's verification of the following, I will
> make the changes in the code.
> 
> Thanks,
> Eric
>                 ---------------
> 
> Received: from cs.columbia.edu (cs.columbia.edu [128.59.16.20])
> 	by opus.cs.columbia.edu (8.9.1/8.9.1) with ESMTP id XAA28830
> 	for <evs@opus.cs.columbia.edu>; Sat, 16 Oct 1999 23:53:11 -0400 (EDT)
> Received: from bonjour.cc.columbia.edu (IDENT:cu11394@bonjour.cc.columbia.edu [128.59.59.133])
> 	by cs.columbia.edu (8.9.1/8.9.1) with ESMTP id XAA06482
> 	for <evs@cs.columbia.edu>; Sat, 16 Oct 1999 23:53:10 -0400 (EDT)
> Received: from localhost by bonjour.cc.columbia.edu (8.9.3/8.9.3) with ESMTP id XAA28156
> 	for <evs@cs.columbia.edu>; Sat, 16 Oct 1999 23:53:09 -0400 (EDT)
> Date: Sat, 16 Oct 1999 23:53:09 -0400 (EDT)
> From: Michael David Birken <mdb47@columbia.edu>
> Sender: mdb47@columbia.edu
> To: Eric Siegel <evs@cs.columbia.edu>
> Subject: Re: HOMEWORK #2 CLARIFICATION (AI)
> In-Reply-To: <CMM-RU.1.5.940007685.evs@dynasty.cs.columbia.edu>
> Message-ID: <Pine.GSO.4.10.9910162348290.27703-100000@bonjour.cc.columbia.edu>
> MIME-Version: 1.0
> Content-Type: TEXT/PLAIN; charset=US-ASCII
> Content-Length: 408
> 
> I removed the following bugs in AdjMatrix.java:
> 
> (1) In parseString(), added the 13th case of "equals" & "="
> 
> (2) In getInverseMaping(), changed == transTable.STARTS) into
>     == transTable.STARTEDBY)
> 
> (3) In getSeperateRelations(), I made the same change as in (2)
> 
> Now the code seems to work, but I will continue to test it.  If these are
> not bugs, then you should document them as features.  
> 
>    - Mike
> 
> 


---559023410-851401618-940204108=:11170
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="AdjMatrix.java"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.9910171948280.11170@aloha.cc.columbia.edu>
Content-Description: 
Content-Disposition: attachment; filename="AdjMatrix.java"

aW1wb3J0IGphdmEudXRpbC4qOw0KDQpwdWJsaWMgY2xhc3MgQWRqTWF0cml4
ew0KICANCiAgcHJpdmF0ZSBpbnQgbWF0cml4W11bXTsNCiAgcHJpdmF0ZSBT
eW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsNCiAgcHJvdGVjdGVkIFRlbXBvcmFs
VHJhbnNUYWJsZSB0cmFuc1RhYmxlOw0KICBwcml2YXRlIGludCBzaXplOw0K
DQogIHB1YmxpYyBBZGpNYXRyaXgoaW50IGluaXRpYWxTaXplKXsNCiAgICBz
eW1ib2xUYWJsZSA9IG5ldyBTeW1ib2xUYWJsZSgpOw0KICAgIG1hdHJpeCA9
IG5ldyBpbnRbaW5pdGlhbFNpemVdW2luaXRpYWxTaXplXTsNCiAgICB0cmFu
c1RhYmxlID0gbmV3IFRlbXBvcmFsVHJhbnNUYWJsZSgpOw0KICAgIHNpemUg
PSBpbml0aWFsU2l6ZTsNCiAgfSAgICAgICANCiAgDQogIHB1YmxpYyB2b2lk
IGFkZE5vZGUoU3RyaW5nIHN5bWJvbCl7DQogICAgaWYoc3ltYm9sVGFibGUu
c2l6ZSgpID09IHNpemUpDQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFk
ak1hdHJpeC5hZGROb2RlOiBzdGFja092ZXJmbG93Iik7DQogICAgZWxzZSBp
Zighc3ltYm9sVGFibGUuY29udGFpbnMoc3ltYm9sKSl7DQogICAgICBzeW1i
b2xUYWJsZS5hZGRTeW1ib2woc3ltYm9sKTsNCiAgICAgIA0KICAgICAgZm9y
KGludCBpID0gMDsgaSA8IHN5bWJvbFRhYmxlLnNpemUoKTsgaSsrKXsNCglt
YXRyaXhbc3ltYm9sVGFibGUuc2l6ZSgpIC0gMV1baV0gPSB0cmFuc1RhYmxl
Lk5PQ09OU1RSQUlOVFM7DQoJbWF0cml4W2ldW3N5bWJvbFRhYmxlLnNpemUo
KSAtIDFdID0gdHJhbnNUYWJsZS5OT0NPTlNUUkFJTlRTOw0KICAgICAgfSAg
DQogICAgICBSZWxhdGlvbiBjID0gbmV3IFJlbGF0aW9uKCk7DQogICAgICBj
LmkgPSBzeW1ib2xUYWJsZS5zaXplKCkgLSAxOw0KICAgICAgYy5qID0gc3lt
Ym9sVGFibGUuc2l6ZSgpIC0gMTsNCiAgICAgIGMuciA9IHRyYW5zVGFibGUu
RVFVQUxTOw0KICAgICAgdG9BZGQoYyk7DQogICAgfQ0KICB9DQoNCiAgcHVi
bGljIHZvaWQgYWRkRW50cnkoU3RyaW5nIGNvbW1hbmQpew0KICAgIFN0cmlu
Z1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbW1h
bmQpOw0KICAgIFN0cmluZyB4LCB5LCBsaXN0OyANCiAgICBpbnQgbiA9IHRv
a2Vucy5jb3VudFRva2VucygpOw0KICAgIHggPSB0b2tlbnMubmV4dFRva2Vu
KCk7DQogICAgbi0tOw0KICAgIGxpc3QgPSAiIjsNCiAgICBmb3IoOyBuICE9
IDE7IG4tLSl7DQogICAgICBsaXN0ID0gdG9rZW5zLm5leHRUb2tlbigpICsg
IiAiICsgbGlzdDsNCiAgICB9DQogICAgeSA9IHRva2Vucy5uZXh0VG9rZW4o
KTsNCiAgICBsaXN0ID0gbGlzdC5yZXBsYWNlKCcoJywgJyAnKTsNCiAgICBs
aXN0ID0gbGlzdC5yZXBsYWNlKCcpJywgJyAnKTsNCiAgICAvLyBTeXN0ZW0u
b3V0LnByaW50bG4oInggPSAiICsgeCArICIuIik7DQogICAgLy8gU3lzdGVt
Lm91dC5wcmludGxuKCJ5ID0gIiArIHkgKyAiLiIpOw0KICAgIC8vIFN5c3Rl
bS5vdXQucHJpbnRsbigiciA9ICIgKyBsaXN0ICsgIi4iKTsNCiAgICBhZGRF
ZGdlKHgseSxsaXN0KTsNCiAgfQ0KDQogICAgDQogIHB1YmxpYyB2b2lkIGFk
ZEVkZ2UoU3RyaW5nIHgsIFN0cmluZyB5LCBTdHJpbmcgcil7DQogICAgaW50
IGUgPSBwYXJzZVN0cmluZyhyKTsNCiAgICAvLyBTeXN0ZW0ub3V0LnByaW50
bG4oIkFkak1hdHJpeC5hZGRFZGdlIHIgPSAiICsNCiAgICAvLyAJCSAgICAg
ICB0cmFuc1RhYmxlLnRvU3RyaW5nKGUpICsgInwgIiArIHRyYW5zVGFibGUu
Z2V0SW5kZXgoZSkpOw0KICAgIGFkZE5vZGUoeCk7DQogICAgYWRkTm9kZSh5
KTsNCiAgICBpbnQgaSA9IHN5bWJvbFRhYmxlLmdldEluZGV4KHgpOw0KICAg
IGludCBqID0gc3ltYm9sVGFibGUuZ2V0SW5kZXgoeSk7DQogICAgUmVsYXRp
b24gcmVsYXRpb24gPSBuZXcgUmVsYXRpb24oKTsNCiAgICByZWxhdGlvbi5p
ID0gaTsNCiAgICByZWxhdGlvbi5qID0gajsNCiAgICByZWxhdGlvbi5yID0g
ZTsNCiAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkFkak1hdHJpeC5hZGRF
ZGdlOiBSZWxhdGlvbiBpID0gIiArIGkgKyAiIGogPSAiICsgaiArDQovLyAi
IHIgPSAiICsgZSk7DQogICAgdG9BZGQocmVsYXRpb24pOw0KICAgIFJlbGF0
aW9uIGludmVyc2VSZWxhdGlvbiA9IG5ldyBSZWxhdGlvbigpOw0KICAgIGlu
dmVyc2VSZWxhdGlvbi5pID0gajsNCiAgICBpbnZlcnNlUmVsYXRpb24uaiA9
IGk7DQogICAgaW52ZXJzZVJlbGF0aW9uLnIgPSBnZXRJbnZlcnNlQ29uc3Ry
YWludHMoZSk7DQogICAgdG9BZGQoaW52ZXJzZVJlbGF0aW9uKTsNCiAgfQ0K
DQogIHByb3RlY3RlZCBpbnQgcGFyc2VTdHJpbmcoU3RyaW5nIHN0cil7DQog
ICAgU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6
ZXIoc3RyKTsNCiAgICBpbnQgcmV0dXJuVmFsdWUgPSB0cmFuc1RhYmxlLk5P
SU5GTzsNCiAgICB3aGlsZSh0b2tlbnMuaGFzTW9yZVRva2VucygpKXsNCiAg
ICAgIFN0cmluZyBzID0gdG9rZW5zLm5leHRUb2tlbigpOw0KICAgICAgaWYo
cy5lcXVhbHNJZ25vcmVDYXNlKCJlcXVhbHMiKSB8fCBzLmVxdWFsc0lnbm9y
ZUNhc2UoIj0iKSkNCglyZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlIHwgdHJh
bnNUYWJsZS5FUVVBTFM7DQogICAgICBpZihzLmVxdWFsc0lnbm9yZUNhc2Uo
ImJlZm9yZSIpIHx8IHMuZXF1YWxzSWdub3JlQ2FzZSgiPCIpKQ0KCXJldHVy
blZhbHVlID0gcmV0dXJuVmFsdWUgfCB0cmFuc1RhYmxlLkJFRk9SRTsNCiAg
ICAgIGlmKHMuZXF1YWxzSWdub3JlQ2FzZSgiYWZ0ZXIiKSB8fCBzLmVxdWFs
c0lnbm9yZUNhc2UoIj4iKSkNCglyZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVl
IHwgdHJhbnNUYWJsZS5BRlRFUjsNCiAgICAgIGlmKHMuZXF1YWxzSWdub3Jl
Q2FzZSgiZHVyaW5nIikgfHwgcy5lcXVhbHNJZ25vcmVDYXNlKCJkIikpDQoJ
cmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSB8IHRyYW5zVGFibGUuRFVSSU5H
Ow0KICAgICAgaWYocy5lcXVhbHNJZ25vcmVDYXNlKCJjb250YWlucyIpIHx8
IHMuZXF1YWxzSWdub3JlQ2FzZSgiZGkiKSkNCglyZXR1cm5WYWx1ZSA9IHJl
dHVyblZhbHVlIHwgdHJhbnNUYWJsZS5DT05UQUlOUzsNCiAgICAgIGlmKHMu
ZXF1YWxzSWdub3JlQ2FzZSgib3ZlcmxhcHMiKSB8fCBzLmVxdWFsc0lnbm9y
ZUNhc2UoIm8iKSkNCglyZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlIHwgdHJh
bnNUYWJsZS5PVkVSTEFQUzsNCiAgICAgIGlmKHMuZXF1YWxzSWdub3JlQ2Fz
ZSgib3ZlcmxhcHBlZGJ5IikgfHwgcy5lcXVhbHNJZ25vcmVDYXNlKCJvaSIp
KQ0KCXJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgfCB0cmFuc1RhYmxlLk9W
RVJMQVBQRURCWTsNCiAgICAgIGlmKHMuZXF1YWxzSWdub3JlQ2FzZSgibWVl
dHMiKSB8fCBzLmVxdWFsc0lnbm9yZUNhc2UoIm0iKSkNCglyZXR1cm5WYWx1
ZSA9IHJldHVyblZhbHVlIHwgdHJhbnNUYWJsZS5NRUVUUzsNCiAgICAgIGlm
KHMuZXF1YWxzSWdub3JlQ2FzZSgibWV0YnkiKSB8fCBzLmVxdWFsc0lnbm9y
ZUNhc2UoIm1pIikpDQoJcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSB8IHRy
YW5zVGFibGUuTUVUQlk7DQogICAgICBpZihzLmVxdWFsc0lnbm9yZUNhc2Uo
InN0YXJ0cyIpIHx8IHMuZXF1YWxzSWdub3JlQ2FzZSgicyIpKQ0KCXJldHVy
blZhbHVlID0gcmV0dXJuVmFsdWUgfCB0cmFuc1RhYmxlLlNUQVJUUzsNCiAg
ICAgIGlmKHMuZXF1YWxzSWdub3JlQ2FzZSgic3RhcnRlZGJ5IikgfHwgcy5l
cXVhbHNJZ25vcmVDYXNlKCJzaSIpKQ0KCXJldHVyblZhbHVlID0gcmV0dXJu
VmFsdWUgfCB0cmFuc1RhYmxlLlNUQVJURURCWTsNCiAgICAgIGlmKHMuZXF1
YWxzSWdub3JlQ2FzZSgiZmluaXNoZXMiKSB8fCBzLmVxdWFsc0lnbm9yZUNh
c2UoImYiKSkNCglyZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlIHwgdHJhbnNU
YWJsZS5GSU5JU0hFUzsNCiAgICAgIGlmKHMuZXF1YWxzSWdub3JlQ2FzZSgi
ZmluaXNoZWRieSIpIHx8IHMuZXF1YWxzSWdub3JlQ2FzZSgiZmkiKSkNCgly
ZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlIHwgdHJhbnNUYWJsZS5BRlRFUjsN
CiAgICB9DQogIHJldHVybihyZXR1cm5WYWx1ZSk7DQogIH0gICAgICANCgkg
IA0KDQovLyAgIHB1YmxpYyB2b2lkIGFkZENvbnN0cmFpbnRzKFN0cmluZyBz
MSwgU3RyaW5nIHMyLCBpbnQgY29uc3RyYWludHMpew0KLy8gICAgIGludCBp
ID0gc3ltYm9sVGFibGUuZ2V0SW5kZXgoczEpOw0KLy8gICAgIGludCBqID0g
c3ltYm9sVGFibGUuZ2V0SW5kZXgoczIpOw0KLy8gICAgIG1hdHJpeFtpXVtq
XSA9IHRyYW5zVGFibGUuaW50ZXJzZWN0aW9uKG1hdHJpeFtpXVtqXSwgY29u
c3RyYWludHMpOw0KLy8gICAgIG1hdHJpeFtqXVtpXSA9IHRyYW5zVGFibGUu
aW50ZXJzZWN0aW9uKG1hdHJpeFtqXVtpXSwgZ2V0SW52ZXJzZUNvbnN0cmFp
bnRzKGNvbnN0cmFpbnRzKSkgOy8vIGludmVyc2UgcmVsYXRpb25zLi4uICAg
IA0KLy8gICB9DQogIA0KICBwcml2YXRlIGludCBnZXRJbnZlcnNlQ29uc3Ry
YWludHMoaW50IHIpew0KICAgIEludFZlY3RvciB2ID0gZ2V0U2VwZXJhdGVS
ZWxhdGlvbnMocik7DQogICAgaW50IHJldHVyblZhbHVlID0gdHJhbnNUYWJs
ZS5OT0lORk87DQogICAgZm9yKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBp
KyspDQogICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICsgZ2V0SW52
ZXJzZU1hcGluZyh2LmludEF0KGkpKTsNCiAgICByZXR1cm4ocmV0dXJuVmFs
dWUpOw0KICB9ICAgDQoNCiAgcHJpdmF0ZSBpbnQgZ2V0SW52ZXJzZU1hcGlu
ZyhpbnQgcmVsYXRpb24pew0KICAgIGlmKChyZWxhdGlvbiAmIHRyYW5zVGFi
bGUuRVFVQUxTKSA9PSB0cmFuc1RhYmxlLkVRVUFMUykNCiAgICAgIHJldHVy
bih0cmFuc1RhYmxlLkVRVUFMUyk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJh
bnNUYWJsZS5CRUZPUkUpID09IHRyYW5zVGFibGUuQkVGT1JFKQ0KICAgICAg
cmV0dXJuKHRyYW5zVGFibGUuQUZURVIpOw0KICAgIGlmKChyZWxhdGlvbiAm
IHRyYW5zVGFibGUuQUZURVIpID09IHRyYW5zVGFibGUuQUZURVIpDQogICAg
ICByZXR1cm4odHJhbnNUYWJsZS5CRUZPUkUpOw0KICAgIGlmKChyZWxhdGlv
biAmIHRyYW5zVGFibGUuRFVSSU5HKSA9PSB0cmFuc1RhYmxlLkRVUklORykN
CiAgICAgIHJldHVybih0cmFuc1RhYmxlLkNPTlRBSU5TKTsNCiAgICBpZigo
cmVsYXRpb24gJiB0cmFuc1RhYmxlLkNPTlRBSU5TKSA9PSB0cmFuc1RhYmxl
LkNPTlRBSU5TKQ0KICAgICAgcmV0dXJuKHRyYW5zVGFibGUuRFVSSU5HKTsN
CiAgICBpZigocmVsYXRpb24gJiB0cmFuc1RhYmxlLk9WRVJMQVBTKSA9PSB0
cmFuc1RhYmxlLk9WRVJMQVBTKQ0KICAgICAgcmV0dXJuKHRyYW5zVGFibGUu
T1ZFUkxBUFBFREJZKTsNCiAgICBpZigocmVsYXRpb24gJiB0cmFuc1RhYmxl
Lk9WRVJMQVBQRURCWSkgPT0gdHJhbnNUYWJsZS5PVkVSTEFQUEVEQlkpIA0K
ICAgICAgcmV0dXJuKHRyYW5zVGFibGUuT1ZFUkxBUFMpOw0KICAgIGlmKChy
ZWxhdGlvbiAmIHRyYW5zVGFibGUuTUVFVFMpID09IHRyYW5zVGFibGUuTUVF
VFMpDQogICAgICByZXR1cm4odHJhbnNUYWJsZS5NRVRCWSk7DQogICAgaWYo
KHJlbGF0aW9uICYgdHJhbnNUYWJsZS5NRVRCWSkgPT0gdHJhbnNUYWJsZS5N
RVRCWSkNCiAgICAgIHJldHVybih0cmFuc1RhYmxlLk1FRVRTKTsNCiAgICBp
ZigocmVsYXRpb24gJiB0cmFuc1RhYmxlLlNUQVJUUykgPT0gdHJhbnNUYWJs
ZS5TVEFSVFMpDQogICAgICByZXR1cm4odHJhbnNUYWJsZS5TVEFSVEVEQlkp
Ow0KICAgIGlmKChyZWxhdGlvbiAmIHRyYW5zVGFibGUuU1RBUlRFREJZKSA9
PSB0cmFuc1RhYmxlLlNUQVJURURCWSkNCiAgICAgIHJldHVybih0cmFuc1Rh
YmxlLlNUQVJUUyk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJhbnNUYWJsZS5G
SU5JU0hFUykgPT0gdHJhbnNUYWJsZS5GSU5JU0hFUykNCiAgICAgIHJldHVy
bih0cmFuc1RhYmxlLkZJTklTSEVEQlkpOw0KICAgIGlmKChyZWxhdGlvbiAm
IHRyYW5zVGFibGUuRklOSVNIRURCWSkgPT0gdHJhbnNUYWJsZS5GSU5JU0hF
REJZKQ0KICAgICAgcmV0dXJuKHRyYW5zVGFibGUuRklOSVNIRVMpOw0KICAg
IGVsc2UNCiAgICAgIHJldHVybih0cmFuc1RhYmxlLk5PQ09OU1RSQUlOVFMp
Ow0KICB9DQogIHByb3RlY3RlZCBpbnQgZ2V0VHJhbnNpdGl2ZUNvbnN0cmFp
bnRzKGludCByMSwgaW50IHIyKXsNCiAgICAvLyBTeXN0ZW0ub3V0LnByaW50
bG4oIkFkak1hdHJpeC5nZXRUcmFuc2l0aXZlQ29uc3RyYWludHM6IGNhbGxl
ZCB3aXRoOiByMSA9ICIgKyByMSArICIgcjIgPSAiICsgcjIpOw0KDQogICAg
aW50IHJldHVyblZhbHVlID0gdHJhbnNUYWJsZS5OT0lORk87DQogICAgSW50
VmVjdG9yIHIgPSBnZXRTZXBlcmF0ZVJlbGF0aW9ucyhyMSk7DQogICAgSW50
VmVjdG9yIHMgPSBnZXRTZXBlcmF0ZVJlbGF0aW9ucyhyMik7DQogICAgZm9y
KGludCBpID0gMDsgaSA8IHIuc2l6ZSgpOyBpKyspDQogICAgICBmb3IoaW50
IGogPSAwOyBqIDwgcy5zaXplKCk7IGorKyl7DQoJLy8gU3lzdGVtLm91dC5w
cmludGxuKCJBZGpNYXRyaXguZ2V0VHJhbnNpdGl2ZUNvbnN0cmFpbnRzOiBy
ID0gIiArIHIuaW50QXQoaSkgKyAiIHMgPSAiICsgcy5pbnRBdChqKSk7DQoJ
cmV0dXJuVmFsdWUgPSB0cmFuc1RhYmxlLnVuaW9uKA0KCQkJCSAgICAgICBy
ZXR1cm5WYWx1ZSwgDQoJCQkJICAgICAgIHRyYW5zVGFibGUuZ2V0VGVtcG9y
YWxUcmFuc2l0aXZlUmVsYXRpb24oDQoJCQkJCQkJCQkJci5pbnRBdChpKSwN
CgkJCQkJCQkJCQlzLmludEF0KGopKSk7DQogICAgICB9DQogICAgcmV0dXJu
KHJldHVyblZhbHVlKTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBib29sZWFuIGNv
bXBhcmFibGUoaW50IGksIGludCBqKXsNCiAgICByZXR1cm4odHJ1ZSk7DQog
IH0NCg0KICBwcml2YXRlIGJvb2xlYW4gaXNQcm9wZXJTdWJzZXQoaW50IHIs
IGludCBzKXsNCiAgICBJbnRWZWN0b3IgaSA9IGdldFNlcGVyYXRlUmVsYXRp
b25zKHIpOw0KICAgIEludFZlY3RvciBqID0gZ2V0U2VwZXJhdGVSZWxhdGlv
bnMocyk7DQogICAgaWYoaS5zaXplKCkgPCBqLnNpemUoKSAmJiBpLnNpemUo
KSAhPSAwKXsNCiAgICAgIGZvcihpbnQgayA9IDA7IGsgPCBpLnNpemUoKTsg
aysrKQ0KCWlmKCFqLmNvbnRhaW5zKGkuZWxlbWVudEF0KGspKSl7DQoJICAv
LyBTeXN0ZW0ub3V0LnByaW50bG4oIkFkak1hdHJpeC5pc1Byb3BlclN1YnNl
dDogIiArIHIgKyAiIElTIE5PVCBhDQovLyBzdWJzZXQgb2YgIiArIHMpOw0K
CSAgcmV0dXJuKGZhbHNlKTsNCgl9DQogICAgICAvLyBTeXN0ZW0ub3V0LnBy
aW50bG4oIkFkak1hdHJpeC5pc1Byb3BlclN1YnNldDogIiArIHIgKyAiIElT
IGEgcHJvcGVyDQovLyBzdWJzZXQgb2YgIiArIHMpOw0KDQogICAgICByZXR1
cm4odHJ1ZSk7DQogICAgfQ0KICAgIGVsc2V7CSANCiAgICAgIC8vIFN5c3Rl
bS5vdXQucHJpbnRsbigiQWRqTWF0cml4LmlzUHJvcGVyU3Vic2V0OiAiICsg
ciArICIgSVMgTk9UIGEgcHJvcGVyDQovL3N1YnNldCBvZiAiICsgcyk7DQoN
CiAgICAgIA0KICAgICAgcmV0dXJuKGZhbHNlKTsNCiAgICB9IH0gIA0KICAg
IA0KICBwdWJsaWMgdm9pZCB0b0FkZChSZWxhdGlvbiByZWxhdGlvbil7DQog
ICAgVmVjdG9yIHRvRG8gPSBuZXcgVmVjdG9yKDAsIDEpOw0KICAgIHRvRG8u
YWRkRWxlbWVudChyZWxhdGlvbik7DQogICAgd2hpbGUoIXRvRG8uaXNFbXB0
eSgpKXsNCiAgICAgIFJlbGF0aW9uIHIgPSAoUmVsYXRpb24pdG9Eby5lbGVt
ZW50QXQoMCk7IA0KICAgICAgdG9Eby5yZW1vdmVFbGVtZW50QXQoMCk7DQog
ICAgICBpbnQgaSA9IHIuaTsNCiAgICAgIGludCBqID0gci5qOw0KICAgICAg
aW50IHMgPSByLnI7DQogICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkFk
ak1hdHJpeC50b0FkZDogaSA9ICIgKyBpICsgIiBqID0gIiArIGogKyAiIHIg
PSAiICsNCi8vIHMpOw0KICAgICAgbWF0cml4W2ldW2pdID0gczsNCiAgICAg
IG1hdHJpeFtqXVtpXSA9IGdldEludmVyc2VDb25zdHJhaW50cyhzKTsNCiAg
ICAgIGZvcihpbnQgayA9IDA7IGsgPCBzeW1ib2xUYWJsZS5zaXplKCk7IGsr
KykNCglpZihjb21wYXJhYmxlKGssIGopKXsNCgkgIC8vIFN5c3RlbS5vdXQu
cHJpbnRsbigiQWRqTWF0cml4LnRvQWRkOiBmaXJzdCBsb29wIGksaixrID0g
IiArIGkgKyAiICINCi8vICsgaiArICIgIiArIGspOw0KCSAgUmVsYXRpb24g
clByaW1lID0gbmV3IFJlbGF0aW9uKCk7DQoJICByUHJpbWUuciA9IHRyYW5z
VGFibGUuaW50ZXJzZWN0aW9uKG1hdHJpeFtrXVtqXSwNCgkJCQkJZ2V0VHJh
bnNpdGl2ZUNvbnN0cmFpbnRzKA0KCQkJCQkJCQkgbWF0cml4W2tdW2ldLCAN
CgkJCQkJCQkJIHMpKTsNCgkgIHJQcmltZS5pID0gazsNCgkgIHJQcmltZS5q
ID0gajsNCgkgIGlmKGlzUHJvcGVyU3Vic2V0KHJQcmltZS5yLCANCgkJCSAg
ICBtYXRyaXhba11bal0pKXsNCgkgICAgICAvLyAgU3lzdGVtLm91dC5wcmlu
dGxuKCJBZGpNYXRyaXgudG9BZGQ6IHF1ZXVlIGFkZGluZyByZWxhdGlvbjog
aSA9DQovLyAiICsgclByaW1lLmkgKyAiIGogPSAiICsgclByaW1lLmogKyAi
IHIgPSAiICsgclByaW1lLnIpOyANCgkgICAgICB0b0RvLmFkZEVsZW1lbnQo
clByaW1lKTsgDQoJICB9DQoJfQ0KICAgICAgZm9yKGludCBrID0gMDsgayA8
IHN5bWJvbFRhYmxlLnNpemUoKTsgaysrKQ0KCWlmKGNvbXBhcmFibGUoaSwg
aykpew0KCSAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJBZGpNYXRyaXgudG9B
ZGQ6IHNlY29uZCBsb29wIGksaixrID0gIiArIGkgKyAiICINCi8vICsgaiAr
ICIgIiArIGspOw0KCSAgUmVsYXRpb24gclByaW1lID0gbmV3IFJlbGF0aW9u
KCk7DQoJICByUHJpbWUuciA9IHRyYW5zVGFibGUuaW50ZXJzZWN0aW9uKG1h
dHJpeFtpXVtrXSwNCgkJCQkJZ2V0VHJhbnNpdGl2ZUNvbnN0cmFpbnRzKA0K
CQkJCQkJCQkgcywNCgkJCQkJCQkJIG1hdHJpeFtqXVtrXSkpOw0KCSAgclBy
aW1lLmkgPSBpOw0KCSAgclByaW1lLmogPSBrOw0KCSAgaWYoaXNQcm9wZXJT
dWJzZXQoclByaW1lLnIsIG1hdHJpeFtpXVtrXSkpew0KCSAgICAgIAkgICAg
ICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkFkak1hdHJpeC50b0FkZDogcXVl
dWUgYWRkaW5nDQovLyByZWxhdGlvbjogaSA9ICIgKyByUHJpbWUuaSArICIg
aiA9ICIgKyByUHJpbWUuaiArICIgciA9ICIgKyByUHJpbWUucik7IA0KCQkg
ICAgICB0b0RvLmFkZEVsZW1lbnQoclByaW1lKTsNCgkgIH0NCgl9DQogICAg
ICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkFkak1hdHJpeC50b0FkZDogUXVl
dWUgdG9Eby5zaXplID0gIiArIHRvRG8uc2l6ZSgpKTsNCiAgICB9DQogIH0g
IA0KICANCiAgcHJpdmF0ZSBJbnRWZWN0b3IgZ2V0U2VwZXJhdGVSZWxhdGlv
bnMoaW50IHJlbGF0aW9uKXsNCiAgICBJbnRWZWN0b3IgcmV0dXJuVmFsdWUg
PSBuZXcgSW50VmVjdG9yKCk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJhbnNU
YWJsZS5FUVVBTFMpID09IHRyYW5zVGFibGUuRVFVQUxTKQ0KICAgICAgcmV0
dXJuVmFsdWUuYWRkRWxlbWVudCh0cmFuc1RhYmxlLkVRVUFMUyk7DQogICAg
aWYoKHJlbGF0aW9uICYgdHJhbnNUYWJsZS5CRUZPUkUpID09IHRyYW5zVGFi
bGUuQkVGT1JFKQ0KICAgICAgcmV0dXJuVmFsdWUuYWRkRWxlbWVudCh0cmFu
c1RhYmxlLkJFRk9SRSk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJhbnNUYWJs
ZS5BRlRFUikgPT0gdHJhbnNUYWJsZS5BRlRFUikNCiAgICAgIHJldHVyblZh
bHVlLmFkZEVsZW1lbnQodHJhbnNUYWJsZS5BRlRFUik7DQogICAgaWYoKHJl
bGF0aW9uICYgdHJhbnNUYWJsZS5EVVJJTkcpID09IHRyYW5zVGFibGUuRFVS
SU5HKQ0KICAgICAgcmV0dXJuVmFsdWUuYWRkRWxlbWVudCh0cmFuc1RhYmxl
LkRVUklORyk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJhbnNUYWJsZS5DT05U
QUlOUykgPT0gdHJhbnNUYWJsZS5DT05UQUlOUykNCiAgICAgIHJldHVyblZh
bHVlLmFkZEVsZW1lbnQodHJhbnNUYWJsZS5DT05UQUlOUyk7DQogICAgaWYo
KHJlbGF0aW9uICYgdHJhbnNUYWJsZS5PVkVSTEFQUykgPT0gdHJhbnNUYWJs
ZS5PVkVSTEFQUykNCiAgICAgIHJldHVyblZhbHVlLmFkZEVsZW1lbnQodHJh
bnNUYWJsZS5PVkVSTEFQUyk7DQogICAgaWYoKHJlbGF0aW9uICYgdHJhbnNU
YWJsZS5PVkVSTEFQUEVEQlkpID09IHRyYW5zVGFibGUuT1ZFUkxBUFBFREJZ
KSANCiAgICAgIHJldHVyblZhbHVlLmFkZEVsZW1lbnQodHJhbnNUYWJsZS5P
VkVSTEFQUEVEQlkpOw0KICAgIGlmKChyZWxhdGlvbiAmIHRyYW5zVGFibGUu
TUVFVFMpID09IHRyYW5zVGFibGUuTUVFVFMpDQogICAgICByZXR1cm5WYWx1
ZS5hZGRFbGVtZW50KHRyYW5zVGFibGUuTUVFVFMpOw0KICAgIGlmKChyZWxh
dGlvbiAmIHRyYW5zVGFibGUuTUVUQlkpID09IHRyYW5zVGFibGUuTUVUQlkp
DQogICAgICByZXR1cm5WYWx1ZS5hZGRFbGVtZW50KHRyYW5zVGFibGUuTUVU
QlkpOw0KICAgIGlmKChyZWxhdGlvbiAmIHRyYW5zVGFibGUuU1RBUlRTKSA9
PSB0cmFuc1RhYmxlLlNUQVJUUykNCiAgICAgIHJldHVyblZhbHVlLmFkZEVs
ZW1lbnQodHJhbnNUYWJsZS5TVEFSVFMpOw0KICAgIGlmKChyZWxhdGlvbiAm
IHRyYW5zVGFibGUuU1RBUlRFREJZKSA9PSB0cmFuc1RhYmxlLlNUQVJURURC
WSkNCiAgICAgIHJldHVyblZhbHVlLmFkZEVsZW1lbnQodHJhbnNUYWJsZS5T
VEFSVEVEQlkpOw0KICAgIGlmKChyZWxhdGlvbiAmIHRyYW5zVGFibGUuRklO
SVNIRVMpID09IHRyYW5zVGFibGUuRklOSVNIRVMpDQogICAgICByZXR1cm5W
YWx1ZS5hZGRFbGVtZW50KHRyYW5zVGFibGUuRklOSVNIRVMpOw0KICAgIGlm
KChyZWxhdGlvbiAmIHRyYW5zVGFibGUuRklOSVNIRURCWSkgPT0gdHJhbnNU
YWJsZS5GSU5JU0hFREJZKQ0KICAgICAgcmV0dXJuVmFsdWUuYWRkRWxlbWVu
dCh0cmFuc1RhYmxlLkZJTklTSEVEQlkpOw0KICAgIC8vIGlmKChyZWxhdGlv
biAmIHRyYW5zVGFibGUuTk9JTkZPKSA9PSB0cmFuc1RhYmxlLk5PSU5GTykN
CiAgICAvLyAgcmV0dXJuVmFsdWUuYWRkRWxlbWVudCh0cmFuc1RhYmxlLk5P
SU5GTyk7DQogICAgcmV0dXJuKHJldHVyblZhbHVlKTsNCiAgfQ0KDQogIHB1
YmxpYyBTdHJpbmcgdG9TdHJpbmcoKXsNCiAgICBTdHJpbmcgc3RyID0gIkN1
cnJlbnQgR3JhcGg6XG5cbiI7DQogICAgZm9yKGludCBpID0gMDsgaSA8IHN5
bWJvbFRhYmxlLnNpemUoKTsgaSsrKQ0KICAgICAgZm9yKGludCBqID0gMDsg
aiA8IHN5bWJvbFRhYmxlLnNpemUoKTsgaisrKQ0KCSBzdHIgPSBzdHIgKw0K
CSAgIHN5bWJvbFRhYmxlLmdldFN5bWJvbChpKSArIA0KCSAgICIgPi0tLSAi
ICsgDQoJICAgdHJhbnNUYWJsZS50b1N0cmluZyhtYXRyaXhbaV1bal0pICsN
CgkgICAiIC0tLT4gIiArDQoJICAgc3ltYm9sVGFibGUuZ2V0U3ltYm9sKGop
ICsNCgkgICAiXG4iOw0KICAgIHJldHVybihzdHIpOw0KICB9DQp9ICANCg0K
DQoNCg0KDQoNCg0KDQoNCg==
---559023410-851401618-940204108=:11170--

