Re: How to package java classes in an opencms module
Michael Emmerich via opencms-dev <[email protected]> Fri, 8 Aug 2025 14:30:00 +0200
| Newsgroups | gmane.comp.cms.opencms.devel |
|---|---|
| Message-ID | <[email protected]> |
TGF1cmVudCwKCmZyb20geW91IG1hbmlmZXN0LCBJIHNlZSB0aGF0IHlvdSBoYXZlIG5vdCBhc3Np Z25lZCBhbnkgcmVzb3VyY2VzIHRvIAp5b3VyIG1vZHVsZS4gU28gbm8gcmVzb3VyY2VzIGFyZSBp bXBvcnRlZCB3aGVuIHlvdSBpbXBvcnQgdGhlIG1vZHVsZSwgCnRoZXJlZm9yZSB0aGUgLmphciBh bmQgLmNsYXNzZXMgYXJlIG1pc3NpbmcuwqAgSSBzZWUgdGhhdCB5b3UgaGF2ZSAKZGVmaW5lZCB0 aGUgZXhwb3J0IHBvaW50cywgYnV0IHdpdGhvdXQgdGhlIGltcG9ydGVkIGZpbGUsIHRoaXMgd2ls bCBub3QgCndvcmsuCgpIb3dldmVyLCB3ZSB1c3VhbGx5IGRvIG5vdCBwdXQgLmphciBvciAuY2xh c3MgZmlsZXMgaW4gb3VyIG1vZHVsZXMsIHdlIApkZXBsb3kgdGhlbSBzZXBhcmF0ZWx5IG9uIHRo ZSBzZXJ2ZXIgYXMgeW8gaGF2ZSB0byByZXN0YXJ0IGl0IGFueXdheSAKYWZ0ZXIgZGVwbG95aW5n IHNvbWUgLmphciBhbmQgLmNsYXNzIGZpbGVzLgoKCktpbmQgcmVnYXJkcywKCk1pY2hhZWwKCgoK QW0gMDguMDguMjUgdW0gMTE6MjIgc2NocmllYiBsYXVyZW50LmRydWFydCB2aWEgb3BlbmNtcy1k ZXY6Cj4gSGVsbG8sCj4KPiBJbiBhZGQtb24gdG8gbXkgcHJldmlvdXMgZS1tYWlsLCBoZXJlIGlz IHRoZSBjb250ZW50L3N0cnVjdHVyZSBvZiBteSB6aXAgZmlsZXMgOgo+Cj4KPiBBbmQgdGhlIGNv bnRlbnQgb2YgbXkgbWFuaWZlc3QueG1sIDoKPgo+IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp bmc9IlVURi04Ij8+Cj4gPGV4cG9ydD4KPiAgICAgIDxpbmZvPgo+ICAgICAgICAgIDxjcmVhdG9y Pk9wZW5DTVMgTW9kdWxlIEJ1aWxkZXI8L2NyZWF0b3I+Cj4gICAgICAgICAgPG9wZW5jbXNfdmVy c2lvbj4xOS4wPC9vcGVuY21zX3ZlcnNpb24+Cj4gICAgICAgICAgPGNyZWF0ZWRhdGU+V2VkLCAw NyBBdWcgMjAyNSAxMDowMDowMCBHTVQ8L2NyZWF0ZWRhdGU+Cj4gICAgICAgICAgPHByb2plY3Q+ T2ZmbGluZTwvcHJvamVjdD4KPiAgICAgICAgICA8ZXhwb3J0X3ZlcnNpb24+NzwvZXhwb3J0X3Zl cnNpb24+Cj4gICAgICA8L2luZm8+Cj4KPiAgICAgIDxtb2R1bGU+Cj4gICAgICAgICAgPG5hbWU+ Y29tLm9wZW5jbXMubGlicmFyeTwvbmFtZT4KPiAgICAgICAgICA8bmljZW5hbWU+T3BlbkNNUyBT cHJpbmcgRGF0YSBKREJDIExpYnJhcnk8L25pY2VuYW1lPgo+ICAgICAgICAgIDxncm91cD5DdXN0 b20gTGlicmFyaWVzPC9ncm91cD4KPiAgICAgICAgICA8Y2xhc3M+Y29tLm9wZW5jbXMubGlicmFy eS5pbnRlZ3JhdGlvbi5MaWJyYXJ5SW5pdGlhbGl6ZXI8L2NsYXNzPgo+ICAgICAgICAgIDxkZXNj cmlwdGlvbj5MaWJyYWlyaWUgU3ByaW5nIGNsYXNzaXF1ZSBwb3VyIE9wZW5DTVMgYXZlYyBhY2PD qHMgYXV4IGRvbm7DqWVzIFBvc3RncmVTUUw8L2Rlc2NyaXB0aW9uPgo+ICAgICAgICAgIDx2ZXJz aW9uPjEuMC4wPC92ZXJzaW9uPgo+ICAgICAgICAgIDxhdXRob3JuYW1lPkxhdXJlbnQgRHJ1YXJ0 PC9hdXRob3JuYW1lPgo+ICAgICAgICAgIDxhdXRob3JlbWFpbD5sYXVyZW50LmRydWFydEBsZGlj dC5iZTwvYXV0aG9yZW1haWw+Cj4gICAgICAgICAgPGRhdGVjcmVhdGVkPldlZCwgMDcgQXVnIDIw MjUgMTA6MDA6MDAgR01UPC9kYXRlY3JlYXRlZD4KPiAgICAgICAgICA8dXNlcmluc3RhbGxlZD5B ZG1pbjwvdXNlcmluc3RhbGxlZD4KPiAgICAgICAgICA8ZGF0ZWluc3RhbGxlZD5XZWQsIDA3IEF1 ZyAyMDI1IDEwOjAwOjAwIEdNVDwvZGF0ZWluc3RhbGxlZD4KPgo+ICAgICAgICAgIDxkZXBlbmRl bmNpZXMvPgo+Cj4gICAgICAgICAgPGV4cG9ydHBvaW50cz4KPiAgICAgICAgICAgICAgPGV4cG9y dHBvaW50IHVyaT0iL3N5c3RlbS9tb2R1bGVzL2NvbS5vcGVuY21zLmxpYnJhcnkvY2xhc3Nlcy8i IGRlc3RpbmF0aW9uPSJXRUItSU5GL2NsYXNzZXMvIi8+Cj4gICAgICAgICAgICAgIDxleHBvcnRw b2ludCB1cmk9Ii9zeXN0ZW0vbW9kdWxlcy9jb20ub3BlbmNtcy5saWJyYXJ5L2xpYi8iIGRlc3Rp bmF0aW9uPSJXRUItSU5GL2xpYi8iLz4KPiAgICAgICAgICA8L2V4cG9ydHBvaW50cz4KPiAgICAg ICAgICA8cmVzb3VyY2VzLz4KPiAgICAgICAgICA8cGFyYW1ldGVycz4KPiAgICAgICAgICAgICAg PHBhcmFtIG5hbWU9InNwcmluZy5hdXRvLmluaXQiPnRydWU8L3BhcmFtPgo+ICAgICAgICAgIDwv cGFyYW1ldGVycz4KPiAgICAgIDwvbW9kdWxlPgo+Cj4gICAgICA8ZmlsZXMvPgo+IDwvZXhwb3J0 Pgo+Cj4gSSB0cmllZCB0byBpbXBvcnQgdGhlIHppcCBpbiB0aGUgbW9kdWxlcyBhcHAsIG1vZHVs ZSBpcyBjcmVhdGVkIGJ1dCBjbGFzc2VzIGFuZCBsaWIgYXJlIG5vdCBjb3BpZWQgaW4gV0VCLUlO RiBmb2xkZXJzIGFuZCBpbiB0aGUgZXhwbG9yZXIgYXBwIHRoZXJlIGFyZSBubyDCqyBjb20ub3Bl bmNtcy5saWJyYXJ5IMK7IGVudHJpZXMgaW4gL3N5c3RlbS9tb2R1bGVzCj4KPiBUaGFua3MgZm9y IHlvdXIgaGVscC4KPgo+IFJlZ2FyZHMsCj4KPiBMYXVyZW50Cj4KPj4gTGUgNyBhb8O7dCAyMDI1 IMOgIDE2OjQxLCBsYXVyZW50LmRydWFydCB2aWEgb3BlbmNtcy1kZXYgPG9wZW5jbXMtZGV2QG9w ZW5jbXMub3JnPiBhIMOpY3JpdCA6Cj4+Cj4+IEhlbGxvLAo+Pgo+PiBJ4oCZbSBzdGlsbCB0ZXN0 aW5nIE9wZW5DTVMgYW5kIGkgd3JvdGUgYSB2ZXJ5IHNtYWxsIGxpYnJhcnksIGEgc3ByaW5nIGJh c2VkIGxpYnJhcnkuIEkgd2FudCB0byB1c2UgdGhlIGJlYW5zIGluIG15IGpzcCBzbyBpIHdyb3Rl IDIgY2xhc3NlczoKPj4KPj4gU3ByaW5nQmVhblV0aWxzIDoKPj4KPj4gcHVibGljIGNsYXNzIFNw cmluZ0JlYW5VdGlscyB7Cj4+Cj4+ICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgTE9HID0g Q21zTG9nLmdldExvZyhTcHJpbmdCZWFuVXRpbHMuY2xhc3MpOwo+Pgo+PiAgICAgLyoqCj4+ICAg ICAgKiBSw6ljdXDDqHJlIGxlIHNlcnZpY2UgdXRpbGlzYXRldXIKPj4gICAgICAqIEV4ZW1wbGUg ZCd1dGlsaXNhdGlvbiBkYW5zIHVuZSBwYWdlIEpTUCA6Cj4+ICAgICAgKiA8JQo+PiAgICAgICog ICBVc2VyU2VydmljZSB1c2VyU2VydmljZSA9IFNwcmluZ0JlYW5VdGlscy5nZXRVc2VyU2Vydmlj ZSgpOwo+PiAgICAgICogICBMaXN0PFVzZXI+IHVzZXJzID0gdXNlclNlcnZpY2UuZ2V0QWxsQWN0 aXZlVXNlcnMoKTsKPj4gICAgICAqICU+Cj4+ICAgICAgKi8KPj4gICAgIHB1YmxpYyBzdGF0aWMg VXNlclNlcnZpY2UgZ2V0VXNlclNlcnZpY2UoKSB7Cj4+ICAgICAgICAgdHJ5IHsKPj4gICAgICAg ICAgICAgcmV0dXJuIExpYnJhcnlJbml0aWFsaXplci5nZXRCZWFuKFVzZXJTZXJ2aWNlLmNsYXNz KTsKPj4gICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewo+PiAgICAgICAgICAgICBMT0cu ZXJyb3IoIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGR1IFVzZXJTZXJ2aWNlIiwg ZSk7Cj4+ICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTZXJ2aWNlIHV0 aWxpc2F0ZXVyIG5vbiBkaXNwb25pYmxlIiwgZSk7Cj4+ICAgICAgICAgfQo+PiAgICAgfQo+Pgo+ PiAgICAgLyoqCj4+ICAgICAgKiBNw6l0aG9kZSBnw6luw6lyaXF1ZSBwb3VyIHLDqWN1cMOpcmVy IG4naW1wb3J0ZSBxdWVsIHNlcnZpY2UKPj4gICAgICAqIEV4ZW1wbGUgOgo+PiAgICAgICogTXlT ZXJ2aWNlIHNlcnZpY2UgPSBTcHJpbmdCZWFuVXRpbHMuZ2V0U2VydmljZShNeVNlcnZpY2UuY2xh c3MpOwo+PiAgICAgICovCj4+ICAgICBwdWJsaWMgc3RhdGljIDxUPiBUIGdldFNlcnZpY2UoQ2xh c3M8VD4gc2VydmljZUNsYXNzKSB7Cj4+ICAgICAgICAgdHJ5IHsKPj4gICAgICAgICAgICAgcmV0 dXJuIExpYnJhcnlJbml0aWFsaXplci5nZXRCZWFuKHNlcnZpY2VDbGFzcyk7Cj4+ICAgICAgICAg fSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKPj4gICAgICAgICAgICAgTE9HLmVycm9yKCJFcnJldXIg bG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkdSBzZXJ2aWNlOiAiICsgc2VydmljZUNsYXNzLmdl dFNpbXBsZU5hbWUoKSwgZSk7Cj4+ICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0 aW9uKCJTZXJ2aWNlIG5vbiBkaXNwb25pYmxlOiAiICsgc2VydmljZUNsYXNzLmdldFNpbXBsZU5h bWUoKSwgZSk7Cj4+ICAgICAgICAgfQo+PiAgICAgfQo+Pgo+PiAgICAgLyoqCj4+ICAgICAgKiBS w6ljdXDDqHJlIHVuIGJlYW4gcGFyIHNvbiBub20KPj4gICAgICAqIEV4ZW1wbGUgOgo+PiAgICAg ICogT2JqZWN0IGJlYW4gPSBTcHJpbmdCZWFuVXRpbHMuZ2V0QmVhbigidXNlclNlcnZpY2UiKTsK Pj4gICAgICAqLwo+PiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgYmVh bk5hbWUpIHsKPj4gICAgICAgICB0cnkgewo+PiAgICAgICAgICAgICByZXR1cm4gTGlicmFyeUlu aXRpYWxpemVyLmdldEJlYW4oYmVhbk5hbWUpOwo+PiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv biBlKSB7Cj4+ICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vw w6lyYXRpb24gZHUgYmVhbjogIiArIGJlYW5OYW1lLCBlKTsKPj4gICAgICAgICAgICAgdGhyb3cg bmV3IFJ1bnRpbWVFeGNlcHRpb24oIkJlYW4gbm9uIGRpc3BvbmlibGU6ICIgKyBiZWFuTmFtZSwg ZSk7Cj4+ICAgICAgICAgfQo+PiAgICAgfQo+Pgo+PiAgICAgLyoqCj4+ICAgICAgKiBWw6lyaWZp ZSBzaSBsZSBjb250ZXh0ZSBTcHJpbmcgZXN0IGRpc3BvbmlibGUKPj4gICAgICAqLwo+PiAgICAg cHVibGljIHN0YXRpYyBib29sZWFuIGlzQXZhaWxhYmxlKCkgewo+PiAgICAgICAgIHJldHVybiBM aWJyYXJ5SW5pdGlhbGl6ZXIuaXNTcHJpbmdDb250ZXh0QXZhaWxhYmxlKCk7Cj4+ICAgICB9Cj4+ Cj4+ICAgICAvKioKPj4gICAgICAqIE3DqXRob2RlIHV0aWxpdGFpcmUgcG91ciB2w6lyaWZpZXIg bGEgZGlzcG9uaWJpbGl0w6kgYXZhbnQgdXRpbGlzYXRpb24KPj4gICAgICAqLwo+PiAgICAgcHVi bGljIHN0YXRpYyB2b2lkIGVuc3VyZUF2YWlsYWJsZSgpIHsKPj4gICAgICAgICBpZiAoIWlzQXZh aWxhYmxlKCkpIHsKPj4gICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlv bigKPj4gICAgICAgICAgICAgICAgICAgICAiTGUgY29udGV4dGUgU3ByaW5nIG4nZXN0IHBhcyBk aXNwb25pYmxlLiAiICsKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWw6lyaWZpZXog cXVlIGxlIG1vZHVsZSBlc3QgY29ycmVjdGVtZW50IGluaXRpYWxpc8OpLiIKPj4gICAgICAgICAg ICAgKTsKPj4gICAgICAgICB9Cj4+ICAgICB9Cj4+IH0KPj4KPj4gd2l0aCBzdGF0aWMgbWV0aG9k IGdldFVzZXJTZXJ2aWNlKCkgSSBjYW4gY2FsbCB0aGUgdXNlclNlcnZpY2UgYmVhbi4gTm8gcHJv YmxlbSB3aXRoIGl0Lgo+Pgo+PiBBbmQgc2Vjb25kIGNsYXNzIExpYnJhcnlJbml0aWFsaXplciB3 aWNoIG11c3QgaW5pdGlhbGlzZSB0aGUgc3ByaW5nIGNvbnRleHQgYW5kIGNvbmZpZ3VyZSBpdDoK Pj4KPj4gcHVibGljIGNsYXNzIExpYnJhcnlJbml0aWFsaXplciBleHRlbmRzIEFfQ21zTW9kdWxl QWN0aW9uIGltcGxlbWVudHMgSV9DbXNFdmVudExpc3RlbmVyIHsKPj4KPj4gICAgIHByaXZhdGUg c3RhdGljIGZpbmFsIFN0cmluZyBNT0RVTEVfTkFNRSA9ICJvcGVuY21zLXNwcmluZy1saWJyYXJ5 IjsKPj4gICAgIHByaXZhdGUgc3RhdGljIEFwcGxpY2F0aW9uQ29udGV4dCBzcHJpbmdDb250ZXh0 Owo+PiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcu TG9nIExPRyA9IENtc0xvZy5nZXRMb2coTGlicmFyeUluaXRpYWxpemVyLmNsYXNzKTsKPj4KPj4g ICAgIC8qKgo+PiAgICAgICogSW5pdGlhbGlzYXRpb24gZHUgbW9kdWxlCj4+ICAgICAgKi8KPj4g ICAgIEBPdmVycmlkZQo+PiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShvcmcub3BlbmNtcy5m aWxlLkNtc09iamVjdCBhZG1pbkNtcywKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Jn Lm9wZW5jbXMuY29uZmlndXJhdGlvbi5DbXNDb25maWd1cmF0aW9uTWFuYWdlciBjb25maWd1cmF0 aW9uTWFuYWdlciwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ21zTW9kdWxlIG1vZHVs ZSkgewo+Pgo+PiAgICAgICAgIExPRy5pbmZvKCJJbml0aWFsaXNhdGlvbiBkZSBsYSBsaWJyYWly aWUgU3ByaW5nIGNsYXNzaXF1ZSBwb3VyIE9wZW5DTVMiKTsKPj4KPj4gICAgICAgICB0cnkgewo+ PiAgICAgICAgICAgICAvLyBDb25maWd1cmF0aW9uIGRlcyBwcm9wcmnDqXTDqXMgc3lzdMOobWUK Pj4gICAgICAgICAgICAgY29uZmlndXJlU3lzdGVtUHJvcGVydGllcygpOwo+Pgo+PiAgICAgICAg ICAgICAvLyBDcsOpYXRpb24gZHUgY29udGV4dGUgU3ByaW5nIENMQVNTSVFVRQo+PiAgICAgICAg ICAgICBBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQgPSBuZXcgQW5u b3RhdGlvbkNvbmZpZ0FwcGxpY2F0aW9uQ29udGV4dCgpOwo+PiAgICAgICAgICAgICBjb250ZXh0 LnJlZ2lzdGVyKGNvbS5vcGVuY21zLmxpYnJhcnkuY29uZmlnLkxpYnJhcnlDb25maWd1cmF0aW9u LmNsYXNzKTsKPj4gICAgICAgICAgICAgY29udGV4dC5yZWZyZXNoKCk7Cj4+Cj4+ICAgICAgICAg ICAgIHNwcmluZ0NvbnRleHQgPSBjb250ZXh0Owo+Pgo+PiAgICAgICAgICAgICAvLyBFbnJlZ2lz dHJlbWVudCBkZXMgbGlzdGVuZXJzIE9wZW5DTVMKPj4gICAgICAgICAgICAgT3BlbkNtcy5hZGRD bXNFdmVudExpc3RlbmVyKHRoaXMpOwo+Pgo+PiAgICAgICAgICAgICBMT0cuaW5mbygiTGlicmFp cmllIFNwcmluZyBjbGFzc2lxdWUgaW5pdGlhbGlzw6llIGF2ZWMgc3VjY8OocyIpOwo+Pgo+PiAg ICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Cj4+ICAgICAgICAgICAgIExPRy5lcnJvcigi RXJyZXVyIGxvcnMgZGUgbCdpbml0aWFsaXNhdGlvbiBkZSBsYSBsaWJyYWlyaWUgU3ByaW5nIiwg ZSk7Cj4+ICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbXBvc3NpYmxl IGQnaW5pdGlhbGlzZXIgbGEgbGlicmFpcmllIFNwcmluZyIsIGUpOwo+PiAgICAgICAgIH0KPj4g ICAgIH0KPj4KPj4gICAgIC8qKgo+PiAgICAgICogQXJyw6p0IGR1IG1vZHVsZQo+PiAgICAgICov Cj4+ICAgICBAT3ZlcnJpZGUKPj4gICAgIHB1YmxpYyB2b2lkIHNodXREb3duKENtc01vZHVsZSBt b2R1bGUpIHsKPj4gICAgICAgICBMT0cuaW5mbygiQXJyw6p0IGRlIGxhIGxpYnJhaXJpZSBTcHJp bmcgY2xhc3NpcXVlIik7Cj4+Cj4+ICAgICAgICAgaWYgKHNwcmluZ0NvbnRleHQgIT0gbnVsbCkg ewo+PiAgICAgICAgICAgICB0cnkgewo+PiAgICAgICAgICAgICAgICAgaWYgKHNwcmluZ0NvbnRl eHQgaW5zdGFuY2VvZiBBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0KSB7Cj4+ICAg ICAgICAgICAgICAgICAgICAgKChBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0KSBz cHJpbmdDb250ZXh0KS5jbG9zZSgpOwo+PiAgICAgICAgICAgICAgICAgfQo+PiAgICAgICAgICAg ICAgICAgTE9HLmluZm8oIkNvbnRleHRlIFNwcmluZyBmZXJtw6kgYXZlYyBzdWNjw6hzIik7Cj4+ ICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Cj4+ICAgICAgICAgICAgICAgICBM T0cuZXJyb3IoIkVycmV1ciBsb3JzIGRlIGwnYXJyw6p0IGR1IGNvbnRleHRlIFNwcmluZyIsIGUp Owo+PiAgICAgICAgICAgICB9IGZpbmFsbHkgewo+PiAgICAgICAgICAgICAgICAgc3ByaW5nQ29u dGV4dCA9IG51bGw7Cj4+ICAgICAgICAgICAgIH0KPj4gICAgICAgICB9Cj4+ICAgICB9Cj4+Cj4+ ICAgICAvKioKPj4gICAgICAqIEdlc3Rpb24gZGVzIMOpdsOpbmVtZW50cyBPcGVuQ01TCj4+ICAg ICAgKi8KPj4gICAgIEBPdmVycmlkZQo+PiAgICAgcHVibGljIHZvaWQgY21zRXZlbnQoQ21zRXZl bnQgZXZlbnQpIHsKPj4gICAgICAgICBzd2l0Y2ggKGV2ZW50LmdldFR5cGUoKSkgewo+PiAgICAg ICAgICAgICBjYXNlIElfQ21zRXZlbnRMaXN0ZW5lci5FVkVOVF9QVUJMSVNIX1BST0pFQ1Q6Cj4+ ICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIsOJdsOpbmVtZW50IGRlIHB1YmxpY2F0aW9uIGTD qXRlY3TDqSIpOwo+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICAgICAgICAgICAgIGNhc2Ug SV9DbXNFdmVudExpc3RlbmVyLkVWRU5UX0NMRUFSX0NBQ0hFUzoKPj4gICAgICAgICAgICAgICAg IExPRy5kZWJ1Zygiw4l2w6luZW1lbnQgZGUgbmV0dG95YWdlIGRlcyBjYWNoZXMgZMOpdGVjdMOp Iik7Cj4+ICAgICAgICAgICAgICAgICBicmVhazsKPj4gICAgICAgICB9Cj4+ICAgICB9Cj4+Cj4+ ICAgICAvKioKPj4gICAgICAqIENvbmZpZ3VyYXRpb24gZGVzIHByb3ByacOpdMOpcyBzeXN0w6ht ZQo+PiAgICAgICovCj4+ICAgICBwcml2YXRlIHZvaWQgY29uZmlndXJlU3lzdGVtUHJvcGVydGll cygpIHsKPj4gICAgICAgICAvLyBDb25maWd1cmF0aW9uIGRlIGJhc2UgZGUgZG9ubsOpZXMgKHZh bGV1cnMgcGFyIGTDqWZhdXQpCj4+ICAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgic3By aW5nLmRhdGFzb3VyY2UudXJsIikgPT0gbnVsbCkgewo+PiAgICAgICAgICAgICBTeXN0ZW0uc2V0 UHJvcGVydHkoInNwcmluZy5kYXRhc291cmNlLnVybCIsICJqZGJjOnBvc3RncmVzcWw6Ly9wb3N0 Z3Jlcy1kYjo1NDMyL2xpYmRiIik7Cj4+ICAgICAgICAgfQo+PiAgICAgICAgIGlmIChTeXN0ZW0u Z2V0UHJvcGVydHkoInNwcmluZy5kYXRhc291cmNlLnVzZXJuYW1lIikgPT0gbnVsbCkgewo+PiAg ICAgICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoInNwcmluZy5kYXRhc291cmNlLnVzZXJuYW1l IiwgImFwcHVzZXIiKTsKPj4gICAgICAgICB9Cj4+ICAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9w ZXJ0eSgic3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQiKSA9PSBudWxsKSB7Cj4+ICAgICAgICAg ICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgic3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQiLCAiYXBw cGFzc3dvcmQiKTsKPj4gICAgICAgICB9Cj4+Cj4+ICAgICAgICAgTE9HLmluZm8oIlByb3ByacOp dMOpcyBzeXN0w6htZSBjb25maWd1csOpZXMiKTsKPj4gICAgIH0KPj4KPj4gICAgIC8qKgo+PiAg ICAgICogQWNjw6hzIGF1eCBiZWFucyBTcHJpbmcKPj4gICAgICAqLwo+PiAgICAgcHVibGljIHN0 YXRpYyA8VD4gVCBnZXRCZWFuKENsYXNzPFQ+IGJlYW5DbGFzcykgewo+PiAgICAgICAgIGlmIChz cHJpbmdDb250ZXh0ID09IG51bGwpIHsKPj4gICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxT dGF0ZUV4Y2VwdGlvbigiTGUgY29udGV4dGUgU3ByaW5nIG4nZXN0IHBhcyBpbml0aWFsaXPDqSIp Owo+PiAgICAgICAgIH0KPj4gICAgICAgICByZXR1cm4gc3ByaW5nQ29udGV4dC5nZXRCZWFuKGJl YW5DbGFzcyk7Cj4+ICAgICB9Cj4+Cj4+ICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRCZWFu KFN0cmluZyBiZWFuTmFtZSkgewo+PiAgICAgICAgIGlmIChzcHJpbmdDb250ZXh0ID09IG51bGwp IHsKPj4gICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTGUgY29u dGV4dGUgU3ByaW5nIG4nZXN0IHBhcyBpbml0aWFsaXPDqSIpOwo+PiAgICAgICAgIH0KPj4gICAg ICAgICByZXR1cm4gc3ByaW5nQ29udGV4dC5nZXRCZWFuKGJlYW5OYW1lKTsKPj4gICAgIH0KPj4K Pj4gICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NwcmluZ0NvbnRleHRBdmFpbGFibGUoKSB7 Cj4+ICAgICAgICAgcmV0dXJuIHNwcmluZ0NvbnRleHQgIT0gbnVsbDsKPj4gICAgIH0KPj4gfQo+ Pgo+PiBJZiBpIGJ1aWxkIHRoaXMgbGliIGFzIGEgamFyIGFuZCBwdXQgaXQgaW4gV0VCLUlORi9s aWIgaSBjYW4gYWNjZXNzIG15IGJlYW5zIGluIGpzcCBwYWdlcyBidXQgaSBtdXN0IGRvIHRoaXMg Y2FsbCBmaXJzdDoKPj4KPj4gICAgICAgICAgICBjb20ub3BlbmNtcy5saWJyYXJ5LmludGVncmF0 aW9uLkxpYnJhcnlJbml0aWFsaXplciBpbml0aWFsaXplciA9Cj4+ICAgICAgICAgICAgICAgICBu ZXcgY29tLm9wZW5jbXMubGlicmFyeS5pbnRlZ3JhdGlvbi5MaWJyYXJ5SW5pdGlhbGl6ZXIoKTsK Pj4KPj4gICAgICAgICAgICAgLy8gQXBwZWwgZGlyZWN0IGRlIGluaXRpYWxpemUgYXZlYyBkZXMg cGFyYW3DqHRyZXMgbnVsbHMgKG5vdHJlIHZlcnNpb24gc2ltcGxpZmnDqWUgbGVzIGfDqHJlKQo+ PiAgICAgICAgICAgICBpbml0aWFsaXplci5pbml0aWFsaXplKG51bGwsIG51bGwsIG51bGwpOwo+ PiBhZnRlciB0aGF0IG15IGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQgYW5k IG15IGpzcCBhcmUgcnVubmluZyBmaW5lLiBCdXQgdGhlIHdheSB0byBhdXRvbWF0aWMgbG9hZGlu ZyBvZiBteSBjb250ZXh0IHNlZW1zIHRvIGJlIGFuIG9wZW5jbXMgbW9kdWxlLgo+Pgo+PiBJIHRy aWVkIHRvIGFkYXB0IG15IGxpYiB3aXRoIG9wZW5jbXMtbW9kdWxlLnhtbCwgbWFuaWZlc3QueG1s LC4uLiBidXQgbm90aGluZyB3b3JrczogYXQgc3RhcnR1cCBjb20ub3BlbmNtcy5saWJyYXJ5Lmlu dGVncmF0aW9uLkxpYnJhcnlJbml0aWFsaXplciBpcyBub3QgZm91bmQgYnkgb3BlbmNtcy4KPj4K Pj4gQ2FuIHlvdSBoZWxwIG1lPwo+PiBEb2VzIGl0IGV4aXN0IGEgdHV0b3JpYWwgb3IgaG93LXRv Pwo+Pgo+PiBBbSBpIHdyb25nIHdpdGggcHVibGljIGNsYXNzIExpYnJhcnlJbml0aWFsaXplciBl eHRlbmRzIEFfQ21zTW9kdWxlQWN0aW9uIGltcGxlbWVudHMgSV9DbXNFdmVudExpc3RlbmVyID8K Pj4KPj4gVGhhbmsgeW91Cj4+Cj4+IEtpbmQgcmVnYXJkcywKPj4KPj4gTGF1cmVudAo+Pgo+Pgo+ PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBUaGlz IG1haWwgaXMgc2VudCB0byB5b3UgZnJvbSB0aGUgb3BlbmNtcy1kZXYgbWFpbGluZyBsaXN0Cj4+ IFRvIGNoYW5nZSB5b3VyIGxpc3Qgb3B0aW9ucywgb3IgdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUg bGlzdCwgcGxlYXNlIHZpc2l0Cj4+IGh0dHBzOi8vbGlzdHMub3BlbmNtcy5vcmcvbWFpbG1hbi9s aXN0aW5mby9vcGVuY21zLWRldgo+Pgo+Pgo+Pgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBUaGlzIG1haWwgaXMgc2VudCB0byB5b3UgZnJvbSB0 aGUgb3BlbmNtcy1kZXYgbWFpbGluZyBsaXN0Cj4gVG8gY2hhbmdlIHlvdXIgbGlzdCBvcHRpb25z LCBvciB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBsaXN0LCBwbGVhc2UgdmlzaXQKPiBodHRwczov L2xpc3RzLm9wZW5jbXMub3JnL21haWxtYW4vbGlzdGluZm8vb3BlbmNtcy1kZXYKPgo+Cj4KLS0g Ck1pY2hhZWwgRW1tZXJpY2gKICAKQWxrYWNvbiBTb2Z0d2FyZSBHbWJIICYgQ28uIEtHIC0gVGhl IE9wZW5DbXMgRXhwZXJ0cwpodHRwOi8vd3d3LmFsa2Fjb24uY29tCmh0dHA6Ly93d3cub3BlbmNt cy5vcmcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClRo aXMgbWFpbCBpcyBzZW50IHRvIHlvdSBmcm9tIHRoZSBvcGVuY21zLWRldiBtYWlsaW5nIGxpc3QK VG8gY2hhbmdlIHlvdXIgbGlzdCBvcHRpb25zLCBvciB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBs aXN0LCBwbGVhc2UgdmlzaXQKaHR0cHM6Ly9saXN0cy5vcGVuY21zLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL29wZW5jbXMtZGV2CgoKCg==