From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Jerry James To: git-commits@fedoraproject.org Subject: [rpms/stringtemplate] epel10: Add patch to fix ambiguous references to StringTemplate Date: Thu, 20 Aug 2026 11:50:54 GMT Message-ID: <178722665484.1.8644958702702118692.rpms-stringtemplate-267d370a53dc@fedoraproject.org> List-ID: X-Git-Repo: rpms/stringtemplate X-Git-Branch: epel10 X-Git-Rev: 267d370a53dc8e13eee235213c5c3437d39016f1 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvc3RyaW5ndGVtcGxhdGUKICAgICAgICAgICAgQnJhbmNoIDogZXBlbDEwCiAg ICAgICAgICAgIENvbW1pdCA6IDI2N2QzNzBhNTNkYzhlMTNlZWUyMzUyMTNjNWMzNDM3ZDM5MDE2 ZjEKICAgICAgICAgICAgQXV0aG9yIDogSmVycnkgSmFtZXMgPGxvZ2FuamVycnlAZ21haWwuY29t PgogICAgICAgICAgICBEYXRlICAgOiAyMDI1LTA3LTA1VDE1OjM1OjA0LTA2OjAwCiAgICAgICAg ICAgIFN0YXRzICA6ICs0NTk5Ly01IGluIDMgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBo dHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL3N0cmluZ3RlbXBsYXRlL2MvMjY3ZDM3 MGE1M2RjOGUxM2VlZTIzNTIxM2M1YzM0MzdkMzkwMTZmMT9icmFuY2g9ZXBlbDEwCgogICAgICAg ICAgICBMb2c6CiAgICAgICAgICAgIEFkZCBwYXRjaCB0byBmaXggYW1iaWd1b3VzIHJlZmVyZW5j ZXMgdG8gU3RyaW5nVGVtcGxhdGUKCi0gQWRkIHBhdGNoIHRvIGF2b2lkIHVzaW5nIGRlcHJlY2F0 ZWQgIm5ldyBJbnRlZ2VyIiBhbmQgIm5ldyBCb29sZWFuIgotIENoYW5nZSBsaWNlbnNlIHRvIEJT RC0zLUNsYXVzZQoKLS0tCmRpZmYgLS1naXQgYS9zdHJpbmd0ZW1wbGF0ZS0zLjIuMS1hbWJpZ3Vp dHkucGF0Y2ggYi9zdHJpbmd0ZW1wbGF0ZS0zLjIuMS1hbWJpZ3VpdHkucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViODA0OAotLS0gL2Rldi9udWxsCisrKyBiL3N0 cmluZ3RlbXBsYXRlLTMuMi4xLWFtYmlndWl0eS5wYXRjaApAQCAtMCwwICsxLDQzNDQgQEAKKy0t LSBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL2FjdGlvbi5nLm9yaWcJMjAw OS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmlu Z3RlbXBsYXRlL2xhbmd1YWdlL2FjdGlvbi5nCTIwMjUtMDctMDUgMTM6MjA6MjMuMDEzMjUxOTY1 IC0wNjAwCitAQCAtNTQsMTYgKzU0LDE2IEBAIHRva2VucyB7CisgfQorIAorIHsKKy0gICAgcHJv dGVjdGVkIFN0cmluZ1RlbXBsYXRlIHNlbGYgPSBudWxsOworKyAgICBwcm90ZWN0ZWQgb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHNlbGYgPSBudWxsOworIAorLSAgICBw dWJsaWMgQWN0aW9uUGFyc2VyKFRva2VuU3RyZWFtIGxleGVyLCBTdHJpbmdUZW1wbGF0ZSBzZWxm KSB7CisrICAgIHB1YmxpYyBBY3Rpb25QYXJzZXIoVG9rZW5TdHJlYW0gbGV4ZXIsIG9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzZWxmKSB7CisgICAgICAgICB0aGlzKGxl eGVyLCAyKTsKKyAgICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7CisgICAgIH0KKyAKKyAJcHVibGlj IHZvaWQgcmVwb3J0RXJyb3IoUmVjb2duaXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgU3Ry aW5nVGVtcGxhdGVHcm91cCBncm91cCA9IHNlbGYuZ2V0R3JvdXAoKTsKKy0gICAgICAgIGlmICgg Z3JvdXA9PVN0cmluZ1RlbXBsYXRlLmRlZmF1bHRHcm91cCApIHsKKysgICAgICAgIGlmICggZ3Jv dXA9PW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZS5kZWZhdWx0R3JvdXAg KSB7CisgICAgICAgICAgICAgc2VsZi5lcnJvcigiYWN0aW9uIHBhcnNlIGVycm9yOyB0ZW1wbGF0 ZSBjb250ZXh0IGlzICIrc2VsZi5nZXRFbmNsb3NpbmdJbnN0YW5jZVN0YWNrU3RyaW5nKCksIGUp OworICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CitAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVk VGVtcGxhdGUKKyBhbm9ueW1vdXNUZW1wbGF0ZQorIAk6CXQ6QU5PTllNT1VTX1RFTVBMQVRFCisg ICAgICAgICB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBhbm9ueW1vdXMgPSBuZXcgU3RyaW5n VGVtcGxhdGUoKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBhbm9ueW1vdXMgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlKCk7CisgICAgICAgICBhbm9ueW1vdXMuc2V0R3JvdXAoc2VsZi5nZXRHcm91cCgpKTsKKyAg ICAgICAgIGFub255bW91cy5zZXRFbmNsb3NpbmdJbnN0YW5jZShzZWxmKTsKKyAgICAgICAgIGFu b255bW91cy5zZXRUZW1wbGF0ZSh0LmdldFRleHQoKSk7CistLS0gc3JjL29yZy9hbnRsci9zdHJp bmd0ZW1wbGF0ZS9sYW5ndWFnZS9hbmdsZS5icmFja2V0LnRlbXBsYXRlLmcub3JpZwkyMDA5LTA5 LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAtMDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVt cGxhdGUvbGFuZ3VhZ2UvYW5nbGUuYnJhY2tldC50ZW1wbGF0ZS5nCTIwMjUtMDctMDUgMTM6MjA6 NDYuNTI1MTQyMTA4IC0wNjAwCitAQCAtNDUsOSArNDUsOSBAQCBvcHRpb25zIHsKKyAKKyB7Cisg cHJvdGVjdGVkIFN0cmluZyBjdXJyZW50SW5kZW50ID0gbnVsbDsKKy1wcm90ZWN0ZWQgU3RyaW5n VGVtcGxhdGUgc2VsZjsKKytwcm90ZWN0ZWQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIHNlbGY7CisgCistcHVibGljIEFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIoU3Ry aW5nVGVtcGxhdGUgc2VsZiwgUmVhZGVyIHIpIHsKKytwdWJsaWMgQW5nbGVCcmFja2V0VGVtcGxh dGVMZXhlcihvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwgUmVh ZGVyIHIpIHsKKyAJdGhpcyhyKTsKKyAJdGhpcy5zZWxmID0gc2VsZjsKKyB9CistLS0gc3JjL29y Zy9hbnRsci9zdHJpbmd0ZW1wbGF0ZS9sYW5ndWFnZS9BU1RFeHByLmphdmEub3JpZwkyMDA5LTA5 LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAtMDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVt cGxhdGUvbGFuZ3VhZ2UvQVNURXhwci5qYXZhCTIwMjUtMDctMDUgMTM6Mjk6MzguNTM1MDUxNTg5 IC0wNjAwCitAQCAtMzAsNyArMzAsNiBAQCBwYWNrYWdlIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5sYW5ndWFnCisgaW1wb3J0IGFudGxyLlJlY29nbml0aW9uRXhjZXB0aW9uOworIGltcG9ydCBh bnRsci5jb2xsZWN0aW9ucy5BU1Q7CisgaW1wb3J0IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5B dHRyaWJ1dGVSZW5kZXJlcjsKKy1pbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlOworIGltcG9ydCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGVHcm91cDsKKyBpbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl V3JpdGVyOworIAorQEAgLTU0LDcgKzUzLDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5k cyBFeHByIHsKKyAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NQVBfS0VZX05B TUUgPSAia2V5IjsKKyAKKyAJLyoqIFVzZWQgdG8gaW5kaWNhdGUgImRlZmF1bHQ6a2V5IiBpbiBt YXBzIHdpdGhpbiBncm91cHMgKi8KKy0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdUZW1wbGF0 ZSBNQVBfS0VZX1ZBTFVFID0gbmV3IFN0cmluZ1RlbXBsYXRlKCk7CisrCXB1YmxpYyBzdGF0aWMg ZmluYWwgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIE1BUF9LRVlfVkFM VUUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKCk7CisgCisg CS8qKiBVc2luZyBhbiBleHByIG9wdGlvbiB3L28gdmFsdWUsIG1ha2VzIG9wdGlvbnMgdGFibGUg aG9sZCBFTVBUWV9PUFRJT04KKyAJICogIHZhbHVlIGZvciB0aGF0IGtleS4KK0BAIC0xMDksNyAr MTA4LDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJLyoqIEEgY2Fj aGVkIHZhbHVlIG9mIG9wdGlvbiBmb3JtYXQ9ZXhwciAqLworIAlTdHJpbmcgZm9ybWF0U3RyaW5n ID0gbnVsbDsKKyAKKy0JcHVibGljIEFTVEV4cHIoU3RyaW5nVGVtcGxhdGUgZW5jbG9zaW5nVGVt cGxhdGUsIEFTVCBleHByVHJlZSwgTWFwIG9wdGlvbnMpIHsKKysJcHVibGljIEFTVEV4cHIob3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVuY2xvc2luZ1RlbXBsYXRlLCBB U1QgZXhwclRyZWUsIE1hcCBvcHRpb25zKSB7CisgCQlzdXBlcihlbmNsb3NpbmdUZW1wbGF0ZSk7 CisgICAgICAgICB0aGlzLmV4cHJUcmVlID0gZXhwclRyZWU7CisgICAgICAgICB0aGlzLm9wdGlv bnMgPSBvcHRpb25zOworQEAgLTEzMCw3ICsxMjksNyBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBl eHRlbmRzIEV4cHIgeworIAkgKiAgSWYgdGhleSBzZXQgYW5jaG9yIG9wdGlvbiwgdGhlbiBpbmZv cm0gdGhlIHdyaXRlciB0byBwdXNoIGN1cnJlbnQKKyAJICogIGNoYXIgcG9zaXRpb24uCisgICAg ICAqLworLSAgICBwdWJsaWMgaW50IHdyaXRlKFN0cmluZ1RlbXBsYXRlIHNlbGYsIFN0cmluZ1Rl bXBsYXRlV3JpdGVyIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKysgICAgcHVibGljIGludCB3 cml0ZShvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwgU3RyaW5n VGVtcGxhdGVXcml0ZXIgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgaWYgKCBl eHByVHJlZT09bnVsbCB8fCBzZWxmPT1udWxsIHx8IG91dD09bnVsbCApIHsKKyAgICAgICAgICAg ICByZXR1cm4gMDsKKyAgICAgICAgIH0KK0BAIC0xNTksNyArMTU4LDcgQEAgcHVibGljIGNsYXNz IEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAgICAgfQorIAorIAkvKiogR3JhYiBhbmQgY2FjaGUg b3B0aW9uczsgdmVyaWZ5IG9wdGlvbnMgYXJlIHZhbGlkICovCistCXByb3RlY3RlZCB2b2lkIGhh bmRsZUV4cHJPcHRpb25zKFN0cmluZ1RlbXBsYXRlIHNlbGYpIHsKKysJcHJvdGVjdGVkIHZvaWQg aGFuZGxlRXhwck9wdGlvbnMob3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHNlbGYpIHsKKyAJCS8vIG1ha2Ugc3VyZSBvcHRpb25zIGRvbid0IHVzZSBmb3JtYXQgLyByZW5k ZXJlci4gIFRoZXkgYXJlIHVzdWFsbHkKKyAJCS8vIHN0cmluZ3Mgd2hpY2ggbWlnaHQgaW52b2tl IGEgc3RyaW5nIHJlbmRlcmVyIGV0Yy4uLgorIAkJZm9ybWF0U3RyaW5nID0gbnVsbDsKK0BAIC0x OTksMTYgKzE5OCwxNiBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgeworIAkv KiogRm9yIDxuYW1lcyxwaG9uZXM6e24scCB8IC4uLn0+IHRyZWF0IHRoZSBuYW1lcywgcGhvbmVz IGFzIGxpc3RzCisgCSAqICB0byBiZSB3YWxrZWQgaW4gbG9jayBzdGVwIGFzIG49bmFtZXNbaV0s IHA9cGhvbmVzW2ldLgorIAkgKi8KKy0JcHVibGljIE9iamVjdCBhcHBseVRlbXBsYXRlVG9MaXN0 T2ZBdHRyaWJ1dGVzKFN0cmluZ1RlbXBsYXRlIHNlbGYsCisrCXB1YmxpYyBPYmplY3QgYXBwbHlU ZW1wbGF0ZVRvTGlzdE9mQXR0cmlidXRlcyhvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgc2VsZiwKKyAJCQkJCQkJCQkJCQkgIExpc3QgYXR0cmlidXRlcywKKy0JCQkJCQkJ CQkJCQkgIFN0cmluZ1RlbXBsYXRlIHRlbXBsYXRlVG9BcHBseSkKKysJCQkJCQkJCQkJCQkgIG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ZW1wbGF0ZVRvQXBwbHkpCisg CXsKKyAJCWlmICggYXR0cmlidXRlcz09bnVsbCB8fCB0ZW1wbGF0ZVRvQXBwbHk9PW51bGwgfHwg YXR0cmlidXRlcy5zaXplKCk9PTAgKSB7CisgCQkJcmV0dXJuIG51bGw7IC8vIGRvIG5vdCBhcHBs eSBpZiBtaXNzaW5nIHRlbXBsYXRlcyBvciBlbXB0eSB2YWx1ZXMKKyAJCX0KKyAJCU1hcCBhcmd1 bWVudENvbnRleHQgPSBudWxsOworIAkJLy8gaW5kaWNhdGUgaXQncyBhbiBTVC1jcmVhdGVkIGxp c3QKKy0JCUxpc3QgcmVzdWx0cyA9IG5ldyBTdHJpbmdUZW1wbGF0ZS5TVEF0dHJpYnV0ZUxpc3Qo KTsKKysJCUxpc3QgcmVzdWx0cyA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUuU1RBdHRyaWJ1dGVMaXN0KCk7CisgCisgCQkvLyBjb252ZXJ0IGFsbCBhdHRyaWJ1 dGVzIHRvIGl0ZXJhdG9ycyBldmVuIGlmIGp1c3Qgb25lIHZhbHVlCisgCQlmb3IgKGludCBhID0g MDsgYSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyBhKyspIHsKK0BAIC0yNjYsNyArMjY1LDcgQEAgcHVi bGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJCQl9CisgCQkJYXJndW1lbnRDb250 ZXh0LnB1dChERUZBVUxUX0lOREVYX1ZBUklBQkxFX05BTUUsIG5ldyBJbnRlZ2VyKGkrMSkpOwor IAkJCWFyZ3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9JTkRFWDBfVkFSSUFCTEVfTkFNRSwgbmV3 IEludGVnZXIoaSkpOworLQkJCVN0cmluZ1RlbXBsYXRlIGVtYmVkZGVkID0gdGVtcGxhdGVUb0Fw cGx5LmdldEluc3RhbmNlT2YoKTsKKysJCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgZW1iZWRkZWQgPSB0ZW1wbGF0ZVRvQXBwbHkuZ2V0SW5zdGFuY2VPZigpOworIAkJ CWVtYmVkZGVkLnNldEVuY2xvc2luZ0luc3RhbmNlKHNlbGYpOworIAkJCWVtYmVkZGVkLnNldEFy Z3VtZW50Q29udGV4dChhcmd1bWVudENvbnRleHQpOworIAkJCXJlc3VsdHMuYWRkKGVtYmVkZGVk KTsKK0BAIC0yNzYsMTQgKzI3NSwxNCBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4 cHIgeworIAkJcmV0dXJuIHJlc3VsdHM7CisgCX0KKyAKKy0JcHVibGljIE9iamVjdCBhcHBseUxp c3RPZkFsdGVybmF0aW5nVGVtcGxhdGVzKFN0cmluZ1RlbXBsYXRlIHNlbGYsCisrCXB1YmxpYyBP YmplY3QgYXBwbHlMaXN0T2ZBbHRlcm5hdGluZ1RlbXBsYXRlcyhvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBhdHRyaWJ1dGVWYWx1ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QgdGVtcGxhdGVzVG9B cHBseSkKKyAgICAgeworICAgICAgICAgaWYgKCBhdHRyaWJ1dGVWYWx1ZT09bnVsbCB8fCB0ZW1w bGF0ZXNUb0FwcGx5PT1udWxsIHx8IHRlbXBsYXRlc1RvQXBwbHkuc2l6ZSgpPT0wICkgeworICAg ICAgICAgICAgIHJldHVybiBudWxsOyAvLyBkbyBub3QgYXBwbHkgaWYgbWlzc2luZyB0ZW1wbGF0 ZXMgb3IgZW1wdHkgdmFsdWUKKyAgICAgICAgIH0KKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGVt YmVkZGVkID0gbnVsbDsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBlbWJlZGRlZCA9IG51bGw7CisgICAgICAgICBNYXAgYXJndW1lbnRDb250ZXh0ID0g bnVsbDsKKyAKKyAgICAgICAgIC8vIG5vcm1hbGl6ZSBjb2xsZWN0aW9ucyBhbmQgc3VjaCB0byB1 c2UgaXRlcmF0b3JzCitAQCAtMjkzLDcgKzI5Miw3IEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4 dGVuZHMgRXhwciB7CisgCisgICAgICAgICBpZiAoIGF0dHJpYnV0ZVZhbHVlIGluc3RhbmNlb2Yg SXRlcmF0b3IgKSB7CisgCQkJLy8gcmVzdWx0cyBjYW4gYmUgdHJlYXRlZCBsaXN0IGFuIGF0dHJp YnV0ZSwgaW5kaWNhdGUgU1QgY3JlYXRlZCBsaXN0CistCQkJTGlzdCByZXN1bHRWZWN0b3IgPSBu ZXcgU3RyaW5nVGVtcGxhdGUuU1RBdHRyaWJ1dGVMaXN0KCk7CisrCQkJTGlzdCByZXN1bHRWZWN0 b3IgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLlNUQXR0cmli dXRlTGlzdCgpOworICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSAoSXRlcmF0b3IpYXR0cmli dXRlVmFsdWU7CisgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgIHdoaWxlICgg aXRlci5oYXNOZXh0KCkgKSB7CitAQCAtMzA1LDcgKzMwNCw3IEBAIHB1YmxpYyBjbGFzcyBBU1RF eHByIGV4dGVuZHMgRXhwciB7CisgCQkJCQlpdGhWYWx1ZSA9IG51bGxWYWx1ZTsKKyAJCQkJfQor ICAgICAgICAgICAgICAgICBpbnQgdGVtcGxhdGVJbmRleCA9IGkgJSB0ZW1wbGF0ZXNUb0FwcGx5 LnNpemUoKTsgLy8gcm90YXRlIHRocm91Z2gKKy0gICAgICAgICAgICAgICAgZW1iZWRkZWQgPSAo U3RyaW5nVGVtcGxhdGUpdGVtcGxhdGVzVG9BcHBseS5nZXQodGVtcGxhdGVJbmRleCk7CisrICAg ICAgICAgICAgICAgIGVtYmVkZGVkID0gKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSl0ZW1wbGF0ZXNUb0FwcGx5LmdldCh0ZW1wbGF0ZUluZGV4KTsKKyAgICAgICAgICAg ICAgICAgLy8gdGVtcGxhdGUgdG8gYXBwbHkgaXMgYW4gYWN0dWFsIFN0cmluZ1RlbXBsYXRlIChj cmVhdGVkIGluCisgICAgICAgICAgICAgICAgIC8vIGV2YWwuZyksIGJ1dCB0aGF0IGlzIHVzZWQg YXMgdGhlIGV4YW1wbGFyLiAgV2UgbXVzdCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgLy8gYSBu ZXcgaW5zdGFuY2Ugb2YgdGhlIGVtYmVkZGVkIHRlbXBsYXRlIHRvIGFwcGx5IGVhY2ggdGltZQor QEAgLTMxNyw3ICszMTYsNyBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgewor ICAgICAgICAgICAgICAgICBhcmd1bWVudENvbnRleHQgPSBuZXcgSGFzaE1hcCgpOworIAkJCQlN YXAgZm9ybWFsQXJncyA9IGVtYmVkZGVkLmdldEZvcm1hbEFyZ3VtZW50cygpOworIAkJCQlib29s ZWFuIGlzQW5vbnltb3VzID0KKy0JCQkJCWVtYmVkZGVkLmdldE5hbWUoKSA9PSBTdHJpbmdUZW1w bGF0ZS5BTk9OWU1PVVNfU1RfTkFNRTsKKysJCQkJCWVtYmVkZGVkLmdldE5hbWUoKSA9PSBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUuQU5PTllNT1VTX1NUX05BTUU7Cisg CQkJCXNldFNvbGVGb3JtYWxBcmd1bWVudFRvSXRoVmFsdWUoZW1iZWRkZWQsIGFyZ3VtZW50Q29u dGV4dCwgaXRoVmFsdWUpOworIAkJCQkvLyBpZiBpdCdzIGFuIGFub255bW91cyB0ZW1wbGF0ZSB3 aXRoIGEgZm9ybWFsIGFyZywgZG9uJ3Qgc2V0IGl0L2F0dHIKKyAJCQkJaWYgKCAhKGlzQW5vbnlt b3VzICYmIGZvcm1hbEFyZ3MhPW51bGwgJiYgZm9ybWFsQXJncy5zaXplKCk+MCkgKSB7CitAQCAt MzQ3LDEzICszNDYsMTMgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAg ICAgICAgICAgICBlbWJlZGRlZC5nZXROYW1lKCkrCisgICAgICAgICAgICAgIiB0byAiK2F0dHJp YnV0ZVZhbHVlKTsKKyAgICAgICAgICAgICAqLworLSAgICAgICAgICAgIGVtYmVkZGVkID0gKFN0 cmluZ1RlbXBsYXRlKXRlbXBsYXRlc1RvQXBwbHkuZ2V0KDApOworKyAgICAgICAgICAgIGVtYmVk ZGVkID0gKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSl0ZW1wbGF0ZXNU b0FwcGx5LmdldCgwKTsKKyAgICAgICAgICAgICBhcmd1bWVudENvbnRleHQgPSBuZXcgSGFzaE1h cCgpOworIAkJCU1hcCBmb3JtYWxBcmdzID0gZW1iZWRkZWQuZ2V0Rm9ybWFsQXJndW1lbnRzKCk7 CisgCQkJU3RyaW5nVGVtcGxhdGVBU1QgYXJncyA9IGVtYmVkZGVkLmdldEFyZ3VtZW50c0FTVCgp OworIAkJCXNldFNvbGVGb3JtYWxBcmd1bWVudFRvSXRoVmFsdWUoZW1iZWRkZWQsIGFyZ3VtZW50 Q29udGV4dCwgYXR0cmlidXRlVmFsdWUpOworIAkJCWJvb2xlYW4gaXNBbm9ueW1vdXMgPQorLQkJ CQllbWJlZGRlZC5nZXROYW1lKCkgPT0gU3RyaW5nVGVtcGxhdGUuQU5PTllNT1VTX1NUX05BTUU7 CisrCQkJCWVtYmVkZGVkLmdldE5hbWUoKSA9PSBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUuQU5PTllNT1VTX1NUX05BTUU7CisgCQkJLy8gaWYgaXQncyBhbiBhbm9ueW1v dXMgdGVtcGxhdGUgd2l0aCBhIGZvcm1hbCBhcmcsIGRvbid0IHNldCBpdC9hdHRyCisgCQkJaWYg KCAhKGlzQW5vbnltb3VzICYmIGZvcm1hbEFyZ3MhPW51bGwgJiYgZm9ybWFsQXJncy5zaXplKCk+ MCkgKSB7CisgCQkJCWFyZ3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9BVFRSSUJVVEVfTkFNRSwg YXR0cmlidXRlVmFsdWUpOworQEAgLTM2NywxMiArMzY2LDEyIEBAIHB1YmxpYyBjbGFzcyBBU1RF eHByIGV4dGVuZHMgRXhwciB7CisgICAgICAgICB9CisgICAgIH0KKyAKKy0JcHJvdGVjdGVkIHZv aWQgc2V0U29sZUZvcm1hbEFyZ3VtZW50VG9JdGhWYWx1ZShTdHJpbmdUZW1wbGF0ZSBlbWJlZGRl ZCwgTWFwIGFyZ3VtZW50Q29udGV4dCwgT2JqZWN0IGl0aFZhbHVlKSB7CisrCXByb3RlY3RlZCB2 b2lkIHNldFNvbGVGb3JtYWxBcmd1bWVudFRvSXRoVmFsdWUob3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlIGVtYmVkZGVkLCBNYXAgYXJndW1lbnRDb250ZXh0LCBPYmplY3Qg aXRoVmFsdWUpIHsKKyAJCU1hcCBmb3JtYWxBcmdzID0gZW1iZWRkZWQuZ2V0Rm9ybWFsQXJndW1l bnRzKCk7CisgCQlpZiAoIGZvcm1hbEFyZ3MhPW51bGwgKSB7CisgCQkJU3RyaW5nIHNvbGVBcmdO YW1lID0gbnVsbDsKKyAJCQlib29sZWFuIGlzQW5vbnltb3VzID0KKy0JCQkJZW1iZWRkZWQuZ2V0 TmFtZSgpID09IFN0cmluZ1RlbXBsYXRlLkFOT05ZTU9VU19TVF9OQU1FOworKwkJCQllbWJlZGRl ZC5nZXROYW1lKCkgPT0gb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLkFO T05ZTU9VU19TVF9OQU1FOworIAkJCWlmICggZm9ybWFsQXJncy5zaXplKCk9PTEgfHwgKGlzQW5v bnltb3VzJiZmb3JtYWxBcmdzLnNpemUoKT4wKSApIHsKKyAJCQkJaWYgKCBpc0Fub255bW91cyAm JiBmb3JtYWxBcmdzLnNpemUoKT4xICkgeworIAkJCQkJZW1iZWRkZWQuZXJyb3IoInRvbyBtYW55 IGFyZ3VtZW50cyBvbiB7Li4ufSB0ZW1wbGF0ZTogIitmb3JtYWxBcmdzKTsKK0BAIC0zOTUsNyAr Mzk0LDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJICoKKyAJICog IENhY2hlIHJlcGVhdGVkIHJlcXVlc3RzIGZvciBvYmoucHJvcCB3aXRoaW4gc2FtZSBncm91cC4K KyAgICAgICovCistCXB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0UHJvcGVydHkoU3RyaW5nVGVtcGxh dGUgc2VsZiwKKysJcHVibGljIE9iamVjdCBnZXRPYmplY3RQcm9wZXJ0eShvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwKKyAJCQkJCQkJCQlmaW5hbCBPYmplY3Qg bywKKyAJCQkJCQkJCQlmaW5hbCBPYmplY3QgcHJvcGVydHlOYW1lKSB7CisgCQlpZiAoIG89PW51 bGwgfHwgcHJvcGVydHlOYW1lPT1udWxsICkgeworQEAgLTQyMSwyMyArNDIwLDIzIEBAIHB1Ymxp YyBjbGFzcyBBU1RFeHByIGV4dGVuZHMgRXhwciB7CisgCQlyZXR1cm4gdmFsdWU7CisgCX0KKyAK Ky0JcHJvdGVjdGVkIE9iamVjdCByYXdHZXRPYmplY3RQcm9wZXJ0eShTdHJpbmdUZW1wbGF0ZSBz ZWxmLCBPYmplY3QgbywgT2JqZWN0IHByb3BlcnR5KSB7CisrCXByb3RlY3RlZCBPYmplY3QgcmF3 R2V0T2JqZWN0UHJvcGVydHkob3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHNlbGYsIE9iamVjdCBvLCBPYmplY3QgcHJvcGVydHkpIHsKKyAJCUNsYXNzIGMgPSBvLmdldENs YXNzKCk7CisgICAgICAgICBPYmplY3QgdmFsdWUgPSBudWxsOworIAorIAkJLy8gU3BlY2lhbCBj YXNlOiBvdXIgYXV0b21hdGljYWxseSBjcmVhdGVkIEFnZ3JlZ2F0ZXMgdmlhCisgICAgICAgICAv LyBhdHRyaWJ1dGUgbmFtZTogIntvYmoue3Byb3AxLHByb3AyfX0iCistICAgICAgICBpZiAoIGM9 PVN0cmluZ1RlbXBsYXRlLkFnZ3JlZ2F0ZS5jbGFzcyApIHsKKysgICAgICAgIGlmICggYz09b3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLkFnZ3JlZ2F0ZS5jbGFzcyApIHsK KyAJCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gKFN0cmluZylwcm9wZXJ0eTsKKy0gICAgICAgICAg ICB2YWx1ZSA9ICgoU3RyaW5nVGVtcGxhdGUuQWdncmVnYXRlKW8pLmdldCgoU3RyaW5nKXByb3Bl cnR5TmFtZSk7CisrICAgICAgICAgICAgdmFsdWUgPSAoKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZS5BZ2dyZWdhdGUpbykuZ2V0KChTdHJpbmcpcHJvcGVydHlOYW1lKTsK KyAJCQlyZXR1cm4gdmFsdWU7CisgICAgICAgICB9CisgCisgICAgICAgICAvLyBTcGVjaWFsIGNh c2U6IGlmIGl0J3MgYSB0ZW1wbGF0ZSwgcHVsbCBwcm9wZXJ0eSBmcm9tCisgICAgICAgICAvLyBp dCdzIGF0dHJpYnV0ZSB0YWJsZS4KKyAgICAgICAgIC8vIFRPRE86IFRKUCBqdXN0IGFza2VkIGhp bXNlbGYgd2h5IHdlIGNhbid0IGRvIGluaGVyaXRlZCBhdHRyIGhlcmU/CistICAgICAgICBlbHNl IGlmICggYz09U3RyaW5nVGVtcGxhdGUuY2xhc3MgKSB7CistICAgICAgICAgICAgTWFwIGF0dHJp YnV0ZXMgPSAoKFN0cmluZ1RlbXBsYXRlKW8pLmdldEF0dHJpYnV0ZXMoKTsKKysgICAgICAgIGVs c2UgaWYgKCBjPT1vcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUuY2xhc3Mg KSB7CisrICAgICAgICAgICAgTWFwIGF0dHJpYnV0ZXMgPSAoKG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSlvKS5nZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAgaWYg KCBhdHRyaWJ1dGVzIT1udWxsICkgeworIAkJCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gKFN0cmlu Zylwcm9wZXJ0eTsKKyAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLmdldChwcm9w ZXJ0eU5hbWUpOworQEAgLTYyOSwxMyArNjI4LDEzIEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4 dGVuZHMgRXhwciB7CisgICAgICAqICB0byBhIHN0cmluZyB5ZXQuICBJdCBtYXkgbmVlZCBhdHRy aWJ1dGVzIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIKKyAgICAgICogIHRoaXMgaXMgaW5z ZXJ0ZWQgaW50byBhbm90aGVyIHRlbXBsYXRlLgorICAgICAgKi8KKy0JcHVibGljIFN0cmluZ1Rl bXBsYXRlIGdldFRlbXBsYXRlSW5jbHVkZShTdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmcsCisrCXB1 YmxpYyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZ2V0VGVtcGxhdGVJ bmNsdWRlKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbmNsb3Npbmcs CisgCQkJCQkJCQkJCQkgU3RyaW5nIHRlbXBsYXRlTmFtZSwKKyAJCQkJCQkJCQkJCSBTdHJpbmdU ZW1wbGF0ZUFTVCBhcmd1bWVudHNBU1QpCisgICAgIHsKKyAJCS8vU3lzdGVtLm91dC5wcmludGxu KCJnZXRUZW1wbGF0ZUluY2x1ZGU6IGxvb2sgdXAgIitlbmNsb3NpbmcuZ2V0R3JvdXAoKS5nZXRO YW1lKCkrIjo6Iit0ZW1wbGF0ZU5hbWUpOworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBn cm91cCA9IGVuY2xvc2luZy5nZXRHcm91cCgpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgZW1i ZWRkZWQgPSBncm91cC5nZXRFbWJlZGRlZEluc3RhbmNlT2YoZW5jbG9zaW5nLCB0ZW1wbGF0ZU5h bWUpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVt YmVkZGVkID0gZ3JvdXAuZ2V0RW1iZWRkZWRJbnN0YW5jZU9mKGVuY2xvc2luZywgdGVtcGxhdGVO YW1lKTsKKyAgICAgICAgIGlmICggZW1iZWRkZWQ9PW51bGwgKSB7CisgICAgICAgICAgICAgZW5j bG9zaW5nLmVycm9yKCJjYW5ub3QgbWFrZSBlbWJlZGRlZCBpbnN0YW5jZSBvZiAiK3RlbXBsYXRl TmFtZSsKKyAgICAgICAgICAgICAgICAgICAgICIgaW4gdGVtcGxhdGUgIitlbmNsb3NpbmcuZ2V0 TmFtZSgpKTsKK0BAIC02NTYsNyArNjU1LDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5k cyBFeHByIHsKKyAgICAgICogIElmIHNlbGYgaXMgYW4gZW1iZWRkZWQgdGVtcGxhdGUsIHlvdSBt aWdodCBoYXZlIHNwZWNpZmllZAorICAgICAgKiAgYSBzZXBhcmF0b3IgYXJnOyB1c2VkIHdoZW4g aXMgYSB2ZWN0b3IuCisgCSAqLworLSAgICBwdWJsaWMgaW50IHdyaXRlQXR0cmlidXRlKFN0cmlu Z1RlbXBsYXRlIHNlbGYsIE9iamVjdCBvLCBTdHJpbmdUZW1wbGF0ZVdyaXRlciBvdXQpIHsKKysg ICAgcHVibGljIGludCB3cml0ZUF0dHJpYnV0ZShvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgc2VsZiwgT2JqZWN0IG8sIFN0cmluZ1RlbXBsYXRlV3JpdGVyIG91dCkgewor ICAgICAgICAgcmV0dXJuIHdyaXRlKHNlbGYsbyxvdXQpOworICAgICB9CisgCitAQCAtNjY1LDcg KzY2NCw3IEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4dGVuZHMgRXhwciB7CisgCSAqICBKb2hu IFNueWRlcnMgZml4ZXMgaGVyZSBmb3IgZm9ybWF0U3RyaW5nLiAgQmFzaWNhbGx5LCBhbnkgdGlt ZQorIAkgKiAgeW91IGFyZSBhYm91dCB0byB3cml0ZSBhIHZhbHVlLCBjaGVjayBmb3JtYXR0aW5n LgorIAkgKi8KKy0JcHJvdGVjdGVkIGludCB3cml0ZShTdHJpbmdUZW1wbGF0ZSBzZWxmLAorKwlw cm90ZWN0ZWQgaW50IHdyaXRlKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSBzZWxmLAorIAkJCQkJCU9iamVjdCBvLAorIAkJCQkJCVN0cmluZ1RlbXBsYXRlV3JpdGVyIG91 dCkKKyAgICAgeworQEAgLTY3Nyw3ICs2NzYsNyBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRl bmRzIEV4cHIgeworICAgICAgICAgfQorICAgICAgICAgaW50IG4gPSAwOworICAgICAgICAgdHJ5 IHsKKy0gICAgICAgICAgICBpZiAoIG8gaW5zdGFuY2VvZiBTdHJpbmdUZW1wbGF0ZSApIHJldHVy biB3cml0ZVRlbXBsYXRlKHNlbGYsIG8sIG91dCk7CisrICAgICAgICAgICAgaWYgKCBvIGluc3Rh bmNlb2Ygb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlICkgcmV0dXJuIHdy aXRlVGVtcGxhdGUoc2VsZiwgbywgb3V0KTsKKyAgICAgICAgICAgICBvID0gY29udmVydEFueXRo aW5nSXRlcmF0YWJsZVRvSXRlcmF0b3Iobyk7IC8vIG5vcm1hbGl6ZQorICAgICAgICAgICAgIGlm ICggbyBpbnN0YW5jZW9mIEl0ZXJhdG9yICkgcmV0dXJuIHdyaXRlSXRlcmFibGVWYWx1ZShzZWxm LCBvLCBvdXQpOworICAgICAgICAgICAgIHJldHVybiB3cml0ZVBPSk8oc2VsZiwgbywgb3V0KTsK K0BAIC02ODgsNyArNjg3LDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsK KyAJCXJldHVybiBuOworICAgICB9CisgCistICAgIHByb3RlY3RlZCBpbnQgd3JpdGVQT0pPKFN0 cmluZ1RlbXBsYXRlIHNlbGYsIE9iamVjdCBvLCBTdHJpbmdUZW1wbGF0ZVdyaXRlciBvdXQpIHRo cm93cyBJT0V4Y2VwdGlvbiB7CisrICAgIHByb3RlY3RlZCBpbnQgd3JpdGVQT0pPKG9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzZWxmLCBPYmplY3QgbywgU3RyaW5nVGVt cGxhdGVXcml0ZXIgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgaW50IG4gPSAw OworICAgICAgICAgQXR0cmlidXRlUmVuZGVyZXIgcmVuZGVyZXIgPQorICAgICAgICAgICAgIHNl bGYuZ2V0QXR0cmlidXRlUmVuZGVyZXIoby5nZXRDbGFzcygpKTsKK0BAIC03MDMsOSArNzAyLDkg QEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAgICAgICAgIHJldHVybiBu OworICAgICB9CisgCistICAgIHByb3RlY3RlZCBpbnQgd3JpdGVUZW1wbGF0ZShTdHJpbmdUZW1w bGF0ZSBzZWxmLCBPYmplY3QgbywgU3RyaW5nVGVtcGxhdGVXcml0ZXIgb3V0KSB0aHJvd3MgSU9F eGNlcHRpb24geworKyAgICBwcm90ZWN0ZWQgaW50IHdyaXRlVGVtcGxhdGUob3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHNlbGYsIE9iamVjdCBvLCBTdHJpbmdUZW1wbGF0 ZVdyaXRlciBvdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICBpbnQgbiA9IDA7Cist ICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzdFRvV3JpdGUgPSAoU3RyaW5nVGVtcGxhdGUpbzsKKysg ICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdFRvV3JpdGUg PSAob3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKW87CisgICAgICAgICAv LyBmYWlsc2FmZTogcGVyaGFwcyBlbmNsb3NpbmcgaW5zdGFuY2Ugbm90IHNldAorICAgICAgICAg Ly8gT3IsIGl0IGNvdWxkIGJlIHNldCB0byBhbm90aGVyIGNvbnRleHQhICBUaGlzIG9jY3Vycwor ICAgICAgICAgLy8gd2hlbiB5b3Ugc3RvcmUgYSB0ZW1wbGF0ZSBpbnN0YW5jZSBhcyBhbiBhdHRy aWJ1dGUgb2YgbW9yZQorQEAgLTcxNSw4ICs3MTQsOCBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBl eHRlbmRzIEV4cHIgeworICAgICAgICAgc3RUb1dyaXRlLnNldEVuY2xvc2luZ0luc3RhbmNlKHNl bGYpOworICAgICAgICAgLy8gaWYgc2VsZiBpcyBmb3VuZCB1cCB0aGUgZW5jbG9zaW5nIGluc3Rh bmNlIGNoYWluLCB0aGVuCisgICAgICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24KKy0gICAgICAg IGlmICggU3RyaW5nVGVtcGxhdGUuaW5MaW50TW9kZSgpICYmCistICAgICAgICAgICAgIFN0cmlu Z1RlbXBsYXRlLmlzUmVjdXJzaXZlRW5jbG9zaW5nSW5zdGFuY2Uoc3RUb1dyaXRlKSApCisrICAg ICAgICBpZiAoIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZS5pbkxpbnRN b2RlKCkgJiYKKysgICAgICAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlLmlzUmVjdXJzaXZlRW5jbG9zaW5nSW5zdGFuY2Uoc3RUb1dyaXRlKSApCisgICAgICAg ICB7CisgICAgICAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uIHNpbmNlIHNvbWV0aW1lcyBldmFs IGtlZXBzIGdvaW5nCisgICAgICAgICAgICAgLy8gZXZlbiBhZnRlciBJIGlnbm9yZSB0aGlzIHdy aXRlIG9mIG8uCitAQCAtNzUyLDcgKzc1MSw3IEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4dGVu ZHMgRXhwciB7CisgICAgICAgICByZXR1cm4gbjsKKyAgICAgfQorIAorLSAgICBwcm90ZWN0ZWQg aW50IHdyaXRlSXRlcmFibGVWYWx1ZShTdHJpbmdUZW1wbGF0ZSBzZWxmLAorKyAgICBwcm90ZWN0 ZWQgaW50IHdyaXRlSXRlcmFibGVWYWx1ZShvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Jq ZWN0IG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1RlbXBs YXRlV3JpdGVyIG91dCkKKyAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorQEAgLTc3Niw4ICs3 NzUsOCBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgeworICAgICAgICAgICAg ICAgICAvLyBpZiB2YWx1ZSB0byBlbWl0IGlzIGEgdGVtcGxhdGUsIG9ubHkgYnVmZmVyIGl0cwor ICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpZiBpdCdzIG51bGxhYmxlIChjYW4gZXZhbCB0byBt aXNzaW5nKS4KKyAgICAgICAgICAgICAgICAgLy8gT25seSBhIHNlcXVlbmNlIG9mIElGIGNhbiBl dmFsIHRvIG1pc3NpbmcuCistICAgICAgICAgICAgICAgIGlmICggaXRlclZhbHVlIGluc3RhbmNl b2YgU3RyaW5nVGVtcGxhdGUgKSB7CistICAgICAgICAgICAgICAgICAgICBTdHJpbmdUZW1wbGF0 ZSBzdCA9IChTdHJpbmdUZW1wbGF0ZSlpdGVyVmFsdWU7CisrICAgICAgICAgICAgICAgIGlmICgg aXRlclZhbHVlIGluc3RhbmNlb2Ygb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlICkgeworKyAgICAgICAgICAgICAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlIHN0ID0gKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSlpdGVyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICBpbnQgbmNodW5rcyA9IHN0LmdldENo dW5rcygpIT1udWxsID8gc3QuZ2V0Q2h1bmtzKCkuc2l6ZSgpIDogMDsKKyAgICAgICAgICAgICAg ICAgICAgIGJvb2xlYW4gbnVsbGFibGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaT0wOyBpPG5jaHVua3M7IGkrKykgeworQEAgLTc5Niw3ICs3OTUsNyBAQCBwdWJsaWMg Y2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgeworICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgICAgIGlmICggIShpdGVyVmFsdWUgaW5z dGFuY2VvZiBTdHJpbmdUZW1wbGF0ZSkgJiYKKysgICAgICAgICAgICAgICAgaWYgKCAhKGl0ZXJW YWx1ZSBpbnN0YW5jZW9mIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSkg JiYKKyAgICAgICAgICAgICAgICAgICAgICAhKGl0ZXJWYWx1ZSBpbnN0YW5jZW9mIEl0ZXJhdG9y KSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHBv c3NpYmxlIHRvIGJlIG1pc3NpbmcsIGRvbid0IHdhc3RlIHRpbWUKK0BAIC04NDUsNyArODQ0LDcg QEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAgICAgICogIHNvIHRoYXQg d2UgY2FuIGNvbnZlcnQgdG8gc3RyaW5nIGFuZCB0aGVuIHJldXNlLCBkb24ndCB3YW50IHRvIGNv bXB1dGUKKyAgICAgICogIGFsbCB0aGUgdGltZTsgbXVzdCBwcmVjb21wdXRlIHcvbyB3cml0aW5n IHRvIG91dHB1dCBidWZmZXIuCisgICAgICAqLworLSAgICBwdWJsaWMgU3RyaW5nIGV2YWx1YXRl RXhwcmVzc2lvbihTdHJpbmdUZW1wbGF0ZSBzZWxmLAorKyAgICBwdWJsaWMgU3RyaW5nIGV2YWx1 YXRlRXhwcmVzc2lvbihvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2Vs ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGV4cHIpCisg ICAgIHsKKyAgICAgICAgIGlmICggZXhwciA9PW51bGwgKSB7CitAQCAtODgwLDcgKzg3OSw3IEBA IHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4dGVuZHMgRXhwciB7CisgCSAqICBuZXcgZW1iZWRkZWQg dGVtcGxhdGUuICBGb3IgZXhhbXBsZSwgYm9sZChpdGVtPWl0ZW0pIG1lYW5zCisgCSAqICB0aGF0 IGJvbGQuaXRlbSBzaG91bGQgZ2V0IHRoZSB2YWx1ZSBvZiBlbmNsb3NpbmcuaXRlbS4KKyAJICov CistICAgIHByb3RlY3RlZCB2b2lkIGV2YWx1YXRlQXJndW1lbnRzKFN0cmluZ1RlbXBsYXRlIHNl bGYpIHsKKysgICAgcHJvdGVjdGVkIHZvaWQgZXZhbHVhdGVBcmd1bWVudHMob3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHNlbGYpIHsKKyAgICAgICAgIFN0cmluZ1RlbXBs YXRlQVNUIGFyZ3VtZW50c0FTVCA9IHNlbGYuZ2V0QXJndW1lbnRzQVNUKCk7CisgICAgICAgICBp ZiAoIGFyZ3VtZW50c0FTVD09bnVsbCB8fCBhcmd1bWVudHNBU1QuZ2V0Rmlyc3RDaGlsZCgpPT1u dWxsICkJeworICAgICAgICAgICAgIC8vIHJldHVybiBpbW1lZGlhdGVseSBpZiBtaXNzaW5nIHRy ZWUgb3Igbm8gYWN0dWFsIGFyZ3MKK0BAIC04OTIsOCArODkxLDggQEAgcHVibGljIGNsYXNzIEFT VEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJCS8vIGF2YWlsYWJsZSBhcyB3ZWxsIHNvIHdlIHB1dCBh IGR1bW15IFNUIGJldHdlZW4gdGhlIGVuY2xvc2luZworIAkJLy8gY29udGV4dCBhbmQgdGhlIGVt YmVkZGVkIGNvbnRleHQuICBUaGUgZHVtbXkgaGFzIHRoZSBwcmVkZWZpbmVkCisgCQkvLyBjb250 ZXh0IGFzIGRvZXMgdGhlIGVtYmVkZGVkLgorLQkJU3RyaW5nVGVtcGxhdGUgZW5jbG9zaW5nID0g c2VsZi5nZXRFbmNsb3NpbmdJbnN0YW5jZSgpOworLQkJU3RyaW5nVGVtcGxhdGUgYXJnQ29udGV4 dFNUID0gbmV3IFN0cmluZ1RlbXBsYXRlKHNlbGYuZ2V0R3JvdXAoKSwgIiIpOworKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVuY2xvc2luZyA9IHNlbGYuZ2V0RW5j bG9zaW5nSW5zdGFuY2UoKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBhcmdDb250ZXh0U1QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlKHNlbGYuZ2V0R3JvdXAoKSwgIiIpOworIAkJYXJnQ29udGV4dFNULnNldE5hbWUoIjxp bnZva2UgIitzZWxmLmdldE5hbWUoKSsiIGFyZyBjb250ZXh0PiIpOworIAkJYXJnQ29udGV4dFNU LnNldEVuY2xvc2luZ0luc3RhbmNlKGVuY2xvc2luZyk7CisgCQlhcmdDb250ZXh0U1Quc2V0QXJn dW1lbnRDb250ZXh0KHNlbGYuZ2V0QXJndW1lbnRDb250ZXh0KCkpOworQEAgLTk3NSw3ICs5NzQs NyBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgeworIAkJCWl0ZXIgPSAoSXRl cmF0b3IpbzsKKyAJCX0KKyAJCWlmICggaXRlcj09bnVsbCApIHsKKy0JCQlMaXN0IHNpbmdsZXRv biA9IG5ldyBTdHJpbmdUZW1wbGF0ZS5TVEF0dHJpYnV0ZUxpc3QoMSk7CisrCQkJTGlzdCBzaW5n bGV0b24gPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLlNUQXR0 cmlidXRlTGlzdCgxKTsKKyAJCQlzaW5nbGV0b24uYWRkKG8pOworIAkJCXJldHVybiBzaW5nbGV0 b24uaXRlcmF0b3IoKTsKKyAJCX0KKy0tLSBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xh bmd1YWdlL0NvbmRpdGlvbmFsRXhwci5qYXZhLm9yaWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAw MDAwMDAgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL0Nv bmRpdGlvbmFsRXhwci5qYXZhCTIwMjUtMDctMDUgMTM6MzM6MTYuNDM2MTcyMDM3IC0wNjAwCitA QCAtMjksNyArMjksNiBAQCBwYWNrYWdlIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5sYW5ndWFn CisgCisgaW1wb3J0IGFudGxyLlJlY29nbml0aW9uRXhjZXB0aW9uOworIGltcG9ydCBhbnRsci5j b2xsZWN0aW9ucy5BU1Q7CistaW1wb3J0IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZTsKKyBpbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl V3JpdGVyOworIAorIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworQEAgLTM4LDI1ICszNywy NSBAQCBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKyAKKyAvKiogQSBjb25kaXRpb25hbCBy ZWZlcmVuY2UgdG8gYW4gZW1iZWRkZWQgc3VidGVtcGxhdGUuICovCisgcHVibGljIGNsYXNzIENv bmRpdGlvbmFsRXhwciBleHRlbmRzIEFTVEV4cHIgeworLQlTdHJpbmdUZW1wbGF0ZSBzdWJ0ZW1w bGF0ZSA9IG51bGw7CisrCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBz dWJ0ZW1wbGF0ZSA9IG51bGw7CisgCUxpc3QgZWxzZUlmU3VidGVtcGxhdGVzID0gbnVsbDsKKy0J U3RyaW5nVGVtcGxhdGUgZWxzZVN1YnRlbXBsYXRlID0gbnVsbDsKKysJb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVsc2VTdWJ0ZW1wbGF0ZSA9IG51bGw7CisgCisgCXBy b3RlY3RlZCBzdGF0aWMgY2xhc3MgRWxzZUlmQ2xhdXNlRGF0YSB7CisgCQlBU1RFeHByIGV4cHI7 CistCQlTdHJpbmdUZW1wbGF0ZSBzdDsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBzdDsKKyAJfQorIAorLQlwdWJsaWMgQ29uZGl0aW9uYWxFeHByKFN0cmluZ1Rl bXBsYXRlIGVuY2xvc2luZ1RlbXBsYXRlLCBBU1QgdHJlZSkgeworKwlwdWJsaWMgQ29uZGl0aW9u YWxFeHByKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdU ZW1wbGF0ZSwgQVNUIHRyZWUpIHsKKyAJCXN1cGVyKGVuY2xvc2luZ1RlbXBsYXRlLHRyZWUsbnVs bCk7CisgCX0KKyAKKy0JcHVibGljIHZvaWQgc2V0U3VidGVtcGxhdGUoU3RyaW5nVGVtcGxhdGUg c3VidGVtcGxhdGUpIHsKKysJcHVibGljIHZvaWQgc2V0U3VidGVtcGxhdGUob3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN1YnRlbXBsYXRlKSB7CisgCQl0aGlzLnN1YnRl bXBsYXRlID0gc3VidGVtcGxhdGU7CisgCX0KKyAKKyAJcHVibGljIHZvaWQgYWRkRWxzZUlmU3Vi dGVtcGxhdGUoZmluYWwgQVNURXhwciBjb25kaXRpb25hbFRyZWUsCistCQkJCQkJCQkJIGZpbmFs IFN0cmluZ1RlbXBsYXRlIHN1YnRlbXBsYXRlKQorKwkJCQkJCQkJCSBmaW5hbCBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3VidGVtcGxhdGUpCisgCXsKKyAJCWlmICgg ZWxzZUlmU3VidGVtcGxhdGVzPT1udWxsICkgeworIAkJCWVsc2VJZlN1YnRlbXBsYXRlcyA9IG5l dyBBcnJheUxpc3QoKTsKK0BAIC02OCwxNSArNjcsMTUgQEAgcHVibGljIGNsYXNzIENvbmRpdGlv bmFsRXhwciBleHRlbmRzIEFTVAorIAkJZWxzZUlmU3VidGVtcGxhdGVzLmFkZChkKTsKKyAJfQor IAorLQlwdWJsaWMgU3RyaW5nVGVtcGxhdGUgZ2V0U3VidGVtcGxhdGUoKSB7CisrCXB1YmxpYyBv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZ2V0U3VidGVtcGxhdGUoKSB7 CisgCQlyZXR1cm4gc3VidGVtcGxhdGU7CisgCX0KKyAKKy0JcHVibGljIFN0cmluZ1RlbXBsYXRl IGdldEVsc2VTdWJ0ZW1wbGF0ZSgpIHsKKysJcHVibGljIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBnZXRFbHNlU3VidGVtcGxhdGUoKSB7CisgCQlyZXR1cm4gZWxzZVN1 YnRlbXBsYXRlOworIAl9CisgCistCXB1YmxpYyB2b2lkIHNldEVsc2VTdWJ0ZW1wbGF0ZShTdHJp bmdUZW1wbGF0ZSBlbHNlU3VidGVtcGxhdGUpIHsKKysJcHVibGljIHZvaWQgc2V0RWxzZVN1YnRl bXBsYXRlKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbHNlU3VidGVt cGxhdGUpIHsKKyAJCXRoaXMuZWxzZVN1YnRlbXBsYXRlID0gZWxzZVN1YnRlbXBsYXRlOworIAl9 CisgCitAQCAtODQsNyArODMsNyBAQCBwdWJsaWMgY2xhc3MgQ29uZGl0aW9uYWxFeHByIGV4dGVu ZHMgQVNUCisgCSAqICB0byB3YWxrIHRoZSBjb25kaXRpb24gdHJlZSBjb21wdXRpbmcgdGhlIGJv b2xlYW4gdmFsdWUuICBJZiByZXN1bHQKKyAJICogIGlzIHRydWUsIHRoZW4gd3JpdGUgc3VidGVt cGxhdGUuCisgCSAqLworLQlwdWJsaWMgaW50IHdyaXRlKFN0cmluZ1RlbXBsYXRlIHNlbGYsIFN0 cmluZ1RlbXBsYXRlV3JpdGVyIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKysJcHVibGljIGlu dCB3cml0ZShvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwgU3Ry aW5nVGVtcGxhdGVXcml0ZXIgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworIAkJaWYgKCBleHBy VHJlZT09bnVsbCB8fCBzZWxmPT1udWxsIHx8IG91dD09bnVsbCApIHsKKyAJCQlyZXR1cm4gMDsK KyAJCX0KK0BAIC0xMTksNyArMTE4LDcgQEAgcHVibGljIGNsYXNzIENvbmRpdGlvbmFsRXhwciBl eHRlbmRzIEFTVAorIAkJCS8vIEVMU0UKKyAJCQlpZiAoICF0ZXN0ZWRUcnVlICYmIGVsc2VTdWJ0 ZW1wbGF0ZSE9bnVsbCApIHsKKyAJCQkJLy8gZXZhbHVhdGUgRUxTRSBjbGF1c2UgaWYgcHJlc2Vu dCBhbmQgSUYgY29uZGl0aW9uIGZhaWxlZAorLQkJCQlTdHJpbmdUZW1wbGF0ZSBzID0gZWxzZVN1 YnRlbXBsYXRlLmdldEluc3RhbmNlT2YoKTsKKysJCQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIHMgPSBlbHNlU3VidGVtcGxhdGUuZ2V0SW5zdGFuY2VPZigpOworIAkJ CQlzLnNldEVuY2xvc2luZ0luc3RhbmNlKHNlbGYpOworIAkJCQlzLnNldEdyb3VwKHNlbGYuZ2V0 R3JvdXAoKSk7CisgCQkJCXMuc2V0TmF0aXZlR3JvdXAoc2VsZi5nZXROYXRpdmVHcm91cCgpKTsK K0BAIC0xMzQsOSArMTMzLDkgQEAgcHVibGljIGNsYXNzIENvbmRpdGlvbmFsRXhwciBleHRlbmRz IEFTVAorIAkJcmV0dXJuIG47CisgCX0KKyAKKy0JcHJvdGVjdGVkIGludCB3cml0ZVN1YlRlbXBs YXRlKFN0cmluZ1RlbXBsYXRlIHNlbGYsCisrCXByb3RlY3RlZCBpbnQgd3JpdGVTdWJUZW1wbGF0 ZShvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwKKyAJCQkJCQkJ CSAgIFN0cmluZ1RlbXBsYXRlV3JpdGVyIG91dCwKKy0JCQkJCQkJCSAgIFN0cmluZ1RlbXBsYXRl IHN1YnRlbXBsYXRlKQorKwkJCQkJCQkJICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIHN1YnRlbXBsYXRlKQorIAkJdGhyb3dzIElPRXhjZXB0aW9uCisgCXsKKyAJCS8q IFRvIGV2YWx1YXRlIHRoZSBJRiBjaHVuaywgbWFrZSBhIG5ldyBpbnN0YW5jZSB3aG9zZSBlbmNs b3NpbmdJbnN0YW5jZQorQEAgLTE0NSw3ICsxNDQsNyBAQCBwdWJsaWMgY2xhc3MgQ29uZGl0aW9u YWxFeHByIGV4dGVuZHMgQVNUCisgCQkgKiBuZXcgdGVtcGxhdGUgaW5zdGFuY2UgZXZlcnkgdGlt ZSB3ZSBleGVjIHRoaXMgY2h1bmsgdG8gZ2V0IHRoZSBuZXcKKyAJCSAqICJlbmNsb3NpbmcgaW5z dGFuY2UiIHBvaW50ZXIuCisgCQkgKi8KKy0JCVN0cmluZ1RlbXBsYXRlIHMgPSBzdWJ0ZW1wbGF0 ZS5nZXRJbnN0YW5jZU9mKCk7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUgcyA9IHN1YnRlbXBsYXRlLmdldEluc3RhbmNlT2YoKTsKKyAJCXMuc2V0RW5jbG9zaW5n SW5zdGFuY2Uoc2VsZik7CisgCQkvLyBtYWtlIHN1cmUgd2UgZXZhbHVhdGUgaW4gY29udGV4dCBv ZiBlbmNsb3NpbmcgdGVtcGxhdGUncworIAkJLy8gZ3JvdXAgc28gcG9seW1vcnBoaXNtIHdvcmtz LiA6KQorLS0tIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvbGFuZ3VhZ2UvZXZhbC5nLm9y aWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxy L3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL2V2YWwuZwkyMDI1LTA3LTA1IDEzOjE4OjU0LjAwNjE4 NjE2NCAtMDYwMAorQEAgLTQ2LDEyICs0NiwxMiBAQCBvcHRpb25zIHsKKyAgICAgICAgIHB1Ymxp YyBPYmplY3QgdmFsdWU7CisgICAgIH07CisgCistICAgIHByb3RlY3RlZCBTdHJpbmdUZW1wbGF0 ZSBzZWxmID0gbnVsbDsKKysgICAgcHJvdGVjdGVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzZWxmID0gbnVsbDsKKyAgICAgcHJvdGVjdGVkIFN0cmluZ1RlbXBsYXRl V3JpdGVyIG91dCA9IG51bGw7CisgICAgIHByb3RlY3RlZCBBU1RFeHByIGNodW5rID0gbnVsbDsK KyAKKyAgICAgLyoqIENyZWF0ZSBhbiBldmFsdWF0b3IgdXNpbmcgYXR0cmlidXRlcyBmcm9tIHNl bGYgKi8KKy0gICAgcHVibGljIEFjdGlvbkV2YWx1YXRvcihTdHJpbmdUZW1wbGF0ZSBzZWxmLCBB U1RFeHByIGNodW5rLCBTdHJpbmdUZW1wbGF0ZVdyaXRlciBvdXQpIHsKKysgICAgcHVibGljIEFj dGlvbkV2YWx1YXRvcihvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2Vs ZiwgQVNURXhwciBjaHVuaywgU3RyaW5nVGVtcGxhdGVXcml0ZXIgb3V0KSB7CisgICAgICAgICB0 aGlzLnNlbGYgPSBzZWxmOworICAgICAgICAgdGhpcy5jaHVuayA9IGNodW5rOworICAgICAgICAg dGhpcy5vdXQgPSBvdXQ7CitAQCAtMTU1LDcgKzE1NSw3IEBAIExpc3QgYXR0cmlidXRlcyA9IG5l dyBBcnJheUxpc3QoKTsKKyAgICAgfAkjKAlNVUxUSV9BUFBMWSAoYT1leHByIHthdHRyaWJ1dGVz LmFkZChhKTt9ICkrIENPTE9OCisgCQkJYW5vbjpBTk9OWU1PVVNfVEVNUExBVEUKKyAJCQl7Cist CQkJU3RyaW5nVGVtcGxhdGUgYW5vbnltb3VzID0gYW5vbi5nZXRTdHJpbmdUZW1wbGF0ZSgpOwor KwkJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBhbm9ueW1vdXMgPSBh bm9uLmdldFN0cmluZ1RlbXBsYXRlKCk7CisgCQkJdGVtcGxhdGVzVG9BcHBseS5hZGRFbGVtZW50 KGFub255bW91cyk7CisgCQkJdmFsdWUgPSBjaHVuay5hcHBseVRlbXBsYXRlVG9MaXN0T2ZBdHRy aWJ1dGVzKHNlbGYsCisgCQkJCQkJCQkJCQkJCQkgIGF0dHJpYnV0ZXMsCitAQCAtMTk0LDcgKzE5 NCw3IEBAIE9iamVjdCBuID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICBTdHJpbmcgdGVtcGxhdGVOYW1lID0gdC5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAg IFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPSBzZWxmLmdldEdyb3VwKCk7CistICAgICAgICAg ICAgICAgIFN0cmluZ1RlbXBsYXRlIGVtYmVkZGVkID0gZ3JvdXAuZ2V0RW1iZWRkZWRJbnN0YW5j ZU9mKHNlbGYsIHRlbXBsYXRlTmFtZSk7CisrICAgICAgICAgICAgICAgIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbWJlZGRlZCA9IGdyb3VwLmdldEVtYmVkZGVkSW5z dGFuY2VPZihzZWxmLCB0ZW1wbGF0ZU5hbWUpOworICAgICAgICAgICAgICAgICBpZiAoIGVtYmVk ZGVkIT1udWxsICkgeworICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQuc2V0QXJndW1lbnRz QVNUKCNhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc1RvQXBwbHkuYWRkRWxl bWVudChlbWJlZGRlZCk7CitAQCAtMjAzLDcgKzIwMyw3IEBAIE9iamVjdCBuID0gbnVsbDsKKyAK KyAgICAgICAgICAgICB8CWFub246QU5PTllNT1VTX1RFTVBMQVRFCisgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgU3RyaW5nVGVtcGxhdGUgYW5vbnltb3VzID0gYW5vbi5nZXRT dHJpbmdUZW1wbGF0ZSgpOworKyAgICAgICAgICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgYW5vbnltb3VzID0gYW5vbi5nZXRTdHJpbmdUZW1wbGF0ZSgpOwor ICAgICAgICAgICAgICAgICAvLyB0byBwcm9wZXJseSBzZWUgb3ZlcnJpZGRlbiB0ZW1wbGF0ZXMs IGFsd2F5cyBzZXQKKyAgICAgICAgICAgICAgICAgLy8gYW5vbnltb3VzJyBncm91cCB0byBiZSBz ZWxmJ3MgZ3JvdXAKKyAJCQkJYW5vbnltb3VzLnNldEdyb3VwKHNlbGYuZ2V0R3JvdXAoKSk7CitA QCAtMjEyLDcgKzIxMiw3IEBAIE9iamVjdCBuID0gbnVsbDsKKyAKKyAgICAgICAgICAgICB8ICAg IyggIFZBTFVFIG49ZXhwciBhcmdzMjouCisgCQkJCQl7CistCQkJCQlTdHJpbmdUZW1wbGF0ZSBl bWJlZGRlZCA9IG51bGw7CisrCQkJCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUgZW1iZWRkZWQgPSBudWxsOworIAkJCQkJaWYgKCBuIT1udWxsICkgeworIAkJCQkJCVN0 cmluZyB0ZW1wbGF0ZU5hbWUgPSBuLnRvU3RyaW5nKCk7CisgCQkJCQkJU3RyaW5nVGVtcGxhdGVH cm91cCBncm91cCA9IHNlbGYuZ2V0R3JvdXAoKTsKK0BAIC0yNzMsNyArMjczLDcgQEAgYXR0cmli dXRlIHJldHVybnMgW09iamVjdCB2YWx1ZT1udWxsXQorICAgICAJeworICAgICAJdmFsdWU9YXQu Z2V0VGV4dCgpOworIAkJaWYgKCBhdC5nZXRUZXh0KCkhPW51bGwgKSB7CistCQkJU3RyaW5nVGVt cGxhdGUgdmFsdWVTVCA9bmV3IFN0cmluZ1RlbXBsYXRlKHNlbGYuZ2V0R3JvdXAoKSwgYXQuZ2V0 VGV4dCgpKTsKKysJCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdmFs dWVTVCA9bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShzZWxmLmdl dEdyb3VwKCksIGF0LmdldFRleHQoKSk7CisgCQkJdmFsdWVTVC5zZXRFbmNsb3NpbmdJbnN0YW5j ZShzZWxmKTsKKyAJCQl2YWx1ZVNULnNldE5hbWUoIjxhbm9ueW1vdXMgdGVtcGxhdGUgYXJndW1l bnQ+Iik7CisgCQkJdmFsdWUgPSB2YWx1ZVNUOworQEAgLTI4Niw3ICsyODYsNyBAQCBhdHRyaWJ1 dGUgcmV0dXJucyBbT2JqZWN0IHZhbHVlPW51bGxdCisgICogIHRoZSBlbWJlZGRlZCB0ZW1wbGF0 ZSAodGhlIG9uZSBpbnZva2VkKSBzbyB3ZSBjYW4gY2hlY2sgZm9ybWFsIGFyZ3MKKyAgKiAgaW4g cmF3U2V0QXJndW1lbnRBdHRyaWJ1dGUuCisgICovCistYXJnTGlzdFtTdHJpbmdUZW1wbGF0ZSBl bWJlZGRlZCwgTWFwIGluaXRpYWxDb250ZXh0XQorK2FyZ0xpc3Rbb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVtYmVkZGVkLCBNYXAgaW5pdGlhbENvbnRleHRdCisgICAg IHJldHVybnMgW01hcCBhcmd1bWVudENvbnRleHQ9bnVsbF0KKyB7CisgICAgIGFyZ3VtZW50Q29u dGV4dCA9IGluaXRpYWxDb250ZXh0OworQEAgLTI5OCw3ICsyOTgsNyBAQCBhcmdMaXN0W1N0cmlu Z1RlbXBsYXRlIGVtYmVkZGVkLCBNYXAgaW5pCisgICAgIHwJc2luZ2xlVGVtcGxhdGVBcmdbZW1i ZWRkZWQsYXJndW1lbnRDb250ZXh0XQorIAk7CisgCistc2luZ2xlVGVtcGxhdGVBcmdbU3RyaW5n VGVtcGxhdGUgZW1iZWRkZWQsIE1hcCBhcmd1bWVudENvbnRleHRdCisrc2luZ2xlVGVtcGxhdGVB cmdbb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVtYmVkZGVkLCBNYXAg YXJndW1lbnRDb250ZXh0XQorIHsKKyAgICAgT2JqZWN0IGUgPSBudWxsOworIH0KK0BAIC0zMzQs NyArMzM0LDcgQEAgc2luZ2xlVGVtcGxhdGVBcmdbU3RyaW5nVGVtcGxhdGUgZW1iZWRkZQorIAkg ICAgfQorIAk7CisgCistYXJndW1lbnRBc3NpZ25tZW50W1N0cmluZ1RlbXBsYXRlIGVtYmVkZGVk LCBNYXAgYXJndW1lbnRDb250ZXh0XQorK2FyZ3VtZW50QXNzaWdubWVudFtvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW1iZWRkZWQsIE1hcCBhcmd1bWVudENvbnRleHRd CisgeworICAgICBPYmplY3QgZSA9IG51bGw7CisgfQorLS0tIHNyYy9vcmcvYW50bHIvc3RyaW5n dGVtcGxhdGUvbGFuZ3VhZ2UvRXhwci5qYXZhLm9yaWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAw MDAwMDAgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL0V4 cHIuamF2YQkyMDI1LTA3LTA1IDEzOjM0OjE4LjY0MzU0MjU4NyAtMDYwMAorQEAgLTI3LDcgKzI3 LDYgQEAKKyAqLworIHBhY2thZ2Ugb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLmxhbmd1YWdlOwor IAorLWltcG9ydCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGU7CisgaW1w b3J0IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZUdyb3VwOworIGltcG9y dCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGVXcml0ZXI7CisgCitAQCAt NDUsNyArNDQsNyBAQCBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworICAqLworIGFic3Ry YWN0IHB1YmxpYyBjbGFzcyBFeHByIHsKKyAJLyoqIFRoZSBTdHJpbmdUZW1wbGF0ZSBvYmplY3Qg c3Vycm91bmRpbmcgdGhpcyBleHByICovCistCXByb3RlY3RlZCBTdHJpbmdUZW1wbGF0ZSBlbmNs b3NpbmdUZW1wbGF0ZTsKKysJcHJvdGVjdGVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZTsKKyAKKyAgICAgLyoqIEFueSB0aGluZyBzcGl0 IG91dCBhcyBhIGNodW5rIChldmVuIHBsYWluIHRleHQpIG11c3QgYmUgaW5kZW50ZWQKKyAgICAg ICogIGFjY29yZGluZyB0byB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgYWN0aW9uIHRoYXQgZ2VuZXJh dGVkIGl0LiAgU28sCitAQCAtNTYsMTUgKzU1LDE1IEBAIGFic3RyYWN0IHB1YmxpYyBjbGFzcyBF eHByIHsKKyAgICAgICovCisgICAgIHByb3RlY3RlZCBTdHJpbmcgaW5kZW50YXRpb24gPSBudWxs OworIAorLQlwdWJsaWMgRXhwcihTdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZSkgewor KwlwdWJsaWMgRXhwcihvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW5j bG9zaW5nVGVtcGxhdGUpIHsKKyAJCXRoaXMuZW5jbG9zaW5nVGVtcGxhdGUgPSBlbmNsb3NpbmdU ZW1wbGF0ZTsKKyAJfQorIAorICAgICAvKiogSG93IHRvIHdyaXRlIHRoaXMgbm9kZSB0byBvdXRw dXQ7IHJldHVybiBob3cgbWFueSBjaGFyIHdyaXR0ZW4gKi8KKy0gICAgYWJzdHJhY3QgcHVibGlj IGludCB3cml0ZShTdHJpbmdUZW1wbGF0ZSBzZWxmLCBTdHJpbmdUZW1wbGF0ZVdyaXRlciBvdXQp CisrICAgIGFic3RyYWN0IHB1YmxpYyBpbnQgd3JpdGUob3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIHNlbGYsIFN0cmluZ1RlbXBsYXRlV3JpdGVyIG91dCkKKyAgICAgICAg IHRocm93cyBJT0V4Y2VwdGlvbjsKKyAKKy0JcHVibGljIFN0cmluZ1RlbXBsYXRlIGdldEVuY2xv c2luZ1RlbXBsYXRlKCkgeworKwlwdWJsaWMgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIGdldEVuY2xvc2luZ1RlbXBsYXRlKCkgeworIAkJcmV0dXJuIGVuY2xvc2luZ1Rl bXBsYXRlOworIAl9CisgCistLS0gc3JjL29yZy9hbnRsci9zdHJpbmd0ZW1wbGF0ZS9sYW5ndWFn ZS9Gb3JtYWxBcmd1bWVudC5qYXZhLm9yaWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAg LTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL0Zvcm1hbEFy Z3VtZW50LmphdmEJMjAyNS0wNy0wNSAxMzozNDo0NC4yNjczMDM4NTcgLTA2MDAKK0BAIC0xLDcg KzEsNSBAQAorIHBhY2thZ2Ugb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLmxhbmd1YWdlOworIAor LWltcG9ydCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGU7CistCisgaW1w b3J0IGphdmEudXRpbC5IYXNoTWFwOworIGltcG9ydCBqYXZhLnV0aWwuTWFwOworIGltcG9ydCBq YXZhLnV0aWwuTGlzdDsKK0BAIC01MiwxMyArNTAsMTMgQEAgcHVibGljIGNsYXNzIEZvcm1hbEFy Z3VtZW50IHsKKyAgICAgLy9wcm90ZWN0ZWQgaW50IGNhcmRpbmFsaXR5ID0gUkVRVUlSRUQ7Cisg CisgCS8qKiBJZiB0aGV5IHNwZWNpZmllZCBuYW1lPSJ2YWx1ZSIsIHN0b3JlIHRoZSB0ZW1wbGF0 ZSBoZXJlICovCistCXB1YmxpYyBTdHJpbmdUZW1wbGF0ZSBkZWZhdWx0VmFsdWVTVDsKKysJcHVi bGljIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBkZWZhdWx0VmFsdWVT VDsKKyAKKyAJcHVibGljIEZvcm1hbEFyZ3VtZW50KFN0cmluZyBuYW1lKSB7CisgCQl0aGlzLm5h bWUgPSBuYW1lOworIAl9CisgCistCXB1YmxpYyBGb3JtYWxBcmd1bWVudChTdHJpbmcgbmFtZSwg U3RyaW5nVGVtcGxhdGUgZGVmYXVsdFZhbHVlU1QpIHsKKysJcHVibGljIEZvcm1hbEFyZ3VtZW50 KFN0cmluZyBuYW1lLCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZGVm YXVsdFZhbHVlU1QpIHsKKyAJCXRoaXMubmFtZSA9IG5hbWU7CisgCQl0aGlzLmRlZmF1bHRWYWx1 ZVNUID0gZGVmYXVsdFZhbHVlU1Q7CisgCX0KKy0tLSBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBs YXRlL2xhbmd1YWdlL2dyb3VwLmcub3JpZwkyMDA5LTA5LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAt MDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvbGFuZ3VhZ2UvZ3JvdXAuZwky MDI1LTA3LTA1IDEzOjM4OjAxLjA5NjkwMjU3MiAtMDYwMAorQEAgLTg4LDcgKzg4LDcgQEAgdGhp cy5ncm91cCA9IGc7CisgdGVtcGxhdGVbU3RyaW5nVGVtcGxhdGVHcm91cCBnXQorIHsKKyAgICAg TWFwIGZvcm1hbEFyZ3MgPSBudWxsOworLSAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9IG51bGw7Cisr ICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG51bGw7Cisg ICAgIGJvb2xlYW4gaWdub3JlID0gZmFsc2U7CisgICAgIFN0cmluZyB0ZW1wbGF0ZU5hbWU9bnVs bDsKKyAgICAgaW50IGxpbmUgPSBMVCgxKS5nZXRMaW5lKCk7CitAQCAtOTksMTIgKzk5LDEyIEBA IHRlbXBsYXRlW1N0cmluZ1RlbXBsYXRlR3JvdXAgZ10KKyAJICAgIAlpZiAoIGcuaXNEZWZpbmVk SW5UaGlzR3JvdXAodGVtcGxhdGVOYW1lKSApIHsKKyAJICAgICAgICAJZy5lcnJvcigiZ3JvdXAg IitnLmdldE5hbWUoKSsiIGxpbmUgIitsaW5lKyI6IHJlZGVmaW5pdGlvbiBvZiB0ZW1wbGF0ZSBy ZWdpb246IEAiKworIAkgICAgICAgIAkJc2NvcGUuZ2V0VGV4dCgpKyIuIityZWdpb24uZ2V0VGV4 dCgpKTsKKy0JCQkJc3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoKTsgLy8gY3JlYXRlIGJvZ3VzIHRl bXBsYXRlIHRvIGZpbGwgaW4KKysJCQkJc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKCk7IC8vIGNyZWF0ZSBib2d1cyB0ZW1wbGF0ZSB0byBmaWxsIGluCisg CQkJfQorIAkJCWVsc2UgeworIAkJCQlib29sZWFuIGVyciA9IGZhbHNlOworIAkJCQkvLyBAdGVt cGxhdGUucmVnaW9uKCkgOjo9ICIuLi4iCistCQkJCVN0cmluZ1RlbXBsYXRlIHNjb3BlU1QgPSBn Lmxvb2t1cFRlbXBsYXRlKHNjb3BlLmdldFRleHQoKSk7CisrCQkJCW9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzY29wZVNUID0gZy5sb29rdXBUZW1wbGF0ZShzY29wZS5n ZXRUZXh0KCkpOworIAkJCQlpZiAoIHNjb3BlU1Q9PW51bGwgKSB7CisgCQkJCQlnLmVycm9yKCJn cm91cCAiK2cuZ2V0TmFtZSgpKyIgbGluZSAiK2xpbmUrIjogcmVmZXJlbmNlIHRvIHJlZ2lvbiB3 aXRoaW4gdW5kZWZpbmVkIHRlbXBsYXRlOiAiKworIAkJCQkJCXNjb3BlLmdldFRleHQoKSk7CitA QCAtMTE2LDEzICsxMTYsMTMgQEAgdGVtcGxhdGVbU3RyaW5nVGVtcGxhdGVHcm91cCBnXQorIAkJ CQkJZXJyPXRydWU7CisgCQkJCX0KKyAJCQkJaWYgKCBlcnIgKSB7CistCQkJCQlzdCA9IG5ldyBT dHJpbmdUZW1wbGF0ZSgpOworKwkJCQkJc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKCk7CisgCQkJCX0KKyAJCQkJZWxzZSB7CisgCQkJCQlzdCA9IGcuZGVm aW5lUmVnaW9uVGVtcGxhdGUoc2NvcGUuZ2V0VGV4dCgpLAorIAkJCQkJCQkJCQkJCXJlZ2lvbi5n ZXRUZXh0KCksCisgCQkJCQkJCQkJCQkJbnVsbCwKKy0JCQkJCQkJCQkJCQlTdHJpbmdUZW1wbGF0 ZS5SRUdJT05fRVhQTElDSVQpOworKwkJCQkJCQkJCQkJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZS5SRUdJT05fRVhQTElDSVQpOworIAkJCQl9CisgCQkJfQorIAkJCX0K K0BAIC0xMzAsNyArMTMwLDcgQEAgdGVtcGxhdGVbU3RyaW5nVGVtcGxhdGVHcm91cCBnXQorIAkJ CXsKKyAJCQlpZiAoIGcuaXNEZWZpbmVkSW5UaGlzR3JvdXAodGVtcGxhdGVOYW1lKSApIHsKKyAJ CQkJZy5lcnJvcigicmVkZWZpbml0aW9uIG9mIHRlbXBsYXRlOiAiK3RlbXBsYXRlTmFtZSk7Cist CQkJCXN0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKCk7IC8vIGNyZWF0ZSBib2d1cyB0ZW1wbGF0ZSB0 byBmaWxsIGluCisrCQkJCXN0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSgpOyAvLyBjcmVhdGUgYm9ndXMgdGVtcGxhdGUgdG8gZmlsbCBpbgorIAkJCX0KKyAJ CQllbHNlIHsKKyAJCQkJc3QgPSBnLmRlZmluZVRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgbnVsbCk7 CitAQCAtMTUwLDI1ICsxNTAsMjUgQEAgdGVtcGxhdGVbU3RyaW5nVGVtcGxhdGVHcm91cCBnXQor IAkgICAge2cuZGVmaW5lVGVtcGxhdGVBbGlhcyhhbGlhcy5nZXRUZXh0KCksIHRhcmdldC5nZXRU ZXh0KCkpO30KKyAJOworIAorLWFyZ3NbU3RyaW5nVGVtcGxhdGUgc3RdCisrYXJnc1tvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3RdCisgICAgIDoJYXJnW3N0XSAoIENP TU1BIGFyZ1tzdF0gKSoKKyAJOworIAorLWFyZ1tTdHJpbmdUZW1wbGF0ZSBzdF0KKythcmdbb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0XQorIHsKKy0JU3RyaW5nVGVt cGxhdGUgZGVmYXVsdFZhbHVlID0gbnVsbDsKKysJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlIGRlZmF1bHRWYWx1ZSA9IG51bGw7CisgfQorIAk6CW5hbWU6SUQKKyAJCSgJ QVNTSUdOIHM6U1RSSU5HCisgCQkJeworLQkJCWRlZmF1bHRWYWx1ZT1uZXcgU3RyaW5nVGVtcGxh dGUoIiRfdmFsXyQiKTsKKysJCQlkZWZhdWx0VmFsdWU9bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSgiJF92YWxfJCIpOworIAkJCWRlZmF1bHRWYWx1ZS5zZXRBdHRy aWJ1dGUoIl92YWxfIiwgcy5nZXRUZXh0KCkpOworIAkJCWRlZmF1bHRWYWx1ZS5kZWZpbmVGb3Jt YWxBcmd1bWVudCgiX3ZhbF8iKTsKKyAJCQlkZWZhdWx0VmFsdWUuc2V0TmFtZSgiPCIrc3QuZ2V0 TmFtZSgpKyIncyBhcmcgIituYW1lLmdldFRleHQoKSsiIGRlZmF1bHQgdmFsdWUgc3VidGVtcGxh dGU+Iik7CisgCQkJfQorIAkJfAlBU1NJR04gYnM6QU5PTllNT1VTX1RFTVBMQVRFCisgCQkJewor LQkJCWRlZmF1bHRWYWx1ZT1uZXcgU3RyaW5nVGVtcGxhdGUoc3QuZ2V0R3JvdXAoKSwgYnMuZ2V0 VGV4dCgpKTsKKysJCQlkZWZhdWx0VmFsdWU9bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZShzdC5nZXRHcm91cCgpLCBicy5nZXRUZXh0KCkpOworIAkJCWRlZmF1bHRW YWx1ZS5zZXROYW1lKCI8IitzdC5nZXROYW1lKCkrIidzIGFyZyAiK25hbWUuZ2V0VGV4dCgpKyIg ZGVmYXVsdCB2YWx1ZSBzdWJ0ZW1wbGF0ZT4iKTsKKyAJCQl9CisgCQkpPworQEAgLTIxNSw3ICsy MTUsNyBAQCBtYXBQYWlycyBbTWFwIG1hcHBpbmddCisgCQorIGRlZmF1bHRWYWx1ZVBhaXJbTWFw IG1hcHBpbmddCisgeworLVN0cmluZ1RlbXBsYXRlIHYgPSBudWxsOworK29yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB2ID0gbnVsbDsKKyB9CQorIAk6CSJkZWZhdWx0IiBD T0xPTiB2PWtleVZhbHVlCisgICAgICAgICB7bWFwcGluZy5wdXQoQVNURXhwci5ERUZBVUxUX01B UF9WQUxVRV9OQU1FLCB2KTt9CitAQCAtMjIzLDE0ICsyMjMsMTQgQEAgU3RyaW5nVGVtcGxhdGUg diA9IG51bGw7CisgCisga2V5VmFsdWVQYWlyW01hcCBtYXBwaW5nXQorIHsKKy1TdHJpbmdUZW1w bGF0ZSB2ID0gbnVsbDsKKytvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg diA9IG51bGw7CisgfQorIAk6CWtleTpTVFJJTkcgQ09MT04gdj1rZXlWYWx1ZSB7bWFwcGluZy5w dXQoa2V5LmdldFRleHQoKSwgdik7fQorIAk7CisgCista2V5VmFsdWUgcmV0dXJucyBbU3RyaW5n VGVtcGxhdGUgdmFsdWU9bnVsbF0KKy0JOglzMTpCSUdTVFJJTkcJe3ZhbHVlID0gbmV3IFN0cmlu Z1RlbXBsYXRlKGdyb3VwLHMxLmdldFRleHQoKSk7fQorLQl8CXMyOlNUUklORwkJe3ZhbHVlID0g bmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLHMyLmdldFRleHQoKSk7fQorK2tleVZhbHVlIHJldHVy bnMgW29yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB2YWx1ZT1udWxsXQor Kwk6CXMxOkJJR1NUUklORwl7dmFsdWUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlKGdyb3VwLHMxLmdldFRleHQoKSk7fQorKwl8CXMyOlNUUklORwkJe3ZhbHVl ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCxzMi5n ZXRUZXh0KCkpO30KKyAJfAlrOklECQkJe2suZ2V0VGV4dCgpLmVxdWFscygia2V5Iil9PworIAkJ CQkJCXt2YWx1ZSA9IEFTVEV4cHIuTUFQX0tFWV9WQUxVRTt9CisgCXwJCQkJCXt2YWx1ZSA9IG51 bGw7fQorLS0tIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvbGFuZ3VhZ2UvTmV3bGluZVJl Zi5qYXZhLm9yaWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAgLTA2MDAKKysrKyBzcmMv b3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL05ld2xpbmVSZWYuamF2YQkyMDI1LTA3 LTA1IDEzOjM4OjI3LjA3MjcxMDgzMCAtMDYwMAorQEAgLTI5LDcgKzI5LDYgQEAgcGFja2FnZSBv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUubGFuZ3VhZworIAorIGltcG9ydCBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuKjsKKyBpbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLmxhbmd1YWdl LkV4cHI7CistaW1wb3J0IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZTsK KyAKKyBpbXBvcnQgamF2YS5pby5Xcml0ZXI7CisgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247 CitAQCAtMzgsNyArMzcsNyBAQCBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKyAgKiAgc3Bp dHRpbmcgb3V0IG5ld2xpbmVzIHdoZW4gdGhlIG9ubHkgdGhpbmcgb24gYSBsaW5lIGlzIGFuIGF0 dHIgZXhwci4KKyAgKi8KKyBwdWJsaWMgY2xhc3MgTmV3bGluZVJlZiBleHRlbmRzIFN0cmluZ1Jl ZiB7CistCXB1YmxpYyBOZXdsaW5lUmVmKFN0cmluZ1RlbXBsYXRlIGVuY2xvc2luZ1RlbXBsYXRl LCBTdHJpbmcgc3RyKSB7CisrCXB1YmxpYyBOZXdsaW5lUmVmKG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZSwgU3RyaW5nIHN0cikgeworIAkJ c3VwZXIoZW5jbG9zaW5nVGVtcGxhdGUsIHN0cik7CisgCX0KKyB9CistLS0gc3JjL29yZy9hbnRs ci9zdHJpbmd0ZW1wbGF0ZS9sYW5ndWFnZS9TdHJpbmdSZWYuamF2YS5vcmlnCTIwMDktMDktMjIg MTU6MDA6MTcuMDAwMDAwMDAwIC0wNjAwCisrKysgc3JjL29yZy9hbnRsci9zdHJpbmd0ZW1wbGF0 ZS9sYW5ndWFnZS9TdHJpbmdSZWYuamF2YQkyMDI1LTA3LTA1IDEzOjM4OjUxLjYwODM4MjI4MCAt MDYwMAorQEAgLTI3LDcgKzI3LDYgQEAKKyAqLworIHBhY2thZ2Ugb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLmxhbmd1YWdlOworIAorLWltcG9ydCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGU7CisgaW1wb3J0IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZVdyaXRlcjsKKyAKKyBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK0BAIC0zNiw3ICsz NSw3IEBAIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworIHB1YmxpYyBjbGFzcyBTdHJpbmdS ZWYgZXh0ZW5kcyBFeHByIHsKKyAJU3RyaW5nIHN0cjsKKyAKKy0JcHVibGljIFN0cmluZ1JlZihT dHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZSwgU3RyaW5nIHN0cikgeworKwlwdWJsaWMg U3RyaW5nUmVmKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbmNsb3Np bmdUZW1wbGF0ZSwgU3RyaW5nIHN0cikgeworIAkJc3VwZXIoZW5jbG9zaW5nVGVtcGxhdGUpOwor IAkJdGhpcy5zdHIgPSBzdHI7CisgCX0KK0BAIC00Niw3ICs0NSw3IEBAIHB1YmxpYyBjbGFzcyBT dHJpbmdSZWYgZXh0ZW5kcyBFeHByIHsKKyAJICogIG5ldmVyIHdyYXAgYmVjYXVzZSB0aGV5IGFy ZSBub3QgcGFydCBvZiBhbiA8Li4uPiBleHByZXNzaW9uLgorIAkgKiAgPCJmb28iOyB3cmFwPSJc biI+IHNob3VsZCB3cmFwIHRob3VnaCBpZiBuZWNlc3NhcnkuCisgICAgICAqLworLSAgICBwdWJs aWMgaW50IHdyaXRlKFN0cmluZ1RlbXBsYXRlIHNlbGYsIFN0cmluZ1RlbXBsYXRlV3JpdGVyIG91 dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKysgICAgcHVibGljIGludCB3cml0ZShvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwgU3RyaW5nVGVtcGxhdGVXcml0ZXIg b3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworIAkJaWYgKCBzdHIhPW51bGwgKSB7CisgCQkJaW50 IG4gPSBvdXQud3JpdGUoc3RyKTsKKyAJCQlyZXR1cm4gbjsKKy0tLSBzcmMvb3JnL2FudGxyL3N0 cmluZ3RlbXBsYXRlL2xhbmd1YWdlL1N0cmluZ1RlbXBsYXRlQVNULmphdmEub3JpZwkyMDA5LTA5 LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAtMDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVt cGxhdGUvbGFuZ3VhZ2UvU3RyaW5nVGVtcGxhdGVBU1QuamF2YQkyMDI1LTA3LTA1IDEzOjM5OjI0 LjY1NTg2NDQ4MCAtMDYwMAorQEAgLTI4LDEwICsyOCw5IEBACisgcGFja2FnZSBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUubGFuZ3VhZ2U7CisgCisgaW1wb3J0IGFudGxyLkNvbW1vbkFTVDsKKy1p bXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlOworIAorIHB1Ymxp YyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUFTVCBleHRlbmRzIENvbW1vbkFTVCB7CistICAgIHByb3Rl Y3RlZCBTdHJpbmdUZW1wbGF0ZSBzdCA9IG51bGw7IC8vIHRyYWNrIHRlbXBsYXRlIGZvciBBTk9O WU1PVVMgYmxvY2tzCisrICAgIHByb3RlY3RlZCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgc3QgPSBudWxsOyAvLyB0cmFjayB0ZW1wbGF0ZSBmb3IgQU5PTllNT1VTIGJs b2NrcworIAorIAlwdWJsaWMgU3RyaW5nVGVtcGxhdGVBU1QoKSB7O30KKyAJCitAQCAtNDAsMTEg KzM5LDExIEBAIHB1YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUFTVCBleHRlbmRzIEMKKyAJCXRo aXMuc2V0VGV4dCh0ZXh0KTsKKyAJfQorIAorLQlwdWJsaWMgU3RyaW5nVGVtcGxhdGUgZ2V0U3Ry aW5nVGVtcGxhdGUoKSB7CisrCXB1YmxpYyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgZ2V0U3RyaW5nVGVtcGxhdGUoKSB7CisgICAgICAgICByZXR1cm4gc3Q7CisgICAg IH0KKyAKKy0gICAgcHVibGljIHZvaWQgc2V0U3RyaW5nVGVtcGxhdGUoU3RyaW5nVGVtcGxhdGUg c3QpIHsKKysgICAgcHVibGljIHZvaWQgc2V0U3RyaW5nVGVtcGxhdGUob3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0KSB7CisgICAgICAgICB0aGlzLnN0ID0gc3Q7Cisg ICAgIH0KKyB9CistLS0gc3JjL29yZy9hbnRsci9zdHJpbmd0ZW1wbGF0ZS9sYW5ndWFnZS90ZW1w bGF0ZS5nLm9yaWcJMjAwOS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAgLTA2MDAKKysrKyBzcmMv b3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL3RlbXBsYXRlLmcJMjAyNS0wNy0wNSAx Mzo0MDo0OS4xNDMxNDY4NjggLTA2MDAKK0BAIC0zNywxMSArMzcsMTEgQEAgaGVhZGVyIHsKKyBj bGFzcyBUZW1wbGF0ZVBhcnNlciBleHRlbmRzIFBhcnNlcjsKKyAKKyB7CistcHJvdGVjdGVkIFN0 cmluZ1RlbXBsYXRlIHNlbGY7CisrcHJvdGVjdGVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzZWxmOworIAorIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKFJlY29nbml0 aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9IHNlbGYu Z2V0R3JvdXAoKTsKKy0gICAgaWYgKCBncm91cD09U3RyaW5nVGVtcGxhdGUuZGVmYXVsdEdyb3Vw ICkgeworKyAgICBpZiAoIGdyb3VwPT1vcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUuZGVmYXVsdEdyb3VwICkgeworICAgICAgICAgc2VsZi5lcnJvcigidGVtcGxhdGUgcGFy c2UgZXJyb3I7IHRlbXBsYXRlIGNvbnRleHQgaXMgIitzZWxmLmdldEVuY2xvc2luZ0luc3RhbmNl U3RhY2tTdHJpbmcoKSwgZSk7CisgICAgIH0KKyAgICAgZWxzZSB7CitAQCAtNTAsNyArNTAsNyBA QCBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihSZWNvZ25pdGlvbkV4Y2VwCisgfQorIH0KKyAKKy10 ZW1wbGF0ZVtTdHJpbmdUZW1wbGF0ZSBzZWxmXQorK3RlbXBsYXRlW29yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzZWxmXQorIHsKKyAJdGhpcy5zZWxmID0gc2VsZjsKKyB9 CitAQCAtNjUsNyArNjUsNyBAQCB0ZW1wbGF0ZVtTdHJpbmdUZW1wbGF0ZSBzZWxmXQorICAgICAg ICAgKSoKKyAgICAgOworIAorLWFjdGlvbltTdHJpbmdUZW1wbGF0ZSBzZWxmXQorK2FjdGlvbltv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZl0KKyAgICAgOiAgIGE6 QUNUSU9OCisgICAgICAgICB7CisgICAgICAgICBTdHJpbmcgaW5kZW50ID0gKChDaHVua1Rva2Vu KWEpLmdldEluZGVudGF0aW9uKCk7CitAQCAtNzgsOCArNzgsOCBAQCBhY3Rpb25bU3RyaW5nVGVt cGxhdGUgc2VsZl0KKyAgICAgICAgIHsKKyAgICAgICAgIENvbmRpdGlvbmFsRXhwciBjID0gKENv bmRpdGlvbmFsRXhwcilzZWxmLnBhcnNlQWN0aW9uKGkuZ2V0VGV4dCgpKTsKKyAgICAgICAgIC8v IGNyZWF0ZSBhbmQgcHJlY29tcGlsZSB0aGUgc3VidGVtcGxhdGUKKy0gICAgICAgIFN0cmluZ1Rl bXBsYXRlIHN1YnRlbXBsYXRlID0KKy0gICAgICAgIAluZXcgU3RyaW5nVGVtcGxhdGUoc2VsZi5n ZXRHcm91cCgpLCBudWxsKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBzdWJ0ZW1wbGF0ZSA9CisrICAgICAgICAJbmV3IG9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShzZWxmLmdldEdyb3VwKCksIG51bGwpOworICAgICAgICAg c3VidGVtcGxhdGUuc2V0RW5jbG9zaW5nSW5zdGFuY2Uoc2VsZik7CisgICAgICAgICBzdWJ0ZW1w bGF0ZS5zZXROYW1lKGkuZ2V0VGV4dCgpKyJfc3VidGVtcGxhdGUiKTsKKyAgICAgICAgIHNlbGYu YWRkQ2h1bmsoYyk7CitAQCAtOTEsOCArOTEsOCBAQCBhY3Rpb25bU3RyaW5nVGVtcGxhdGUgc2Vs Zl0KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFTVEV4cHIgZWMgPSBzZWxmLnBhcnNl QWN0aW9uKGVpLmdldFRleHQoKSk7CisgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbmQgcHJlY29t cGlsZSB0aGUgc3VidGVtcGxhdGUKKy0gICAgICAgICAgICAgU3RyaW5nVGVtcGxhdGUgZWxzZUlm U3VidGVtcGxhdGUgPQorLSAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlKHNlbGYu Z2V0R3JvdXAoKSwgbnVsbCk7CisrICAgICAgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBlbHNlSWZTdWJ0ZW1wbGF0ZSA9CisrICAgICAgICAgICAgICAgICBu ZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKHNlbGYuZ2V0R3JvdXAo KSwgbnVsbCk7CisgICAgICAgICAgICAgIGVsc2VJZlN1YnRlbXBsYXRlLnNldEVuY2xvc2luZ0lu c3RhbmNlKHNlbGYpOworICAgICAgICAgICAgICBlbHNlSWZTdWJ0ZW1wbGF0ZS5zZXROYW1lKGVp LmdldFRleHQoKSsiX3N1YnRlbXBsYXRlIik7CisgICAgICAgICAgICAgfQorQEAgLTEwNSw4ICsx MDUsOCBAQCBhY3Rpb25bU3RyaW5nVGVtcGxhdGUgc2VsZl0KKyAgICAgICAgICggICBFTFNFCisg ICAgICAgICAgICAgeworICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbmQgcHJlY29tcGlsZSB0aGUg c3VidGVtcGxhdGUKKy0gICAgICAgICAgICBTdHJpbmdUZW1wbGF0ZSBlbHNlU3VidGVtcGxhdGUg PQorLSAgICAgICAgIAkJbmV3IFN0cmluZ1RlbXBsYXRlKHNlbGYuZ2V0R3JvdXAoKSwgbnVsbCk7 CisrICAgICAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVs c2VTdWJ0ZW1wbGF0ZSA9CisrICAgICAgICAgCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKHNlbGYuZ2V0R3JvdXAoKSwgbnVsbCk7CisgICAgICAgICAgICAgZWxz ZVN1YnRlbXBsYXRlLnNldEVuY2xvc2luZ0luc3RhbmNlKHNlbGYpOworICAgICAgICAgICAgIGVs c2VTdWJ0ZW1wbGF0ZS5zZXROYW1lKCJlbHNlX3N1YnRlbXBsYXRlIik7CisgICAgICAgICAgICAg fQorQEAgLTEzMiw3ICsxMzIsNyBAQCBhY3Rpb25bU3RyaW5nVGVtcGxhdGUgc2VsZl0KKyAJCQkJ CXJlZ2lvbk5hbWUuc3Vic3RyaW5nKCJzdXBlci4iLmxlbmd0aCgpLHJlZ2lvbk5hbWUubGVuZ3Ro KCkpOworIAkJCQlTdHJpbmcgdGVtcGxhdGVTY29wZSA9CisgCQkJCQlzZWxmLmdldEdyb3VwKCku Z2V0VW5NYW5nbGVkVGVtcGxhdGVOYW1lKHNlbGYuZ2V0TmFtZSgpKTsKKy0JCQkJU3RyaW5nVGVt cGxhdGUgc2NvcGVTVCA9IHNlbGYuZ2V0R3JvdXAoKS5sb29rdXBUZW1wbGF0ZSh0ZW1wbGF0ZVNj b3BlKTsKKysJCQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHNjb3Bl U1QgPSBzZWxmLmdldEdyb3VwKCkubG9va3VwVGVtcGxhdGUodGVtcGxhdGVTY29wZSk7CisgCQkJ CWlmICggc2NvcGVTVD09bnVsbCApIHsKKyAJCQkJCXNlbGYuZ2V0R3JvdXAoKS5lcnJvcigicmVm ZXJlbmNlIHRvIHJlZ2lvbiB3aXRoaW4gdW5kZWZpbmVkIHRlbXBsYXRlOiAiKworIAkJCQkJCXRl bXBsYXRlU2NvcGUpOworQEAgLTE1MSw3ICsxNTEsNyBAQCBhY3Rpb25bU3RyaW5nVGVtcGxhdGUg c2VsZl0KKyAJCQl9CisgCQkJZWxzZSB7CisgCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJyZWdp b24gcmVmICIrcmVnaW9uTmFtZSk7CistCQkJCVN0cmluZ1RlbXBsYXRlIHJlZ2lvblNUID0KKysJ CQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHJlZ2lvblNUID0KKyAg ICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0R3JvdXAoKS5kZWZpbmVJbXBsaWNpdFJlZ2lvblRl bXBsYXRlKHNlbGYscmVnaW9uTmFtZSk7CisgICAgICAgICAgICAgICAgIG1hbmdsZWRSZWYgPSBy ZWdpb25TVC5nZXROYW1lKCk7CisgICAgICAgICAgICAgfQorQEAgLTE3NCwxMSArMTc0LDExIEBA IGFjdGlvbltTdHJpbmdUZW1wbGF0ZSBzZWxmXQorIAkJCQlTdHJpbmcgdGVtcGxhdGUgPQorIAkJ CQkJY29tYmluZWROYW1lVGVtcGxhdGVTdHIuc3Vic3RyaW5nKGluZGV4T2ZEZWZTeW1ib2wrMywK KyAJCQkJCQljb21iaW5lZE5hbWVUZW1wbGF0ZVN0ci5sZW5ndGgoKSk7CistCQkJCVN0cmluZ1Rl bXBsYXRlIHJlZ2lvblNUID0KKysJCQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIHJlZ2lvblNUID0KKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0R3JvdXAoKS5k ZWZpbmVSZWdpb25UZW1wbGF0ZShzZWxmLAorIAkJCQkJCQkJCXJlZ2lvbk5hbWUsCisgCQkJCQkJ CQkJdGVtcGxhdGUsCistCQkJCQkJCQkJU3RyaW5nVGVtcGxhdGUuUkVHSU9OX0VNQkVEREVEKTsK KysJCQkJCQkJCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUuUkVHSU9O X0VNQkVEREVEKTsKKyAJCQkJLy8gdHJlYXQgYXMgcmVndWxhciBhY3Rpb246IG1hbmdsZWQgdGVt cGxhdGUgaW5jbHVkZQorIAkJCQlTdHJpbmcgaW5kZW50ID0gKChDaHVua1Rva2VuKXJkKS5nZXRJ bmRlbnRhdGlvbigpOworIAkJCQlBU1RFeHByIGMgPSBzZWxmLnBhcnNlQWN0aW9uKHJlZ2lvblNU LmdldE5hbWUoKSsiKCkiKTsKK0BAIC0yMDQsOSArMjA0LDkgQEAgb3B0aW9ucyB7CisgCisgewor IHByb3RlY3RlZCBTdHJpbmcgY3VycmVudEluZGVudCA9IG51bGw7CistcHJvdGVjdGVkIFN0cmlu Z1RlbXBsYXRlIHNlbGY7CisrcHJvdGVjdGVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBzZWxmOworIAorLXB1YmxpYyBEZWZhdWx0VGVtcGxhdGVMZXhlcihTdHJpbmdU ZW1wbGF0ZSBzZWxmLCBSZWFkZXIgcikgeworK3B1YmxpYyBEZWZhdWx0VGVtcGxhdGVMZXhlcihv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc2VsZiwgUmVhZGVyIHIpIHsK KyAJdGhpcyhyKTsKKyAJdGhpcy5zZWxmID0gc2VsZjsKKyB9CistLS0gc3JjL29yZy9hbnRsci9z dHJpbmd0ZW1wbGF0ZS9taXNjL0pUcmVlU3RyaW5nVGVtcGxhdGVNb2RlbC5qYXZhLm9yaWcJMjAw OS0wOS0yMiAxNTowMDoxNy4wMDAwMDAwMDAgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmlu Z3RlbXBsYXRlL21pc2MvSlRyZWVTdHJpbmdUZW1wbGF0ZU1vZGVsLmphdmEJMjAyNS0wNy0wNSAx Mzo1MToyMi45MzUxMjA3NTcgLTA2MDAKK0BAIC0zMiw3ICszMiw2IEBAIGltcG9ydCBhbnRsci5j b2xsZWN0aW9ucy5BU1Q7CisgaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lio7CisgaW1wb3J0IGph dmF4LnN3aW5nLnRyZWUuKjsKKyAKKy1pbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlOworIGltcG9ydCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGVHcm91cDsKKyBpbXBvcnQgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLmxhbmd1YWdlLio7 CisgCitAQCAtNjgsMTggKzY3LDE4IEBAIHB1YmxpYyBjbGFzcyBKVHJlZVN0cmluZ1RlbXBsYXRl TW9kZWwgaW0KKyAJfQorIAorIAlzdGF0aWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVXcmFwcGVyIGV4 dGVuZHMgV3JhcHBlciB7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IG51bGw7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBudWxsOworIAkJcHVibGljIFN0 cmluZ1RlbXBsYXRlV3JhcHBlcihPYmplY3QgbykgeworLQkJCXRoaXMuc3QgPSAoU3RyaW5nVGVt cGxhdGUpbzsKKysJCQl0aGlzLnN0ID0gKG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSlvOworIAkJfQorIAkJcHVibGljIE9iamVjdCBnZXRXcmFwcGVkT2JqZWN0KCkgewor IAkJCXJldHVybiBnZXRTdHJpbmdUZW1wbGF0ZSgpOworIAkJfQorLQkJcHVibGljIFN0cmluZ1Rl bXBsYXRlIGdldFN0cmluZ1RlbXBsYXRlKCkgeworKwkJcHVibGljIG9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBnZXRTdHJpbmdUZW1wbGF0ZSgpIHsKKyAJCQlyZXR1cm4g c3Q7CisgCQl9CisgCQlwdWJsaWMgT2JqZWN0IGdldENoaWxkKE9iamVjdCBwYXJlbnQsIGludCBp bmRleCkgeworLQkJCVN0cmluZ1RlbXBsYXRlIHN0ID0gKChTdHJpbmdUZW1wbGF0ZVdyYXBwZXIp cGFyZW50KS5nZXRTdHJpbmdUZW1wbGF0ZSgpOworKwkJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9ICgoU3RyaW5nVGVtcGxhdGVXcmFwcGVyKXBhcmVudCkuZ2V0 U3RyaW5nVGVtcGxhdGUoKTsKKyAJCQlpZiAoIGluZGV4PT0wICkgeworIAkJCQkvLyBTeXN0ZW0u b3V0LnByaW50bG4oImNodW5rIHR5cGUgaW5kZXggIitpbmRleCsiIGlzIGF0dHJpYnV0ZXMiKTsK KyAJCQkJLy8gcmV0dXJuIGF0dHJpYnV0ZXMKK0BAIC0xNDUsOSArMTQ0LDkgQEAgcHVibGljIGNs YXNzIEpUcmVlU3RyaW5nVGVtcGxhdGVNb2RlbCBpbQorIAkJCQkJCQlyZXR1cm4gcm9vdC5nZXRG aXJzdENoaWxkKCkuZ2V0TmV4dFNpYmxpbmcoKS50b1N0cmluZ0xpc3QoKTsKKyAJCQkJCQljYXNl IDEgOgorIAkJCQkJCQlTdHJpbmcgdGVtcGxhdGVOYW1lID0gcm9vdC5nZXRGaXJzdENoaWxkKCku Z2V0VGV4dCgpOworLQkJCQkJCQlTdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdTVCA9IGV4cHIuZ2V0 RW5jbG9zaW5nVGVtcGxhdGUoKTsKKysJCQkJCQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlIGVuY2xvc2luZ1NUID0gZXhwci5nZXRFbmNsb3NpbmdUZW1wbGF0ZSgpOwor IAkJCQkJCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0gZW5jbG9zaW5nU1QuZ2V0R3JvdXAo KTsKKy0JCQkJCQkJU3RyaW5nVGVtcGxhdGUgZW1iZWRkZWQgPQorKwkJCQkJCQlvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW1iZWRkZWQgPQorIAkJCQkJCQkJCWdyb3Vw LmdldEVtYmVkZGVkSW5zdGFuY2VPZihlbmNsb3NpbmdTVCwKKyAJCQkJCQkJCQkJCQkJCQkJdGVt cGxhdGVOYW1lKTsKKyAJCQkJCQkJcmV0dXJuIG5ldyBTdHJpbmdUZW1wbGF0ZVdyYXBwZXIoZW1i ZWRkZWQpOworQEAgLTMzNiw3ICszMzUsNyBAQCBwdWJsaWMgY2xhc3MgSlRyZWVTdHJpbmdUZW1w bGF0ZU1vZGVsIGltCisgCQlyZXR1cm4gd3JhcHBlZE9iamVjdDsKKyAJfQorIAorLSAgICBwdWJs aWMgSlRyZWVTdHJpbmdUZW1wbGF0ZU1vZGVsKFN0cmluZ1RlbXBsYXRlIHN0KSB7CisrICAgIHB1 YmxpYyBKVHJlZVN0cmluZ1RlbXBsYXRlTW9kZWwob3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlIHN0KSB7CisgICAgICAgICBpZiAoc3QgPT0gbnVsbCkgeworICAgICAgICAg ICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvb3QgaXMgbnVsbCIpOwor ICAgICAgICAgfQorLS0tIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvbWlzYy9TdHJpbmdU ZW1wbGF0ZVRyZWVWaWV3LmphdmEub3JpZwkyMDA5LTA5LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAt MDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvbWlzYy9TdHJpbmdUZW1wbGF0 ZVRyZWVWaWV3LmphdmEJMjAyNS0wNy0wNSAxMzo1MjowNy40MjMzMTcwOTMgLTA2MDAKK0BAIC01 Miw3ICs1Miw3IEBAIHB1YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZVRyZWVWaWV3IGV4dGUKKyAg ICAgc3RhdGljIGZpbmFsIGludCBXSURUSCA9IDIwMDsKKyAgICAgc3RhdGljIGZpbmFsIGludCBI RUlHSFQgPSAzMDA7CisgCistICAgIHB1YmxpYyBTdHJpbmdUZW1wbGF0ZVRyZWVWaWV3KFN0cmlu ZyBsYWJlbCwgU3RyaW5nVGVtcGxhdGUgc3QpIHsKKysgICAgcHVibGljIFN0cmluZ1RlbXBsYXRl VHJlZVZpZXcoU3RyaW5nIGxhYmVsLCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUgc3QpIHsKKyAgICAgICAgIHN1cGVyKGxhYmVsKTsKKyAKKyAgICAgICAgIEpUcmVlU3Ry aW5nVGVtcGxhdGVQYW5lbCB0cCA9CitAQCAtNzIsOSArNzIsOSBAQCBwdWJsaWMgY2xhc3MgU3Ry aW5nVGVtcGxhdGVUcmVlVmlldyBleHRlCisgCisgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWlu KFN0cmluZyBhcmdzW10pIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPSBuZXcgU3Ry aW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGJvbGQgPSBncm91 cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8Yj4kYXR0ciQ8L2I+Iik7CistCQlTdHJpbmdUZW1w bGF0ZSBiYW5uZXIgPSBncm91cC5kZWZpbmVUZW1wbGF0ZSgiYmFubmVyIiwgInRoZSBiYW5uZXIi KTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGJvbGQgPSBncm91cC5kZWZpbmVUZW1w bGF0ZSgiYm9sZCIsICI8Yj4kYXR0ciQ8L2I+Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgYmFubmVyID0gZ3JvdXAuZGVmaW5lVGVtcGxhdGUoImJhbm5lciIs ICJ0aGUgYmFubmVyIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJ CQlncm91cCwKKyAJCQkJIjxodG1sPlxuIiArICAvLyBkb2Vzbid0IGxpa2UgdGhlIGZpcnN0IDwg YW5kIGRvZXNuJ3Qgc2hvdyA6KAorIAkJCQkiJGJhbm5lcihhPWIpJCIrCistLS0gc3JjL29yZy9h bnRsci9zdHJpbmd0ZW1wbGF0ZS9TdHJpbmdUZW1wbGF0ZUdyb3VwSW50ZXJmYWNlLmphdmEub3Jp ZwkyMDA5LTA5LTIyIDE1OjAwOjE3LjAwMDAwMDAwMCAtMDYwMAorKysrIHNyYy9vcmcvYW50bHIv c3RyaW5ndGVtcGxhdGUvU3RyaW5nVGVtcGxhdGVHcm91cEludGVyZmFjZS5qYXZhCTIwMjUtMDct MDUgMTM6NDE6NDcuNDM4MTI2MTQ5IC0wNjAwCitAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYyBj bGFzcyBTdHJpbmdUZW1wbGF0ZUdyb3VwSW50ZXJmYWMKKyAJCQlTdHJpbmcgbmFtZSA9IChTdHJp bmcpaXQubmV4dCgpOworIAkJCVRlbXBsYXRlRGVmaW5pdGlvbiBkID0gKFRlbXBsYXRlRGVmaW5p dGlvbil0ZW1wbGF0ZXMuZ2V0KG5hbWUpOworIAkJCWlmICggZ3JvdXAuaXNEZWZpbmVkKGQubmFt ZSkgKSB7CistCQkJCVN0cmluZ1RlbXBsYXRlIGRlZlNUID0gZ3JvdXAuZ2V0VGVtcGxhdGVEZWZp bml0aW9uKGQubmFtZSk7CisrCQkJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBkZWZTVCA9IGdyb3VwLmdldFRlbXBsYXRlRGVmaW5pdGlvbihkLm5hbWUpOworIAkJCQlN YXAgZm9ybWFsQXJncyA9IGRlZlNULmdldEZvcm1hbEFyZ3VtZW50cygpOworIAkJCQlib29sZWFu IGFjayA9IGZhbHNlOworIAkJCQlpZiAoIChkLmZvcm1hbEFyZ3MhPW51bGwgJiYgZm9ybWFsQXJn cz09bnVsbCkgfHwKKy0tLSBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL1N0cmluZ1RlbXBs YXRlR3JvdXAuamF2YS5vcmlnCTIwMDktMDktMjIgMTU6MDA6MTcuMDAwMDAwMDAwIC0wNjAwCisr Kysgc3JjL29yZy9hbnRsci9zdHJpbmd0ZW1wbGF0ZS9TdHJpbmdUZW1wbGF0ZUdyb3VwLmphdmEJ MjAyNS0wNy0wNSAxMzo0Njo0NS4xMDcxMjU2MzcgLTA2MDAKK0BAIC0xODgsOCArMTg4LDggQEAg cHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAgeworIAkvKiogVXNlZCB0byBpbmRpY2F0 ZSB0aGF0IHRoZSB0ZW1wbGF0ZSBkb2Vzbid0IGV4aXN0LgorIAkgKiAgV2UgZG9uJ3QgaGF2ZSB0 byBjaGVjayBkaXNrIGZvciBpdDsgd2Uga25vdyBpdCdzIG5vdCB0aGVyZS4KKyAJICovCistCXBy b3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nVGVtcGxhdGUgTk9UX0ZPVU5EX1NUID0KKy0JCW5l dyBTdHJpbmdUZW1wbGF0ZSgpOworKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBOT1RfRk9VTkRfU1QgPQorKwkJbmV3IG9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgpOworIAorIAkvKiogSG93IGxvbmcg YmVmb3JlIHRvc3Npbmcgb3V0IGFsbCB0ZW1wbGF0ZXMgaW4gc2Vjb25kcy4gKi8KKyAJcHJvdGVj dGVkIGludCByZWZyZXNoSW50ZXJ2YWxJblNlY29uZHMgPSBJbnRlZ2VyLk1BWF9WQUxVRS8xMDAw OyAvLyBkZWZhdWx0OiBubyByZWZyZXNoaW5nIGZyb20gZGlzaworQEAgLTM3NiwyMiArMzc2LDIy IEBAIHB1YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUdyb3VwIHsKKyAJfQorIAorIAkvKiogU3Ry aW5nVGVtcGxhdGUgb2JqZWN0IGZhY3Rvcnk7IGVhY2ggZ3JvdXAgY2FuIGhhdmUgaXRzIG93bi4g Ki8KKy0JcHVibGljIFN0cmluZ1RlbXBsYXRlIGNyZWF0ZVN0cmluZ1RlbXBsYXRlKCkgeworLQkJ U3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoKTsKKysJcHVibGljIG9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBjcmVhdGVTdHJpbmdUZW1wbGF0ZSgp IHsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoKTsKKyAJCXJldHVybiBzdDsK KyAJfQorIAorIAkvKiogQSBzdXBwb3J0IHJvdXRpbmUgdGhhdCBnZXRzIGFuIGluc3RhbmNlIG9m IG5hbWUga25vd2luZyB3aGljaAorIAkgKiAgU1QgZW5jbG9zZXMgaXQgZm9yIGVycm9yIG1lc3Nh Z2VzLgorIAkgKi8KKy0JcHJvdGVjdGVkIFN0cmluZ1RlbXBsYXRlIGdldEluc3RhbmNlT2YoU3Ry aW5nVGVtcGxhdGUgZW5jbG9zaW5nSW5zdGFuY2UsCisrCXByb3RlY3RlZCBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZ2V0SW5zdGFuY2VPZihvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW5jbG9zaW5nSW5zdGFuY2UsCisgCQkJCQkJCQkJCSAg IFN0cmluZyBuYW1lKQorIAkJdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorIAl7Cisg CQkvL1N5c3RlbS5vdXQucHJpbnRsbigiZ2V0SW5zdGFuY2VPZigiK2dldE5hbWUoKSsiOjoiK25h bWUrIikiKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gbG9va3VwVGVtcGxhdGUoZW5jbG9zaW5n SW5zdGFuY2UsbmFtZSk7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgc3QgPSBsb29rdXBUZW1wbGF0ZShlbmNsb3NpbmdJbnN0YW5jZSxuYW1lKTsKKyAJCWlmICgg c3QhPW51bGwgKSB7CistCQkJU3RyaW5nVGVtcGxhdGUgaW5zdGFuY2VTVCA9IHN0LmdldEluc3Rh bmNlT2YoKTsKKysJCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgaW5z dGFuY2VTVCA9IHN0LmdldEluc3RhbmNlT2YoKTsKKyAJCQlyZXR1cm4gaW5zdGFuY2VTVDsKKyAJ CX0KKyAJCXJldHVybiBudWxsOworQEAgLTQwMCw3ICs0MDAsNyBAQCBwdWJsaWMgY2xhc3MgU3Ry aW5nVGVtcGxhdGVHcm91cCB7CisgCS8qKiBUaGUgcHJpbWFyeSBtZWFucyBvZiBnZXR0aW5nIGFu IGluc3RhbmNlIG9mIGEgdGVtcGxhdGUgZnJvbSB0aGlzCisgCSAqICBncm91cC4KKyAJICovCist CXB1YmxpYyBTdHJpbmdUZW1wbGF0ZSBnZXRJbnN0YW5jZU9mKFN0cmluZyBuYW1lKSB7CisrCXB1 YmxpYyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZ2V0SW5zdGFuY2VP ZihTdHJpbmcgbmFtZSkgeworIAkJcmV0dXJuIGdldEluc3RhbmNlT2YobnVsbCwgbmFtZSk7Cisg CX0KKyAKK0BAIC00MDgsMTMgKzQwOCwxMyBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVH cm91cCB7CisgCSAqICBncm91cCB3aGVuIHlvdSBoYXZlIGEgcHJlZGVmaW5lZCBzZXQgb2YgYXR0 cmlidXRlcyB5b3Ugd2FudCB0bworIAkgKiAgdXNlLgorIAkgKi8KKy0JcHVibGljIFN0cmluZ1Rl bXBsYXRlIGdldEluc3RhbmNlT2YoU3RyaW5nIG5hbWUsIE1hcCBhdHRyaWJ1dGVzKSB7CistCQlT dHJpbmdUZW1wbGF0ZSBzdCA9IGdldEluc3RhbmNlT2YobmFtZSk7CisrCXB1YmxpYyBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZ2V0SW5zdGFuY2VPZihTdHJpbmcgbmFt ZSwgTWFwIGF0dHJpYnV0ZXMpIHsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBzdCA9IGdldEluc3RhbmNlT2YobmFtZSk7CisgCQlzdC5hdHRyaWJ1dGVzID0gYXR0 cmlidXRlczsKKyAJCXJldHVybiBzdDsKKyAJfQorIAorLQlwdWJsaWMgU3RyaW5nVGVtcGxhdGUg Z2V0RW1iZWRkZWRJbnN0YW5jZU9mKFN0cmluZ1RlbXBsYXRlIGVuY2xvc2luZ0luc3RhbmNlLAor KwlwdWJsaWMgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGdldEVtYmVk ZGVkSW5zdGFuY2VPZihvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW5j bG9zaW5nSW5zdGFuY2UsCisgCQkJCQkJCQkJCQkJU3RyaW5nIG5hbWUpCisgCQl0aHJvd3MgSWxs ZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisgCXsKK0BAIC00MjMsNyArNDIzLDcgQEAgcHVibGljIGNs YXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAgeworIAkJCQkJCSAgIGVuY2xvc2luZ0luc3RhbmNlLmdl dEdyb3VwKCkuZ2V0TmFtZSgpKworIAkJCQkJCSAgICIgd2l0aCBuYXRpdmUgZ3JvdXAgIitlbmNs b3NpbmdJbnN0YW5jZS5nZXROYXRpdmVHcm91cCgpLmdldE5hbWUoKSk7CisgCQkJCQkJICAgKi8K Ky0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gbnVsbDsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG51bGw7CisgCQkvLyBUT0RPOiBzZWVtcyBsaWtlIHRoaXMg c2hvdWxkIGdvIGludG8gbG9va3VwVGVtcGxhdGUKKyAJCWlmICggbmFtZS5zdGFydHNXaXRoKCJz dXBlci4iKSApIHsKKyAJCQkvLyBmb3Igc3VwZXIuZm9vKCkgcmVmcywgZW5zdXJlIHRoYXQgd2Ug bG9vayBhdCB0aGUgbmF0aXZlCitAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYyBjbGFzcyBTdHJp bmdUZW1wbGF0ZUdyb3VwIHsKKyAJICoKKyAJICogIElmIEkgZmluZCBhIHRlbXBsYXRlIGluIGEg c3VwZXIgZ3JvdXAsIGNvcHkgYW4gaW5zdGFuY2UgZG93biBoZXJlCisgCSAqLworLQlwdWJsaWMg c3luY2hyb25pemVkIFN0cmluZ1RlbXBsYXRlIGxvb2t1cFRlbXBsYXRlKFN0cmluZ1RlbXBsYXRl IGVuY2xvc2luZ0luc3RhbmNlLAorKwlwdWJsaWMgc3luY2hyb25pemVkIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBsb29rdXBUZW1wbGF0ZShvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW5jbG9zaW5nSW5zdGFuY2UsCisgCQkJCQkJCQkJCQkJ CSAgU3RyaW5nIG5hbWUpCisgCQl0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisgCXsK K0BAIC00NTksNyArNDU5LDcgQEAgcHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAgewor IAkJCWlmICggc3VwZXJHcm91cCE9bnVsbCApIHsKKyAJCQkJaW50IGRvdCA9IG5hbWUuaW5kZXhP ZignLicpOworIAkJCQluYW1lID0gbmFtZS5zdWJzdHJpbmcoZG90KzEsbmFtZS5sZW5ndGgoKSk7 CistCQkJCVN0cmluZ1RlbXBsYXRlIHN1cGVyU2NvcGVTVCA9CisrCQkJCW9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdXBlclNjb3BlU1QgPQorIAkJCQkJc3VwZXJHcm91 cC5sb29rdXBUZW1wbGF0ZShlbmNsb3NpbmdJbnN0YW5jZSxuYW1lKTsKKyAJCQkJLyoKKyAJCQkJ U3lzdGVtLm91dC5wcmludGxuKCJzdXBlclNjb3BlU1QgaXMgIisKK0BAIC00NzIsNyArNDcyLDcg QEAgcHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAgeworIAkJCQkJCQkJCQkJICAgIiBo YXMgbm8gc3VwZXIgZ3JvdXA7IGludmFsaWQgdGVtcGxhdGU6ICIrbmFtZSk7CisgCQl9CisgCQlj aGVja1JlZnJlc2hJbnRlcnZhbCgpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSAoU3RyaW5nVGVt cGxhdGUpdGVtcGxhdGVzLmdldChuYW1lKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzdCA9IChvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUpdGVtcGxhdGVzLmdldChuYW1lKTsKKyAJCWlmICggc3Q9PW51bGwgKSB7CisgCQkJLy8gbm90 IHRoZXJlPyAgQXR0ZW1wdCB0byBsb2FkCisgCQkJaWYgKCAhdGVtcGxhdGVzRGVmaW5lZEluR3Jv dXBGaWxlICkgeworQEAgLTUxNiw3ICs1MTYsNyBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxh dGVHcm91cCB7CisgCQlyZXR1cm4gc3Q7CisgCX0KKyAKKy0JcHVibGljIFN0cmluZ1RlbXBsYXRl IGxvb2t1cFRlbXBsYXRlKFN0cmluZyBuYW1lKSB7CisrCXB1YmxpYyBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgbG9va3VwVGVtcGxhdGUoU3RyaW5nIG5hbWUpIHsKKyAJ CXJldHVybiBsb29rdXBUZW1wbGF0ZShudWxsLCBuYW1lKTsKKyAJfQorIAorQEAgLTUzMyw3ICs1 MzMsNyBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVHcm91cCB7CisgCQl9CisgCX0KKyAK Ky0JcHJvdGVjdGVkIFN0cmluZ1RlbXBsYXRlIGxvYWRUZW1wbGF0ZShTdHJpbmcgbmFtZSwgQnVm ZmVyZWRSZWFkZXIgcikKKysJcHJvdGVjdGVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBsb2FkVGVtcGxhdGUoU3RyaW5nIG5hbWUsIEJ1ZmZlcmVkUmVhZGVyIHIpCisg CQkJdGhyb3dzIElPRXhjZXB0aW9uCisgCXsKKyAJCVN0cmluZyBsaW5lOworQEAgLTU1OCw5ICs1 NTgsOSBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVHcm91cCB7CisgCSAqICB0aGUgY2xh c3NwYXRoLiAgSWYgdGhlcmUgaXMgYSByb290RGlyLCB0cnkgdG8gbG9hZCB0aGUgZmlsZQorIAkg KiAgZnJvbSB0aGVyZS4KKyAJICovCistCXByb3RlY3RlZCBTdHJpbmdUZW1wbGF0ZSBsb2FkVGVt cGxhdGVGcm9tQmVuZWF0aFJvb3REaXJPckNMQVNTUEFUSChTdHJpbmcgZmlsZU5hbWUpCisrCXBy b3RlY3RlZCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgbG9hZFRlbXBs YXRlRnJvbUJlbmVhdGhSb290RGlyT3JDTEFTU1BBVEgoU3RyaW5nIGZpbGVOYW1lKQorIAl7Cist CQlTdHJpbmdUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG51bGw7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgdGVtcGxhdGUgPSBudWxsOworIAkJU3RyaW5nIG5hbWUgPSBn ZXRUZW1wbGF0ZU5hbWVGcm9tRmlsZU5hbWUoZmlsZU5hbWUpOworIAkJLy8gaWYgbm8gcm9vdERp ciwgdHJ5IHRvIGxvYWQgYXMgYSByZXNvdXJjZSBpbiBDTEFTU1BBVEgKKyAJCWlmICggcm9vdERp cj09bnVsbCApIHsKK0BAIC02MTgsMTAgKzYxOCwxMCBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVt cGxhdGVHcm91cCB7CisgCQlyZXR1cm4gbmFtZTsKKyAJfQorIAorLQlwcm90ZWN0ZWQgU3RyaW5n VGVtcGxhdGUgbG9hZFRlbXBsYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZmlsZU5hbWUpCisrCXBy b3RlY3RlZCBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgbG9hZFRlbXBs YXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZmlsZU5hbWUpCisgCXsKKyAJCUJ1ZmZlcmVkUmVhZGVy IGJyID0gbnVsbDsKKy0JCVN0cmluZ1RlbXBsYXRlIHRlbXBsYXRlID0gbnVsbDsKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG51bGw7CisgCQl0 cnkgeworIAkJCUlucHV0U3RyZWFtIGZpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZU5hbWUp OworIAkJCUlucHV0U3RyZWFtUmVhZGVyIGlzciA9IGdldElucHV0U3RyZWFtUmVhZGVyKGZpbik7 CitAQCAtNjY1LDE0ICs2NjUsMTQgQEAgcHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAg eworIAkvKiogRGVmaW5lIGFuIGV4YW1wbGFyIHRlbXBsYXRlOyBwcmVjb21waWxlZCBhbmQgc3Rv cmVkCisgCSAqICB3aXRoIG5vIGF0dHJpYnV0ZXMuICBSZW1vdmUgYW55IHByZXZpb3VzIGRlZmlu aXRpb24uCisgCSAqLworLQlwdWJsaWMgc3luY2hyb25pemVkIFN0cmluZ1RlbXBsYXRlIGRlZmlu ZVRlbXBsYXRlKFN0cmluZyBuYW1lLAorKwlwdWJsaWMgc3luY2hyb25pemVkIG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBkZWZpbmVUZW1wbGF0ZShTdHJpbmcgbmFtZSwK KyAJCQkJCQkJCQkJCQkJICBTdHJpbmcgdGVtcGxhdGUpCisgCXsKKyAJCS8vU3lzdGVtLm91dC5w cmludGxuKCJkZWZpbmVUZW1wbGF0ZSAiK2dldE5hbWUoKSsiOjoiK25hbWUpOworIAkJaWYgKCBu YW1lIT1udWxsICYmIG5hbWUuaW5kZXhPZignLicpPj0wICkgeworIAkJCXRocm93IG5ldyBJbGxl Z2FsQXJndW1lbnRFeGNlcHRpb24oImNhbm5vdCBoYXZlICcuJyBpbiB0ZW1wbGF0ZSBuYW1lcyIp OworIAkJfQorLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBjcmVhdGVTdHJpbmdUZW1wbGF0ZSgpOwor KwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gY3JlYXRlU3Ry aW5nVGVtcGxhdGUoKTsKKyAJCXN0LnNldE5hbWUobmFtZSk7CisgCQlzdC5zZXRHcm91cCh0aGlz KTsKKyAJCXN0LnNldE5hdGl2ZUdyb3VwKHRoaXMpOworQEAgLTY4MywyNiArNjgzLDI2IEBAIHB1 YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUdyb3VwIHsKKyAJfQorIAorIAkvKiogVHJhY2sgYWxs IHJlZmVyZW5jZXMgdG8gcmVnaW9ucyA8QGZvbz4uLi48QGVuZD4gb3IgPEBmb28oKT4uICAqLwor LQlwdWJsaWMgU3RyaW5nVGVtcGxhdGUgZGVmaW5lUmVnaW9uVGVtcGxhdGUoU3RyaW5nIGVuY2xv c2luZ1RlbXBsYXRlTmFtZSwKKysJcHVibGljIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBkZWZpbmVSZWdpb25UZW1wbGF0ZShTdHJpbmcgZW5jbG9zaW5nVGVtcGxhdGVO YW1lLAorIAkJCQkJCQkJCQkJICAgU3RyaW5nIHJlZ2lvbk5hbWUsCisgCQkJCQkJCQkJCQkgICBT dHJpbmcgdGVtcGxhdGUsCisgCQkJCQkJCQkJCQkgICBpbnQgdHlwZSkKKyAJeworIAkJU3RyaW5n IG1hbmdsZWROYW1lID0KKyAJCQlnZXRNYW5nbGVkUmVnaW9uTmFtZShlbmNsb3NpbmdUZW1wbGF0 ZU5hbWUscmVnaW9uTmFtZSk7CistCQlTdHJpbmdUZW1wbGF0ZSByZWdpb25TVCA9IGRlZmluZVRl bXBsYXRlKG1hbmdsZWROYW1lLCB0ZW1wbGF0ZSk7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgcmVnaW9uU1QgPSBkZWZpbmVUZW1wbGF0ZShtYW5nbGVkTmFtZSwg dGVtcGxhdGUpOworIAkJcmVnaW9uU1Quc2V0SXNSZWdpb24odHJ1ZSk7CisgCQlyZWdpb25TVC5z ZXRSZWdpb25EZWZUeXBlKHR5cGUpOworIAkJcmV0dXJuIHJlZ2lvblNUOworIAl9CisgCisgCS8q KiBUcmFjayBhbGwgcmVmZXJlbmNlcyB0byByZWdpb25zIDxAZm9vPi4uLjxAZW5kPiBvciA8QGZv bygpPi4gICovCistCXB1YmxpYyBTdHJpbmdUZW1wbGF0ZSBkZWZpbmVSZWdpb25UZW1wbGF0ZShT dHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZSwKKysJcHVibGljIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBkZWZpbmVSZWdpb25UZW1wbGF0ZShvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZW5jbG9zaW5nVGVtcGxhdGUsCisgCQkJCQkJ CQkJCQkgICBTdHJpbmcgcmVnaW9uTmFtZSwKKyAJCQkJCQkJCQkJCSAgIFN0cmluZyB0ZW1wbGF0 ZSwKKyAJCQkJCQkJCQkJCSAgIGludCB0eXBlKQorIAl7CistCQlTdHJpbmdUZW1wbGF0ZSByZWdp b25TVCA9CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgcmVnaW9u U1QgPQorIAkJCWRlZmluZVJlZ2lvblRlbXBsYXRlKGVuY2xvc2luZ1RlbXBsYXRlLmdldE91dGVy bW9zdE5hbWUoKSwKKyAJCQkJCQkJCSByZWdpb25OYW1lLAorIAkJCQkJCQkJIHRlbXBsYXRlLAor QEAgLTcxOSwxMyArNzE5LDEzIEBAIHB1YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUdyb3VwIHsK KyAJICogIFlvdSBjYW5ub3Qgc2V0IHRoZXNlIG1hbnVhbGx5IGluIHRoZSBzYW1lIGdyb3VwOyB5 b3UgaGF2ZSB0byBzdWJncm91cAorIAkgKiAgdG8gb3ZlcnJpZGUuCisgCSAqLworLQlwdWJsaWMg U3RyaW5nVGVtcGxhdGUgZGVmaW5lSW1wbGljaXRSZWdpb25UZW1wbGF0ZShTdHJpbmdUZW1wbGF0 ZSBlbmNsb3NpbmdUZW1wbGF0ZSwKKysJcHVibGljIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBkZWZpbmVJbXBsaWNpdFJlZ2lvblRlbXBsYXRlKG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlbmNsb3NpbmdUZW1wbGF0ZSwKKyAJCQkJCQkJCQkJ CQkJICAgU3RyaW5nIG5hbWUpCisgCXsKKyAJCXJldHVybiBkZWZpbmVSZWdpb25UZW1wbGF0ZShl bmNsb3NpbmdUZW1wbGF0ZSwKKyAJCQkJCQkJCQluYW1lLAorIAkJCQkJCQkJCSIiLAorLQkJCQkJ CQkJCVN0cmluZ1RlbXBsYXRlLlJFR0lPTl9JTVBMSUNJVCk7CisrCQkJCQkJCQkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLlJFR0lPTl9JTVBMSUNJVCk7CisgCisgCX0K KyAKK0BAIC03NDQsOCArNzQ0LDggQEAgcHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAg eworIAl9CisgCisgCS8qKiBNYWtlIG5hbWUgYW5kIGFsaWFzIGZvciB0YXJnZXQuICBSZXBsYWNl IGFueSBwcmV2aW91cyBkZWYgb2YgbmFtZSAqLworLQlwdWJsaWMgc3luY2hyb25pemVkIFN0cmlu Z1RlbXBsYXRlIGRlZmluZVRlbXBsYXRlQWxpYXMoU3RyaW5nIG5hbWUsIFN0cmluZyB0YXJnZXQp IHsKKy0JCVN0cmluZ1RlbXBsYXRlIHRhcmdldFNUPWdldFRlbXBsYXRlRGVmaW5pdGlvbih0YXJn ZXQpOworKwlwdWJsaWMgc3luY2hyb25pemVkIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBkZWZpbmVUZW1wbGF0ZUFsaWFzKFN0cmluZyBuYW1lLCBTdHJpbmcgdGFyZ2V0 KSB7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdGFyZ2V0U1Q9 Z2V0VGVtcGxhdGVEZWZpbml0aW9uKHRhcmdldCk7CisgCQlpZiAoIHRhcmdldFNUPT1udWxsICl7 CisgCQkJZXJyb3IoImNhbm5vdCBhbGlhcyAiK25hbWUrIiB0byB1bmRlZmluZWQgdGVtcGxhdGU6 ICIrdGFyZ2V0KTsKKyAJCQlyZXR1cm4gbnVsbDsKK0BAIC03NTUsMTEgKzc1NSwxMSBAQCBwdWJs aWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVHcm91cCB7CisgCX0KKyAKKyAJcHVibGljIHN5bmNocm9u aXplZCBib29sZWFuIGlzRGVmaW5lZEluVGhpc0dyb3VwKFN0cmluZyBuYW1lKSB7CistCQlTdHJp bmdUZW1wbGF0ZSBzdCA9IChTdHJpbmdUZW1wbGF0ZSl0ZW1wbGF0ZXMuZ2V0KG5hbWUpOworKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gKG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSl0ZW1wbGF0ZXMuZ2V0KG5hbWUpOworIAkJaWYg KCBzdCE9bnVsbCApIHsKKyAJCQlpZiAoIHN0LmlzUmVnaW9uKCkgKSB7CisgCQkJCS8vIGRvbid0 IGFsbG93IHJlZGVmIG9mIEB0LnIoKSA6Oj0gIi4uLiIgb3IgPEByPi4uLjxAZW5kPgorLQkJCQlp ZiAoIHN0LmdldFJlZ2lvbkRlZlR5cGUoKT09U3RyaW5nVGVtcGxhdGUuUkVHSU9OX0lNUExJQ0lU ICkgeworKwkJCQlpZiAoIHN0LmdldFJlZ2lvbkRlZlR5cGUoKT09b3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlLlJFR0lPTl9JTVBMSUNJVCApIHsKKyAJCQkJCXJldHVybiBm YWxzZTsKKyAJCQkJfQorIAkJCX0KK0BAIC03NjksOCArNzY5LDggQEAgcHVibGljIGNsYXNzIFN0 cmluZ1RlbXBsYXRlR3JvdXAgeworIAl9CisgCisgCS8qKiBHZXQgdGhlIFNUIGZvciAnbmFtZScg aW4gdGhpcyBncm91cCBvbmx5ICovCistCXB1YmxpYyBzeW5jaHJvbml6ZWQgU3RyaW5nVGVtcGxh dGUgZ2V0VGVtcGxhdGVEZWZpbml0aW9uKFN0cmluZyBuYW1lKSB7CistCQlyZXR1cm4gKFN0cmlu Z1RlbXBsYXRlKXRlbXBsYXRlcy5nZXQobmFtZSk7CisrCXB1YmxpYyBzeW5jaHJvbml6ZWQgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGdldFRlbXBsYXRlRGVmaW5pdGlv bihTdHJpbmcgbmFtZSkgeworKwkJcmV0dXJuIChvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUpdGVtcGxhdGVzLmdldChuYW1lKTsKKyAJfQorIAorIAkvKiogSXMgdGhlcmUg KmFueSogZGVmaW5pdGlvbiBmb3IgdGVtcGxhdGUgJ25hbWUnIGluIHRoaXMgdGVtcGxhdGUKK0BA IC0xMDEyLDcgKzEwMTIsNyBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxhdGVHcm91cCB7Cisg CQlub0RlYnVnU3RhcnRTdG9wU3RyaW5ncy5hZGQodGVtcGxhdGVOYW1lKTsKKyAJfQorIAorLQlw dWJsaWMgdm9pZCBlbWl0VGVtcGxhdGVTdGFydERlYnVnU3RyaW5nKFN0cmluZ1RlbXBsYXRlIHN0 LAorKwlwdWJsaWMgdm9pZCBlbWl0VGVtcGxhdGVTdGFydERlYnVnU3RyaW5nKG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCwKKyAJCQkJCQkJCQkJCSBTdHJpbmdUZW1w bGF0ZVdyaXRlciBvdXQpCisgCQl0aHJvd3MgSU9FeGNlcHRpb24KKyAJeworQEAgLTEwMzIsNyAr MTAzMiw3IEBAIHB1YmxpYyBjbGFzcyBTdHJpbmdUZW1wbGF0ZUdyb3VwIHsKKyAJCX0KKyAJfQor IAorLQlwdWJsaWMgdm9pZCBlbWl0VGVtcGxhdGVTdG9wRGVidWdTdHJpbmcoU3RyaW5nVGVtcGxh dGUgc3QsCisrCXB1YmxpYyB2b2lkIGVtaXRUZW1wbGF0ZVN0b3BEZWJ1Z1N0cmluZyhvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QsCisgCQkJCQkJCQkJCQlTdHJpbmdU ZW1wbGF0ZVdyaXRlciBvdXQpCisgCQl0aHJvd3MgSU9FeGNlcHRpb24KKyAJeworQEAgLTEwNjMs MTAgKzEwNjMsMTAgQEAgcHVibGljIGNsYXNzIFN0cmluZ1RlbXBsYXRlR3JvdXAgeworIAkJQ29s bGVjdGlvbnMuc29ydChzb3J0ZWROYW1lcyk7CisgCQlJdGVyYXRvciBpdGVyID0gc29ydGVkTmFt ZXMuaXRlcmF0b3IoKTsKKyAJCWJ1Zi5hcHBlbmQoImdyb3VwICIrZ2V0TmFtZSgpKyI7XG4iKTsK Ky0JCVN0cmluZ1RlbXBsYXRlIGZvcm1hbEFyZ3MgPSBuZXcgU3RyaW5nVGVtcGxhdGUoIiRhcmdz O3NlcGFyYXRvcj1cIixcIiQiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBmb3JtYWxBcmdzID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSgiJGFyZ3M7c2VwYXJhdG9yPVwiLFwiJCIpOworIAkJd2hpbGUgKGl0ZXIuaGFzTmV4 dCgpKSB7CisgCQkJU3RyaW5nIHRuYW1lID0gKFN0cmluZykgaXRlci5uZXh0KCk7CistCQkJU3Ry aW5nVGVtcGxhdGUgc3QgPSAoU3RyaW5nVGVtcGxhdGUpdGVtcGxhdGVzLmdldCh0bmFtZSk7Cisr CQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gKG9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSl0ZW1wbGF0ZXMuZ2V0KHRuYW1lKTsKKyAJ CQlpZiAoIHN0IT1OT1RfRk9VTkRfU1QgKSB7CisgCQkJCWZvcm1hbEFyZ3MgPSBmb3JtYWxBcmdz LmdldEluc3RhbmNlT2YoKTsKKyAJCQkJZm9ybWFsQXJncy5zZXRBdHRyaWJ1dGUoImFyZ3MiLCBz dC5nZXRGb3JtYWxBcmd1bWVudHMoKSk7CistLS0gdGVzdC9vcmcvYW50bHIvc3RyaW5ndGVtcGxh dGUvdGVzdC9UZXN0U3RyaW5nVGVtcGxhdGUuamF2YS5vcmlnCTIwMDktMDktMjIgMTU6MDA6MTcu MDAwMDAwMDAwIC0wNjAwCisrKysgdGVzdC9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvdGVzdC9U ZXN0U3RyaW5nVGVtcGxhdGUuamF2YQkyMDI1LTA3LTA1IDE1OjE2OjQyLjgzNjc5OTE5NyAtMDYw MAorQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4 dGVuZHMKKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IEZpbGVSZWFkZXIodG1wZGly KyIvdGVzdEcuc3RnIiksCisgCQkJCQkJCQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzLAor IAkJCQkJCQkJCQllcnJvcnMpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJtYWluIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtYWluIik7CisgCQlzdC5zZXRBdHRyaWJ1dGUo IngiLCAiZm9vIik7CisgCisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIipmb28qIjsKK0BAIC0yMzYs NyArMjM2LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlT dHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAo bmV3IEZpbGVSZWFkZXIodG1wZGlyKyIvdGVzdEcuc3RnIiksCisgCQkJCQkJCQkJCWVycm9ycyk7 CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1haW4iKTsKKysJ CW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldElu c3RhbmNlT2YoIm1haW4iKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgieCIsICJmb28iKTsKKyAKKyAJ CVN0cmluZyBleHBlY3RpbmcgPSAiKmZvbyoiOworQEAgLTMzOCwxMSArMzM4LDExIEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQkidCgpIDo6PSA8PGxpdGVy YWwgdGVtcGxhdGU+PiIrbmV3bGluZTsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsZ3JvdXAu dG9TdHJpbmcoKSk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigidCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJ0Iik7CisgCQlleHBlY3RpbmcgPSAibGl0ZXJhbCB0ZW1wbGF0 ZSI7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLGEudG9TdHJpbmcoKSk7CisgCistCQlTdHJp bmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYm9sZCIpOworKwkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJi b2xkIik7CisgCQliLnNldEF0dHJpYnV0ZSgiaXRlbSIsICJkb3JrIik7CisgCQlleHBlY3Rpbmcg PSAiPGI+ZG9yazwvYj4iOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZyxiLnRvU3RyaW5nKCkp OworQEAgLTM2NCwxMiArMzY0LDEyIEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUg ZXh0ZW5kcworIAkJCQkidCgpIDo6PSA8PCRcImxpdGVyYWxcIjp7YXwkYSRcXH19JCB0ZW1wbGF0 ZT4+IituZXdsaW5lOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZyxncm91cC50b1N0cmluZygp KTsKKyAKKy0JCVN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJib2xkIik7 CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdl dEluc3RhbmNlT2YoImJvbGQiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJpdGVtIiwgImRvcmsiKTsK KyAJCWV4cGVjdGluZyA9ICI8Yj5kb3JrPC9iPiI7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5n LGIudG9TdHJpbmcoKSk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFu Y2VPZigidCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEg PSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0Iik7CisgCQlleHBlY3RpbmcgPSAibGl0ZXJhbH0gdGVt cGxhdGUiOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZyxhLnRvU3RyaW5nKCkpOworIAl9CitA QCAtMzg4LDcgKzM4OCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAkJCQkJCQkJCQlEZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcyk7CisgCisgICAgICAgICAv LyBjaGVjayBzZXR0aW5nIHVua25vd24gYXJnIGluIGVtcHR5IGZvcm1hbCBsaXN0CistICAgICAg ICBTdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidCIpOworKyAgICAgICAg b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJ0Iik7CisgICAgICAgICBTdHJpbmcgZXJyb3IgPSBudWxsOworICAgICAgICAgdHJ5 IHsKKyAgICAgICAgICAgICBhLnNldEF0dHJpYnV0ZSgiZm9vIiwgIngiKTsgLy8gd2FudCBOb1N1 Y2hFbGVtZW50RXhjZXB0aW9uCitAQCAtNDM2LDcgKzQzNiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91 cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdS ZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVmYXVsdFRlbXBsYXRlTGV4ZXIuY2xhc3Mp OworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2Ui KTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoInRp dGxlIiwibXkgdGl0bGUiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJmb250IiwiSGVsdmV0 aWNhIik7IC8vIGJvZHkoKSB3aWxsIHNlZSBpdAorICAgICAgICAgdC50b1N0cmluZygpOyAvLyBz aG91bGQgYmUgbm8gcHJvYmxlbQorQEAgLTQ1MCw3ICs0NTAsNyBAQCBwdWJsaWMgY2xhc3MgVGVz dFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3Jv dXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5n UmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNz KTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJwYWdl Iik7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9 IGdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3Rpbmcg PSAiPGZvbnQgZmFjZT1UaW1lcz5teSBib2R5PC9mb250PiI7CisgICAgICAgICBhc3NlcnRFcXVh bHMoZXhwZWN0aW5nLCB0LnRvU3RyaW5nKCkpOworICAgICB9CitAQCAtNDYzLDcgKzQ2Myw3IEBA IHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5n VGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0 ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVmYXVsdFRl bXBsYXRlTGV4ZXIuY2xhc3MpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdl dEluc3RhbmNlT2YoInBhZ2UiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworICAgICAgICAg dC5zZXRBdHRyaWJ1dGUoIngiLCJUaW1lcyIpOworICAgICAgICAgU3RyaW5nIGVycm9yID0gIiI7 CisgICAgICAgICB0cnkgeworQEAgLTQ4NCw3ICs0ODQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0 cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAg PQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVh ZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzKTsK Ky0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJwYWdlIik7 CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9IGdy b3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJuYW1l IiwgIlRlciIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9ICI8Zm9udCBmYWNlPVRpbWVz PjxiPlRlcjwvYj48L2ZvbnQ+IjsKKyAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RpbmcsIHQu dG9TdHJpbmcoKSk7CitAQCAtNDk4LDcgKzQ5OCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9Cisg ICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIo dGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVmYXVsdFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLSAg ICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsKKysg ICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAu Z2V0SW5zdGFuY2VPZigicGFnZSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIngiLCJUaW1l cyIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiVGVyIik7CisgICAgICAgICBT dHJpbmcgZXJyb3IgPSAiIjsKK0BAIC01MjAsNyArNTIwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3Vw ID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1Jl YWRlcih0ZW1wbGF0ZXMpLAorIAkJCQkJCQkJCQlEZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcyk7 CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIp OworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJwYWdlIik7CisgICAgICAgICBTdHJpbmcgZXJyb3IgPSAiIjsK KyAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgdC50b1N0cmluZygpOworQEAgLTU0MCw3ICs1 NDAsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAg IFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCURl ZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJwYWdlIik7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsKKyAg ICAgICAgIFN0cmluZyBlcnJvciA9ICIiOworICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICB0 LnRvU3RyaW5nKCk7CitAQCAtNTYyLDE0ICs1NjIsMTQgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJp bmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0K KyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoCisgICAgICAgICAgICAg ICAgICAgICAgICAgbmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0gICAgICAgIFN0cmlu Z1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisrICAgICAgICBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2Yo ImEiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJzIiwiVGVzdCIpOworICAgICAgICAgU3Ry aW5nIGV4cGVjdGluZyA9ICJjYXNlIDEgOiBUZXN0IGJyZWFrOyI7CisgICAgICAgICBhc3NlcnRF cXVhbHMoZXhwZWN0aW5nLCB0LnRvU3RyaW5nKCkpOworICAgICB9CisgCisgICAgIHB1YmxpYyB2 b2lkIHRlc3RBbmdsZUJyYWNrZXRzTm9Hcm91cCgpIHRocm93cyBFeGNlcHRpb24geworLSAgICAg ICAgU3RyaW5nVGVtcGxhdGUgc3QgPW5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAgICAgIG9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9bmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgIlRva2VucyA6IDxy dWxlczsgc2VwYXJhdG9yPVwifFwiPiA7IiwKKyAgICAgICAgICAgICAgICAgQW5nbGVCcmFja2V0 VGVtcGxhdGVMZXhlci5jbGFzcyk7CisgICAgICAgICBzdC5zZXRBdHRyaWJ1dGUoInJ1bGVzIiwg IkEiKTsKK0BAIC01ODUsNyArNTg1LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmlu Z1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpLAorIAkJCQkJCQkJCQlE ZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcyk7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3Vw LmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJCVN0cmluZyByZXN1bHQg PSBzdC50b1N0cmluZygpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJYWSI7CisgCQlhc3NlcnRF cXVhbHMoZXhwZWN0aW5nLCByZXN1bHQpOworQEAgLTU5OCw3ICs1OTgsNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3Jv dXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBs YXRlcyksCisgCQkJCQkJCQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmlu Z1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworKwkJb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIp OworIAkJU3RyaW5nIHJlc3VsdCA9IHN0LnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgZXhwZWN0aW5n ID0gIlhibG9ydFkiOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKK0BAIC02 MTAsNyArNjEwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisg CQkJCSJhKCkgOjo9IFwiWDxAcigpPllcIiIgK25ld2xpbmU7CisgCQlTdHJpbmdUZW1wbGF0ZUdy b3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRl cih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigiYSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJU3RyaW5nIHJlc3VsdCA9IHN0LnRvU3RyaW5n KCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIlhZIjsKKyAJCWFzc2VydEVxdWFscyhleHBlY3Rp bmcsIHJlc3VsdCk7CitAQCAtNjIyLDcgKzYyMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworIAkJCQkiYSgpIDo6PSBcIlg8QHI+YmxvcnQ8QGVuZD5ZXCIiICtu ZXdsaW5lOworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdU ZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1w bGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJ CVN0cmluZyByZXN1bHQgPSBzdC50b1N0cmluZygpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJY YmxvcnRZIjsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7CitAQCAtNjM4LDcg KzYzOCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQki WVwiIiArbmV3bGluZTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3Ry aW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisrCQlvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJh Iik7CisgCQlTdHJpbmcgcmVzdWx0ID0gc3QudG9TdHJpbmcoKTsKKyAJCVN0cmluZyBleHBlY3Rp bmcgPSAiWGJsb3J0WSI7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCByZXN1bHQpOworQEAg LTY1MSw3ICs2NTEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCQkJIkBhLnIoKSA6Oj0gXCJmb29cIiIgK25ld2xpbmU7CisgCQlTdHJpbmdUZW1wbGF0ZUdy b3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRl cih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigiYSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJU3RyaW5nIHJlc3VsdCA9IHN0LnRvU3RyaW5n KCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIlhmb29ZIjsKKyAJCWFzc2VydEVxdWFscyhleHBl Y3RpbmcsIHJlc3VsdCk7CitAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3Ry aW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQkiQGEucigpIDo6PSBcImZvb1wiIiArbmV3bGluZTsK KyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3Qg PSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisgCQlzdC5zZXRB dHRyaWJ1dGUoInYiLCAidHJ1ZSIpOworIAkJU3RyaW5nIHJlc3VsdCA9IHN0LnRvU3RyaW5nKCk7 CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIlhBZm9vQlkiOworQEAgLTY4MCw3ICs2ODAsNyBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRl R3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVh ZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCWVycm9ycyk7CistCQlTdHJpbmdUZW1wbGF0ZSBz dCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJCXN0LnNl dEF0dHJpYnV0ZSgidiIsICJ0cnVlIik7CisgCQlTdHJpbmcgcmVzdWx0ID0gc3QudG9TdHJpbmco KTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiWEF5b0JZIjsKK0BAIC03MDgsNyArNzA4LDcgQEAg cHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCQkJCQkJCW51bGws CisgCQkJCQkJCQkJCWdyb3VwKTsKKyAKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gc3ViR3JvdXAu Z2V0SW5zdGFuY2VPZigiYSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIHN0ID0gc3ViR3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJU3RyaW5nIHJlc3Vs dCA9IHN0LnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIlhmb29ZIjsKKyAJCWFz c2VydEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7CitAQCAtNzMxLDcgKzczMSw3IEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQkJCQkJCQludWxsLAorIAkJ CQkJCQkJCQlncm91cCk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IHN1Ykdyb3VwLmdldElu c3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSBzdCA9IHN1Ykdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJCVN0cmluZyByZXN1bHQgPSBz dC50b1N0cmluZygpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJYQWZvb0JZIjsKKyAJCWFzc2Vy dEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7CitAQCAtNzc2LDcgKzc3Niw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQkJCQkJCQludWxsLAorIAkJCQkJ CQkJCQlzdWJHcm91cCk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IHN1YlN1Ykdyb3VwLmdl dEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBzdCA9IHN1YlN1Ykdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJCVN0cmluZyByZXN1 bHQgPSBzdC50b1N0cmluZygpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJYZm9vMjNZIjsKKyAJ CWFzc2VydEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7CitAQCAtNzk4LDcgKzc5OCw3IEBAIHB1 YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQkJCQkJCQludWxsLAor IAkJCQkJCQkJCQlncm91cCk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IHN1Ykdyb3VwLmdl dEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBzdCA9IHN1Ykdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKyAJCVN0cmluZyByZXN1bHQg PSBzdC50b1N0cmluZygpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJYQWZvb1kiOworIAkJYXNz ZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKK0BAIC04MTQsNyArODE0LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3Vw IGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0 ZW1wbGF0ZXMpLAorIAkJCQkJCQkJCQllcnJvcnMpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisgCQlzdC50b1N0cmlu ZygpOworIAkJU3RyaW5nIHJlc3VsdCA9IGVycm9ycy50b1N0cmluZygpOworIAkJU3RyaW5nIGV4 cGVjdGluZyA9ICJncm91cCB0ZXN0IGxpbmUgMjogcmVkZWZpbml0aW9uIG9mIHRlbXBsYXRlIHJl Z2lvbjogQGEuciI7CitAQCAtODMyLDcgKzgzMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5l dyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJ CQkJCQkJZXJyb3JzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigiYSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJc3QudG9TdHJpbmcoKTsKKyAJCVN0cmluZyBy ZXN1bHQgPSBlcnJvcnMudG9TdHJpbmcoKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiZ3JvdXAg dGVzdCBsaW5lIDQ6IHJlZGVmaW5pdGlvbiBvZiB0ZW1wbGF0ZSByZWdpb246IEBhLnIiOworQEAg LTg3NCw3ICs4NzQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCWVycm9ycyk7Cist CQlTdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNl T2YoImEiKTsKKyAJCXN0LnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgcmVzdWx0ID0gZXJyb3JzLnRv U3RyaW5nKCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gImdyb3VwIHRlc3QgbGluZSAzOiB0ZW1w bGF0ZSBhIGhhcyBubyByZWdpb24gY2FsbGVkIHEiOworQEAgLTkxNiw3ICs5MTYsNyBAQCBwdWJs aWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQkJCQkJCQkJRGVmYXVsdFRl bXBsYXRlTGV4ZXIuY2xhc3MsCisgCQkJCQkJCQkJCWVycm9ycywKKyAJCQkJCQkJCQkJbnVsbCk7 CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3Rh bmNlT2YoImEiKTsKKyAJCXN0LnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgcmVzdWx0ID0gZXJyb3Jz LnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIm1pc3NpbmcgcmVnaW9uIHIgJEBl bmQkIHRhZyI7CitAQCAtOTMyLDcgKzkzMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVt cGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBT dHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJCQkJ CQkJZXJyb3JzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi YSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gZ3Jv dXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJc3QudG9TdHJpbmcoKTsKKyAJCVN0cmluZyByZXN1 bHQgPSBlcnJvcnMudG9TdHJpbmcoKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAibWlzc2luZyBy ZWdpb24gciA8QGVuZD4gdGFnIjsKK0BAIC05NDgsNyArOTQ4LDcgQEAgcHVibGljIGNsYXNzIFRl c3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUVycm9yTGlzdGVuZXIg ZXJyb3JzID0gbmV3IEVycm9yQnVmZmVyKCk7CisgCQlzdWJncm91cC5zZXRFcnJvckxpc3RlbmVy KGVycm9ycyk7CisgCQlzdXBlcmdyb3VwLnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKTsKKy0JCVN0 cmluZ1RlbXBsYXRlIGR1aCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShzdWJncm91cCwgIiRuYW1lOmJv bGQoKSQiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBkdWgg PSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKHN1Ymdyb3VwLCAi JG5hbWU6Ym9sZCgpJCIpOworIAkJZHVoLnNldEF0dHJpYnV0ZSgibmFtZSIsICJUZXJlbmNlIik7 CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIjxiPlRlcmVuY2U8L2I+IjsKKyAJCWFzc2VydEVxdWFs cyhleHBlY3RpbmcsZHVoLnRvU3RyaW5nKCkpOworQEAgLTk2NCw3ICs5NjQsNyBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlRXJyb3JM aXN0ZW5lciBlcnJvcnMgPSBuZXcgRXJyb3JCdWZmZXIoKTsKKyAJCXN1Ymdyb3VwLnNldEVycm9y TGlzdGVuZXIoZXJyb3JzKTsKKyAJCXN1cGVyZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMp OworLQkJU3RyaW5nVGVtcGxhdGUgZHVoID0gbmV3IFN0cmluZ1RlbXBsYXRlKHN1Ymdyb3VwLCAi JG5hbWU6Ym9sZCgpJCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlIGR1aCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoc3Vi Z3JvdXAsICIkbmFtZTpib2xkKCkkIik7CisgCQlkdWguc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRl cmVuY2UiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiPHN0cm9uZz5UZXJlbmNlPC9zdHJvbmc+ IjsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsZHVoLnRvU3RyaW5nKCkpOworQEAgLTk4Miw3 ICs5ODIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCXJv b3Rncm91cC5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CisgCQlsZXZlbDEuc2V0RXJyb3JMaXN0 ZW5lcihlcnJvcnMpOworIAkJbGV2ZWwyLnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKTsKKy0JCVN0 cmluZ1RlbXBsYXRlIGR1aCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShsZXZlbDIsICIkbmFtZTpib2xk KCkkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZHVoID0g bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShsZXZlbDIsICIkbmFt ZTpib2xkKCkkIik7CisgCQlkdWguc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlcmVuY2UiKTsKKyAJ CVN0cmluZyBleHBlY3RpbmcgPSAiPGI+VGVyZW5jZTwvYj4iOworIAkJYXNzZXJ0RXF1YWxzKGV4 cGVjdGluZyxkdWgudG9TdHJpbmcoKSk7CitAQCAtMTAxMiw3ICsxMDEyLDcgQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIHN1 YiA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIoc3VidGVt cGxhdGVzKSk7CisgCQlzdWIuc2V0U3VwZXJHcm91cChiYXNlKTsKKy0JCVN0cmluZ1RlbXBsYXRl IHN0ID0gc3ViLmdldEluc3RhbmNlT2YoImRlY2xzIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBzdWIuZ2V0SW5zdGFuY2VPZigiZGVjbHMiKTsKKyAJ CVN0cmluZyBleHBlY3RpbmcgPSAiRFNMIjsKKyAJCVN0cmluZyByZXN1bHQgPSBzdC50b1N0cmlu ZygpOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKK0BAIC0xMDQzLDcgKzEw NDMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQkJCQkJ CQkJbnVsbCwKKyAJCQkJCQkJCQkJc3ViR3JvdXApOworIAorLQkJU3RyaW5nVGVtcGxhdGUgc3Qg PSBzdWJTdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJyIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBzdWJTdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJyIik7 CisgCQlTdHJpbmcgcmVzdWx0ID0gc3QudG9TdHJpbmcoKTsKKyAJCVN0cmluZyBleHBlY3Rpbmcg PSAiZm9vMjMiOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKK0BAIC0xMDUy LDEwICsxMDUyLDEwIEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcwor IAlwdWJsaWMgdm9pZCB0ZXN0RXhwckluUGFyZW5zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQkv LyBzcGVjaWZ5IGEgdGVtcGxhdGUgdG8gYXBwbHkgdG8gYW4gYXR0cmlidXRlCisgCQkvLyBVc2Ug YSB0ZW1wbGF0ZSBncm91cCBzbyB3ZSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQvc3RvcCBjaGFycwor LQkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoImR1bW15IiwgIi4iKTsKKyAJCS8qU3RyaW5nVGVtcGxhdGUgYm9sZCA9Ki8gZ3JvdXAuZGVm aW5lVGVtcGxhdGUoImJvbGQiLCAiPGI+JGl0JDwvYj4iKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGR1 aCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiQoXCJibG9ydDogXCIrKGxpc3QpKTpib2xk KCkkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZHVoID0g bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiQoXCJi bG9ydDogXCIrKGxpc3QpKTpib2xkKCkkIik7CisgCQlkdWguc2V0QXR0cmlidXRlKCJsaXN0Iiwg ImEiKTsKKyAJCWR1aC5zZXRBdHRyaWJ1dGUoImxpc3QiLCAiYiIpOworIAkJZHVoLnNldEF0dHJp YnV0ZSgibGlzdCIsICJjIik7CitAQCAtMTA2NywxMSArMTA2NywxMSBAQCBwdWJsaWMgY2xhc3Mg VGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxl QWRkaXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAvLyBzcGVjaWZ5IGEgdGVt cGxhdGUgdG8gYXBwbHkgdG8gYW4gYXR0cmlidXRlCisgICAgICAgICAvLyBVc2UgYSB0ZW1wbGF0 ZSBncm91cCBzbyB3ZSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQvc3RvcCBjaGFycworLSAgICAgICAg U3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CistICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBs YXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKysgICAgICAgICAgICBuZXcgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKyAgICAg ICAgIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJsaW5rIiwgIjxhIGhyZWY9XCIkdXJsJFwiPjxiPiR0 aXRsZSQ8L2I+PC9hPiIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgZHVoID0KKy0gICAgICAg ICAgICBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZHVoID0KKysgICAgICAgICAgICBuZXcgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorICAgICAgICAgICAgICAgICAi JGxpbmsodXJsPVwiL21lbWJlci92aWV3P0lEPVwiK0lEK1wiJng9eVwiK2ZvbywgdGl0bGU9XCJ0 aGUgdGl0bGVcIikkIik7CisgICAgICAgICBkdWguc2V0QXR0cmlidXRlKCJJRCIsICIzMzIxIik7 CisgICAgICAgICBkdWguc2V0QXR0cmlidXRlKCJmb28iLCAiZnViYXIiKTsKK0BAIC0xMDgzLDgg KzEwODMsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAg ICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3Ry aW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBib2xk ID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8Yj4kaXQkPC9iPiIpOworLSAgICAg ICAgU3RyaW5nVGVtcGxhdGUgdCA9CistICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlKGdy b3VwLCAiJGRhdGEkLCAkZGF0YTpib2xkKCkkLCAiKworKyAgICAgICAgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKyAgICAgICAgICAgIG5ldyBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkZGF0YSQsICRkYXRhOmJvbGQo KSQsICIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGxpc3Q6Ym9s ZCgpOmJvbGQoKSQsICRhcnJheSQsICRhMiQsICRhMyQsICRhNCQiKTsKKyAgICAgICAgIFZlY3Rv ciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICAgdi5hZGRFbGVtZW50KCIxIik7CitAQCAtMTEx MCw3ICsxMTEwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisg ICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3 IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUg Ym9sZCA9Ki8gZ3JvdXAuZGVmaW5lVGVtcGxhdGUoImJvbGQiLCAiPGI+JGl0JDwvYj4iKTsKKy0g ICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkKGYr bCk6Ym9sZCgpJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdy b3VwLCAiJChmK2wpOmJvbGQoKSQiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJmIiwgIkpv ZSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoImwiLCAiU2NobW9lIik7CisgICAgICAgICAv L1N5c3RlbS5vdXQucHJpbnRsbih0KTsKK0BAIC0xMTIyLDcgKzExMjIsNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3Jv dXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVz dCIpOworICAgICAgICAgLyogU3RyaW5nVGVtcGxhdGUgYm9sZCA9Ki8gZ3JvdXAuZGVmaW5lVGVt cGxhdGUoImZvb2JhciIsICJmb28kYXR0ciRiYXIiKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRl IHQgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkZGF0YToobmFtZStcImJhclwiKSgpJCIp OworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBu ZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJGRhdGE6 KG5hbWUrXCJiYXJcIikoKSQiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJkYXRhIiwgIlRl ciIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoImRhdGEiLCAiVG9tIik7CisgICAgICAgICB0 LnNldEF0dHJpYnV0ZSgibmFtZSIsICJmb28iKTsKK0BAIC0xMTM2LDcgKzExMzYsNyBAQCBwdWJs aWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAgbmV3 IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAJCS8qU3RyaW5nVGVtcGxhdGUgZm9vYmFy ID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiZm9vYmFyIiwgImZvbyRpdCRiYXIiKTsKKyAJCS8q U3RyaW5nVGVtcGxhdGUgYSA9Ki8gZ3JvdXAuZGVmaW5lVGVtcGxhdGUoImEiLCAiJGl0JGJhciIp OworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwg IiRkYXRhOihcImZvb1wiOmEoKSkoKSQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZShncm91cCwgIiRkYXRhOihcImZvb1wiOmEoKSkoKSQiKTsKKyAgICAgICAgIHQu c2V0QXR0cmlidXRlKCJkYXRhIiwgIlRlciIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoImRh dGEiLCAiVG9tIik7CisgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih0KTsKK0BAIC0xMTQ4 LDcgKzExNDgsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAg ICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcg U3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBm b28gPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJmb28iLCAiaGkgdGhlcmUhIik7CistICAgICAg ICBTdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJChuYW1lKSgp JCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQg PSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJChu YW1lKSgpJCIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZm9vIik7CisgICAg ICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih0KTsKKyAgICAgICAgIFN0cmluZyBleHBlY3Rpbmc9 ImhpIHRoZXJlISI7CitAQCAtMTE2MCw3ICsxMTYwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJp bmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdy b3VwKCJ0ZXN0Iik7CisgCQlTdHJpbmdUZW1wbGF0ZUVycm9yTGlzdGVuZXIgZXJyb3JzID0gbmV3 IEVycm9yQnVmZmVyKCk7CisgICAgICAgICBncm91cC5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7 CistICAgICAgICAvKlN0cmluZ1RlbXBsYXRlIHQgPSovIG5ldyBTdHJpbmdUZW1wbGF0ZShncm91 cCwgInN0dWZmICRhIHRoZW4gbW9yZSBqdW5rIGV0Yy4uLiIpOworKyAgICAgICAgLypTdHJpbmdU ZW1wbGF0ZSB0ID0qLyBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KGdyb3VwLCAic3R1ZmYgJGEgdGhlbiBtb3JlIGp1bmsgZXRjLi4uIik7CisgICAgICAgICBTdHJp bmcgZXhwZWN0aW5nRXJyb3I9InByb2JsZW0gcGFyc2luZyB0ZW1wbGF0ZSAnYW5vbnltb3VzJzog bGluZSAxOjMxOiBleHBlY3RpbmcgJyQnLCBmb3VuZCAnPEVPRj4nIjsKKyAgICAgICAgIC8vU3lz dGVtLm91dC5wcmludGxuKCJlcnJvcjogJyIrZXJyb3JzKyInIik7CisgICAgICAgICAvL1N5c3Rl bS5vdXQucHJpbnRsbigiZXhwZWN0aW5nOiAnIitleHBlY3RpbmdFcnJvcisiJyIpOworQEAgLTEx NjgsMTAgKzExNjgsMTAgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdFNldEJ1dE5vdFJlZmQoKSB0aHJvd3Mg RXhjZXB0aW9uIHsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlLnNldExpbnRNb2RlKHRydWUpOwor KyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlLnNldExpbnRN b2RlKHRydWUpOworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAg ICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CistICAgICAgICBTdHJp bmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJGEkIHRoZW4gJGIkIGFu ZCAkYyQgcmVmcy4iKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShn cm91cCwgIiRhJCB0aGVuICRiJCBhbmQgJGMkIHJlZnMuIik7CisgICAgICAgICB0LnNldEF0dHJp YnV0ZSgiYSIsICJUZXJlbmNlIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgiYiIsICJUZXJl bmNlIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgiY2MiLCAiVGVyZW5jZSIpOyAvLyBvb3Bz Li4uc2hvdWxkIGJlICdjJworQEAgLTExODEsNyArMTE4MSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgLypTdHJpbmcgcmVzdWx0ID0qLyB0LnRv U3RyaW5nKCk7ICAgIC8vIHJlc3VsdCBpcyBpcnJlbGV2YW50CisgICAgICAgICAvL1N5c3RlbS5v dXQucHJpbnRsbigicmVzdWx0IGVycm9yOiAnIitlcnJvcnMrIiciKTsKKyAgICAgICAgIC8vU3lz dGVtLm91dC5wcmludGxuKCJleHBlY3Rpbmc6ICciK2V4cGVjdGluZ0Vycm9yKyInIik7CistICAg ICAgICBTdHJpbmdUZW1wbGF0ZS5zZXRMaW50TW9kZShmYWxzZSk7CisrICAgICAgICBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUuc2V0TGludE1vZGUoZmFsc2UpOworICAg ICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGluZ0Vycm9yLGVycm9ycy50b1N0cmluZygpKTsKKyAg ICAgfQorIAorQEAgLTExOTAsNyArMTE5MCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVt cGxhdGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgi dGVzdCIpOworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBFcnJv ckJ1ZmZlcigpOworICAgICAgICAgZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLSAg ICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1l czpib2xkKHg9aXQpJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KGdyb3VwLCAiJG5hbWVzOmJvbGQoeD1pdCkkIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgi bmFtZXMiLCAiVGVyZW5jZSIpOworICAgICAgICAgCisgCQlTdHJpbmcgZXJyb3IgPSBudWxsOwor QEAgLTEyMDksNyArMTIwOSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOwor IAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBFcnJvckJ1ZmZlcigp OworICAgICAgICAgZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLSAgICAgICAgU3Ry aW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lczpib2xkKHg9 aXQpJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAi JG5hbWVzOmJvbGQoeD1pdCkkIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgibmFtZXMiLCAi VGVyZW5jZSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRvbSIpOworICAg ICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4odCk7CitAQCAtMTIyOCw3ICsxMjI4LDcgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBTdHJpbmdUZW1w bGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoInRlc3QiKTsKKyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUgYm9sZCA9Ki8gZ3JvdXAuZGVm aW5lVGVtcGxhdGUoImJvbGQiLCAiPGI+JHgkPC9iPiIpOworLSAgICAgICAgU3RyaW5nVGVtcGxh dGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lczpib2xkKHg9aXQpJCIpOwor KyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcg b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJG5hbWVzOmJv bGQoeD1pdCkkIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgibmFtZXMiLCAiVGVyZW5jZSIp OworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRvbSIpOworICAgICAgICAgLy9T eXN0ZW0ub3V0LnByaW50bG4oIiciK3QudG9TdHJpbmcoKSsiJyIpOworQEAgLTEyNDEsOCArMTI0 MSw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAg ICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworICAgICAgICAg LypTdHJpbmdUZW1wbGF0ZSBib2xkID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8 Yj4kaXRlbSQ8L2I+Iik7CisgICAgICAgICAvKlN0cmluZ1RlbXBsYXRlIGl0YWxpY3MgPSovIGdy b3VwLmRlZmluZVRlbXBsYXRlKCJpdGFsaWNzIiwgIjxpPiRpdCQ8L2k+Iik7CistICAgICAgICBT dHJpbmdUZW1wbGF0ZSBtZW1iZXJzID0KKy0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBs YXRlKGdyb3VwLCAiJG1lbWJlcnM6Ym9sZChpdGVtPWl0KTppdGFsaWNzKGl0PWl0KSQiKTsKKysg ICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBtZW1iZXJzID0K KysgICAgICAgICAgICAgICAgbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZShncm91cCwgIiRtZW1iZXJzOmJvbGQoaXRlbT1pdCk6aXRhbGljcyhpdD1pdCkkIik7Cisg ICAgICAgICBtZW1iZXJzLnNldEF0dHJpYnV0ZSgibWVtYmVycyIsICJKaW0iKTsKKyAgICAgICAg IG1lbWJlcnMuc2V0QXR0cmlidXRlKCJtZW1iZXJzIiwgIk1pa2UiKTsKKyAgICAgICAgIG1lbWJl cnMuc2V0QXR0cmlidXRlKCJtZW1iZXJzIiwgIkFzaGFyIik7CitAQCAtMTI1Nyw4ICsxMjU3LDgg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAvKlN0 cmluZ1RlbXBsYXRlIGxpc3RJdGVtID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgibGlzdEl0ZW0i LCAiPGxpPiRpdCQ8L2xpPiIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBib2xkID0qLyBn cm91cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8Yj4kaXQkPC9iPiIpOworICAgICAgICAgLypT dHJpbmdUZW1wbGF0ZSBpdGFsaWNzID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiaXRhbGljcyIs ICI8aT4kaXQkPC9pPiIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgaXRlbSA9CistICAgICAg ICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOmJvbGQoKSxpdGFsaWNz KCk6bGlzdEl0ZW0oKSQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBpdGVtID0KKysgICAgICAgICAgICAgICAgbmV3IG9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOmJvbGQoKSxpdGFsaWNzKCk6bGlz dEl0ZW0oKSQiKTsKKyAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJpdGVtIiwgIkppbSIpOwor ICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoIml0ZW0iLCAiTWlrZSIpOworICAgICAgICAgaXRl bS5zZXRBdHRyaWJ1dGUoIml0ZW0iLCAiQXNoYXIiKTsKK0BAIC0xMjcyLDcgKzEyNzIsNyBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAg bmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAgICAgICAgIC8qU3RyaW5nVGVtcGxh dGUgaG9zdG5hbWUgPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJob3N0bmFtZSIsICIkbWFjaGlu ZSQuamd1cnUuY29tIik7CisgICAgICAgICAvKlN0cmluZ1RlbXBsYXRlIGJvbGQgPSovIGdyb3Vw LmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiR4JDwvYj4iKTsKKy0gICAgICAgIFN0cmluZ1Rl bXBsYXRlIHQgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkYm9sZCh4PWhvc3RuYW1lKG1h Y2hpbmU9XCJ3d3dcIikpJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlKGdyb3VwLCAiJGJvbGQoeD1ob3N0bmFtZShtYWNoaW5lPVwid3d3XCIpKSQiKTsKKyAgICAg ICAgIFN0cmluZyBleHBlY3Rpbmc9IjxiPnd3dy5qZ3VydS5jb208L2I+IjsKKyAgICAgICAgIGFz c2VydEVxdWFscyhleHBlY3RpbmcsIHQudG9TdHJpbmcoKSk7CisgICAgIH0KK0BAIC0xMjgzLDcg KzEyODMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAg ICAgIC8qU3RyaW5nVGVtcGxhdGUgaG9zdG5hbWUgPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJo b3N0bmFtZSIsICIkbWFjaGluZSQuamd1cnUuY29tIik7CisgICAgICAgICAvKlN0cmluZ1RlbXBs YXRlIGJvbGQgPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiR4JDwvYj4iKTsK KyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUgaXRhbGljcyA9Ki8gZ3JvdXAuZGVmaW5lVGVtcGxh dGUoIml0YWxpY3MiLCAiPGk+JGl0JDwvaT4iKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQg PSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkYm9sZCh4PWhvc3RuYW1lKG1hY2hpbmU9XCJ3 d3dcIik6aXRhbGljcygpKSQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZShncm91cCwgIiRib2xkKHg9aG9zdG5hbWUobWFjaGluZT1cInd3d1wiKTppdGFsaWNzKCkp JCIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZz0iPGI+PGk+d3d3LmpndXJ1LmNvbTwvaT48 L2I+IjsKKyAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RpbmcsIHQudG9TdHJpbmcoKSk7Cisg ICAgIH0KK0BAIC0xMjkzLDcgKzEyOTMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRl c3QiKTsKKyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUgaXRhbGljcyA9Ki8gZ3JvdXAuZGVmaW5l VGVtcGxhdGUoIml0YWxpY3MiLCAiPGk+JHgkPC9pPiIpOworICAgICAgICAgLypTdHJpbmdUZW1w bGF0ZSBib2xkID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8Yj4keCQ8L2I+Iik7 CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLCAi JGJvbGQoeD1pdGFsaWNzKHg9bmFtZSkpJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlKGdyb3VwLCAiJGJvbGQoeD1pdGFsaWNzKHg9bmFtZSkpJCIpOworICAgICAg ICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiVGVyZW5jZSIpOworICAgICAgICAgLy9TeXN0ZW0u b3V0LnByaW50bG4odCk7CisgICAgICAgICBTdHJpbmcgZXhwZWN0aW5nPSI8Yj48aT5UZXJlbmNl PC9pPjwvYj4iOworQEAgLTEzMDUsOCArMTMwNSw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91 cCgidGVzdCIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBib2xkID0qLyBncm91cC5kZWZp bmVUZW1wbGF0ZSgiYnVsbGV0U2VwYXJhdG9yIiwgIjwvbGk+JGZvbyQ8bGk+Iik7CisgICAgICAg ICAvLyBtYWtlIHNlcGFyYXRvciBhIGNvbXBsaWNhdGVkIGV4cHJlc3Npb24gd2l0aCBhcmdzIHBh c3NlZCB0byBpbmNsdWRlZCB0ZW1wbGF0ZQorLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9Cist ICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKyAgICAgICAgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKyAgICAgICAgICAgIG5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICI8dWw+JG5hbWU7IHNlcGFyYXRvcj1idWxsZXRTZXBhcmF0b3Io Zm9vPVwiIFwiKStcIiZuYnNwO1wiJDwvdWw+Iik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgi bmFtZSIsICJUZXIiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRvbSIpOwor QEAgLTEzMTksNyArMTMxOSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworICAgICBwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlUmVmQnV0dGVkVXBBZ2FpbnN0RW5k aWZBbmRXaGl0ZXNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICBTdHJpbmdUZW1w bGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoInRlc3QiKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGEgPSBuZXcgU3RyaW5nVGVtcGxh dGUoZ3JvdXAsCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgYSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkaWYgKCFm aXJzdE5hbWUpJCRlbWFpbCQkZW5kaWYkIik7CisgICAgICAgICBhLnNldEF0dHJpYnV0ZSgiZW1h aWwiLCAicGFycnRAamd1cnUuY29tIik7CisgICAgICAgICBTdHJpbmcgZXhwZWN0aW5nID0gInBh cnJ0QGpndXJ1LmNvbSI7CitAQCAtMTMzMSw3ICsxMzMxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0 Iik7CisgCQkvKlN0cmluZ1RlbXBsYXRlIGJvbGQgPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJi b2xkIiwgIjxiPiRpdCQ8L2I+Iik7CisgCQkvL1N0cmluZ1RlbXBsYXRlIGEgPSBuZXcgU3RyaW5n VGVtcGxhdGUoZ3JvdXAsICIkXCIgUGFyclwiOmJvbGQoKSQiKTsKKy0JCVN0cmluZ1RlbXBsYXRl IGIgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkYm9sZChpdD17JG5hbWUkIFBhcnJ9KSQi KTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRib2xkKGl0PXsk bmFtZSQgUGFycn0pJCIpOworIAkJLy9hLnNldEF0dHJpYnV0ZSgibmFtZSIsICJUZXJlbmNlIik7 CisgCQliLnNldEF0dHJpYnV0ZSgibmFtZSIsICJUZXJlbmNlIik7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0gIjxiPlRlcmVuY2UgUGFycjwvYj4iOworQEAgLTEzNDMsNyArMTM0Myw3IEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91 cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CisgCQkvKlN0 cmluZ1RlbXBsYXRlIGJvbGQgPSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiRp dCQ8L2I+Iik7CistCQlTdHJpbmdUZW1wbGF0ZSBiID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3Vw LCAiJGJvbGQoaXQ9bmFtZStcIiBQYXJyXCIpJCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlKGdyb3VwLCAiJGJvbGQoaXQ9bmFtZStcIiBQYXJyXCIpJCIpOworIAkJLy9hLnNl dEF0dHJpYnV0ZSgibmFtZSIsICJUZXJlbmNlIik7CisgCQliLnNldEF0dHJpYnV0ZSgibmFtZSIs ICJUZXJlbmNlIik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIjxiPlRlcmVuY2UgUGFycjwvYj4i OworQEAgLTEzNTUsNyArMTM1NSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUg ZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdU ZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CisgCQkvKlN0cmluZ1RlbXBsYXRlIGJvbGQgPSovIGdyb3Vw LmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiRpdCQ8L2I+Iik7CistCQlTdHJpbmdUZW1wbGF0 ZSBiID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJGJvbGQoaXQ9bmFtZStcIiBQYXJyPVwi KSQiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gbmV3 IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRib2xkKGl0 PW5hbWUrXCIgUGFycj1cIikkIik7CisgCQkvL2Euc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlcmVu Y2UiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlcmVuY2UiKTsKKyAJCVN0cmluZyBl eHBlY3RpbmcgPSAiPGI+VGVyZW5jZSBQYXJyPTwvYj4iOworQEAgLTE0MDAsNyArMTQwMCw3IEBA IHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5n VGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0 ZUdyb3VwKCJkdW1teSIsIHRtcFdvcmtEaXIudG9TdHJpbmcoKSk7CisgCistICAgICAgICBTdHJp bmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworKyAgICAgICAgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5j ZU9mKCJwYWdlIik7CisgICAgICAgICBhLnNldEF0dHJpYnV0ZSgibWVtYmVyIiwgbmV3IENvbm5l Y3RvcigpKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3RpbmcgPSAiPGh0bWw+PGhlYWQ+IituZXds aW5lKworICAgICAgICAgICAgICAgICAiPC9oZWFkPiIrbmV3bGluZSsKK0BAIC0xNDIyLDggKzE0 MjIsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgewor ICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCB0Z3JvdXAgPQorICAgICAgICAgICAgICAgICBu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLSAgICAgICAgU3RyaW5nVGVt cGxhdGUgdCA9CistICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZSh0Z3JvdXAsCisr ICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisrICAg ICAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo dGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBMaXN0OiIrbmV3 bGluZSsiICAiK25ld2xpbmUrImZvbyIrbmV3bGluZStuZXdsaW5lKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiRuYW1lczp7PGJyPiRpJC4gJGl0JCIrbmV3bGluZSsKKyAJ CQkJCQkJCSAgICJ9JCIpOworQEAgLTE0NDYsNyArMTQ0Niw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBtZ3Jv dXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgibWV0aG9kIHN0 dWZmIiwKKyAJCQkJCQkJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcyk7CistICAg ICAgICBTdHJpbmdUZW1wbGF0ZSBtID0gbWdyb3VwLmdldEluc3RhbmNlT2YoIm9yZy9hbnRsci9z dHJpbmd0ZW1wbGF0ZS90ZXN0L21ldGhvZCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIG0gPSBtZ3JvdXAuZ2V0SW5zdGFuY2VPZigib3JnL2FudGxy L3N0cmluZ3RlbXBsYXRlL3Rlc3QvbWV0aG9kIik7CisgICAgICAgICAvLyAibWV0aG9kLnN0IiBy ZWZlcmVuY2VzIGJvZHkoKSBzbyAiYm9keS5zdCIgd2lsbCBiZSBsb2FkZWQgdG9vCisgICAgICAg ICBtLnNldEF0dHJpYnV0ZSgidmlzaWJpbGl0eSIsICJwdWJsaWMiKTsKKyAgICAgICAgIG0uc2V0 QXR0cmlidXRlKCJuYW1lIiwgImZvb2JhciIpOworQEAgLTE0NjgsNyArMTQ2OCw3IEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgU3RyaW5nVGVtcGxh dGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3Vw KCJ0ZXN0Iik7CisgICAgICAgICAvKlN0cmluZ1RlbXBsYXRlIGJvbGQgPSovIGdyb3VwLmRlZmlu ZVRlbXBsYXRlKCJib2xkIiwgIjxiPiR4JDwvYj4iKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRl IG5hbWUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkbmFtZTpib2xkKHg9bmFtZSkkIik7 CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgbmFtZSA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkbmFt ZTpib2xkKHg9bmFtZSkkIik7CisgICAgICAgICBuYW1lLnNldEF0dHJpYnV0ZSgibmFtZSIsICJU ZXJlbmNlIik7CisgICAgICAgICBhc3NlcnRFcXVhbHMoIjxiPlRlcmVuY2U8L2I+IixuYW1lLnRv U3RyaW5nKCkpOworICAgICB9CitAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAgcHVibGljIGNsYXNzIFRl c3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsK KyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUgYm9sZCA9Ki8gZ3JvdXAuZGVmaW5lVGVtcGxhdGUo ImJvbGQiLCAiPGI+JGl0JDwvYj4iKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIG5hbWUgPSBu ZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkXCJUZXJlbmNlXCI6Ym9sZCgpJCIpOworKyAgICAg ICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIG5hbWUgPSBuZXcgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJFwiVGVyZW5jZVwi OmJvbGQoKSQiKTsKKyAgICAgICAgIGFzc2VydEVxdWFscygiPGI+VGVyZW5jZTwvYj4iLG5hbWUu dG9TdHJpbmcoKSk7CisgICAgIH0KKyAKK0BAIC0xNDg1LDcgKzE0ODUsNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3Jv dXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVz dCIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBib2xkID0qLyBncm91cC5kZWZpbmVUZW1w bGF0ZSgiYm9sZCIsICI8Yj4kaXQkPC9iPiIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgbmFt ZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lOmJvbGQoKSQiKTsKKysgICAgICAg IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBuYW1lID0gbmV3IG9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lOmJvbGQoKSQi KTsKKyAgICAgICAgIG5hbWUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlcmVuY2UiKTsKKyAgICAg ICAgIGFzc2VydEVxdWFscygiPGI+VGVyZW5jZTwvYj4iLG5hbWUudG9TdHJpbmcoKSk7CisgICAg IH0KK0BAIC0xNDk1LDggKzE0OTUsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAgICAgICAgIC8vIFVzZSBhIHRlbXBsYXRlIGdyb3VwIHNvIHdlIGNhbiBzcGVj aWZ5IHRoZSBzdGFydC9zdG9wIGNoYXJzCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15Iiwg Ii4iKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGl0ZW0gPQorLSAgICAgICAgICAgICAgICBu ZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkaXRlbTp7PGxpPiRpdCQ8L2xpPn0kIik7CisrICAg ICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgaXRlbSA9CisrICAg ICAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo Z3JvdXAsICIkaXRlbTp7PGxpPiRpdCQ8L2xpPn0kIik7CisgICAgICAgICBpdGVtLnNldEF0dHJp YnV0ZSgiaXRlbSIsICJUZXJlbmNlIik7CisgICAgICAgICBhc3NlcnRFcXVhbHMoIjxsaT5UZXJl bmNlPC9saT4iLGl0ZW0udG9TdHJpbmcoKSk7CisgICAgIH0KK0BAIC0xNTA2LDExICsxNTA2LDEx IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgLy8g VXNlIGEgdGVtcGxhdGUgZ3JvdXAgc28gd2UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0L3N0b3AgY2hh cnMKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAg ICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLSAgICAgICAgU3RyaW5n VGVtcGxhdGUgbGlzdCA9CistICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZShncm91 cCwgIjx1bD4kaXRlbXMkPC91bD4iKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBsaXN0ID0KKysgICAgICAgICAgICAgICAgbmV3IG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIjx1bD4kaXRlbXMkPC91bD4iKTsK KyAgICAgICAgIC8vIGRlbW9uc3RyYXRlIHNldHRpbmcgYXJnIHRvIGFub255bW91cyBzdWJ0ZW1w bGF0ZQorLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgaXRlbSA9CistICAgICAgICAgICAgICAgIG5l dyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOns8bGk+JGl0JDwvbGk+fTsgc2VwYXJhdG9y PVwiLFwiJCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlIGl0ZW0gPQorKyAgICAgICAgICAgICAgICBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJGl0ZW06ezxsaT4kaXQkPC9saT59OyBzZXBhcmF0b3I9 XCIsXCIkIik7CisgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaXRlbSIsICJUZXJlbmNlIik7 CisgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaXRlbSIsICJKaW0iKTsKKyAgICAgICAgIGl0 ZW0uc2V0QXR0cmlidXRlKCJpdGVtIiwgIkpvaG4iKTsKK0BAIC0xNTIwLDggKzE1MjAsOCBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgfQorIAorICAgICBw dWJsaWMgdm9pZCB0ZXN0QXBwbHlBbm9ueW1vdXNUZW1wbGF0ZVRvQWdncmVnYXRlQXR0cmlidXRl KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9CistICAg ICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZSgiJGl0ZW1zOnskaXQubGFzdE5hbWUkLCAk aXQuZmlyc3ROYW1lJFxufSQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzdCA9CisrICAgICAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoIiRpdGVtczp7JGl0Lmxhc3ROYW1lJCwgJGl0LmZpcnN0 TmFtZSRcbn0kIik7CisgCQkvLyBhbHNvIHRlc3Rpbmcgd2Fja3kgc3BhY2VzIGluIGFnZ3JlZ2F0 ZSBzcGVjCisgCQlzdC5zZXRBdHRyaWJ1dGUoIml0ZW1zLnsgZmlyc3ROYW1lICxsYXN0TmFtZX0i LCAiVGVyIiwgIlBhcnIiKTsKKyAgICAgICAgIHN0LnNldEF0dHJpYnV0ZSgiaXRlbXMue2ZpcnN0 TmFtZSwgbGFzdE5hbWUgfSIsICJUb20iLCAiQnVybnMiKTsKK0BAIC0xNTM1LDggKzE1MzUsOCBA QCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgIFN0cmlu Z1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxh dGVHcm91cCgiZHVtbXkiLCAiLiIpOworICAgICAgICAgLypTdHJpbmdUZW1wbGF0ZSBzZWFyY2gg PSovIGdyb3VwLmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiRpdCQ8L2I+Iik7CistICAgICAg ICBTdHJpbmdUZW1wbGF0ZSBpdGVtID0KKy0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBs YXRlKGdyb3VwLCAiJGl0ZW06Ym9sZCgpOmJvbGQoKSQiKTsKKysgICAgICAgIG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBpdGVtID0KKysgICAgICAgICAgICAgICAgbmV3 IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOmJv bGQoKTpib2xkKCkkIik7CisgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaXRlbSIsICJKaW0i KTsKKyAgICAgICAgIGFzc2VydEVxdWFscygiPGI+PGI+SmltPC9iPjwvYj4iLCBpdGVtLnRvU3Ry aW5nKCkpOworICAgICB9CitAQCAtMTU0NSw4ICsxNTQ1LDggQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3Vw ID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4i KTsKKyAgICAgICAgIC8qU3RyaW5nVGVtcGxhdGUgc2VhcmNoID0qLyBncm91cC5kZWZpbmVUZW1w bGF0ZSgiYm9sZCIsICI8Yj4kaXQkPC9iPiIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgaXRl bSA9CistICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOmJv bGQoKTpib2xkKCk7IHNlcGFyYXRvcj1cIixcIiQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBpdGVtID0KKysgICAgICAgICAgICAgICAgbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRpdGVtOmJvbGQo KTpib2xkKCk7IHNlcGFyYXRvcj1cIixcIiQiKTsKKyAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRl KCJpdGVtIiwgIkppbSIpOworICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoIml0ZW0iLCAiTWlr ZSIpOworICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoIml0ZW0iLCAiQXNoYXIiKTsKK0BAIC0x NTU5LDEyICsxNTU5LDEyIEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworICAgICAvLyAjIyMgTkVFRCBBIFRFU1QgT0Ygb2JqIEFTU0lHTkVEIFRPIEFSRz8KKyAKKyAg ICAgcHVibGljIHZvaWQgdGVzdE11bHRpVmFsdWVkQXR0cmlidXRlV2l0aFNlcGFyYXRvcigpIHRo cm93cyBFeGNlcHRpb24geworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgcXVlcnk7CisrICAgICAg ICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgcXVlcnk7CisgCisgICAg ICAgICAvLyBpZiBjb2x1bW4gY2FuIGJlIG11bHRpLXZhbHVlZCwgc3BlY2lmeSBhIHNlcGFyYXRv cgorICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgbmV3 IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iLCBBbmdsZUJyYWNrZXRUZW1wbGF0ZUxl eGVyLmNsYXNzKTsKKy0gICAgICAgIHF1ZXJ5ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLCAi U0VMRUNUIDxkaXN0aW5jdD4gPGNvbHVtbjsgc2VwYXJhdG9yPVwiLCBcIj4gRlJPTSA8dGFibGU+ OyIpOworKyAgICAgICAgcXVlcnkgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlKGdyb3VwLCAiU0VMRUNUIDxkaXN0aW5jdD4gPGNvbHVtbjsgc2VwYXJhdG9yPVwi LCBcIj4gRlJPTSA8dGFibGU+OyIpOworICAgICAgICAgcXVlcnkuc2V0QXR0cmlidXRlKCJjb2x1 bW4iLCAibmFtZSIpOworICAgICAgICAgcXVlcnkuc2V0QXR0cmlidXRlKCJjb2x1bW4iLCAiZW1h aWwiKTsKKyAgICAgICAgIHF1ZXJ5LnNldEF0dHJpYnV0ZSgidGFibGUiLCAiVXNlciIpOworQEAg LTE1NzYsOCArMTU3Niw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAorICAgICBwdWJsaWMgdm9pZCB0ZXN0U2luZ2xlVmFsdWVkQXR0cmlidXRlcygpIHRocm93 cyBFeGNlcHRpb24geworICAgICAgICAgLy8gYWxsIGF0dHJpYnV0ZXMgYXJlIHNpbmdsZS12YWx1 ZWQ6CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBxdWVyeSA9CistICAgICAgICAgICAgICAgIG5l dyBTdHJpbmdUZW1wbGF0ZSgiU0VMRUNUICRjb2x1bW4kIEZST00gJHRhYmxlJDsiKTsKKysgICAg ICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBxdWVyeSA9CisrICAg ICAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo IlNFTEVDVCAkY29sdW1uJCBGUk9NICR0YWJsZSQ7Iik7CisgICAgICAgICBxdWVyeS5zZXRBdHRy aWJ1dGUoImNvbHVtbiIsICJuYW1lIik7CisgICAgICAgICBxdWVyeS5zZXRBdHRyaWJ1dGUoInRh YmxlIiwgIlVzZXIiKTsKKyAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihxdWVyeSk7CitA QCAtMTU4Nyw4ICsxNTg3LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCXB1YmxpYyB2b2lkIHRlc3RJRlRlbXBsYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Cisg CQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cCgiZHVtbXkiLCAiLiIsIEFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3Ry aW5nVGVtcGxhdGUgdCA9CistCQkJbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKwkJCW5ldyBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgCQkJCQkgICJTRUxFQ1QgPGNv bHVtbj4gRlJPTSBQRVJTT04gIisKKyAJCQkJCSAgIjxpZihjb25kKT5XSEVSRSBJRD08aWQ+PGVu ZGlmPjsiKTsKKyAJCXQuc2V0QXR0cmlidXRlKCJjb2x1bW4iLCAibmFtZSIpOworQEAgLTE2MDAs OCArMTYwMCw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlw dWJsaWMgdm9pZCB0ZXN0SUZDb25kV2l0aFBhcmVuc1RlbXBsYXRlKCkgdGhyb3dzIEV4Y2VwdGlv biB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQluZXcgU3RyaW5nVGVtcGxh dGVHcm91cCgiZHVtbXkiLCAiLiIsIEFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOwor LQkJU3RyaW5nVGVtcGxhdGUgdCA9CistCQkJbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKwkJCW5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgCQkJCSI8aWYobWFw Lih0eXBlKSk+PHR5cGU+IDxwcm9wPj08bWFwLih0eXBlKT47PGVuZGlmPiIpOworIAkJSGFzaE1h cCBtYXAgPSBuZXcgSGFzaE1hcCgpOworIAkJbWFwLnB1dCgiaW50IiwiMCIpOworQEAgLTE2MTQs OCArMTYxNCw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlw dWJsaWMgdm9pZCB0ZXN0SUZDb25kV2l0aFBhcmVuc0RvbGxhckRlbGltc1RlbXBsYXRlKCkgdGhy b3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9 CistCQkJbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKwkJCW5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgCQkJCSIkaWYobWFwLih0eXBlKSkkJHR5cGUkICRwcm9w JD0kbWFwLih0eXBlKSQ7JGVuZGlmJCIpOworIAkJSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgp OworIAkJbWFwLnB1dCgiaW50IiwiMCIpOworQEAgLTE2MjksOCArMTYyOSw4IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0ZXN0SUZCb29s ZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0K KyAJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLQkJU3RyaW5nVGVt cGxhdGUgdCA9CistCQkJbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKwkJb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKwkJCW5ldyBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgCQkJCQkgICIkaWYoYikkeCRlbmRpZiQg JGlmKCFiKSR5JGVuZGlmJCIpOworIAkJdC5zZXRBdHRyaWJ1dGUoImIiLCBuZXcgQm9vbGVhbih0 cnVlKSk7CisgCQlhc3NlcnRFcXVhbHModC50b1N0cmluZygpLCAieCAiKTsKK0BAIC0xNjQzLDgg KzE2NDMsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAg cHVibGljIHZvaWQgdGVzdE5lc3RlZElGVGVtcGxhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAg ICAgIAorICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAg bmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iLCBBbmdsZUJyYWNrZXRUZW1wbGF0 ZUxleGVyLmNsYXNzKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPQorLSAgICAgICAgICAg IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0KKysgICAgICAgICAgICBuZXcgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorICAgICAgICAgICAgICAgICAiYWNrPGlm KGEpPiIrbmV3bGluZSsKKyAgICAgICAgICAgICAgICAgImZvbyIrbmV3bGluZSsKKyAgICAgICAg ICAgICAgICAgIjxpZighYik+c3R1ZmY8ZW5kaWY+IituZXdsaW5lKworQEAgLTE2NjUsOCArMTY2 NSw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICBwdWJs aWMgdm9pZCB0ZXN0SUZDb25kaXRpb25XaXRoVGVtcGxhdGVBcHBsaWNhdGlvbigpIHRocm93cyBF eGNlcHRpb24geworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAg ICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKy0gICAgICAgIFN0 cmluZ1RlbXBsYXRlIHQgPQorLSAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwK KysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0KKysg ICAgICAgICAgICBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdy b3VwLAorICAgICAgICAgICAgICAgICAgICAgICAiJGlmKG5hbWVzOnskaXQkfSkkRmFpbCEkZW5k aWYkICRpZighbmFtZXM6eyRpdCR9KSRXb3JrcyEkZW5kaWYkIik7CisgICAgICAgICB0LnNldEF0 dHJpYnV0ZSgiYiIsIG5ldyBCb29sZWFuKHRydWUpKTsKKyAgICAgICAgIGFzc2VydEVxdWFscyh0 LnRvU3RyaW5nKCksICIgV29ya3MhIik7CitAQCAtMTY5Niw4ICsxNjk2LDggQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgIHB1YmxpYyB2b2lkIHRlc3RPYmpl Y3RQcm9wZXJ0eVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgU3RyaW5n VGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0 ZUdyb3VwKCJkdW1teSIsICIuIik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSB0ID0KKy0gICAg ICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlKAorKyAgICAgICAgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKyAgICAgICAgICAgICAgICBuZXcgb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAg ICAgIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8Yj5OYW1lOiAkcC5maXJzdE5h bWUkICRwLmxhc3ROYW1lJDwvYj48YnI+IituZXdsaW5lKworICAgICAgICAgICAgICAgICAgICAg ICAgICI8Yj5FbWFpbDogJHAuZW1haWwkPC9iPjxicj4iK25ld2xpbmUrCitAQCAtMTcxOCw4ICsx NzE4LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAg ICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICBuZXcgU3RyaW5nVGVt cGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworICAgICAgICAgZ3JvdXAuZGVmaW5lVGVtcGxhdGUo ImxpbmsiLCAiPGEgaHJlZj1cIiR1cmwkXCI+PGI+JHRpdGxlJDwvYj48L2E+Iik7CistICAgICAg ICBTdHJpbmdUZW1wbGF0ZSBkdWggPQorLSAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZShn cm91cCwKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBk dWggPQorKyAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUoZ3JvdXAsCisgICAgICAgICAic3RhcnR8JHA6eyRsaW5rKHVybD1cIi9tZW1iZXIvdmll dz9JRD1cIitpdC5JRCwgdGl0bGU9aXQuZmlyc3ROYW1lKSQgJGlmKGl0LmNhbkVkaXQpJGNhbkVk aXQkZW5kaWYkfToiKworICAgICAgICAgInskaXQkPGJyPlxufSR8ZW5kIik7CisgICAgICAgICBk dWguc2V0QXR0cmlidXRlKCJwIiwgbmV3IENvbm5lY3RvcigpKTsKK0BAIC0xNzYzLDcgKzE3NjMs NyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCSI8ZWxzZT4i ICsKKyAJCSAgIjxpdC50ZXh0PiIgKworIAkJIjxlbmRpZj4iKTsKKy0JCVN0cmluZ1RlbXBsYXRl IHRyZWUgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0cmVlIik7CisrCQlvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdHJlZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRyZWUi KTsKKyAJCS8vIGJ1aWxkICggYSBiIChjIGQpIGUgKQorIAkJVHJlZSByb290ID0gbmV3IFRyZWUo ImEiKTsKKyAJCXJvb3QuYWRkQ2hpbGQobmV3IFRyZWUoImIiKSk7CitAQCAtMTc3OSw4ICsxNzc5 LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgIHB1Ymxp YyB2b2lkIHRlc3ROZXN0ZWRBbm9ueW1vdXNUZW1wbGF0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsK KyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLSAgICAgICAgU3RyaW5nVGVt cGxhdGUgdCA9CistICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAgICAg IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0KKysgICAgICAgICAg ICAgICAgbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAgICAgICAgICBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJEE6 eyIgKyBuZXdsaW5lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aT4kaXQ6eyIgKyBu ZXdsaW5lICsKK0BAIC0xNzk5LDggKzE3OTksOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAgICAgcHVibGljIHZvaWQgdGVzdEFub255bW91c1RlbXBsYXRlQWNj ZXNzVG9FbmNsb3NpbmdBdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICBT dHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1Rl bXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPQor LSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGUoCisrICAgICAgICBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisrICAgICAgICAgICAgICAgIG5ldyBv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAgICAgICAgICAg ICAgICAgICAgZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiRBOnsiICsgbmV3bGlu ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGk+JGl0OnsiICsgbmV3bGluZSArCitA QCAtMTgyMSw4ICsxODIxLDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAg ICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKy0gICAgICAgIFN0 cmluZ1RlbXBsYXRlIHQgPQorLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGUoCisr ICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisrICAg ICAgICAgICAgICAgIG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo CisgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIjx0YWJsZT4iK25ld2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICIkbmFtZXM6 ezx0cj4kaXQ6ezx0ZD4kaXQ6ezxiPiRpdCQ8L2I+fSQ8L3RkPn0kPC90cj59JCIrbmV3bGluZSAr CitAQCAtMTg0MSwxOCArMTg0MSwxOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5n VGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOwkJCisgCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgi Zm9vIiwgIiR4JCAmJiAkaXQkIik7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0KKy0JCQkJbmV3IFN0 cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHQgPQorKwkJCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAor IAkJCQkJCWdyb3VwLAorIAkJCQkJCSIkQTpmb28oeD1cImRvZ1xcXCJcXFwiXCIpJCIgLy8gJEE6 Zm9vKCJkb2dcIlwiIikkCisgCQkJCSk7CistCQlTdHJpbmdUZW1wbGF0ZSB1ID0KKy0JCQkJbmV3 IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlIHUgPQorKwkJCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KAorIAkJCQkJCWdyb3VwLAorIAkJCQkJCSIkQTpmb28oeD1cImRvZ1xcXCJnXCIpJCIgLy8gJEE6 Zm9vKHg9ImRvZ1wiZyIpJAorIAkJCQkpOworLQkJU3RyaW5nVGVtcGxhdGUgdiA9CistCQkJCW5l dyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSB2ID0KKysJCQkJbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSgKKyAJCQkJCQlncm91cCwKKyAJCQkJCQkvLyAkQTp7JGF0dHI6Zm9vKHg9Ilx7ZG9nXH1cIiIp JCBpcyBjb29sfSQKKyAJCQkJCQkiJEE6eyRpdDpmb28oeD1cIlxce2RvZ1xcfVxcXCJcIikkIGlz IGNvb2x9JCIKK0BAIC0xODcyLDcgKzE4NzIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJfQorIAorICAgICBwdWJsaWMgdm9pZCB0ZXN0RXNjYXBlc091dHNp ZGVFeHByZXNzaW9ucygpIHRocm93cyBFeGNlcHRpb24geworLSAgICAgICAgU3RyaW5nVGVtcGxh dGUgYiA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgiSXRcXCdzIG9rLi4uXFwkOyAkYTp7XFwnaGlcXCcs ICRpdCR9JCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlIGIgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKCJJdFxc J3Mgb2suLi5cXCQ7ICRhOntcXCdoaVxcJywgJGl0JH0kIik7CisgICAgICAgICBiLnNldEF0dHJp YnV0ZSgiYSIsICJUZXIiKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3RpbmcgPSJJdFxcJ3Mgb2su Li4kOyBcXCdoaVxcJywgVGVyIjsKKyAgICAgICAgIFN0cmluZyByZXN1bHQgPSBiLnRvU3RyaW5n KCk7CitAQCAtMTg4MCw3ICsxODgwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdEVsc2VDbGF1c2UoKSB0 aHJvd3MgRXhjZXB0aW9uIHsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAg ICAgICAgICAgICAgICIkaWYodGl0bGUpJCIrbmV3bGluZSArCisgICAgICAgICAgICAgICAgICJm b28iK25ld2xpbmUgKworICAgICAgICAgICAgICAgICAiJGVsc2UkIituZXdsaW5lICsKK0BAIC0x ODk3LDcgKzE4OTcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAgICAgfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0RWxzZUlmQ2xhdXNlKCkgdGhyb3dzIEV4Y2Vw dGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGlmKHgpJCIrbmV3bGluZSArCisg CQkJCSJmb28iK25ld2xpbmUgKworIAkJCQkiJGVsc2VpZih5KSQiK25ld2xpbmUgKworQEAgLTE5 MTAsNyArMTkxMCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcwor IAl9CisgCisgICAgIHB1YmxpYyB2b2lkIHRlc3RFbHNlSWZDbGF1c2VBbmdsZUJyYWNrZXRzKCkg dGhyb3dzIEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmlu Z1RlbXBsYXRlKAorKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBs YXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICAiPGlmKHgpPiIrbmV3bGluZSArCisgICAgICAgICAgICAgICAgICJmb28i K25ld2xpbmUgKworICAgICAgICAgICAgICAgICAiPGVsc2VpZih5KT4iK25ld2xpbmUgKworQEAg LTE5MjQsNyArMTkyNCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIHRlc3RFbHNlSWZDbGF1c2UyKCkgdGhyb3dz IEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAor KwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGlmKHgpJCIrbmV3bGlu ZSArCisgCQkJCSJmb28iK25ld2xpbmUgKworIAkJCQkiJGVsc2VpZih5KSQiK25ld2xpbmUgKwor QEAgLTE5MzksNyArMTkzOSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RFbHNlSWZDbGF1c2VBbmRFbHNlKCkgdGhy b3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRl KAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGlmKHgpJCIrbmV3 bGluZSArCisgCQkJCSJmb28iK25ld2xpbmUgKworIAkJCQkiJGVsc2VpZih5KSQiK25ld2xpbmUg KworQEAgLTE5NTUsNyArMTk1NSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUg ZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRJRigpIHRocm93cyBFeGNl cHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRpZih0aXRsZSkkIituZXdsaW5l ICsKKyAJCQkJImZvbyIrbmV3bGluZSArCisgCQkJCSIkZWxzZSQiK25ld2xpbmUgKworQEAgLTE5 ODMsOCArMTk4Myw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcwor IAlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRNdWx0aUxpbmVJRigpIHRocm93cyBFeGNlcHRpb24g eworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0 ZUdyb3VwKCJ0ZXN0Iik7CistCQlTdHJpbmdUZW1wbGF0ZSBtYWluID0gbmV3IFN0cmluZ1RlbXBs YXRlKGdyb3VwLCAiJHN1YiQiKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN1YiA9IG5ldyBTdHJpbmdU ZW1wbGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSBtYWluID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91 cCwgIiRzdWIkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg c3ViID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwK KyAJCQkJImJlZ2luIiArIG5ld2xpbmUgKworIAkJCQkiJGlmKGZvbykkIiArIG5ld2xpbmUgKwor IAkJCQkiJGZvbyQiICsgbmV3bGluZSArCitAQCAtMTk5OSw3ICsxOTk5LDcgQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJInN0dWZmIjsKKyAJCWFzc2VydEVx dWFscyhleHBlY3RpbmcsIG1haW4udG9TdHJpbmcoKSk7CisgCistCQltYWluID0gbmV3IFN0cmlu Z1RlbXBsYXRlKGdyb3VwLCAiJHN1YiQiKTsKKysJCW1haW4gPSBuZXcgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJHN1YiQiKTsKKyAJCXN1YiA9IHN1Yi5n ZXRJbnN0YW5jZU9mKCk7CisgCQltYWluLnNldEF0dHJpYnV0ZSgic3ViIiwgc3ViKTsKKyAJCWV4 cGVjdGluZyA9CitAQCAtMjAyMSw3ICsyMDIxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3Vw KG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVmYXVsdFRlbXBsYXRl TGV4ZXIuY2xhc3MsCisgCQkJCQkJCQkJCWVycm9ycyk7CistICAgICAgICBTdHJpbmdUZW1wbGF0 ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibGlzdCIpOworKyAgICAgICAgb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJsaXN0 Iik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgibmFtZXMiLCAiVGVyZW5jZSIpOworICAgICAg ICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIkppbSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1 dGUoIm5hbWVzIiwgIlNyaXJhbSIpOworQEAgLTIwNDUsNyArMjA0NSw3IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICBuZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCURl ZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzLAorIAkJCQkJCQkJCQllcnJvcnMpOworLSAgICAgICAg U3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImxpc3QiKTsKKysgICAgICAg IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5z dGFuY2VPZigibGlzdCIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRlcmVu Y2VcbmlzXG5hXG5tYW5pYWMiKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJuYW1lcyIsICJK aW0iKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJuYW1lcyIsICJTcmlyYW1cbmlzXG5jb29s Iik7CitAQCAtMjA3NCw3ICsyMDc0LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIo dGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVmYXVsdFRlbXBsYXRlTGV4ZXIuY2xhc3MsCisgCQkJ CQkJCQkJCWVycm9ycyk7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigibGlzdCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQg PSBncm91cC5nZXRJbnN0YW5jZU9mKCJsaXN0Iik7CisgCQl0LnNldEF0dHJpYnV0ZSgibmFtZXMi LCAiVGVyZW5jZVxuXG5pcyBhIG1hbmlhYyIpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9CisgCQkJ CSIgIFRlcmVuY2UiK25ld2xpbmUrCitAQCAtMjA5OCw3ICsyMDk4LDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdU ZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwKKyAJCQkJCQkJCQkJRGVm YXVsdFRlbXBsYXRlTGV4ZXIuY2xhc3MsCisgCQkJCQkJCQkJCWVycm9ycyk7CistICAgICAgICBT dHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibGlzdCIpOworKyAgICAgICAg b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJsaXN0Iik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgibmFtZXMiLCAiVGVyZW5j ZSIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIkppbSIpOworICAgICAgICAg dC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlNyaXJhbSIpOworQEAgLTIxMzMsMTcgKzIxMzMsMTcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAg ICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSwK KyAJCQkJCQkJCQkJRGVmYXVsdFRlbXBsYXRlTGV4ZXIuY2xhc3MsCisgCQkJCQkJCQkJCWVycm9y cyk7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0 aG9kIik7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg dCA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworICAgICAgICAgdC5zZXRBdHRyaWJ1 dGUoIm5hbWUiLCAiZm9vIik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzMSA9IGdyb3VwLmdl dEluc3RhbmNlT2YoImFzc2lnbiIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIHMxID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYXNzaWduIik7CisgICAg ICAgICBzMS5zZXRBdHRyaWJ1dGUoImxocyIsICJ4Iik7CisgICAgICAgICBzMS5zZXRBdHRyaWJ1 dGUoImV4cHIiLCAiMCIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgczIgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJpZnN0YXQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzMiA9IGdyb3VwLmdldEluc3RhbmNlT2YoImlmc3RhdCIpOworICAgICAg ICAgczIuc2V0QXR0cmlidXRlKCJleHByIiwgIng+MCIpOworLSAgICAgICAgU3RyaW5nVGVtcGxh dGUgczJhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYXNzaWduIik7CisrICAgICAgICBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgczJhID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigiYXNzaWduIik7CisgICAgICAgICBzMmEuc2V0QXR0cmlidXRlKCJsaHMiLCAieSIpOworICAg ICAgICAgczJhLnNldEF0dHJpYnV0ZSgiZXhwciIsICJ4K3kiKTsKKy0gICAgICAgIFN0cmluZ1Rl bXBsYXRlIHMyYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoImFzc2lnbiIpOworKyAgICAgICAgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHMyYiA9IGdyb3VwLmdldEluc3Rh bmNlT2YoImFzc2lnbiIpOworICAgICAgICAgczJiLnNldEF0dHJpYnV0ZSgibGhzIiwgInoiKTsK KyAgICAgICAgIHMyYi5zZXRBdHRyaWJ1dGUoImV4cHIiLCAiNCIpOworICAgICAgICAgczIuc2V0 QXR0cmlidXRlKCJzdGF0cyIsIHMyYSk7CitAQCAtMjE5MSwxNSArMjE5MSwxNSBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAg Z3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOworIAkJZ3JvdXAu ZGVmaW5lVGVtcGxhdGUoImJvbGQiLCAiPGI+JHgkPC9iPiIpOworLQkJU3RyaW5nVGVtcGxhdGUg bmFtZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lOmJvbGQoeD1uYW1lKSQiKTsK KysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBuYW1lID0gbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lOmJvbGQo eD1uYW1lKSQiKTsKKyAJCW5hbWUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlcmVuY2UiKTsKKyAJ CW5hbWUud3JpdGUodyk7CisgCQlhc3NlcnRFcXVhbHMoIjxiPlRlcmVuY2U8L2I+IiwgYnVmLnRv U3RyaW5nKCkpOworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RBcHBseUFub255bW91c1RlbXBs YXRlVG9NYXBBbmRTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0 ID0KKy0JCQkJbmV3IFN0cmluZ1RlbXBsYXRlKCIkaXRlbXM6ezxsaT4kaXQkPC9saT59JCIpOwor KwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0KKysJCQkJbmV3 IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgiJGl0ZW1zOns8bGk+JGl0 JDwvbGk+fSQiKTsKKyAJCU1hcCBtID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKKyAJCW0ucHV0KCJh IiwgIjEiKTsKKyAJCW0ucHV0KCJiIiwgIjIiKTsKK0BAIC0yMjE5LDggKzIyMTksOCBAQCBwdWJs aWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9p ZCB0ZXN0RHVtcE1hcEFuZFNldCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxh dGUgc3QgPQorLQkJCQluZXcgU3RyaW5nVGVtcGxhdGUoIiRpdGVtczsgc2VwYXJhdG9yPVwiLFwi JCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0KKysJ CQkJbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgiJGl0ZW1zOyBz ZXBhcmF0b3I9XCIsXCIkIik7CisgCQlNYXAgbSA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CisgCQlt LnB1dCgiYSIsICIxIik7CisgCQltLnB1dCgiYiIsICIyIik7CitAQCAtMjI0NywxMyArMjI0Nywx MyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlw dWJsaWMgdm9pZCB0ZXN0QXBwbHlBbm9ueW1vdXNUZW1wbGF0ZVRvQXJyYXlBbmRNYXBQcm9wZXJ0 eSgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPQorLQkJCQluZXcg U3RyaW5nVGVtcGxhdGUoIiR4LnZhbHVlczp7PGxpPiRpdCQ8L2xpPn0kIik7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPQorKwkJCQluZXcgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKCIkeC52YWx1ZXM6ezxsaT4kaXQkPC9saT59 JCIpOworIAkJc3Quc2V0QXR0cmlidXRlKCJ4IiwgbmV3IENvbm5lY3RvcjMoKSk7CisgCQlTdHJp bmcgZXhwZWN0aW5nID0gIjxsaT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xpPiI7CisgCQlhc3Nl cnRFcXVhbHMoZXhwZWN0aW5nLCBzdC50b1N0cmluZygpKTsKKyAKKy0JCXN0ID0gbmV3IFN0cmlu Z1RlbXBsYXRlKCIkeC5zdHVmZjp7PGxpPiRpdCQ8L2xpPn0kIik7CisrCQlzdCA9IG5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoIiR4LnN0dWZmOns8bGk+JGl0JDwv bGk+fSQiKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgieCIsIG5ldyBDb25uZWN0b3IzKCkpOworIAkJ ZXhwZWN0aW5nID0gIjxsaT4xPC9saT48bGk+MjwvbGk+IjsKKyAJCWFzc2VydEVxdWFscyhleHBl Y3RpbmcsIHN0LnRvU3RyaW5nKCkpOworQEAgLTIyNjksNyArMjI2OSw3IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgZ3JvdXAuZGVmaW5lVGVtcGxh dGUoInBhZ2UiLCAiJGZvbnQoKSQ6dGV4dCIpOworICAgICAgICAgZ3JvdXAuZGVmaW5lVGVtcGxh dGUoImZvbnQiLCAiSGVsdmV0aWNhIik7CisgICAgICAgICBzdWJHcm91cC5kZWZpbmVUZW1wbGF0 ZSgiZm9udCIsICIkc3VwZXIuZm9udCgpJCBhbmQgVGltZXMiKTsKKy0gICAgICAgIFN0cmluZ1Rl bXBsYXRlIHN0ID0gc3ViR3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworKyAgICAgICAgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gc3ViR3JvdXAuZ2V0SW5z dGFuY2VPZigicGFnZSIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9CisgICAgICAgICAg ICAgICAgICJIZWx2ZXRpY2EgYW5kIFRpbWVzOnRleHQiOworICAgICAgICAgYXNzZXJ0RXF1YWxz KGV4cGVjdGluZywgc3QudG9TdHJpbmcoKSk7CitAQCAtMjI4NCw3ICsyMjg0LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBncm91cC5kZWZpbmVU ZW1wbGF0ZSgiYm9sZCIsICI8Yj4kaXQkPC9iPiIpOworICAgICAgICAgc3ViR3JvdXAuZGVmaW5l VGVtcGxhdGUoImJvbGQiLCAiPHN0cm9uZz4kaXQkPC9zdHJvbmc+Iik7CisgICAgICAgICBzdWJH cm91cC5kZWZpbmVUZW1wbGF0ZSgicGFnZSIsICIkbmFtZTpzdXBlci5ib2xkKCkkIik7CistICAg ICAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9IHN1Ykdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsK KysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IHN1 Ykdyb3VwLmdldEluc3RhbmNlT2YoInBhZ2UiKTsKKyAgICAgICAgIHN0LnNldEF0dHJpYnV0ZSgi bmFtZSIsICJUZXIiKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3RpbmcgPQorICAgICAgICAgICAg ICAgICAiPGI+VGVyPC9iPiI7CitAQCAtMjMwOCw3ICsyMzA4LDcgQEAgcHVibGljIGNsYXNzIFRl c3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAvLyBvZiBwYWdlIGluIGdyb3VwIG5v dCBzdWJHcm91cCwgaG93ZXZlciwgSSB3aWxsIGdldAorICAgICAgICAgLy8gYW4gZXJyb3IgYXMg c3VwZXJHcm91cCBpcyBudWxsIGZvciBncm91cCAiZ3JvdXAiLgorICAgICAgICAgZ3JvdXAuZGVm aW5lVGVtcGxhdGUoInBhZ2UiLCAiJG5hbWU6c3VwZXIuYm9sZCgpJCIpOworLSAgICAgICAgU3Ry aW5nVGVtcGxhdGUgc3QgPSBzdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJwYWdlIik7CisrICAgICAg ICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBzdWJHcm91cC5n ZXRJbnN0YW5jZU9mKCJwYWdlIik7CisgICAgICAgICBzdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAi VGVyIik7CisgCQlTdHJpbmcgZXJyb3IgPSBudWxsOworIAkJdHJ5IHsKK0BAIC0yMzM0LDcgKzIz MzQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAg IGdyb3VwLmRlZmluZVRlbXBsYXRlKCJib2xkIiwgIjxiPiRpdCQ8L2I+Iik7CisgICAgICAgICBn cm91cC5kZWZpbmVUZW1wbGF0ZSgicGFnZSIsICIkbmFtZTpib2xkKCkkIik7CisgICAgICAgICBz dWJHcm91cC5kZWZpbmVUZW1wbGF0ZSgiYm9sZCIsICI8c3Ryb25nPiRpdCQ8L3N0cm9uZz4iKTsK Ky0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHN0ID0gc3ViR3JvdXAuZ2V0SW5zdGFuY2VPZigicGFn ZSIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0 ID0gc3ViR3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworICAgICAgICAgc3Quc2V0QXR0cmli dXRlKCJuYW1lIiwgIlRlciIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9CisgICAgICAg ICAgICAgICAgICI8c3Ryb25nPlRlcjwvc3Ryb25nPiI7CitAQCAtMjM1MywxMCArMjM1MywxMCBA QCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAg ICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpLAor IAkJCQkJCQkJCQlEZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcywKKyAJCQkJCQkJCQkJZXJyb3Jz KTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIG91dHB1dFNUID0gZ3JvdXAuZ2V0SW5zdGFuY2VP Zigib3V0cHV0Iik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBib2R5U1QxID0gZ3JvdXAuZ2V0 SW5zdGFuY2VPZigibXlib2R5Iik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBib2R5U1QyID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigibXlib2R5Iik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBi b2R5U1QzID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibXlib2R5Iik7CisrICAgICAgICBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgb3V0cHV0U1QgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJvdXRwdXQiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBib2R5U1QxID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibXlib2R5Iik7CisrICAg ICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYm9keVNUMiA9IGdy b3VwLmdldEluc3RhbmNlT2YoIm15Ym9keSIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIGJvZHlTVDMgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJteWJv ZHkiKTsKKyAgICAgICAgIG91dHB1dFNULnNldEF0dHJpYnV0ZSgiaXRlbXMiLCBib2R5U1QxKTsK KyAgICAgICAgIG91dHB1dFNULnNldEF0dHJpYnV0ZSgiaXRlbXMiLCBib2R5U1QyKTsKKyAgICAg ICAgIG91dHB1dFNULnNldEF0dHJpYnV0ZSgiaXRlbXMiLCBib2R5U1QzKTsKK0BAIC0yMzczLDcg KzIzNzMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAg ICAgICAgICAgICAgOworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAg ICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVt cGxhdGVzKSk7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigiYmxvY2siKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYmxvY2siKTsKKyAgICAgICAgIGIuc2V0QXR0 cmlidXRlKCJzdGF0cyIsIGdyb3VwLmdldEluc3RhbmNlT2YoImlmc3RhdCIpKTsKKyAgICAgICAg IGIuc2V0QXR0cmlidXRlKCJzdGF0cyIsIGdyb3VwLmdldEluc3RhbmNlT2YoImlmc3RhdCIpKTsK KyAgICAgICAgIFN0cmluZyBleHBlY3RpbmcgPSAiSUYgdHJ1ZSB0aGVuIElGIHRydWUgdGhlbiAi OworQEAgLTIzOTEsMTIgKzIzOTEsMTIgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgICJibG9jayhzdGF0cykgOjo9IFwiPHN0YXRzPlwi IiArCisgICAgICAgICAgICAgICAgICJpZnN0YXQoc3RhdHMpIDo6PSBcIklGIHRydWUgdGhlbiA8 c3RhdHM+XCIiK25ld2xpbmUKKyAgICAgICAgICAgICAgICAgOworLSAgICAgICAgU3RyaW5nVGVt cGxhdGUuc2V0TGludE1vZGUodHJ1ZSk7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZS5yZXNldFRl bXBsYXRlQ291bnRlcigpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlLnNldExpbnRNb2RlKHRydWUpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlLnJlc2V0VGVtcGxhdGVDb3VudGVyKCk7CisgICAgICAgICBT dHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1Rl bXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0gICAgICAgIFN0cmlu Z1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJibG9jayIpOworLSAgICAgICAgU3Ry aW5nVGVtcGxhdGUgaWZzdGF0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiaWZzdGF0Iik7CisrICAg ICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdl dEluc3RhbmNlT2YoImJsb2NrIik7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgaWZzdGF0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiaWZzdGF0Iik7Cisg ICAgICAgICBiLnNldEF0dHJpYnV0ZSgic3RhdHMiLCBpZnN0YXQpOyAvLyBibG9jayBoYXMgaWYg c3RhdAorICAgICAgICAgaWZzdGF0LnNldEF0dHJpYnV0ZSgic3RhdHMiLCBiKTsgLy8gYnV0IG1h a2UgImlmIiBjb250YWluIGJsb2NrCisgICAgICAgICBTdHJpbmcgZXhwZWN0aW5nRXJyb3IgPQor QEAgLTI0MTgsNyArMjQxOCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworICAgICAgICAgfQorICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oImVycm9ycz0i K2Vycm9ycysiJyIpOworICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oImV4cGVjdGluZz0i K2V4cGVjdGluZ0Vycm9yKyInIik7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZS5zZXRMaW50TW9k ZShmYWxzZSk7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUuc2V0TGludE1vZGUoZmFsc2UpOworICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGluZ0Vy cm9yLCBlcnJvcnMpOworICAgICB9CisgCitAQCAtMjQzMyw3ICsyNDMzLDcgQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgIDsKKyAgICAg ICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3Ry aW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLSAgICAgICAg U3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoImJsb2NrIik7CisrICAgICAg ICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldElu c3RhbmNlT2YoImJsb2NrIik7CisgICAgICAgICBiLnNldEF0dHJpYnV0ZSgic3RhdHMiLCBncm91 cC5nZXRJbnN0YW5jZU9mKCJibG9jayIpKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3RpbmcgPSJ7 e319IjsKKyAgICAgICAgIFN0cmluZyByZXN1bHQgPSBiLnRvU3RyaW5nKCk7CitAQCAtMjQ1MCw3 ICsyNDUwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAg ICAgICAgICAgICAgIDsKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAg ICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRl bXBsYXRlcykpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNl T2YoIm90aGVyIik7ICAvLyBhbGlhcyBmb3IgcGFnZQorKyAgICAgICAgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJvdGhlciIp OyAgLy8gYWxpYXMgZm9yIHBhZ2UKKyAgICAgICAgIGIuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRl ciIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9Im5hbWUgaXMgVGVyIjsKKyAgICAgICAg IFN0cmluZyByZXN1bHQgPSBiLnRvU3RyaW5nKCk7CitAQCAtMjQ3Myw5ICsyNDczLDkgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICAgICAgICAgIDsK KyAgICAgICAgIFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLSAg ICAgICAgU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIkNmaWxlIik7Cist ICAgICAgICBTdHJpbmdUZW1wbGF0ZSBmMSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImZ1bmMiKTsK Ky0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGYyID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZnVuYyIp OworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJDZmlsZSIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIGYxID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZnVuYyIpOwor KyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGYyID0gZ3Jv dXAuZ2V0SW5zdGFuY2VPZigiZnVuYyIpOworICAgICAgICAgZjEuc2V0QXR0cmlidXRlKCJuYW1l IiwgImYiKTsKKyAgICAgICAgIGYxLnNldEF0dHJpYnV0ZSgiYXJncyIsICIiKTsKKyAgICAgICAg IGYxLnNldEF0dHJpYnV0ZSgiYm9keSIsICJpPTE7Iik7CitAQCAtMjUxMiw3ICsyNTEyLDcgQEAg cHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmlu Z1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcg U3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgZiA9IGdyb3VwLmdl dEluc3RhbmNlT2YoImZpbGUiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBmID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZmlsZSIpOworIAkJZi5zZXRBdHRyaWJ1 dGUoInZhcmlhYmxlcy57ZGVjbCxmb3JtYXR9IiwgbmV3IERlY2woImkiLCJpbnQiKSwgImludGRl Y2wiKTsKKyAJCWYuc2V0QXR0cmlidXRlKCJ2YXJpYWJsZXMue2RlY2wsZm9ybWF0fSIsIG5ldyBE ZWNsKCJhIiwiaW50LWFycmF5IiksICJpbnRhcnJheSIpOworIAkJLy9TeXN0ZW0ub3V0LnByaW50 bG4oImY9JyIrZisiJyIpOworQEAgLTI1MzMsNyArMjUzMyw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1w bGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGYgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0ZXN0 Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZiA9IGdyb3Vw LmdldEluc3RhbmNlT2YoInRlc3QiKTsKKyAJCWYuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZpcnN0 Iik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gInRoZSBmaXJzdCI7CisgCQlhc3NlcnRFcXVhbHMo ZXhwZWN0aW5nLCBmLnRvU3RyaW5nKCkpOworQEAgLTI1NTEsNyArMjU1MSw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0 ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1Jl YWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGYgPSBncm91cC5nZXRJbnN0YW5j ZU9mKCJ0ZXN0Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg ZiA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKyAJCWYuc2V0QXR0cmlidXRlKCJuYW1l IiwgImZpcnN0Iik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gInRoZSBmaXJzdDogZm9vIjsKKyAJ CWFzc2VydEVxdWFscyhmLnRvU3RyaW5nKCksIGV4cGVjdGluZyk7CitAQCAtMjU2OCw3ICsyNTY4 LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgZiA9IGdy b3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBmID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVzdCIpOworIAkJZi5zZXRB dHRyaWJ1dGUoIm5hbWVzIiwgIm1lIik7CisgCQlmLnNldEF0dHJpYnV0ZSgibmFtZXMiLCAieW91 Iik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIiI7CitAQCAtMjU4NywxNCArMjU4NywxNCBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQkJOworIAkJU3RyaW5n VGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBT dHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1wbGF0ZSBmID0gZ3JvdXAuZ2V0 SW5zdGFuY2VPZigidGVzdCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIGYgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0ZXN0Iik7CisgCQkvL2Yuc2V0QXR0cmli dXRlKCJuYW1lIiwgImZpcnN0Iik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIiI7CisgCQlhc3Nl cnRFcXVhbHMoZXhwZWN0aW5nLCBmLnRvU3RyaW5nKCkpOworIAl9CisgCisgCXB1YmxpYyB2b2lk IHRlc3RIYXNoTWFwUHJvcGVydHlGZXRjaCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5n VGVtcGxhdGUgYSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgiJHN0dWZmLnByb3AkIik7CisrCQlvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYSA9IG5ldyBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoIiRzdHVmZi5wcm9wJCIpOworIAkJSGFzaE1hcCBt YXAgPSBuZXcgSGFzaE1hcCgpOworIAkJYS5zZXRBdHRyaWJ1dGUoInN0dWZmIiwgbWFwKTsKKyAJ CW1hcC5wdXQoInByb3AiLCAiVGVyZW5jZSIpOworQEAgLTI2MDUsMTEgKzI2MDUsMTEgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZv aWQgdGVzdEhhc2hNYXBQcm9wZXJ0eUZldGNoRW1iZWRkZWRTdHJpbmdUZW1wbGF0ZSgpIHRocm93 cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgYSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgi JHN0dWZmLnByb3AkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgYSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoIiRzdHVm Zi5wcm9wJCIpOworIAkJSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOworIAkJYS5zZXRBdHRy aWJ1dGUoInN0dWZmIiwgbWFwKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJ0aXRsZSIsICJTVCByb2Nr cyIpOworLQkJbWFwLnB1dCgicHJvcCIsIG5ldyBTdHJpbmdUZW1wbGF0ZSgiZW1iZWRkZWQgcmVm ZXJzIHRvICR0aXRsZSQiKSk7CisrCQltYXAucHV0KCJwcm9wIiwgbmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgiZW1iZWRkZWQgcmVmZXJzIHRvICR0aXRsZSQiKSk7 CisgCQlTdHJpbmcgcmVzdWx0cyA9IGEudG9TdHJpbmcoKTsKKyAJCS8vU3lzdGVtLm91dC5wcmlu dGxuKHJlc3VsdHMpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJlbWJlZGRlZCByZWZlcnMgdG8g U1Qgcm9ja3MiOworQEAgLTI2MTcsMTQgKzI2MTcsMTQgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJp bmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkQ29t bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gbmV3IFN0 cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHN0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJ IkZvbyAkISBpZ25vcmUgISRiYXIiICtuZXdsaW5lCisgCQkJCSk7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0iRm9vIGJhciIrbmV3bGluZTsKKyAJCVN0cmluZyByZXN1bHQgPSBzdC50b1N0cmluZygp OworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKKyAKKy0JCXN0ID0gbmV3IFN0 cmluZ1RlbXBsYXRlKAorKwkJc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlKAorIAkJCQkiRm9vICQhIGlnbm9yZSIgK25ld2xpbmUrCisgCQkJCSIgYW5kIGEg bGluZSBicmVhayEkIiArbmV3bGluZSsKKyAJCQkJImJhciIgK25ld2xpbmUKK0BAIC0yNjMzLDcg KzI2MzMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCXJl c3VsdCA9IHN0LnRvU3RyaW5nKCk7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCByZXN1bHQp OworIAorLQkJc3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlzdCA9IG5ldyBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkISBzdGFydCBvZiBsaW5lICQg YW5kICQhIGljayIgK25ld2xpbmUrCisgCQkJCSIhJGJvbyIrbmV3bGluZQorIAkJCQkpOworQEAg LTI2NDEsNyArMjY0MSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAkJcmVzdWx0ID0gc3QudG9TdHJpbmcoKTsKKyAJCWFzc2VydEVxdWFscyhleHBlY3Rpbmcs IHJlc3VsdCk7CisgCistCQlzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCXN0ID0gbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkiJCEgc3RhcnQgb2Yg bGluZSAhJCIgK25ld2xpbmUrCisgCQkJIiQhIGFub3RoZXIgdG8gaWdub3JlICEkIiArbmV3bGlu ZSsKKyAJCQkiJCEgaWNrIiArbmV3bGluZSsKK0BAIC0yNjUxLDcgKzI2NTEsNyBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCXJlc3VsdCA9IHN0LnRvU3RyaW5n KCk7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCByZXN1bHQpOworIAorLQkJc3QgPSBuZXcg U3RyaW5nVGVtcGxhdGUoCisrCQlzdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUoCisgCQkJIiQhIGJhY2sgISQkISB0byBiYWNrICEkIiArbmV3bGluZSsgLy8g Y2FuJ3QgZGV0ZWN0OyBsZWF2ZXMgXG4KKyAJCQkiJCEgaWNrIiArbmV3bGluZSsKKyAJCQkiISRi b28iK25ld2xpbmUKK0BAIC0yNjYyLDcgKzI2NjIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRDb21t ZW50c0FuZ2xlQnJhY2tldGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0 ZSBzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUoCisgCQkJCSJGb28gPCEgaWdub3JlICE+YmFyIiArbmV3bGluZSwKKyAJCQkJQW5nbGVC cmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcworIAkJCQkpOworQEAgLTI2NzAsNyArMjY3MCw3IEBA IHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nIHJlc3Vs dCA9IHN0LnRvU3RyaW5nKCk7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCByZXN1bHQpOwor IAorLQkJc3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlzdCA9IG5ldyBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSJGb28gPCEgaWdub3JlIiArbmV3bGlu ZSsKKyAJCQkJIiBhbmQgYSBsaW5lIGJyZWFrIT4iICtuZXdsaW5lKworIAkJCQkiYmFyIiArbmV3 bGluZSwKK0BAIC0yNjgwLDcgKzI2ODAsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAJCXJlc3VsdCA9IHN0LnRvU3RyaW5nKCk7CisgCQlhc3NlcnRFcXVhbHMo ZXhwZWN0aW5nLCByZXN1bHQpOworIAorLQkJc3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlz dCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSI8 ISBzdGFydCBvZiBsaW5lICQgYW5kIDwhIGljayIgK25ld2xpbmUrCisgCQkJCSIhPmJvbyIrbmV3 bGluZSwKKyAJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcworQEAgLTI2ODksNyAr MjY4OSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJcmVz dWx0ID0gc3QudG9TdHJpbmcoKTsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7 CisgCistCQlzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCXN0ID0gbmV3IG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkiPCEgc3RhcnQgb2YgbGluZSAhPiIg KworIAkJCSI8ISBhbm90aGVyIHRvIGlnbm9yZSAhPiIgKworIAkJCSI8ISBpY2siICtuZXdsaW5l KworQEAgLTI3MDEsNyArMjcwMSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUg ZXh0ZW5kcworIAkJLy9TeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKKyAJCWFzc2VydEVxdWFs cyhleHBlY3RpbmcsIHJlc3VsdCk7CisgCistCQlzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJ CXN0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQki PCEgYmFjayAhPjwhIHRvIGJhY2sgIT4iICtuZXdsaW5lKyAvLyBjYW4ndCBkZXRlY3Q7IGxlYXZl cyBcbgorIAkJCSI8ISBpY2siICtuZXdsaW5lKworIAkJCSIhPmJvbyIrbmV3bGluZSwKK0BAIC0y NzEzLDcgKzI3MTMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJfQorIAorICAgICBwdWJsaWMgdm9pZCB0ZXN0TGluZUJyZWFrKCkgdGhyb3dzIEV4Y2VwdGlv biB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysg ICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAgICAgICAgICAg ICJGb28gPFxcXFw+IituZXdsaW5lKworICAgICAgICAgICAgICAgICAiICBcdCAgYmFyIiArbmV3 bGluZSwKKyAgICAgICAgICAgICAgICAgQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcwor QEAgLTI3MjYsNyArMjcyNiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIHRlc3RMaW5lQnJlYWsyKCkgdGhyb3dz IEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdUZW1w bGF0ZSgKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBz dCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAg ICAgICAgICAgICJGb28gPFxcXFw+ICAgICAgICIrbmV3bGluZSsKKyAgICAgICAgICAgICAgICAg IiAgXHQgIGJhciIgK25ld2xpbmUsCisgICAgICAgICAgICAgICAgIEFuZ2xlQnJhY2tldFRlbXBs YXRlTGV4ZXIuY2xhc3MKK0BAIC0yNzM5LDcgKzI3MzksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0 cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgfQorIAorICAgICBwdWJsaWMgdm9pZCB0ZXN0TGlu ZUJyZWFrTm9XaGl0ZVNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdU ZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAgICAgIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICJGb28gPFxcXFw+IituZXdsaW5l KworICAgICAgICAgICAgICAgICAiYmFyIiArbmV3bGluZSwKKyAgICAgICAgICAgICAgICAgQW5n bGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcworQEAgLTI3NTIsNyArMjc1Miw3IEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICB9CisgCisgICAgIHB1Ymxp YyB2b2lkIHRlc3RMaW5lQnJlYWtEb2xsYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0gICAgICAg IFN0cmluZ1RlbXBsYXRlIHN0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKyAgICAgICAgb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gbmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgIkZvbyAkXFxcXCQi K25ld2xpbmUrCisgICAgICAgICAgICAgICAgICIgIFx0ICBiYXIiICtuZXdsaW5lLAorICAgICAg ICAgICAgICAgICBEZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcworQEAgLTI3NjUsNyArMjc2NSw3 IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICB9CisgCisg ICAgIHB1YmxpYyB2b2lkIHRlc3RMaW5lQnJlYWtEb2xsYXIyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7 CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAg ICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICJG b28gJFxcXFwkICAgICAgICAgICIrbmV3bGluZSsKKyAgICAgICAgICAgICAgICAgIiAgXHQgIGJh ciIgK25ld2xpbmUsCisgICAgICAgICAgICAgICAgIERlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNz CitAQCAtMjc3OCw3ICsyNzc4LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBl eHRlbmRzCisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdExpbmVCcmVha05vV2hpdGVT cGFjZURvbGxhcigpIHRocm93cyBFeGNlcHRpb24geworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUg c3QgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAiRm9vICRcXFxcJCIrbmV3bGluZSsKKyAgICAg ICAgICAgICAgICAgImJhciIgK25ld2xpbmUsCisgICAgICAgICAgICAgICAgIERlZmF1bHRUZW1w bGF0ZUxleGVyLmNsYXNzCitAQCAtMjc5MSw3ICsyNzkxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgIH0KKyAKKyAJcHVibGljIHZvaWQgdGVzdENoYXJM aXRlcmFscygpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcg U3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJ CQkiRm9vIDxcXHJcXG4+PFxcbj48XFx0PiBiYXIiICtuZXdsaW5lLAorIAkJCQlBbmdsZUJyYWNr ZXRUZW1wbGF0ZUxleGVyLmNsYXNzCisgCQkJCSk7CitAQCAtMjgwMSw3ICsyODAxLDcgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmcgZXhwZWN0aW5n ID0iRm9vIFxuXG5cdCBiYXIiK25ld2xpbmU7ICAgICAvLyBleHBlY3QgXG4gaW4gb3V0cHV0Cisg CQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCByZXN1bHQpOworIAorLQkJc3QgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrCQlzdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUoCisgCQkJCSJGb28gJFxcbiQkXFx0JCBiYXIiICtuZXdsaW5lKTsKKyAJCXN3ID0gbmV3 IFN0cmluZ1dyaXRlcigpOworIAkJc3Qud3JpdGUobmV3IEF1dG9JbmRlbnRXcml0ZXIoc3csIlxu IikpOyAvLyBmb3JjZSBcbiBhcyBuZXdsaW5lCitAQCAtMjgwOSw3ICsyODA5LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlyZXN1bHQgPSBzdy50b1N0cmlu ZygpOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKKyAKKy0JCXN0ID0gbmV3 IFN0cmluZ1RlbXBsYXRlKAorKwkJc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlKAorIAkJCQkiRm9vJFxcICRiYXIkXFxuJCIpOworIAkJc3cgPSBuZXcgU3Ry aW5nV3JpdGVyKCk7CisgCQlzdC53cml0ZShuZXcgQXV0b0luZGVudFdyaXRlcihzdywiXG4iKSk7 IC8vIGZvcmNlIFxuIGFzIG5ld2xpbmUKK0BAIC0yODE5LDcgKzI4MTksNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0 TmV3bGluZU5vcm1hbGl6YXRpb25JblRlbXBsYXRlU3RyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7 CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSJGb29cclxuIisKKyAJCQkJIkJhclxuIiwK KyAJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcworQEAgLTI4MzIsNyArMjgzMiw3 IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1 YmxpYyB2b2lkIHRlc3ROZXdsaW5lTm9ybWFsaXphdGlvbkluVGVtcGxhdGVTdHJpbmdQQygpIHRo cm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcgU3RyaW5nVGVtcGxh dGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcg b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiRm9vXHJcbiIr CisgCQkJCSJCYXJcbiIsCisgCQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MKK0BA IC0yODQ1LDcgKzI4NDUsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0TmV3bGluZU5vcm1hbGl6YXRpb25JbkF0dHJp YnV0ZSgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBuZXcgU3Ry aW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg c3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQki Rm9vXHJcbiIrCisgCQkJCSI8bmFtZT5cbiIsCisgCQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4 ZXIuY2xhc3MKK0BAIC0yODU5LDcgKzI4NTksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0VW5pY29kZUxpdGVyYWxz KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IG5ldyBTdHJpbmdU ZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSJGb28g PFxcdUZFQTVcXG5cXHUwMEMyPiBiYXIiICtuZXdsaW5lLAorIAkJCQlBbmdsZUJyYWNrZXRUZW1w bGF0ZUxleGVyLmNsYXNzCisgCQkJCSk7CitAQCAtMjg2NywxMyArMjg2NywxMyBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZyByZXN1bHQgPSBzdC50 b1N0cmluZygpOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKKyAKKy0JCXN0 ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJc3QgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiRm9vICRcXHVGRUE1XFxuXFx1MDBDMiQgYmFyIiAr bmV3bGluZSk7CisgCQlleHBlY3RpbmcgPSJGb28gXHVmZWE1IituZXdsaW5lKyJcdTAwQzIgYmFy IituZXdsaW5lOworIAkJcmVzdWx0ID0gc3QudG9TdHJpbmcoKTsKKyAJCWFzc2VydEVxdWFscyhl eHBlY3RpbmcsIHJlc3VsdCk7CisgCistCQlzdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCXN0 ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIkZv byRcXCAkYmFyJFxcbiQiKTsKKyAJCWV4cGVjdGluZyA9IkZvbyBiYXIiK25ld2xpbmU7CisgCQly ZXN1bHQgPSBzdC50b1N0cmluZygpOworQEAgLTI4ODYsNyArMjg4Niw3IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cCgidGVzdCIpOworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBF cnJvckJ1ZmZlcigpOworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLQkJU3Ry aW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIiRuYW1lczsgc2VwYXJh dG9yPVwiLFwiJCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAi JG5hbWVzOyBzZXBhcmF0b3I9XCIsXCIkIik7CisgCQl0LnNldEF0dHJpYnV0ZSgibmFtZXMiLCAi VGVyZW5jZSIpOworIAkJdC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIiIpOworIAkJdC5zZXRBdHRy aWJ1dGUoIm5hbWVzIiwgIiIpOworQEAgLTI5MDQsNyArMjkwNCw3IEBAIHB1YmxpYyBjbGFzcyBU ZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVGVt cGxhdGVHcm91cCgidGVzdCIpOworICAgICAgICAgU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVy IGVycm9ycyA9IG5ldyBFcnJvckJ1ZmZlcigpOworICAgICAgICAgZ3JvdXAuc2V0RXJyb3JMaXN0 ZW5lcihlcnJvcnMpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1w bGF0ZShncm91cCwKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91 cCwKKyAgICAgICAgICAgICAiJHVzZXJzOnskaWYoaXQub2spJCRpdC5uYW1lJCRlbmRpZiR9OyBz ZXBhcmF0b3I9XCIsXCIkIik7CisgICAgICAgICB0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUs b2t9IiwgIlRlcmVuY2UiLCBuZXcgQm9vbGVhbih0cnVlKSk7CisgICAgICAgICB0LnNldEF0dHJp YnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIlRvbSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7CitAQCAt MjkyMSw3ICsyOTIxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CisgICAg ICAgICBTdHJpbmdUZW1wbGF0ZUVycm9yTGlzdGVuZXIgZXJyb3JzID0gbmV3IEVycm9yQnVmZmVy KCk7CisgICAgICAgICBncm91cC5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CistICAgICAgICBT dHJpbmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKyAgICAgICAgb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorICAgICAgICAgICAgICIkdXNlcnM6 eyRpZihpdC5vaykkJGl0Lm5hbWUkJGVuZGlmJH07IHNlcGFyYXRvcj1cIixcIiQiKTsKKyAgICAg ICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiVGVyZW5jZSIsIG5ldyBCb29s ZWFuKHRydWUpKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAi VG9tIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKK0BAIC0yOTM4LDcgKzI5MzgsNyBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAgbmV3IFN0 cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAgICAgICAgIFN0cmluZ1RlbXBsYXRlRXJyb3JM aXN0ZW5lciBlcnJvcnMgPSBuZXcgRXJyb3JCdWZmZXIoKTsKKyAgICAgICAgIGdyb3VwLnNldEVy cm9yTGlzdGVuZXIoZXJyb3JzKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgU3Ry aW5nVGVtcGxhdGUoZ3JvdXAsCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUoZ3JvdXAsCisgICAgICAgICAgICAgIiR1c2Vyczp7JGlmKGl0Lm9rKSQkaXQubmFtZSQkZW5k aWYkJGlmKGl0Lm9rKSQkaXQubmFtZSQkZW5kaWYkfTsgc2VwYXJhdG9yPVwiLFwiJCIpOworICAg ICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJUZXJlbmNlIiwgbmV3IEJv b2xlYW4oZmFsc2UpKTsKKyAgICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30i LCAiVG9tIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworQEAgLTI5NTUsNyArMjk1NSw3IEBAIHB1Ymxp YyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQluZXcgU3RyaW5nVGVtcGxh dGVHcm91cCgidGVzdCIpOworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9 IG5ldyBFcnJvckJ1ZmZlcigpOworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOwor LQkJU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwKKyAJCQkiJHVzZXJzOnskaWYoaXQub2sp JCRpdC5uYW1lJCRlbHNlJCRlbmRpZiR9OyBzZXBhcmF0b3I9XCIsXCIkIik7CisgCQl0LnNldEF0 dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIlRlcmVuY2UiLCBuZXcgQm9vbGVhbih0cnVlKSk7 CisgCQl0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIlRvbSIsIG5ldyBCb29sZWFu KGZhbHNlKSk7CitAQCAtMjk2OSw4ICsyOTY5LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgCisgCXB1YmxpYyB2b2lkIHRlc3RXaGl0ZVNwYWNlQXRFbmRPZlRl bXBsYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3Vw ID0gbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImdyb3VwIik7CistCQlTdHJpbmdUZW1wbGF0ZSBw YWdlU1QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJvcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvdGVz dC9wYWdlIik7CistCQlTdHJpbmdUZW1wbGF0ZSBsaXN0U1QgPSBncm91cC5nZXRJbnN0YW5jZU9m KCJvcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvdGVzdC91c2Vyc19saXN0Iik7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgcGFnZVNUID0gZ3JvdXAuZ2V0SW5zdGFu Y2VPZigib3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL3Rlc3QvcGFnZSIpOworKwkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGxpc3RTVCA9IGdyb3VwLmdldEluc3RhbmNl T2YoIm9yZy9hbnRsci9zdHJpbmd0ZW1wbGF0ZS90ZXN0L3VzZXJzX2xpc3QiKTsKKyAJCS8vIHVz ZXJzLmxpc3QgcmVmZXJlbmNlcyByb3cuc3Qgd2hpY2ggaGFzIGEgc2luZ2xlIGJsYW5rIGxpbmUg YXQgdGhlIGVuZC4KKyAJCS8vIEkuZS4sIHRoZXJlIGFyZSAyIFxuIGluIGEgcm93IGF0IHRoZSBl bmQKKyAJCS8vIFNUIHNob3VsZCBlYXQgYWxsIHdoaXRlc3BhY2UgYXQgZW5kCitAQCAtMjk5NCw3 ICsyOTk0LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJ CW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CisgCQlTdHJpbmdUZW1wbGF0ZUVycm9y TGlzdGVuZXIgZXJyb3JzID0gbmV3IEVycm9yQnVmZmVyKCk7CisgCQlncm91cC5zZXRFcnJvckxp c3RlbmVyKGVycm9ycyk7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRl KGdyb3VwLAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBu ZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorIAkJCSJi ZWdpblxuIiArCisgCQkJIiRkdWgudXNlcnM6e25hbWU6ICRpdCR9OyBzZXBhcmF0b3I9XCIsIFwi JFxuIiArCisgCQkJImVuZFxuIik7CitAQCAtMzAwOSw3ICszMDA5LDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3Vw KCJ0ZXN0Iik7CisgCQlTdHJpbmdUZW1wbGF0ZUVycm9yTGlzdGVuZXIgZXJyb3JzID0gbmV3IEVy cm9yQnVmZmVyKCk7CisgCQlncm91cC5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CistCQlTdHJp bmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBsYXRlKGdyb3VwLAorKwkJb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorIAkJCSJiZWdpblxuIiArCisgCQkJIiR1c2Vyczp7 bmFtZTogJGl0JH07IHNlcGFyYXRvcj1cIiwgXCIkXG4iICsKKyAJCQkiZW5kXG4iKTsKK0BAIC0z MDI0LDcgKzMwMjQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAJCVN0cmluZ1RlbXBsYXRl RXJyb3JMaXN0ZW5lciBlcnJvcnMgPSBuZXcgRXJyb3JCdWZmZXIoKTsKKyAJCWdyb3VwLnNldEVy cm9yTGlzdGVuZXIoZXJyb3JzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgU3RyaW5nVGVt cGxhdGUoZ3JvdXAsCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg dCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisg CQkJImJlZ2luXG4iICsKKyAJCQkiJHVzZXJzOntuYW1lOiAkaXQkfTsgc2VwYXJhdG9yPVwiLCBc IiRcbiIgKworIAkJCSJlbmRcbiIpOworQEAgLTMwMzksNyArMzAzOSw3IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cCgidGVzdCIpOworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBF cnJvckJ1ZmZlcigpOworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLQkJU3Ry aW5nVGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwKKyAJCQkiYmVnaW5cbiIgKworIAkJCSIkdXNlcnM7 IHNlcGFyYXRvcj1cIiwgXCIkXG4iICsKKyAJCQkiZW5kXG4iKTsKK0BAIC0zMDU1LDcgKzMwNTUs NyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1Rl bXBsYXRlRXJyb3JMaXN0ZW5lciBlcnJvcnMgPSBuZXcgRXJyb3JCdWZmZXIoKTsKKyAJCWdyb3Vw LnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKTsKKyAJCWdyb3VwLmRlZmluZVRlbXBsYXRlKCJib2xk IiwgIjxiPiRpdCQ8L2I+Iik7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IFN0cmluZ1RlbXBs YXRlKGdyb3VwLAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQg PSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorIAkJ CSIkdXNlcnMkXG4iICsKKyAJCQkiZW5kXG4iKTsKKyAJCVN0cmluZyBleHBlY3Rpbmc9ImVuZFxu IjsKK0BAIC0zMDY4LDcgKzMwNjgsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKyAJCVN0cmlu Z1RlbXBsYXRlRXJyb3JMaXN0ZW5lciBlcnJvcnMgPSBuZXcgRXJyb3JCdWZmZXIoKTsKKyAJCWdy b3VwLnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHQgPSBuZXcg U3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo Z3JvdXAsCisgCQkJImJlZ2luXG4iKworIAkJCSIkbmFtZSRcbiIrCisgCQkJIiR1c2Vyczp7bmFt ZTogJGl0JH0kXG4iKworQEAgLTMwODQsNyArMzA4NCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3Ry aW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIp OworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBFcnJvckJ1ZmZl cigpOworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLQkJU3RyaW5nVGVtcGxh dGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZShncm91cCwKKyAJCQkiYmVnaW5cbiIrCisgCQkJIiAgJG5hbWUkXG4iKworIAkJ CSIJJHVzZXJzOntuYW1lOiAkaXQkfSRcbiIrCitAQCAtMzA5Niw3ICszMDk2LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQg dGVzdFNpbXBsZUF1dG9JbmRlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBs YXRlIGEgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgYSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUoCisgCQkJIiR0aXRsZSQ6IHtcbiIgKworIAkJCSIJJG5hbWU7IHNlcGFyYXRvcj1cIlxu XCIkXG4iICsKKyAJCQkifSIpOworQEAgLTMxMTgsNyArMzExOCw3IEBAIHB1YmxpYyBjbGFzcyBU ZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgi dGVzdCIpOworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9IG5ldyBFcnJv ckJ1ZmZlcigpOworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworLQkJU3RyaW5n VGVtcGxhdGUgdCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwKKyAJCQkidmFyaWFibGUgcHJvcGVydHkgJHByb3BOYW1l JD0kdi4ocHJvcE5hbWUpJCIpOworIAkJdC5zZXRBdHRyaWJ1dGUoInYiLCBuZXcgRGVjbCgiaSIs ImludCIpKTsKKyAJCXQuc2V0QXR0cmlidXRlKCJwcm9wTmFtZSIsICJ0eXBlIik7CitAQCAtMzEz MSw3ICszMTMxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisg CXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsQnV0RW1wdHlJdGVyYXRvclRlc3RzRmFsc2UoKSB0aHJv d3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBT dHJpbmdUZW1wbGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShn cm91cCwKKyAJCQkiJGlmKHVzZXJzKSRcbiIgKworIAkJCSJVc2VyczogJHVzZXJzOnskaXQubmFt ZSQgfSRcbiIgKworIAkJCSIkZW5kaWYkIik7CitAQCAtMzE1MSw3ICszMTUxLDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkvLyBzb21laG93LCBpdCBtdXN0 IGJlIHNldC4KKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVt cGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworKwkJb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRo b2QiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZvbyIpOworIAkJU3RyaW5nIGV4cGVj dGluZyA9ICJ4PXk7IC8vICI7CisgCQlTdHJpbmcgcmVzdWx0ID0gYi50b1N0cmluZygpOworQEAg LTMxNzIsNyArMzE3Miw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAkJLy8gaXMgZXZhbHVhdGVkIGluIHRoZSBjb250ZXh0IG9mIHN0YXQncyBhcmcgbGlzdC4K KyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgYiA9 IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKyAJ CWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZvbyIpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJ4 PXk7IC8vIGZvbyI7CisgCQlTdHJpbmcgcmVzdWx0ID0gYi50b1N0cmluZygpOworQEAgLTMxODgs NyArMzE4OCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJ CQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBs YXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRl IGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7 CisgCQliLnNldEF0dHJpYnV0ZSgibmFtZSIsICJmb28iKTsKKyAJCVN0cmluZyBleHBlY3Rpbmcg PSAieD15OyAvLyBmb28iOworIAkJU3RyaW5nIHJlc3VsdCA9IGIudG9TdHJpbmcoKTsKK0BAIC0z MjA2LDcgKzMyMDYsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCQkJOworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdU ZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1w bGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7CisrCQlvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhv ZCIpOworIAkJYi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZm9vIik7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0gIng9MzQ7IC8vIGZvbyI7CisgCQlTdHJpbmcgcmVzdWx0ID0gYi50b1N0cmluZygpOwor QEAgLTMyMjQsNyArMzIyNCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0 cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmlu Z1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi bWV0aG9kIik7CisgCQliLnNldEF0dHJpYnV0ZSgibmFtZSIsICJmb28iKTsKKyAJCVN0cmluZyBl eHBlY3RpbmcgPSAieD05OTsgLy8gZm9vIjsKKyAJCVN0cmluZyByZXN1bHQgPSBiLnRvU3RyaW5n KCk7CitAQCAtMzIzOSw3ICszMjM5LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQlu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJ U3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoInN0YXQiKTsKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VP Zigic3RhdCIpOworIAkJYi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZm9vIik7CisgCQlTdHJpbmcg ZXhwZWN0aW5nID0gIng9OTk7IC8vIGZvbyI7CisgCQlTdHJpbmcgcmVzdWx0ID0gYi50b1N0cmlu ZygpOworQEAgLTMyNjQsNyArMzI2NCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxh dGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICA7CisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdy b3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3 IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIG0gPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBtID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7 CisgICAgICAgICBtLnNldEF0dHJpYnV0ZSgiZmllbGRzIiwgbmV3IEZpZWxkKCkpOworICAgICAg ICAgU3RyaW5nIGV4cGVjdGluZyA9ICJ4PXBhcnJ0OyAvLyBwYXJydCI7CisgICAgICAgICBTdHJp bmcgcmVzdWx0ID0gbS50b1N0cmluZygpOworQEAgLTMyOTksNyArMzI5OSw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworICAgICAgICAgICAgICAgICA7CisgICAg ICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0 cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0gICAgICAg IFN0cmluZ1RlbXBsYXRlIG0gPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKysgICAg ICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBtID0gZ3JvdXAuZ2V0 SW5zdGFuY2VPZigibWV0aG9kIik7CisgICAgICAgICBtLnNldEF0dHJpYnV0ZSgiZmllbGRzIiwg bmV3IEZpZWxkKCkpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9ICJ4PXBhcnJ0OyAvLyBw YXJydCI7CisgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbS50b1N0cmluZygpOworQEAgLTMzNDIs NyArMzM0Miw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJ CQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBs YXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRl IGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRob2QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7 CisgCQliLnNldEF0dHJpYnV0ZSgibmFtZSIsICJmb28iKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJz aXplIiwgIjIiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAieD1mb287IC8vIGZvbyI7CitAQCAt MzM2MSw3ICszMzYxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVt cGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworKwkJb3JnLmFudGxyLnN0 cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtZXRo b2QiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZvbyIpOworIAkJYi5zZXRBdHRyaWJ1 dGUoInNpemUiLCAiMiIpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJ4PSBbZm9vXSA7IC8vIGZv byI7CitAQCAtMzM4MCw3ICszMzgwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQlu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJ U3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworKwkJb3Jn LmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5j ZU9mKCJtZXRob2QiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZvbyIpOworIAkJU3Ry aW5nIGV4cGVjdGluZyA9ICJ4PTM0OyAvLyBmb28iOworIAkJU3RyaW5nIHJlc3VsdCA9IGIudG9T dHJpbmcoKTsKK0BAIC0zMzk5LDcgKzMzOTksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAgOworICAgICAgICAgU3RyaW5nVGVtcGxh dGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3Vw KG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBi ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiQSIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJBIik7CisgICAg ICAgICBiLnNldEF0dHJpYnV0ZSgieCIsIG5ldyBDb3VudGVyKCkpOworICAgICAgICAgU3RyaW5n IGV4cGVjdGluZyA9ICIwIDEgMiAwIjsKKyAgICAgICAgIFN0cmluZyByZXN1bHQgPSBiLnRvU3Ry aW5nKCk7CitAQCAtMzQxNyw3ICszNDE3LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1w bGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJ CQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOwor LQkJU3RyaW5nVGVtcGxhdGUgYiA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1ldGhvZCIpOworKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJtZXRob2QiKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJuYW1lIiwgImZvbyIpOworIAkJ Yi5zZXRBdHRyaWJ1dGUoInNpemUiLCAiMzQiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAieD0z NDsiOworQEAgLTM0MzYsOSArMzQzNiw5IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxh dGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJ bmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0J CVN0cmluZ1RlbXBsYXRlIGYgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJmaWxlIik7CisrCQlvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZiA9IGdyb3VwLmdldEluc3RhbmNl T2YoImZpbGUiKTsKKyAJCWYuc2V0QXR0cmlidXRlKCJzaXplIiwgIjM0Iik7CistCQlTdHJpbmdU ZW1wbGF0ZSBtID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7CisrCQlvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgbSA9IGdyb3VwLmdldEluc3RhbmNlT2YoIm1l dGhvZCIpOworIAkJbS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiZm9vIik7CisgCQlmLnNldEF0dHJp YnV0ZSgibSIsIG0pOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJ4PTM0LjA7IjsKK0BAIC0zNDU3 LDcgKzM0NTcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJCQkJCURlZmF1bHRUZW1wbGF0 ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGIgPSBncm91cC5nZXRJbnN0YW5jZU9m KCJtZXRob2QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBi ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibWV0aG9kIik7CisgCQliLnNldEF0dHJpYnV0ZSgibmFt ZSIsICJmb28iKTsKKyAJCWIuc2V0QXR0cmlidXRlKCJzaXplIiwgIjM0Iik7CisgCQlTdHJpbmcg ZXhwZWN0aW5nID0gIng9MzQ7IjsKK0BAIC0zNDcyLDcgKzM0NzIsNyBAQCBwdWJsaWMgY2xhc3Mg VGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQkJOworIAkJU3RyaW5nVGVtcGxhdGVHcm91 cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIo dGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1wbGF0ZSBiID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi YiIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGIgPSBncm91 cC5nZXRJbnN0YW5jZU9mKCJiIik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIi5mb28uIjsKKyAJ CVN0cmluZyByZXN1bHQgPSBiLnRvU3RyaW5nKCk7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5n LCByZXN1bHQpOworQEAgLTM1MjIsNyArMzUyMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RSZW5kZXJlckZvclNU KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9bmV3IFN0cmluZ1Rl bXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID1u ZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiZGF0ZTog PGNyZWF0ZWQ+IiwKKyAJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcyk7CisgCQlz dC5zZXRBdHRyaWJ1dGUoImNyZWF0ZWQiLAorQEAgLTM1MzQsNyArMzUzNCw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRl c3RSZW5kZXJlcldpdGhGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBs YXRlIHN0ID1uZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgc3QgPW5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUoCisgCQkJCSJkYXRlOiA8Y3JlYXRlZDsgZm9ybWF0PVwieXl5eS5NTS5kZFwiPiIsCisg CQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworIAkJc3Quc2V0QXR0cmlidXRl KCJjcmVhdGVkIiwKK0BAIC0zNTQ2LDcgKzM1NDYsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0UmVuZGVyZXJXaXRo Rm9ybWF0QW5kTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgc3Qg PW5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBzdCA9bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgK KyAJCQkJIlRoZSBuYW1lczogPG5hbWVzOyBmb3JtYXQ9XCJ1cHBlclwiPiIsCisgCQkJCUFuZ2xl QnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworIAkJc3Quc2V0QXR0cmlidXRlKCJuYW1lcyIs ICJ0ZXIiKTsKK0BAIC0zNTU5LDcgKzM1NTksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0UmVuZGVyZXJXaXRoRm9y bWF0QW5kU2VwYXJhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBz dCA9bmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIHN0ID1uZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KAorIAkJCQkiVGhlIG5hbWVzOiA8bmFtZXM7IHNlcGFyYXRvcj1cIiBhbmQgXCIsIGZvcm1hdD1c InVwcGVyXCI+IiwKKyAJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcyk7CisgCQlz dC5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgInRlciIpOworQEAgLTM1NzIsNyArMzU3Miw3IEBAIHB1 YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2 b2lkIHRlc3RSZW5kZXJlcldpdGhGb3JtYXRBbmRTZXBhcmF0b3JBbmROdWxsKCkgdGhyb3dzIEV4 Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9bmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID1uZXcgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiVGhlIG5hbWVzOiA8bmFtZXM7 IHNlcGFyYXRvcj1cIiBhbmQgXCIsIG51bGw9XCJuL2FcIiwgZm9ybWF0PVwidXBwZXJcIj4iLAor IAkJCQlBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKyAJCUxpc3QgbmFtZXMgPSBu ZXcgQXJyYXlMaXN0KCk7CitAQCAtMzU4OSwxMCArMzU4OSwxMCBAQCBwdWJsaWMgY2xhc3MgVGVz dFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkUmVuZGVy ZXJTZWVzRW5jbG9zaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQkvLyBzdCBpcyBlbWJlZGRl ZCBpbiBvdXRlcjsgc2V0IHJlbmRlcmVyIG9uIG91dGVyLCBzdCBzaG91bGQKKyAJCS8vIHN0aWxs IHNlZSBpdC4KKy0JCVN0cmluZ1RlbXBsYXRlIG91dGVyID1uZXcgU3RyaW5nVGVtcGxhdGUoCisr CQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgb3V0ZXIgPW5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSJYOiA8eD4iLAorIAkJ CQlBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0 ID1uZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgc3QgPW5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo CisgCQkJCSJkYXRlOiA8Y3JlYXRlZD4iLAorIAkJCQlBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVy LmNsYXNzKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgiY3JlYXRlZCIsCitAQCAtMzYxMSw3ICszNjEx LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJkYXRlVGhpbmciKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImRhdGVUaGluZyIp OworIAkJc3Quc2V0QXR0cmlidXRlKCJjcmVhdGVkIiwKKyAJCQkJCQluZXcgR3JlZ29yaWFuQ2Fs ZW5kYXIoMjAwNSwgMDctMSwgMDUpKTsKKyAJCWdyb3VwLnJlZ2lzdGVyUmVuZGVyZXIoR3JlZ29y aWFuQ2FsZW5kYXIuY2xhc3MsIG5ldyBEYXRlUmVuZGVyZXIoKSk7CitAQCAtMzYyNyw3ICszNjI3 LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJkYXRlVGhpbmciKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoImRhdGVUaGluZyIp OworIAkJc3Quc2V0QXR0cmlidXRlKCJjcmVhdGVkIiwKKyAJCQkJCQluZXcgR3JlZ29yaWFuQ2Fs ZW5kYXIoMjAwNSwgMDctMSwgMDUpKTsKKyAJCWdyb3VwLnJlZ2lzdGVyUmVuZGVyZXIoR3JlZ29y aWFuQ2FsZW5kYXIuY2xhc3MsIG5ldyBEYXRlUmVuZGVyZXIoKSk7CitAQCAtMzY0NSw3ICszNjQ1 LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworIAkJc3Quc2V0 QXR0cmlidXRlKCJ0eXBlIiwgImludCIpOworIAkJc3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgIngi KTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiaW50IHggPSAwOyI7CitAQCAtMzY2MSw3ICszNjYx LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworIAkJc3Quc2V0 QXR0cmlidXRlKCJ3IiwgIkwiKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJpbnQiKTsK KyAJCXN0LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ4Iik7CitAQCAtMzY4MSw5ICszNjgxLDkgQEAg cHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmlu Z1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcg U3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5n ZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworIAkJc3Quc2V0QXR0cmli dXRlKCJ3IiwgIkwiKTsKKy0JCXN0LnNldEF0dHJpYnV0ZSgidHlwZSIsIG5ldyBTdHJpbmdUZW1w bGF0ZSgiaW50IikpOworKwkJc3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwgbmV3IG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgiaW50IikpOworIAkJc3Quc2V0QXR0cmlidXRl KCJuYW1lIiwgIngiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiaW50IHggPSAwTDsiOworIAkJ U3RyaW5nIHJlc3VsdCA9IHN0LnRvU3RyaW5nKCk7CitAQCAtMzY5OCw3ICszNjk4LDcgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1Rl bXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3Ry aW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJ2YXIiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworIAkJc3Quc2V0QXR0cmlidXRl KCJ3IiwgIkwiKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJkb3VibGUiKTsgLy8gZG91 YmxlIG5vdCBpbiB0eXBlSW5pdCBtYXAKKyAJCXN0LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ4Iik7 CitAQCAtMzcxNSw3ICszNzE1LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBl eHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3Ry aW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2Yo InZhciIpOworIAkJc3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwgImludCIpOworIAkJc3Quc2V0QXR0 cmlidXRlKCJuYW1lIiwgIngiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiaW50IHggPSA7IjsK K0BAIC0zNzMxLDcgKzM3MzEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4 dGVuZHMKKyAJCQkJOworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBT dHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJp bmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworKwkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi dmFyIik7CisgCQlzdC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmxvYXQiKTsKKyAJCXN0LnNldEF0 dHJpYnV0ZSgibmFtZSIsICJ4Iik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gImZsb2F0IHggPSA7 IjsKK0BAIC0zNzQ3LDcgKzM3NDcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJCQkJOworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5l dyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlT dHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInZhciIpOworKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VP ZigidmFyIik7CisgCQlzdC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiVXNlclJlY29yZCIpOworIAkJ c3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgIngiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiVXNl clJlY29yZCB4ID0gbnVsbDsiOworQEAgLTM3NjMsNyArMzc2Myw3IEBAIHB1YmxpYyBjbGFzcyBU ZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3Vw IGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0 ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi dmFyIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJV c2VyUmVjb3JkIik7CisgCQlzdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAieCIpOworIAkJU3RyaW5n IGV4cGVjdGluZyA9ICJVc2VyUmVjb3JkIHggPSA7IjsKK0BAIC0zNzc5LDcgKzM3NzksNyBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQkJOworIAkJU3RyaW5n VGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBT dHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9IGdyb3VwLmdl dEluc3RhbmNlT2YoInZhciIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidmFyIik7CisgCQlzdC5zZXRBdHRyaWJ1 dGUoInR5cGUiLCAiVXNlclJlY29yZCIpOworIAkJc3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgIngi KTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAiVXNlclJlY29yZCB4ID0gVXNlclJlY29yZDsiOwor QEAgLTM4MDAsNyArMzgwMCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworICAgICAgICAgICAgICAgICA7CisgICAgICAgICBTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmlu Z1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAu Z2V0SW5zdGFuY2VPZigidmFyIik7CisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ2YXIiKTsKKyAgICAgICAg IHN0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJkZWZhdWx0Iik7CisgICAgICAgICBzdC5zZXRBdHRy aWJ1dGUoIm5hbWUiLCAieCIpOworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9ICJkZWZhdWx0 IHggPSBmb287IjsKK0BAIC0zODIxLDcgKzM4MjEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAgICAgICAgICAgOworICAgICAgICAgU3RyaW5nVGVt cGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUZW1wbGF0ZUdy b3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistICAgICAgICBTdHJpbmdUZW1wbGF0 ZSBzdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInQxIik7CisrICAgICAgICBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0MSIp OworICAgICAgICAgU3RyaW5nIGV4cGVjdGluZyA9ICJkZWZhdWx0IjsKKyAgICAgICAgIFN0cmlu ZyByZXN1bHQgPSBzdC50b1N0cmluZygpOyAgICAgICAgCisgICAgICAgICBhc3NlcnRFcXVhbHMo ZXhwZWN0aW5nLCByZXN1bHQpOworQEAgLTM4MzYsNyArMzgzNiw3IEBAIHB1YmxpYyBjbGFzcyBU ZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3Vw IGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0 ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHN0ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi aW50ZXJtZWRpYXRlIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgc3QgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJpbnRlcm1lZGlhdGUiKTsKKyAJCXN0LnNldEF0 dHJpYnV0ZSgidHlwZSIsICJpbnQiKTsKKyAJCXN0LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ4Iik7 CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gImludCB4ID0gMDsiOworQEAgLTM4NTMsOCArMzg1Myw4 IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlT dHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAo bmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGludGVybSA9 IGdyb3VwLmdldEluc3RhbmNlT2YoImludGVybWVkaWF0ZSIpOworLQkJU3RyaW5nVGVtcGxhdGUg dmFyID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidmFyIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgaW50ZXJtID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiaW50ZXJt ZWRpYXRlIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdmFy ID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidmFyIik7CisgCQl2YXIuc2V0QXR0cmlidXRlKCJ0eXBl IiwgImludCIpOworIAkJdmFyLnNldEF0dHJpYnV0ZSgibmFtZSIsICJ4Iik7CisgCQlpbnRlcm0u c2V0QXR0cmlidXRlKCJzdHVmZiIsIHZhcik7CitAQCAtMzg3MCw3ICszODcwLDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJCTsKKyAJCVN0cmluZ1RlbXBs YXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5n UmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3Rh bmNlT2YoImZvbyIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJmb28iKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSAi IjsKKyAJCVN0cmluZyByZXN1bHQgPSBhLnRvU3RyaW5nKCk7CisgCQlhc3NlcnRFcXVhbHMoZXhw ZWN0aW5nLCByZXN1bHQpOworQEAgLTM4ODQsNyArMzg4NCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1w bGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0b3Ai KTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAu Z2V0SW5zdGFuY2VPZigidG9wIik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gImE9LCBiPSI7Cisg CQlTdHJpbmcgcmVzdWx0ID0gYS50b1N0cmluZygpOworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGlu ZywgcmVzdWx0KTsKK0BAIC0zODk5LDcgKzM4OTksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQlu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJ CQkJCQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGEg PSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0b3AiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidG9wIik7CisgCQlTdHJp bmcgZXhwZWN0aW5nID0gImE9LCBiPSI7CisgCQlTdHJpbmcgcmVzdWx0ID0gYS50b1N0cmluZygp OworIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGluZywgcmVzdWx0KTsKK0BAIC0zOTExLDcgKzM5MTEs NyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICogIFBs ZWFzZSBjb3JyZWN0IHRvIGVzY2FwZSB0aGUgY29ycmVjdCBjaGFyY3Rlci4KKyAgICAgICovCisg CXB1YmxpYyB2b2lkIHRlc3Q4Qml0RXVyb0NoYXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlT dHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiRGFuaXNoOiBcdTAxNDMgY2hhciIKKyAJCQkpOworIAkJ ZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTM5MjAsNyArMzkyMCw3IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3Qx NkJpdFVuaWNvZGVDaGFyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBl ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KAorIAkJCQkiRElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgT05FOiBcdTI3ODAiCisg CQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC0zOTI5LDcgKzM5MjksNyBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMg dm9pZCB0ZXN0Rmlyc3RPcCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUg ZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSgKKyAJCQkJIiRmaXJzdChuYW1lcykkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9m KCk7CitAQCAtMzk0MSw3ICszOTQxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdFRydW5jT3AoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkdHJ1bmMobmFtZXMpOyBzZXBh cmF0b3I9XCIsIFwiJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTM5 NTMsNyArMzk1Myw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcwor IAl9CisgCisgICAgIHB1YmxpYyB2b2lkIHRlc3RSZXN0T3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsK Ky0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrICAgICAg ICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICIkcmVz dChuYW1lcyk7IHNlcGFyYXRvcj1cIiwgXCIkIgorICAgICAgICAgICAgICk7CisgICAgICAgICBl ID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtMzk2NSw3ICszOTY1LDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQg dGVzdFJlc3RPcEVtcHR5TGlzdCgpIHRocm93cyBFeGNlcHRpb24geworLSAgICAgICAgU3RyaW5n VGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAgICAgIG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgIiRyZXN0KG5hbWVzKTsgc2VwYXJh dG9yPVwiLCBcIiQiCisgICAgICAgICAgICAgKTsKKyAgICAgICAgIGUgPSBlLmdldEluc3RhbmNl T2YoKTsKK0BAIC0zOTgyLDcgKzM5ODIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQlu ZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJ U3RyaW5nVGVtcGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi YSIpOworIAkJTGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKKyAJCW5hbWVzLmFkZCgiVGVy Iik7CisgCQluYW1lcy5hZGQoIlRvbSIpOworQEAgLTM5OTIsNyArMzk5Miw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRl c3RMYXN0T3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcg U3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJ CSIkbGFzdChuYW1lcykkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAt NDAwNSw3ICs0MDA1LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCisgCXB1YmxpYyB2b2lkIHRlc3RDb21iaW5lZE9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Cisg CQkvLyByZXBsYWNlIGZpcnN0IG9mIHlvdXJzIHdpdGggZmlyc3Qgb2YgbWluZQorLQkJU3RyaW5n VGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSgKKyAJCQkJIiRbZmlyc3QobWluZSkscmVzdCh5b3VycyldOyBzZXBhcmF0b3I9 XCIsIFwiJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTQwMjAsNyAr NDAyMCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAorIAlw dWJsaWMgdm9pZCB0ZXN0Q2F0TGlzdEFuZFNpbmdsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRp b24geworIAkJLy8gcmVwbGFjZSBmaXJzdCBvZiB5b3VycyB3aXRoIGZpcnN0IG9mIG1pbmUKKy0J CVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkW21pbmUseW91cnNdOyBzZXBhcmF0b3I9XCIsIFwi JCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTQwNDAsNyArNDA0MCw3 IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCTsKKyAJCVN0 cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5l dyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAu Z2V0SW5zdGFuY2VPZigiYSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIGUgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhIik7CisgCQlMaXN0IG1pbmUgPSBuZXcg QXJyYXlMaXN0KCk7CisgCQltaW5lLmFkZCgiVGVyIik7CisgCQltaW5lLmFkZCgiVG9tIik7CitA QCAtNDA1Nyw3ICs0MDU3LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCQkvLyB0d28gb3BlcmFuZHMgKGZyb20gbGVmdCB0byByaWdodCkgZGV0ZXJtaW5lIHdo aWNoIHdheSBpdAorIAkJLy8gZ29lcy4gIEluIHRoaXMgY2FzZSwgeCttaW5lIGlzIGEgbGlzdCBz byBldmVyeXRoaW5nIGZyb20gdGhlaXIKKyAJCS8vIHRvIHRoZSByaWdodCBiZWNvbWVzIGxpc3Qg Y2F0LgorLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRbeCxtaW5lLHkseW91cnMsel07IHNl cGFyYXRvcj1cIiwgXCIkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAt NDA3MCw3ICs0MDcwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdE5lc3RlZE9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7 CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGZpcnN0KHJlc3QobmFtZXMpKSQiIC8vIGdl dHMgMm5kIGVsZW1lbnQKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTQw ODIsNyArNDA4Miw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcwor IAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RGaXJzdFdpdGhPbmVBdHRyaWJ1dGVPcCgpIHRocm93 cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgK KysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRmaXJzdChuYW1lcykk IgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDA5Miw3ICs0MDkyLDcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVi bGljIHZvaWQgdGVzdExhc3RXaXRoT25lQXR0cmlidXRlT3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsK Ky0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkbGFzdChuYW1lcykkIgorIAkJCSk7CisgCQll ID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDEwMiw3ICs0MTAyLDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdExh c3RXaXRoTGVuZ3RoT25lTGlzdEF0dHJpYnV0ZU9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlT dHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGxhc3QobmFtZXMpJCIKKyAJCQkpOworIAkJZSA9IGUu Z2V0SW5zdGFuY2VPZigpOworQEAgLTQxMTIsNyArNDExMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RSZXN0V2l0 aE9uZUF0dHJpYnV0ZU9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBl ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmlu Z1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl KAorIAkJCQkiJHJlc3QobmFtZXMpJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigp OworQEAgLTQxMjIsNyArNDEyMiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUg ZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RSZXN0V2l0aExlbmd0aE9uZUxpc3RB dHRyaWJ1dGVPcCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5l dyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJ CQkJIiRyZXN0KG5hbWVzKSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BA IC00MTMyLDcgKzQxMzIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0ZWRSZXN0T3AoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlv cmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkcmVzdChuYW1lcykkLCAkcmVz dChuYW1lcykkIiAvLyBnZXRzIDJuZCBlbGVtZW50CisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3Rh bmNlT2YoKTsKK0BAIC00MTU2LDcgKzQxNTYsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJ CQkJCURlZmF1bHRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBn cm91cC5nZXRJbnN0YW5jZU9mKCJyb290Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUu U3RyaW5nVGVtcGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInJvb3QiKTsKKyAJCUxpc3Qg bmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgCQluYW1lcy5hZGQoIlRlciIpOworIAkJbmFtZXMu YWRkKCJUb20iKTsKK0BAIC00MTkxLDcgKzQxOTEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJKi8KKyAKKyAJcHVibGljIHZvaWQgdGVzdEluY29taW5nTGlz dHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkcmVz dChuYW1lcykkLCAkcmVzdChuYW1lcykkIiAvLyBnZXRzIDJuZCBlbGVtZW50CisgCQkJKTsKKyAJ CWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC00MjAyLDcgKzQyMDIsNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0 SW5jb21pbmdMaXN0c0FyZU5vdE1vZGlmaWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJp bmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0 cmluZ1RlbXBsYXRlKAorIAkJCQkiJG5hbWVzOyBzZXBhcmF0b3I9XCIsIFwiJCIgLy8gZ2V0cyAy bmQgZWxlbWVudAorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDIxOCw3 ICs0MjE4LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0K KyAKKyAJcHVibGljIHZvaWQgdGVzdEluY29taW5nTGlzdHNBcmVOb3RNb2RpZmllZDIoKSB0aHJv d3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUo CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcu YW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkbmFtZXM7IHNlcGFy YXRvcj1cIiwgXCIkIiAvLyBnZXRzIDJuZCBlbGVtZW50CisgCQkJKTsKKyAJCWUgPSBlLmdldElu c3RhbmNlT2YoKTsKK0BAIC00MjM0LDcgKzQyMzQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0SW5jb21pbmdBcnJh eXNBcmVPaygpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBT dHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJ IiRuYW1lczsgc2VwYXJhdG9yPVwiLCBcIiQiIC8vIGdldHMgMm5kIGVsZW1lbnQKKyAJCQkpOwor IAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTQyNTEsNyArNDI1MSw3IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0 ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1Jl YWRlcih0ZW1wbGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBncm91cC5nZXRJbnN0YW5j ZU9mKCJmIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9 IGdyb3VwLmdldEluc3RhbmNlT2YoImYiKTsKKyAJCWUuc2V0QXR0cmlidXRlKCJ4IiwgIlRlciIp OworIAkJZS5zZXRBdHRyaWJ1dGUoIngiLCAiVG9tIik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0g IlRlclRvbSBUZXJUb20iOworQEAgLTQyNjYsNyArNDI2Niw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCQk7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1w bGF0ZXMpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0ZXN0 Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IGdyb3Vw LmdldEluc3RhbmNlT2YoInRlc3QiKTsKKyAJCWUuc2V0QXR0cmlidXRlKCJuYW1lcyIsICJUZXIi KTsKKyAJCWUuc2V0QXR0cmlidXRlKCJuYW1lcyIsICJUb20iKTsKKyAJCVN0cmluZyBleHBlY3Rp bmcgPSAiKlRlciosICpUb20qICI7CitAQCAtNDI4Myw3ICs0MjgzLDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3Vw ID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0 ZXMpLAorIAkJCQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5n VGVtcGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVz dCIpOworIAkJZS5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRlciIpOworIAkJZS5zZXRBdHRyaWJ1 dGUoIm5hbWVzIiwgIlRvbSIpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICIqVGVyKiwgKlRvbSog IjsKK0BAIC00MjkyLDcgKzQyOTIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0QW5vblRlbXBsYXRlQXJncygpIHRo cm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0 ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRuYW1lczp7bnwg JG4kfTsgc2VwYXJhdG9yPVwiLCBcIiQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2Yo KTsKK0BAIC00MzAzLDcgKzQzMDMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0QW5vblRlbXBsYXRlV2l0aEFyZ0hh c05vSVRBcmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcg U3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJ CSIkbmFtZXM6e258ICRuJDokaXQkfTsgc2VwYXJhdG9yPVwiLCBcIiQiCisgCQkJKTsKKyAJCWUg PSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC00MzIxLDcgKzQzMjEsNyBAQCBwdWJsaWMgY2xhc3Mg VGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0QW5v blRlbXBsYXRlQXJnczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUg PSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo CisgCQkJCSIkbmFtZXM6e258IC4kbiQufTp7IG4gfCBfJG4kX307IHNlcGFyYXRvcj1cIiwgXCIk IgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDMzMiw3ICs0MzMyLDcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVi bGljIHZvaWQgdGVzdEZpcnN0V2l0aENhdEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewor LQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRmaXJzdChbbmFtZXMscGhvbmVzXSkkIgorIAkJ CSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDM0NSw3ICs0MzQ1LDcgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZv aWQgdGVzdEZpcnN0V2l0aExpc3RPZk1hcHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmlu Z1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUoCisgCQkJCSIkZmlyc3QobWFwcykuVGVyJCIKKyAJCQkpOworIAkJZSA9IGUu Z2V0SW5zdGFuY2VPZigpOworQEAgLTQzODgsNyArNDM4OCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgKi8KKyAJcHVibGljIHZvaWQgdGVzdEp1c3RD YXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkW25h bWVzLHBob25lc10kIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDQw MSw3ICs0NDAxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisg CX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdENhdDJBdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlv biB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJFtuYW1lcyxwaG9uZXNdOyBzZXBhcmF0 b3I9XCIsIFwiJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTQ0MTQs NyArNDQxNCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9 CisgCisgCXB1YmxpYyB2b2lkIHRlc3RDYXQyQXR0cmlidXRlc1dpdGhBcHBseSgpIHRocm93cyBF eGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJ CW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRbbmFtZXMscGhvbmVzXTp7 YXwkYSQufSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC00NDI3LDcg KzQ0MjcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQor IAorIAlwdWJsaWMgdm9pZCB0ZXN0Q2F0M0F0dHJpYnV0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsK Ky0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIu c3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkW25hbWVzLHBob25lcyxzYWxhcmllc107IHNl cGFyYXRvcj1cIiwgXCIkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAt NDQ0Miw3ICs0NDQyLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCX0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdENhdFdpdGhUZW1wbGF0ZUFwcGxpY2F0aW9u QXNFbGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBl ID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlKAorICAgICAgICAgICAgICAgICAiJFtuYW1lczp7JGl0JCF9LHBob25lc107IHNlcGFy YXRvcj1cIiwgXCIkIgorICAgICAgICAgICAgICk7CisgICAgICAgICBlID0gZS5nZXRJbnN0YW5j ZU9mKCk7CitAQCAtNDQ1NSw3ICs0NDU1LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1w bGF0ZSBleHRlbmRzCisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdENhdFdpdGhJRkFz RWxlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgZSA9 IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysgICAgICAgIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSgKKyAgICAgICAgICAgICAgICAgIiRbeyRpZihuYW1lcykkZG9oJGVuZGlmJH0scGhvbmVz XTsgc2VwYXJhdG9yPVwiLCBcIiQiCisgICAgICAgICAgICAgKTsKKyAgICAgICAgIGUgPSBlLmdl dEluc3RhbmNlT2YoKTsKK0BAIC00NDY4LDcgKzQ0NjgsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0 cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgfQorIAorICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0 V2l0aE51bGxUZW1wbGF0ZUFwcGxpY2F0aW9uQXNFbGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7 CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKyAgICAg ICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAiJFtu YW1lczp7JGl0JCF9LFwiZm9vXCJdOnt4fTsgc2VwYXJhdG9yPVwiLCBcIiQiCisgICAgICAgICAg ICAgKTsKKyAgICAgICAgIGUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC00NDc5LDcgKzQ0Nzks NyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgfQorIAor ICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0V2l0aE5lc3RlZFRlbXBsYXRlQXBwbGljYXRpb25Bc0Vs ZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0gICAgICAgIFN0cmluZ1RlbXBsYXRlIGUgPSBu ZXcgU3RyaW5nVGVtcGxhdGUoCisrICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUoCisgICAgICAgICAgICAgICAgICIkW25hbWVzLCBbXCJmb29cIixcImJhclwiXTp7JGl0JCF9 LHBob25lc107IHNlcGFyYXRvcj1cIiwgXCIkIgorICAgICAgICAgICAgICk7CisgICAgICAgICBl ID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDUwMCw3ICs0NTAwLDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3Vw ID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0 ZXMpLAorIAkJCQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5n VGVtcGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVz dCIpOworIAkJZS5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRlciIpOworIAkJZS5zZXRBdHRyaWJ1 dGUoIm5hbWVzIiwgIlRvbSIpOworIAkJZS5zZXRBdHRyaWJ1dGUoInBob25lcyIsICIxIik7CitA QCAtNDUxOSw3ICs0NTE5LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBs YXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpLAorIAkJCQkJCUFuZ2xlQnJhY2tl dFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IGdyb3VwLmdldElu c3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVzdCIpOworIAkJZS5zZXRBdHRyaWJ1dGUo Im5hbWUiLCAiVGVyIik7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIipUZXIqIjsKKyAJCVN0cmlu ZyByZXN1bHQgPSBlLnRvU3RyaW5nKCk7CitAQCAtNDUzOCw3ICs0NTM4LDcgQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1w bGF0ZXMpLAorIAkJCQkJCUFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3Ry aW5nVGVtcGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi dGVzdCIpOworIAkJZS5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRlciIpOworIAkJZS5zZXRBdHRy aWJ1dGUoIm5hbWVzIiwgIlRvbSIpOworIAkJZS5zZXRBdHRyaWJ1dGUoIngiLCAiaWNrIik7CitA QCAtNDU1Nyw3ICs0NTU3LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBs YXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpLAorIAkJCQkJCUFuZ2xlQnJhY2tl dFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IGdyb3VwLmdldElu c3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVzdCIpOworIAkJZS5zZXRBdHRyaWJ1dGUo Im5hbWVzIiwgIlRlciIpOworIAkJZS5zZXRBdHRyaWJ1dGUoIm5hbWVzIiwgIlRvbSIpOworIAkJ U3RyaW5nIGV4cGVjdGluZyA9ICIqVGVyKl9Ub21fIjsKK0BAIC00NTc1LDcgKzQ1NzUsNyBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRl R3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVh ZGVyKHRlbXBsYXRlcyksCisgCQkJCQkJQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFzcywg ZXJyb3JzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0ZXN0 Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IGdyb3Vw LmdldEluc3RhbmNlT2YoInRlc3QiKTsKKyAJCWUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlciIp OworIAkJLypTdHJpbmcgcmVzdWx0ID0qLyBlLnRvU3RyaW5nKCk7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0gInRlbXBsYXRlIGJvbGQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBhcmcgaW4g dGVtcGxhdGUgY29udGV4dCBbdGVzdCA8aW52b2tlIGJvbGQgYXJnIGNvbnRleHQ+XSI7CitAQCAt NDU5MSw3ICs0NTkxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCQkJCTsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVt cGxhdGUgZSA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRlc3QiKTsKKysJCW9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidGVzdCIp OworIAkJZS5zZXRBdHRyaWJ1dGUoInRlbXBsYXRlTmFtZSIsICJpdGFsaWNzIik7CisgCQllLnNl dEF0dHJpYnV0ZSgiYXJnIiwgIlRlciIpOworIAkJU3RyaW5nIGV4cGVjdGluZyA9ICJfVGVyXyI7 CitAQCAtNDYwMCw3ICs0NjAwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBl eHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdFBhcmFsbGVsQXR0cmlidXRlSXRlcmF0 aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmlu Z1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUg PSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJG5h bWVzLHBob25lcyxzYWxhcmllczp7bixwLHMgfCAkbiRAJHAkOiAkcyRcbn0kIgorIAkJCSk7Cisg CQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDYxNSw3ICs0NjE1LDcgQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVz dFBhcmFsbGVsQXR0cmlidXRlSXRlcmF0aW9uV2l0aE51bGxWYWx1ZSgpIHRocm93cyBFeGNlcHRp b24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJp bmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRuYW1lcyxwaG9uZXMsc2FsYXJpZXM6 e24scCxzIHwgJG4kQCRwJDogJHMkXG59JCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VP ZigpOworQEAgLTQ2MzMsNyArNDYzMyw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxh dGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RQYXJhbGxlbEF0dHJpYnV0ZUl0 ZXJhdGlvbkhhc0koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBu ZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisg CQkJCSIkbmFtZXMscGhvbmVzLHNhbGFyaWVzOntuLHAscyB8ICRpMCQuICRuJEAkcCQ6ICRzJFxu fSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC00NjQ4LDcgKzQ2NDgs NyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlw dWJsaWMgdm9pZCB0ZXN0UGFyYWxsZWxBdHRyaWJ1dGVJdGVyYXRpb25XaXRoRGlmZmVyZW50U2l6 ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkbmFt ZXMscGhvbmVzLHNhbGFyaWVzOntuLHAscyB8ICRuJEAkcCQ6ICRzJH07IHNlcGFyYXRvcj1cIiwg XCIkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDY2Myw3ICs0NjYz LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJ cHVibGljIHZvaWQgdGVzdFBhcmFsbGVsQXR0cmlidXRlSXRlcmF0aW9uV2l0aFNpbmdsZXRvbnMo KSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVt cGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5l dyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkbmFtZXMs cGhvbmVzLHNhbGFyaWVzOntuLHAscyB8ICRuJEAkcCQ6ICRzJH07IHNlcGFyYXRvcj1cIiwgXCIk IgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNDY3Niw3ICs0Njc2LDcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCisgCXB1YmxpYyB2 b2lkIHRlc3RQYXJhbGxlbEF0dHJpYnV0ZUl0ZXJhdGlvbldpdGhNaXNtYXRjaEFyZ0xpc3RTaXpl cygpIHRocm93cyBFeGNlcHRpb24geworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVy cm9ycyA9IG5ldyBFcnJvckJ1ZmZlcigpOworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJp bmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBl ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRu YW1lcyxwaG9uZXMsc2FsYXJpZXM6e24scCB8ICRuJEAkcCR9OyBzZXBhcmF0b3I9XCIsIFwiJCIK KyAJCQkpOworIAkJZS5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CitAQCAtNDY5NCw3ICs0Njk0 LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCisgCXB1Ymxp YyB2b2lkIHRlc3RQYXJhbGxlbEF0dHJpYnV0ZUl0ZXJhdGlvbldpdGhNaXNzaW5nQXJncygpIHRo cm93cyBFeGNlcHRpb24geworIAkJU3RyaW5nVGVtcGxhdGVFcnJvckxpc3RlbmVyIGVycm9ycyA9 IG5ldyBFcnJvckJ1ZmZlcigpOworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1w bGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3 IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRuYW1lcyxw aG9uZXMsc2FsYXJpZXM6eyRuJEAkcCR9OyBzZXBhcmF0b3I9XCIsIFwiJCIKKyAJCQkpOworIAkJ ZS5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CitAQCAtNDcxNiw3ICs0NzE2LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3Vw IGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0 ZW1wbGF0ZXMpLAorIAkJCQkJCQkJCQlEZWZhdWx0VGVtcGxhdGVMZXhlci5jbGFzcyk7CistCQlT dHJpbmdUZW1wbGF0ZSBwID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigicGFnZSIpOworKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHAgPSBncm91cC5nZXRJbnN0YW5jZU9m KCJwYWdlIik7CisgCQlwLnNldEF0dHJpYnV0ZSgibmFtZXMiLCAiVGVyIik7CisgCQlwLnNldEF0 dHJpYnV0ZSgibmFtZXMiLCAiVG9tIik7CisgCQlwLnNldEF0dHJpYnV0ZSgibmFtZXMiLCAiU3Jp cmFtIik7CitAQCAtNDcyOCw3ICs0NzI4LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1w bGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdEFub25UZW1wbGF0ZU9uTGVm dE9mQXBwbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcg U3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJ CSIke2Zvb306eygkaXQkKX0kIgorIAkJCSk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0gIihmb28p IjsKK0BAIC00NzUzLDcgKzQ3NTMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRl IGV4dGVuZHMKKyAJCQkJCQkJCQludWxsLAorIAkJCQkJCQkJCWdyb3VwKTsKKyAKKy0JCVN0cmlu Z1RlbXBsYXRlIGIgPSBzdWJncm91cC5nZXRJbnN0YW5jZU9mKCJib2R5Iik7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYiA9IHN1Ymdyb3VwLmdldEluc3RhbmNl T2YoImJvZHkiKTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPSJiYXIiOworIAkJU3RyaW5nIHJlc3Vs dCA9IGIudG9TdHJpbmcoKTsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsIHJlc3VsdCk7CitA QCAtNDc2NCw4ICs0NzY0LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdE5vblB1YmxpY1Byb3BlcnR5QWNjZXNzKCkg dGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBzdCA9CistCQkJCW5ldyBTdHJp bmdUZW1wbGF0ZSgiJHguZm9vJDokeC5iYXIkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgc3QgPQorKwkJCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKCIkeC5mb28kOiR4LmJhciQiKTsKKyAJCU9iamVjdCBvID0gbmV3IE9i amVjdCgpIHsKKyAJCQlwdWJsaWMgaW50IGZvbyA9IDk7CisgCQkJcHVibGljIGludCBnZXRCYXIo KSB7IHJldHVybiAzNDsgfQorQEAgLTQ3NzksOCArNDc3OSw4IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0ZXN0SW5kZXhWYXIoKSB0aHJv d3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcg U3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9 CistCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSB0ID0KKysJCQkJbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSgKKyAJCQkJCQlncm91cCwKKyAJCQkJCQkiJEE6eyRpJC4gJGl0JH07IHNlcGFy YXRvcj1cIlxcblwiJCIKKyAJCQkJKTsKK0BAIC00Nzk1LDggKzQ3OTUsOCBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJcHVibGljIHZvaWQgdGVzdEluZGV4MFZh cigpIHRocm93cyBFeGNlcHRpb24geworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9Cisg CQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJkdW1teSIsICIuIik7CistCQlTdHJpbmdUZW1w bGF0ZSB0ID0KKy0JCQkJbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorKwkJCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkJCWdyb3VwLAorIAkJCQkJCSIkQTp7JGkwJC4gJGl0 JH07IHNlcGFyYXRvcj1cIlxcblwiJCIKKyAJCQkJKTsKK0BAIC00ODExLDggKzQ4MTEsOCBAQCBw dWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJcHVibGljIHZvaWQgdGVz dEluZGV4VmFyV2l0aE11bHRpcGxlRXhwcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0cmlu Z1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVt bXkiLCAiLiIpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9CistCQkJCW5ldyBTdHJpbmdUZW1wbGF0 ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0KKysJCQkJ bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJCQlncm91 cCwKKyAJCQkJCQkiJEEsQjp7YSxifCRpJC4gJGEkQCRiJH07IHNlcGFyYXRvcj1cIlxcblwiJCIK KyAJCQkJKTsKK0BAIC00ODI5LDggKzQ4MjksOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJcHVibGljIHZvaWQgdGVzdEluZGV4MFZhcldpdGhNdWx0aXBsZUV4 cHJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0K KyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKy0JCVN0cmluZ1Rl bXBsYXRlIHQgPQorLQkJCQluZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisrCQkJCW5ldyBvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCQkJZ3JvdXAsCisgCQkJCQkJIiRBLEI6e2EsYnwk aTAkLiAkYSRAJGIkfTsgc2VwYXJhdG9yPVwiXFxuXCIkIgorIAkJCQkpOworQEAgLTQ4NDksNyAr NDg0OSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJLy8g Y29udGV4dC4gIGl0IGNhbiB0aGVyZWZvcmUgc2VlIG5hbWUuCisgCQlTdHJpbmdUZW1wbGF0ZUdy b3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiKTsKKy0JCVN0 cmluZ1RlbXBsYXRlIG1haW4gPSBncm91cC5kZWZpbmVUZW1wbGF0ZSgibWFpbiIsICIkZm9vKHQ9 e0hpLCAkbmFtZSR9LCBuYW1lPVwicGFycnRcIikkIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgbWFpbiA9IGdyb3VwLmRlZmluZVRlbXBsYXRlKCJtYWluIiwg IiRmb28odD17SGksICRuYW1lJH0sIG5hbWU9XCJwYXJydFwiKSQiKTsKKyAJCS8qU3RyaW5nVGVt cGxhdGUgZm9vID0qLyBncm91cC5kZWZpbmVUZW1wbGF0ZSgiZm9vIiwgIiR0JCIpOworIAkJU3Ry aW5nIGV4cGVjdGluZz0iSGksIHBhcnJ0IjsKKyAJCWFzc2VydEVxdWFscyhleHBlY3RpbmcsIG1h aW4udG9TdHJpbmcoKSk7CitAQCAtNDg1Nyw3ICs0ODU3LDcgQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCisgCXB1YmxpYyB2b2lkIHRlc3ROb0RvdHNJbkF0dHJp YnV0ZU5hbWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0gbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iKTsKKy0JCVN0cmluZ1Rl bXBsYXRlIHQgPSBuZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAsICIkdXNlci5OYW1lJCIpOworKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3VwLCAiJHVzZXIuTmFtZSQiKTsKKyAJ CVN0cmluZyBlcnJvcj1udWxsOworIAkJdHJ5IHsKKyAJCQl0LnNldEF0dHJpYnV0ZSgidXNlci5O YW1lIiwgIkt1bmxlIik7CitAQCAtNDg5MCw3ICs0ODkwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RT dHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJ CQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsK KyAKKy0JCVN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhcnJheSIpOwor KwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJhcnJheSIpOworIAkJYS5zZXRBdHRyaWJ1dGUoInZhbHVlcyIsCisgCQkJCQkg ICBuZXcgaW50W10gezMsOSwyMCwyLDEsNCw2LDMyLDUsNiw3Nyw4ODgsMiwxLDYsMzIsNSw2LDc3 LAorIAkJCQkJCTQsOSwyMCwyLDEsNCw2Myw5LDIwLDIsMSw0LDYsMzIsNSw2LDc3LDYsMzIsNSw2 LDc3LAorQEAgLTQ5MTAsNyArNDkxMCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxh dGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJp bmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CisgCistCQlTdHJp bmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYXJyYXkiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi YXJyYXkiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJ2YWx1ZXMiLAorIAkJCQkJICAgbmV3IGludFtd IHszLDksMjAsMiwxLDQsNiwzMiw1LDYsNzcsODg4LDIsMSw2LDMyLDUsNiw3NywKKyAJCQkJCQk0 LDksMjAsMiwxLDQsNjMsOSwyMCwyLDEsNCw2LDMyLDUsNiw3Nyw2LDMyLDUsNiw3NywKK0BAIC00 OTM2LDcgKzQ5MzYsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3RyaW5nVGVtcGxhdGUg YSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImFycmF5Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImFycmF5Iik7Cisg CQlhLnNldEF0dHJpYnV0ZSgidmFsdWVzIiwKKyAJCQkJCSAgIG5ldyBpbnRbXSB7Myw5LDIwLDIs MSw0LDYsMzIsNSw2LDc3LDg4OCwyLDEsNiwzMiw1LDYsNzcsCisgCQkJCQkJNCw5LDIwLDIsMSw0 LDYzLDksMjAsMiwxLDQsNiwzMiw1LDYsNzcsNiwzMiw1LDYsNzcsCitAQCAtNDk1NywxMSArNDk1 NywxMSBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgICAg IFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5n VGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLSAgICAgICAg ZmluYWwgU3RyaW5nVGVtcGxhdGUgeCA9IG5ldyBTdHJpbmdUZW1wbGF0ZShncm91cCwgIjxcXG4+ eyA8c3R1ZmY7IGFuY2hvciwgc2VwYXJhdG9yPVwiLFxcblwiPiB9PFxcbj4iKTsKKysgICAgICAg IGZpbmFsIG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB4ID0gbmV3IG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwgIjxcXG4+eyA8c3R1 ZmY7IGFuY2hvciwgc2VwYXJhdG9yPVwiLFxcblwiPiB9PFxcbj4iKTsKKyAgICAgICAgIHguc2V0 QXR0cmlidXRlKCJzdHVmZiIsICIxIik7CisgICAgICAgICB4LnNldEF0dHJpYnV0ZSgic3R1ZmYi LCAiMiIpOworICAgICAgICAgeC5zZXRBdHRyaWJ1dGUoInN0dWZmIiwgIjMiKTsKKy0gICAgICAg IFN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJhcnJheSIpOworKyAgICAg ICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJhcnJheSIpOworICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoInZhbHVlcyIsIG5l dyBBcnJheUxpc3QoKSB7eworICAgICAgICAgICAgIGFkZCgiYSIpOyBhZGQoeCk7IGFkZCgiYiIp OworICAgICAgICAgfX0pOworQEAgLTQ5ODEsNyArNDk4MSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0 U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9Cisg CQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7 CisgCistCQlTdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZnVuYyIpOwor KwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJmdW5jIik7CisgCQlhLnNldEF0dHJpYnV0ZSgiYXJncyIsCisgCQkJCQkgICBu ZXcgU3RyaW5nW10geyJhIiwiYiIsImMiLCJkIiwiZSIsImYifSk7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0KK0BAIC00OTk3LDcgKzQ5OTcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3Ry aW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3Ry aW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImFycmF5Iik7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2Yo ImFycmF5Iik7CisgCQlhLnNldEF0dHJpYnV0ZSgidmFsdWVzIiwKKyAJCQkJCSAgIG5ldyBpbnRb XSB7Myw5LDIwLDIsMSw0LDYsMzIsNSw2LDc3LDg4OCwyLDEsNiwzMiw1LDYsNzcsCisgCQkJCQkJ NCw5LDIwLDIsMSw0LDYzLDksMjAsMiwxLDQsNn0pOworQEAgLTUwMTcsNyArNTAxNyw3IEBAIHB1 YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJU3RyaW5nVGVtcGxhdGVH cm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5ldyBTdHJpbmdSZWFk ZXIodGVtcGxhdGVzKSk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFu Y2VPZigiZHVoIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUg YSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImR1aCIpOworIAkJYS5zZXRBdHRyaWJ1dGUoImNoYXJz IiwgbmV3IFN0cmluZ1tdIHsiYSIsImIiLCJjIiwiZCIsImUifSk7CisgCQkvLyBsaW5lV2lkdGg9 PTMgaW1wbGllcyB0aGF0IHdlIGNhbiBoYXZlIDMgY2hhcmFjdGVycyBhdCBtb3N0CisgCQlTdHJp bmcgZXhwZWN0aW5nID0KK0BAIC01MDMzLDcgKzUwMzMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0 cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJ CQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOwor IAorLQkJU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImR1aCIpOworKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0 YW5jZU9mKCJkdWgiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJjaGFycyIsIG5ldyBTdHJpbmdbXSB7 ImEiLCJiIiwiXG4iLCJkIiwiZSJ9KTsKKyAJCS8vIGRvbid0IGRvIFxuIGlmIGl0J3MgbGFzdCBl bGVtZW50IGFueXdheQorIAkJU3RyaW5nIGV4cGVjdGluZyA9CitAQCAtNTA0OSw3ICs1MDQ5LDcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1w bGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmlu Z1JlYWRlcih0ZW1wbGF0ZXMpKTsKKyAKKy0JCVN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJkdWgiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1w bGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZHVoIik7CisgCQlhLnNldEF0dHJpYnV0ZSgi Y2hhcnMiLCBuZXcgU3RyaW5nW10geyJhIiwiYiIsImMiLCJcbiIsImQiLCJlIn0pOworIAkJLy8g T25jZSB3ZSB3cmFwLCB3ZSBtdXN0IGR1bXAgY2hhcnMgYXMgd2Ugc2VlIHRoZW0uICBBIG5ld2xp bmUgcmlnaHQKKyAJCS8vIGFmdGVyIGEgd3JhcCBpcyBqdXN0IGFuICJ1bmZvcnR1bmF0ZSIgZXZl bnQuICBQZW9wbGUgd2lsbCBleHBlY3QKK0BAIC01MDY4LDcgKzUwNjgsNyBAQCBwdWJsaWMgY2xh c3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3Jv dXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBs YXRlcykpOworIAorLQkJU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImR1 aCIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91 cC5nZXRJbnN0YW5jZU9mKCJkdWgiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJkYXRhIiwgbmV3IGlu dFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0pOworIAkJU3RyaW5nIGV4cGVjdGluZyA9CisgCQkJIiFb MV1bMl1bM11cbiIgKyAvLyB3aWR0aD05IGlzIHRoZSAzIGNoYXI7IGRvbid0IGJyZWFrIHRpbCBh ZnRlciBdCitAQCAtNTA4NCw3ICs1MDg0LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1w bGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0 cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKyAKKy0JCVN0 cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJkdWgiKTsKKysJCW9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigi ZHVoIik7CisgCQlhLnNldEF0dHJpYnV0ZSgiZGF0YSIsIG5ldyBpbnRbXSB7MSwyLDMsNCw1LDYs Nyw4LDl9KTsKKyAJCVN0cmluZyBleHBlY3RpbmcgPQorIAkJCSIhWzFdWzJdWzNdXG4iICsKK0BA IC01MTAxLDggKzUxMDEsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxh dGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3RyaW5nVGVtcGxh dGUgdCA9IGdyb3VwLmdldEluc3RhbmNlT2YoInRvcCIpOworLQkJU3RyaW5nVGVtcGxhdGUgcyA9 IGdyb3VwLmdldEluc3RhbmNlT2YoInN0ciIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0b3AiKTsKKysJCW9yZy5h bnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBzID0gZ3JvdXAuZ2V0SW5zdGFuY2VP Zigic3RyIik7CisgCQlzLnNldEF0dHJpYnV0ZSgiZGF0YSIsIG5ldyBpbnRbXSB7MSwyLDMsNCw1 LDYsNyw4LDl9KTsKKyAJCXQuc2V0QXR0cmlidXRlKCJzIiwgcyk7CisgCQlTdHJpbmcgZXhwZWN0 aW5nID0KK0BAIC01MTIxLDcgKzUxMjEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3Ry aW5nVGVtcGxhdGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3Ry aW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImR1aCIpOworKwkJb3JnLmFudGxy LnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJk dWgiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJjaGFycyIsIG5ldyBTdHJpbmdbXSB7ImEiLCJiIiwi YyIsImQiLCJlIn0pOworIAkJLy8KKyAJCVN0cmluZyBleHBlY3RpbmcgPQorQEAgLTUxNDAsNyAr NTE0MCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJU3Ry aW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKG5l dyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CisgCistCQlTdHJpbmdUZW1wbGF0ZSBhID0gZ3Jv dXAuZ2V0SW5zdGFuY2VPZigiZHVoIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2YoImR1aCIpOworIAkJYS5zZXRBdHRy aWJ1dGUoImNoYXJzIiwgbmV3IFN0cmluZ1tdIHsiYSIsImIiLCJjIiwiZCIsImUifSk7CisgCQkv LworIAkJU3RyaW5nIGV4cGVjdGluZyA9CitAQCAtNTE1OSw4ICs1MTU5LDggQEAgcHVibGljIGNs YXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdy b3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1w bGF0ZXMpKTsKKyAKKy0JCVN0cmluZ1RlbXBsYXRlIHRvcCA9IGdyb3VwLmdldEluc3RhbmNlT2Yo InRvcCIpOworLQkJU3RyaW5nVGVtcGxhdGUgZHVoID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZHVo Iik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdG9wID0gZ3Jv dXAuZ2V0SW5zdGFuY2VPZigidG9wIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUgZHVoID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiZHVoIik7CisgCQlkdWguc2V0 QXR0cmlidXRlKCJjaGFycyIsIG5ldyBTdHJpbmdbXSB7ImEiLCJiIiwiYyIsImQiLCJlIn0pOwor IAkJdG9wLnNldEF0dHJpYnV0ZSgiZCIsIGR1aCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nID0KK0BA IC01MTc5LDggKzUxNzksOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxh dGVHcm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3RyaW5nVGVtcGxh dGUgdG9wID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidG9wIik7CistCQlTdHJpbmdUZW1wbGF0ZSBk dWggPSBncm91cC5nZXRJbnN0YW5jZU9mKCJkdWgiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSB0b3AgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0b3AiKTsKKysJ CW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBkdWggPSBncm91cC5nZXRJ bnN0YW5jZU9mKCJkdWgiKTsKKyAJCWR1aC5zZXRBdHRyaWJ1dGUoImNoYXJzIiwgbmV3IFN0cmlu Z1tdIHsiYSIsImIiLCJjIiwiZCIsImUifSk7CisgCQl0b3Auc2V0QXR0cmlidXRlKCJkIiwgZHVo KTsKKyAJCS8vCitAQCAtNTE5OCw3ICs1MTk4LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3 IFN0cmluZ1RlbXBsYXRlR3JvdXAobmV3IFN0cmluZ1JlYWRlcih0ZW1wbGF0ZXMpKTsKKyAKKy0J CVN0cmluZ1RlbXBsYXRlIGEgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtIik7CisrCQlvcmcuYW50 bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYSA9IGdyb3VwLmdldEluc3RhbmNlT2Yo Im0iKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJhcmdzIiwKKyAJCQkJCSAgIG5ldyBTdHJpbmdbXSB7 ImEiLCAiYiIsICJjIn0pOworIAkJYS5zZXRBdHRyaWJ1dGUoImJvZHkiLCAiaT0zOyIpOworQEAg LTUyMTYsNyArNTIxNiw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBTdHJpbmdUZW1wbGF0 ZUdyb3VwKG5ldyBTdHJpbmdSZWFkZXIodGVtcGxhdGVzKSk7CisgCistCQlTdHJpbmdUZW1wbGF0 ZSBtID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigibSIpOworKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBs YXRlLlN0cmluZ1RlbXBsYXRlIG0gPSBncm91cC5nZXRJbnN0YW5jZU9mKCJtIik7CisgCQltLnNl dEF0dHJpYnV0ZSgiYm9keSIsICJpPTM7Iik7CisgCQkvLyBtYWtlIGl0IHdyYXAgYmVjYXVzZSBv ZiAiKSB0aHJvd3MgSWNrIHsgIiBsaXRlcmFsCisgCQlTdHJpbmcgZXhwZWN0aW5nID0KK0BAIC01 MjMzLDggKzUyMzMsOCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMK KyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworIAorLQkJU3RyaW5nVGVtcGxhdGUg dG9wID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigidG9wIik7CistCQlTdHJpbmdUZW1wbGF0ZSBhID0g Z3JvdXAuZ2V0SW5zdGFuY2VPZigiYXJyYXkiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSB0b3AgPSBncm91cC5nZXRJbnN0YW5jZU9mKCJ0b3AiKTsKKysJCW9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBhID0gZ3JvdXAuZ2V0SW5zdGFu Y2VPZigiYXJyYXkiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJ2YWx1ZXMiLAorIAkJCQkJICAgbmV3 IGludFtdIHszLDksMjAsMiwxLDQsNiwzMiw1LDYsNzcsODg4LDIsMSw2LDMyLDUsNiw3NywKKyAJ CQkJCQk0LDksMjAsMiwxLDQsNjMsOSwyMCwyLDEsNCw2LDMyLDUsNiw3Nyw2LDMyLDUsNiw3NywK K0BAIC01MjYxLDcgKzUyNjEsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4 dGVuZHMKKyAgICAgcHVibGljIHZvaWQgdGVzdEJhY2tzbGFzaCgpIHRocm93cyBFeGNlcHRpb24g eworICAgICAgICAgU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgICAgICAgICAgICAgICAg IG5ldyBTdHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0Iik7CistICAgICAgICBTdHJpbmdUZW1wbGF0 ZSB0ID0gZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiXFwiKTsKKysgICAgICAgIG9yZy5hbnRs ci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZGVmaW5lVGVtcGxhdGUo InQiLCAiXFwiKTsKKyAgICAgICAgIFN0cmluZyBleHBlY3Rpbmc9IlxcIjsKKyAgICAgICAgIGFz c2VydEVxdWFscyhleHBlY3RpbmcsIHQudG9TdHJpbmcoKSk7CisgICAgIH0KK0BAIC01MjY5LDcg KzUyNjksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAg cHVibGljIHZvaWQgdGVzdEJhY2tzbGFzaDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAg IFN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorICAgICAgICAgICAgICAgICBuZXcgU3RyaW5n VGVtcGxhdGVHcm91cCgidGVzdCIpOworLSAgICAgICAgU3RyaW5nVGVtcGxhdGUgdCA9IGdyb3Vw LmRlZmluZVRlbXBsYXRlKCJ0IiwgIlxcICIpOworKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3Rl bXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5kZWZpbmVUZW1wbGF0ZSgidCIsICJcXCAi KTsKKyAgICAgICAgIFN0cmluZyBleHBlY3Rpbmc9IlxcICI7CisgICAgICAgICBhc3NlcnRFcXVh bHMoZXhwZWN0aW5nLCB0LnRvU3RyaW5nKCkpOworICAgICB9CitAQCAtNTI3Nyw3ICs1Mjc3LDcg QEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCXB1YmxpYyB2b2lk IHRlc3RFc2NhcGVFc2NhcGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRl R3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIpOworLQkJ U3RyaW5nVGVtcGxhdGUgdCA9IGdyb3VwLmRlZmluZVRlbXBsYXRlKCJ0IiwgIlxcXFwkdiQiKTsK KysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gZ3JvdXAuZGVm aW5lVGVtcGxhdGUoInQiLCAiXFxcXCR2JCIpOworIAkJdC5zZXRBdHRyaWJ1dGUoInYiLCAiSm9l Iik7CisgCQkvL1N5c3RlbS5vdXQucHJpbnRsbih0KTsKKyAJCVN0cmluZyBleHBlY3Rpbmc9Ilxc Sm9lIjsKK0BAIC01Mjg3LDcgKzUyODcsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBs YXRlIGV4dGVuZHMKKyAJcHVibGljIHZvaWQgdGVzdEVzY2FwZUVzY2FwZU5lc3RlZEFuZ2xlKCkg dGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJ bmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiLCBBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVy LmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHQgPSBncm91cC5kZWZpbmVUZW1wbGF0ZSgidCIs ICI8djp7YXxcXFxcPGE+fT4iKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSB0ID0gZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPHY6e2F8XFxcXDxhPn0+Iik7 CisgCQl0LnNldEF0dHJpYnV0ZSgidiIsICJKb2UiKTsKKyAJCS8vU3lzdGVtLm91dC5wcmludGxu KHQpOworIAkJU3RyaW5nIGV4cGVjdGluZz0iXFxKb2UiOworQEAgLTUyOTcsNyArNTI5Nyw3IEBA IHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0 ZXN0TGlzdE9mSW50QXJyYXlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJpbmdUZW1wbGF0 ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRlc3QiLCBBbmds ZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHQgPQorKwkJ b3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorIAkJCWdyb3VwLmRl ZmluZVRlbXBsYXRlKCJ0IiwgIjxkYXRhOmFycmF5KCk+Iik7CisgCQlncm91cC5kZWZpbmVUZW1w bGF0ZSgiYXJyYXkiLCAiWzxpdDplbGVtZW50KCk7IHNlcGFyYXRvcj1cIixcIj5dIik7CisgCQln cm91cC5kZWZpbmVUZW1wbGF0ZSgiZWxlbWVudCIsICI8aXQ+Iik7CitAQCAtNTMxNSw3ICs1MzE1 LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCXB1YmxpYyB2 b2lkIHRlc3ROdWxsT3B0aW9uU2luZ2xlTnVsbFZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Cisg CQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoInRlc3QiLCBBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1Rl bXBsYXRlIHQgPQorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQg PQorIAkJCWdyb3VwLmRlZmluZVRlbXBsYXRlKCJ0IiwgIjxkYXRhOyBudWxsPVwiMFwiPiIpOwor IAkJLy9TeXN0ZW0ub3V0LnByaW50bG4odCk7CisgCQlTdHJpbmcgZXhwZWN0aW5nPSIwIjsKK0BA IC01MzI1LDcgKzUzMjUsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJcHVibGljIHZvaWQgdGVzdE51bGxPcHRpb25IYXNFbXB0eU51bGxWYWx1ZSgpIHRocm93 cyBFeGNlcHRpb24geworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJCW5ldyBT dHJpbmdUZW1wbGF0ZUdyb3VwKCJ0ZXN0IiwgQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFz cyk7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0KKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSB0ID0KKyAJCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgidCIsICI8ZGF0YTsg bnVsbD1cIlwiLCBzZXBhcmF0b3I9XCIsIFwiPiIpOworIAkJTGlzdCBkYXRhID0gbmV3IEFycmF5 TGlzdCgpOworIAkJZGF0YS5hZGQobnVsbCk7CitAQCAtNTMzOCw3ICs1MzM4LDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCXB1YmxpYyB2b2lkIHRlc3ROdWxs T3B0aW9uU2luZ2xlTnVsbFZhbHVlSW5MaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgCQlTdHJp bmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoInRl c3QiLCBBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRl IHQgPQorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPQorIAkJ CWdyb3VwLmRlZmluZVRlbXBsYXRlKCJ0IiwgIjxkYXRhOyBudWxsPVwiMFwiPiIpOworIAkJTGlz dCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworIAkJZGF0YS5hZGQobnVsbCk7CitAQCAtNTM1MSw3 ICs1MzUxLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCXB1 YmxpYyB2b2lkIHRlc3ROdWxsVmFsdWVJbkxpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0 cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgi dGVzdCIsIEFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxh dGUgdCA9CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9Cisg CQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE7IG51bGw9XCItMVwiLCBzZXBhcmF0 b3I9XCIsIFwiPiIpOworIAkJTGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworIAkJZGF0YS5h ZGQobnVsbCk7CitAQCAtNTM2OSw3ICs1MzY5LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgCXB1YmxpYyB2b2lkIHRlc3ROdWxsVmFsdWVJbkxpc3ROb051bGxP cHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAg PQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIsIEFuZ2xlQnJhY2tldFRlbXBs YXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9CisrCQlvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisgCQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUo InQiLCAiPGRhdGE7IHNlcGFyYXRvcj1cIiwgXCI+Iik7CisgCQlMaXN0IGRhdGEgPSBuZXcgQXJy YXlMaXN0KCk7CisgCQlkYXRhLmFkZChudWxsKTsKK0BAIC01Mzg3LDcgKzUzODcsNyBAQCBwdWJs aWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAgICAgcHVibGljIHZvaWQgdGVz dE51bGxWYWx1ZUluTGlzdFdpdGhUZW1wbGF0ZUFwcGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Cisg CQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQkJbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoInRlc3QiLCBBbmdsZUJyYWNrZXRUZW1wbGF0ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1Rl bXBsYXRlIHQgPQorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQg PQorIAkJCWdyb3VwLmRlZmluZVRlbXBsYXRlKCJ0IiwgIjxkYXRhOmFycmF5KCk7IG51bGw9XCIt MVwiLCBzZXBhcmF0b3I9XCIsIFwiPiIpOworIAkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoImFycmF5 IiwgIjxpdD4iKTsKKyAJCUxpc3QgZGF0YSA9IG5ldyBBcnJheUxpc3QoKTsKK0BAIC01NDAzLDcg KzU0MDMsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJcHVi bGljIHZvaWQgdGVzdE51bGxWYWx1ZUluTGlzdFdpdGhUZW1wbGF0ZUFwcGx5TnVsbEZpcnN0VmFs dWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQor IAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIsIEFuZ2xlQnJhY2tldFRlbXBsYXRl TGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9CisrCQlvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisgCQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQi LCAiPGRhdGE6YXJyYXkoKTsgbnVsbD1cIi0xXCIsIHNlcGFyYXRvcj1cIiwgXCI+Iik7CisgCQln cm91cC5kZWZpbmVUZW1wbGF0ZSgiYXJyYXkiLCAiPGl0PiIpOworIAkJTGlzdCBkYXRhID0gbmV3 IEFycmF5TGlzdCgpOworQEAgLTU0MTksNyArNTQxOSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3Ry aW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0ZXN0TnVsbFNpbmdsZVZhbHVlSW5M aXN0V2l0aFRlbXBsYXRlQXBwbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBs YXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgidGVzdCIsIEFu Z2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9Cisr CQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisgCQkJZ3JvdXAu ZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE6YXJyYXkoKTsgbnVsbD1cIi0xXCIsIHNlcGFyYXRv cj1cIiwgXCI+Iik7CisgCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgiYXJyYXkiLCAiPGl0PiIpOwor IAkJTGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworQEAgLTU0MzIsNyArNTQzMiw3IEBAIHB1 YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0ZXN0 TnVsbFNpbmdsZVZhbHVlV2l0aFRlbXBsYXRlQXBwbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAJ CVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCQluZXcgU3RyaW5nVGVtcGxhdGVHcm91 cCgidGVzdCIsIEFuZ2xlQnJhY2tldFRlbXBsYXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVt cGxhdGUgdCA9CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9 CisgCQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE6YXJyYXkoKTsgbnVsbD1cIi0x XCIsIHNlcGFyYXRvcj1cIiwgXCI+Iik7CisgCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgiYXJyYXki LCAiPGl0PiIpOworIAkJU3RyaW5nIGV4cGVjdGluZz0iLTEiOworQEAgLTU0NDAsNyArNTQ0MCw3 IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1 YmxpYyB2b2lkIHRlc3RMZW5ndGhPcCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVt cGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0 ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdU ZW1wbGF0ZSgKKyAJCQkJIiRsZW5ndGgobmFtZXMpJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5z dGFuY2VPZigpOworQEAgLTU0NTIsNyArNTQ1Miw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5n VGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RMZW5ndGhPcFdpdGhN YXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5n VGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9 IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoCisgCQkJCSIkbGVu Z3RoKG5hbWVzKSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC01NDY2 LDcgKzU0NjYsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJ fQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0TGVuZ3RoT3BXaXRoU2V0KCkgdGhyb3dzIEV4Y2VwdGlv biB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGxlbmd0aChuYW1lcykkIgorIAkJCSk7 CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNTQ4MCw3ICs1NDgwLDcgQEAgcHVibGlj IGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQg dGVzdExlbmd0aE9wTnVsbCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUg ZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSgKKyAJCQkJIiRsZW5ndGgobmFtZXMpJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VP ZigpOworQEAgLTU0OTAsNyArNTQ5MCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxh dGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RMZW5ndGhPcFNpbmdsZVZhbHVl KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1Rl bXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBu ZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGxlbmd0 aChuYW1lcykkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNTUwMCw3 ICs1NTAwLDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0K KyAKKyAJcHVibGljIHZvaWQgdGVzdExlbmd0aE9wUHJpbWl0aXZlKCkgdGhyb3dzIEV4Y2VwdGlv biB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0gbmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFu dGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAorIAkJCQkiJGxlbmd0aChpbnRzKSQiCisgCQkJKTsK KyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC01NTEwLDcgKzU1MTAsNyBAQCBwdWJsaWMg Y2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0 ZXN0TGVuZ3RoT3BPZkxpc3RXaXRoTnVsbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmlu Z1RlbXBsYXRlIGUgPSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVt cGxhdGUuU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3Ry aW5nVGVtcGxhdGUoCisgCQkJCSIkbGVuZ3RoKGRhdGEpJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0 SW5zdGFuY2VPZigpOworQEAgLTU1MjUsNyArNTUyNSw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3Ry aW5nVGVtcGxhdGUgZXh0ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RTdHJpcE9wT2ZM aXN0V2l0aE51bGxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistCQlTdHJpbmdUZW1wbGF0ZSBlID0g bmV3IFN0cmluZ1RlbXBsYXRlKAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlIGUgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKAor IAkJCQkiJHN0cmlwKGRhdGEpJCIKKyAJCQkpOworIAkJZSA9IGUuZ2V0SW5zdGFuY2VPZigpOwor QEAgLTU1NDAsNyArNTU0MCw3IEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0 ZW5kcworIAl9CisgCisgCXB1YmxpYyB2b2lkIHRlc3RTdHJpcE9wT2ZMaXN0T2ZMaXN0c1dpdGhO dWxscygpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJp bmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBl ID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRz dHJpcChkYXRhKTp7bGlzdCB8ICRzdHJpcChsaXN0KSR9OyBzZXBhcmF0b3I9XCIsXCIkIgorIAkJ CSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitAQCAtNTU2Miw3ICs1NTYyLDcgQEAgcHVi bGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZv aWQgdGVzdFN0cmlwT3BPZlNpbmdsZUFsdCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5n VGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1w bGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSgKKyAJCQkJIiRzdHJpcChkYXRhKSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldElu c3RhbmNlT2YoKTsKK0BAIC01NTcyLDcgKzU1NzIsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmlu Z1RlbXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0U3RyaXBPcE9mTnVs bCgpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdU ZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0g bmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRzdHJp cChkYXRhKSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3RhbmNlT2YoKTsKK0BAIC01NTg4LDcg KzU1ODgsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVuZHMKKyAJCQk7 CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJCQluZXcgU3RyaW5nVGVtcGxhdGVH cm91cChuZXcgU3RyaW5nUmVhZGVyKHRlbXBsYXRlcykpOworLQkJU3RyaW5nVGVtcGxhdGUgZSA9 IGdyb3VwLmdldEluc3RhbmNlT2YoImEiKTsKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSBlID0gZ3JvdXAuZ2V0SW5zdGFuY2VPZigiYSIpOworIAkJTGlzdCBuYW1l cyA9IG5ldyBBcnJheUxpc3QoKTsKKyAJCW5hbWVzLmFkZCgiVGVyIik7CisgCQluYW1lcy5hZGQo bnVsbCk7CitAQCAtNTU5OSw3ICs1NTk5LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1w bGF0ZSBleHRlbmRzCisgCX0KKyAKKyAJcHVibGljIHZvaWQgdGVzdExlbmd0aE9wT2ZTdHJpcHBl ZExpc3RXaXRoTnVsbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy0JCVN0cmluZ1RlbXBsYXRlIGUg PSBuZXcgU3RyaW5nVGVtcGxhdGUoCisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5n VGVtcGxhdGUgZSA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUo CisgCQkJCSIkbGVuZ3RoKHN0cmlwKGRhdGEpKSQiCisgCQkJKTsKKyAJCWUgPSBlLmdldEluc3Rh bmNlT2YoKTsKK0BAIC01NjE0LDcgKzU2MTQsNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1Rl bXBsYXRlIGV4dGVuZHMKKyAJfQorIAorIAlwdWJsaWMgdm9pZCB0ZXN0TGVuZ3RoT3BPZlN0cmlw cGVkTGlzdFdpdGhOdWxsc0Zyb250QW5kQmFjaygpIHRocm93cyBFeGNlcHRpb24geworLQkJU3Ry aW5nVGVtcGxhdGUgZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0 ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5T dHJpbmdUZW1wbGF0ZSgKKyAJCQkJIiRsZW5ndGgoc3RyaXAoZGF0YSkpJCIKKyAJCQkpOworIAkJ ZSA9IGUuZ2V0SW5zdGFuY2VPZigpOworQEAgLTU2MzgsOCArNTYzOCw4IEBAIHB1YmxpYyBjbGFz cyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAlwdWJsaWMgdm9pZCB0ZXN0TWFwS2V5cygp IHRocm93cyBFeGNlcHRpb24geworIAkJU3RyaW5nVGVtcGxhdGVHcm91cCBncm91cCA9CisgCQkJ bmV3IFN0cmluZ1RlbXBsYXRlR3JvdXAoImR1bW15IiwgIi4iLCBBbmdsZUJyYWNrZXRUZW1wbGF0 ZUxleGVyLmNsYXNzKTsKKy0JCVN0cmluZ1RlbXBsYXRlIHQgPQorLQkJCW5ldyBTdHJpbmdUZW1w bGF0ZShncm91cCwKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0 ID0KKysJCQluZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlKGdyb3Vw LAorIAkJCQkiPGFNYXAua2V5czp7a3w8az46PGFNYXAuKGspPn07IHNlcGFyYXRvcj1cIiwgXCI+ Iik7CisgCQlIYXNoTWFwIG1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CisgCQltYXAucHV0KCJp bnQiLCIwIik7CitAQCAtNTY1MSw4ICs1NjUxLDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgCXB1YmxpYyB2b2lkIHRlc3RNYXBWYWx1ZXMoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKKyAJCVN0cmluZ1RlbXBsYXRlR3JvdXAgZ3JvdXAgPQorIAkJCW5ldyBTdHJpbmdU ZW1wbGF0ZUdyb3VwKCJkdW1teSIsICIuIiwgQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhlci5jbGFz cyk7CistCQlTdHJpbmdUZW1wbGF0ZSB0ID0KKy0JCQluZXcgU3RyaW5nVGVtcGxhdGUoZ3JvdXAs CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisrCQkJbmV3 IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwKKyAJCQkJIjxh TWFwLnZhbHVlczsgc2VwYXJhdG9yPVwiLCBcIj4gPGFNYXAuKFwiaVwiK1wibnRcIik+Iik7Cisg CQlIYXNoTWFwIG1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CisgCQltYXAucHV0KCJpbnQiLCIw Iik7CitAQCAtNTY2NSw4ICs1NjY1LDggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQkvLyBtdXN0IGdldCBiYWNrIGFuIEludGVnZXIgZnJvbSBrZXlzIG5vdCBh IHRvU3RyaW5nKCknZCB2ZXJzaW9uCisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIGdyb3VwID0KKyAJ CQluZXcgU3RyaW5nVGVtcGxhdGVHcm91cCgiZHVtbXkiLCAiLiIsIEFuZ2xlQnJhY2tldFRlbXBs YXRlTGV4ZXIuY2xhc3MpOworLQkJU3RyaW5nVGVtcGxhdGUgdCA9CistCQkJbmV3IFN0cmluZ1Rl bXBsYXRlKGdyb3VwLAorKwkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRl IHQgPQorKwkJCW5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3Jv dXAsCisgCQkJCSI8YU1hcC5rZXlzOntrfDxrPjo8YU1hcC4oayk+fTsgc2VwYXJhdG9yPVwiLCBc Ij4iKTsKKyAJCU1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOworIAkJbWFwLnB1dChuZXcgSW50ZWdl cigxKSxuZXcgQXJyYXlMaXN0KCl7e2FkZCgiaWNrIik7IGFkZCgiZm9vIik7fX0pOworQEAgLTU3 NDQsMTggKzU3NDQsMTggQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRz CisgCQlTdHJpbmdUZW1wbGF0ZUdyb3VwIHN1Ykdyb3VwID0gbmV3IFN0cmluZ1RlbXBsYXRlR3Jv dXAoCisgCQkJbmV3IFN0cmluZ1JlYWRlcihzdWJHcm91cFN0cmluZyksIEFuZ2xlQnJhY2tldFRl bXBsYXRlTGV4ZXIuY2xhc3MpOworIAkJc3ViR3JvdXAuc2V0U3VwZXJHcm91cChzdXBlckdyb3Vw KTsKKy0JCVN0cmluZ1RlbXBsYXRlIGEgPSBzdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJhIik7Cisr CQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYSA9IHN1Ykdyb3VwLmdl dEluc3RhbmNlT2YoImEiKTsKKyAJCWEuc2V0QXR0cmlidXRlKCJ4IiwgImZvbyIpOworIAkJYXNz ZXJ0RXF1YWxzKCJzdXBlci5hIiwgYS50b1N0cmluZygpKTsKKy0JCVN0cmluZ1RlbXBsYXRlIGIg PSBzdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJiIik7CisrCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUgYiA9IHN1Ykdyb3VwLmdldEluc3RhbmNlT2YoImIiKTsKKyAJCWFz c2VydEVxdWFscygic3ViLmNzdXBlci5iIiwgYi50b1N0cmluZygpKTsKKy0JCVN0cmluZ1RlbXBs YXRlIGMgPSBzdWJHcm91cC5nZXRJbnN0YW5jZU9mKCJjIik7CisrCQlvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgYyA9IHN1Ykdyb3VwLmdldEluc3RhbmNlT2YoImMiKTsK KyAJCWFzc2VydEVxdWFscygic3ViLmMiLCBjLnRvU3RyaW5nKCkpOworIAl9CisgCisgCS8qKiBB ZGRlZCBmZWF0dXJlIGZvciBTVC0yMSAqLworIAlwdWJsaWMgdm9pZCB0ZXN0TGlzdExpdGVyYWxX aXRoRW1wdHlFbGVtZW50cygpIHRocm93cyBFeGNlcHRpb24geworLQkJU3RyaW5nVGVtcGxhdGUg ZSA9IG5ldyBTdHJpbmdUZW1wbGF0ZSgKKysJCW9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJp bmdUZW1wbGF0ZSBlID0gbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0 ZSgKKyAJCQkJIiRbXCJUZXJcIiwsXCJKZXNzZVwiXTp7biB8ICRpJDokbiR9OyBzZXBhcmF0b3I9 XCIsIFwiLCBudWxsPVwiXCIkIgorIAkJCSk7CisgCQllID0gZS5nZXRJbnN0YW5jZU9mKCk7CitA QCAtNTc2Nyw3ICs1NzY3LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRl bmRzCisgCX0KKyAKKyAgICAgcHVibGljIHZvaWQgdGVzdFRlbXBsYXRlQXBwbGljYXRpb25Bc09w dGlvblZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CistICAgICAgICBTdHJpbmdUZW1wbGF0ZSBz dCA9bmV3IFN0cmluZ1RlbXBsYXRlKAorKyAgICAgICAgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlIHN0ID1uZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1Rl bXBsYXRlKAorICAgICAgICAgICAgICAgICAiVG9rZW5zIDogPHJ1bGVzOyBzZXBhcmF0b3I9bmFt ZXM6ezxpdD59PiA7IiwKKyAgICAgICAgICAgICAgICAgQW5nbGVCcmFja2V0VGVtcGxhdGVMZXhl ci5jbGFzcyk7CisgICAgICAgICBzdC5zZXRBdHRyaWJ1dGUoInJ1bGVzIiwgIkEiKTsKCmRpZmYg LS1naXQgYS9zdHJpbmd0ZW1wbGF0ZS0zLjIuMS1kZXByZWNhdGVkLnBhdGNoIGIvc3RyaW5ndGVt cGxhdGUtMy4yLjEtZGVwcmVjYXRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5iM2RiYWEyCi0tLSAvZGV2L251bGwKKysrIGIvc3RyaW5ndGVtcGxhdGUtMy4yLjEt ZGVwcmVjYXRlZC5wYXRjaApAQCAtMCwwICsxLDI0MSBAQAorLS0tIHNyYy9vcmcvYW50bHIvc3Ry aW5ndGVtcGxhdGUvbGFuZ3VhZ2UvQVNURXhwci5qYXZhLm9yaWcJMjAyNS0wNy0wNSAxMzoyOToz OC41MzUwNTE1ODkgLTA2MDAKKysrKyBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1 YWdlL0FTVEV4cHIuamF2YQkyMDI1LTA3LTA1IDE1OjIxOjExLjQyNzI3MjA3MyAtMDYwMAorQEAg LTI2Myw4ICsyNjMsOCBAQCBwdWJsaWMgY2xhc3MgQVNURXhwciBleHRlbmRzIEV4cHIgeworIAkJ CWlmICggbnVtRW1wdHk9PW51bUF0dHJpYnV0ZXMgKSB7CisgCQkJCWJyZWFrOworIAkJCX0KKy0J CQlhcmd1bWVudENvbnRleHQucHV0KERFRkFVTFRfSU5ERVhfVkFSSUFCTEVfTkFNRSwgbmV3IElu dGVnZXIoaSsxKSk7CistCQkJYXJndW1lbnRDb250ZXh0LnB1dChERUZBVUxUX0lOREVYMF9WQVJJ QUJMRV9OQU1FLCBuZXcgSW50ZWdlcihpKSk7CisrCQkJYXJndW1lbnRDb250ZXh0LnB1dChERUZB VUxUX0lOREVYX1ZBUklBQkxFX05BTUUsIEludGVnZXIudmFsdWVPZihpKzEpKTsKKysJCQlhcmd1 bWVudENvbnRleHQucHV0KERFRkFVTFRfSU5ERVgwX1ZBUklBQkxFX05BTUUsIEludGVnZXIudmFs dWVPZihpKSk7CisgCQkJb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIGVt YmVkZGVkID0gdGVtcGxhdGVUb0FwcGx5LmdldEluc3RhbmNlT2YoKTsKKyAJCQllbWJlZGRlZC5z ZXRFbmNsb3NpbmdJbnN0YW5jZShzZWxmKTsKKyAJCQllbWJlZGRlZC5zZXRBcmd1bWVudENvbnRl eHQoYXJndW1lbnRDb250ZXh0KTsKK0BAIC0zMjMsOCArMzIzLDggQEAgcHVibGljIGNsYXNzIEFT VEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJCQkJCWFyZ3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9B VFRSSUJVVEVfTkFNRSwgaXRoVmFsdWUpOworIAkgICAgICAgICAgICAgICAgYXJndW1lbnRDb250 ZXh0LnB1dChERUZBVUxUX0FUVFJJQlVURV9OQU1FX0RFUFJFQ0FURUQsIGl0aFZhbHVlKTsKKyAJ CQkJfQorLQkJCQlhcmd1bWVudENvbnRleHQucHV0KERFRkFVTFRfSU5ERVhfVkFSSUFCTEVfTkFN RSwgbmV3IEludGVnZXIoaSsxKSk7CistCQkJCWFyZ3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9J TkRFWDBfVkFSSUFCTEVfTkFNRSwgbmV3IEludGVnZXIoaSkpOworKwkJCQlhcmd1bWVudENvbnRl eHQucHV0KERFRkFVTFRfSU5ERVhfVkFSSUFCTEVfTkFNRSwgSW50ZWdlci52YWx1ZU9mKGkrMSkp OworKwkJCQlhcmd1bWVudENvbnRleHQucHV0KERFRkFVTFRfSU5ERVgwX1ZBUklBQkxFX05BTUUs IEludGVnZXIudmFsdWVPZihpKSk7CisgICAgICAgICAgICAgICAgIGVtYmVkZGVkLnNldEFyZ3Vt ZW50Q29udGV4dChhcmd1bWVudENvbnRleHQpOworICAgICAgICAgICAgICAgICBldmFsdWF0ZUFy Z3VtZW50cyhlbWJlZGRlZCk7CisgICAgICAgICAgICAgICAgIC8qCitAQCAtMzU4LDggKzM1OCw4 IEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4dGVuZHMgRXhwciB7CisgCQkJCWFyZ3VtZW50Q29u dGV4dC5wdXQoREVGQVVMVF9BVFRSSUJVVEVfTkFNRSwgYXR0cmlidXRlVmFsdWUpOworIAkJCQlh cmd1bWVudENvbnRleHQucHV0KERFRkFVTFRfQVRUUklCVVRFX05BTUVfREVQUkVDQVRFRCwgYXR0 cmlidXRlVmFsdWUpOworIAkJCX0KKy0JCQlhcmd1bWVudENvbnRleHQucHV0KERFRkFVTFRfSU5E RVhfVkFSSUFCTEVfTkFNRSwgbmV3IEludGVnZXIoMSkpOworLQkJCWFyZ3VtZW50Q29udGV4dC5w dXQoREVGQVVMVF9JTkRFWDBfVkFSSUFCTEVfTkFNRSwgbmV3IEludGVnZXIoMCkpOworKwkJCWFy Z3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9JTkRFWF9WQVJJQUJMRV9OQU1FLCBJbnRlZ2VyLnZh bHVlT2YoMSkpOworKwkJCWFyZ3VtZW50Q29udGV4dC5wdXQoREVGQVVMVF9JTkRFWDBfVkFSSUFC TEVfTkFNRSwgSW50ZWdlci52YWx1ZU9mKDApKTsKKyAgICAgICAgICAgICBlbWJlZGRlZC5zZXRB cmd1bWVudENvbnRleHQoYXJndW1lbnRDb250ZXh0KTsKKyAgICAgICAgICAgICBldmFsdWF0ZUFy Z3VtZW50cyhlbWJlZGRlZCk7CisgICAgICAgICAgICAgcmV0dXJuIGVtYmVkZGVkOworQEAgLTEw OTMsNyArMTA5Myw3IEBAIHB1YmxpYyBjbGFzcyBBU1RFeHByIGV4dGVuZHMgRXhwciB7CisgCSAq LworIAlwdWJsaWMgT2JqZWN0IGxlbmd0aChPYmplY3QgYXR0cmlidXRlKSB7CisgCQlpZiAoIGF0 dHJpYnV0ZSA9PSBudWxsKSB7CistCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKDApOworKwkJCXJldHVy biBJbnRlZ2VyLnZhbHVlT2YoMCk7CisgCQl9CisgCQlpbnQgaSA9IDE7CQkvLyB3ZSBoYXZlIGF0 IGxlYXN0IG9uZSBvZiBzb21ldGhpbmcuIEl0ZXJhdG9yIGFuZCBhcnJheXMgbWlnaHQgYmUgZW1w dHkuCisgCQlpZiAoYXR0cmlidXRlIGluc3RhbmNlb2YgTWFwKSB7CitAQCAtMTEzMCw3ICsxMTMw LDcgQEAgcHVibGljIGNsYXNzIEFTVEV4cHIgZXh0ZW5kcyBFeHByIHsKKyAJCQkJaSsrOworIAkJ CX0KKyAJCX0KKy0JCXJldHVybiBuZXcgSW50ZWdlcihpKTsKKysJCXJldHVybiBJbnRlZ2VyLnZh bHVlT2YoaSk7CisgCX0KKyAKKyAJcHVibGljIE9iamVjdCBnZXRPcHRpb24oU3RyaW5nIG5hbWUp IHsKKy0tLSBzcmMvb3JnL2FudGxyL3N0cmluZ3RlbXBsYXRlL2xhbmd1YWdlL2V2YWwuZy5vcmln CTIwMjUtMDctMDUgMTM6MTg6NTQuMDA2MTg2MTY0IC0wNjAwCisrKysgc3JjL29yZy9hbnRsci9z dHJpbmd0ZW1wbGF0ZS9sYW5ndWFnZS9ldmFsLmcJMjAyNS0wNy0wNSAxNToyMTo1MS44ODI5Njk1 NTQgLTA2MDAKK0BAIC0yNjIsNyArMjYyLDcgQEAgYXR0cmlidXRlIHJldHVybnMgW09iamVjdCB2 YWx1ZT1udWxsXQorICAgICAgICAgdmFsdWU9c2VsZi5nZXRBdHRyaWJ1dGUoaTMuZ2V0VGV4dCgp KTsKKyAgICAgICAgIH0KKyAKKy0gICAgfCAgIGk6SU5UIHt2YWx1ZT1uZXcgSW50ZWdlcihpLmdl dFRleHQoKSk7fQorKyAgICB8ICAgaTpJTlQge3ZhbHVlPUludGVnZXIudmFsdWVPZihpLmdldFRl eHQoKSk7fQorIAorICAgICB8ICAgczpTVFJJTkcKKyAgICAgCXsKKy0tLSBzcmMvb3JnL2FudGxy L3N0cmluZ3RlbXBsYXRlL1N0cmluZ1RlbXBsYXRlLmphdmEub3JpZwkyMDA5LTA5LTIyIDE1OjAw OjE3LjAwMDAwMDAwMCAtMDYwMAorKysrIHNyYy9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUvU3Ry aW5nVGVtcGxhdGUuamF2YQkyMDI1LTA3LTA1IDE1OjE5OjE4LjQ2MDMwMzYzNSAtMDYwMAorQEAg LTU0MSw3ICs1NDEsNyBAQCBwdWJsaWMgY2xhc3MgU3RyaW5nVGVtcGxhdGUgeworIAorIAkvKiog Q29udmVuaWVuY2UgbWV0aG9kIHRvIGJveCBpbnRzICovCisgCXB1YmxpYyB2b2lkIHNldEF0dHJp YnV0ZShTdHJpbmcgbmFtZSwgaW50IHZhbHVlKSB7CistCQlzZXRBdHRyaWJ1dGUobmFtZSwgbmV3 IEludGVnZXIodmFsdWUpKTsKKysJCXNldEF0dHJpYnV0ZShuYW1lLCBJbnRlZ2VyLnZhbHVlT2Yo dmFsdWUpKTsKKyAJfQorIAorIAkvKiogU2V0IGFuIGFnZ3JlZ2F0ZSBhdHRyaWJ1dGUgd2l0aCB0 d28gdmFsdWVzLiAgVGhlIGF0dHJpYnV0ZSBuYW1lCistLS0gdGVzdC9vcmcvYW50bHIvc3RyaW5n dGVtcGxhdGUvdGVzdC9UZXN0U3RyaW5nVGVtcGxhdGUuamF2YS5vcmlnCTIwMjUtMDctMDUgMTU6 MTY6NDIuODM2Nzk5MTk3IC0wNjAwCisrKysgdGVzdC9vcmcvYW50bHIvc3RyaW5ndGVtcGxhdGUv dGVzdC9UZXN0U3RyaW5nVGVtcGxhdGUuamF2YQkyMDI1LTA3LTA1IDE1OjI1OjMwLjYyNzMwNjcz OSAtMDYwMAorQEAgLTE2MzIsMTEgKzE2MzIsMTEgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdU ZW1wbGF0ZSBleHRlbmRzCisgCQlvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxh dGUgdCA9CisgCQkJbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShn cm91cCwKKyAJCQkJCSAgIiRpZihiKSR4JGVuZGlmJCAkaWYoIWIpJHkkZW5kaWYkIik7CistCQl0 LnNldEF0dHJpYnV0ZSgiYiIsIG5ldyBCb29sZWFuKHRydWUpKTsKKysJCXQuc2V0QXR0cmlidXRl KCJiIiwgQm9vbGVhbi5UUlVFKTsKKyAJCWFzc2VydEVxdWFscyh0LnRvU3RyaW5nKCksICJ4ICIp OworIAorIAkJdCA9IHQuZ2V0SW5zdGFuY2VPZigpOworLQkJdC5zZXRBdHRyaWJ1dGUoImIiLCBu ZXcgQm9vbGVhbihmYWxzZSkpOworKwkJdC5zZXRBdHRyaWJ1dGUoImIiLCBCb29sZWFuLkZBTFNF KTsKKyAJCWFzc2VydEVxdWFscygiIHkiLCB0LnRvU3RyaW5nKCkpOworIAl9CisgCitAQCAtMTY2 OCw3ICsxNjY4LDcgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisg ICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9CisgICAg ICAgICAgICAgbmV3IG9yZy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91 cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIiRpZihuYW1lczp7JGl0JH0pJEZhaWwhJGVuZGlm JCAkaWYoIW5hbWVzOnskaXQkfSkkV29ya3MhJGVuZGlmJCIpOworLSAgICAgICAgdC5zZXRBdHRy aWJ1dGUoImIiLCBuZXcgQm9vbGVhbih0cnVlKSk7CisrICAgICAgICB0LnNldEF0dHJpYnV0ZSgi YiIsIEJvb2xlYW4uVFJVRSk7CisgICAgICAgICBhc3NlcnRFcXVhbHModC50b1N0cmluZygpLCAi IFdvcmtzISIpOworICAgICB9CisgCitAQCAtMTY5MCw3ICsxNjkwLDcgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQlwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1l KCkgeyByZXR1cm4gIkJ1cm5zIjsgfQorIAkJcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsgcmV0 dXJuICJ0b21idUBqZ3VydS5jb20iOyB9CisgCQlwdWJsaWMgU3RyaW5nIGdldEJpbygpIHsgcmV0 dXJuICJTdXBlcmhlcm8gYnkgZGF5Li4uIjsgfQorLQkJcHVibGljIEJvb2xlYW4gZ2V0Q2FuRWRp dCgpIHsgcmV0dXJuIG5ldyBCb29sZWFuKHRydWUpOyB9CisrCQlwdWJsaWMgQm9vbGVhbiBnZXRD YW5FZGl0KCkgeyByZXR1cm4gQm9vbGVhbi5UUlVFOyB9CisgCX0KKyAKKyAgICAgcHVibGljIHZv aWQgdGVzdE9iamVjdFByb3BlcnR5UmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CitAQCAt MjkwNiwxMCArMjkwNiwxMCBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAgICAgICAgIGdyb3VwLnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKTsKKyAgICAgICAgIG9y Zy5hbnRsci5zdHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZSB0ID0gbmV3IG9yZy5hbnRsci5z dHJpbmd0ZW1wbGF0ZS5TdHJpbmdUZW1wbGF0ZShncm91cCwKKyAgICAgICAgICAgICAiJHVzZXJz OnskaWYoaXQub2spJCRpdC5uYW1lJCRlbmRpZiR9OyBzZXBhcmF0b3I9XCIsXCIkIik7CistICAg ICAgICB0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIlRlcmVuY2UiLCBuZXcgQm9v bGVhbih0cnVlKSk7CistICAgICAgICB0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9Iiwg IlRvbSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7CistICAgICAgICB0LnNldEF0dHJpYnV0ZSgidXNl cnMue25hbWUsb2t9IiwgIkZyYW5rIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworLSAgICAgICAgdC5z ZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJKb2hubnkiLCBuZXcgQm9vbGVhbihmYWxz ZSkpOworKyAgICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJUZXJlbmNl IiwgQm9vbGVhbi5UUlVFKTsKKysgICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxv a30iLCAiVG9tIiwgQm9vbGVhbi5GQUxTRSk7CisrICAgICAgICB0LnNldEF0dHJpYnV0ZSgidXNl cnMue25hbWUsb2t9IiwgIkZyYW5rIiwgQm9vbGVhbi5UUlVFKTsKKysgICAgICAgIHQuc2V0QXR0 cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiSm9obm55IiwgQm9vbGVhbi5GQUxTRSk7CisgICAg ICAgICAvLyBlbXB0eSBjb25kaXRpb25hbCB2YWx1ZXMgZ2V0IG5vIHNlcGFyYXRvcgorICAgICAg ICAgU3RyaW5nIGV4cGVjdGluZz0iVGVyZW5jZSxGcmFuayI7CisgICAgICAgICBTdHJpbmcgcmVz dWx0ID0gdC50b1N0cmluZygpOworQEAgLTI5MjMsMTAgKzI5MjMsMTAgQEAgcHVibGljIGNsYXNz IFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAgICBncm91cC5zZXRFcnJvckxpc3Rl bmVyKGVycm9ycyk7CisgICAgICAgICBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVt cGxhdGUgdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3Jv dXAsCisgICAgICAgICAgICAgIiR1c2Vyczp7JGlmKGl0Lm9rKSQkaXQubmFtZSQkZW5kaWYkfTsg c2VwYXJhdG9yPVwiLFwiJCIpOworLSAgICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1l LG9rfSIsICJUZXJlbmNlIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworLSAgICAgICAgdC5zZXRBdHRy aWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJUb20iLCBuZXcgQm9vbGVhbihmYWxzZSkpOworLSAg ICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJGcmFuayIsIG5ldyBCb29s ZWFuKGZhbHNlKSk7CistICAgICAgICB0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9Iiwg IkpvaG5ueSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7CisrICAgICAgICB0LnNldEF0dHJpYnV0ZSgi dXNlcnMue25hbWUsb2t9IiwgIlRlcmVuY2UiLCBCb29sZWFuLlRSVUUpOworKyAgICAgICAgdC5z ZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJUb20iLCBCb29sZWFuLkZBTFNFKTsKKysg ICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiRnJhbmsiLCBCb29sZWFu LkZBTFNFKTsKKysgICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiSm9o bm55IiwgQm9vbGVhbi5GQUxTRSk7CisgICAgICAgICAvLyBlbXB0eSBjb25kaXRpb25hbCB2YWx1 ZXMgZ2V0IG5vIHNlcGFyYXRvcgorICAgICAgICAgU3RyaW5nIGV4cGVjdGluZz0iVGVyZW5jZSI7 CisgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gdC50b1N0cmluZygpOworQEAgLTI5NDAsMTAgKzI5 NDAsMTAgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgICAgICAg ICBncm91cC5zZXRFcnJvckxpc3RlbmVyKGVycm9ycyk7CisgICAgICAgICBvcmcuYW50bHIuc3Ry aW5ndGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUgdCA9IG5ldyBvcmcuYW50bHIuc3RyaW5ndGVtcGxh dGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgICAgICAgICAgICAgIiR1c2Vyczp7JGlmKGl0Lm9r KSQkaXQubmFtZSQkZW5kaWYkJGlmKGl0Lm9rKSQkaXQubmFtZSQkZW5kaWYkfTsgc2VwYXJhdG9y PVwiLFwiJCIpOworLSAgICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJU ZXJlbmNlIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKKy0gICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1 c2Vycy57bmFtZSxva30iLCAiVG9tIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworLSAgICAgICAgdC5z ZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1lLG9rfSIsICJGcmFuayIsIG5ldyBCb29sZWFuKHRydWUp KTsKKy0gICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiSm9obm55Iiwg bmV3IEJvb2xlYW4odHJ1ZSkpOworKyAgICAgICAgdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntuYW1l LG9rfSIsICJUZXJlbmNlIiwgQm9vbGVhbi5GQUxTRSk7CisrICAgICAgICB0LnNldEF0dHJpYnV0 ZSgidXNlcnMue25hbWUsb2t9IiwgIlRvbSIsIEJvb2xlYW4uVFJVRSk7CisrICAgICAgICB0LnNl dEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIkZyYW5rIiwgQm9vbGVhbi5UUlVFKTsKKysg ICAgICAgIHQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiSm9obm55IiwgQm9vbGVh bi5UUlVFKTsKKyAgICAgICAgIC8vIGVtcHR5IGNvbmRpdGlvbmFsIHZhbHVlcyBnZXQgbm8gc2Vw YXJhdG9yCisgICAgICAgICBTdHJpbmcgZXhwZWN0aW5nPSJUb21Ub20sRnJhbmtGcmFuayxKb2hu bnlKb2hubnkiOworICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHQudG9TdHJpbmcoKTsKK0BAIC0y OTU3LDEwICsyOTU3LDEwIEBAIHB1YmxpYyBjbGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5k cworIAkJZ3JvdXAuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOworIAkJb3JnLmFudGxyLnN0cmlu Z3RlbXBsYXRlLlN0cmluZ1RlbXBsYXRlIHQgPSBuZXcgb3JnLmFudGxyLnN0cmluZ3RlbXBsYXRl LlN0cmluZ1RlbXBsYXRlKGdyb3VwLAorIAkJCSIkdXNlcnM6eyRpZihpdC5vaykkJGl0Lm5hbWUk JGVsc2UkJGVuZGlmJH07IHNlcGFyYXRvcj1cIixcIiQiKTsKKy0JCXQuc2V0QXR0cmlidXRlKCJ1 c2Vycy57bmFtZSxva30iLCAiVGVyZW5jZSIsIG5ldyBCb29sZWFuKHRydWUpKTsKKy0JCXQuc2V0 QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiVG9tIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsK Ky0JCXQuc2V0QXR0cmlidXRlKCJ1c2Vycy57bmFtZSxva30iLCAiRnJhbmsiLCBuZXcgQm9vbGVh bih0cnVlKSk7CistCQl0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9IiwgIkpvaG5ueSIs IG5ldyBCb29sZWFuKGZhbHNlKSk7CisrCQl0LnNldEF0dHJpYnV0ZSgidXNlcnMue25hbWUsb2t9 IiwgIlRlcmVuY2UiLCBCb29sZWFuLlRSVUUpOworKwkJdC5zZXRBdHRyaWJ1dGUoInVzZXJzLntu YW1lLG9rfSIsICJUb20iLCBCb29sZWFuLkZBTFNFKTsKKysJCXQuc2V0QXR0cmlidXRlKCJ1c2Vy cy57bmFtZSxva30iLCAiRnJhbmsiLCBCb29sZWFuLlRSVUUpOworKwkJdC5zZXRBdHRyaWJ1dGUo InVzZXJzLntuYW1lLG9rfSIsICJKb2hubnkiLCBCb29sZWFuLkZBTFNFKTsKKyAJCS8vIGVtcHR5 IGNvbmRpdGlvbmFsIHZhbHVlcyBnZXQgbm8gc2VwYXJhdG9yCisgCQlTdHJpbmcgZXhwZWN0aW5n PSJUZXJlbmNlLCxGcmFuaywiOworIAkJU3RyaW5nIHJlc3VsdCA9IHQudG9TdHJpbmcoKTsKK0BA IC01MzI5LDcgKzUzMjksNyBAQCBwdWJsaWMgY2xhc3MgVGVzdFN0cmluZ1RlbXBsYXRlIGV4dGVu ZHMKKyAJCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgidCIsICI8ZGF0YTsgbnVsbD1cIlwiLCBzZXBh cmF0b3I9XCIsIFwiPiIpOworIAkJTGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworIAkJZGF0 YS5hZGQobnVsbCk7CistCQlkYXRhLmFkZChuZXcgSW50ZWdlcigxKSk7CisrCQlkYXRhLmFkZChJ bnRlZ2VyLnZhbHVlT2YoMSkpOworIAkJdC5zZXRBdHRyaWJ1dGUoImRhdGEiLCBkYXRhKTsKKyAJ CVN0cmluZyBleHBlY3Rpbmc9IiwgMSI7CisgCQlhc3NlcnRFcXVhbHMoZXhwZWN0aW5nLCB0LnRv U3RyaW5nKCkpOworQEAgLTUzNTUsMTAgKzUzNTUsMTAgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJp bmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE7 IG51bGw9XCItMVwiLCBzZXBhcmF0b3I9XCIsIFwiPiIpOworIAkJTGlzdCBkYXRhID0gbmV3IEFy cmF5TGlzdCgpOworIAkJZGF0YS5hZGQobnVsbCk7CistCQlkYXRhLmFkZChuZXcgSW50ZWdlcigx KSk7CisrCQlkYXRhLmFkZChJbnRlZ2VyLnZhbHVlT2YoMSkpOworIAkJZGF0YS5hZGQobnVsbCk7 CistCQlkYXRhLmFkZChuZXcgSW50ZWdlcigzKSk7CistCQlkYXRhLmFkZChuZXcgSW50ZWdlcig0 KSk7CisrCQlkYXRhLmFkZChJbnRlZ2VyLnZhbHVlT2YoMykpOworKwkJZGF0YS5hZGQoSW50ZWdl ci52YWx1ZU9mKDQpKTsKKyAJCWRhdGEuYWRkKG51bGwpOworIAkJdC5zZXRBdHRyaWJ1dGUoImRh dGEiLCBkYXRhKTsKKyAJCS8vU3lzdGVtLm91dC5wcmludGxuKHQpOworQEAgLTUzNzMsMTAgKzUz NzMsMTAgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBleHRlbmRzCisgCQkJZ3Jv dXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE7IHNlcGFyYXRvcj1cIiwgXCI+Iik7CisgCQlM aXN0IGRhdGEgPSBuZXcgQXJyYXlMaXN0KCk7CisgCQlkYXRhLmFkZChudWxsKTsKKy0JCWRhdGEu YWRkKG5ldyBJbnRlZ2VyKDEpKTsKKysJCWRhdGEuYWRkKEludGVnZXIudmFsdWVPZigxKSk7Cisg CQlkYXRhLmFkZChudWxsKTsKKy0JCWRhdGEuYWRkKG5ldyBJbnRlZ2VyKDMpKTsKKy0JCWRhdGEu YWRkKG5ldyBJbnRlZ2VyKDQpKTsKKysJCWRhdGEuYWRkKEludGVnZXIudmFsdWVPZigzKSk7Cisr CQlkYXRhLmFkZChJbnRlZ2VyLnZhbHVlT2YoNCkpOworIAkJZGF0YS5hZGQobnVsbCk7CisgCQl0 LnNldEF0dHJpYnV0ZSgiZGF0YSIsIGRhdGEpOworIAkJLy9TeXN0ZW0ub3V0LnByaW50bG4odCk7 CitAQCAtNTM5MSw5ICs1MzkxLDkgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0ZSBl eHRlbmRzCisgCQkJZ3JvdXAuZGVmaW5lVGVtcGxhdGUoInQiLCAiPGRhdGE6YXJyYXkoKTsgbnVs bD1cIi0xXCIsIHNlcGFyYXRvcj1cIiwgXCI+Iik7CisgCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgi YXJyYXkiLCAiPGl0PiIpOworIAkJTGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworLQkJZGF0 YS5hZGQobmV3IEludGVnZXIoMCkpOworKwkJZGF0YS5hZGQoSW50ZWdlci52YWx1ZU9mKDApKTsK KyAJCWRhdGEuYWRkKG51bGwpOworLQkJZGF0YS5hZGQobmV3IEludGVnZXIoMikpOworKwkJZGF0 YS5hZGQoSW50ZWdlci52YWx1ZU9mKDIpKTsKKyAJCWRhdGEuYWRkKG51bGwpOworIAkJdC5zZXRB dHRyaWJ1dGUoImRhdGEiLCBkYXRhKTsKKyAJCVN0cmluZyBleHBlY3Rpbmc9IjAsIC0xLCAyLCAt MSI7CitAQCAtNTQwOCw5ICs1NDA4LDkgQEAgcHVibGljIGNsYXNzIFRlc3RTdHJpbmdUZW1wbGF0 ZSBleHRlbmRzCisgCQlncm91cC5kZWZpbmVUZW1wbGF0ZSgiYXJyYXkiLCAiPGl0PiIpOworIAkJ TGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOworIAkJZGF0YS5hZGQobnVsbCk7CistCQlkYXRh LmFkZChuZXcgSW50ZWdlcigwKSk7CisrCQlkYXRhLmFkZChJbnRlZ2VyLnZhbHVlT2YoMCkpOwor IAkJZGF0YS5hZGQobnVsbCk7CistCQlkYXRhLmFkZChuZXcgSW50ZWdlcigyKSk7CisrCQlkYXRh LmFkZChJbnRlZ2VyLnZhbHVlT2YoMikpOworIAkJdC5zZXRBdHRyaWJ1dGUoImRhdGEiLCBkYXRh KTsKKyAJCVN0cmluZyBleHBlY3Rpbmc9Ii0xLCAwLCAtMSwgMiI7CisgCQlhc3NlcnRFcXVhbHMo ZXhwZWN0aW5nLCB0LnRvU3RyaW5nKCkpOworQEAgLTU2NjksOCArNTY2OSw4IEBAIHB1YmxpYyBj bGFzcyBUZXN0U3RyaW5nVGVtcGxhdGUgZXh0ZW5kcworIAkJCW5ldyBvcmcuYW50bHIuc3RyaW5n dGVtcGxhdGUuU3RyaW5nVGVtcGxhdGUoZ3JvdXAsCisgCQkJCSI8YU1hcC5rZXlzOntrfDxrPjo8 YU1hcC4oayk+fTsgc2VwYXJhdG9yPVwiLCBcIj4iKTsKKyAJCU1hcCBtYXAgPSBuZXcgSGFzaE1h cCgpOworLQkJbWFwLnB1dChuZXcgSW50ZWdlcigxKSxuZXcgQXJyYXlMaXN0KCl7e2FkZCgiaWNr Iik7IGFkZCgiZm9vIik7fX0pOworLQkJbWFwLnB1dChuZXcgSW50ZWdlcigyKSxuZXcgQXJyYXlM aXN0KCl7e2FkZCgieCIpOyBhZGQoInkiKTt9fSk7CisrCQltYXAucHV0KEludGVnZXIudmFsdWVP ZigxKSxuZXcgQXJyYXlMaXN0KCl7e2FkZCgiaWNrIik7IGFkZCgiZm9vIik7fX0pOworKwkJbWFw LnB1dChJbnRlZ2VyLnZhbHVlT2YoMiksbmV3IEFycmF5TGlzdCgpe3thZGQoIngiKTsgYWRkKCJ5 Iik7fX0pOworIAkJdC5zZXRBdHRyaWJ1dGUoImFNYXAiLCBtYXApOworICAgICAgICAgCisgICAg ICAgICBTdHJpbmcgcmVzID0gdC50b1N0cmluZygpOwoKZGlmZiAtLWdpdCBhL3N0cmluZ3RlbXBs YXRlLnNwZWMgYi9zdHJpbmd0ZW1wbGF0ZS5zcGVjCmluZGV4IDcyMzQxMWIuLjE5NzIyMjYgMTAw NjQ0Ci0tLSBhL3N0cmluZ3RlbXBsYXRlLnNwZWMKKysrIGIvc3RyaW5ndGVtcGxhdGUuc3BlYwpA QCAtMSwxMyArMSwxOCBAQAogU3VtbWFyeTogQSBKYXZhIHRlbXBsYXRlIGVuZ2luZQogTmFtZTog c3RyaW5ndGVtcGxhdGUKIFZlcnNpb246IDMuMi4xCi1SZWxlYXNlOiAzNyV7P2Rpc3R9CitSZWxl YXNlOiAzOCV7P2Rpc3R9CitMaWNlbnNlOiBCU0QtMy1DbGF1c2UKIFVSTDogaHR0cDovL3d3dy5z dHJpbmd0ZW1wbGF0ZS5vcmcvCiBTb3VyY2UwOiBodHRwOi8vd3d3LnN0cmluZ3RlbXBsYXRlLm9y Zy9kb3dubG9hZC9zdHJpbmd0ZW1wbGF0ZS0le3ZlcnNpb259LnRhci5negogIyBCdWlsZCBqVW5p dCB0ZXN0cyArIG1ha2UgdGhlIGFudGxyMiBnZW5lcmF0ZWQgY29kZSBiZWZvcmUgcHJlcGFyaW5n IHNvdXJjZXMKIFBhdGNoMDogc3RyaW5ndGVtcGxhdGUtMy4xLWJ1aWxkLWp1bml0LnBhdGNoCi0j IEF1dG9tYXRpY2FsbHkgY29udmVydGVkIGZyb20gb2xkIGZvcm1hdDogQlNEIC0gcmV2aWV3IGlz IGhpZ2hseSByZWNvbW1lbmRlZC4KLUxpY2Vuc2U6IExpY2Vuc2VSZWYtQ2FsbGF3YXktQlNECisj IFdpdGggSkRLIDIxIGFuZCBsYXRlciwgU3RyaW5nVGVtcGxhdGUgaXMgYSBuYW1lIGluIGphdmEu bGFuZywgd2hpY2ggbWFrZXMgYQorIyBiYXIgaW5zdGFuY2Ugb2YgdGhlIFN0cmluZ1RlbXBsYXRl IG5hbWUgYW1iaWd1b3VzLiAgT25seSB1c2UgdGhlIG5hbWUgZnVsbHkKKyMgcXVhbGlmaWVkIHRv IGVsaW1pbmF0ZSB0aGUgYW1iaWd1aXR5LgorUGF0Y2gxOiBzdHJpbmd0ZW1wbGF0ZS0zLjIuMS1h bWJpZ3VpdHkucGF0Y2gKKyMgVXBkYXRlIGRlcHJlY2F0ZWQgdXNlcyBvZiAibmV3IEludGVnZXIi IGFuZCAibmV3IEJvb2xlYW4iCitQYXRjaDI6IHN0cmluZ3RlbXBsYXRlLTMuMi4xLWRlcHJlY2F0 ZWQucGF0Y2gKIAogQnVpbGRSZXF1aXJlczogYW50CiBCdWlsZFJlcXVpcmVzOiBhbnQtYW50bHIK QEAgLTMyLDggKzM3LDcgQEAgUmVxdWlyZXM6ICAgICAgIGphdmEtamF2YWRvYwogQVBJIGRvY3Vt ZW50YXRpb24gZm9yICV7bmFtZX0uCiAKICVwcmVwCi0lc2V0dXAgLXEKLSVwYXRjaCAtUDAKKyVh dXRvc2V0dXAgLXAwCiBzZWQgLWkgLWUgJ3Mvc291cmNlPSIxLjQiL3NvdXJjZT0iMS44Ii9nJyBi dWlsZC54bWwKIHNlZCAtaSAtZSAncy90YXJnZXQ9IjEuNCIvdGFyZ2V0PSIxLjgiL2cnIGJ1aWxk LnhtbAogCkBAIC01Niw2ICs2MCwxMSBAQCBhbnQgamF2YWRvY3MgLURwYWNrYWdlcz0gLURqYXZh ZG9jcy5hZGRpdGlvbmFscGFyYW09Ii1YZG9jbGludDpub25lIgogJXtfamF2YWRvY2Rpcn0vJXtu YW1lfQogCiAlY2hhbmdlbG9nCisqIFNhdCBKdWwgMDUgMjAyNSBKZXJyeSBKYW1lcyAgPGxvZ2Fu amVycnlAZ21haWwuY29tPiAtIDMuMi4xLTM4CistIEFkZCBwYXRjaCB0byBmaXggYW1iaWd1b3Vz IHJlZmVyZW5jZXMgdG8gU3RyaW5nVGVtcGxhdGUKKy0gQWRkIHBhdGNoIHRvIGF2b2lkIHVzaW5n IGRlcHJlY2F0ZWQgIm5ldyBJbnRlZ2VyIiBhbmQgIm5ldyBCb29sZWFuIgorLSBDaGFuZ2UgbGlj ZW5zZSB0byBCU0QtMy1DbGF1c2UKKwogKiBTdW4gSmFuIDE5IDIwMjUgRmVkb3JhIFJlbGVhc2Ug RW5naW5lZXJpbmcgPHJlbGVuZ0BmZWRvcmFwcm9qZWN0Lm9yZz4gLSAzLjIuMS0zNwogLSBSZWJ1 aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzQyX01hc3NfUmVi dWlsZAogCg==