[mb-commits] r13678 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet/mmd1 servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet
[email protected] Wed, 08 May 2013 16:09:28 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1Ua6vo-0002uT-8r@wiley> |
QXV0aG9yOiBpamFiegpEYXRlOiAyMDEzLTA1LTA4IDE2OjA5OjI3ICswMDAwIChXZWQsIDA4IE1h eSAyMDEzKQpOZXcgUmV2aXNpb246IDEzNjc4CgpNb2RpZmllZDoKICAgc2VhcmNoX3NlcnZlci90 cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0 aXN0SW5kZXguamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEv b3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9BcnRpc3RJbmRleEZpZWxkLmphdmEKICAgc2Vh cmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFy Y2gvaW5kZXgvTGFiZWxJbmRleC5qYXZhCiAgIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3Jj L21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1JlY29yZGluZ0luZGV4Rmll bGQuamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211 c2ljYnJhaW56L3NlYXJjaC9pbmRleC9SZWxlYXNlSW5kZXguamF2YQogICBzZWFyY2hfc2VydmVy L3RydW5rL2luZGV4L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9B cnRpc3RJbmRleFRlc3QuamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL21h aW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvbW1kMS9BcnRpc3RNbWQxWG1s V3JpdGVyLmphdmEKICAgc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy9tYWluL2phdmEv b3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L21tZDIvQXJ0aXN0V3JpdGVyLmphdmEKICAg c2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56 L3NlYXJjaC9zZXJ2bGV0L0ZpbmRBcnRpc3RUZXN0LmphdmEKICAgc2VhcmNoX3NlcnZlci90cnVu ay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L0lz c3VlU2VhcmNoMTY3VGVzdC5qYXZhCiAgIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMv dGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9SZWxvYWRJbmRleGVzVGVz dC5qYXZhCiAgIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvdGVzdC9qYXZhL29yZy9t dXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9TZWFyY2hBbGwyVGVzdC5qYXZhCkxvZzoKU0VBUkNI LTI2OTpXUyBzZWFyY2hlcyBkb24ndCByZXR1cm4gYWxpYXNlcyB0aGF0IG1hdGNoIHRoZSBhcnRp c3QgbmFtZSwgZml4ZWQgZm9yIGFydGlzdAoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsv aW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L0FydGlzdElu ZGV4LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFp bi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0aXN0SW5kZXguamF2YQkyMDEz LTA1LTAyIDIwOjM4OjA1IFVUQyAocmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9p bmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0aXN0SW5k ZXguamF2YQkyMDEzLTA1LTA4IDE2OjA5OjI3IFVUQyAocmV2IDEzNjc4KQpAQCAtMTksMTUgKzE5 LDE3IEBACiAKIHBhY2thZ2Ugb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleDsKIAoraW1wb3J0 IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuU3RyaW5nczsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2Vu ZS5hbmFseXNpcy5BbmFseXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5kb2N1bWVudC5E b2N1bWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5pbmRleC5JbmRleFdyaXRlcjsKIGlt cG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zZWFyY2guc2ltaWxhcml0aWVzLlNpbWlsYXJpdHk7Ci1p bXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuVGFnOworaW1wb3J0IG9yZy5tdXNpY2JyYWluei5t bWQyLio7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5NYkRvY3VtZW50OwogaW1wb3J0 IG9yZy5tdXNpY2JyYWluei5zZWFyY2guYW5hbHlzaXMuTXVzaWNicmFpbnpTaW1pbGFyaXR5Owog CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdl cjsKIGltcG9ydCBqYXZhLm5pby5DaGFyQnVmZmVyOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQu Q2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNl dDsKQEAgLTY5LDExICs3MSwxMSBAQAogICAgICAgICByZXR1cm4gc3VwZXIuZ2V0QW5hbHl6ZXIo QXJ0aXN0SW5kZXhGaWVsZC5jbGFzcyk7CiAgICAgfQogCi0JQE92ZXJyaWRlCi0JcHVibGljIElu ZGV4RmllbGQgZ2V0SWRlbnRpZmllckZpZWxkKCkgewotCQlyZXR1cm4gQXJ0aXN0SW5kZXhGaWVs ZC5JRDsKLQl9Ci0gICAgCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEluZGV4RmllbGQgZ2V0 SWRlbnRpZmllckZpZWxkKCkgeworICAgICAgICByZXR1cm4gQXJ0aXN0SW5kZXhGaWVsZC5JRDsK KyAgICB9CisKICAgICBwdWJsaWMgaW50IGdldE1heElkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7 CiAgICAgICAgIFN0YXRlbWVudCBzdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsK ICAgICAgICAgUmVzdWx0U2V0IHJzID0gc3QuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgTUFYKGlkKSBG Uk9NIGFydGlzdCIpOwpAQCAtODIsMTggKzg0LDE3IEBACiAgICAgfQogCiAgICAgcHVibGljIGlu dCBnZXROb09mUm93cyhpbnQgbWF4SWQpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlQcmVw YXJlZFN0YXRlbWVudCBzdCA9IGRiQ29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KAotICAgIAkJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBhcnRpc3QgV0hFUkUgaWQgPD0gPyBBTkQgZ2lkIDw+ID86 OnV1aWQiKTsKLSAgICAJc3Quc2V0SW50KDEsIG1heElkKTsKLSAgICAJc3Quc2V0U3RyaW5nKDIs IERFTEVURURfQVJUSVNUX01CSUQpOworICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdCA9IGRi Q29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgICAgICJTRUxFQ1QgY291 bnQoKikgRlJPTSBhcnRpc3QgV0hFUkUgaWQgPD0gPyBBTkQgZ2lkIDw+ID86OnV1aWQiKTsKKyAg ICAgICAgc3Quc2V0SW50KDEsIG1heElkKTsKKyAgICAgICAgc3Quc2V0U3RyaW5nKDIsIERFTEVU RURfQVJUSVNUX01CSUQpOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBzdC5leGVjdXRlUXVlcnko KTsKICAgICAgICAgcnMubmV4dCgpOwogICAgICAgICByZXR1cm4gcnMuZ2V0SW50KDEpOwogICAg IH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTaW1pbGFyaXR5IGdldFNpbWlsYXJpdHko KQotICAgIHsKKyAgICBwdWJsaWMgU2ltaWxhcml0eSBnZXRTaW1pbGFyaXR5KCkgewogICAgICAg ICByZXR1cm4gbmV3IE11c2ljYnJhaW56U2ltaWxhcml0eSgpOwogICAgIH0KIApAQCAtMTAzLDQz ICsxMDQsNDQgQEAKIAogICAgICAgICBhZGRQcmVwYXJlZFN0YXRlbWVudCgiVEFHUyIsCiAgICAg ICAgICAgICAgICAgIlNFTEVDVCBhcnRpc3RfdGFnLmFydGlzdCwgdGFnLm5hbWUgYXMgdGFnLCBh cnRpc3RfdGFnLmNvdW50IGFzIGNvdW50ICIgKwotICAgICAgICAgICAgICAgICIgRlJPTSBhcnRp c3RfdGFnICIgKwotICAgICAgICAgICAgICAgICIgIElOTkVSIEpPSU4gdGFnIE9OIHRhZz1pZCAi ICsKLSAgICAgICAgICAgICAgICAiIFdIRVJFIGFydGlzdCBiZXR3ZWVuID8gQU5EID8iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBhcnRpc3RfdGFnICIgKworICAgICAgICAgICAg ICAgICAgICAgICAgIiAgSU5ORVIgSk9JTiB0YWcgT04gdGFnPWlkICIgKworICAgICAgICAgICAg ICAgICAgICAgICAgIiBXSEVSRSBhcnRpc3QgYmV0d2VlbiA/IEFORCA/Iik7CiAKICAgICAgICAg YWRkUHJlcGFyZWRTdGF0ZW1lbnQoIkFMSUFTRVMiLAogICAgICAgICAgICAgICAgICJTRUxFQ1Qg YXJ0aXN0X2FsaWFzLmFydGlzdCBhcyBhcnRpc3QsIG4ubmFtZSBhcyBhbGlhcyAiICsKLSAgICAg ICAgICAgICAgICAiIEZST00gYXJ0aXN0X2FsaWFzICIgKwotICAgICAgICAgICAgICAgICIgIEpP SU4gYXJ0aXN0X25hbWUgbiBPTiAoYXJ0aXN0X2FsaWFzLm5hbWUgPSBuLmlkKSAiICsKLSAgICAg ICAgICAgICAgICAiIFdIRVJFIGFydGlzdCBCRVRXRUVOID8gQU5EID8gIiArCi0gICAgICAgICAg ICAgICAgIlVOSU9OICIgKwotICAgICAgICAgICAgICAgICJTRUxFQ1QgYXJ0aXN0IGFzIGFydGlz dCwgbi5uYW1lIGFzIGFsaWFzICIgKwotICAgICAgICAgICAgICAgICIgRlJPTSBhcnRpc3RfY3Jl ZGl0X25hbWUgIiArCi0gICAgICAgICAgICAgICAgIiAgSk9JTiBhcnRpc3RfbmFtZSBuIE9OIG4u aWQgPSBhcnRpc3RfY3JlZGl0X25hbWUubmFtZSAiICsKLSAgICAgICAgICAgICAgICAiIFdIRVJF IGFydGlzdCBCRVRXRUVOID8gQU5EID8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiIEZS T00gYXJ0aXN0X2FsaWFzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIiAgSk9JTiBhcnRp c3RfbmFtZSBuIE9OIChhcnRpc3RfYWxpYXMubmFtZSA9IG4uaWQpICIgKworICAgICAgICAgICAg ICAgICAgICAgICAgIiBXSEVSRSBhcnRpc3QgQkVUV0VFTiA/IEFORCA/Iik7CiAKKyAgICAgICAg YWRkUHJlcGFyZWRTdGF0ZW1lbnQoIkFSVElTVENSRURJVFMiLAorICAgICAgICAgICAgICAgICAg ICAgICAgIlNFTEVDVCBhcnRpc3QgYXMgYXJ0aXN0LCBuLm5hbWUgYXMgYXJ0aXN0Y3JlZGl0ICIg KworICAgICAgICAgICAgICAgICAgICAgICAgIiBGUk9NIGFydGlzdF9jcmVkaXRfbmFtZSAiICsK KyAgICAgICAgICAgICAgICAgICAgICAgICIgIEpPSU4gYXJ0aXN0X25hbWUgbiBPTiBuLmlkID0g YXJ0aXN0X2NyZWRpdF9uYW1lLm5hbWUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIFdI RVJFIGFydGlzdCBCRVRXRUVOID8gQU5EID8gIik7CiAKKwogICAgICAgICBhZGRQcmVwYXJlZFN0 YXRlbWVudCgiQVJUSVNUUyIsCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBhcnRpc3QuaWQsIGdp ZCwgbjAubmFtZSBhcyBuYW1lLCBuMS5uYW1lIGFzIHNvcnRfbmFtZSwgIiArCi0gICAgICAgICAg ICAgICAgIiAgYXJ0aXN0X3R5cGUubmFtZSBhcyB0eXBlLCBiZWdpbl9kYXRlX3llYXIsIGJlZ2lu X2RhdGVfbW9udGgsIGJlZ2luX2RhdGVfZGF5LCAiICsKLSAgICAgICAgICAgICAgICAiICBlbmRf ZGF0ZV95ZWFyLCBlbmRfZGF0ZV9tb250aCwgZW5kX2RhdGVfZGF5LGVuZGVkLCAiICsKLSAgICAg ICAgICAgICAgICAiICBjb21tZW50LCBsb3dlcihpLmNvZGUpIGFzIGNvdW50cnksIGxvd2VyKGdl bmRlci5uYW1lKSBhcyBnZW5kZXIgIiArCi0gICAgICAgICAgICAgICAgIiBGUk9NIGFydGlzdCAi ICsKLSAgICAgICAgICAgICAgICAiICBMRUZUIEpPSU4gYXJ0aXN0X25hbWUgbjAgT04gYXJ0aXN0 Lm5hbWUgPSBuMC5pZCAiICsKLSAgICAgICAgICAgICAgICAiICBMRUZUIEpPSU4gYXJ0aXN0X25h bWUgbjEgT04gYXJ0aXN0LnNvcnRfbmFtZSA9IG4xLmlkICIgKwotICAgICAgICAgICAgICAgICIg IExFRlQgSk9JTiBhcnRpc3RfdHlwZSBPTiBhcnRpc3QudHlwZSA9IGFydGlzdF90eXBlLmlkICIg KwotICAgICAgICAgICAgICAgICIgIExFRlQgSk9JTiBpc29fMzE2Nl8xIGkgb24gYXJ0aXN0LmFy ZWE9aS5hcmVhIiArCi0gICAgICAgICAgICAgICAgIiAgTEVGVCBKT0lOIGdlbmRlciBPTiBhcnRp c3QuZ2VuZGVyPWdlbmRlci5pZCAiICsKLSAgICAgICAgICAgICAgICAiIFdIRVJFIGFydGlzdC5p ZCBCRVRXRUVOID8gQU5EID8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIGFydGlzdF90 eXBlLm5hbWUgYXMgdHlwZSwgYmVnaW5fZGF0ZV95ZWFyLCBiZWdpbl9kYXRlX21vbnRoLCBiZWdp bl9kYXRlX2RheSwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiICBlbmRfZGF0ZV95ZWFy LCBlbmRfZGF0ZV9tb250aCwgZW5kX2RhdGVfZGF5LGVuZGVkLCAiICsKKyAgICAgICAgICAgICAg ICAgICAgICAgICIgIGNvbW1lbnQsIGxvd2VyKGkuY29kZSkgYXMgY291bnRyeSwgbG93ZXIoZ2Vu ZGVyLm5hbWUpIGFzIGdlbmRlciAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBh cnRpc3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiICBMRUZUIEpPSU4gYXJ0aXN0X25h bWUgbjAgT04gYXJ0aXN0Lm5hbWUgPSBuMC5pZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICIgIExFRlQgSk9JTiBhcnRpc3RfbmFtZSBuMSBPTiBhcnRpc3Quc29ydF9uYW1lID0gbjEuaWQg IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiICBMRUZUIEpPSU4gYXJ0aXN0X3R5cGUgT04g YXJ0aXN0LnR5cGUgPSBhcnRpc3RfdHlwZS5pZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICIgIExFRlQgSk9JTiBpc29fMzE2Nl8xIGkgb24gYXJ0aXN0LmFyZWE9aS5hcmVhIiArCisgICAg ICAgICAgICAgICAgICAgICAgICAiICBMRUZUIEpPSU4gZ2VuZGVyIE9OIGFydGlzdC5nZW5kZXI9 Z2VuZGVyLmlkICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBhcnRpc3QuaWQg QkVUV0VFTiA/IEFORCA/Iik7CiAKICAgICAgICAgYWRkUHJlcGFyZWRTdGF0ZW1lbnQoIklQSUNP REVTIiwKICAgICAgICAgICAgICAgICAiU0VMRUNUIGlwaSwgYXJ0aXN0ICIgKwotICAgICAgICAg ICAgICAgICIgRlJPTSBhcnRpc3RfaXBpICAiICsKLSAgICAgICAgICAgICAgICAiIFdIRVJFIGFy dGlzdCBiZXR3ZWVuID8gQU5EID8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBh cnRpc3RfaXBpICAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgYXJ0aXN0IGJl dHdlZW4gPyBBTkQgPyIpOwogCiAgICAgfQogCi0gICAgcHJpdmF0ZSAgTWFwPEludGVnZXIsIExp c3Q8U3RyaW5nPj4gbG9hZElwaUNvZGVzKGludCBtaW4sIGludCBtYXgpIHRocm93cyBTUUxFeGNl cHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmlu Zz4+IGxvYWRJcGlDb2RlcyhpbnQgbWluLCBpbnQgbWF4KSB0aHJvd3MgU1FMRXhjZXB0aW9uLCBJ T0V4Y2VwdGlvbiB7CiAgICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGlwaUNvZGVz ID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PigpOwogICAgICAgICBQcmVwYXJl ZFN0YXRlbWVudCBzdCA9IGdldFByZXBhcmVkU3RhdGVtZW50KCJJUElDT0RFUyIpOwogICAgICAg ICBzdC5zZXRJbnQoMSwgbWluKTsKQEAgLTE2MCw3ICsxNjIsNyBAQAogICAgICAgICBycy5jbG9z ZSgpOwogICAgICAgICByZXR1cm4gaXBpQ29kZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGlj IHZvaWQgaW5kZXhEYXRhKEluZGV4V3JpdGVyIGluZGV4V3JpdGVyLCBpbnQgbWluLCBpbnQgbWF4 KSB0aHJvd3MgU1FMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gR2V0IFRh Z3MKQEAgLTE2OCwxOSArMTcwLDE3IEBACiAgICAgICAgIHN0LnNldEludCgxLCBtaW4pOwogICAg ICAgICBzdC5zZXRJbnQoMiwgbWF4KTsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gc3QuZXhlY3V0 ZVF1ZXJ5KCk7Ci0gICAgICAgIE1hcDxJbnRlZ2VyLExpc3Q8VGFnPj4gdGFncyA9IFRhZ0hlbHBl ci5jb21wbGV0ZVRhZ3NGcm9tRGJSZXN1bHRzKHJzLCJhcnRpc3QiKTsKKyAgICAgICAgTWFwPElu dGVnZXIsIExpc3Q8VGFnPj4gdGFncyA9IFRhZ0hlbHBlci5jb21wbGV0ZVRhZ3NGcm9tRGJSZXN1 bHRzKHJzLCAiYXJ0aXN0Iik7CiAgICAgICAgIHJzLmNsb3NlKCk7CiAKICAgICAgICAgLy8gSVBJ IENvZGVzCi0gICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGlwaUNvZGVzID0gbG9h ZElwaUNvZGVzKG1pbixtYXgpOwotICAgICAgICAKKyAgICAgICAgTWFwPEludGVnZXIsIExpc3Q8 U3RyaW5nPj4gaXBpQ29kZXMgPSBsb2FkSXBpQ29kZXMobWluLCBtYXgpOworCiAgICAgICAgIC8v QWxpYXNlcyAoYW5kIEFydGlzdCBDcmVkaXRzKQogICAgICAgICBNYXA8SW50ZWdlciwgU2V0PFN0 cmluZz4+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTZXQ8U3RyaW5nPj4oKTsKICAg ICAgICAgc3QgPSBnZXRQcmVwYXJlZFN0YXRlbWVudCgiQUxJQVNFUyIpOwogICAgICAgICBzdC5z ZXRJbnQoMSwgbWluKTsKICAgICAgICAgc3Quc2V0SW50KDIsIG1heCk7Ci0gICAgICAgIHN0LnNl dEludCgzLCBtaW4pOwotICAgICAgICBzdC5zZXRJbnQoNCwgbWF4KTsKICAgICAgICAgcnMgPSBz dC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkgewogICAgICAgICAg ICAgaW50IGFydGlzdElkID0gcnMuZ2V0SW50KCJhcnRpc3QiKTsKQEAgLTE5NSw5MyArMTk1LDE2 MiBAQAogICAgICAgICB9CiAgICAgICAgIHJzLmNsb3NlKCk7CiAKKyAgICAgICAgLy9BcnRpc3Qg Q3JlZGl0cykKKyAgICAgICAgTWFwPEludGVnZXIsIFNldDxTdHJpbmc+PiBhcnRpc3RDcmVkaXRz ID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgU2V0PFN0cmluZz4+KCk7CisgICAgICAgIHN0ID0gZ2V0 UHJlcGFyZWRTdGF0ZW1lbnQoIkFSVElTVENSRURJVFMiKTsKKyAgICAgICAgc3Quc2V0SW50KDEs IG1pbik7CisgICAgICAgIHN0LnNldEludCgyLCBtYXgpOworICAgICAgICBycyA9IHN0LmV4ZWN1 dGVRdWVyeSgpOworICAgICAgICB3aGlsZSAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpbnQg YXJ0aXN0SWQgPSBycy5nZXRJbnQoImFydGlzdCIpOworICAgICAgICAgICAgU2V0PFN0cmluZz4g bGlzdDsKKyAgICAgICAgICAgIGlmICghYXJ0aXN0Q3JlZGl0cy5jb250YWluc0tleShhcnRpc3RJ ZCkpIHsKKyAgICAgICAgICAgICAgICBsaXN0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAg ICAgICAgICAgICAgIGFydGlzdENyZWRpdHMucHV0KGFydGlzdElkLCBsaXN0KTsKKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGlzdCA9IGFydGlzdENyZWRpdHMuZ2V0KGFy dGlzdElkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QuYWRkKHJzLmdldFN0cmlu ZygiYXJ0aXN0Y3JlZGl0IikpOworICAgICAgICB9CisgICAgICAgIHJzLmNsb3NlKCk7CisKICAg ICAgICAgc3QgPSBnZXRQcmVwYXJlZFN0YXRlbWVudCgiQVJUSVNUUyIpOwogICAgICAgICBzdC5z ZXRJbnQoMSwgbWluKTsKICAgICAgICAgc3Quc2V0SW50KDIsIG1heCk7CiAgICAgICAgIHJzID0g c3QuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgIHdoaWxlIChycy5uZXh0KCkpIHsKLSAgICAgICAg ICAgIGlmKHJzLmdldFN0cmluZygiZ2lkIikuZXF1YWxzKERFTEVURURfQVJUSVNUX01CSUQpKQot ICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHJzLmdldFN0cmluZygiZ2lkIikuZXF1YWxz KERFTEVURURfQVJUSVNUX01CSUQpKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleFdyaXRlci5hZGREb2N1bWVudChkb2N1bWVudEZy b21SZXN1bHRTZXQocnMsIHRhZ3MsIGlwaUNvZGVzLCBhbGlhc2VzKSk7CisgICAgICAgICAgICBp bmRleFdyaXRlci5hZGREb2N1bWVudChkb2N1bWVudEZyb21SZXN1bHRTZXQocnMsIHRhZ3MsIGlw aUNvZGVzLCBhbGlhc2VzLCBhcnRpc3RDcmVkaXRzKSk7CiAgICAgICAgIH0KICAgICAgICAgcnMu Y2xvc2UoKTsKICAgICB9CiAKICAgICBwdWJsaWMgRG9jdW1lbnQgZG9jdW1lbnRGcm9tUmVzdWx0 U2V0KFJlc3VsdFNldCBycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1hcDxJbnRlZ2VyLExpc3Q8VGFnPj4gdGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFRhZz4+IHRhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxTdHJp bmc+PiBpcGlDb2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1hcDxJbnRlZ2VyLCBTZXQ8U3RyaW5nPj4gYWxpYXNlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwg U2V0PFN0cmluZz4+IGFsaWFzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNYXA8SW50ZWdlciwgU2V0PFN0cmluZz4+IGFydGlzdENyZWRpdHMpIHRocm93cyBT UUxFeGNlcHRpb24gewogCiAgICAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQo KTsKKworICAgICAgICBPYmplY3RGYWN0b3J5IG9mID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKKyAg ICAgICAgQXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOworCiAgICAgICAgIGludCBh cnRpc3RJZCA9IHJzLmdldEludCgiaWQiKTsKICAgICAgICAgU3RyaW5nIGFydGlzdEd1aWQgPSBy cy5nZXRTdHJpbmcoImdpZCIpOwogICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5JRCwgYXJ0aXN0SWQpOwogICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1RfSUQsIGFydGlzdEd1aWQpOworICAgICAgICBhcnRpc3Quc2V0SWQoYXJ0aXN0R3VpZCk7 CiAKICAgICAgICAgU3RyaW5nIGFydGlzdE5hbWUgPSBycy5nZXRTdHJpbmcoIm5hbWUiKTsKLSAg ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNULCBhcnRpc3ROYW1lICk7 CisgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgYXJ0aXN0TmFt ZSk7CisgICAgICAgIGFydGlzdC5zZXROYW1lKGFydGlzdE5hbWUpOwogCiAgICAgICAgIC8vQWNj ZW50ZWQgYXJ0aXN0Ci0gICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElT VF9BQ0NFTlQsIGFydGlzdE5hbWUgKTsKKyAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuQVJUSVNUX0FDQ0VOVCwgYXJ0aXN0TmFtZSk7CiAKICAgICAgICAgU3RyaW5nIHNvcnRO YW1lID0gcnMuZ2V0U3RyaW5nKCJzb3J0X25hbWUiKTsKICAgICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuU09SVE5BTUUsIHNvcnROYW1lKTsKKyAgICAgICAgYXJ0aXN0LnNldFNv cnROYW1lKHNvcnROYW1lKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJzLmdldFN0cmluZygi dHlwZSIpOwogICAgICAgICBkb2MuYWRkRmllbGRPclVua25vd24oQXJ0aXN0SW5kZXhGaWVsZC5U WVBFLCB0eXBlKTsKKyAgICAgICAgaWYgKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkodHlwZSkpIHsK KyAgICAgICAgICAgIGFydGlzdC5zZXRUeXBlKHR5cGUpOworICAgICAgICB9CiAKLSAgICAgICAg aWYocnMuZ2V0Qm9vbGVhbigiZW5kZWQiKSkgewotICAgICAgICAgICBkb2MuYWRkRmllbGRPclVu a25vd24oQXJ0aXN0SW5kZXhGaWVsZC5FTkRFRCwgInRydWUiKTsKKyAgICAgICAgYm9vbGVhbiBl bmRlZCA9IHJzLmdldEJvb2xlYW4oImVuZGVkIik7CisgICAgICAgIGRvYy5hZGRGaWVsZE9yVW5r bm93bihBcnRpc3RJbmRleEZpZWxkLkVOREVELCBCb29sZWFuLnRvU3RyaW5nKGVuZGVkKSk7CisK KyAgICAgICAgU3RyaW5nIGJlZ2luID0gVXRpbHMuZm9ybWF0RGF0ZShycy5nZXRJbnQoImJlZ2lu X2RhdGVfeWVhciIpLCBycy5nZXRJbnQoImJlZ2luX2RhdGVfbW9udGgiKSwgcnMuZ2V0SW50KCJi ZWdpbl9kYXRlX2RheSIpKTsKKyAgICAgICAgZG9jLmFkZE5vbkVtcHR5RmllbGQoQXJ0aXN0SW5k ZXhGaWVsZC5CRUdJTiwgYmVnaW4pOworCisgICAgICAgIFN0cmluZyBlbmQgPSBVdGlscy5mb3Jt YXREYXRlKHJzLmdldEludCgiZW5kX2RhdGVfeWVhciIpLCBycy5nZXRJbnQoImVuZF9kYXRlX21v bnRoIiksIHJzLmdldEludCgiZW5kX2RhdGVfZGF5IikpOworICAgICAgICAgICAgICAgIGRvYy5h ZGROb25FbXB0eUZpZWxkKEFydGlzdEluZGV4RmllbGQuRU5ELCBlbmQpOworCisgICAgICAgIExp ZmVTcGFuIGxpZmVzcGFuID0gb2YuY3JlYXRlTGlmZVNwYW4oKTsKKyAgICAgICAgYXJ0aXN0LnNl dExpZmVTcGFuKGxpZmVzcGFuKTsKKyAgICAgICAgaWYoIVN0cmluZ3MuaXNOdWxsT3JFbXB0eShi ZWdpbikpIHsKKyAgICAgICAgICAgIGxpZmVzcGFuLnNldEJlZ2luKGJlZ2luKTsKICAgICAgICAg fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvYy5hZGRGaWVsZE9yVW5rbm93bihBcnRp c3RJbmRleEZpZWxkLkVOREVELCAiZmFsc2UiKTsKKyAgICAgICAgaWYoIVN0cmluZ3MuaXNOdWxs T3JFbXB0eShlbmQpKSB7CisgICAgICAgICAgICBsaWZlc3Bhbi5zZXRCZWdpbihlbmQpOwogICAg ICAgICB9CisgICAgICAgIGxpZmVzcGFuLnNldEVuZGVkKEJvb2xlYW4udG9TdHJpbmcoZW5kZWQp KTsKIAotICAgICAgICBkb2MuYWRkTm9uRW1wdHlGaWVsZChBcnRpc3RJbmRleEZpZWxkLkJFR0lO LAotICAgICAgICAgICAgICAgIFV0aWxzLmZvcm1hdERhdGUocnMuZ2V0SW50KCJiZWdpbl9kYXRl X3llYXIiKSwgcnMuZ2V0SW50KCJiZWdpbl9kYXRlX21vbnRoIiksIHJzLmdldEludCgiYmVnaW5f ZGF0ZV9kYXkiKSkpOworICAgICAgICBTdHJpbmcgY29tbWVudCA9IHJzLmdldFN0cmluZygiY29t bWVudCIpOworICAgICAgICBkb2MuYWRkRmllbGRPck5vVmFsdWUoQXJ0aXN0SW5kZXhGaWVsZC5D T01NRU5ULCBjb21tZW50KTsKKyAgICAgICAgaWYgKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkoY29t bWVudCkpIHsKKyAgICAgICAgICAgIGFydGlzdC5zZXREaXNhbWJpZ3VhdGlvbihjb21tZW50KTsK KyAgICAgICAgfQogCi0gICAgICAgIGRvYy5hZGROb25FbXB0eUZpZWxkKEFydGlzdEluZGV4Rmll bGQuRU5ELAotICAgICAgICAgICAgICAgIFV0aWxzLmZvcm1hdERhdGUocnMuZ2V0SW50KCJlbmRf ZGF0ZV95ZWFyIiksIHJzLmdldEludCgiZW5kX2RhdGVfbW9udGgiKSwgcnMuZ2V0SW50KCJlbmRf ZGF0ZV9kYXkiKSkpOwotCi0gICAgICAgIGRvYy5hZGRGaWVsZE9yTm9WYWx1ZShBcnRpc3RJbmRl eEZpZWxkLkNPTU1FTlQsIHJzLmdldFN0cmluZygiY29tbWVudCIpKTsKLSAgICAgICAgZG9jLmFk ZEZpZWxkT3JVbmtub3duKEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgcnMuZ2V0U3RyaW5nKCJj b3VudHJ5IikpOwotCisgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gcnMuZ2V0U3RyaW5nKCJjb3Vu dHJ5Iik7CisgICAgICAgIGRvYy5hZGRGaWVsZE9yVW5rbm93bihBcnRpc3RJbmRleEZpZWxkLkNP VU5UUlksIGNvdW50cnkpOworICAgICAgICBpZiAoIVN0cmluZ3MuaXNOdWxsT3JFbXB0eShjb3Vu dHJ5KSkgeworICAgICAgICAgICAgYXJ0aXN0LnNldENvdW50cnkoY291bnRyeS50b1VwcGVyQ2Fz ZShMb2NhbGUuVVMpKTsKKyAgICAgICAgfQogICAgICAgICBTdHJpbmcgZ2VuZGVyID0gcnMuZ2V0 U3RyaW5nKCJnZW5kZXIiKTsKICAgICAgICAgaWYgKGdlbmRlciAhPSBudWxsKSB7CiAgICAgICAg ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsIGdlbmRlcik7CisgICAg ICAgICAgICBhcnRpc3Quc2V0R2VuZGVyKGdlbmRlcik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICBpZiggKHR5cGUhPW51bGwpICYmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoQXJ0aXN0 VHlwZS5QRVJTT04uZ2V0TmFtZSgpKSkgKSB7CisgICAgICAgICAgICBpZiAoKHR5cGUgIT0gbnVs bCkgJiYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShBcnRpc3RUeXBlLlBFUlNPTi5nZXROYW1lKCkp KSkgewogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRF UiwgSW5kZXguVU5LTk9XTik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp ZiAoYWxpYXNlcy5jb250YWluc0tleShhcnRpc3RJZCkpIHsKLSAgICAgICAgICAgIGZvciAoU3Ry aW5nIGFsaWFzIDogYWxpYXNlcy5nZXQoYXJ0aXN0SWQpKSB7Ci0gICAgICAgICAgICAgICAgLy9J Z25vcmUgYXJ0aXN0IGNyZWRpdHMgdGhhdCBhcmUgaWRlbnRpY2FsIHRvIGFydGlzdCBuYW1lCi0g ICAgICAgICAgICAgICAgaWYoIWFsaWFzLmVxdWFsc0lnbm9yZUNhc2UoYXJ0aXN0TmFtZSkpIHsK LSAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQUxJQVMs IGFsaWFzKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBBbGlhc0xpc3QgYWxpYXNM aXN0ID0gb2YuY3JlYXRlQWxpYXNMaXN0KCk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBhbGlh c05hbWUgOiBhbGlhc2VzLmdldChhcnRpc3RJZCkpIHsKKyAgICAgICAgICAgICAgICBkb2MuYWRk RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BTElBUywgYWxpYXNOYW1lKTsKKworICAgICAgICAgICAg ICAgIEFsaWFzIGFsaWFzID0gb2YuY3JlYXRlQWxpYXMoKTsKKyAgICAgICAgICAgICAgICBhbGlh cy5zZXRDb250ZW50KGFsaWFzTmFtZSk7CisgICAgICAgICAgICAgICAgYWxpYXNMaXN0LmdldEFs aWFzKCkuYWRkKGFsaWFzKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFydGlzdC5zZXRB bGlhc0xpc3QoYWxpYXNMaXN0KTsKICAgICAgICAgfQorCisgICAgICAgIC8vQXJ0aXN0IENyZWRp dHMgYXJlIGFkZGVkIGZvciBzZWFyY2ggb25seQorICAgICAgICBpZiAoYXJ0aXN0Q3JlZGl0cy5j b250YWluc0tleShhcnRpc3RJZCkpIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGFydGlzdENy ZWRpdCA6IGFydGlzdENyZWRpdHMuZ2V0KGFydGlzdElkKSkgeworCisgICAgICAgICAgICAgICAg Ly9BZGQgYWxpYXMgZXZlbiBpZiBzYW1lIGFzIGFydGlzdAorICAgICAgICAgICAgICAgIGRvYy5h ZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFMSUFTLCBhcnRpc3RDcmVkaXQpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKICAgICAgICAgYWRkQXJ0aXN0SW5pdGlhbGl6ZWQodHlwZSwgYXJ0 aXN0TmFtZSwgc29ydE5hbWUsIGRvYyk7CiAKICAgICAgICAgaWYgKHRhZ3MuY29udGFpbnNLZXko YXJ0aXN0SWQpKSB7Ci0gICAgICAgICAgICBmb3IgKFRhZyB0YWcgOiB0YWdzLmdldChhcnRpc3RJ ZCkpIHsKLSAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcs IHRhZy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRl eEZpZWxkLlRBR0NPVU5ULCB0YWcuZ2V0Q291bnQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAg IFRhZ0xpc3QgdGFnTGlzdCA9IG9mLmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAgICAgIGZvciAo VGFnIG5leHRUYWcgOiB0YWdzLmdldChhcnRpc3RJZCkpIHsKKyAgICAgICAgICAgICAgICBUYWcg dGFnID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlz dEluZGV4RmllbGQuVEFHLCBuZXh0VGFnLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgdGFn LnNldE5hbWUobmV4dFRhZy5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIHRhZy5zZXRDb3Vu dChuZXcgQmlnSW50ZWdlcihuZXh0VGFnLmdldENvdW50KCkudG9TdHJpbmcoKSkpOworICAgICAg ICAgICAgICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7CiAgICAgICAgICAgICB9CisgICAg ICAgICAgICBhcnRpc3Quc2V0VGFnTGlzdCh0YWdMaXN0KTsKICAgICAgICAgfQogCiAgICAgICAg IGlmIChpcGlDb2Rlcy5jb250YWluc0tleShhcnRpc3RJZCkpIHsKKyAgICAgICAgICAgIElwaUxp c3QgaXBpTGlzdCA9IG9mLmNyZWF0ZUlwaUxpc3QoKTsKICAgICAgICAgICAgIGZvciAoU3RyaW5n IGlwaUNvZGUgOiBpcGlDb2Rlcy5nZXQoYXJ0aXN0SWQpKSB7CiAgICAgICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJLCBpcGlDb2RlKTsKKyAgICAgICAgICAgICAg ICBpcGlMaXN0LmdldElwaSgpLmFkZChpcGlDb2RlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGFydGlzdC5zZXRJcGlMaXN0KGlwaUxpc3QpOwogICAgICAgICB9CiAKIAogICAgICAgICBB cnRpc3RCb29zdERvYy5ib29zdChhcnRpc3RHdWlkLCBkb2MpOworCisgICAgICAgIFN0cmluZyBz dG9yZSA9IE1NRFNlcmlhbGl6ZXIuc2VyaWFsaXplKGFydGlzdCk7CisgICAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9TVE9SRSwgc3RvcmUpOworCiAgICAgICAgIHJl dHVybiBkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKTsKICAgICB9CiAKQEAgLTI5MCwzMyArMzU5LDMw IEBACiAgICAgICogY2FuIGJlIGxhdGluIGVuY29kZWQgYW5kIGhhcyBhIHNvcnRuYW1lIGNvbnRh aW5pbmcgYSBjb21tYSBpbmRpY2F0aW5nIHByb2JhYmx5IGEgcmVhbCBuYW1lIHJhdGhlciB0aGFu IGEKICAgICAgKiBwZXJmb3JtYW5jZSBuYW1lCiAgICAgICoKKyAgICAgKiBUaGlzIGlzIG9ubHkg dXNlZCBmb3Igc2VhcmNoaW5nLCBub3QgcmV0dXJuZWQgaW4gdGhlIGxpc3Qgb2YgYWxpYXNlcyBh cyBvdXRwdXQgYmVjYXVzZSBpdCBpcyBub3QgYWN0dWFsbHkKKyAgICAgKiBhIHJlYWwgYWxpYXMs IGp1c3Qgb25lIHdlIGhhdmUgYWRkZWQgdG8gaGVscCBzZWFyY2hpbmcKKyAgICAgKgogICAgICAq IEBwYXJhbSB0eXBlCiAgICAgICogQHBhcmFtIGFydGlzdE5hbWUKICAgICAgKiBAcGFyYW0gc29y dE5hbWUKICAgICAgKiBAcGFyYW0gZG9jCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFkZEFy dGlzdEluaXRpYWxpemVkKFN0cmluZyB0eXBlLCBTdHJpbmcgYXJ0aXN0TmFtZSwgU3RyaW5nIHNv cnROYW1lLCBNYkRvY3VtZW50IGRvYykKLSAgICB7Ci0gICAgICAgIGlmKHR5cGU9PW51bGwgfHwg IXR5cGUuZXF1YWxzKFBFUlNPTikpCi0gICAgICAgIHsKKworICAgIHByaXZhdGUgdm9pZCBhZGRB cnRpc3RJbml0aWFsaXplZChTdHJpbmcgdHlwZSwgU3RyaW5nIGFydGlzdE5hbWUsIFN0cmluZyBz b3J0TmFtZSwgTWJEb2N1bWVudCBkb2MpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCB8fCAh dHlwZS5lcXVhbHMoUEVSU09OKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK LSAgICAgICAgdHJ5Ci0gICAgICAgIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxhdGlu RW5jb2Rlci5lbmNvZGUoQ2hhckJ1ZmZlci53cmFwKGFydGlzdE5hbWUpKTsKLSAgICAgICAgfQot ICAgICAgICBjYXRjaChDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24gY2RkKQotICAgICAgICB7Cisg ICAgICAgIH0gY2F0Y2ggKENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbiBjZGQpIHsKICAgICAgICAg ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmKHNvcnROYW1lLmNvbnRhaW5zKCIs IikpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKHNvcnROYW1lLmNvbnRhaW5zKCIsIikpIHsKICAg ICAgICAgICAgIFN0cmluZ1tdIG5hbWVzID0gYXJ0aXN0TmFtZS5zcGxpdCgiICIpOwotICAgICAg ICAgICAgaWYobmFtZXMubGVuZ3RoPj0yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg IGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFMSUFTLCBuYW1lc1swXS5zdWJzdHJpbmco MCwxKSArICcgJyArIG5hbWVzW25hbWVzLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgIGlmIChu YW1lcy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkFMSUFTLCBuYW1lc1swXS5zdWJzdHJpbmcoMCwgMSkgKyAnICcgKyBuYW1lc1tu YW1lcy5sZW5ndGggLSAxXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CgpNb2Rp ZmllZDogc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2Jy YWluei9zZWFyY2gvaW5kZXgvQXJ0aXN0SW5kZXhGaWVsZC5qYXZhCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl YXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2Vh cmNoL2luZGV4L0FydGlzdEluZGV4RmllbGQuamF2YQkyMDEzLTA1LTAyIDIwOjM4OjA1IFVUQyAo cmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29y Zy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0aXN0SW5kZXhGaWVsZC5qYXZhCTIwMTMtMDUt MDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC00MywyMSArNDMsMjEgQEAKIHB1YmxpYyBl bnVtIEFydGlzdEluZGV4RmllbGQgaW1wbGVtZW50cyBJbmRleEZpZWxkIHsKIAogCUlECQkJICAg ICgiX2lkIiwJCQlNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfTk9UX0FOQUxZWkVE X05PX05PUk1TLCBuZXcgS2V5d29yZEFuYWx5emVyKCkpLAotICAgIEFMSUFTCQkgICAgKCJhbGlh cyIsCQlNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRUQsIG5ldyBNdXNp Y2JyYWlueldpdGhQb3NHYXBBbmFseXplcigpKSwKKyAgICBBTElBUwkJICAgICgiYWxpYXMiLAkJ TXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCwgbmV3IE11c2lj YnJhaW56V2l0aFBvc0dhcEFuYWx5emVyKCkpLAogICAgIEFSVElTVF9JRAkgICAgKCJhcmlkIiwJ CU11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMs IG5ldyBLZXl3b3JkQW5hbHl6ZXIoKSksCiAgICAgQVJUSVNUCQkgICAgKCJhcnRpc3QiLAkJTXVz aWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVELCBuZXcgTXVzaWNicmFpbnpB bmFseXplcigpKSwKICAgICBBUlRJU1RfQUNDRU5UICAgKCJhcnRpc3RhY2NlbnQiLE11c2ljQnJh aW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfQU5BTFlaRUQsIG5ldyBNdXNpY2JyYWluektl ZXBBY2NlbnRzQW5hbHl6ZXIoKSksCi0gICAgQkVHSU4JCSAgICAoImJlZ2luIiwJCU11c2ljQnJh aW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBLZXl3 b3JkQW5hbHl6ZXIoKSksCi0gICAgQ09NTUVOVAkJICAgICgiY29tbWVudCIsCQlNdXNpY0JyYWlu ekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRUQpLAotICAgIENPVU5UUlkgICAgICAgICAo ImNvdW50cnkiLCAgICAgTXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVE X05PX05PUk1TLCBuZXcgQ2FzZUluc2Vuc2l0aXZlS2V5d29yZEFuYWx5emVyKCkpLAotICAgIEVO RAkJCSAgICAoImVuZCIsCQkJTXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX05PVF9B TkFMWVpFRF9OT19OT1JNUywgbmV3IEtleXdvcmRBbmFseXplcigpKSwKLSAgICBFTkRFRCAgICAg ICAgICAgKCJlbmRlZCIsICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9B TkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJbnNlbnNpdGl2ZUtleXdvcmRBbmFseXplcigpKSwK LSAgICBHRU5ERVIgICAgICAgICAgKCJnZW5kZXIiLCAgICAgIE11c2ljQnJhaW56RmllbGRUeXBl cy5URVhUX1NUT1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJbnNlbnNpdGl2ZUtleXdv cmRBbmFseXplcigpKSwKLSAgICBJUEkgICAgICAgICAgICAgKCJpcGkiLCAgICAgICAgIE11c2lj QnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJ bnNlbnNpdGl2ZUtleXdvcmRBbmFseXplcigpKSwKLSAgICBTT1JUTkFNRQkgICAgKCJzb3J0bmFt ZSIsCU11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9BTkFMWVpFRCksCi0gICAgVEFH CQkgICAgICAgICgidGFnIiwJCSAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURf QU5BTFlaRUQsIG5ldyBNdXNpY2JyYWlueldpdGhQb3NHYXBBbmFseXplcigpKSwKLSAgICBUQUdD T1VOVCAgICAgICAgKCJ0YWdjb3VudCIsCU11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JF RF9OT1RfSU5ERVhFRCksCi0gICAgVFlQRQkJICAgICgidHlwZSIsCQlNdXNpY0JyYWluekZpZWxk VHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVL ZXl3b3JkQW5hbHl6ZXIoKSksCisgICAgQkVHSU4JCSAgICAoImJlZ2luIiwJCU11c2ljQnJhaW56 RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfTk9UX0FOQUxZWkVEX05PX05PUk1TLCBuZXcgS2V5 d29yZEFuYWx5emVyKCkpLAorICAgIENPTU1FTlQJCSAgICAoImNvbW1lbnQiLAkJTXVzaWNCcmFp bnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCksCisgICAgQ09VTlRSWSAgICAg ICAgICgiY291bnRyeSIsICAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9OT1RfU1RPUkVE X0FOQUxZWkVEX05PX05PUk1TLCBuZXcgQ2FzZUluc2Vuc2l0aXZlS2V5d29yZEFuYWx5emVyKCkp LAorICAgIEVORAkJCSAgICAoImVuZCIsCQkJTXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9U X1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBLZXl3b3JkQW5hbHl6ZXIoKSksCisg ICAgRU5ERUQgICAgICAgICAgICgiZW5kZWQiLCAgICAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMu VEVYVF9OT1RfU1RPUkVEX0FOQUxZWkVEX05PX05PUk1TLCBuZXcgQ2FzZUluc2Vuc2l0aXZlS2V5 d29yZEFuYWx5emVyKCkpLAorICAgIEdFTkRFUiAgICAgICAgICAoImdlbmRlciIsICAgICAgTXVz aWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3 IENhc2VJbnNlbnNpdGl2ZUtleXdvcmRBbmFseXplcigpKSwKKyAgICBJUEkgICAgICAgICAgICAg KCJpcGkiLCAgICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfQU5B TFlaRURfTk9fTk9STVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6ZXIoKSksCisg ICAgU09SVE5BTUUJICAgICgic29ydG5hbWUiLAlNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9O T1RfU1RPUkVEX0FOQUxZWkVEKSwKKyAgICBUQUcJCSAgICAgICAgKCJ0YWciLAkJICAgIE11c2lj QnJhaW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfQU5BTFlaRUQsIG5ldyBNdXNpY2JyYWlu eldpdGhQb3NHYXBBbmFseXplcigpKSwKKyAgICBUWVBFCQkgICAgKCJ0eXBlIiwJCU11c2ljQnJh aW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBDYXNl SW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6ZXIoKSksCisgICAgQVJUSVNUX1NUT1JFICAgICgiYXJ0 aXN0c3RvcmUiLCBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfTk9UX0lOREVYRUQp LAogICAgIDsKIAogCgpNb2RpZmllZDogc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFp bi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvTGFiZWxJbmRleC5qYXZhCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVz aWNicmFpbnovc2VhcmNoL2luZGV4L0xhYmVsSW5kZXguamF2YQkyMDEzLTA1LTAyIDIwOjM4OjA1 IFVUQyAocmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9q YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvTGFiZWxJbmRleC5qYXZhCTIwMTMtMDUt MDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC0yMTYsMTAgKzIxNiwxMCBAQAogCiAKICAg ICAgICAgaWYocnMuZ2V0Qm9vbGVhbigiZW5kZWQiKSkgewotICAgICAgICAgICAgZG9jLmFkZEZp ZWxkT3JVbmtub3duKEFydGlzdEluZGV4RmllbGQuRU5ERUQsICJ0cnVlIik7CisgICAgICAgICAg ICBkb2MuYWRkRmllbGRPclVua25vd24oTGFiZWxJbmRleEZpZWxkLkVOREVELCAidHJ1ZSIpOwog ICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG9jLmFkZEZpZWxkT3JVbmtu b3duKEFydGlzdEluZGV4RmllbGQuRU5ERUQsICJmYWxzZSIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkT3JVbmtub3duKExhYmVsSW5kZXhGaWVsZC5FTkRFRCwgImZhbHNlIik7CiAgICAgICAg IH0KIAogICAgICAgICBkb2MuYWRkTm9uRW1wdHlGaWVsZChMYWJlbEluZGV4RmllbGQuQkVHSU4s CkBAIC0yNTEsNyArMjUxLDcgQEAKIAogICAgICAgICBpZiAoaXBpQ29kZXMuY29udGFpbnNLZXko bGFiZWxJZCkpIHsKICAgICAgICAgICAgIGZvciAoU3RyaW5nIGlwaUNvZGUgOiBpcGlDb2Rlcy5n ZXQobGFiZWxJZCkpIHsKLSAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhG aWVsZC5JUEksIGlwaUNvZGUpOworICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChMYWJlbElu ZGV4RmllbGQuSVBJLCBpcGlDb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCgpNb2Rp ZmllZDogc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2Jy YWluei9zZWFyY2gvaW5kZXgvUmVjb3JkaW5nSW5kZXhGaWVsZC5qYXZhCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnov c2VhcmNoL2luZGV4L1JlY29yZGluZ0luZGV4RmllbGQuamF2YQkyMDEzLTA1LTAyIDIwOjM4OjA1 IFVUQyAocmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9q YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvUmVjb3JkaW5nSW5kZXhGaWVsZC5qYXZh CTIwMTMtMDUtMDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC0xOSw3ICsxOSw2IEBACiAg ICAgQVJUSVNUICAgICAgICAgICAgICAgICAgKCJhcnRpc3QiLCAgICAgICAgICAgICAgTXVzaWNC cmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCwgbmV3IE11c2ljYnJhaW56 V2l0aFBvc0dhcEFuYWx5emVyKCkpLAogICAgIEFSVElTVF9OQU1FICAgICAgICAgICAgICgiYXJ0 aXN0bmFtZSIsCQkgICAgTXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFM WVpFRCwgbmV3IE11c2ljYnJhaW56V2l0aFBvc0dhcEFuYWx5emVyKCkpLAogICAgIEFSVElTVF9O QU1FQ1JFRElUICAgICAgICgiY3JlZGl0bmFtZSIsCSAgICAgICAgTXVzaWNCcmFpbnpGaWVsZFR5 cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCwgbmV3IE11c2ljYnJhaW56V2l0aFBvc0dhcEFu YWx5emVyKCkpLAotICAgIEFSVElTVF9DUkVESVQgICAgICAgICAgICgiYXJ0aXN0Y3JlZGl0Iiwg ICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1RfSU5ERVhFRCksCiAg ICAgQ09NTUVOVAkJICAgICAgICAgICAgKCJjb21tZW50IiwJCSAgICAgICAgTXVzaWNCcmFpbnpG aWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCksCiAgICAgQ09VTlRSWQkJCSAgICAg ICAgKCJjb3VudHJ5IiwJCSAgICAgICAgTXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NU T1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJbnNlbnNpdGl2ZUtleXdvcmRBbmFseXpl cigpKSwKICAgICBEVVJBVElPTgkJCSAgICAoImR1ciIsCQkJICAgICAgICBNdXNpY0JyYWluekZp ZWxkVHlwZXMuVEVYVF9OT1RfU1RPUkVEX05PVF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IEtleXdv cmRBbmFseXplcigpKSwKQEAgLTQ0LDggKzQzLDggQEAKICAgICBSRUxFQVNFX1RZUEUgICAgICAg ICAgICAoInR5cGUiLCAgICAgICAgICAgICAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9O T1RfU1RPUkVEX0FOQUxZWkVEX05PX05PUk1TLCBuZXcgQ2FzZUluc2Vuc2l0aXZlS2V5d29yZEFu YWx5emVyKCkpLAogICAgIFJFTEVBU0VHUk9VUF9JRAkgICAgICAgICgicmdpZCIsCQkJICAgIE11 c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfTk9UX0FOQUxZWkVEX05PX05PUk1T LCBuZXcgS2V5d29yZEFuYWx5emVyKCkpLAogICAgIFRBRwkJICAgICAgICAgICAgICAgICgidGFn IiwJCSAgICAgICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX05PVF9TVE9SRURfQU5B TFlaRUQsIG5ldyBNdXNpY2JyYWlueldpdGhQb3NHYXBBbmFseXplcigpKSwKLSAgICBUUkFDS05V TQkJCSAgICAoInRudW0iLAkJICAgICAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9S RURfTk9UX0FOQUxZWkVELCBuZXcgS2V5d29yZEFuYWx5emVyKCkpLAotICAgIFRSQUNLX0lEICAg ICAgICAgICAgICAgICgidGlkIiwJCSAgICAgICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5U RVhUX1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBLZXl3b3JkQW5hbHl6ZXIoKSks CisgICAgVFJBQ0tOVU0JCQkgICAgKCJ0bnVtIiwJCSAgICAgICAgTXVzaWNCcmFpbnpGaWVsZFR5 cGVzLlRFWFRfU1RPUkVEX05PVF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IEtleXdvcmRBbmFseXpl cigpKSwKKyAgICBUUkFDS19JRCAgICAgICAgICAgICAgICAoInRpZCIsCQkgICAgICAgICAgICBN dXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9OT1RfU1RPUkVEX05PVF9BTkFMWVpFRF9OT19OT1JN UywgbmV3IEtleXdvcmRBbmFseXplcigpKSwKICAgICBSRUNPUkRJTkdfU1RPUkUJCSAgICAgKCJy ZWNvcmRpbmdzdG9yZSIsICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1Rf SU5ERVhFRCksCiAKIAoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21h aW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1JlbGVhc2VJbmRleC5qYXZhCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcv bXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1JlbGVhc2VJbmRleC5qYXZhCTIwMTMtMDUtMDIgMjA6 Mzg6MDUgVVRDIChyZXYgMTM2NzcpCisrKyBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9t YWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9SZWxlYXNlSW5kZXguamF2YQky MDEzLTA1LTA4IDE2OjA5OjI3IFVUQyAocmV2IDEzNjc4KQpAQCAtNjQ2LDggKzY0Niw4IEBACiAg ICAgICAgIH0KICAgICAgICAgYnVpbGRDbG9jay5zdXNwZW5kKCk7CiAgICAgICAgIHN0b3JlQ2xv Y2sucmVzdW1lKCk7Ci0gICAgICAgIFN0cmluZyBqc29uID0gTU1EU2VyaWFsaXplci5zZXJpYWxp emUocmVsZWFzZSk7Ci0gICAgICAgIGRvYy5hZGRGaWVsZChSZWxlYXNlSW5kZXhGaWVsZC5SRUxF QVNFX1NUT1JFLCBqc29uKTsKKyAgICAgICAgU3RyaW5nIHN0b3JlID0gTU1EU2VyaWFsaXplci5z ZXJpYWxpemUocmVsZWFzZSk7CisgICAgICAgIGRvYy5hZGRGaWVsZChSZWxlYXNlSW5kZXhGaWVs ZC5SRUxFQVNFX1NUT1JFLCBzdG9yZSk7CiAgICAgICAgIHN0b3JlQ2xvY2suc3VzcGVuZCgpOwog ICAgICAgICByZXR1cm4gZG9jLmdldEx1Y2VuZURvY3VtZW50KCk7CiAgICAgfQoKTW9kaWZpZWQ6 IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnov c2VhcmNoL2luZGV4L0FydGlzdEluZGV4VGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9z ZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2lu ZGV4L0FydGlzdEluZGV4VGVzdC5qYXZhCTIwMTMtMDUtMDIgMjA6Mzg6MDUgVVRDIChyZXYgMTM2 NzcpCisrKyBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy90ZXN0L2phdmEvb3JnL211c2lj YnJhaW56L3NlYXJjaC9pbmRleC9BcnRpc3RJbmRleFRlc3QuamF2YQkyMDEzLTA1LTA4IDE2OjA5 OjI3IFVUQyAocmV2IDEzNjc4KQpAQCAtNiw2ICs2LDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLmx1 Y2VuZS5pbmRleC5JbmRleFdyaXRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zdG9yZS5S QU1EaXJlY3Rvcnk7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLm11c2ljYnJh aW56Lm1tZDIuQXJ0aXN0OworaW1wb3J0IG9yZy5tdXNpY2JyYWluei5tbWQyLlJlbGVhc2U7CiAK IGltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CiAKQEAgLTEyMywyMCArMTI1LDEzIEBACiAgICAg ICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7CiAgICAgICAgICAg ICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFs cygwLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQUxJQVMuZ2V0TmFtZSgpKS5sZW5n dGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5k ZXhGaWVsZC5BUlRJU1QuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1 YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0TmFtZSgp KS5sZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0 aXN0SW5kZXhGaWVsZC5TT1JUTkFNRS5nZXROYW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBh c3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLkJFR0lOLmdldE5h bWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBkb2MuZ2V0RmllbGRz KEFydGlzdEluZGV4RmllbGQuRU5ELmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVC5nZXRO YW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxk cyhBcnRpc3RJbmRleEZpZWxkLlRZUEUuZ2V0TmFtZSgpKS5sZW5ndGgpOwotCi0gICAgICAgICAg ICBhc3NlcnRFcXVhbHMoIkZhcm1pbmcgSW5jaWRlbnQiLCBkb2MuZ2V0RmllbGQoQXJ0aXN0SW5k ZXhGaWVsZC5BUlRJU1QuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdl dEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkuc3RyaW5nVmFsdWUo KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhcm1pbmcgSW5jaWRlbnQiLCBkb2MuZ2V0 RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkp OwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxOTk5LTA0IiwgZG9jLmdldEZpZWxkKEFydGlz dEluZGV4RmllbGQuQkVHSU4uZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgICAg IGFzc2VydEVxdWFscygiR3JvdXAiLCBkb2MuZ2V0RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBF LmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBjaGVja1Rlcm0oaXIsIEFy dGlzdEluZGV4RmllbGQuQVJUSVNULCAiZmFybWluZyIpOworICAgICAgICAgICAgY2hlY2tUZXJt WChpciwgQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QsICJpbmNpZGVudCIsMSk7CisgICAgICAgICAg ICBjaGVja1Rlcm0oaXIsIEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELCAiNDMwMmUyNjQtMWNm MC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7CisgICAgICAgICAgICBjaGVja1Rlcm0oaXIsIEFy dGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJmYXJtaW5nIik7CisgICAgICAgICAgICBjaGVja1Rl cm1YKGlyLCBBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1FLCAiaW5jaWRlbnQiLCAxKTsKKyAgICAg ICAgICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTiwgIjE5OTktMDQiKTsK KyAgICAgICAgICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAiZ3JvdXAi KTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogCkBAIC0xNTIsOSArMTQ3LDcgQEAK ICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3RvcnlSZWFkZXIub3BlbihyYW1EaXIpOwog ICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsKICAgICAgICAgewotICAgICAg ICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0gICAgICAgICAgICBhc3NlcnRF cXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLlRZUEUuZ2V0TmFtZSgpKS5s ZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJHcm91cCIsIGRvYy5nZXRGaWVsZChB cnRpc3RJbmRleEZpZWxkLlRZUEUuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAg ICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAiZ3JvdXAiKTsKICAgICAg ICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTE2OSw5ICsxNjIsOSBAQAogICAg ICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURpcik7CiAgICAg ICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7Ci0gICAgICAgICAg ICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFs cygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVC5nZXROYW1lKCkpLmxl bmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImEgY29tbWVudCIsIGRvYy5nZXRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKKyAg ICAgICAgICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULCAiYSIpOwor ICAgICAgICAgICAgY2hlY2tUZXJtWChpciwgQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULCAiY29t bWVudCIsIDEpOworCiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9CkBAIC0x ODYsOSArMTc5LDcgQEAKICAgICAgICAgICAgIEluZGV4UmVhZGVyIGlyID0gRGlyZWN0b3J5UmVh ZGVyLm9wZW4ocmFtRGlyKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2Nz KCkpOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IGlyLmRv Y3VtZW50KDEpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRz KEFydGlzdEluZGV4RmllbGQuQ09VTlRSWS5nZXROYW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAg ICAgICAgYXNzZXJ0RXF1YWxzKCJhZiIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNP VU5UUlkuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBjaGVja1Rl cm0oaXIsIEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgImFmIik7CiAgICAgICAgICAgICB9CiAg ICAgICAgICAgICBpci5jbG9zZSgpOwogICAgICAgICB9CkBAIC0yMDQsOSArMTk1LDggQEAKICAg ICAgICAgICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURp cik7CiAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGlyLm51bURvY3MoKSk7CiAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjaGVja1Rlcm0oaXIsIEFydGlzdElu ZGV4RmllbGQuSVBJLCAiMTAwMDEiKTsKICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQgZG9j ID0gaXIuZG9jdW1lbnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBk b2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuSVBJLmdldE5hbWUoKSkubGVuZ3RoKTsKLSAg ICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxMDAwMSIsIGRvYy5nZXRGaWVsZChBcnRp c3RJbmRleEZpZWxkLklQSS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwogICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICBpci5jbG9zZSgpOwogICAgICAgICAgICAgfQpAQCAtMjIx LDkgKzIxMSw3IEBACiAgICAgICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRl ci5vcGVuKHJhbURpcik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygp KTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1 bWVudCgxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhB cnRpc3RJbmRleEZpZWxkLkNPVU5UUlkuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAg ICAgIGFzc2VydEVxdWFscygidW5rbm93biIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxk LkNPVU5UUlkuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBjaGVj a1Rlcm0oaXIsIEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgInVua25vd24iKTsKICAgICAgICAg ICAgIH0KICAgICAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTIzOCw5ICsyMjYs NyBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURp cik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7Ci0g ICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuR0VOREVSLmdldE5h bWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibWFsZSIsIGRvYy5nZXRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRFUi5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwor ICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkdFTkRFUiwgIm1hbGUi KTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTI1NSw5ICsyNDEs NyBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURp cik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7Ci0g ICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuR0VOREVSLmdldE5h bWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygidW5rbm93biIsIGRvYy5n ZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRFUi5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkp OworICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkdFTkRFUiwgInVu a25vd24iKTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTI5NSwy MiArMjc5LDggQEAKICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3RvcnlSZWFkZXIub3Bl bihyYW1EaXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsKICAgICAg ICAgewotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0gICAgICAg ICAgICBhc3NlcnRFcXVhbHMoNCwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLkFMSUFT LmdldE5hbWUoKSkubGVuZ3RoKTsgLy9hbGlhc2VzIGFyZSBzZWFyY2hhYmxlIGJ1dCBub3Qgc3Rv cmVkCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRl eEZpZWxkLkFSVElTVC5nZXROYW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVh bHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkp Lmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRp c3RJbmRleEZpZWxkLlNPUlROQU1FLmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQkVHSU4uZ2V0TmFt ZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMo QXJ0aXN0SW5kZXhGaWVsZC5FTkQuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAgYXNz ZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULmdldE5h bWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRz KEFydGlzdEluZGV4RmllbGQuVFlQRS5nZXROYW1lKCkpLmxlbmd0aCk7CisgICAgICAgICAgICBj aGVja1Rlcm0oaXIsIEFydGlzdEluZGV4RmllbGQuQUxJQVMsICJhbmQiKTsKIAotICAgICAgICAg ICAgYXNzZXJ0RXF1YWxzKCJFY2hvICYgVGhlIEJ1bm55bWVuIiwgZG9jLmdldEZpZWxkKEFydGlz dEluZGV4RmllbGQuQVJUSVNULmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgICAg ICBhc3NlcnRFcXVhbHMoImNjZDQ4NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIsIGRv Yy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpLnN0cmluZ1Zh bHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJFY2hvICYgVGhlIEJ1bm55bWVuIiwg ZG9jLmdldEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5BTUUuZ2V0TmFtZSgpKS5zdHJpbmdW YWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiMTk3OCIsIGRvYy5nZXRGaWVsZChB cnRpc3RJbmRleEZpZWxkLkJFR0lOLmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAg ICAgICBhc3NlcnRFcXVhbHMoIkdyb3VwIiwgZG9jLmdldEZpZWxkKEFydGlzdEluZGV4RmllbGQu VFlQRS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxz KCJhIGNvbW1lbnQiLCBkb2MuZ2V0RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULmdldE5h bWUoKSkuc3RyaW5nVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAg ICB9CkBAIC0zMzAsOSArMzAwLDcgQEAKICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3Rv cnlSZWFkZXIub3BlbihyYW1EaXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9j cygpKTsKICAgICAgICAgewotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQo MSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRl eEZpZWxkLkJFR0lOLmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFs cygiMTk3OCIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkJFR0lOLmdldE5hbWUoKSku c3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBjaGVja1Rlcm0oaXIsIEFydGlzdEluZGV4Rmll bGQuQkVHSU4sICIxOTc4Iik7CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9 CkBAIC0zNTIsOSArMzIwLDcgQEAKICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3RvcnlS ZWFkZXIub3BlbihyYW1EaXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygp KTsKICAgICAgICAgewotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7 Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZp ZWxkLkVOREVELmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygi dHJ1ZSIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkVOREVELmdldE5hbWUoKSkuc3Ry aW5nVmFsdWUoKSk7CisgICAgICAgICAgICBjaGVja1Rlcm0oaXIsIEFydGlzdEluZGV4RmllbGQu RU5ERUQsICJ0cnVlIik7CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9CkBA IC0zNzUsOSArMzQxLDcgQEAKICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3RvcnlSZWFk ZXIub3BlbihyYW1EaXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsK ICAgICAgICAgewotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0g ICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxk LkVOREVELmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZmFs c2UiLCBkb2MuZ2V0RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5FTkRFRC5nZXROYW1lKCkpLnN0cmlu Z1ZhbHVlKCkpOworICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkVO REVELCAiZmFsc2UiKTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAg LTM5OSw5ICszNjMsNyBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRl ci5vcGVuKHJhbURpcik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwog ICAgICAgICB7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAg ICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQu RU5ELmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiMTk5NSIs IGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkVORC5nZXROYW1lKCkpLnN0cmluZ1ZhbHVl KCkpOworICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkVORCwgIjE5 OTUiKTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTQyMSw5ICsz ODMsNyBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJh bURpcik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7 Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAgICAgICAg IGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuVFlQRS5nZXRO YW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlBlcnNvbiIsIGRvYy5n ZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsK KyAgICAgICAgICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAicGVyc29u Iik7CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9CkBAIC00NDQsOSArNDA0 LDcgQEAKICAgICAgICAgSW5kZXhSZWFkZXIgaXIgPSBEaXJlY3RvcnlSZWFkZXIub3BlbihyYW1E aXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsKICAgICAgICAgewot ICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0gICAgICAgICAgICBh c3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQuZ2V0 TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCItIiwgZG9jLmdldEZp ZWxkKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVC5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwor ICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQsICItIik7 CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9CkBAIC00ODksMTUgKzQ0Nywx MCBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURp cik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7CisK KwogICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7CiAgICAgICAgICAg ICBhc3NlcnRFcXVhbHMoMCwgZG9jLmdldEZpZWxkcyhBcnRpc3RJbmRleEZpZWxkLkVORC5nZXRO YW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9jLmdldEZpZWxk cyhBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAg ICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLmdl dE5hbWUoKSkubGVuZ3RoKTsKLQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJTaW9iaGFuIEx5 bmNoIiwgZG9jLmdldEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNULmdldE5hbWUoKSkuc3Ry aW5nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFlODcwN2I2LTY4NGMtNGQ0 YS05NWM1LWQxMTc5NzBhNmRmZSIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElT VF9JRC5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxz KCJMeW5jaCwgU2lvYmhhbiIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1F LmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlBl cnNvbiIsIGRvYy5nZXRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUuZ2V0TmFtZSgpKS5zdHJp bmdWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTUx NywxMSArNDcwLDEyIEBACiAgICAgICAgIEluZGV4UmVhZGVyIGlyID0gRGlyZWN0b3J5UmVhZGVy Lm9wZW4ocmFtRGlyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGlyLm51bURvY3MoKSk7CiAg ICAgICAgIHsKLSAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IGlyLmRvY3VtZW50KDEpOwotICAg ICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1QuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRv Yy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRS5nZXROYW1lKCkpLmxlbmd0aCk7 Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlNpb2JoYW4gTHluY2giLCBkb2MuZ2V0RmllbGQo QXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKLSAgICAg ICAgICAgIGFzc2VydEVxdWFscygiTHluY2gsIFNpb2JoYW4iLCBkb2MuZ2V0RmllbGQoQXJ0aXN0 SW5kZXhGaWVsZC5TT1JUTkFNRS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOworICAgICAgICAg ICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgImx5bmNoIik7CisgICAg ICAgICAgICBjaGVja1Rlcm1YKGlyLCBBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgInNpb2JoYW4i LCAxKTsKKworICAgICAgICAgICAgY2hlY2tUZXJtKGlyLCBBcnRpc3RJbmRleEZpZWxkLlNPUlRO QU1FLCAibHluY2giKTsKKyAgICAgICAgICAgIGNoZWNrVGVybVgoaXIsIEFydGlzdEluZGV4Rmll bGQuU09SVE5BTUUsICJzaW9iaGFuIiwxKTsKKwogICAgICAgICB9CiAgICAgICAgIGlyLmNsb3Nl KCk7CiAgICAgfQpAQCAtNTQyLDEyICs0OTYsNyBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9 IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURpcik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBp ci5udW1Eb2NzKCkpOwogICAgICAgICB7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5k b2N1bWVudCgxKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFy dGlzdEluZGV4RmllbGQuQVJUSVNULmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFz c2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuVEFHLmdldE5hbWUo KSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiR290aCIsIGRvYy5nZXRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLlRBRy5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAg ICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5UQUdD T1VOVC5nZXROYW1lKCkpLmxlbmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjEwIiwg ZG9jLmdldEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHQ09VTlQuZ2V0TmFtZSgpKS5zdHJpbmdW YWx1ZSgpKTsKKyAgICAgICAgICAgIGNoZWNrVGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5UQUcs ICJnb3RoIik7CiAgICAgICAgIH0KICAgICAgICAgaXIuY2xvc2UoKTsKICAgICB9CkBAIC01Njcs MTEgKzUxNiwxMCBAQAogICAgICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5v cGVuKHJhbURpcik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAg ICAgICB7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAg ICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQVJU SVNULmdldE5hbWUoKSkubGVuZ3RoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2Mu Z2V0RmllbGRzKEFydGlzdEluZGV4RmllbGQuQUxJQVMuZ2V0TmFtZSgpKS5sZW5ndGgpOwotICAg ICAgICAgICAgYXNzZXJ0RXF1YWxzKCJTIEx5bmNoIiwgZG9jLmdldEZpZWxkKEFydGlzdEluZGV4 RmllbGQuQUxJQVMuZ2V0TmFtZSgpKS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNoZWNr VGVybShpciwgQXJ0aXN0SW5kZXhGaWVsZC5BTElBUywgImx5bmNoIik7CisgICAgICAgICAgICBj aGVja1Rlcm1YKGlyLCBBcnRpc3RJbmRleEZpZWxkLkFMSUFTLCAicyIsIDEpOwogCisKICAgICAg ICAgfQogICAgICAgICBpci5jbG9zZSgpOwogICAgIH0KQEAgLTU5MSw4ICs1MzksOCBAQAogICAg ICAgICBJbmRleFJlYWRlciBpciA9IERpcmVjdG9yeVJlYWRlci5vcGVuKHJhbURpcik7CiAgICAg ICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAgICAgICB7CisKICAgICAgICAg ICAgIERvY3VtZW50IGRvYyA9IGlyLmRvY3VtZW50KDEpOwotICAgICAgICAgICAgYXNzZXJ0RXF1 YWxzKDEsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QuZ2V0TmFtZSgpKS5s ZW5ndGgpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGRvYy5nZXRGaWVsZHMoQXJ0aXN0 SW5kZXhGaWVsZC5BTElBUy5nZXROYW1lKCkpLmxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAg aXIuY2xvc2UoKTsKQEAgLTYxNyw0ICs1NjUsMzAgQEAKICAgICAgICAgICAgIGFzc2VydEVxdWFs cygiMTIiLCBkb2MuZ2V0RmllbGQoTWV0YUluZGV4RmllbGQuU0NIRU1BX1NFUVVFTkNFLmdldE5h bWUoKSkuc3RyaW5nVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CisKKworICAgIC8qKgorICAg ICAqIEB0aHJvd3MgRXhjZXB0aW9uIGV4Y2VwdGlvbgorICAgICAqLworICAgIEBUZXN0CisgICAg cHVibGljIHZvaWQgdGVzdFN0b3JlZEFydGlzdCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAg ICAgIGFkZEFydGlzdE9uZSgpOworICAgICAgICBSQU1EaXJlY3RvcnkgcmFtRGlyID0gbmV3IFJB TURpcmVjdG9yeSgpOworICAgICAgICBjcmVhdGVJbmRleChyYW1EaXIpOworCisgICAgICAgIElu ZGV4UmVhZGVyIGlyID0gRGlyZWN0b3J5UmVhZGVyLm9wZW4ocmFtRGlyKTsKKyAgICAgICAgYXNz ZXJ0RXF1YWxzKDIsIGlyLm51bURvY3MoKSk7CisgICAgICAgIHsKKworICAgICAgICAgICAgRG9j dW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7CisgICAgICAgICAgICBBcnRpc3QgYXJ0aXN0ID0g KEFydGlzdCkgTU1EU2VyaWFsaXplci51bnNlcmlhbGl6ZShkb2MuZ2V0KEFydGlzdEluZGV4Rmll bGQuQVJUSVNUX1NUT1JFLmdldE5hbWUoKSksIEFydGlzdC5jbGFzcyk7CisgICAgICAgICAgICBh c3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGFydGlz dC5nZXRJZCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFybWluZyBJbmNpZGVudCIs IGFydGlzdC5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJBRiIsIGFydGlz dC5nZXRDb3VudHJ5KCkpOworCisKKyAgICAgICAgfQorICAgICAgICBpci5jbG9zZSgpOworICAg IH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpNb2RpZmllZDogc2VhcmNoX3NlcnZl ci90cnVuay9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2 bGV0L21tZDEvQXJ0aXN0TW1kMVhtbFdyaXRlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9z ZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gv c2VydmxldC9tbWQxL0FydGlzdE1tZDFYbWxXcml0ZXIuamF2YQkyMDEzLTA1LTAyIDIwOjM4OjA1 IFVUQyAocmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy9tYWlu L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L21tZDEvQXJ0aXN0TW1kMVhtbFdy aXRlci5qYXZhCTIwMTMtMDUtMDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC0yOCwxMCAr MjgsMTMgQEAKIAogcGFja2FnZSBvcmcubXVzaWNicmFpbnouc2VhcmNoLnNlcnZsZXQubW1kMTsK IAoraW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuU3RyaW5nczsKIGltcG9ydCBjb20uanRo aW5rLmJyYWluei5tbWQuKjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZy5TdHJpbmdV dGlsczsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLk1iRG9jdW1lbnQ7CiBpbXBvcnQg b3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5BcnRpc3RJbmRleEZpZWxkOworaW1wb3J0IG9y Zy5tdXNpY2JyYWluei5zZWFyY2guaW5kZXguTU1EU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcubXVz aWNicmFpbnouc2VhcmNoLmluZGV4LlJlbGVhc2VJbmRleEZpZWxkOwogaW1wb3J0IG9yZy5tdXNp Y2JyYWluei5zZWFyY2guc2VydmxldC5SZXN1bHQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNl YXJjaC5zZXJ2bGV0LlJlc3VsdHM7CiAKQEAgLTUzLDQ5ICs1Niw0MCBAQAogICAgICAgICAgICAg TWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7CiAgICAgICAgICAgICBBcnRpc3QgYXJ0 aXN0ID0gb2YuY3JlYXRlQXJ0aXN0KCk7CiAKLSAgICAgICAgICAgIGFydGlzdC5zZXRJZChkb2Mu Z2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBh cnR5cGUgPSBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuVFlQRSk7Ci0gICAgICAgICAgICBpZiAo aXNOb3RVbmtub3duKGFydHlwZSkpIHsKLSAgICAgICAgICAgICAgICBhcnRpc3Quc2V0VHlwZShT dHJpbmdVdGlscy5jYXBpdGFsaXplKGFydHlwZSkpOwotICAgICAgICAgICAgfQotCiAgICAgICAg ICAgICByZXN1bHQuc2V0Tm9ybWFsaXplZFNjb3JlKHJlc3VsdHMuZ2V0TWF4U2NvcmUoKSk7CiAg ICAgICAgICAgICBhcnRpc3QuZ2V0T3RoZXJBdHRyaWJ1dGVzKCkucHV0KGdldFNjb3JlKCksIFN0 cmluZy52YWx1ZU9mKHJlc3VsdC5nZXROb3JtYWxpemVkU2NvcmUoKSkpOwogCi0gICAgICAgICAg ICBTdHJpbmcgbmFtZSA9IGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QpOwotICAgICAg ICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGFydGlzdC5zZXROYW1l KG5hbWUpOworICAgICAgICAgICAgb3JnLm11c2ljYnJhaW56Lm1tZDIuQXJ0aXN0IGFydGlzdHYy CisgICAgICAgICAgICAgICAgICAgID0gKG9yZy5tdXNpY2JyYWluei5tbWQyLkFydGlzdCkgTU1E U2VyaWFsaXplci51bnNlcmlhbGl6ZShkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NU T1JFKSwgb3JnLm11c2ljYnJhaW56Lm1tZDIuQXJ0aXN0LmNsYXNzKTsKKyAgICAgICAgICAgIGFy dGlzdC5zZXRJZChhcnRpc3R2Mi5nZXRJZCgpKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRUeXBl KFN0cmluZ1V0aWxzLmNhcGl0YWxpemUoYXJ0aXN0djIuZ2V0VHlwZSgpKSk7CisgICAgICAgICAg ICBhcnRpc3Quc2V0TmFtZShhcnRpc3R2Mi5nZXROYW1lKCkpOwogCisgICAgICAgICAgICBpZigh U3RyaW5ncy5pc051bGxPckVtcHR5KGFydGlzdHYyLmdldFNvcnROYW1lKCkpKSB7CisgICAgICAg ICAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKGFydGlzdHYyLmdldFNvcnROYW1lKCkpOwogICAg ICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgc29ydG5hbWUgPSBkb2MuZ2V0KEFydGlz dEluZGV4RmllbGQuU09SVE5BTUUpOwotICAgICAgICAgICAgaWYgKHNvcnRuYW1lICE9IG51bGwp IHsKLSAgICAgICAgICAgICAgICBhcnRpc3Quc2V0U29ydE5hbWUoc29ydG5hbWUpOwotCisgICAg ICAgICAgICBpZighU3RyaW5ncy5pc051bGxPckVtcHR5KGFydGlzdHYyLmdldERpc2FtYmlndWF0 aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNldERpc2FtYmlndWF0aW9uKGFydGlz dHYyLmdldERpc2FtYmlndWF0aW9uKCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBT dHJpbmcgYmVnaW4gPSBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQkVHSU4pOwotICAgICAgICAg ICAgU3RyaW5nIGVuZCA9IGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5FTkQpOwotICAgICAgICAg ICAgaWYgKGJlZ2luICE9IG51bGwgfHwgZW5kICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBM aWZlU3BhbiBsaWZlc3BhbiA9IG9mLmNyZWF0ZUxpZmVTcGFuKCk7Ci0gICAgICAgICAgICAgICAg aWYgKGJlZ2luICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlmZXNwYW4uc2V0QmVn aW4oYmVnaW4pOworICAgICAgICAgICAgaWYoYXJ0aXN0djIuZ2V0TGlmZVNwYW4oKSE9bnVsbCkg eworICAgICAgICAgICAgICAgIFN0cmluZyBiZWdpbiA9IGFydGlzdHYyLmdldExpZmVTcGFuKCku Z2V0QmVnaW4oKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZW5kID0gYXJ0aXN0djIuZ2V0TGlm ZVNwYW4oKS5nZXRFbmQoKTsKKyAgICAgICAgICAgICAgICBpZiAoYmVnaW4gIT0gbnVsbCB8fCBl bmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBMaWZlU3BhbiBsaWZlc3BhbiA9IG9m LmNyZWF0ZUxpZmVTcGFuKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbiAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaWZlc3Bhbi5zZXRCZWdpbihiZWdpbik7CiAK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGVuZCAhPSBudWxsKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGxpZmVzcGFuLnNldEVuZChlbmQpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgIT0gbnVsbCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgbGlmZXNwYW4uc2V0RW5kKGVuZCk7CiAKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgYXJ0aXN0LnNldExpZmVTcGFuKGxpZmVzcGFuKTsKLQorICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFydGlzdC5zZXRMaWZlU3Bhbihs aWZlc3Bhbik7CisgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg IFN0cmluZyBjb21tZW50ID0gZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQpOwotICAg ICAgICAgICAgaWYgKGlzTm90Tm9WYWx1ZShjb21tZW50KSkgewotICAgICAgICAgICAgICAgIGFy dGlzdC5zZXREaXNhbWJpZ3VhdGlvbihjb21tZW50KTsKLSAgICAgICAgICAgIH0KLQogICAgICAg ICAgICAgYXJ0aXN0TGlzdC5nZXRBcnRpc3QoKS5hZGQoYXJ0aXN0KTsKIAogICAgICAgICB9CgpN b2RpZmllZDogc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL211 c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L21tZDIvQXJ0aXN0V3JpdGVyLmphdmEKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL211c2lj YnJhaW56L3NlYXJjaC9zZXJ2bGV0L21tZDIvQXJ0aXN0V3JpdGVyLmphdmEJMjAxMy0wNS0wMiAy MDozODowNSBVVEMgKHJldiAxMzY3NykKKysrIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9z cmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9tbWQyL0FydGlzdFdy aXRlci5qYXZhCTIwMTMtMDUtMDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC0zMiw2ICsz Miw4IEBACiBpbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuKjsKIGltcG9ydCBvcmcubXVzaWNi cmFpbnouc2VhcmNoLk1iRG9jdW1lbnQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5p bmRleC5BcnRpc3RJbmRleEZpZWxkOworaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guaW5k ZXguTU1EU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4LlJl bGVhc2VJbmRleEZpZWxkOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guc2VydmxldC5S ZXN1bHQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5zZXJ2bGV0LlJlc3VsdHM7CiAK QEAgLTg5LDEwOCArOTEsOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHdyaXRlKExpc3Qg bGlzdCwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgewotICAgICAgICBP YmplY3RGYWN0b3J5IG9mID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKLQogICAgICAgICBNYkRvY3Vt ZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICAgICAgQXJ0aXN0IGFydGlzdCA9IG9mLmNy ZWF0ZUFydGlzdCgpOwotCi0gICAgICAgIGFydGlzdC5zZXRJZChkb2MuZ2V0KEFydGlzdEluZGV4 RmllbGQuQVJUSVNUX0lEKSk7CisgICAgICAgIEFydGlzdCBhcnRpc3QgPSAoQXJ0aXN0KSBNTURT ZXJpYWxpemVyLnVuc2VyaWFsaXplKGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfU1RP UkUpLCBBcnRpc3QuY2xhc3MpOwogICAgICAgICBhcnRpc3Quc2V0U2NvcmUoU3RyaW5nLnZhbHVl T2YocmVzdWx0LmdldE5vcm1hbGl6ZWRTY29yZSgpKSk7Ci0KLSAgICAgICAgU3RyaW5nIGFydHlw ZSA9IGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFKTsKLSAgICAgICAgaWYgKGlzTm90VW5r bm93bihhcnR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnRpc3Quc2V0VHlwZShhcnR5 cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGdlbmRlciA9IGRvYy5nZXQoQXJ0aXN0 SW5kZXhGaWVsZC5HRU5ERVIpOwotICAgICAgICBpZiAoaXNOb3RVbmtub3duKGdlbmRlcikpCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGFydGlzdC5zZXRHZW5kZXIoZ2VuZGVyKTsKLSAgICAgICAg fQotCi0gICAgICAgIFN0cmluZyBjb3VudHJ5ID0gZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkNP VU5UUlkpOwotICAgICAgICBpZiAoaXNOb3RVbmtub3duKGNvdW50cnkpKQotICAgICAgICB7Ci0g ICAgICAgICAgICBhcnRpc3Quc2V0Q291bnRyeShjb3VudHJ5LnRvVXBwZXJDYXNlKExvY2FsZS5V UykpOwotCi0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbmFtZSA9IGRvYy5nZXQoQXJ0aXN0 SW5kZXhGaWVsZC5BUlRJU1QpOwotICAgICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgICB7 Ci0gICAgICAgICAgICBhcnRpc3Quc2V0TmFtZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAg IFN0cmluZ1tdIGlwaUNvZGVzID0gZG9jLmdldFZhbHVlcyhBcnRpc3RJbmRleEZpZWxkLklQSSk7 Ci0gICAgICAgIGlmIChpcGlDb2Rlcy5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAg ICBJcGlMaXN0IGlwaUxpc3QgPSBvZi5jcmVhdGVJcGlMaXN0KCk7Ci0gICAgICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGlwaUNvZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIGlwaUxpc3QuZ2V0SXBpKCkuYWRkKGlwaUNvZGVzW2ldKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGFydGlzdC5zZXRJcGlMaXN0KGlwaUxpc3QpOwotICAgICAgICB9 Ci0KLSAgICAgICAgU3RyaW5nIHNvcnRuYW1lID0gZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLlNP UlROQU1FKTsKLSAgICAgICAgaWYgKHNvcnRuYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGFydGlzdC5zZXRTb3J0TmFtZShzb3J0bmFtZSk7Ci0KLSAgICAgICAgfQotCi0gICAg ICAgIFN0cmluZyBiZWdpbiA9IGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTik7Ci0gICAg ICAgIFN0cmluZyBlbmQgPSBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuRU5EKTsKLSAgICAgICAg U3RyaW5nIGVuZGVkID0gZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkVOREVEKTsKLQotICAgICAg ICBMaWZlU3BhbiBsaWZlc3BhbiA9IG9mLmNyZWF0ZUxpZmVTcGFuKCk7Ci0gICAgICAgIGFydGlz dC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7Ci0KLSAgICAgICAgaWYgKGJlZ2luICE9IG51bGwpCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGxpZmVzcGFuLnNldEJlZ2luKGJlZ2luKTsKLSAgICAgICAg fQotCi0gICAgICAgIGlmIChlbmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbGlm ZXNwYW4uc2V0RW5kKGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbGlmZXNwYW4uc2V0RW5kZWQo ZW5kZWQpOwotCi0gICAgICAgIFN0cmluZyBjb21tZW50ID0gZG9jLmdldChBcnRpc3RJbmRleEZp ZWxkLkNPTU1FTlQpOwotICAgICAgICBpZiAoaXNOb3ROb1ZhbHVlKGNvbW1lbnQpKQotICAgICAg ICB7Ci0gICAgICAgICAgICBhcnRpc3Quc2V0RGlzYW1iaWd1YXRpb24oY29tbWVudCk7Ci0gICAg ICAgIH0KLQotICAgICAgICBTdHJpbmdbXSBhbGlhc2VzID0gZG9jLmdldFZhbHVlcyhBcnRpc3RJ bmRleEZpZWxkLkFMSUFTKTsKLSAgICAgICAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkKLSAgICAg ICAgewotICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9mLmNyZWF0ZUFsaWFzTGlz dCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsr KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFsaWFzIGFsaWFzID0gb2YuY3JlYXRl QWxpYXMoKTsKLSAgICAgICAgICAgICAgICBhbGlhcy5zZXRDb250ZW50KGFsaWFzZXNbaV0pOwot ICAgICAgICAgICAgICAgIGFsaWFzTGlzdC5nZXRBbGlhcygpLmFkZChhbGlhcyk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBhcnRpc3Quc2V0QWxpYXNMaXN0KGFsaWFzTGlzdCk7Ci0gICAg ICAgIH0KLQotICAgICAgICBTdHJpbmdbXSB0YWdzID0gZG9jLmdldFZhbHVlcyhBcnRpc3RJbmRl eEZpZWxkLlRBRyk7Ci0gICAgICAgIFN0cmluZ1tdIHRhZ0NvdW50cyA9IGRvYy5nZXRWYWx1ZXMo QXJ0aXN0SW5kZXhGaWVsZC5UQUdDT1VOVCk7Ci0gICAgICAgIGlmICh0YWdzLmxlbmd0aCA+IDAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRhZ0xpc3QgdGFnTGlzdCA9IG9mLmNyZWF0ZVRhZ0xp c3QoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUYWcgdGFnID0gb2YuY3JlYXRlVGFnKCk7 Ci0gICAgICAgICAgICAgICAgdGFnLnNldE5hbWUodGFnc1tpXSk7Ci0gICAgICAgICAgICAgICAg dGFnLnNldENvdW50KG5ldyBCaWdJbnRlZ2VyKHRhZ0NvdW50c1tpXSkpOwotICAgICAgICAgICAg ICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBhcnRpc3Quc2V0VGFnTGlzdCh0YWdMaXN0KTsKLSAgICAgICAgfQogICAgICAgICBsaXN0LmFk ZChhcnRpc3QpOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpNb2RpZmll ZDogc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJh aW56L3NlYXJjaC9zZXJ2bGV0L0ZpbmRBcnRpc3RUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Vh cmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3Nl YXJjaC9zZXJ2bGV0L0ZpbmRBcnRpc3RUZXN0LmphdmEJMjAxMy0wNS0wMiAyMDozODowNSBVVEMg KHJldiAxMzY3NykKKysrIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvdGVzdC9qYXZh L29yZy9tdXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9GaW5kQXJ0aXN0VGVzdC5qYXZhCTIwMTMt MDUtMDggMTY6MDk6MjcgVVRDIChyZXYgMTM2NzgpCkBAIC03LDYgKzcsNyBAQAogCiBpbXBvcnQg amF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9y dCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIAogaW1wb3J0 IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLkFuYWx5emVyOwpAQCAtMTYsNTkyICsxNyw2MTQg QEAKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zdG9yZS5SQU1EaXJlY3Rvcnk7CiBpbXBvcnQg b3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcubXVz aWNicmFpbnoubW1kMi4qOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guTHVjZW5lVmVy c2lvbjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLk1iRG9jdW1lbnQ7CiBpbXBvcnQg b3JnLm11c2ljYnJhaW56LnNlYXJjaC5hbmFseXNpcy5NdXNpY2JyYWluelNpbWlsYXJpdHk7Ci1p bXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5BcnRpc3RJbmRleEZpZWxkOwotaW1w b3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guaW5kZXguQXJ0aXN0VHlwZTsKLWltcG9ydCBvcmcu bXVzaWNicmFpbnouc2VhcmNoLmluZGV4LkRhdGFiYXNlSW5kZXg7Ci1pbXBvcnQgb3JnLm11c2lj YnJhaW56LnNlYXJjaC5pbmRleC5NZXRhSW5kZXhGaWVsZDsKK2ltcG9ydCBvcmcubXVzaWNicmFp bnouc2VhcmNoLmluZGV4Lio7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5zZXJ2bGV0 Lm1tZDEuQXJ0aXN0TW1kMVhtbFdyaXRlcjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNo LnNlcnZsZXQubW1kMS5NbWQxWG1sV3JpdGVyOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFy Y2guc2VydmxldC5tbWQyLlJlc3VsdHNXcml0ZXI7CisKIC8qKgogICogVGVzdCByZXRyaWV2aW5n IGFydGlzdCBmcm9tIGluZGV4IGFuZCBPdXRwdXR0aW5nIGFzIFhtbAogICovCiBwdWJsaWMgY2xh c3MgRmluZEFydGlzdFRlc3QgewogCi0gIHByaXZhdGUgQWJzdHJhY3RTZWFyY2hTZXJ2ZXIgc3M7 Ci0gIHByaXZhdGUgQWJzdHJhY3REaXNtYXhTZWFyY2hTZXJ2ZXIgc2Q7CisgICAgcHJpdmF0ZSBB YnN0cmFjdFNlYXJjaFNlcnZlciBzczsKKyAgICBwcml2YXRlIEFic3RyYWN0RGlzbWF4U2VhcmNo U2VydmVyIHNkOwogCiAKLSAgQEJlZm9yZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBF eGNlcHRpb24gewotICAgIFJBTURpcmVjdG9yeSByYW1EaXIgPSBuZXcgUkFNRGlyZWN0b3J5KCk7 Ci0gICAgQW5hbHl6ZXIgYW5hbHl6ZXIgPSBEYXRhYmFzZUluZGV4LmdldEFuYWx5emVyKEFydGlz dEluZGV4RmllbGQuY2xhc3MpOwotICAgIEluZGV4V3JpdGVyQ29uZmlnIHdyaXRlckNvbmZpZyA9 IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMdWNlbmVWZXJzaW9uLkxVQ0VORV9WRVJTSU9OLGFuYWx5 emVyKTsKLSAgICB3cml0ZXJDb25maWcuc2V0U2ltaWxhcml0eShuZXcgTXVzaWNicmFpbnpTaW1p bGFyaXR5KCkpOwotICAgIEluZGV4V3JpdGVyIHdyaXRlciA9IG5ldyBJbmRleFdyaXRlcihyYW1E aXIsIHdyaXRlckNvbmZpZyk7CisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkg dGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE9iamVjdEZhY3Rvcnkgb2YgPSBuZXcgT2JqZWN0 RmFjdG9yeSgpOworICAgICAgICBSQU1EaXJlY3RvcnkgcmFtRGlyID0gbmV3IFJBTURpcmVjdG9y eSgpOworICAgICAgICBBbmFseXplciBhbmFseXplciA9IERhdGFiYXNlSW5kZXguZ2V0QW5hbHl6 ZXIoQXJ0aXN0SW5kZXhGaWVsZC5jbGFzcyk7CisgICAgICAgIEluZGV4V3JpdGVyQ29uZmlnIHdy aXRlckNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMdWNlbmVWZXJzaW9uLkxVQ0VORV9W RVJTSU9OLCBhbmFseXplcik7CisgICAgICAgIHdyaXRlckNvbmZpZy5zZXRTaW1pbGFyaXR5KG5l dyBNdXNpY2JyYWluelNpbWlsYXJpdHkoKSk7CisgICAgICAgIEluZGV4V3JpdGVyIHdyaXRlciA9 IG5ldyBJbmRleFdyaXRlcihyYW1EaXIsIHdyaXRlckNvbmZpZyk7CiAKIAotICAgIC8vR2VuZXJh bCBQdXJwb3NlIEFydGlzdAotICAgIHsKLSAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9j dW1lbnQoKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCwg IjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIpOwotICAgICAgZG9jLmFkZEZp ZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNULCAiRmFybWluZyBJbmNpZGVudCIpOwotICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJJbmNpZGVudCwgRmFybWlu ZyIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQkVHSU4sICIxOTk5LTA0 Iik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5FTkRFRCwgInRydWUiKTsK LSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUsICJHcm91cCIpOwotICAg ICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVCwgInRoZSByZWFsIG9uZSIp OwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgIkFGIik7Ci0g ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsICJtYWxlIik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJ0aHJhc2giKTsKLSAgICAgIGRv Yy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiNSIpOwotICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAiZ8O8dGgiKTsKLSAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiMTEiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChB cnRpc3RJbmRleEZpZWxkLklQSSwiMTAwMSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuSVBJLCIxMDAyIik7CisgICAgICAgIC8vR2VuZXJhbCBQdXJwb3NlIEFydGlzdAor ICAgICAgICB7CisgICAgICAgICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7 CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQsICI0 MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKKyAgICAgICAgICAgIGRvYy5h ZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgIkZhcm1pbmcgSW5jaWRlbnQiKTsKKyAg ICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1FLCAiSW5jaWRl bnQsIEZhcm1pbmciKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxk LkJFR0lOLCAiMTk5OS0wNCIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuRU5ERUQsICJ0cnVlIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5k ZXhGaWVsZC5UWVBFLCAiR3JvdXAiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkNPTU1FTlQsICJ0aGUgcmVhbCBvbmUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkNPVU5UUlksICJBRiIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuR0VOREVSLCAibWFsZSIpOworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAidGhyYXNoIik7CisgICAgICAgICAgICBk b2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJnw7x0aCIpOworICAgICAgICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJLCAiMTAwMSIpOworICAgICAgICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJLCAiMTAwMiIpOwogCi0gICAgICB3cml0 ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2VuZURvY3VtZW50KCkpOworICAgICAgICAgICAgQXJ0 aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOworICAgICAgICAgICAgYXJ0aXN0LnNldElk KCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKKyAgICAgICAgICAgIGFy dGlzdC5zZXROYW1lKCJGYXJtaW5nIEluY2lkZW50Iik7CisgICAgICAgICAgICBhcnRpc3Quc2V0 U29ydE5hbWUoIkluY2lkZW50LCBGYXJtaW5nIik7CisgICAgICAgICAgICBMaWZlU3BhbiBsaWZl c3BhbiA9IG9mLmNyZWF0ZUxpZmVTcGFuKCk7CisgICAgICAgICAgICBsaWZlc3Bhbi5zZXRCZWdp bigiMTk5OS0wNCIpOworICAgICAgICAgICAgbGlmZXNwYW4uc2V0RW5kZWQoInRydWUiKTsKKyAg ICAgICAgICAgIGFydGlzdC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7CisgICAgICAgICAgICBhcnRp c3Quc2V0VHlwZSgiR3JvdXAiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXREaXNhbWJpZ3VhdGlv bigidGhlIHJlYWwgb25lIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0Q291bnRyeSgiQUYiKTsK KyAgICAgICAgICAgIGFydGlzdC5zZXRHZW5kZXIoIm1hbGUiKTsKKyAgICAgICAgICAgIFRhZ0xp c3QgdGFnTGlzdCA9IG9mLmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAgICAgIFRhZyB0YWcgPSBv Zi5jcmVhdGVUYWcoKTsKKyAgICAgICAgICAgIHRhZy5zZXROYW1lKCJ0aHJhc2giKTsKKyAgICAg ICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoNSkpOworICAgICAgICAgICAg dGFnTGlzdC5nZXRUYWcoKS5hZGQodGFnKTsKKworICAgICAgICAgICAgdGFnID0gb2YuY3JlYXRl VGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiZ8O8dGgiKTsKKyAgICAgICAgICAgIHRh Zy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpKTsKKyAgICAgICAgICAgIHRhZ0xpc3Qu Z2V0VGFnKCkuYWRkKHRhZyk7CisgICAgICAgICAgICBhcnRpc3Quc2V0VGFnTGlzdCh0YWdMaXN0 KTsKKworICAgICAgICAgICAgSXBpTGlzdCBpcGlMaXN0ID0gb2YuY3JlYXRlSXBpTGlzdCgpOwor ICAgICAgICAgICAgaXBpTGlzdC5nZXRJcGkoKS5hZGQoIjEwMDEiKTsKKyAgICAgICAgICAgIGlw aUxpc3QuZ2V0SXBpKCkuYWRkKCIxMDAyIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0SXBpTGlz dChpcGlMaXN0KTsKKworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu QVJUSVNUX1NUT1JFLCBNTURTZXJpYWxpemVyLnNlcmlhbGl6ZShhcnRpc3QpKTsKKyAgICAgICAg ICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7CisgICAgICAg IH0KKworICAgICAgICAvL0FydGlzdCB3aXRoICYgb24gbmFtZSBhbmQgYWxpYXNlcworICAgICAg ICB7CisgICAgICAgICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7CisgICAg ICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQsICJjY2Q0ODc5 Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgIkVjaG8gJiBUaGUgQnVubnltZW4iKTsKKyAgICAg ICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1FLCAiRWNobyAmIFRo ZSBCdW5ueW1lbiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu QkVHSU4sICIxOTc4Iik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5DT1VOVFJZLCAidW5rbm93biIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuVFlQRSwgQXJ0aXN0VHlwZS5HUk9VUC5nZXROYW1lKCkpOworICAgICAgICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQUxJQVMsICJFY2hvIEFuZCBUaGUgQnVubnlt ZW4iKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFMSUFTLCAi RWNobyAmIFRoZSBCdW5ueW1hbiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuQUxJQVMsICJFY2hvIGFuZCBUaGUgQnVueW1lbiIpOworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQUxJQVMsICJFY2hvICYgVGhlIEJ1bnltZW4iKTsK KworICAgICAgICAgICAgQXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOworICAgICAg ICAgICAgYXJ0aXN0LnNldElkKCJjY2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUi KTsKKworICAgICAgICAgICAgYXJ0aXN0LnNldE5hbWUoIkVjaG8gJiBUaGUgQnVubnltZW4iKTsK KyAgICAgICAgICAgIGFydGlzdC5zZXRTb3J0TmFtZSgiRWNobyAmIFRoZSBCdW5ueW1lbiIpOwor ICAgICAgICAgICAgTGlmZVNwYW4gbGlmZXNwYW4gPSBvZi5jcmVhdGVMaWZlU3BhbigpOworICAg ICAgICAgICAgbGlmZXNwYW4uc2V0QmVnaW4oIjE5NzgiKTsKKyAgICAgICAgICAgIGFydGlzdC5z ZXRMaWZlU3BhbihsaWZlc3Bhbik7CisgICAgICAgICAgICBhcnRpc3Quc2V0VHlwZSgiR3JvdXAi KTsKKworICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9mLmNyZWF0ZUFsaWFzTGlz dCgpOworICAgICAgICAgICAgQWxpYXMgYWxpYXMgPSBvZi5jcmVhdGVBbGlhcygpOworICAgICAg ICAgICAgYWxpYXMuc2V0Q29udGVudCgiRWNobyBBbmQgVGhlIEJ1bm55bWVuIik7CisgICAgICAg ICAgICBhbGlhc0xpc3QuZ2V0QWxpYXMoKS5hZGQoYWxpYXMpOworCisgICAgICAgICAgICBhbGlh cyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAgICAgICBhbGlhcy5zZXRDb250ZW50KCJFY2hv ICYgVGhlIEJ1bm55bWFuIik7CisgICAgICAgICAgICBhbGlhc0xpc3QuZ2V0QWxpYXMoKS5hZGQo YWxpYXMpOworCisgICAgICAgICAgICBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAg ICAgICBhbGlhcy5zZXRDb250ZW50KCJFY2hvIGFuZCBUaGUgQnVueW1lbiIpOworICAgICAgICAg ICAgYWxpYXNMaXN0LmdldEFsaWFzKCkuYWRkKGFsaWFzKTsKKworICAgICAgICAgICAgYWxpYXMg PSBvZi5jcmVhdGVBbGlhcygpOworICAgICAgICAgICAgYWxpYXMuc2V0Q29udGVudCgiRWNobyAm IFRoZSBCdW55bWVuIik7CisgICAgICAgICAgICBhbGlhc0xpc3QuZ2V0QWxpYXMoKS5hZGQoYWxp YXMpOworICAgICAgICAgICAgYXJ0aXN0LnNldEFsaWFzTGlzdChhbGlhc0xpc3QpOworICAgICAg ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NUT1JFLCBNTURTZXJp YWxpemVyLnNlcmlhbGl6ZShhcnRpc3QpKTsKKyAgICAgICAgICAgIHdyaXRlci5hZGREb2N1bWVu dChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvL0FydGlz dCwgdHlwZSBwZXJzb24gdW5rbm93biBnZW5kZXIKKyAgICAgICAgeworICAgICAgICAgICAgTWJE b2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxk KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELCAiZGRlNDg3OWMtNWU4OC00Mzg1LWIxMzEtYmY2 NTI5NmJmMjQ1Iik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1QsICJQSiBIYXJ2ZXkiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRl eEZpZWxkLlRZUEUsICJQZXJzb24iKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkdFTkRFUiwgInVua25vd24iKTsKKworICAgICAgICAgICAgQXJ0aXN0IGFydGlz dCA9IG9mLmNyZWF0ZUFydGlzdCgpOworICAgICAgICAgICAgYXJ0aXN0LnNldElkKCJkZGU0ODc5 Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRO YW1lKCJQSiBIYXJ2ZXkiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRUeXBlKCJQZXJzb24iKTsK KworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NUT1JF LCBNTURTZXJpYWxpemVyLnNlcmlhbGl6ZShhcnRpc3QpKTsKKyAgICAgICAgICAgIHdyaXRlci5h ZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7CisgICAgICAgIH0KKworICAgICAg ICB7CisgICAgICAgICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7CisgICAg ICAgICAgICBkb2MuYWRkRmllbGQoTWV0YUluZGV4RmllbGQuTUVUQSwgTWV0YUluZGV4RmllbGQu TUVUQV9WQUxVRSk7CisgICAgICAgICAgICBkb2MuYWRkTnVtZXJpY0ZpZWxkKE1ldGFJbmRleEZp ZWxkLkxBU1RfVVBEQVRFRCwgbmV3IERhdGUoKS5nZXRUaW1lKCkpOworICAgICAgICAgICAgd3Jp dGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVudCgpKTsKKyAgICAgICAgfQorCisg ICAgICAgIHdyaXRlci5jbG9zZSgpOworICAgICAgICBTZWFyY2hlck1hbmFnZXIgc2VhcmNoZXJN YW5hZ2VyID0gbmV3IFNlYXJjaGVyTWFuYWdlcihyYW1EaXIsIG5ldyBNdXNpY0JyYWluelNlYXJj aGVyRmFjdG9yeShSZXNvdXJjZVR5cGUuQVJUSVNUKSk7CisgICAgICAgIHNzID0gbmV3IEFydGlz dFNlYXJjaChzZWFyY2hlck1hbmFnZXIpOworICAgICAgICBzZCA9IG5ldyBBcnRpc3REaXNtYXhT ZWFyY2goc3MpOworCiAgICAgfQogCi0gICAgLy9BcnRpc3Qgd2l0aCAmIG9uIG5hbWUgYW5kIGFs aWFzZXMKLSAgICB7Ci0gICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7Ci0g ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQsICJjY2Q0ODc5Yy01 ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkFSVElTVCwgIkVjaG8gJiBUaGUgQnVubnltZW4iKTsKLSAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1FLCAiRWNobyAmIFRoZSBCdW5ueW1lbiIpOwot ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQkVHSU4sICIxOTc4Iik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT1VOVFJZLCAidW5rbm93biIpOwotICAg ICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVFlQRSwgQXJ0aXN0VHlwZS5HUk9VUC5n ZXROYW1lKCkpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQUxJQVMsICJF Y2hvIEFuZCBUaGUgQnVubnltZW4iKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLkFMSUFTLCAiRWNobyAmIFRoZSBCdW5ueW1hbiIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuQUxJQVMsICJFY2hvIGFuZCBUaGUgQnVueW1lbiIpOwotICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQUxJQVMsICJFY2hvICYgVGhlIEJ1bnltZW4iKTsK LSAgICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7CisgICAg cHJvdGVjdGVkIFN0cmluZyBnZXRBcnRpc3RJZChNYkRvY3VtZW50IGRvYykgeworICAgICAgICBB cnRpc3QgYXJ0aXN0ID0gKEFydGlzdCkgTU1EU2VyaWFsaXplci51bnNlcmlhbGl6ZShkb2MuZ2V0 KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NUT1JFKSwgQXJ0aXN0LmNsYXNzKTsKKyAgICAgICAg cmV0dXJuIGFydGlzdC5nZXRJZCgpOwogICAgIH0KIAotICAgIC8vQXJ0aXN0LCB0eXBlIHBlcnNv biB1bmtub3duIGdlbmRlcgotICAgIHsKLSAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9j dW1lbnQoKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCwg ImRkZTQ4NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIpOwotICAgICAgZG9jLmFkZEZp ZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNULCAiUEogSGFydmV5Iik7Ci0gICAgICBkb2MuYWRk RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCBBcnRpc3RUeXBlLlBFUlNPTi5nZXROYW1lKCkp OwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuR0VOREVSLCAidW5rbm93biIp OwotICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVudCgpKTsKKwor ICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeUlkKCkgdGhyb3dzIEV4 Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhcmlkOlwiNDMwMmUy NjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2XCIiLCAwLCAxMCk7CisgICAgICAgIGFzc2Vy dEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjQz MDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdldEFydGlzdElkKHJlcy5yZXN1 bHRzLmdldCgwKS5nZXREb2MoKSkpOwogICAgIH0KIAotICAgIHsKLSAgICAgIE1iRG9jdW1lbnQg ZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKLSAgICAgIGRvYy5hZGRGaWVsZChNZXRhSW5kZXhGaWVs ZC5NRVRBLCBNZXRhSW5kZXhGaWVsZC5NRVRBX1ZBTFVFKTsKLSAgICAgIGRvYy5hZGROdW1lcmlj RmllbGQoTWV0YUluZGV4RmllbGQuTEFTVF9VUERBVEVELCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7 Ci0gICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2VuZURvY3VtZW50KCkpOworICAg IEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeU5hbWUoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIkZhcm1p bmcgSW5jaWRlbnRcIiIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRU b3RhbEhpdHMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFj YTctMmE2Zjg5ZTM0YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDApLmdldERvYygp KSk7CiAgICAgfQogCi0gICAgd3JpdGVyLmNsb3NlKCk7Ci0gICAgU2VhcmNoZXJNYW5hZ2VyIHNl YXJjaGVyTWFuYWdlciA9IG5ldyBTZWFyY2hlck1hbmFnZXIocmFtRGlyLCBuZXcgTXVzaWNCcmFp bnpTZWFyY2hlckZhY3RvcnkoUmVzb3VyY2VUeXBlLkFSVElTVCkpOwotICAgIHNzID0gbmV3IEFy dGlzdFNlYXJjaChzZWFyY2hlck1hbmFnZXIpOwotICAgIHNkID0gbmV3IEFydGlzdERpc21heFNl YXJjaChzcyk7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21h eFNpbmdsZVRlcm0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBz ZC5zZWFyY2goIkZhcm1pbmciLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMu Z2V0VG90YWxIaXRzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQx Zi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5nZXRE b2MoKSkpOworICAgIH0KIAotICB9CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Rmlu ZEFydGlzdERpc21heFBocmFzZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRz IHJlcyA9IHNkLnNlYXJjaCgiRmFybWluZyBJbmNpZGVudCIsIDAsIDEwKTsKKyAgICAgICAgYXNz ZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi NDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJl c3VsdHMuZ2V0KDApLmdldERvYygpKSk7CisgICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lk IHRlc3RGaW5kQXJ0aXN0QnlJZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVz ID0gc3Muc2VhcmNoKCJhcmlkOlwiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2 XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0g ICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRv YyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQx Zi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQp KTsKLSAgICBhc3NlcnRFcXVhbHMoIkZhcm1pbmcgSW5jaWRlbnQiLCBkb2MuZ2V0KEFydGlzdElu ZGV4RmllbGQuQVJUSVNUKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxOTk5LTA0IiwgZG9jLmdldChB cnRpc3RJbmRleEZpZWxkLkJFR0lOKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0aGUgcmVhbCBvbmUi LCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQ09NTUVOVCkpOwotICAgIGFzc2VydE51bGwoZG9j LmdldChBcnRpc3RJbmRleEZpZWxkLkVORCkpOwotICAgIGFzc2VydE51bGwoZG9jLmdldChBcnRp c3RJbmRleEZpZWxkLkFMSUFTKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbmNpZGVudCwgRmFybWlu ZyIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRSkpOwotICAgIGFzc2VydEVxdWFs cygiR3JvdXAiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuVFlQRSkpOwotICB9CisgICAgQFRl c3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21heEZ1enp5KCkgdGhyb3dzIEV4 Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc2Quc2VhcmNoKCJGYXJtaW4iLCAwLCAx MCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAg ICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdl dEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5nZXREb2MoKSkpOwogCi0gIEBUZXN0Ci0gIHB1 YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg UmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIkZhcm1pbmcgSW5jaWRlbnRcIiIsIDAs IDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKLSAgICBSZXN1 bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQgZG9jID0gcmVz dWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTct MmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCkpOwotICB9 CisgICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0RGlzbWF4U2lu Z2xlVGVybSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc2Quc2VhcmNo KCJGYXJtaW5nIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRz KCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1 bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0x Y2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJU SVNUX0lEKSk7Ci0gIH0KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0 QnlTb3J0TmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNz LnNlYXJjaCgic29ydG5hbWU6XCJJbmNpZGVudCwgRmFybWluZ1wiIiwgMCwgMTApOworICAgICAg ICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1 YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBnZXRBcnRpc3RJZChy ZXMucmVzdWx0cy5nZXQoMCkuZ2V0RG9jKCkpKTsKIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0 ZXN0RmluZEFydGlzdERpc21heFBocmFzZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3Vs dHMgcmVzID0gc2Quc2VhcmNoKCJGYXJtaW5nIEluY2lkZW50IiwgMCwgMTApOwotICAgIGFzc2Vy dEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMu cmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0g ICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBk b2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0gIH0KKyAgICB9CiAKLSAgQFRl c3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXhGdXp6eSgpIHRocm93cyBFeGNl cHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc2Quc2VhcmNoKCJGYXJtaW4iLCAwLCAxMCk7Ci0g ICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3Vs dCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXRE b2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUz NGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQpKTsKLSAgfQogCi0gIEBU ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlTb3J0TmFtZSgpIHRocm93cyBFeGNl cHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJzb3J0bmFtZTpcIkluY2lkZW50 LCBGYXJtaW5nXCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhp dHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRv Y3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0 LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1RfSUQpKTsKLSAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRp c3RCeVR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5z ZWFyY2goInR5cGU6XCJncm91cFwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwg cmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0xY2Yw LTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBnZXRBcnRpc3RJZChyZXMucmVzdWx0cy5nZXQoMCku Z2V0RG9jKCkpKTsKIAorICAgIH0KIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFy dGlzdEJ5VHlwZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2Vh cmNoKCJ0eXBlOlwiZ3JvdXBcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgcmVzLmdl dFRvdGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwot ICAgIE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygi NDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRpc3RJbmRl eEZpZWxkLkFSVElTVF9JRCkpOwotICB9CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0 RmluZEFydGlzdEJ5SXBpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVz ID0gc3Muc2VhcmNoKCJpcGk6MTAwMSIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEs IHJlcy5nZXRUb3RhbEhpdHMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNm MC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDAp LmdldERvYygpKSk7CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeUlw aSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJpcGk6 MTAwMSIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsK LSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQg ZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00 ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9J RCkpOwotICB9CisgICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0 QnlOdW1lcmljVHlwZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Mu c2VhcmNoKCJ0eXBlOjIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIHJlcy5nZXRUb3Rh bEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBN YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQzMDJl MjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVs ZC5BUlRJU1RfSUQpKTsKLSAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRB cnRpc3RCeU51bWVyaWNUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMg cmVzID0gc3Muc2VhcmNoKCJ0eXBlOjIiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygy LCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFj ZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgw KS5nZXREb2MoKSkpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlC ZWdpbkRhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj aCgiYmVnaW46XCIxOTk5LTA0XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5n ZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsK LSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMo IjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5k ZXhGaWVsZC5BUlRJU1RfSUQpKTsKLSAgfQorICAgIH0KIAotICBAVGVzdAotICBwdWJsaWMgdm9p ZCB0ZXN0RmluZEFydGlzdEJ5RW5kZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRz IHJlcyA9IHNzLnNlYXJjaCgiZW5kZWQ6XCJ0cnVlXCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1 YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1 bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBh c3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5n ZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQpKTsKLSAgfQorICAgIEBUZXN0CisgICAgcHVi bGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeUJlZ2luRGF0ZSgpIHRocm93cyBFeGNlcHRpb24gewor ICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYmVnaW46XCIxOTk5LTA0XCIiLCAwLCAx MCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAg ICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdl dEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5nZXREb2MoKSkpOwogCisgICAgfQogCi0gIEBU ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlFbmREYXRlKCkgdGhyb3dzIEV4Y2Vw dGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImVuZDpcIjE5OTktMDRcIiIsIDAs IDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgcmVzLmdldFRvdGFsSGl0cygpKTsKLSAgfQorICAg IEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeUVuZGVkKCkgdGhyb3dzIEV4 Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJlbmRlZDpcInRydWVc IiIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7 CisgICAgICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0 YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDApLmdldERvYygpKSk7CiAKLSAgQFRl c3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeVR5cGVQZXJzb24oKSB0aHJvd3MgRXhj ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidHlwZTpcInBlcnNvblwiIiwg MCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICB9Cisg ICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlBbGlhcygpIHRo cm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhbGlhczpcIkVj aG8gQW5kIFRoZSBCdW5ueW1lblwiIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMu Z2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7 Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxz KCJjY2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiLCBkb2MuZ2V0KEFydGlzdElu ZGV4RmllbGQuQVJUSVNUX0lEKSk7CiAKLSAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQg dGVzdEZpbmRBcnRpc3RCeUVuZERhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVz dWx0cyByZXMgPSBzcy5zZWFyY2goImVuZDpcIjE5OTktMDRcIiIsIDAsIDEwKTsKKyAgICAgICAg YXNzZXJ0RXF1YWxzKDAsIHJlcy5nZXRUb3RhbEhpdHMoKSk7CisgICAgfQogCi0gIEBUZXN0Ci0g IHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlDb3VudHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7 Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImNvdW50cnk6XCJhZlwiIiwgMCwgMTApOwot ICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1 bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0 RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODll MzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0gICAgYXNzZXJ0 RXF1YWxzKCJGYXJtaW5nIEluY2lkZW50IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElT VCkpOwotICB9CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdEJ5VHlw ZVBlcnNvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNl YXJjaCgidHlwZTpcInBlcnNvblwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwg cmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJkZGU0ODc5Yy01ZTg4 LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiLCBnZXRBcnRpc3RJZChyZXMucmVzdWx0cy5nZXQoMCku Z2V0RG9jKCkpKTsKIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdFdpdGhO b0NvdW50cnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj aCgiY291bnRyeTp1bmtub3duIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0 VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0g ICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJj Y2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiLCBkb2MuZ2V0KEFydGlzdEluZGV4 RmllbGQuQVJUSVNUX0lEKSk7Ci0gIH0KKyAgICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQg dGVzdEZpbmRBcnRpc3RXaXRoTm9HZW5kZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1 bHRzIHJlcyA9IHNzLnNlYXJjaCgiZ2VuZGVyOnVua25vd24iLCAwLCAxMCk7Ci0gICAgYXNzZXJ0 RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5y ZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAg ICBhc3NlcnRFcXVhbHMoImRkZTQ4NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIsIGRv Yy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQpKTsKLSAgfQorICAgIEBUZXN0CisgICAg cHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeUFsaWFzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Cisg ICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhbGlhczpcIkVjaG8gQW5kIFRoZSBCdW5u eW1lblwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0 cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjY2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1 Mjk2YmYyNDUiLCBnZXRBcnRpc3RJZChyZXMucmVzdWx0cy5nZXQoMCkuZ2V0RG9jKCkpKTsKIAog Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlDb3VudHJ5VXBwZXJjYXNl KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImNvdW50 cnk6XCJBRlwiIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRz KCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1 bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0x Y2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJU SVNUX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJGYXJtaW5nIEluY2lkZW50IiwgZG9jLmdldChB cnRpc3RJbmRleEZpZWxkLkFSVElTVCkpOwotICB9CisgICAgfQogCi0gIEBUZXN0Ci0gIHB1Ymxp YyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlHZW5kZXJMb3dlcmNhc2UoKSB0aHJvd3MgRXhjZXB0aW9u IHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiZ2VuZGVyOlwibWFsZVwiIiwgMCwgMTAp OwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCBy ZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQu Z2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZm ODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0gICAgYXNz ZXJ0RXF1YWxzKCJGYXJtaW5nIEluY2lkZW50IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFS VElTVCkpOwotICB9CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdEJ5 Q291bnRyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNl YXJjaCgiY291bnRyeTpcImFmXCIiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjQzMDJlMjY0LTFjZjAt NGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5n ZXREb2MoKSkpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlHZW5k ZXJUaXRsZWNhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNl YXJjaCgiZ2VuZGVyOlwiTWFsZVwiIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMu Z2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7 Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxz KCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdElu ZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJGYXJtaW5nIEluY2lkZW50 IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCkpOwotICB9CisgICAgfQogCi0gIEBU ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlUYWcoKSB0aHJvd3MgRXhjZXB0aW9u IHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidGFnOlRocmFzaCIsIDAsIDEwKTsKLSAg ICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0 ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERv YygpOwotICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0 YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCkpOwotICAgIGFzc2VydEVx dWFscygiRmFybWluZyBJbmNpZGVudCIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1Qp KTsKLSAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RXaXRoTm9D b3VudHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2Vh cmNoKCJjb3VudHJ5OnVua25vd24iLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4NzljLTVlODgt NDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5n ZXREb2MoKSkpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlEZWZh dWx0RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CiAKLSAgICAvL01hdGNoZXMgb24g bmFtZSBmaWVsZCB3aXRob3V0IGl0IGJlaW5nIHNwZWNpZmllZAotICAgIHsKLSAgICAgIFJlc3Vs dHMgcmVzID0gc3Muc2VhcmNoKCJcIkVjaG8gJiBUaGUgQnVubnltZW5cIiIsIDAsIDEwKTsKLSAg ICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgICAgUmVzdWx0IHJl c3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICAgIE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0 LmdldERvYygpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJjY2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1i ZjY1Mjk2YmYyNDUiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lEKSk7Ci0gICAg ICBhc3NlcnRFcXVhbHMoIkVjaG8gJiBUaGUgQnVubnltZW4iLCBkb2MuZ2V0KEFydGlzdEluZGV4 RmllbGQuQVJUSVNUKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIjE5NzgiLCBkb2MuZ2V0KEFydGlz dEluZGV4RmllbGQuQkVHSU4pKTsKLSAgICAgIGFzc2VydEVxdWFscygiRWNobyAmIFRoZSBCdW5u eW1lbiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRSkpOwotICAgICAgYXNzZXJ0 RXF1YWxzKCJncm91cCIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFKSk7CisgICAgQFRl c3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdFdpdGhOb0dlbmRlcigpIHRocm93cyBF eGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiZ2VuZGVyOnVua25v d24iLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkp OworICAgICAgICBhc3NlcnRFcXVhbHMoImRkZTQ4NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZi ZjI0NSIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgwKS5nZXREb2MoKSkpOworCiAgICAg fQogCi0gICAgLy9hbmQgYWxpYXMgZmllbGQgIGZpZWxkIHdpdGhvdXQgaXQgYmVpbmcgc3BlY2lm aWVkCi0gICAgewotICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goIlwiRWNobyAmIFRoZSBC dW5ueW1hblwiIiwgMCwgMTApOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhp dHMoKSk7Ci0gICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgICAg TWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImNj ZDQ4NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhG aWVsZC5BUlRJU1RfSUQpKTsKLSAgICAgIGFzc2VydEVxdWFscygiRWNobyAmIFRoZSBCdW5ueW1l biIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QpKTsKLSAgICAgIGFzc2VydEVxdWFs cygiMTk3OCIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTikpOwotICAgICAgYXNzZXJ0 RXF1YWxzKCJFY2hvICYgVGhlIEJ1bm55bWVuIiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLlNP UlROQU1FKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImdyb3VwIiwgZG9jLmdldChBcnRpc3RJbmRl eEZpZWxkLlRZUEUpKTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRp c3RCeUNvdW50cnlVcHBlcmNhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0 cyByZXMgPSBzcy5zZWFyY2goImNvdW50cnk6XCJBRlwiIiwgMCwgMTApOworICAgICAgICBhc3Nl cnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0 MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBnZXRBcnRpc3RJZChyZXMucmVz dWx0cy5nZXQoMCkuZ2V0RG9jKCkpKTsKKwogICAgIH0KIAotICAgIC8vYnV0IGRvZXNuJ3Qgc2Vh cmNoIGRlZmF1bHQgZmllbGRzIGlmIGEgZmllbGQgaXMgc3BlY2lmaWVkCi0gICAgewotICAgICAg UmVzdWx0cyByZXMgPSBzcy5zZWFyY2goInR5cGU6XCJFY2hvICYgVGhlIEJ1bm55bWFuXCIiLCAw LCAxMCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICBA VGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlHZW5kZXJMb3dlcmNhc2UoKSB0 aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImdlbmRl cjpcIm1hbGVcIiIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3Rh bEhpdHMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTct MmE2Zjg5ZTM0YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDApLmdldERvYygpKSk7 CiAKICAgICB9Ci0gIH0KIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdEJ5 RXhjYWxhbWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5z ZWFyY2goIkZhcm1pbmdcXCEiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRU b3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAg ICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQz MDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhG aWVsZC5BUlRJU1RfSUQpKTsKLSAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZp bmRBcnRpc3RCeUdlbmRlclRpdGxlY2FzZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBS ZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiZ2VuZGVyOlwiTWFsZVwiIiwgMCwgMTApOworICAgICAg ICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1 YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBnZXRBcnRpc3RJZChy ZXMucmVzdWx0cy5nZXQoMCkuZ2V0RG9jKCkpKTsKIAotICAvKioKLSAgICogVGVzdHMgZ2V0IHNh bWUgcmVzdWx0cyBhcwotICAgKiBodHRwOi8vbXVzaWNicmFpbnoub3JnL3dzLzEvYXJ0aXN0Lz90 eXBlPXhtbCZxdWVyeT0lMjJGYXJtaW5nJTIwSW5jaWRlbnQlMjIKLSAgICoKLSAgICogQHRocm93 cyBFeGNlcHRpb24KLSAgICovCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRBc01t ZDFYbWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CiAKLSAgICBSZXN1bHRzIHJlcyA9IHNz LnNlYXJjaCgiYXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwiIiwgMCwgMSk7Ci0gICAgTW1kMVht bFdyaXRlciB2MVdyaXRlciA9IG5ldyBBcnRpc3RNbWQxWG1sV3JpdGVyKCk7Ci0gICAgU3RyaW5n V3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHByID0gbmV3 IFByaW50V3JpdGVyKHN3KTsKLSAgICB2MVdyaXRlci53cml0ZShwciwgcmVzKTsKLSAgICBwci5j bG9zZSgpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3RCeVRhZygp IHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidGFn OlRocmFzaCIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhp dHMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiNDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2 Zjg5ZTM0YjM2IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDApLmdldERvYygpKSk7CiAK LSAgICBTdHJpbmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50 bG4oIlhtbCBpcyIgKyBvdXRwdXQpOwotICAgIC8vYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IjxhcnRpc3QgaWQ9XCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzZcIiIpKTsg IGdyb3VwIGNvbWVzIGJlZm9yZSBpZCBpbiBvdXRwdXQKLSAgICAvL2Fzc2VydFRydWUob3V0cHV0 LmNvbnRhaW5zKCI8YXJ0aXN0LWxpc3QgY291bnQ9XCIxXCIgb2Zmc2V0PVwiMFwiPiIpKTsgICAg ICAgICAgICAgICBvZmZzZXQgY29tZXMgYmVmb3JlIGNvdW50IGluIG91dHB1dAotICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCJjb3VudD1cIjFcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91 dHB1dC5jb250YWlucygib2Zmc2V0PVwiMFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNv bnRhaW5zKCJ0eXBlPVwiR3JvdXBcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygiPG5hbWU+RmFybWluZyBJbmNpZGVudDwvbmFtZT4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRw dXQuY29udGFpbnMoIjxzb3J0LW5hbWU+SW5jaWRlbnQsIEZhcm1pbmc8L3NvcnQtbmFtZT4iKSk7 Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxsaWZlLXNwYW4gYmVnaW49XCIxOTk5 LTA0XCIiKSk7Ci0gICAgYXNzZXJ0RmFsc2Uob3V0cHV0LmNvbnRhaW5zKCJlbmQiKSk7Ci0gICAg YXNzZXJ0RmFsc2Uob3V0cHV0LmNvbnRhaW5zKCJhbGlhcyIpKTsKLSAgICBhc3NlcnRGYWxzZShv dXRwdXQuY29udGFpbnMoImRpc2FtYnVnYXRpb24iKSk7Ci0gIH0KKyAgICB9CiAKKyAgICBAVGVz dAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0QnlEZWZhdWx0RmllbGQoKSB0aHJvd3Mg RXhjZXB0aW9uIHsKIAotICAvKioKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIEBU ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRYbWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAg ICAgICAgLy9NYXRjaGVzIG9uIG5hbWUgZmllbGQgd2l0aG91dCBpdCBiZWluZyBzcGVjaWZpZWQK KyAgICAgICAgeworICAgICAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goIlwiRWNobyAm IFRoZSBCdW5ueW1lblwiIiwgMCwgMTApOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJl cy5nZXRUb3RhbEhpdHMoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4NzljLTVl ODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIsIGdldEFydGlzdElkKHJlcy5yZXN1bHRzLmdldCgw KS5nZXREb2MoKSkpOworICAgICAgICB9CiAKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgi YXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwiIiwgMCwgMSk7Ci0gICAgUmVzdWx0c1dyaXRlciB2 MVdyaXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcg U3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cp OwotICAgIHYxV3JpdGVyLndyaXRlKHByLCByZXMpOwotICAgIHByLmNsb3NlKCk7CisgICAgICAg IC8vYW5kIGFsaWFzIGZpZWxkICBmaWVsZCB3aXRob3V0IGl0IGJlaW5nIHNwZWNpZmllZAorICAg ICAgICB7CisgICAgICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiXCJFY2hvICYgVGhl IEJ1bm55bWFuXCIiLCAwLCAxMCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdl dFRvdGFsSGl0cygpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiY2NkNDg3OWMtNWU4OC00 Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1IiwgZ2V0QXJ0aXN0SWQocmVzLnJlc3VsdHMuZ2V0KDApLmdl dERvYygpKSk7CisgICAgICAgIH0KIAotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygp OwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sMSBpcyIgKyBvdXRwdXQpOwotICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCJpZD1cIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4 OWUzNGIzNlwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ4bWxuczpleHQ9 XCJodHRwOi8vbXVzaWNicmFpbnoub3JnL25zL2V4dCMtMi4wXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoImNvdW50PVwiMVwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0 LmNvbnRhaW5zKCJvZmZzZXQ9XCIwXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoInR5cGU9XCJHcm91cFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8 bmFtZT5GYXJtaW5nIEluY2lkZW50PC9uYW1lPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5j b250YWlucygiPHNvcnQtbmFtZT5JbmNpZGVudCwgRmFybWluZzwvc29ydC1uYW1lPiIpKTsKLSAg ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGJlZ2luPjE5OTktMDQ8L2JlZ2luPiIpKTsK LSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGNvdW50cnk+QUY8L2NvdW50cnk+Iikp OwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8ZW5kZWQ+dHJ1ZTwvZW5kZWQ+Iikp OwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8Z2VuZGVyPm1hbGU8L2dlbmRlcj4i KSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxpcGktbGlzdD48aXBpPjEwMDE8 L2lwaT48aXBpPjEwMDI8L2lwaT48L2lwaS1saXN0PiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygidGhyYXNoPC9uYW1lPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250 YWlucygiZ8O8dGg8L25hbWU+IikpOwotICAgIGFzc2VydEZhbHNlKG91dHB1dC5jb250YWlucygi YWxpYXMiKSk7Ci0gICAgYXNzZXJ0RmFsc2Uob3V0cHV0LmNvbnRhaW5zKCJkaXNhbWJ1Z2F0aW9u IikpOwotICB9CisgICAgICAgIC8vYnV0IGRvZXNuJ3Qgc2VhcmNoIGRlZmF1bHQgZmllbGRzIGlm IGEgZmllbGQgaXMgc3BlY2lmaWVkCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlc3VsdHMgcmVz ID0gc3Muc2VhcmNoKCJ0eXBlOlwiRWNobyAmIFRoZSBCdW5ueW1hblwiIiwgMCwgMTApOworICAg ICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHJlcy5nZXRUb3RhbEhpdHMoKSk7CiAKLSAgLyoqCi0g ICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0 T3V0cHV0WG1sMigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB9CisgICAgfQogCi0gICAg UmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIkVjaG8gJiB0aGUgQnVubnltZW5cIiIs IDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgdjFXcml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7 Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3Jp dGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICB2MVdyaXRlci53cml0ZShwciwgcmVz KTsKLSAgICBwci5jbG9zZSgpOwotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOwot ICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sMiBpcyIgKyBvdXRwdXQpOwotICAgIGFzc2VydFRy dWUob3V0cHV0LmNvbnRhaW5zKCJjb3VudD1cIjFcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygib2Zmc2V0PVwiMFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCJ0eXBlPVwiZ3JvdXBcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi PG5hbWU+RWNobyAmYW1wOyBUaGUgQnVubnltZW48L25hbWU+IikpOwotICAgIGFzc2VydFRydWUo b3V0cHV0LmNvbnRhaW5zKCI8c29ydC1uYW1lPkVjaG8gJmFtcDsgVGhlIEJ1bm55bWVuPC9zb3J0 LW5hbWU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8bGlmZS1zcGFuPjxi ZWdpbj4xOTc4PC9iZWdpbj48L2xpZmUtc3Bhbj4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQu Y29udGFpbnMoIjxhbGlhcz5FY2hvIEFuZCBUaGUgQnVubnltZW48L2FsaWFzPiIpKTsKLSAgICBh c3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGFsaWFzPkVjaG8gJmFtcDsgVGhlIEJ1bm55bWFu PC9hbGlhcz4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxhbGlhcz5FY2hv IGFuZCBUaGUgQnVueW1lbjwvYWxpYXM+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCI8YWxpYXM+RWNobyAmYW1wOyBUaGUgQnVueW1lbjwvYWxpYXM+IikpOwotICB9CisgICAg QFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdEJ5RXhjYWxhbWF0aW9uKCkgdGhy b3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJGYXJtaW5n XFwhIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygp KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODll MzRiMzYiLCBnZXRBcnRpc3RJZChyZXMucmVzdWx0cy5nZXQoMCkuZ2V0RG9jKCkpKTsKIAotICAv KioKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lk IHRlc3RPdXRwdXRYbWwzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgfQogCi0gICAgUmVzdWx0 cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIlBKIEhhcnZleVwiIiwgMCwgMSk7Ci0gICAgUmVz dWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7Ci0gICAgU3RyaW5nV3JpdGVy IHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHByID0gbmV3IFByaW50 V3JpdGVyKHN3KTsKLSAgICB3cml0ZXIud3JpdGUocHIsIHJlcyk7Ci0gICAgcHIuY2xvc2UoKTsK LSAgICBTdHJpbmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50 bG4oIlhtbDMgaXMiICsgb3V0cHV0KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi Y291bnQ9XCIxXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIm9mZnNldD1c IjBcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygidHlwZT1cInBlcnNvblwi IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8bmFtZT5QSiBIYXJ2ZXk8L25h bWU+IikpOwotICAgIGFzc2VydEZhbHNlKG91dHB1dC5jb250YWlucygiPGdlbmRlcj4iKSk7IC8v Tm90IHNob3duIGJlY2F1c2UgdW5rbm93bgotICB9CisgICAgLyoqCisgICAgICogVGVzdHMgZ2V0 IHNhbWUgcmVzdWx0cyBhcworICAgICAqIGh0dHA6Ly9tdXNpY2JyYWluei5vcmcvd3MvMS9hcnRp c3QvP3R5cGU9eG1sJnF1ZXJ5PSUyMkZhcm1pbmclMjBJbmNpZGVudCUyMgorICAgICAqCisgICAg ICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lk IHRlc3RPdXRwdXRBc01tZDFYbWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAvKioKLSAgICog VGVzdHMgdGhhdCAmIGlzIGNvbnZlcnRlZCB0byB2YWxpZCB4bWwKLSAgICoKLSAgICogQHRocm93 cyBFeGNlcHRpb24KLSAgICovCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRBc01t ZDFYbWxTcGVjaWFsQ2hhcmFjdGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1 bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwiIiwgMCwgMSk7 CisgICAgICAgIE1tZDFYbWxXcml0ZXIgdjFXcml0ZXIgPSBuZXcgQXJ0aXN0TW1kMVhtbFdyaXRl cigpOworICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAg ICAgIFByaW50V3JpdGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKKyAgICAgICAgdjFXcml0 ZXIud3JpdGUocHIsIHJlcyk7CisgICAgICAgIHByLmNsb3NlKCk7CiAKLSAgICBSZXN1bHRzIHJl cyA9IHNzLnNlYXJjaCgiYWxpYXM6XCJFY2hvIEFuZCBUaGUgQnVubnltZW5cIiIsIDAsIDEpOwot ICAgIE1tZDFYbWxXcml0ZXIgdjFXcml0ZXIgPSBzcy5nZXRNbWQxV3JpdGVyKCk7Ci0gICAgU3Ry aW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHByID0g bmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICB2MVdyaXRlci53cml0ZShwciwgcmVzKTsKLSAgICBw ci5jbG9zZSgpOworICAgICAgICBTdHJpbmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKCJYbWwgaXMiICsgb3V0cHV0KTsKKyAgICAgICAgLy9hc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiPGFydGlzdCBpZD1cIjQzMDJlMjY0LTFjZjAtNGQxZi1h Y2E3LTJhNmY4OWUzNGIzNlwiIikpOyAgZ3JvdXAgY29tZXMgYmVmb3JlIGlkIGluIG91dHB1dAor ICAgICAgICAvL2Fzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8YXJ0aXN0LWxpc3QgY291bnQ9 XCIxXCIgb2Zmc2V0PVwiMFwiPiIpKTsgICAgICAgICAgICAgICBvZmZzZXQgY29tZXMgYmVmb3Jl IGNvdW50IGluIG91dHB1dAorICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiY291 bnQ9XCIxXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJvZmZzZXQ9 XCIwXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBlPVwiR3Jv dXBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPkZhcm1p bmcgSW5jaWRlbnQ8L25hbWU+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygiPHNvcnQtbmFtZT5JbmNpZGVudCwgRmFybWluZzwvc29ydC1uYW1lPiIpKTsKKyAgICAgICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxsaWZlLXNwYW4gYmVnaW49XCIxOTk5LTA0XCIi KSk7CisgICAgICAgIGFzc2VydEZhbHNlKG91dHB1dC5jb250YWlucygiZW5kIikpOworICAgICAg ICBhc3NlcnRGYWxzZShvdXRwdXQuY29udGFpbnMoImFsaWFzIikpOworICAgICAgICBhc3NlcnRG YWxzZShvdXRwdXQuY29udGFpbnMoImRpc2FtYnVnYXRpb24iKSk7CisgICAgfQogCi0gICAgU3Ry aW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlht bCBpcyIgKyBvdXRwdXQpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJjb3VudD1c IjFcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygib2Zmc2V0PVwiMFwiIikp OwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBlPVwiR3JvdXBcIiIpKTsKLSAg ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPG5hbWU+RWNobyAmYW1wOyBUaGUgQnVubnlt ZW48L25hbWU+IikpOwotICB9CiAKLSAgLyoqCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAq LwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0SnNvbigpIHRocm93cyBFeGNlcHRp b24geworICAgIC8qKgorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRl c3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0WG1sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAK LSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwi IiwgMCwgMSk7Ci0gICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7 Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3Jp dGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICB3cml0ZXIud3JpdGUocHIsIHJlcywg U2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OKTsKLSAgICBwci5jbG9zZSgpOworICAg ICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwi IiwgMCwgMSk7CisgICAgICAgIFJlc3VsdHNXcml0ZXIgdjFXcml0ZXIgPSBzcy5nZXRNbWQyV3Jp dGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAg ICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB2MVdy aXRlci53cml0ZShwciwgcmVzKTsKKyAgICAgICAgcHIuY2xvc2UoKTsKIAotICAgIFN0cmluZyBv dXRwdXQgPSBzdy50b1N0cmluZygpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSnNvbiBpcyIg KyBvdXRwdXQpOworICAgICAgICBTdHJpbmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKCJYbWwxIGlzIiArIG91dHB1dCk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCJpZD1cIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4 OWUzNGIzNlwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygieG1sbnM6 ZXh0PVwiaHR0cDovL211c2ljYnJhaW56Lm9yZy9ucy9leHQjLTIuMFwiIikpOworICAgICAgICBh c3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiY291bnQ9XCIxXCIiKSk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCJvZmZzZXQ9XCIwXCIiKSk7CisgICAgICAgIGFzc2VydFRy dWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBlPVwiR3JvdXBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPkZhcm1pbmcgSW5jaWRlbnQ8L25hbWU+IikpOworICAg ICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPHNvcnQtbmFtZT5JbmNpZGVudCwgRmFy bWluZzwvc29ydC1uYW1lPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IjxiZWdpbj4xOTk5LTA0PC9iZWdpbj4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNv bnRhaW5zKCI8Y291bnRyeT5BRjwvY291bnRyeT4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0 cHV0LmNvbnRhaW5zKCI8ZW5kZWQ+dHJ1ZTwvZW5kZWQ+IikpOworICAgICAgICBhc3NlcnRUcnVl KG91dHB1dC5jb250YWlucygiPGdlbmRlcj5tYWxlPC9nZW5kZXI+IikpOworICAgICAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiPGlwaS1saXN0PjxpcGk+MTAwMTwvaXBpPjxpcGk+MTAw MjwvaXBpPjwvaXBpLWxpc3Q+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygidGhyYXNoPC9uYW1lPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo ImfDvHRoPC9uYW1lPiIpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2Uob3V0cHV0LmNvbnRhaW5zKCJh bGlhcyIpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2Uob3V0cHV0LmNvbnRhaW5zKCJkaXNhbWJ1Z2F0 aW9uIikpOworICAgIH0KIAotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJpZFwiOlwi NDMwMmUyNjQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2XCIiKSk7Ci0gICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoIlwiY291bnRcIjoxIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0 LmNvbnRhaW5zKCJcIm9mZnNldFwiOjAsIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCJcInR5cGVcIjpcIkdyb3VwXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoIm5hbWVcIjpcIkZhcm1pbmcgSW5jaWRlbnRcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygiXCJzb3J0LW5hbWVcIjpcIkluY2lkZW50LCBGYXJtaW5nXCIiKSk7Ci0gICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYmVnaW5cIjpcIjE5OTktMDRcIiIpKTsKLSAg ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJlbmRlZFwiOlwidHJ1ZVwiIikpOwotICAg IGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50cnlcIjpcIkFGXCIiKSk7Ci0gICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiZ2VuZGVyXCI6XCJtYWxlXCIiKSk7Ci0gICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGFnXCI6W3tcImNvdW50XCI6NSxcIm5hbWVc IjpcInRocmFzaFwifSx7XCJjb3VudFwiOjExLFwibmFtZVwiOlwiZ8O8dGhcIn0iKSk7Ci0gIH0K KyAgICAvKioKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIEBUZXN0Cisg ICAgcHVibGljIHZvaWQgdGVzdE91dHB1dFhtbDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAorICAg ICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRWNobyAmIHRoZSBCdW5ueW1l blwiIiwgMCwgMSk7CisgICAgICAgIFJlc3VsdHNXcml0ZXIgdjFXcml0ZXIgPSBzcy5nZXRNbWQy V3JpdGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsK KyAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB2 MVdyaXRlci53cml0ZShwciwgcmVzKTsKKyAgICAgICAgcHIuY2xvc2UoKTsKKyAgICAgICAgU3Ry aW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi WG1sMiBpcyIgKyBvdXRwdXQpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi Y291bnQ9XCIxXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJvZmZz ZXQ9XCIwXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBlPVwi R3JvdXBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPkVj aG8gJmFtcDsgVGhlIEJ1bm55bWVuPC9uYW1lPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRw dXQuY29udGFpbnMoIjxzb3J0LW5hbWU+RWNobyAmYW1wOyBUaGUgQnVubnltZW48L3NvcnQtbmFt ZT4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8bGlmZS1zcGFuPjxi ZWdpbj4xOTc4PC9iZWdpbj48L2xpZmUtc3Bhbj4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0 cHV0LmNvbnRhaW5zKCI8YWxpYXM+RWNobyBBbmQgVGhlIEJ1bm55bWVuPC9hbGlhcz4iKSk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8YWxpYXM+RWNobyAmYW1wOyBUaGUg QnVubnltYW48L2FsaWFzPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IjxhbGlhcz5FY2hvIGFuZCBUaGUgQnVueW1lbjwvYWxpYXM+IikpOworICAgICAgICBhc3NlcnRU cnVlKG91dHB1dC5jb250YWlucygiPGFsaWFzPkVjaG8gJmFtcDsgVGhlIEJ1bnltZW48L2FsaWFz PiIpKTsKKyAgICB9CiAKKyAgICAvKioKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAq LworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE91dHB1dFhtbDMoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0SnNvbk11bHRpcGxl KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlz dDpcIkZhcm1pbmcgSW5jaWRlbnRcIiBPUiBhcnRpc3Q6XCJFY2hvICYgVGhlIEJ1bm55bWVuXCIi LCAwLCAyKTsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIlBKIEhh cnZleVwiIiwgMCwgMSk7CisgICAgICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1k MldyaXRlcigpOworICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7 CisgICAgICAgIFByaW50V3JpdGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKKyAgICAgICAg d3JpdGVyLndyaXRlKHByLCByZXMpOworICAgICAgICBwci5jbG9zZSgpOworICAgICAgICBTdHJp bmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJY bWwzIGlzIiArIG91dHB1dCk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJj b3VudD1cIjFcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIm9mZnNl dD1cIjBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoInR5cGU9XCJQ ZXJzb25cIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPlBK IEhhcnZleTwvbmFtZT4iKSk7CisgICAgICAgIGFzc2VydEZhbHNlKG91dHB1dC5jb250YWlucygi PGdlbmRlcj4iKSk7IC8vTm90IHNob3duIGJlY2F1c2UgdW5rbm93bgorICAgIH0KIAotICAgIFJl c3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldyaXRlcigpOwotICAgIFN0cmluZ1dyaXRl ciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwciA9IG5ldyBQcmlu dFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndyaXRlKHByLCByZXMsIFNlYXJjaFNlcnZlclNlcnZs ZXQuUkVTUE9OU0VfSlNPTik7Ci0gICAgcHIuY2xvc2UoKTsKLSAgICBTdHJpbmcgb3V0cHV0ID0g c3cudG9TdHJpbmcoKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJzY29yZVwi OlwiMTAwXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwic2NvcmVcIjpc IjMxXCIiKSk7Ci0gIH0KKyAgICAvKioKKyAgICAgKiBUZXN0cyB0aGF0ICYgaXMgY29udmVydGVk IHRvIHZhbGlkIHhtbAorICAgICAqCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8K KyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRBc01tZDFYbWxTcGVjaWFsQ2hh cmFjdGVycygpIHRocm93cyBFeGNlcHRpb24gewogCi0gIC8qKgotICAgKiBAdGhyb3dzIEV4Y2Vw dGlvbgotICAgKi8KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE91dHB1dEpzb25OZXcoKSB0 aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFsaWFz OlwiRWNobyBBbmQgVGhlIEJ1bm55bWVuXCIiLCAwLCAxKTsKKyAgICAgICAgTW1kMVhtbFdyaXRl ciB2MVdyaXRlciA9IHNzLmdldE1tZDFXcml0ZXIoKTsKKyAgICAgICAgU3RyaW5nV3JpdGVyIHN3 ID0gbmV3IFN0cmluZ1dyaXRlcigpOworICAgICAgICBQcmludFdyaXRlciBwciA9IG5ldyBQcmlu dFdyaXRlcihzdyk7CisgICAgICAgIHYxV3JpdGVyLndyaXRlKHByLCByZXMpOworICAgICAgICBw ci5jbG9zZSgpOwogCi0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIkZhcm1p bmcgSW5jaWRlbnRcIiIsIDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0 TW1kMldyaXRlcigpOwotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsK LSAgICBQcmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndy aXRlKHByLCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTl9ORVcpOwotICAg IHByLmNsb3NlKCk7CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOworICAg ICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiWG1sIGlzIiArIG91dHB1dCk7CisgICAgICAgIGFz c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJjb3VudD1cIjFcIiIpKTsKKyAgICAgICAgYXNzZXJ0 VHJ1ZShvdXRwdXQuY29udGFpbnMoIm9mZnNldD1cIjBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoInR5cGU9XCJHcm91cFwiIikpOworICAgICAgICBhc3NlcnRUcnVl KG91dHB1dC5jb250YWlucygiPG5hbWU+RWNobyAmYW1wOyBUaGUgQnVubnltZW48L25hbWU+Iikp OworICAgIH0KIAotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOwotICAgIFN5c3Rl bS5vdXQucHJpbnRsbigiSk5ldyBpcyIgKyBvdXRwdXQpOworICAgIC8qKgorICAgICAqIEB0aHJv d3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0 cHV0SnNvbigpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29u dGFpbnMoImlkXCI6XCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzZcIiIpKTsK LSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0eXBlXCI6XCJHcm91cFwiIikpOwot ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJuYW1lXCI6XCJGYXJtaW5nIEluY2lkZW50 XCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwic29ydC1uYW1lXCI6XCJJ bmNpZGVudCwgRmFybWluZ1wiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJc ImJlZ2luXCI6XCIxOTk5LTA0XCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IlwiZW5kZWRcIjp0cnVlIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNv dW50cnlcIjpcIkFGXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiZ2Vu ZGVyXCI6XCJtYWxlXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGFn c1wiOlt7IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6NSIp KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJuYW1lXCI6XCJ0aHJhc2hcIiIp KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJuYW1lXCI6XCJnw7x0aFwiIikp OwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MSIpKTsKLSAgICBh c3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJvZmZzZXRcIjowIikpOworICAgICAgICBSZXN1 bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFybWluZyBJbmNpZGVudFwiIiwgMCwgMSk7 CisgICAgICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldyaXRlcigpOworICAg ICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgIFByaW50 V3JpdGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKKyAgICAgICAgd3JpdGVyLndyaXRlKHBy LCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTik7CisgICAgICAgIHByLmNs b3NlKCk7CiAKLSAgfQorICAgICAgICBTdHJpbmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAg ICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKc29uIGlzIiArIG91dHB1dCk7CiAKLSAgLyoqCi0g ICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0 T3V0cHV0SnNvbk5ld1ByZXR0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhc3NlcnRU cnVlKG91dHB1dC5jb250YWlucygiaWRcIjpcIjQzMDJlMjY0LTFjZjAtNGQxZi1hY2E3LTJhNmY4 OWUzNGIzNlwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJjb3Vu dFwiOjEiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm9mZnNldFwi OjAsIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0eXBlXCI6XCJH cm91cFwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygibmFtZVwiOlwi RmFybWluZyBJbmNpZGVudFwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygiXCJzb3J0LW5hbWVcIjpcIkluY2lkZW50LCBGYXJtaW5nXCIiKSk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImJlZ2luXCI6XCIxOTk5LTA0XCIiKSk7CisgICAgICAg IGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImVuZGVkXCI6XCJ0cnVlXCIiKSk7CisgICAg ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50cnlcIjpcIkFGXCIiKSk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImdlbmRlclwiOlwibWFsZVwiIikp OworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWdcIjpbe1wiY291bnRc Ijo1LFwibmFtZVwiOlwidGhyYXNoXCJ9LHtcImNvdW50XCI6MTEsXCJuYW1lXCI6XCJnw7x0aFwi fSIpKTsKKyAgICB9CiAKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFy bWluZyBJbmNpZGVudFwiIiwgMCwgMSk7Ci0gICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5n ZXRNbWQyV3JpdGVyKCk7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigp OwotICAgIFByaW50V3JpdGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICB3cml0ZXIu d3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OX05FVywgdHJ1 ZSk7Ci0gICAgcHIuY2xvc2UoKTsKIAotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygp OwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlNPTiBOZXcgUHJldHR5IGlzIiArIG91dHB1dCk7 Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwib2Zmc2V0XCIgOiAwIikpOworICAg IEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE91dHB1dEpzb25NdWx0aXBsZSgpIHRocm93cyBF eGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0OlwiRmFy bWluZyBJbmNpZGVudFwiIE9SIGFydGlzdDpcIkVjaG8gJiBUaGUgQnVubnltZW5cIiIsIDAsIDIp OwogCi0gIH0KKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVy KCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAgICAg ICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB3cml0ZXIu d3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OKTsKKyAgICAg ICAgcHIuY2xvc2UoKTsKKyAgICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6XCIxMDBcIiIpKTsK KyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwic2NvcmVcIjpcIjMxXCIiKSk7 CisgICAgfQogCisgICAgLyoqCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAg ICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRKc29uTmV3KCkgdGhyb3dzIEV4Y2Vw dGlvbiB7CiAKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFydGlzdDpcIkZhcm1p bmcgSW5jaWRlbnRcIiIsIDAsIDEpOworICAgICAgICBSZXN1bHRzV3JpdGVyIHdyaXRlciA9IHNz LmdldE1tZDJXcml0ZXIoKTsKKyAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dy aXRlcigpOworICAgICAgICBQcmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Cisg ICAgICAgIHdyaXRlci53cml0ZShwciwgcmVzLCBTZWFyY2hTZXJ2ZXJTZXJ2bGV0LlJFU1BPTlNF X0pTT05fTkVXKTsKKyAgICAgICAgcHIuY2xvc2UoKTsKIAotICAvKioKLSAgICogQHRocm93cyBF eGNlcHRpb24KLSAgICovCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRKc29uTmV3 UHJldHR5V2l0aEFsaWFzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIG91 dHB1dCA9IHN3LnRvU3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk5ldyBp cyIgKyBvdXRwdXQpOwogCi0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goImFyaWQ6Y2NkNDg3 OWMtNWU4OC00Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1IiwgMCwgMSk7Ci0gICAgUmVzdWx0c1dyaXRl ciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3 IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHByID0gbmV3IFByaW50V3JpdGVyKHN3 KTsKLSAgICB3cml0ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05T RV9KU09OX05FVywgdHJ1ZSk7Ci0gICAgcHIuY2xvc2UoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShv dXRwdXQuY29udGFpbnMoImlkXCI6XCI0MzAyZTI2NC0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRi MzZcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidHlwZVwiOlwi R3JvdXBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIm5hbWVcIjpc IkZhcm1pbmcgSW5jaWRlbnRcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoIlwic29ydC1uYW1lXCI6XCJJbmNpZGVudCwgRmFybWluZ1wiIikpOworICAgICAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiXCJiZWdpblwiOlwiMTk5OS0wNFwiIikpOworICAgICAg ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJlbmRlZFwiOnRydWUiKSk7CisgICAgICAg IGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50cnlcIjpcIkFGXCIiKSk7CisgICAg ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImdlbmRlclwiOlwibWFsZVwiIikpOwor ICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWdzXCI6W3siKSk7CisgICAg ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6NSIpKTsKKyAgICAgICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwibmFtZVwiOlwidGhyYXNoXCIiKSk7CisgICAg ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcImfDvHRoXCIiKSk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MSIpKTsKKyAgICAg ICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwib2Zmc2V0XCI6MCIpKTsKIAotICAgIFN0 cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlNP TiBOZXcgUHJldHR5IGlzIiArIG91dHB1dCk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoIlwic29ydC1uYW1lXCIgOiBcIkVjaG8gJiBUaGUgQnVubnltZW5cIiIpKTsKLSAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiXCJhbGlhc2VzXCIgOiBbIFwiRWNobyBBbmQgVGhlIEJ1 bm55bWVuXCIsIFwiRWNobyAmIFRoZSBCdW5ueW1hblwiLCBcIkVjaG8gYW5kIFRoZSBCdW55bWVu XCIsIFwiRWNobyAmIFRoZSBCdW55bWVuXCIgXSIpKTsKLSAgfQorICAgIH0KIAorICAgIC8qKgor ICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRlc3QKKyAgICBwdWJsaWMg dm9pZCB0ZXN0T3V0cHV0SnNvbk5ld1ByZXR0eSgpIHRocm93cyBFeGNlcHRpb24geworCisgICAg ICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhcnRpc3Q6XCJGYXJtaW5nIEluY2lkZW50XCIi LCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVy KCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAgICAg ICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB3cml0ZXIu d3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OX05FVywgdHJ1 ZSk7CisgICAgICAgIHByLmNsb3NlKCk7CisKKyAgICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRv U3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlNPTiBOZXcgUHJldHR5IGlz IiArIG91dHB1dCk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm9mZnNl dFwiIDogMCIpKTsKKworICAgIH0KKworCisgICAgLyoqCisgICAgICogQHRocm93cyBFeGNlcHRp b24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRKc29uTmV3 UHJldHR5V2l0aEFsaWFzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBSZXN1bHRz IHJlcyA9IHNzLnNlYXJjaCgiYXJpZDpjY2Q0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYy NDUiLCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3Jp dGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAg ICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB3cml0 ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OX05FVywg dHJ1ZSk7CisgICAgICAgIHByLmNsb3NlKCk7CisKKyAgICAgICAgU3RyaW5nIG91dHB1dCA9IHN3 LnRvU3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlNPTiBOZXcgUHJldHR5 IGlzIiArIG91dHB1dCk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNv cnQtbmFtZVwiIDogXCJFY2hvICYgVGhlIEJ1bm55bWVuXCIiKSk7CisgICAgICAgIGFzc2VydFRy dWUob3V0cHV0LmNvbnRhaW5zKCJcImFsaWFzZXNcIiA6IFsgXCJFY2hvIEFuZCBUaGUgQnVubnlt ZW5cIiwgXCJFY2hvICYgVGhlIEJ1bm55bWFuXCIsIFwiRWNobyBhbmQgVGhlIEJ1bnltZW5cIiwg XCJFY2hvICYgVGhlIEJ1bnltZW5cIiBdIikpOworICAgIH0KKwogfQpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKCk1vZGlmaWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL3Rl c3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvSXNzdWVTZWFyY2gxNjdUZXN0 LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0 L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L0lzc3VlU2VhcmNoMTY3VGVzdC5q YXZhCTIwMTMtMDUtMDIgMjA6Mzg6MDUgVVRDIChyZXYgMTM2NzcpCisrKyBzZWFyY2hfc2VydmVy L3RydW5rL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZs ZXQvSXNzdWVTZWFyY2gxNjdUZXN0LmphdmEJMjAxMy0wNS0wOCAxNjowOToyNyBVVEMgKHJldiAx MzY3OCkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5h c3NlcnRFcXVhbHM7CiAKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKIGltcG9ydCBqYXZh LnV0aWwuRGF0ZTsKIAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLkFuYWx5emVy OwpAQCAtMTcsMTEgKzE4LDEzIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUudXRpbC5OdW1l cmljVXRpbHM7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVz dDsKK2ltcG9ydCBvcmcubXVzaWNicmFpbnoubW1kMi4qOwogaW1wb3J0IG9yZy5tdXNpY2JyYWlu ei5zZWFyY2guTHVjZW5lVmVyc2lvbjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLk1i RG9jdW1lbnQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5hbmFseXNpcy5NdXNpY2Jy YWluelNpbWlsYXJpdHk7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5BcnRp c3RJbmRleEZpZWxkOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guaW5kZXguRGF0YWJh c2VJbmRleDsKK2ltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4Lk1NRFNlcmlhbGl6 ZXI7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5NZXRhSW5kZXhGaWVsZDsK IAogLyoqCkBAIC0yOSwzNjggKzMyLDQ2NyBAQAogICovCiBwdWJsaWMgY2xhc3MgSXNzdWVTZWFy Y2gxNjdUZXN0IHsKIAotICBwcml2YXRlIEFic3RyYWN0RGlzbWF4U2VhcmNoU2VydmVyIHNkOwor ICAgIHByaXZhdGUgQWJzdHJhY3REaXNtYXhTZWFyY2hTZXJ2ZXIgc2Q7CiAKLSAgQEJlZm9yZQot ICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJBTURpcmVjdG9y eSByYW1EaXIgPSBuZXcgUkFNRGlyZWN0b3J5KCk7Ci0gICAgQW5hbHl6ZXIgYW5hbHl6ZXIgPSBE YXRhYmFzZUluZGV4LmdldEFuYWx5emVyKEFydGlzdEluZGV4RmllbGQuY2xhc3MpOwotICAgIElu ZGV4V3JpdGVyQ29uZmlnIHdyaXRlckNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMdWNl bmVWZXJzaW9uLkxVQ0VORV9WRVJTSU9OLGFuYWx5emVyKTsKLSAgICB3cml0ZXJDb25maWcuc2V0 U2ltaWxhcml0eShuZXcgTXVzaWNicmFpbnpTaW1pbGFyaXR5KCkpOwotICAgIEluZGV4V3JpdGVy IHdyaXRlciA9IG5ldyBJbmRleFdyaXRlcihyYW1EaXIsIHdyaXRlckNvbmZpZyk7CisgICAgQEJl Zm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAg IE9iamVjdEZhY3Rvcnkgb2YgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOworICAgICAgICBSQU1EaXJl Y3RvcnkgcmFtRGlyID0gbmV3IFJBTURpcmVjdG9yeSgpOworICAgICAgICBBbmFseXplciBhbmFs eXplciA9IERhdGFiYXNlSW5kZXguZ2V0QW5hbHl6ZXIoQXJ0aXN0SW5kZXhGaWVsZC5jbGFzcyk7 CisgICAgICAgIEluZGV4V3JpdGVyQ29uZmlnIHdyaXRlckNvbmZpZyA9IG5ldyBJbmRleFdyaXRl ckNvbmZpZyhMdWNlbmVWZXJzaW9uLkxVQ0VORV9WRVJTSU9OLCBhbmFseXplcik7CisgICAgICAg IHdyaXRlckNvbmZpZy5zZXRTaW1pbGFyaXR5KG5ldyBNdXNpY2JyYWluelNpbWlsYXJpdHkoKSk7 CisgICAgICAgIEluZGV4V3JpdGVyIHdyaXRlciA9IG5ldyBJbmRleFdyaXRlcihyYW1EaXIsIHdy aXRlckNvbmZpZyk7CiAKIAotICAgIC8vR2VuZXJhbCBQdXJwb3NlIEFydGlzdAotICAgIHsKLSAg ICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKLSAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCwgIjExMTExMTExLTFjZjAtNGQxZi1hY2E3LTJh NmY4OWUzNGIzNiIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNU X0FDQ0VOVCwgIlJlcHVibGljYSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQVJUSVNULCAiUmVwdWJsaWNhIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhG aWVsZC5TT1JUTkFNRSwgIlJlcHVibGljYSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuQkVHSU4sICIxOTk5LTA0Iik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5k ZXhGaWVsZC5UWVBFLCAiR3JvdXAiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLkNPTU1FTlQsICJ0aGUgcmVhbCBvbmUiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkNPVU5UUlksICJBRiIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuR0VOREVSLCAibWFsZSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuVEFHLCAidGhyYXNoIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5U QUdDT1VOVCwgIjUiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBRywg ImfDvHRoIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUdDT1VOVCwg IjExIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5JUEksIjEwMDEiKTsK KyAgICAgICAgLy9HZW5lcmFsIFB1cnBvc2UgQXJ0aXN0CisgICAgICAgIHsKKyAgICAgICAgICAg IE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCwgIjExMTExMTExLTFjZjAtNGQxZi1hY2E3 LTJhNmY4OWUzNGIzNiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQVJUSVNUX0FDQ0VOVCwgIlJlcHVibGljYSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxk KEFydGlzdEluZGV4RmllbGQuQVJUSVNULCAiUmVwdWJsaWNhIik7CisgICAgICAgICAgICBkb2Mu YWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRSwgIlJlcHVibGljYSIpOworICAgICAg ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQkVHSU4sICIxOTk5LTA0Iik7Cisg ICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAiR3JvdXAiKTsK KyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQsICJ0aGUg cmVhbCBvbmUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNP VU5UUlksICJBRiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu R0VOREVSLCAibWFsZSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuVEFHLCAidGhyYXNoIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhG aWVsZC5UQUcsICJnw7x0aCIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuSVBJLCAiMTAwMSIpOwogCi0gICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1 Y2VuZURvY3VtZW50KCkpOwotICAgIH0KKyAgICAgICAgICAgIEFydGlzdCBhcnRpc3QgPSBvZi5j cmVhdGVBcnRpc3QoKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRJZCgiMTExMTExMTEtMWNmMC00 ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7CisgICAgICAgICAgICBhcnRpc3Quc2V0TmFtZSgiUmVw dWJsaWNhIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0U29ydE5hbWUoIlJlcHVibGljYSIpOwor ICAgICAgICAgICAgTGlmZVNwYW4gbGlmZXNwYW4gPSBvZi5jcmVhdGVMaWZlU3BhbigpOworICAg ICAgICAgICAgbGlmZXNwYW4uc2V0QmVnaW4oIjE5OTktMDQiKTsKKyAgICAgICAgICAgIGxpZmVz cGFuLnNldEVuZGVkKCJmYWxzZSIpOworICAgICAgICAgICAgYXJ0aXN0LnNldExpZmVTcGFuKGxp ZmVzcGFuKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRUeXBlKCJHcm91cCIpOworICAgICAgICAg ICAgYXJ0aXN0LnNldERpc2FtYmlndWF0aW9uKCJ0aGUgcmVhbCBvbmUiKTsKKyAgICAgICAgICAg IGFydGlzdC5zZXRDb3VudHJ5KCJBRiIpOworICAgICAgICAgICAgYXJ0aXN0LnNldEdlbmRlcigi bWFsZSIpOworICAgICAgICAgICAgVGFnTGlzdCB0YWdMaXN0ID0gb2YuY3JlYXRlVGFnTGlzdCgp OworICAgICAgICAgICAgVGFnIHRhZyA9IG9mLmNyZWF0ZVRhZygpOworICAgICAgICAgICAgdGFn LnNldE5hbWUoInRocmFzaCIpOworICAgICAgICAgICAgdGFnLnNldENvdW50KEJpZ0ludGVnZXIu dmFsdWVPZig1KSk7CisgICAgICAgICAgICB0YWdMaXN0LmdldFRhZygpLmFkZCh0YWcpOwogCi0g ICAgLy9HZW5lcmFsIFB1cnBvc2UgQXJ0aXN0Ci0gICAgewotICAgICAgTWJEb2N1bWVudCBkb2Mg PSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu QVJUSVNUX0lELCAiMjIyMjIyMjItMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfQUNDRU5ULCAiUmVww7pibGlj YSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNULCAiUmVww7pi bGljYSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJS ZXDDumJsaWNhIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTiwg IjE5OTktMDQiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUsICJH cm91cCIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVCwgInRo ZSByZWFsIG9uZSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09VTlRS WSwgIkFGIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsICJt YWxlIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJ0aHJhc2gi KTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiNSIpOwot ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAiZ8O8dGgiKTsKLSAgICAg IGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiMTEiKTsKLSAgICAgIGRv Yy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLklQSSwiMTAwMSIpOworICAgICAgICAgICAgdGFn ID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiZ8O8dGgiKTsKKyAg ICAgICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpKTsKKyAgICAgICAg ICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7CisgICAgICAgICAgICBhcnRpc3Quc2V0VGFn TGlzdCh0YWdMaXN0KTsKIAotICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVE b2N1bWVudCgpKTsKLSAgICB9CisgICAgICAgICAgICBJcGlMaXN0IGlwaUxpc3QgPSBvZi5jcmVh dGVJcGlMaXN0KCk7CisgICAgICAgICAgICBpcGlMaXN0LmdldElwaSgpLmFkZCgiMTAwMSIpOwor ICAgICAgICAgICAgYXJ0aXN0LnNldElwaUxpc3QoaXBpTGlzdCk7CiAKLSAgICAvL0dlbmVyYWwg UHVycG9zZSBBcnRpc3QKLSAgICB7Ci0gICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3Vt ZW50KCk7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQsICIz MzMzMzMzMy0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKLSAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9BQ0NFTlQsICJSZXDDumJsaWNlIik7Ci0gICAgICBk b2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QsICJSZXDDumJsaWNlIik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRSwgIlJlcMO6YmxpY2UiKTsK LSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkJFR0lOLCAiMTk5OS0wNCIpOwot ICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVFlQRSwgIkdyb3VwIik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULCAidGhlIHJlYWwgb25lIik7 Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT1VOVFJZLCAiQUYiKTsKLSAg ICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRFUiwgIm1hbGUiKTsKLSAgICAg IGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBRywgInRocmFzaCIpOwotICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHQ09VTlQsICI1Iik7Ci0gICAgICBkb2MuYWRk RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJnw7x0aCIpOwotICAgICAgZG9jLmFkZEZpZWxk KEFydGlzdEluZGV4RmllbGQuVEFHQ09VTlQsICIxMSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuSVBJLCIxMDAxIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0 aXN0SW5kZXhGaWVsZC5BUlRJU1RfU1RPUkUsIE1NRFNlcmlhbGl6ZXIuc2VyaWFsaXplKGFydGlz dCkpOworICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVu dCgpKTsKKyAgICAgICAgfQogCi0gICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2Vu ZURvY3VtZW50KCkpOwotICAgIH0KKyAgICAgICAgLy9HZW5lcmFsIFB1cnBvc2UgQXJ0aXN0Cisg ICAgICAgIHsKKyAgICAgICAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsK KyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRCwgIjIy MjIyMjIyLTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0FDQ0VOVCwgIlJlcMO6YmxpY2EiKTsKKyAg ICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgIlJlcMO6Ymxp Y2EiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1F LCAiUmVww7pibGljYSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQkVHSU4sICIxOTk5LTA0Iik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5k ZXhGaWVsZC5UWVBFLCAiR3JvdXAiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkNPTU1FTlQsICJ0aGUgcmVhbCBvbmUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkNPVU5UUlksICJBRiIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuR0VOREVSLCAibWFsZSIpOworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAidGhyYXNoIik7CisgICAgICAgICAgICBk b2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJnw7x0aCIpOworICAgICAgICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJLCAiMTAwMSIpOwogCi0gICAgLy9HZW5l cmFsIFB1cnBvc2UgQXJ0aXN0Ci0gICAgewotICAgICAgTWJEb2N1bWVudCBkb2MgPSBuZXcgTWJE b2N1bWVudCgpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lE LCAiNDQ0NDQ0NDQtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7Ci0gICAgICBkb2MuYWRk RmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfQUNDRU5ULCAiUmVww7pibGljIik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QsICJSZXDDumJsaWMiKTsKLSAg ICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlNPUlROQU1FLCAiUmVww7pibGljIik7 Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTiwgIjE5OTktMDQiKTsK LSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUsICJHcm91cCIpOwotICAg ICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVCwgInRoZSByZWFsIG9uZSIp OwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgIkFGIik7Ci0g ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsICJtYWxlIik7Ci0gICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJ0aHJhc2giKTsKLSAgICAgIGRv Yy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiNSIpOwotICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAiZ8O8dGgiKTsKLSAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiMTEiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChB cnRpc3RJbmRleEZpZWxkLklQSSwiMTAwMSIpOworICAgICAgICAgICAgQXJ0aXN0IGFydGlzdCA9 IG9mLmNyZWF0ZUFydGlzdCgpOworICAgICAgICAgICAgYXJ0aXN0LnNldElkKCIyMjIyMjIyMi0x Y2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXROYW1l KCJSZXB1YmxpY2EiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRTb3J0TmFtZSgiUmVwdWJsaWNh Iik7CisgICAgICAgICAgICBMaWZlU3BhbiBsaWZlc3BhbiA9IG9mLmNyZWF0ZUxpZmVTcGFuKCk7 CisgICAgICAgICAgICBsaWZlc3Bhbi5zZXRCZWdpbigiMTk5OS0wNCIpOworICAgICAgICAgICAg bGlmZXNwYW4uc2V0RW5kZWQoImZhbHNlIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0TGlmZVNw YW4obGlmZXNwYW4pOworICAgICAgICAgICAgYXJ0aXN0LnNldFR5cGUoIkdyb3VwIik7CisgICAg ICAgICAgICBhcnRpc3Quc2V0RGlzYW1iaWd1YXRpb24oInRoZSByZWFsIG9uZSIpOworICAgICAg ICAgICAgYXJ0aXN0LnNldENvdW50cnkoIkFGIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0R2Vu ZGVyKCJtYWxlIik7CisgICAgICAgICAgICBUYWdMaXN0IHRhZ0xpc3QgPSBvZi5jcmVhdGVUYWdM aXN0KCk7CisgICAgICAgICAgICBUYWcgdGFnID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAg ICB0YWcuc2V0TmFtZSgidGhyYXNoIik7CisgICAgICAgICAgICB0YWcuc2V0Q291bnQoQmlnSW50 ZWdlci52YWx1ZU9mKDUpKTsKKyAgICAgICAgICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7 CiAKLSAgICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0g ICAgfQorICAgICAgICAgICAgdGFnID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcu c2V0TmFtZSgiZ8O8dGgiKTsKKyAgICAgICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZh bHVlT2YoMTEpKTsKKyAgICAgICAgICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7CisgICAg ICAgICAgICBhcnRpc3Quc2V0VGFnTGlzdCh0YWdMaXN0KTsKIAotICAgIC8vRm9yIFBocmFzZSBT ZWFyY2hpbmcgVGVzdHMKLSAgICB7Ci0gICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3Vt ZW50KCk7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQsICI1 NTU1NTU1NS0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKLSAgICAgIGRvYy5hZGRGaWVs ZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9BQ0NFTlQsICJlY2hvICYgdGhlIGJ1bm55bWVuIik7 Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1QsICJlY2hvICYgdGhl IGJ1bm55bWVuIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFN RSwgImJ1bm55bWVuLCBlY2hvIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5CRUdJTiwgIjE5OTktMDQiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxk LlRZUEUsICJHcm91cCIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09N TUVOVCwgInRoZSByZWFsIG9uZSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQ09VTlRSWSwgIkFGIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5H RU5ERVIsICJtYWxlIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcs ICJ0aHJhc2giKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5U LCAiNSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAiZ8O8dGgi KTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiMTEiKTsK LSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLklQSSwiMTAwMSIpOworICAgICAg ICAgICAgSXBpTGlzdCBpcGlMaXN0ID0gb2YuY3JlYXRlSXBpTGlzdCgpOworICAgICAgICAgICAg aXBpTGlzdC5nZXRJcGkoKS5hZGQoIjEwMDEiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRJcGlM aXN0KGlwaUxpc3QpOwogCi0gICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2VuZURv Y3VtZW50KCkpOwotICAgIH0KKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLkFSVElTVF9TVE9SRSwgTU1EU2VyaWFsaXplci5zZXJpYWxpemUoYXJ0aXN0KSk7CisgICAg ICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2VuZURvY3VtZW50KCkpOworICAg ICAgICB9CiAKLSAgICAvL0ZvciBQaHJhc2UgU2VhcmNoaW5nIFRlc3RzCi0gICAgewotICAgICAg TWJEb2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuQVJUSVNUX0lELCAiNjY2NjY2NjYtMWNmMC00ZDFmLWFjYTctMmE2Zjg5 ZTM0YjM2Iik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfQUND RU5ULCAiZWNob2JlbGx5Iik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1QsICJlY2hvYmVsbHkiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxk LlNPUlROQU1FLCAiZWNob2JlbGx5Iik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhG aWVsZC5CRUdJTiwgIjE5OTktMDQiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLlRZUEUsICJHcm91cCIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu Q09NTUVOVCwgInRoZSByZWFsIG9uZSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuQ09VTlRSWSwgIkFGIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5HRU5ERVIsICJtYWxlIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5U QUcsICJ0aHJhc2giKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NP VU5ULCAiNSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAiZ8O8 dGgiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NPVU5ULCAiMTEi KTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLklQSSwiMTAwMSIpOworICAg ICAgICAvL0dlbmVyYWwgUHVycG9zZSBBcnRpc3QKKyAgICAgICAgeworICAgICAgICAgICAgTWJE b2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxk KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELCAiMzMzMzMzMzMtMWNmMC00ZDFmLWFjYTctMmE2 Zjg5ZTM0YjM2Iik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5B UlRJU1RfQUNDRU5ULCAiUmVww7pibGljZSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuQVJUSVNULCAiUmVww7pibGljZSIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJSZXDDumJsaWNlIik7CisgICAgICAg ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5CRUdJTiwgIjE5OTktMDQiKTsKKyAg ICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUsICJHcm91cCIpOwor ICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09NTUVOVCwgInRoZSBy ZWFsIG9uZSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQ09V TlRSWSwgIkFGIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5H RU5ERVIsICJtYWxlIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5UQUcsICJ0aHJhc2giKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLlRBRywgImfDvHRoIik7CisgICAgICAgICAgICA7CisgICAgICAgICAgICBkb2MuYWRkRmll bGQoQXJ0aXN0SW5kZXhGaWVsZC5JUEksICIxMDAxIik7CiAKLSAgICAgIHdyaXRlci5hZGREb2N1 bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAgQXJ0aXN0 IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOworICAgICAgICAgICAgYXJ0aXN0LnNldElkKCIz MzMzMzMzMy0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiKTsKKyAgICAgICAgICAgIGFydGlz dC5zZXROYW1lKCJSZXDDumJsaWNlIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0U29ydE5hbWUo IlJlcMO6YmxpY2UiKTsKKyAgICAgICAgICAgIExpZmVTcGFuIGxpZmVzcGFuID0gb2YuY3JlYXRl TGlmZVNwYW4oKTsKKyAgICAgICAgICAgIGxpZmVzcGFuLnNldEJlZ2luKCIxOTk5LTA0Iik7Cisg ICAgICAgICAgICBsaWZlc3Bhbi5zZXRFbmRlZCgiZmFsc2UiKTsKKyAgICAgICAgICAgIGFydGlz dC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7CisgICAgICAgICAgICBhcnRpc3Quc2V0VHlwZSgiR3Jv dXAiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXREaXNhbWJpZ3VhdGlvbigidGhlIHJlYWwgb25l Iik7CisgICAgICAgICAgICBhcnRpc3Quc2V0Q291bnRyeSgiQUYiKTsKKyAgICAgICAgICAgIGFy dGlzdC5zZXRHZW5kZXIoIm1hbGUiKTsKKyAgICAgICAgICAgIFRhZ0xpc3QgdGFnTGlzdCA9IG9m LmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAgICAgIFRhZyB0YWcgPSBvZi5jcmVhdGVUYWcoKTsK KyAgICAgICAgICAgIHRhZy5zZXROYW1lKCJ0aHJhc2giKTsKKyAgICAgICAgICAgIHRhZy5zZXRD b3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoNSkpOworICAgICAgICAgICAgdGFnTGlzdC5nZXRUYWco KS5hZGQodGFnKTsKIAotICAgIHsKLSAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1l bnQoKTsKLSAgICAgIGRvYy5hZGRGaWVsZChNZXRhSW5kZXhGaWVsZC5NRVRBLCBNZXRhSW5kZXhG aWVsZC5NRVRBX1ZBTFVFKTsKLSAgICAgICAgZG9jLmFkZE51bWVyaWNGaWVsZChNZXRhSW5kZXhG aWVsZC5MQVNUX1VQREFURUQsIG5ldyBEYXRlKCkuZ2V0VGltZSgpKTsKLSAgICAgIHdyaXRlci5h ZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAg dGFnID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiZ8O8dGgiKTsK KyAgICAgICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpKTsKKyAgICAg ICAgICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7CisgICAgICAgICAgICBhcnRpc3Quc2V0 VGFnTGlzdCh0YWdMaXN0KTsKIAotICAgIHdyaXRlci5jbG9zZSgpOwotICAgIFNlYXJjaGVyTWFu YWdlciBzZWFyY2hlck1hbmFnZXIgPSBuZXcgU2VhcmNoZXJNYW5hZ2VyKHJhbURpciwgbmV3IE11 c2ljQnJhaW56U2VhcmNoZXJGYWN0b3J5KFJlc291cmNlVHlwZS5BUlRJU1QpKTsKLSAgICBzZCA9 IG5ldyBBcnRpc3REaXNtYXhTZWFyY2gobmV3IEFydGlzdFNlYXJjaChzZWFyY2hlck1hbmFnZXIp KTsKLSAgfQorICAgICAgICAgICAgSXBpTGlzdCBpcGlMaXN0ID0gb2YuY3JlYXRlSXBpTGlzdCgp OworICAgICAgICAgICAgaXBpTGlzdC5nZXRJcGkoKS5hZGQoIjEwMDEiKTsKKyAgICAgICAgICAg IGFydGlzdC5zZXRJcGlMaXN0KGlwaUxpc3QpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl c3RGaW5kQXJ0aXN0RGlzbWF4MSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NUT1JFLCBNTURTZXJpYWxpemVyLnNl cmlhbGl6ZShhcnRpc3QpKTsKIAotICAgIFNlYXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIg PSBzZC5nZXRTZWFyY2hlck1hbmFnZXIoKTsKLSAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0g c2VhcmNoZXJNYW5hZ2VyLmFjcXVpcmUoKTsKLSAgICB0cnkgewotICAgICAgUXVlcnkgcSA9IHNk LnBhcnNlUXVlcnkoIlJlcHVibGljYSIpOwotICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNo ZXIuc2VhcmNoKHEsIDEwKTsKLSAgICAgIGZvcihTY29yZURvYyBtYXRjaDp0b3Bkb2NzLnNjb3Jl RG9jcykKLSAgICAgIHsKLSAgICAgICAgRXhwbGFuYXRpb24gZXhwbGFpbiA9IHNlYXJjaGVyLmV4 cGxhaW4ocSwgbWF0Y2guZG9jKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2NObzoi K21hdGNoLmRvYysiOiIrbWF0Y2guc2NvcmUrIjoiK3NlYXJjaGVyLmRvYyhtYXRjaC5kb2MpLmdl dEZpZWxkKCJhcmlkIikuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRs bihleHBsYWluKTsKLSAgICAgIH0KLSAgICAgIGFzc2VydEVxdWFscyg0LCB0b3Bkb2NzLnNjb3Jl RG9jcy5sZW5ndGgpOworICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNl bmVEb2N1bWVudCgpKTsKKyAgICAgICAgfQogCi0gICAgICBvcmcuYXBhY2hlLmx1Y2VuZS5kb2N1 bWVudC5Eb2N1bWVudCBkb2MgID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzBdLmRv Yyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIjExMTExMTExLTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUz NGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0TmFtZSgpKSk7Ci0g ICAgICBkb2MgID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzFdLmRvYyk7Ci0gICAg ICBhc3NlcnRFcXVhbHMoIjIyMjIyMjIyLTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRv Yy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0TmFtZSgpKSk7Ci0gICAgfSBmaW5h bGx5IHsKLSAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNlKHNlYXJjaGVyKTsKKyAgICAgICAg Ly9HZW5lcmFsIFB1cnBvc2UgQXJ0aXN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE1iRG9jdW1l bnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRp c3RJbmRleEZpZWxkLkFSVElTVF9JRCwgIjQ0NDQ0NDQ0LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUz NGIzNiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNU X0FDQ0VOVCwgIlJlcMO6YmxpYyIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuQVJUSVNULCAiUmVww7pibGljIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQo QXJ0aXN0SW5kZXhGaWVsZC5TT1JUTkFNRSwgIlJlcMO6YmxpYyIpOworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQkVHSU4sICIxOTk5LTA0Iik7CisgICAgICAgICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAiR3JvdXAiKTsKKyAgICAgICAg ICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQsICJ0aGUgcmVhbCBvbmUi KTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNPVU5UUlksICJB RiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuR0VOREVSLCAi bWFsZSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAi dGhyYXNoIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcs ICJnw7x0aCIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJ LCAiMTAwMSIpOworCisgICAgICAgICAgICBBcnRpc3QgYXJ0aXN0ID0gb2YuY3JlYXRlQXJ0aXN0 KCk7CisgICAgICAgICAgICBhcnRpc3Quc2V0SWQoIjQ0NDQ0NDQ0LTFjZjAtNGQxZi1hY2E3LTJh NmY4OWUzNGIzNiIpOworICAgICAgICAgICAgYXJ0aXN0LnNldE5hbWUoIlJlcMO6YmxpYyIpOwor ICAgICAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKCJSZXDDumJsaWMiKTsKKyAgICAgICAgICAg IExpZmVTcGFuIGxpZmVzcGFuID0gb2YuY3JlYXRlTGlmZVNwYW4oKTsKKyAgICAgICAgICAgIGxp ZmVzcGFuLnNldEJlZ2luKCIxOTk5LTA0Iik7CisgICAgICAgICAgICBsaWZlc3Bhbi5zZXRFbmRl ZCgiZmFsc2UiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7Cisg ICAgICAgICAgICBhcnRpc3Quc2V0VHlwZSgiR3JvdXAiKTsKKyAgICAgICAgICAgIGFydGlzdC5z ZXREaXNhbWJpZ3VhdGlvbigidGhlIHJlYWwgb25lIik7CisgICAgICAgICAgICBhcnRpc3Quc2V0 Q291bnRyeSgiQUYiKTsKKyAgICAgICAgICAgIGFydGlzdC5zZXRHZW5kZXIoIm1hbGUiKTsKKyAg ICAgICAgICAgIFRhZ0xpc3QgdGFnTGlzdCA9IG9mLmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAg ICAgIFRhZyB0YWcgPSBvZi5jcmVhdGVUYWcoKTsKKyAgICAgICAgICAgIHRhZy5zZXROYW1lKCJ0 aHJhc2giKTsKKyAgICAgICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoNSkp OworICAgICAgICAgICAgdGFnTGlzdC5nZXRUYWcoKS5hZGQodGFnKTsKKworICAgICAgICAgICAg dGFnID0gb2YuY3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiZ8O8dGgiKTsK KyAgICAgICAgICAgIHRhZy5zZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpKTsKKyAgICAg ICAgICAgIHRhZ0xpc3QuZ2V0VGFnKCkuYWRkKHRhZyk7CisgICAgICAgICAgICBhcnRpc3Quc2V0 VGFnTGlzdCh0YWdMaXN0KTsKKworICAgICAgICAgICAgSXBpTGlzdCBpcGlMaXN0ID0gb2YuY3Jl YXRlSXBpTGlzdCgpOworICAgICAgICAgICAgaXBpTGlzdC5nZXRJcGkoKS5hZGQoIjEwMDEiKTsK KyAgICAgICAgICAgIGFydGlzdC5zZXRJcGlMaXN0KGlwaUxpc3QpOworCisgICAgICAgICAgICBk b2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfU1RPUkUsIE1NRFNlcmlhbGl6ZXIu c2VyaWFsaXplKGFydGlzdCkpOworICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5n ZXRMdWNlbmVEb2N1bWVudCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vRm9yIFBocmFzZSBT ZWFyY2hpbmcgVGVzdHMKKyAgICAgICAgeworICAgICAgICAgICAgTWJEb2N1bWVudCBkb2MgPSBu ZXcgTWJEb2N1bWVudCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQVJUSVNUX0lELCAiNTU1NTU1NTUtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7Cisg ICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfQUNDRU5ULCAi ZWNobyAmIHRoZSBidW5ueW1lbiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuQVJUSVNULCAiZWNobyAmIHRoZSBidW5ueW1lbiIpOworICAgICAgICAgICAgZG9j LmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJidW5ueW1lbiwgZWNobyIpOwor ICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuQkVHSU4sICIxOTk5LTA0 Iik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UWVBFLCAiR3Jv dXAiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkNPTU1FTlQs ICJ0aGUgcmVhbCBvbmUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZp ZWxkLkNPVU5UUlksICJBRiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuR0VOREVSLCAibWFsZSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdElu ZGV4RmllbGQuVEFHLCAidGhyYXNoIik7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0 SW5kZXhGaWVsZC5UQUcsICJnw7x0aCIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlz dEluZGV4RmllbGQuSVBJLCAiMTAwMSIpOworCisgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1l bnQoZG9jLmdldEx1Y2VuZURvY3VtZW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy9Gb3Ig UGhyYXNlIFNlYXJjaGluZyBUZXN0cworICAgICAgICB7CisgICAgICAgICAgICBNYkRvY3VtZW50 IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0 SW5kZXhGaWVsZC5BUlRJU1RfSUQsICI2NjY2NjY2Ni0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRi MzYiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9B Q0NFTlQsICJlY2hvYmVsbHkiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRl eEZpZWxkLkFSVElTVCwgImVjaG9iZWxseSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFy dGlzdEluZGV4RmllbGQuU09SVE5BTUUsICJlY2hvYmVsbHkiKTsKKyAgICAgICAgICAgIGRvYy5h ZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkJFR0lOLCAiMTk5OS0wNCIpOworICAgICAgICAgICAg ZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVFlQRSwgIkdyb3VwIik7CisgICAgICAgICAg ICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT01NRU5ULCAidGhlIHJlYWwgb25lIik7 CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5DT1VOVFJZLCAiQUYi KTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRFUiwgIm1h bGUiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBRywgInRo cmFzaCIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVEFHLCAi Z8O8dGgiKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLklQSSwg IjEwMDEiKTsKKworICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVE b2N1bWVudCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIE1iRG9jdW1l bnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChNZXRh SW5kZXhGaWVsZC5NRVRBLCBNZXRhSW5kZXhGaWVsZC5NRVRBX1ZBTFVFKTsKKyAgICAgICAgICAg IGRvYy5hZGROdW1lcmljRmllbGQoTWV0YUluZGV4RmllbGQuTEFTVF9VUERBVEVELCBuZXcgRGF0 ZSgpLmdldFRpbWUoKSk7CisgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1 Y2VuZURvY3VtZW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgd3JpdGVyLmNsb3NlKCk7Cisg ICAgICAgIFNlYXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIgPSBuZXcgU2VhcmNoZXJNYW5h Z2VyKHJhbURpciwgbmV3IE11c2ljQnJhaW56U2VhcmNoZXJGYWN0b3J5KFJlc291cmNlVHlwZS5B UlRJU1QpKTsKKyAgICAgICAgc2QgPSBuZXcgQXJ0aXN0RGlzbWF4U2VhcmNoKG5ldyBBcnRpc3RT ZWFyY2goc2VhcmNoZXJNYW5hZ2VyKSk7CiAgICAgfQotICB9CiAKLSAgQFRlc3QKLSAgcHVibGlj IHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXgyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRl c3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21heDEoKSB0aHJvd3MgRXhjZXB0 aW9uIHsKIAotICAgIFNlYXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIgPSBzZC5nZXRTZWFy Y2hlck1hbmFnZXIoKTsKLSAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gc2VhcmNoZXJNYW5h Z2VyLmFjcXVpcmUoKTsKLSAgICB0cnkgewotICAgICAgUXVlcnkgcSA9IHNkLnBhcnNlUXVlcnko IlJlcMO6YmxpY2EiKTsKLSAgICAgIFRvcERvY3MgdG9wZG9jcyA9IHNlYXJjaGVyLnNlYXJjaChx LCAxMCk7Ci0gICAgICBmb3IoU2NvcmVEb2MgbWF0Y2g6dG9wZG9jcy5zY29yZURvY3MpCi0gICAg ICB7Ci0gICAgICAgIEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFyY2hlci5leHBsYWluKHEsIG1h dGNoLmRvYyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jTm86IittYXRjaC5kb2Mr IjoiK21hdGNoLnNjb3JlKyI6IitzZWFyY2hlci5kb2MobWF0Y2guZG9jKS5nZXRGaWVsZCgiYXJp ZCIpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXhwbGFpbik7 Ci0gICAgICB9Ci0gICAgICBhc3NlcnRFcXVhbHMoNCwgdG9wZG9jcy5zY29yZURvY3MubGVuZ3Ro KTsKKyAgICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNkLmdldFNlYXJj aGVyTWFuYWdlcigpOworICAgICAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gc2VhcmNoZXJN YW5hZ2VyLmFjcXVpcmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFF1ZXJ5IHEgPSBz ZC5wYXJzZVF1ZXJ5KCJSZXB1YmxpY2EiKTsKKyAgICAgICAgICAgIFRvcERvY3MgdG9wZG9jcyA9 IHNlYXJjaGVyLnNlYXJjaChxLCAxMCk7CisgICAgICAgICAgICBmb3IgKFNjb3JlRG9jIG1hdGNo IDogdG9wZG9jcy5zY29yZURvY3MpIHsKKyAgICAgICAgICAgICAgICBFeHBsYW5hdGlvbiBleHBs YWluID0gc2VhcmNoZXIuZXhwbGFpbihxLCBtYXRjaC5kb2MpOworICAgICAgICAgICAgICAgIFN5 c3RlbS5vdXQucHJpbnRsbigiRG9jTm86IiArIG1hdGNoLmRvYyArICI6IiArIG1hdGNoLnNjb3Jl ICsgIjoiICsgc2VhcmNoZXIuZG9jKG1hdGNoLmRvYykuZ2V0RmllbGQoImFyaWQiKS5zdHJpbmdW YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXhwbGFpbik7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgdG9wZG9jcy5zY29yZURv Y3MubGVuZ3RoKTsKIAotICAgICAgb3JnLmFwYWNoZS5sdWNlbmUuZG9jdW1lbnQuRG9jdW1lbnQg ZG9jICA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1swXS5kb2MpOwotICAgICAgYXNz ZXJ0RXF1YWxzKCIyMjIyMjIyMi0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0 KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkpOwotICAgICAgZG9jICA9IHNl YXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1sxXS5kb2MpOwotICAgICAgYXNzZXJ0RXF1YWxz KCIxMTExMTExMS0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdElu ZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkpOwotICAgICAgZG9jICA9IHNlYXJjaGVyLmRv Yyh0b3Bkb2NzLnNjb3JlRG9jc1syXS5kb2MpOwotICAgICAgYXNzZXJ0RXF1YWxzKCIzMzMzMzMz My0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQu QVJUSVNUX0lELmdldE5hbWUoKSkpOwotICAgICAgZG9jICA9IHNlYXJjaGVyLmRvYyh0b3Bkb2Nz LnNjb3JlRG9jc1szXS5kb2MpOwotICAgICAgYXNzZXJ0RXF1YWxzKCI0NDQ0NDQ0NC0xY2YwLTRk MWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lE LmdldE5hbWUoKSkpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBzZWFyY2hlck1hbmFnZXIucmVs ZWFzZShzZWFyY2hlcik7CisgICAgICAgICAgICBvcmcuYXBhY2hlLmx1Y2VuZS5kb2N1bWVudC5E b2N1bWVudCBkb2MgPSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURvY3NbMF0uZG9jKTsKKyAg ICAgICAgICAgIGFzc2VydEVxdWFscygiMTExMTExMTEtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0 YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpKTsKKyAg ICAgICAgICAgIGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1sxXS5kb2MpOwor ICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMjIyMjIyMi0xY2YwLTRkMWYtYWNhNy0yYTZmODll MzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkpOwor ICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgc2VhcmNoZXJNYW5hZ2VyLnJlbGVhc2Uo c2VhcmNoZXIpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZv aWQgdGVzdEZpbmRBcnRpc3REaXNtYXhGdXp6eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBU ZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXgyKCkgdGhyb3dzIEV4Y2Vw dGlvbiB7CiAKLSAgICBTZWFyY2hlck1hbmFnZXIgc2VhcmNoZXJNYW5hZ2VyID0gc2QuZ2V0U2Vh cmNoZXJNYW5hZ2VyKCk7Ci0gICAgSW5kZXhTZWFyY2hlciBzZWFyY2hlciA9IHNlYXJjaGVyTWFu YWdlci5hY3F1aXJlKCk7Ci0gICAgdHJ5IHsKLSAgICAgIFF1ZXJ5IHEgPSBzZC5wYXJzZVF1ZXJ5 KCJSZXDDumJsaWMiKTsKLSAgICAgIFRvcERvY3MgdG9wZG9jcyA9IHNlYXJjaGVyLnNlYXJjaChx LCAxMCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoNCwgdG9wZG9jcy5zY29yZURvY3MubGVuZ3RoKTsK LSAgICAgIGZvcihTY29yZURvYyBtYXRjaDp0b3Bkb2NzLnNjb3JlRG9jcykKLSAgICAgIHsKLSAg ICAgICAgRXhwbGFuYXRpb24gZXhwbGFpbiA9IHNlYXJjaGVyLmV4cGxhaW4ocSwgbWF0Y2guZG9j KTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2NObzoiK21hdGNoLmRvYysiOiIrbWF0 Y2guc2NvcmUrIjoiK3NlYXJjaGVyLmRvYyhtYXRjaC5kb2MpLmdldEZpZWxkKCJhcmlkIikuc3Ry aW5nVmFsdWUoKSsiOiIrZXhwbGFpbik7Ci0gICAgICB9CisgICAgICAgIFNlYXJjaGVyTWFuYWdl ciBzZWFyY2hlck1hbmFnZXIgPSBzZC5nZXRTZWFyY2hlck1hbmFnZXIoKTsKKyAgICAgICAgSW5k ZXhTZWFyY2hlciBzZWFyY2hlciA9IHNlYXJjaGVyTWFuYWdlci5hY3F1aXJlKCk7CisgICAgICAg IHRyeSB7CisgICAgICAgICAgICBRdWVyeSBxID0gc2QucGFyc2VRdWVyeSgiUmVww7pibGljYSIp OworICAgICAgICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNoZXIuc2VhcmNoKHEsIDEwKTsK KyAgICAgICAgICAgIGZvciAoU2NvcmVEb2MgbWF0Y2ggOiB0b3Bkb2NzLnNjb3JlRG9jcykgewor ICAgICAgICAgICAgICAgIEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFyY2hlci5leHBsYWluKHEs IG1hdGNoLmRvYyk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2NObzoi ICsgbWF0Y2guZG9jICsgIjoiICsgbWF0Y2guc2NvcmUgKyAiOiIgKyBzZWFyY2hlci5kb2MobWF0 Y2guZG9jKS5nZXRGaWVsZCgiYXJpZCIpLnN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgICAg IFN5c3RlbS5vdXQucHJpbnRsbihleHBsYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGFzc2VydEVxdWFscyg0LCB0b3Bkb2NzLnNjb3JlRG9jcy5sZW5ndGgpOwogCi0gICAgICBvcmcu YXBhY2hlLmx1Y2VuZS5kb2N1bWVudC5Eb2N1bWVudCBkb2MgID0gc2VhcmNoZXIuZG9jKHRvcGRv Y3Muc2NvcmVEb2NzWzBdLmRvYyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIjQ0NDQ0NDQ0LTFjZjAt NGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1Rf SUQuZ2V0TmFtZSgpKSk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIHNlYXJjaGVyTWFuYWdlci5y ZWxlYXNlKHNlYXJjaGVyKTsKKyAgICAgICAgICAgIG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50 LkRvY3VtZW50IGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1swXS5kb2MpOwor ICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMjIyMjIyMi0xY2YwLTRkMWYtYWNhNy0yYTZmODll MzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkpOwor ICAgICAgICAgICAgZG9jID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzFdLmRvYyk7 CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjExMTExMTExLTFjZjAtNGQxZi1hY2E3LTJhNmY4 OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0TmFtZSgpKSk7 CisgICAgICAgICAgICBkb2MgPSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURvY3NbMl0uZG9j KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiMzMzMzMzMzMtMWNmMC00ZDFmLWFjYTctMmE2 Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkp KTsKKyAgICAgICAgICAgIGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1szXS5k b2MpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI0NDQ0NDQ0NC0xY2YwLTRkMWYtYWNhNy0y YTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUo KSkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgc2VhcmNoZXJNYW5hZ2VyLnJl bGVhc2Uoc2VhcmNoZXIpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgQFRlc3QKLSAgcHVi bGljIHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXhXaWxkY2FyZCgpIHRocm93cyBFeGNlcHRpb24g ewotICAgIFNlYXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIgPSBzZC5nZXRTZWFyY2hlck1h bmFnZXIoKTsKLSAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gc2VhcmNoZXJNYW5hZ2VyLmFj cXVpcmUoKTsKLSAgICB0cnkgewotICAgICAgUXVlcnkgcSA9IHNkLnBhcnNlUXVlcnkoIlJlcMO6 YiIpOwotICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNoZXIuc2VhcmNoKHEsIDEwKTsKLSAg ICAgIGFzc2VydEVxdWFscyg0LCB0b3Bkb2NzLnNjb3JlRG9jcy5sZW5ndGgpOwotICAgICAgZm9y KFNjb3JlRG9jIG1hdGNoOnRvcGRvY3Muc2NvcmVEb2NzKQotICAgICAgewotICAgICAgICBFeHBs YW5hdGlvbiBleHBsYWluID0gc2VhcmNoZXIuZXhwbGFpbihxLCBtYXRjaC5kb2MpOwotICAgICAg ICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY05vOiIrbWF0Y2guZG9jKyI6IittYXRjaC5zY29yZSsi OiIrc2VhcmNoZXIuZG9jKG1hdGNoLmRvYykuZ2V0RmllbGQoImFyaWQiKS5zdHJpbmdWYWx1ZSgp KyI6IitleHBsYWluKTsKLSAgICAgIH0KLSAgICB9IGZpbmFsbHkgewotICAgICAgc2VhcmNoZXJN YW5hZ2VyLnJlbGVhc2Uoc2VhcmNoZXIpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVz dEZpbmRBcnRpc3REaXNtYXhGdXp6eSgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIFNl YXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIgPSBzZC5nZXRTZWFyY2hlck1hbmFnZXIoKTsK KyAgICAgICAgSW5kZXhTZWFyY2hlciBzZWFyY2hlciA9IHNlYXJjaGVyTWFuYWdlci5hY3F1aXJl KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBRdWVyeSBxID0gc2QucGFyc2VRdWVyeSgi UmVww7pibGljIik7CisgICAgICAgICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hlci5zZWFy Y2gocSwgMTApOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHRvcGRvY3Muc2NvcmVEb2Nz Lmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKFNjb3JlRG9jIG1hdGNoIDogdG9wZG9jcy5zY29y ZURvY3MpIHsKKyAgICAgICAgICAgICAgICBFeHBsYW5hdGlvbiBleHBsYWluID0gc2VhcmNoZXIu ZXhwbGFpbihxLCBtYXRjaC5kb2MpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs bigiRG9jTm86IiArIG1hdGNoLmRvYyArICI6IiArIG1hdGNoLnNjb3JlICsgIjoiICsgc2VhcmNo ZXIuZG9jKG1hdGNoLmRvYykuZ2V0RmllbGQoImFyaWQiKS5zdHJpbmdWYWx1ZSgpICsgIjoiICsg ZXhwbGFpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9yZy5hcGFjaGUubHVjZW5l LmRvY3VtZW50LkRvY3VtZW50IGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1sw XS5kb2MpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI0NDQ0NDQ0NC0xY2YwLTRkMWYtYWNh Ny0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5h bWUoKSkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgc2VhcmNoZXJNYW5hZ2Vy LnJlbGVhc2Uoc2VhcmNoZXIpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgQFRlc3QKLSAg cHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXhUb29TaG9ydEZvcldpbGRjYXJkKCkgdGhy b3dzIEV4Y2VwdGlvbiB7Ci0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNk LmdldFNlYXJjaGVyTWFuYWdlcigpOwotICAgIEluZGV4U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFy Y2hlck1hbmFnZXIuYWNxdWlyZSgpOwotICAgIHRyeSB7Ci0gICAgICBRdWVyeSBxID0gc2QucGFy c2VRdWVyeSgiUmVwIik7Ci0gICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hlci5zZWFyY2go cSwgMTApOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIHRvcGRvY3Muc2NvcmVEb2NzLmxlbmd0aCk7 Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNlKHNlYXJjaGVy KTsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0RGlzbWF4V2lsZGNh cmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVy TWFuYWdlciA9IHNkLmdldFNlYXJjaGVyTWFuYWdlcigpOworICAgICAgICBJbmRleFNlYXJjaGVy IHNlYXJjaGVyID0gc2VhcmNoZXJNYW5hZ2VyLmFjcXVpcmUoKTsKKyAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgIFF1ZXJ5IHEgPSBzZC5wYXJzZVF1ZXJ5KCJSZXDDumIiKTsKKyAgICAgICAgICAg IFRvcERvY3MgdG9wZG9jcyA9IHNlYXJjaGVyLnNlYXJjaChxLCAxMCk7CisgICAgICAgICAgICBh c3NlcnRFcXVhbHMoNCwgdG9wZG9jcy5zY29yZURvY3MubGVuZ3RoKTsKKyAgICAgICAgICAgIGZv ciAoU2NvcmVEb2MgbWF0Y2ggOiB0b3Bkb2NzLnNjb3JlRG9jcykgeworICAgICAgICAgICAgICAg IEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFyY2hlci5leHBsYWluKHEsIG1hdGNoLmRvYyk7Cisg ICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2NObzoiICsgbWF0Y2guZG9jICsg IjoiICsgbWF0Y2guc2NvcmUgKyAiOiIgKyBzZWFyY2hlci5kb2MobWF0Y2guZG9jKS5nZXRGaWVs ZCgiYXJpZCIpLnN0cmluZ1ZhbHVlKCkgKyAiOiIgKyBleHBsYWluKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNl KHNlYXJjaGVyKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2 b2lkIHRlc3RGaW5kQXJ0aXN0RGlzbWF4UGhyYXNlRnV6enkoKSB0aHJvd3MgRXhjZXB0aW9uIHsK KyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0RGlzbWF4VG9vU2hvcnRG b3JXaWxkY2FyZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTZWFyY2hlck1hbmFnZXIg c2VhcmNoZXJNYW5hZ2VyID0gc2QuZ2V0U2VhcmNoZXJNYW5hZ2VyKCk7CisgICAgICAgIEluZGV4 U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFyY2hlck1hbmFnZXIuYWNxdWlyZSgpOworICAgICAgICB0 cnkgeworICAgICAgICAgICAgUXVlcnkgcSA9IHNkLnBhcnNlUXVlcnkoIlJlcCIpOworICAgICAg ICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNoZXIuc2VhcmNoKHEsIDEwKTsKKyAgICAgICAg ICAgIGFzc2VydEVxdWFscygwLCB0b3Bkb2NzLnNjb3JlRG9jcy5sZW5ndGgpOworICAgICAgICB9 IGZpbmFsbHkgeworICAgICAgICAgICAgc2VhcmNoZXJNYW5hZ2VyLnJlbGVhc2Uoc2VhcmNoZXIp OworICAgICAgICB9CisgICAgfQogCi0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdl ciA9IHNkLmdldFNlYXJjaGVyTWFuYWdlcigpOwotICAgIEluZGV4U2VhcmNoZXIgc2VhcmNoZXIg PSBzZWFyY2hlck1hbmFnZXIuYWNxdWlyZSgpOwotICAgIHRyeSB7Ci0gICAgICBRdWVyeSBxID0g c2QucGFyc2VRdWVyeSgiRWNobyBidW5uZXltZW4iKTsKLSAgICAgIFRvcERvY3MgdG9wZG9jcyA9 IHNlYXJjaGVyLnNlYXJjaChxLCAxMCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMiwgdG9wZG9jcy5z Y29yZURvY3MubGVuZ3RoKTsKLSAgICAgIGZvcihTY29yZURvYyBtYXRjaDp0b3Bkb2NzLnNjb3Jl RG9jcykKLSAgICAgIHsKLSAgICAgICAgRXhwbGFuYXRpb24gZXhwbGFpbiA9IHNlYXJjaGVyLmV4 cGxhaW4ocSwgbWF0Y2guZG9jKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2NObzoi K21hdGNoLmRvYysiOiIrbWF0Y2guc2NvcmUrIjoiK3NlYXJjaGVyLmRvYyhtYXRjaC5kb2MpLmdl dEZpZWxkKCJhcmlkIikuc3RyaW5nVmFsdWUoKSsiOiIrZXhwbGFpbik7Ci0gICAgICB9CisgICAg QFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21heFBocmFzZUZ1enp5KCkg dGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgIG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50LkRv Y3VtZW50IGRvYyAgPSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURvY3NbMF0uZG9jKTsKLSAg ICAgIGFzc2VydEVxdWFscygiNTU1NTU1NTUtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iiwg ZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpKTsKKyAgICAgICAg U2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNkLmdldFNlYXJjaGVyTWFuYWdlcigp OworICAgICAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gc2VhcmNoZXJNYW5hZ2VyLmFjcXVp cmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFF1ZXJ5IHEgPSBzZC5wYXJzZVF1ZXJ5 KCJFY2hvIGJ1bm5leW1lbiIpOworICAgICAgICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNo ZXIuc2VhcmNoKHEsIDEwKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCB0b3Bkb2NzLnNj b3JlRG9jcy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChTY29yZURvYyBtYXRjaCA6IHRvcGRv Y3Muc2NvcmVEb2NzKSB7CisgICAgICAgICAgICAgICAgRXhwbGFuYXRpb24gZXhwbGFpbiA9IHNl YXJjaGVyLmV4cGxhaW4ocSwgbWF0Y2guZG9jKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0 LnByaW50bG4oIkRvY05vOiIgKyBtYXRjaC5kb2MgKyAiOiIgKyBtYXRjaC5zY29yZSArICI6IiAr IHNlYXJjaGVyLmRvYyhtYXRjaC5kb2MpLmdldEZpZWxkKCJhcmlkIikuc3RyaW5nVmFsdWUoKSAr ICI6IiArIGV4cGxhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICBkb2MgID0gc2VhcmNoZXIu ZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzFdLmRvYyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIjY2NjY2 NjY2LTFjZjAtNGQxZi1hY2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVs ZC5BUlRJU1RfSUQuZ2V0TmFtZSgpKSk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIHNlYXJjaGVy TWFuYWdlci5yZWxlYXNlKHNlYXJjaGVyKTsKKyAgICAgICAgICAgIG9yZy5hcGFjaGUubHVjZW5l LmRvY3VtZW50LkRvY3VtZW50IGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1sw XS5kb2MpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI1NTU1NTU1NS0xY2YwLTRkMWYtYWNh Ny0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5h bWUoKSkpOworCisgICAgICAgICAgICBkb2MgPSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURv Y3NbMV0uZG9jKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiNjY2NjY2NjYtMWNmMC00ZDFm LWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5n ZXROYW1lKCkpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHNlYXJjaGVyTWFu YWdlci5yZWxlYXNlKHNlYXJjaGVyKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIEBUZXN0 Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0RGlzbWF4UGhyYXNlRnV6enkyKCkgdGhyb3dz IEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERp c21heFBocmFzZUZ1enp5MigpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgU2VhcmNoZXJNYW5h Z2VyIHNlYXJjaGVyTWFuYWdlciA9IHNkLmdldFNlYXJjaGVyTWFuYWdlcigpOwotICAgIEluZGV4 U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFyY2hlck1hbmFnZXIuYWNxdWlyZSgpOwotICAgIHRyeSB7 Ci0gICAgICBRdWVyeSBxID0gc2QucGFyc2VRdWVyeSgiRWNobyAmIHRoZSBidW5ueW1lbiIpOwot ICAgICAgVG9wRG9jcyB0b3Bkb2NzID0gc2VhcmNoZXIuc2VhcmNoKHEsIDEwKTsKLSAgICAgIGFz c2VydEVxdWFscygyLCB0b3Bkb2NzLnNjb3JlRG9jcy5sZW5ndGgpOwotICAgICAgZm9yKFNjb3Jl RG9jIG1hdGNoOnRvcGRvY3Muc2NvcmVEb2NzKQotICAgICAgewotICAgICAgICBFeHBsYW5hdGlv biBleHBsYWluID0gc2VhcmNoZXIuZXhwbGFpbihxLCBtYXRjaC5kb2MpOwotICAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oIkRvY05vOiIrbWF0Y2guZG9jKyI6IittYXRjaC5zY29yZSsiOiIrc2Vh cmNoZXIuZG9jKG1hdGNoLmRvYykuZ2V0RmllbGQoImFyaWQiKS5zdHJpbmdWYWx1ZSgpKyI6Iitl eHBsYWluKTsKLSAgICAgIH0KKyAgICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdl ciA9IHNkLmdldFNlYXJjaGVyTWFuYWdlcigpOworICAgICAgICBJbmRleFNlYXJjaGVyIHNlYXJj aGVyID0gc2VhcmNoZXJNYW5hZ2VyLmFjcXVpcmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg ICAgIFF1ZXJ5IHEgPSBzZC5wYXJzZVF1ZXJ5KCJFY2hvICYgdGhlIGJ1bm55bWVuIik7CisgICAg ICAgICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hlci5zZWFyY2gocSwgMTApOworICAgICAg ICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRvcGRvY3Muc2NvcmVEb2NzLmxlbmd0aCk7CisgICAgICAg ICAgICBmb3IgKFNjb3JlRG9jIG1hdGNoIDogdG9wZG9jcy5zY29yZURvY3MpIHsKKyAgICAgICAg ICAgICAgICBFeHBsYW5hdGlvbiBleHBsYWluID0gc2VhcmNoZXIuZXhwbGFpbihxLCBtYXRjaC5k b2MpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jTm86IiArIG1hdGNo LmRvYyArICI6IiArIG1hdGNoLnNjb3JlICsgIjoiICsgc2VhcmNoZXIuZG9jKG1hdGNoLmRvYyku Z2V0RmllbGQoImFyaWQiKS5zdHJpbmdWYWx1ZSgpICsgIjoiICsgZXhwbGFpbik7CisgICAgICAg ICAgICB9CiAKLSAgICAgIG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50LkRvY3VtZW50IGRvYyAg PSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURvY3NbMF0uZG9jKTsKLSAgICAgIGFzc2VydEVx dWFscygiNTU1NTU1NTUtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChBcnRp c3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpKTsKKyAgICAgICAgICAgIG9yZy5hcGFj aGUubHVjZW5lLmRvY3VtZW50LkRvY3VtZW50IGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNj b3JlRG9jc1swXS5kb2MpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI1NTU1NTU1NS0xY2Yw LTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNU X0lELmdldE5hbWUoKSkpOwogCi0gICAgICBkb2MgID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2Nv cmVEb2NzWzFdLmRvYyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIjY2NjY2NjY2LTFjZjAtNGQxZi1h Y2E3LTJhNmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0 TmFtZSgpKSk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNl KHNlYXJjaGVyKTsKKyAgICAgICAgICAgIGRvYyA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3Jl RG9jc1sxXS5kb2MpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI2NjY2NjY2Ni0xY2YwLTRk MWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2MuZ2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lE LmdldE5hbWUoKSkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgc2VhcmNoZXJN YW5hZ2VyLnJlbGVhc2Uoc2VhcmNoZXIpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgQFRl c3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRBcnRpc3REaXNtYXhXaWxkY2FyZDIoKSB0aHJvd3Mg RXhjZXB0aW9uIHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQXJ0aXN0RGlz bWF4V2lsZGNhcmQyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICBTZWFyY2hlck1hbmFnZXIg c2VhcmNoZXJNYW5hZ2VyID0gc2QuZ2V0U2VhcmNoZXJNYW5hZ2VyKCk7Ci0gICAgSW5kZXhTZWFy Y2hlciBzZWFyY2hlciA9IHNlYXJjaGVyTWFuYWdlci5hY3F1aXJlKCk7Ci0gICAgdHJ5IHsKLSAg ICAgIFF1ZXJ5IHEgPSBzZC5wYXJzZVF1ZXJ5KCJFY2hvIik7Ci0gICAgICBUb3BEb2NzIHRvcGRv Y3MgPSBzZWFyY2hlci5zZWFyY2gocSwgMTApOwotICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRvcGRv Y3Muc2NvcmVEb2NzLmxlbmd0aCk7Ci0gICAgICBmb3IoU2NvcmVEb2MgbWF0Y2g6dG9wZG9jcy5z Y29yZURvY3MpCi0gICAgICB7Ci0gICAgICAgIEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFyY2hl ci5leHBsYWluKHEsIG1hdGNoLmRvYyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9j Tm86IittYXRjaC5kb2MrIjoiK21hdGNoLnNjb3JlKyI6IitzZWFyY2hlci5kb2MobWF0Y2guZG9j KS5nZXRGaWVsZCgiYXJpZCIpLnN0cmluZ1ZhbHVlKCkrIjoiK2V4cGxhaW4pOwotICAgICAgfQor ICAgICAgICBTZWFyY2hlck1hbmFnZXIgc2VhcmNoZXJNYW5hZ2VyID0gc2QuZ2V0U2VhcmNoZXJN YW5hZ2VyKCk7CisgICAgICAgIEluZGV4U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFyY2hlck1hbmFn ZXIuYWNxdWlyZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgUXVlcnkgcSA9IHNkLnBh cnNlUXVlcnkoIkVjaG8iKTsKKyAgICAgICAgICAgIFRvcERvY3MgdG9wZG9jcyA9IHNlYXJjaGVy LnNlYXJjaChxLCAxMCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdG9wZG9jcy5zY29y ZURvY3MubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAoU2NvcmVEb2MgbWF0Y2ggOiB0b3Bkb2Nz LnNjb3JlRG9jcykgeworICAgICAgICAgICAgICAgIEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFy Y2hlci5leHBsYWluKHEsIG1hdGNoLmRvYyk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5w cmludGxuKCJEb2NObzoiICsgbWF0Y2guZG9jICsgIjoiICsgbWF0Y2guc2NvcmUgKyAiOiIgKyBz ZWFyY2hlci5kb2MobWF0Y2guZG9jKS5nZXRGaWVsZCgiYXJpZCIpLnN0cmluZ1ZhbHVlKCkgKyAi OiIgKyBleHBsYWluKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgb3JnLmFwYWNoZS5sdWNlbmUu ZG9jdW1lbnQuRG9jdW1lbnQgZG9jICA9IHNlYXJjaGVyLmRvYyh0b3Bkb2NzLnNjb3JlRG9jc1sw XS5kb2MpOwotICAgICAgLy9hc3NlcnRFcXVhbHMoIjU1NTU1NTU1LTFjZjAtNGQxZi1hY2E3LTJh NmY4OWUzNGIzNiIsIGRvYy5nZXQoQXJ0aXN0SW5kZXhGaWVsZC5BUlRJU1RfSUQuZ2V0TmFtZSgp KSk7CisgICAgICAgICAgICBvcmcuYXBhY2hlLmx1Y2VuZS5kb2N1bWVudC5Eb2N1bWVudCBkb2Mg PSBzZWFyY2hlci5kb2ModG9wZG9jcy5zY29yZURvY3NbMF0uZG9jKTsKKyAgICAgICAgICAgIC8v YXNzZXJ0RXF1YWxzKCI1NTU1NTU1NS0xY2YwLTRkMWYtYWNhNy0yYTZmODllMzRiMzYiLCBkb2Mu Z2V0KEFydGlzdEluZGV4RmllbGQuQVJUSVNUX0lELmdldE5hbWUoKSkpOwogCi0gICAgICBkb2Mg ID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzFdLmRvYyk7Ci0gICAgICAvL2Fzc2Vy dEVxdWFscygiNjY2NjY2NjYtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9jLmdldChB cnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpKTsKLSAgICB9IGZpbmFsbHkgewot ICAgICAgc2VhcmNoZXJNYW5hZ2VyLnJlbGVhc2Uoc2VhcmNoZXIpOworICAgICAgICAgICAgZG9j ID0gc2VhcmNoZXIuZG9jKHRvcGRvY3Muc2NvcmVEb2NzWzFdLmRvYyk7CisgICAgICAgICAgICAv L2Fzc2VydEVxdWFscygiNjY2NjY2NjYtMWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2IiwgZG9j LmdldChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9JRC5nZXROYW1lKCkpKTsKKyAgICAgICAgfSBm aW5hbGx5IHsKKyAgICAgICAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNlKHNlYXJjaGVyKTsK KyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5k QXJ0aXN0RGlzbWF4U3BlY2lhbENoYXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QK KyAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21heFNwZWNpYWxDaGFycygpIHRocm93 cyBFeGNlcHRpb24gewogCi0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNk LmdldFNlYXJjaGVyTWFuYWdlcigpOwotICAgIEluZGV4U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFy Y2hlck1hbmFnZXIuYWNxdWlyZSgpOwotICAgIHRyeSB7Ci0gICAgICBRdWVyeSBxID0gc2QucGFy c2VRdWVyeSgiUmVwdWJsaWNhL0RDIik7Ci0gICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hl ci5zZWFyY2gocSwgMTApOwotICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRvcGRvY3Muc2NvcmVEb2Nz Lmxlbmd0aCk7Ci0gICAgICBmb3IoU2NvcmVEb2MgbWF0Y2g6dG9wZG9jcy5zY29yZURvY3MpCi0g ICAgICB7Ci0gICAgICAgIEV4cGxhbmF0aW9uIGV4cGxhaW4gPSBzZWFyY2hlci5leHBsYWluKHEs IG1hdGNoLmRvYyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jTm86IittYXRjaC5k b2MrIjoiK21hdGNoLnNjb3JlKyI6IitzZWFyY2hlci5kb2MobWF0Y2guZG9jKS5nZXRGaWVsZCgi YXJpZCIpLnN0cmluZ1ZhbHVlKCkrIjoiK2V4cGxhaW4pOwotICAgICAgfQotICAgIH0gZmluYWxs eSB7Ci0gICAgICBzZWFyY2hlck1hbmFnZXIucmVsZWFzZShzZWFyY2hlcik7CisgICAgICAgIFNl YXJjaGVyTWFuYWdlciBzZWFyY2hlck1hbmFnZXIgPSBzZC5nZXRTZWFyY2hlck1hbmFnZXIoKTsK KyAgICAgICAgSW5kZXhTZWFyY2hlciBzZWFyY2hlciA9IHNlYXJjaGVyTWFuYWdlci5hY3F1aXJl KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBRdWVyeSBxID0gc2QucGFyc2VRdWVyeSgi UmVwdWJsaWNhL0RDIik7CisgICAgICAgICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hlci5z ZWFyY2gocSwgMTApOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRvcGRvY3Muc2NvcmVE b2NzLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKFNjb3JlRG9jIG1hdGNoIDogdG9wZG9jcy5z Y29yZURvY3MpIHsKKyAgICAgICAgICAgICAgICBFeHBsYW5hdGlvbiBleHBsYWluID0gc2VhcmNo ZXIuZXhwbGFpbihxLCBtYXRjaC5kb2MpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJp bnRsbigiRG9jTm86IiArIG1hdGNoLmRvYyArICI6IiArIG1hdGNoLnNjb3JlICsgIjoiICsgc2Vh cmNoZXIuZG9jKG1hdGNoLmRvYykuZ2V0RmllbGQoImFyaWQiKS5zdHJpbmdWYWx1ZSgpICsgIjoi ICsgZXhwbGFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg ICAgICBzZWFyY2hlck1hbmFnZXIucmVsZWFzZShzZWFyY2hlcik7CisgICAgICAgIH0KICAgICB9 Ci0gIH0KIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZEFydGlzdERpc21heFNwZWNp YWxDaGFyczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lk IHRlc3RGaW5kQXJ0aXN0RGlzbWF4U3BlY2lhbENoYXJzMigpIHRocm93cyBFeGNlcHRpb24gewog Ci0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNkLmdldFNlYXJjaGVyTWFu YWdlcigpOwotICAgIEluZGV4U2VhcmNoZXIgc2VhcmNoZXIgPSBzZWFyY2hlck1hbmFnZXIuYWNx dWlyZSgpOwotICAgIHRyeSB7Ci0gICAgICBRdWVyeSBxID0gc2QucGFyc2VRdWVyeSgiUmVwdWJs aWNhLURDIik7Ci0gICAgICBUb3BEb2NzIHRvcGRvY3MgPSBzZWFyY2hlci5zZWFyY2gocSwgMTAp OwotICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRvcGRvY3Muc2NvcmVEb2NzLmxlbmd0aCk7Ci0gICAg fSBmaW5hbGx5IHsKLSAgICAgIHNlYXJjaGVyTWFuYWdlci5yZWxlYXNlKHNlYXJjaGVyKTsKKyAg ICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9IHNkLmdldFNlYXJjaGVyTWFu YWdlcigpOworICAgICAgICBJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gc2VhcmNoZXJNYW5hZ2Vy LmFjcXVpcmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFF1ZXJ5IHEgPSBzZC5wYXJz ZVF1ZXJ5KCJSZXB1YmxpY2EtREMiKTsKKyAgICAgICAgICAgIFRvcERvY3MgdG9wZG9jcyA9IHNl YXJjaGVyLnNlYXJjaChxLCAxMCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdG9wZG9j cy5zY29yZURvY3MubGVuZ3RoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHNl YXJjaGVyTWFuYWdlci5yZWxlYXNlKHNlYXJjaGVyKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQog CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIv dHJ1bmsvc2VydmxldC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvc2Vydmxl dC9SZWxvYWRJbmRleGVzVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1 bmsvc2VydmxldC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9S ZWxvYWRJbmRleGVzVGVzdC5qYXZhCTIwMTMtMDUtMDIgMjA6Mzg6MDUgVVRDIChyZXYgMTM2Nzcp CisrKyBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNi cmFpbnovc2VhcmNoL3NlcnZsZXQvUmVsb2FkSW5kZXhlc1Rlc3QuamF2YQkyMDEzLTA1LTA4IDE2 OjA5OjI3IFVUQyAocmV2IDEzNjc4KQpAQCAtNTQsOSArNTQsNyBAQAogICAgICAgZG9jLmFkZEZp ZWxkKEFydGlzdEluZGV4RmllbGQuQ09VTlRSWSwgIkFGIik7CiAgICAgICBkb2MuYWRkRmllbGQo QXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsICJtYWxlIik7CiAgICAgICBkb2MuYWRkRmllbGQoQXJ0 aXN0SW5kZXhGaWVsZC5UQUcsICJ0aHJhc2giKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLlRBR0NPVU5ULCAiNSIpOwotICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuVEFHLCAiZ8O8dGgiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxk LlRBR0NPVU5ULCAiMTEiKTsKKyAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRB RywgImfDvHRoIik7OwogICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuSVBJLCAi MTAwMSIpOwogICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVudCgp KTsKICAgICB9CkBAIC0xMjQsOSArMTIyLDcgQEAKICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJ bmRleEZpZWxkLkNPVU5UUlksICJBRiIpOwogICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuR0VOREVSLCAibWFsZSIpOwogICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuVEFHLCAidGhyYXNoIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5U QUdDT1VOVCwgIjUiKTsKICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBRywg ImfDvHRoIik7Ci0gICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUdDT1VOVCwg IjExIik7CiAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5JUEksICIxMDAxIik7 CiAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2VuZURvY3VtZW50KCkpOwogICAg IH0KCk1vZGlmaWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9v cmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvU2VhcmNoQWxsMlRlc3QuamF2YQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvbXVz aWNicmFpbnovc2VhcmNoL3NlcnZsZXQvU2VhcmNoQWxsMlRlc3QuamF2YQkyMDEzLTA1LTAyIDIw OjM4OjA1IFVUQyAocmV2IDEzNjc3KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3Ny Yy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L1NlYXJjaEFsbDJUZXN0 LmphdmEJMjAxMy0wNS0wOCAxNjowOToyNyBVVEMgKHJldiAxMzY3OCkKQEAgLTgsNiArOCw3IEBA CiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuc3RvcmUuUkFNRGlyZWN0b3J5OwogaW1wb3J0IG9y Zy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLm11c2lj YnJhaW56Lm1tZDIuKjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLkx1Y2VuZVZlcnNp b247CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5NYkRvY3VtZW50OwogaW1wb3J0IG9y Zy5tdXNpY2JyYWluei5zZWFyY2guYW5hbHlzaXMuTXVzaWNicmFpbnpTaW1pbGFyaXR5OwpAQCAt MTcsNiArMTgsNyBAQAogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZh LmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKIGltcG9ydCBq YXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0 IGphdmEudXRpbC5EYXRlOwpAQCAtNDgsNiArNTAsNyBAQAogICAgIEBCZWZvcmUKICAgICBwdWJs aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KICAgICB7CisgICAgICAgIE9iamVjdEZh Y3Rvcnkgb2YgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOwogICAgICAgICB7CiAgICAgICAgICAgICBS QU1EaXJlY3RvcnkgcmFtRGlyID0gbmV3IFJBTURpcmVjdG9yeSgpOwogICAgICAgICAgICAgQW5h bHl6ZXIgYW5hbHl6ZXIgPSBEYXRhYmFzZUluZGV4LmdldEFuYWx5emVyKExhYmVsSW5kZXhGaWVs ZC5jbGFzcyk7CkBAIC0xNDAsMTIgKzE0Myw0MSBAQAogICAgICAgICAgICAgICAgIGRvYy5hZGRG aWVsZChBcnRpc3RJbmRleEZpZWxkLkNPVU5UUlksICJBRiIpOwogICAgICAgICAgICAgICAgIGRv Yy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkdFTkRFUiwgIm1hbGUiKTsKICAgICAgICAgICAg ICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJ0aHJhc2giKTsKLSAgICAg ICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUdDT1VOVCwgIjUiKTsK ICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5UQUcsICJnw7x0 aCIpOwotICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRBR0NP VU5ULCAiMTEiKTsKICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVs ZC5JUEksICIxMDAxIik7CiAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4 RmllbGQuSVBJLCAiMTAwMiIpOwogCisgICAgICAgICAgICAgICAgQXJ0aXN0IGFydGlzdCA9IG9m LmNyZWF0ZUFydGlzdCgpOworICAgICAgICAgICAgICAgIGFydGlzdC5zZXRJZCgiNDMwMmUyNjQt MWNmMC00ZDFmLWFjYTctMmE2Zjg5ZTM0YjM2Iik7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNl dE5hbWUoIkRhcmsgSW5jaWRlbnQiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3Quc2V0U29ydE5h bWUoIkRhcmsgSW5jaWRlbnQiKTsKKyAgICAgICAgICAgICAgICBMaWZlU3BhbiBsaWZlc3BhbiA9 IG9mLmNyZWF0ZUxpZmVTcGFuKCk7CisgICAgICAgICAgICAgICAgbGlmZXNwYW4uc2V0QmVnaW4o IjE5OTktMDQiKTsKKyAgICAgICAgICAgICAgICBsaWZlc3Bhbi5zZXRFbmRlZCgidHJ1ZSIpOwor ICAgICAgICAgICAgICAgIGFydGlzdC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7CisgICAgICAgICAg ICAgICAgYXJ0aXN0LnNldFR5cGUoIkdyb3VwIik7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNl dERpc2FtYmlndWF0aW9uKCJ0aGUgcmVhbCBvbmUiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3Qu c2V0Q291bnRyeSgiQUYiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3Quc2V0R2VuZGVyKCJtYWxl Iik7CisgICAgICAgICAgICAgICAgVGFnTGlzdCB0YWdMaXN0ID0gb2YuY3JlYXRlVGFnTGlzdCgp OworICAgICAgICAgICAgICAgIFRhZyB0YWcgPSBvZi5jcmVhdGVUYWcoKTsKKyAgICAgICAgICAg ICAgICB0YWcuc2V0TmFtZSgidGhyYXNoIik7CisgICAgICAgICAgICAgICAgdGFnLnNldENvdW50 KEJpZ0ludGVnZXIudmFsdWVPZig1KSk7CisgICAgICAgICAgICAgICAgdGFnTGlzdC5nZXRUYWco KS5hZGQodGFnKTsKKworICAgICAgICAgICAgICAgIHRhZyA9IG9mLmNyZWF0ZVRhZygpOworICAg ICAgICAgICAgICAgIHRhZy5zZXROYW1lKCJnw7x0aCIpOworICAgICAgICAgICAgICAgIHRhZy5z ZXRDb3VudChCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpKTsKKyAgICAgICAgICAgICAgICB0YWdMaXN0 LmdldFRhZygpLmFkZCh0YWcpOworICAgICAgICAgICAgICAgIGFydGlzdC5zZXRUYWdMaXN0KHRh Z0xpc3QpOworCisgICAgICAgICAgICAgICAgSXBpTGlzdCBpcGlMaXN0ID0gb2YuY3JlYXRlSXBp TGlzdCgpOworICAgICAgICAgICAgICAgIGlwaUxpc3QuZ2V0SXBpKCkuYWRkKCIxMDAxIik7Cisg ICAgICAgICAgICAgICAgaXBpTGlzdC5nZXRJcGkoKS5hZGQoIjEwMDIiKTsKKyAgICAgICAgICAg ICAgICBhcnRpc3Quc2V0SXBpTGlzdChpcGlMaXN0KTsKKworICAgICAgICAgICAgICAgIGRvYy5h ZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVF9TVE9SRSwgTU1EU2VyaWFsaXplci5zZXJp YWxpemUoYXJ0aXN0KSk7CisKICAgICAgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9j LmdldEx1Y2VuZURvY3VtZW50KCkpOwogICAgICAgICAgICAgfQogCkBAIC0xNTcsOCArMTg5LDI1 IEBACiAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQuU09SVE5B TUUsICJkYXJrLHRoZSIpOwogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRl eEZpZWxkLkJFR0lOLCAiMTk3OCIpOwogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRp c3RJbmRleEZpZWxkLkNPVU5UUlksICJ1bmtub3duIik7Ci0gICAgICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKEFydGlzdEluZGV4RmllbGQuVFlQRSwgQXJ0aXN0VHlwZS5HUk9VUC5nZXROYW1lKCkp OworICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLlRZUEUsICJH cm91cCIpOwogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFM SUFTLCAiVGhlIGRhcmtuZXNzIik7CisKKyAgICAgICAgICAgICAgICBBcnRpc3QgYXJ0aXN0ID0g b2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNldElkKCJjY2Q0ODc5 Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3Qu c2V0TmFtZSgiVGhlIGRhcmtuZXNzIik7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNldFNvcnRO YW1lKCJkYXJrLHRoZSIpOworICAgICAgICAgICAgICAgIExpZmVTcGFuIGxpZmVzcGFuID0gb2Yu Y3JlYXRlTGlmZVNwYW4oKTsKKyAgICAgICAgICAgICAgICBsaWZlc3Bhbi5zZXRCZWdpbigiMTk3 OCIpOworICAgICAgICAgICAgICAgIGFydGlzdC5zZXRMaWZlU3BhbihsaWZlc3Bhbik7CisgICAg ICAgICAgICAgICAgYXJ0aXN0LnNldFR5cGUoIkdyb3VwIik7CisKKyAgICAgICAgICAgICAgICBB bGlhc0xpc3QgYWxpYXNMaXN0ID0gb2YuY3JlYXRlQWxpYXNMaXN0KCk7CisgICAgICAgICAgICAg ICAgQWxpYXMgYWxpYXMgPSBvZi5jcmVhdGVBbGlhcygpOworICAgICAgICAgICAgICAgIGFsaWFz LnNldENvbnRlbnQoIlRoZSBkYXJrbmVzcyIpOworICAgICAgICAgICAgICAgIGFsaWFzTGlzdC5n ZXRBbGlhcygpLmFkZChhbGlhcyk7CisKKyAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoQXJ0 aXN0SW5kZXhGaWVsZC5BUlRJU1RfU1RPUkUsIE1NRFNlcmlhbGl6ZXIuc2VyaWFsaXplKGFydGlz dCkpOworCiAgICAgICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVE b2N1bWVudCgpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTY5LDYgKzIxOCwxNCBAQAogICAgICAg ICAgICAgICAgIGRvYy5hZGRGaWVsZChBcnRpc3RJbmRleEZpZWxkLkFSVElTVCwgIlRoZSBkYXJr IHBsYWNlIik7CiAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4RmllbGQu VFlQRSwgQXJ0aXN0VHlwZS5QRVJTT04uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICBkb2Mu YWRkRmllbGQoQXJ0aXN0SW5kZXhGaWVsZC5HRU5ERVIsICJ1bmtub3duIik7CisKKyAgICAgICAg ICAgICAgICBBcnRpc3QgYXJ0aXN0ID0gb2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAg ICAgYXJ0aXN0LnNldElkKCJkZGU0ODc5Yy01ZTg4LTQzODUtYjEzMS1iZjY1Mjk2YmYyNDUiKTsK KyAgICAgICAgICAgICAgICBhcnRpc3Quc2V0TmFtZSgiVGhlIGRhcmsgcGxhY2UiKTsKKyAgICAg ICAgICAgICAgICBhcnRpc3Quc2V0U29ydE5hbWUoImRhcmssdGhlIik7CisgICAgICAgICAgICAg ICAgYXJ0aXN0LnNldFR5cGUoIlBlcnNvbiIpOworCisgICAgICAgICAgICAgICAgZG9jLmFkZEZp ZWxkKEFydGlzdEluZGV4RmllbGQuQVJUSVNUX1NUT1JFLCBNTURTZXJpYWxpemVyLnNlcmlhbGl6 ZShhcnRpc3QpKTsKICAgICAgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1 Y2VuZURvY3VtZW50KCkpOwogICAgICAgICAgICAgfQogCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTXVzaWNCcmFpbnotY29tbWl0cyBtYWlsaW5nIGxp c3QKTXVzaWNCcmFpbnotY29tbWl0c0BsaXN0cy5tdXNpY2JyYWluei5vcmcKaHR0cDovL2xpc3Rz Lm11c2ljYnJhaW56Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL211c2ljYnJhaW56LWNvbW1pdHM=