[Mono-list] Re: XmlNamespaceManager.LookupPrefix

ginga@kit.hi-ho.ne.jp ginga@kit.hi-ho.ne.jp
Sun, 19 Jan 2003 16:05:19 +0900


--------_3E2A46D9146C0793F530_MULTIPART_MIXED_
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

Hello,

> For now, lets assume that the bug is in the documentation, so lets move
> closer to the .NET behavior, and submit the bug to ECMA/Microsoft so
> they can fix their docs.

About this topic, I made contact with DotGNU developers ML.
Gopal V, one of the developer, said that it would be better
to wait until the next revision of ECMA is released.
I think it is better choice. Miguel, how do you think?


Related to this, I found another ECMA or MS bug in
XmlTextWriter.LookupPrefix. If prefix was not found, then
 - Mono ==> null
 - MS (both document and implementation) ==> null
 - ECMA spec. ==> String.Empty.
 - pnetlib ==> String.Empty
 - OCL ==> null

Moreover, XmlNode.GetPrefixOfNamespace(uri) returns String.Empty.
(MS document has no hints) ... I'm totally confused ;-(

Now I have completed (I hope so) those modification. I attached.
It was a bit complicated and might have another bugs.
(At least, no failures are found with my environment.)

I also checked with Sebastien's System.Security testcases.
I assume many failure are cleared.

Thanks,

-- Atsushi Eno

--------_3E2A46D9146C0793F530_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="XML.diff"
Content-Disposition: attachment;
 filename="XML.diff"
Content-Transfer-Encoding: base64

SW5kZXg6IFN5c3RlbS5YbWwvWG1sRWxlbWVudC5jcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbW9u
by9tY3MvY2xhc3MvU3lzdGVtLlhNTC9TeXN0ZW0uWG1sL1htbEVsZW1lbnQuY3MsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDYKZGlmZiAtdSAtcjEuNDYgWG1sRWxlbWVudC5jcwotLS0gU3lzdGVt
LlhtbC9YbWxFbGVtZW50LmNzCTEwIEphbiAyMDAzIDE4OjUwOjM5IC0wMDAwCTEuNDYKKysrIFN5
c3RlbS5YbWwvWG1sRWxlbWVudC5jcwkxOSBKYW4gMjAwMyAwNjo1MjozNCAtMDAwMApAQCAtMzYy
LDE1ICszNjIsMTIgQEAKIAkJewogCQkJdy5Xcml0ZVN0YXJ0RWxlbWVudChQcmVmaXgsIExvY2Fs
TmFtZSwgTmFtZXNwYWNlVVJJKTsKIAotCQkJLy8gd3JpdGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9u
cyhpZiBub3QgZXhpc3QpCi0JCQlpZihQcmVmaXggIT0gbnVsbCAmJiB3Lkxvb2t1cFByZWZpeCAo
UHJlZml4KSAhPSBOYW1lc3BhY2VVUkkpCi0JCQkJdy5Xcml0ZUF0dHJpYnV0ZVN0cmluZyAoInht
bG5zIiwgUHJlZml4LCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCBOYW1lc3BhY2VV
UkkpOwotCiAJCQlmb3JlYWNoKFhtbE5vZGUgYXR0cmlidXRlTm9kZSBpbiBBdHRyaWJ1dGVzKQot
CQkJewogCQkJCWF0dHJpYnV0ZU5vZGUuV3JpdGVUbyh3KTsKLQkJCQkvLyB3cml0ZSBuYW1lc3Bh
Y2UgZGVjbGFyYXRpb25zKGlmIG5vdCBleGlzdCkKLQkJCQlpZihhdHRyaWJ1dGVOb2RlLlByZWZp
eCAhPSBudWxsICYmIA0KKworCQkJLy8gd3JpdGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyhpZiBu
b3QgZXhpc3QpCisJCQlmb3JlYWNoKFhtbE5vZGUgYXR0cmlidXRlTm9kZSBpbiBBdHRyaWJ1dGVz
KSB7CisJCQkJaWYoYXR0cmlidXRlTm9kZS5QcmVmaXggIT0gbnVsbCAmJiBhdHRyaWJ1dGVOb2Rl
LlByZWZpeCAhPSBTdHJpbmcuRW1wdHkgJiYNCiAJCQkJCXcuTG9va3VwUHJlZml4KGF0dHJpYnV0
ZU5vZGUuUHJlZml4KSAhPSBhdHRyaWJ1dGVOb2RlLk5hbWVzcGFjZVVSSSAmJg0KIAkJCQkJYXR0
cmlidXRlTm9kZS5QcmVmaXggIT0gInhtbG5zIikNCiAJCQkJCXcuV3JpdGVBdHRyaWJ1dGVTdHJp
bmcoInhtbG5zIiwgYXR0cmlidXRlTm9kZS5QcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3htbG5zLyIsIGF0dHJpYnV0ZU5vZGUuTmFtZXNwYWNlVVJJKTsKSW5kZXg6IFN5c3RlbS5YbWwv
WG1sTmFtZXNwYWNlTWFuYWdlci5jcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbW9uby9tY3MvY2xh
c3MvU3lzdGVtLlhNTC9TeXN0ZW0uWG1sL1htbE5hbWVzcGFjZU1hbmFnZXIuY3MsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1yMS43IFhtbE5hbWVzcGFjZU1hbmFnZXIuY3MKLS0t
IFN5c3RlbS5YbWwvWG1sTmFtZXNwYWNlTWFuYWdlci5jcwkyMyBTZXAgMjAwMiAwMDozOTozMCAt
MDAwMAkxLjcKKysrIFN5c3RlbS5YbWwvWG1sTmFtZXNwYWNlTWFuYWdlci5jcwkxOSBKYW4gMjAw
MyAwNjo1MjozNCAtMDAwMApAQCAtMTI1LDcgKzEyNSwxMiBAQAogCQkJCXNjb3BlID0gc2NvcGUu
TmV4dDsKIAkJCX0KIAotCQkJcmV0dXJuIFN0cmluZy5FbXB0eTsKKwkJCS8vIEVDTUEgc3BlY2lm
aWVzIHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyBTdHJpbmcuRW1wdHkKKwkJCS8vIGluIGNhc2Ug
b2Ygbm8gbWF0Y2guIEJ1dCBhY3R1YWxseSBNUy5ORVQgcmV0dXJucyBudWxsLgorCQkJLy8gRm9y
IG1vcmUgaW5mb3JtYXRpb24sc2VlCisJCQkvLyAgaHR0cDovL2xpc3RzLnhpbWlhbi5jb20vYXJj
aGl2ZXMvcHVibGljL21vbm8tbGlzdC8yMDAzLUphbnVhcnkvMDA1MDcxLmh0bWwKKwkJCS8vcmV0
dXJuIFN0cmluZy5FbXB0eTsKKwkJCXJldHVybiBudWxsOwogCQl9CiAKIAkJcHVibGljIHZpcnR1
YWwgYm9vbCBQb3BTY29wZSAoKQpJbmRleDogU3lzdGVtLlhtbC9YbWxOb2RlLmNzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9tb25vL21jcy9jbGFzcy9TeXN0ZW0uWE1ML1N5c3RlbS5YbWwvWG1sTm9k
ZS5jcyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11IC1yMS40MiBYbWxOb2RlLmNz
Ci0tLSBTeXN0ZW0uWG1sL1htbE5vZGUuY3MJMjMgRGVjIDIwMDIgMTc6MzU6NTUgLTAwMDAJMS40
MgorKysgU3lzdGVtLlhtbC9YbWxOb2RlLmNzCTE5IEphbiAyMDAzIDA2OjUyOjM0IC0wMDAwCkBA
IC0yMzcsNTkgKzIzNyw3IEBACiAJCXsKIAkJCS8vIEkgYXNzdW1lIHRoYXQgQXBwZW5kQ2hpbGQo
bikgZXF1YWxzIHRvIEluc2VydEFmdGVyKG4sIHRoaXMuTGFzdENoaWxkKSBvciBJbnNlcnRCZWZv
cmUobiwgbnVsbCkKIAkJCXJldHVybiBJbnNlcnRCZWZvcmUgKG5ld0NoaWxkLCBudWxsKTsKLQot
CQkJLy8gQmVsb3cgYXJlIGZvcm1lcmx5IHVzZWQgbG9naWMuCi0vKgkJCVhtbERvY3VtZW50IG93
bmVyRG9jID0gKE5vZGVUeXBlID09IFhtbE5vZGVUeXBlLkRvY3VtZW50KSA/IChYbWxEb2N1bWVu
dCl0aGlzIDogT3duZXJEb2N1bWVudDsKLQotCQkJaWYgKE5vZGVUeXBlID09IFhtbE5vZGVUeXBl
LkRvY3VtZW50IHx8IE5vZGVUeXBlID09IFhtbE5vZGVUeXBlLkVsZW1lbnQgfHwgTm9kZVR5cGUg
PT0gWG1sTm9kZVR5cGUuQXR0cmlidXRlIHx8IE5vZGVUeXBlID09IFhtbE5vZGVUeXBlLkRvY3Vt
ZW50RnJhZ21lbnQpIHsKLQkJCQkKLQkJCQlpZiAoSXNSZWFkT25seSkKLQkJCQkJdGhyb3cgbmV3
IEFyZ3VtZW50RXhjZXB0aW9uICgiVGhlIHNwZWNpZmllZCBub2RlIGlzIHJlYWRvbmx5LiIpOwot
Ci0JCQkJaWYgKG5ld0NoaWxkLk93bmVyRG9jdW1lbnQgIT0gb3duZXJEb2MpCi0JCQkJCXRocm93
IG5ldyBBcmd1bWVudEV4Y2VwdGlvbiAoIkNhbid0IGFwcGVuZCBhIG5vZGUgY3JlYXRlZCBieSBh
bm90aGVyIGRvY3VtZW50LiIpOwotCi0JCQkJLy8gY2hlY2tpbmcgdmFsaWRpdHkgZmluaXNoZWQu
IHRoZW4gYXBwZW5kaW5nLi4uCi0KLQkJCQlvd25lckRvYy5vbk5vZGVJbnNlcnRpbmcgKG5ld0No
aWxkLCB0aGlzKTsKLQotCQkJCWlmKG5ld0NoaWxkLlBhcmVudE5vZGUgIT0gbnVsbCkKLQkJCQkJ
bmV3Q2hpbGQuUGFyZW50Tm9kZS5SZW1vdmVDaGlsZChuZXdDaGlsZCk7Ci0KLQkJCQlpZihuZXdD
aGlsZC5Ob2RlVHlwZSA9PSBYbWxOb2RlVHlwZS5Eb2N1bWVudEZyYWdtZW50KQotCQkJCXsKLQkJ
CQkJaW50IHggPSBuZXdDaGlsZC5DaGlsZE5vZGVzLkNvdW50OwotCQkJCQlmb3IoaW50IGk9MDsg
aTx4OyBpKyspCi0JCQkJCXsKLQkJCQkJCS8vIFdoZW4gdGhpcyBsb2dpYyBiZWNhbWUgdG8gcmVt
b3ZlIGNoaWxkcmVuIGluIG9yZGVyLCB0aGVuIGluZGV4IHdpbGwgaGF2ZSBuZXZlciB0byBpbmNy
ZW1lbnRzLgotCQkJCQkJWG1sTm9kZSBuID0gbmV3Q2hpbGQuQ2hpbGROb2RlcyBbMF07Ci0JCQkJ
CQl0aGlzLkFwcGVuZENoaWxkKG4pOwkvLyByZWN1cnNpdmVseSBpbnZva2VzIGV2ZW50cy4gKEl0
IGlzIGNvbXBhdGlibGUgd2l0aCBNUyBpbXBsZW1lbnRhdGlvbi4pCi0JCQkJCX0KLQkJCQl9Ci0J
CQkJZWxzZQotCQkJCXsKLQkJCQkJWG1sTGlua2VkTm9kZSBuZXdMaW5rZWRDaGlsZCA9IChYbWxM
aW5rZWROb2RlKSBuZXdDaGlsZDsKLQkJCQkJWG1sTGlua2VkTm9kZSBsYXN0TGlua2VkQ2hpbGQg
PSBMYXN0TGlua2VkQ2hpbGQ7Ci0KLQkJCQkJbmV3TGlua2VkQ2hpbGQucGFyZW50Tm9kZSA9IHRo
aXM7Ci0JCQkJCi0JCQkJCWlmIChsYXN0TGlua2VkQ2hpbGQgIT0gbnVsbCkgCi0JCQkJCXsKLQkJ
CQkJCW5ld0xpbmtlZENoaWxkLk5leHRMaW5rZWRTaWJsaW5nID0gbGFzdExpbmtlZENoaWxkLk5l
eHRMaW5rZWRTaWJsaW5nOwotCQkJCQkJbGFzdExpbmtlZENoaWxkLk5leHRMaW5rZWRTaWJsaW5n
ID0gbmV3TGlua2VkQ2hpbGQ7Ci0JCQkJCX0gCi0JCQkJCWVsc2UKLQkJCQkJCW5ld0xpbmtlZENo
aWxkLk5leHRMaW5rZWRTaWJsaW5nID0gbmV3TGlua2VkQ2hpbGQ7Ci0JCQkJCi0JCQkJCUxhc3RM
aW5rZWRDaGlsZCA9IG5ld0xpbmtlZENoaWxkOwotCi0JCQkJCW93bmVyRG9jLm9uTm9kZUluc2Vy
dGVkIChuZXdDaGlsZCwgbmV3Q2hpbGQuUGFyZW50Tm9kZSk7Ci0KLQkJCQl9Ci0JCQkJcmV0dXJu
IG5ld0NoaWxkOwotCQkJfSBlbHNlCi0JCQkJdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNl
cHRpb24oKTsKLSovCQl9CisJCX0KIAogCQlwdWJsaWMgdmlydHVhbCBYbWxOb2RlIENsb25lICgp
CiAJCXsKQEAgLTMyMSw3ICsyNjksOCBAQAogCQlwdWJsaWMgdmlydHVhbCBzdHJpbmcgR2V0UHJl
Zml4T2ZOYW1lc3BhY2UgKHN0cmluZyBuYW1lc3BhY2VVUkkpCiAJCXsKIAkJCVhtbE5hbWVzcGFj
ZU1hbmFnZXIgbnNtZ3IgPSBDb25zdHJ1Y3ROYW1lc3BhY2VNYW5hZ2VyICgpOwotCQkJcmV0dXJu
IG5zbWdyLkxvb2t1cFByZWZpeCAobmFtZXNwYWNlVVJJKTsKKwkJCXN0cmluZyBucyA9IG5zbWdy
Lkxvb2t1cFByZWZpeCAobmFtZXNwYWNlVVJJKTsKKwkJCXJldHVybiAobnMgIT0gbnVsbCkgPyBu
cyA6IFN0cmluZy5FbXB0eTsKIAkJfQogCiAJCW9iamVjdCBJQ2xvbmVhYmxlLkNsb25lICgpCklu
ZGV4OiBTeXN0ZW0uWG1sL1htbFRleHRXcml0ZXIuY3MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL21v
bm8vbWNzL2NsYXNzL1N5c3RlbS5YTUwvU3lzdGVtLlhtbC9YbWxUZXh0V3JpdGVyLmNzLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXIxLjI3IFhtbFRleHRXcml0ZXIuY3MKLS0t
IFN5c3RlbS5YbWwvWG1sVGV4dFdyaXRlci5jcwkyMCBEZWMgMjAwMiAxODoxMjo1NCAtMDAwMAkx
LjI3CisrKyBTeXN0ZW0uWG1sL1htbFRleHRXcml0ZXIuY3MJMTkgSmFuIDIwMDMgMDY6NTI6MzQg
LTAwMDAKQEAgLTQwLDYgKzQwLDggQEAKIAkJWG1sU3BhY2UgeG1sU3BhY2UgPSBYbWxTcGFjZS5O
b25lOwogCQlib29sIG9wZW5YbWxMYW5nID0gZmFsc2U7CiAJCWJvb2wgb3BlblhtbFNwYWNlID0g
ZmFsc2U7CisJCXN0cmluZyBvcGVuRWxlbWVudFByZWZpeDsKKwkJc3RyaW5nIG9wZW5FbGVtZW50
TlM7CiAKIAkJI2VuZHJlZ2lvbgogCkBAIC0xNzUsNiArMTc3LDQ0IEBACiAJCSNlbmRyZWdpb24K
IAogCQkjcmVnaW9uIE1ldGhvZHMKKwkJcHJpdmF0ZSB2b2lkIEFkZE1pc3NpbmdFbGVtZW50WG1s
bnMgKCkKKwkJeworCQkJLy8gb3V0cHV0IG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpZiBub3QgZXhp
c3QuCisJCQlzdHJpbmcgcHJlZml4ID0gb3BlbkVsZW1lbnRQcmVmaXg7CisJCQlzdHJpbmcgbnMg
PSBvcGVuRWxlbWVudE5TOworCQkJaWYgKG5zICE9IG51bGwvKiAmJiBMb29rdXBQcmVmaXggKG5z
KSAhPSBwcmVmaXgqLykgCisJCQl7CisJCQkJc3RyaW5nIGZvcm1hdFhtbG5zID0gU3RyaW5nLkVt
cHR5OworCQkJCWlmIChucyAhPSBTdHJpbmcuRW1wdHkpCisJCQkJeworCQkJCQlzdHJpbmcgZXhp
c3RpbmdQcmVmaXggPSBuYW1lc3BhY2VNYW5hZ2VyLkxvb2t1cFByZWZpeCAobnMpOworCQkJCQli
b29sIGFkZERlZmF1bHROYW1lc3BhY2UgPSBmYWxzZTsKKworCQkJCQlpZiAoZXhpc3RpbmdQcmVm
aXggPT0gbnVsbCkgCisJCQkJCXsKKwkJCQkJCW5hbWVzcGFjZU1hbmFnZXIuQWRkTmFtZXNwYWNl
IChwcmVmaXgsIG5zKTsKKwkJCQkJCWFkZERlZmF1bHROYW1lc3BhY2UgPSB0cnVlOworCQkJCQl9
CisKKwkJCQkJaWYgKHByZWZpeCA9PSBTdHJpbmcuRW1wdHkpCisJCQkJCQlwcmVmaXggPSBleGlz
dGluZ1ByZWZpeDsKKworCQkJCQlpZiAocHJlZml4ICE9IGV4aXN0aW5nUHJlZml4KQorCQkJCQkJ
Zm9ybWF0WG1sbnMgPSBTdHJpbmcuRm9ybWF0ICgiIHhtbG5zOnswfT17MX17Mn17MX0iLCBwcmVm
aXgsIHF1b3RlQ2hhciwgbnMpOworCQkJCQllbHNlIGlmIChhZGREZWZhdWx0TmFtZXNwYWNlKQor
CQkJCQkJZm9ybWF0WG1sbnMgPSBTdHJpbmcuRm9ybWF0ICgiIHhtbG5zPXswfXsxfXswfSIsIHF1
b3RlQ2hhciwgbnMpOworCQkJCX0gCisJCQkJZWxzZSBpZiAoKHByZWZpeCA9PSBTdHJpbmcuRW1w
dHkpICYmIChuYW1lc3BhY2VNYW5hZ2VyLkxvb2t1cE5hbWVzcGFjZSAocHJlZml4KSAhPSBTdHJp
bmcuRW1wdHkpKSAKKwkJCQl7CisJCQkJCW5hbWVzcGFjZU1hbmFnZXIuQWRkTmFtZXNwYWNlIChw
cmVmaXgsIG5zKTsKKwkJCQkJZm9ybWF0WG1sbnMgPSBTdHJpbmcuRm9ybWF0ICgiIHhtbG5zPXsw
fXswfSIsIHF1b3RlQ2hhcik7CisJCQkJfQorCQkJCWlmKGZvcm1hdFhtbG5zICE9IFN0cmluZy5F
bXB0eSkKKwkJCQkJdy5Xcml0ZShmb3JtYXRYbWxucyk7CisJCQkJb3BlbkVsZW1lbnRQcmVmaXgg
PSBudWxsOworCQkJCW9wZW5FbGVtZW50TlMgPSBudWxsOworCQkJfQorCQl9CiAKIAkJcHJpdmF0
ZSB2b2lkIENoZWNrU3RhdGUgKCkKIAkJewpAQCAtMTgyLDcgKzIyMiw3IEBACiAJCQkJdGhyb3cg
bmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24gKCJUaGUgV3JpdGVyIGlzIGNsb3NlZC4iKTsK
IAkJCX0KIAkJCWlmICgoZG9jdW1lbnRTdGFydGVkID09IHRydWUpICYmIChmb3JtYXR0aW5nID09
IEZvcm1hdHRpbmcuSW5kZW50ZWQpICYmICghSW5kZW50aW5nT3ZlcnJpZGVuKSkgewotCQkJCWlu
ZGVudEZvcm1hdHRpbmcgPSAiXHJcbiI7CisJCQkJaW5kZW50Rm9ybWF0dGluZyA9IHcuTmV3TGlu
ZTsKIAkJCQlpZiAoaW5kZW50TGV2ZWwgPiAwKSB7CiAJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwg
aW5kZW50TGV2ZWw7IGkrKykKIAkJCQkJCWluZGVudEZvcm1hdHRpbmcgKz0gaW5kZW50Q2hhcnM7
CkBAIC0yMTUsMTIgKzI1NSwxNSBAQAogCiAJCXByaXZhdGUgdm9pZCBDbG9zZVN0YXJ0RWxlbWVu
dCAoKQogCQl7Ci0JCQlpZiAob3BlblN0YXJ0RWxlbWVudCkgewotCQkJCXcuV3JpdGUoIj4iKTsK
LQkJCQl3cyA9IFdyaXRlU3RhdGUuQ29udGVudDsKLQkJCQlvcGVuU3RhcnRFbGVtZW50ID0gZmFs
c2U7Ci0JCQkJYXR0cmlidXRlV3JpdHRlbkZvckVsZW1lbnQgPSBmYWxzZTsKLQkJCX0KKwkJCWlm
ICghb3BlblN0YXJ0RWxlbWVudCkKKwkJCQlyZXR1cm47CisKKwkJCUFkZE1pc3NpbmdFbGVtZW50
WG1sbnMgKCk7CisKKwkJCXcuV3JpdGUgKCI+Iik7CisJCQl3cyA9IFdyaXRlU3RhdGUuQ29udGVu
dDsKKwkJCW9wZW5TdGFydEVsZW1lbnQgPSBmYWxzZTsKKwkJCWF0dHJpYnV0ZVdyaXR0ZW5Gb3JF
bGVtZW50ID0gZmFsc2U7CiAJCX0KIAogCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBGbHVzaCAoKQpA
QCAtMjMyLDkgKzI3NSwxMCBAQAogCQl7CiAJCQlzdHJpbmcgcHJlZml4ID0gbmFtZXNwYWNlTWFu
YWdlci5Mb29rdXBQcmVmaXggKG5zKTsKIAotCQkJaWYgKHByZWZpeCA9PSBTdHJpbmcuRW1wdHkp
Ci0JCQkJcHJlZml4ID0gbnVsbDsKLQorCQkJLy8gWG1sTmFtZXNwYWNlTWFuYWdlciBoYXMgY2hh
bmdlZCB0byByZXR1cm4gbnVsbCB3aGVuIE5TVVJJIG5vdCBmb3VuZC4KKwkJCS8vIChDb250cmFk
aWN0aW9uIHRvIHRoZSBkb2N1bWVudGF0aW9uLikKKwkJCS8vaWYgKHByZWZpeCA9PSBTdHJpbmcu
RW1wdHkpCisJCQkvLwlwcmVmaXggPSBudWxsOwogCQkJcmV0dXJuIHByZWZpeDsKIAkJfQogCkBA
IC0zNjMsNiArNDA3LDcgQEAKIAogCQkJaW5kZW50TGV2ZWwtLTsKIAkJCUNoZWNrU3RhdGUgKCk7
CisJCQlBZGRNaXNzaW5nRWxlbWVudFhtbG5zICgpOwogCiAJCQlpZiAob3BlblN0YXJ0RWxlbWVu
dCkgewogCQkJCWlmIChvcGVuQXR0cmlidXRlKQpAQCAtNDc2LDcgKzUyMSw4IEBACiAJCQkJc3Ry
aW5nIGV4aXN0aW5nUHJlZml4ID0gbmFtZXNwYWNlTWFuYWdlci5Mb29rdXBQcmVmaXggKG5zKTsK
IAogCQkJCWlmIChwcmVmaXggPT0gU3RyaW5nLkVtcHR5KQotCQkJCQlwcmVmaXggPSBleGlzdGlu
Z1ByZWZpeDsKKwkJCQkJcHJlZml4ID0gKGV4aXN0aW5nUHJlZml4ID09IG51bGwpID8KKwkJCQkJ
CVN0cmluZy5FbXB0eSA6IGV4aXN0aW5nUHJlZml4OwogCQkJfQogCiAJCQlpZiAocHJlZml4ICE9
IFN0cmluZy5FbXB0eSkgCkBAIC01MzgsNDUgKzU4NCwyMyBAQAogCiAJCXByaXZhdGUgdm9pZCBX
cml0ZVN0YXJ0RWxlbWVudEludGVybmFsIChzdHJpbmcgcHJlZml4LCBzdHJpbmcgbG9jYWxOYW1l
LCBzdHJpbmcgbnMpCiAJCXsKLQkJCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCQlwcmVmaXggPSBT
dHJpbmcuRW1wdHk7Ci0KLQkJCWlmICgocHJlZml4ICE9IFN0cmluZy5FbXB0eSkgJiYgKChucyA9
PSBudWxsKSB8fCAobnMgPT0gU3RyaW5nLkVtcHR5KSkpCisJCQlpZiAoKHByZWZpeCAhPSBudWxs
ICYmIHByZWZpeCAhPSBTdHJpbmcuRW1wdHkpICYmICgobnMgPT0gbnVsbCkgfHwgKG5zID09IFN0
cmluZy5FbXB0eSkpKQogCQkJCXRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbiAoIkNhbm5vdCB1
c2UgYSBwcmVmaXggd2l0aCBhbiBlbXB0eSBuYW1lc3BhY2UuIik7CiAKIAkJCUNoZWNrU3RhdGUg
KCk7CiAJCQlDbG9zZVN0YXJ0RWxlbWVudCAoKTsKIAkJCQorCQkJaWYgKHByZWZpeCA9PSBudWxs
KQorCQkJCXByZWZpeCA9IG5hbWVzcGFjZU1hbmFnZXIuTG9va3VwUHJlZml4IChucyk7CisJCQlp
ZiAocHJlZml4ID09IG51bGwpCisJCQkJcHJlZml4ID0gU3RyaW5nLkVtcHR5OworCiAJCQlzdHJp
bmcgZm9ybWF0WG1sbnMgPSAiIjsKIAkJCXN0cmluZyBmb3JtYXRQcmVmaXggPSAiIjsKIAotCQkJ
aWYobnMgIT0gbnVsbCkKLQkJCXsKLQkJCQlpZiAobnMgIT0gU3RyaW5nLkVtcHR5KSAKLQkJCQl7
Ci0JCQkJCXN0cmluZyBleGlzdGluZ1ByZWZpeCA9IG5hbWVzcGFjZU1hbmFnZXIuTG9va3VwUHJl
Zml4IChucyk7Ci0JCQkJCWJvb2wgYWRkRGVmYXVsdE5hbWVzcGFjZSA9IGZhbHNlOwotCi0JCQkJ
CWlmIChleGlzdGluZ1ByZWZpeCA9PSBTdHJpbmcuRW1wdHkgJiYgIW5hbWVzcGFjZU1hbmFnZXIu
SGFzTmFtZXNwYWNlIChwcmVmaXgpKSB7Ci0JCQkJCQluYW1lc3BhY2VNYW5hZ2VyLkFkZE5hbWVz
cGFjZSAocHJlZml4LCBucyk7Ci0JCQkJCQlhZGREZWZhdWx0TmFtZXNwYWNlID0gdHJ1ZTsKLQkJ
CQkJfQotCi0JCQkJCWlmIChwcmVmaXggPT0gU3RyaW5nLkVtcHR5KQotCQkJCQkJcHJlZml4ID0g
ZXhpc3RpbmdQcmVmaXg7Ci0KLQkJCQkJaWYgKHByZWZpeCAhPSBleGlzdGluZ1ByZWZpeCkKLQkJ
CQkJCWZvcm1hdFhtbG5zID0gU3RyaW5nLkZvcm1hdCAoIiB4bWxuczp7MH09ezF9ezJ9ezF9Iiwg
cHJlZml4LCBxdW90ZUNoYXIsIG5zKTsKLQkJCQkJZWxzZSBpZiAoYWRkRGVmYXVsdE5hbWVzcGFj
ZSkKLQkJCQkJCWZvcm1hdFhtbG5zID0gU3RyaW5nLkZvcm1hdCAoIiB4bWxucz17MH17MX17MH0i
LCBxdW90ZUNoYXIsIG5zKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoKHByZWZpeCA9PSBTdHJpbmcu
RW1wdHkpICYmIChuYW1lc3BhY2VNYW5hZ2VyLkxvb2t1cE5hbWVzcGFjZShwcmVmaXgpICE9IFN0
cmluZy5FbXB0eSkpIHsKLQkJCQkJZm9ybWF0WG1sbnMgPSBTdHJpbmcuRm9ybWF0ICgiIHhtbG5z
PXswfXswfSIsIHF1b3RlQ2hhcik7Ci0JCQkJfQotCi0JCQkJaWYgKHByZWZpeCAhPSBTdHJpbmcu
RW1wdHkpIHsKKwkJCWlmKG5zICE9IG51bGwpIHsKKwkJCQlpZiAocHJlZml4ICE9IFN0cmluZy5F
bXB0eSkKIAkJCQkJZm9ybWF0UHJlZml4ID0gcHJlZml4ICsgIjoiOwotCQkJCX0KIAkJCX0KIAog
CQkJdy5Xcml0ZSAoInswfTx7MX17Mn17M30iLCBpbmRlbnRGb3JtYXR0aW5nLCBmb3JtYXRQcmVm
aXgsIGxvY2FsTmFtZSwgZm9ybWF0WG1sbnMpOwpAQCAtNTg1LDEyICs2MDksMTIgQEAKIAkJCW9w
ZW5FbGVtZW50cy5QdXNoIChuZXcgWG1sVGV4dFdyaXRlck9wZW5FbGVtZW50IChmb3JtYXRQcmVm
aXggKyBsb2NhbE5hbWUpKTsKIAkJCXdzID0gV3JpdGVTdGF0ZS5FbGVtZW50OwogCQkJb3BlblN0
YXJ0RWxlbWVudCA9IHRydWU7CisJCQlvcGVuRWxlbWVudE5TID0gbnM7CisJCQlvcGVuRWxlbWVu
dFByZWZpeCA9IHByZWZpeDsKIAogCQkJbmFtZXNwYWNlTWFuYWdlci5QdXNoU2NvcGUgKCk7Ci0J
CQlpZihucyAhPSBudWxsKQotCQkJewotCQkJCW5hbWVzcGFjZU1hbmFnZXIuQWRkTmFtZXNwYWNl
IChwcmVmaXgsIG5zKTsKLQkJCX0KKy8vCQkJaWYobnMgIT0gbnVsbCkKKy8vCQkJCW5hbWVzcGFj
ZU1hbmFnZXIuQWRkTmFtZXNwYWNlIChwcmVmaXgsIG5zKTsKIAkJCWluZGVudExldmVsKys7CiAJ
CX0KIApJbmRleDogU3lzdGVtLlhtbC9YbWxXcml0ZXIuY3MKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L21vbm8vbWNzL2NsYXNzL1N5c3RlbS5YTUwvU3lzdGVtLlhtbC9YbWxXcml0ZXIuY3MsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcjEuMTUgWG1sV3JpdGVyLmNzCi0tLSBTeXN0
ZW0uWG1sL1htbFdyaXRlci5jcwkxOCBKYW4gMjAwMyAxMTozMDoxMiAtMDAwMAkxLjE1CisrKyBT
eXN0ZW0uWG1sL1htbFdyaXRlci5jcwkxOSBKYW4gMjAwMyAwNjo1MjozNCAtMDAwMApAQCAtMjI2
LDcgKzIyNiw3IEBACiAKIAkJcHVibGljIHZvaWQgV3JpdGVTdGFydEF0dHJpYnV0ZSAoc3RyaW5n
IGxvY2FsTmFtZSwgc3RyaW5nIG5zKQogCQl7Ci0JCQlXcml0ZVN0YXJ0QXR0cmlidXRlICgiIiwg
bG9jYWxOYW1lLCBucyk7CisJCQlXcml0ZVN0YXJ0QXR0cmlidXRlIChudWxsLCBsb2NhbE5hbWUs
IG5zKTsKIAkJfQogCiAJCXB1YmxpYyBhYnN0cmFjdCB2b2lkIFdyaXRlU3RhcnRBdHRyaWJ1dGUg
KHN0cmluZyBwcmVmaXgsIHN0cmluZyBsb2NhbE5hbWUsIHN0cmluZyBucyk7CkluZGV4OiBUZXN0
L1htbEVsZW1lbnRUZXN0cy5jcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbW9uby9tY3MvY2xhc3Mv
U3lzdGVtLlhNTC9UZXN0L1htbEVsZW1lbnRUZXN0cy5jcyx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xOApkaWZmIC11IC1yMS4xOCBYbWxFbGVtZW50VGVzdHMuY3MKLS0tIFRlc3QvWG1sRWxlbWVu
dFRlc3RzLmNzCTEwIEphbiAyMDAzIDE4OjUxOjMxIC0wMDAwCTEuMTgKKysrIFRlc3QvWG1sRWxl
bWVudFRlc3RzLmNzCTE5IEphbiAyMDAzIDA2OjUyOjM1IC0wMDAwCkBAIC0yODMsNiArMjgzLDE2
IEBACiAJCQlBc3NlcnROdWxsICgiUmVtb3ZlQWxsQXR0cmlidXRlcyIsIGVsLkdldEF0dHJpYnV0
ZU5vZGUgKCJhMiIpKTsKIAkJfQogCisJCXB1YmxpYyB2b2lkIFRlc3RXcml0ZVRvV2l0aERlZmF1
bHROYW1lc3BhY2UgKCkKKwkJeworCQkJWG1sRG9jdW1lbnQgZG9jID0gbmV3IFhtbERvY3VtZW50
ICgpOworCQkJZG9jLkxvYWRYbWwgKCI8UmV0cmlldmFsRWxlbWVudCBVUkk9XCJcInhtbG5zPVwi
aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI1wiIC8+Iik7CisJCQlTdHJpbmdXcml0
ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyICgpOworCQkJWG1sVGV4dFdyaXRlciB4dHcgPSBuZXcg
WG1sVGV4dFdyaXRlciAoc3cpOworCQkJZG9jLkRvY3VtZW50RWxlbWVudC5Xcml0ZVRvICh4dHcp
OworCQkJQXNzZXJ0RXF1YWxzICgiPFJldHJpZXZhbEVsZW1lbnQgVVJJPVwiXCIgeG1sbnM9XCJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjXCIgLz4iLCBzdy5Ub1N0cmluZygpKTsK
KwkJfQorCiAJCXB1YmxpYyB2b2lkIFRlc3RXcml0ZVRvV2l0aERlbGV0ZWROYW1lc3BhY2VQcmVm
aXggKCkKIAkJewogCQkJWG1sRG9jdW1lbnQgZG9jID0gbmV3IFhtbERvY3VtZW50ICgpOwpJbmRl
eDogVGVzdC9YbWxOb2RlVGVzdHMuY3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL21vbm8vbWNzL2Ns
YXNzL1N5c3RlbS5YTUwvVGVzdC9YbWxOb2RlVGVzdHMuY3MsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC11IC1yMS40IFhtbE5vZGVUZXN0cy5jcwotLS0gVGVzdC9YbWxOb2RlVGVzdHMu
Y3MJMTMgSmFuIDIwMDMgMTI6MTM6NDcgLTAwMDAJMS40CisrKyBUZXN0L1htbE5vZGVUZXN0cy5j
cwkxOSBKYW4gMjAwMyAwNjo1MjozNSAtMDAwMApAQCAtMTY4LDUgKzE2OCwxNSBAQAogCQkJQXNz
ZXJ0IChyZW1vdmVkKTsKIAkJCUFzc2VydCAocmVtb3ZpbmcpOwogCQl9CisJCQorCQlwdWJsaWMg
dm9pZCBUZXN0R2V0UHJlZml4T2ZOYW1lc3BhY2UgKCkKKwkJeworCQkJZG9jdW1lbnQuTG9hZFht
bCAoIjxyb290PjxjMSB4bWxucz0ndXJuOmZvbyc+PGMyIHhtbG5zOmZvbz0ndXJuOmZvbycgeG1s
bnM9J3VybjpiYXInPjxjMyB4bWxucz0nJy8+PC9jMj48L2MxPjwvcm9vdD4iKTsKKwkJCUFzc2Vy
dEVxdWFscyAoInJvb3QiLCBTdHJpbmcuRW1wdHksIGRvY3VtZW50LkRvY3VtZW50RWxlbWVudC5H
ZXRQcmVmaXhPZk5hbWVzcGFjZSAoInVybjpmb28iKSk7CisJCQlBc3NlcnRFcXVhbHMgKCJjMSIs
IFN0cmluZy5FbXB0eSwgZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50LkdldFByZWZpeE9mTmFtZXNw
YWNlICgidXJuOmZvbyIpKTsKKwkJCUFzc2VydEVxdWFscyAoImMyIiwgU3RyaW5nLkVtcHR5LCBk
b2N1bWVudC5Eb2N1bWVudEVsZW1lbnQuRmlyc3RDaGlsZC5HZXRQcmVmaXhPZk5hbWVzcGFjZSAo
InVybjpmb28iKSk7CisJCQlBc3NlcnRFcXVhbHMgKCJjMyIsICJmb28iLCBkb2N1bWVudC5Eb2N1
bWVudEVsZW1lbnQuRmlyc3RDaGlsZC5GaXJzdENoaWxkLkdldFByZWZpeE9mTmFtZXNwYWNlICgi
dXJuOmZvbyIpKTsKKworCQl9CiAJfQogfQo=

--------_3E2A46D9146C0793F530_MULTIPART_MIXED_--